GRY-Online.pl --> Archiwum Forum

program w pascalu

23.12.2006
12:34
smile
[1]

.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.

23.12.2006
12:38
smile
[2]

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

23.12.2006
13:03
[3]

.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,

23.12.2006
13:03
[4]

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.

23.12.2006
13:11
[5]

.coma. [ Pretorianin ]

Scatterhead--> dzieki za rady juz poprawiam, co do drugiego programu to omyłkowo wkleiłam nie to co trzeba

23.12.2006
13:13
smile
[6]

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

23.12.2006
13:31
[7]

.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)

23.12.2006
14:10
[8]

.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;

23.12.2006
14:27
[9]

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?

23.12.2006
14:41
[10]

.coma. [ Pretorianin ]

Scatterhead--> w jest typu real
błąd "39 ordinal expression expected" (kursor przy of)

23.12.2006
17:47
[11]

.coma. [ Pretorianin ]

up

23.12.2006
17:49
[12]

Scatterhead [ łapaj dzień ]

zamien w na integer

23.12.2006
18:25
[13]

.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.

23.12.2006
18:53
[14]

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.

23.12.2006
21:52
[15]

.coma. [ Pretorianin ]

Scatterhead-->dzieki :) A tak na marginesie to jestem dziewczyna ;)

23.12.2006
22:56
[16]

Scatterhead [ łapaj dzień ]

.coma. -> no to przepraszam, myślałem inaczej ;)

© 2000-2024 GRY-OnLine S.A.