GRY-Online.pl --> Archiwum Forum

Ktoś czuje się mocny w programowaniu???

29.12.2006
17:38
smile
[1]

mooris [ Konsul ]

Ktoś czuje się mocny w programowaniu???

Witam.
Zadanie polega na tym:
Program powinien umożliwiać:
• Działania na n wektorach (n=1,..,5),
• Program powinien dawać możliwość: dodawania, odejmowania wektorów oraz wyznaczania ich iloczynów skalarnych, cosinusów kierunkowych, <b>kątów &#945;, &#946;, &#947;, nachylenia wektora wynikowego względem osi X, Y, Z.
</b>

Wrzucam kod:

program podstawy;
USES CRT;
TYPE
Twektor=record
x : integer;
y : integer;
z : integer;
END;

VAR
wek: array[1..5] of Twektor;
wek_h: array[1..2] of Twektor;
k,l,m,n,o:integer;
p,i,r:byte;
a:char;

PROCEDURE czyt_dane;
BEGIN
writeln('Wprowadz liczbe wektorow <1-5>:');
readln(p);
writeln;
IF (p>=1)AND(p<=5) THEN
BEGIN
FOR i:=1 TO p DO
BEGIN
writeln('Wprowadz wspolrzedna x dla wektora ',i);
readln(k);
wek.x:=k;
writeln('Wprowadz wspolrzedna y dla wektora ',i);
readln(l);
wek.y:=l;
writeln('Wprowadz wspolrzedna z dla wektora ',i);
readln(m);
wek.z:=m;
writeln;
END;
END
ELSE writeln('Liczba wektorow musi byc liczba z przedzialu <1-5>!');
END;


PROCEDURE wyb_wek;
BEGIN
writeln('Program wykona wzkazane dzialanie tylko na dwoch wybranych wektorach.');
writeln('Wprowadz numer pierwszego wektora:');
readln(n);
IF (n>=1)AND(n<=p) THEN
BEGIN
wek_h[1]:=wek[n];
writeln('Wprowadz numer drugiego wektora:');
readln(o);
writeln;
IF (o>=1)AND(o<=p) THEN wek_h[2]:=wek[o]
ELSE writeln('Numer wektora musi byc liczba z przedzialu <1-',p,'>!');
writeln;
END
ELSE writeln('Numer wektora musi byc liczba naturalna z przedzialu <1-',p,'>!');

END;





FUNCTION dod_wek:integer;
VAR
suma_x,suma_y,suma_z:integer;

BEGIN
suma_x:=wek_h[1].x + wek_h[2].x;
suma_y:=wek_h[1].y + wek_h[2].y;
suma_z:=wek_h[1].z + wek_h[2].z;
writeln('Postac wektora wypadkowego sumy wektorow:',suma_x,'i + ',suma_y,'j + ',suma_z,'k');
END;



FUNCTION od_wek:integer;
VAR
roz_x,roz_y,roz_z:integer;

BEGIN
roz_x:=wek_h[1].x - wek_h[2].x;
roz_y:=wek_h[1].y - wek_h[2].y;
roz_z:=wek_h[1].z - wek_h[2].z;
writeln('Postać wektora wypadkowego roznicy wektorow:',roz_x,'i + ',roz_y,'j + ',roz_z,'k');
END;



FUNCTION ilocz_wek:integer;
VAR
ilocz_x,ilocz_y,ilocz_z:integer;
BEGIN
ilocz_x:=wek_h[1].x*wek_h[2].x;
ilocz_y:=wek_h[1].y*wek_h[2].y;
ilocz_z:=wek_h[1].z*wek_h[2].z;
writeln('Postać iloczynu skalarnego wektorow:',ilocz_x,'i + ',ilocz_y,'j + ',ilocz_z,'k');
END;



FUNCTION cos_k:real;
VAR
wyp_x,wyp_y,wyp_z:integer;
cos_x,cos_y,cos_z,alfa,beta,gama,modul:real;

BEGIN
wyp_x:=wek_h[1].x + wek_h[2].x;
wyp_y:=wek_h[1].y + wek_h[2].y;
wyp_z:=wek_h[1].z + wek_h[2].z;
modul:=sqrt(sqr(wyp_x)+sqr(wyp_y)+sqr(wyp_z));
IF modul<>0 THEN
BEGIN
cos_x:=wyp_x/modul;
cos_y:=wyp_y/modul;
cos_z:=wyp_z/modul;

writeln('Cosinus kierunkowy skladowej x wektora wypadkowego wynosi:',cos_x:6:3);
writeln('Cosinus kierunkowy skladowej y wektora wypadkowego wynosi:',cos_y:6:3);
writeln('Cosinus kierunkowy skladowej z wektora wypadkowego wynosi:',cos_z:6:3);
END
ELSE writeln('Wypadkowy wektor jest wetorem zerowym!');
END;


PROCEDURE wybor;
BEGIN
writeln('Wybierz nr. dzialania <1-4>');
writeln('1 - Dodawanie');
writeln('2 - Odejmowanie');
writeln('3 - Iloczyn skalarny');
writeln('4 - Wyznaczanie cosinusow kierunkowych oraz katow nachylenia do osi OX, OY i OZ');
readln(r);
IF r=1 THEN dod_wek;
IF r=2 THEN od_wek;

IF r=3 THEN ilocz_wek;
IF r=4 THEN cos_k;
writeln;
END;




BEGIN
czyt_dane;
IF (p>=1)AND(p<=5) THEN
BEGIN
REPEAT
clrscr;
wyb_wek;
IF ((n>=1)AND(n<=p))AND((o>=1)AND(o<=p)) THEN wybor;
writeln;
writeln('Jezeli chcesz wykonac jakies dzialanie ponownie, wcisnij " T ", w przeciwnym wypadku wcicnij "N".');
readln(a);
writeln;
UNTIL (a='N')OR(a='p');
END;
readln;
END.


A teraz problemy:

1) Jak ruszyć te kąty nachylenia? Czy ktoś mógłby coś dopisać??
2) Jażeli program poprosi o wybór dwóch wektorów na których mają przeprowadzone być działania a użytkownik wprowadzi niepoprawne cyfry zostanie wyświetlony komunikat :"Numer wektora musi byc liczba naturalna z przedzialu <1-',p,'>!" ale wypadało by wtedy zeby program wykonywał jakąś pętle i ponownie prosił o wskazania wektorów...No własnie jak to zrobić???


NIE WIEDZIAŁEM JAKĄ KATEGORIĘ WYBRAĆ !!

29.12.2006
17:51
[2]

nagytow [ Firestarter ]

1. To czysta matematyka - znajdz wzory na te katy i po prostu zapisz w pascalu.
2. Zamknij czytanie liczby wektorow w repeat ... until (n>=1) and (n<=5).

29.12.2006
20:14
smile
[3]

mooris [ Konsul ]

Najgorsze jest t,o że wzory znam i wiem jak to wyliczyć na papierze ale barierą dla mnie jest właśnie kod. Nie jestem biegły w te klocki ale próbowałem oczywiście (co widać po tym do czego udało mi się dojść). Niestety teraz ściana..

© 2000-2024 GRY-OnLine S.A.