.coma. [ Pretorianin ]
program w pascalu
co jest źle w tym programie?
program trygonometria;
var sin, cos, tg, ctg, a, x, y, w, r: integer;
procedure trojkat;
begin
writeln (' ^ [y]');
writeln (' | /| M=(x,y)');
writeln (' | / |');
writeln (' | r / |');
writeln (' | / |y');
writeln (' | /\ |');
writeln ('_|/_L|__|___> ');
writeln ('0| x [x]');
end;
procedure czytaj;
begin
write('podaj wartosc zmiennej x (zmienna x musi byc wieksza od 0)');
readln(x);
writeln ('podaj warosc zmiennej y (zmienna y musi byc wieksza od 0)');
readln(y);
end;
procedure wybor;
begin
writeln ('wartosc jakiej funkcji trygonometryczne chcesz policzyc?');
writeln ('jesli chcesz policzyc wartosc sinusa konta L wcisnij 1');
writeln ('jesli chcesz policzyc wartosc cosinusa konta L wcisnij 2');
writeln ('jesli chcesz policzyc wartosc tangensa konta L wcisnij 3');
writeln ('jesli chcesz policzyc wartosc cotangensa konta L wcisnij 4');
readln(w);
end;
procedure licz;
begin
if w=1 then begin a:=x*x+y*y; r:=sqrt(a); sin:=y/r; end;
else
if w=2 then begin a:=x*x+y*y; r:=sqrt(a); cos:=x/r; end;
if w=3 then begin tg:=y/x end;
if w=4 then begin ctg:=x/y; end;
end;
begin
clrscr;
trojkat;
czytaj;
wybor;
licz;
readln;
end.
frer [ Freelancer ]
- funkcje i liczy powinny być typu real
- inne nazwy zmiennych, bo takie funkcje juz istnieją
- pisze się katy a nie konty jak już coś
- przy procedurach chyba trzeba zadeklarować zmienne o ile pamiętam
.coma. [ Pretorianin ]
frer-> dzieki za pomoc. zmienne z tego co apmietam deklaruje sie przy funkcjach
no to mam:
program trygonometria;
uses crt;
var s, c, t, h, a, x, y, w, r: real;
procedure trojkat;
begin
writeln (' ^ [y]');
writeln (' | /| M=(x,y)');
writeln (' | / |');
writeln (' | r / |');
writeln (' | / |y');
writeln (' | /\ |');
writeln ('_|/_L|__|___> ');
writeln ('0| x [x]');
end;
procedure czytaj;
begin
write('podaj wartosc zmiennej x (zmienna x musi byc wieksza od 0)');
readln(x);
writeln ('podaj warosc zmiennej y (zmienna y musi byc wieksza od 0)');
readln(y);
end;
procedure wybor;
begin
writeln ('wartosc jakiej funkcji trygonometryczne chcesz policzyc?');
writeln ('jesli chcesz policzyc wartosc sinusa kata L wcisnij 1');
writeln ('jesli chcesz policzyc wartosc cosinusa kata L wcisnij 2');
writeln ('jesli chcesz policzyc wartosc tangensa kata L wcisnij 3');
writeln ('jesli chcesz policzyc wartosc cotangensa kata L wcisnij 4');
readln(w);
end;
procedure licz;
begin
if w=1 then begin a:=x*x+y*y; r:=sqrt(a); s:=y/r; end;
if w=2 then begin a:=x*x+y*y; r:=sqrt(a); c:=x/r; end;
if w=3 then begin t:=y/x end;
if w=4 then begin h:=x/y; end;
end;
begin
clrscr;
trojkat;
czytaj;
wybor;
licz;
readln;
end.
i nadal cos jest źle, niby sie kompiluje ale nie działa,
Scatterhead [ łapaj dzień ]
1. Wartosci do procedury powinny być przekazywane poprzez parametry zamiast trzymac je w zmiennych globalnych, jest to zły styl programowania.
2. Czy wogóle w pascalu da się zadeklarować procedure bez nawiasów do parametrów?
3. w procedurze "licz":
dlaczego po pierwszym ifie jest else?
zamiast używać wielu ifów w tym wypadku lepiej użyć struktury "case"
4. co ma robic procedura trojkat oprocz wypisywania tych szlaczkow?
5. Co sie dzieje z wynikiem funkcji licz? te zmienne nie są później ani wypisywane, ani używane.
6. program się kompiluje?
a propo drugiego programu:
nie działa tzn? wywala błąd? źle wypisuje dane?
wystarczyłoby użyć jednego zmiennej jako wynik wszystkich operacji i wypisywac w kazdej procedurze z tej samej zmiennej. Nie potrzebnie do każdej procedury (iloraz, reszta itp) dodajesz nowa zmienna, może być zawsze ta sama, przecież po wypisaniu już się z nią nic nie dzieje.
.coma. [ Pretorianin ]
Scatterhead--> dzieki za rady juz poprawiam, co do drugiego programu to omyłkowo wkleiłam nie to co trzeba
frer [ Freelancer ]
Ja miałem w zeszłym semestrze podstawy informatyki z tego to już nie pamiętam nawet za bardzo. Dziwi mnie w ogóle, że tego jeszcze uczą na innych kierunkach niż informatyka, bo imho tak naprawdę to jest bezużyteczne. :P
.coma. [ Pretorianin ]
frer--> chodze do klasy o profimu mat-fiz inf w innych klasach infy wogóle nie mają, tylko w 1 technologie informacyjna,a tak na marginesie to u nas też nie ucza, tylko kazą sobie w książce przeczytać :/
Scatterhead-->
1. przyznam się, ze nie bardzo rozumiem o co chodzi ;)
2. hmm nie no rocedure sie da, nie da sie funkcji
3.z ta procedura nei moge dac sobie rady, poprawiłam i mam tak:
procedure wybor;
begin
writeln ('wartosc jakiej funkcji trygonometryczne chcesz policzyc?');
writeln ('jesli chcesz policzyc wartosc sinusa kata L wcisnij 1');
writeln ('jesli chcesz policzyc wartosc cosinusa kata L wcisnij 2');
writeln ('jesli chcesz policzyc wartosc tangensa kata L wcisnij 3');
writeln ('jesli chcesz policzyc wartosc cotangensa kata L wcisnij 4');
readln(w);
case w of
1: begin a:=x*x+y*y; r:=sqrt(a); s:=y/r; readln(s); end;
2: begin a:=x*x+y*y; r:=sqrt(a); c:=x/r; readln(c); end;
3: begin t:=y/x; readln(t); end;
4: begin h:=x/y; readln(h); end;
else writeln ('wybrales newlasciwa liczbe')
end;
jak powinnam to case zdeklarowac?
4. Gol obcina jak gdzies jest wiecej spacji, procedura ta "rysuje trójkąt" żeby było wiadomo co to jest x co to y itd
5. Dzieki za uwage, tego nie zauważyłam :)
6. w obecnej wersji, keidy chciałam wykorzystac to case, program sie nie kompiluje, wyskakuje błąd "39 ordinal expression expected" (kursor przy of)
.coma. [ Pretorianin ]
czy ktos moze mi poweidziec gdzie jest błąd w tej procedurze?
procedure wybor;
begin
writeln ('wartosc jakiej funkcji trygonometryczne chcesz policzyc?');
writeln ('jesli chcesz policzyc wartosc sinusa kata L wcisnij 1');
writeln ('jesli chcesz policzyc wartosc cosinusa kata L wcisnij 2');
writeln ('jesli chcesz policzyc wartosc tangensa kata L wcisnij 3');
writeln ('jesli chcesz policzyc wartosc cotangensa kata L wcisnij 4');
readln(w);
case w of
1: begin a:=x*x+y*y; r:=sqrt(a); s:=y/r; readln(s); end;
2: begin a:=x*x+y*y; r:=sqrt(a); c:=x/r; readln(c); end;
3: begin t:=y/x; readln(t); end;
4: begin h:=x/y; readln(h); end;
else writeln ('wybrales niewlasciwa liczbe')
end;
Scatterhead [ łapaj dzień ]
1,2,3,4 muszą pasować to typu zmiennej jakim jest w, jeżeli ustaliłeś w jako znak, albo string, musisz wziasc przypadki w apostrofy, np:
'1': ...
'2': ....
jeżeli w to integer, to powinno byc OK.
może być tak, że W wogóle nie pasuje do struktury case, z tego co wiem to pasujace typy zmiennych musza byc wyliczalne, np: integer, albo char. (bo jeden znak to tez liczba).
---- to tyle teorii, ale...
ale wyglada na to, że w jest integerem... hmm.. a mozesz napisac jaki blad wywala? albo co sie dzieje?
.coma. [ Pretorianin ]
Scatterhead--> w jest typu real
błąd "39 ordinal expression expected" (kursor przy of)
.coma. [ Pretorianin ]
up
Scatterhead [ łapaj dzień ]
zamien w na integer
.coma. [ Pretorianin ]
Scatterhead--> zmiana na integer rzeczywisie pomaga w skompilowaniu, ale nie moge urzywac liczb calkowitych do wyrazania funkcji trygonometrycznych, wiec musi byc real, spróbowałam wiec zrezygnowac z case i urzyc jednak if...then...else..., program sie kompiluje ale najpierw nie wyswietla wyliczonych wartosci funkcji a potem gdy wybierze sie n zapetla sie
program trygonometria;
uses crt;
var s, c, t, h, a, x, y, w, r: real;
var j:string;
procedure trojkat;
begin
writeln (' ^ [y]');
writeln (' | /| M=(x,y)');
writeln (' | / |');
writeln (' | r / |');
writeln (' | / |y');
writeln (' | /\ |');
writeln ('_|/_L|__|___> ');
writeln ('0| x [x]');
end;
procedure czytaj;
begin
write('podaj wartosc zmiennej x (zmienna x musi byc wieksza od 0)');
readln(x);
writeln ('podaj warosc zmiennej y (zmienna y musi byc wieksza od 0)');
readln(y);
end;
procedure wybor;
begin
writeln ('wartosc jakiej funkcji trygonometryczne chcesz policzyc?');
writeln ('jesli chcesz policzyc wartosc sinusa kata L wcisnij 1');
writeln ('jesli chcesz policzyc wartosc cosinusa kata L wcisnij 2');
writeln ('jesli chcesz policzyc wartosc tangensa kata L wcisnij 3');
writeln ('jesli chcesz policzyc wartosc cotangensa kata L wcisnij 4');
readln(w);
end;
procedure licz;
begin
if w=1 then begin a:=x*x+y*y; r:=sqrt(a); s:=y/r; writeln(s); end
else
if w=2 then begin a:=x*x+y*y; r:=sqrt(a); c:=x/r; writeln(c); end
else
if w=3 then begin t:=y/x; writeln(t); end
else
if w=4 then begin h:=x/y; writeln(h); end;
procedure koniec;
begin
writeln ('czy chcesz dalej liczyc?');
writeln ('wybierz "t" lub "n"');
j:=readkey;
if (j='t') or (j='T') then czytaj; wybor; koniec;
if (j='n') or (j='N') then writeln ('dowidzenia'); delay(5000); halt;
end;
begin
clrscr;
trojkat;
czytaj;
wybor;
koniec;
end.
Scatterhead [ łapaj dzień ]
1. Brak wywolania funkcji licz po wyborze.
2. Niepotrzebne "elsy" po ifach w liczeniu (musisz zrozumieć lepiej ich działanie)
3. W funkcji koniec nie "ubrałeś" w begina i enda wywolan po ifie i stad sie wszystko pieprzylo.
poprawione:
program trygonometria;
uses crt;
var s, c, t, h, a, x, y, w, r: real;
var j:string;
procedure trojkat;
begin
writeln (' ^ [y]');
writeln (' | /| M=(x,y)');
writeln (' | / |');
writeln (' | r / |');
writeln (' | / |y');
writeln (' | /\ |');
writeln ('_|/_L|__|___> ');
writeln ('0| x [x]');
end;
procedure czytaj;
begin
write('podaj wartosc zmiennej x (zmienna x musi byc wieksza od 0)');
readln(x);
writeln ('podaj warosc zmiennej y (zmienna y musi byc wieksza od 0)');
readln(y);
end;
procedure wybor;
begin
writeln ('wartosc jakiej funkcji trygonometryczne chcesz policzyc?');
writeln ('jesli chcesz policzyc wartosc sinusa kata L wcisnij 1');
writeln ('jesli chcesz policzyc wartosc cosinusa kata L wcisnij 2');
writeln ('jesli chcesz policzyc wartosc tangensa kata L wcisnij 3');
writeln ('jesli chcesz policzyc wartosc cotangensa kata L wcisnij 4');
readln(w);
end;
procedure licz;
begin
if w=1 then begin a:=x*x+y*y; r:=sqrt(a); s:=y/r; writeln(s); end;
if w=2 then begin a:=x*x+y*y; r:=sqrt(a); c:=x/r; writeln(c); end;
if w=3 then begin t:=y/x; writeln(t); end;
if w=4 then begin h:=x/y; writeln(h); end;
end;
procedure koniec;
begin
writeln ('czy chcesz dalej liczyc?');
writeln ('wybierz "t" lub "n"');
j:=readkey;
if (j='t') or (j='T') then begin czytaj; wybor; licz; koniec; end;
if (j='n') or (j='N') then begin writeln ('dowidzenia'); delay(5); halt; end;
end;
begin
clrscr;
trojkat;
czytaj;
wybor;
licz;
koniec;
end.
.coma. [ Pretorianin ]
Scatterhead-->dzieki :) A tak na marginesie to jestem dziewczyna ;)
Scatterhead [ łapaj dzień ]
.coma. -> no to przepraszam, myślałem inaczej ;)