Strona 1 z 1
[pascal] błąd w kodzie programu
: 17 lis 2010, 18:37
autor: Wojtol
Witam

Jestem nowy w świecie programowania. Chcę napisać program na wyliczenie pierwiastków równania kwadratowego. Niestety wyskakuje błąd. Proszę o wskazanie mi błędu..

Oto kod programu:
Kod: Zaznacz cały
Program jeden;
Uses
Crt;
var
x1,x2,D,a,b,c:Real;
Begin
clrscr;
writeln ('wprowad« a:');
readln (a);
writeln ('wprowad« b:');
readln (b);
writeln ('wprowad« c');
readln (c);
D:=(b*b)-4*a*c;
readln;
x1:=(-b-sqrt(D))/(2*a);
x2:=(-b+D)/2*a;
If (D<0) then
Begin
writeln ('brak rozwiĄzania');
Else (D>0)
writeln ('rozwiĄzania to:');
writeln (a,b);
end;
readln;
end.
Odp: [pascal] błąd w kodzie programu
: 17 lis 2010, 19:03
autor: Hauleth
Hmmm... o ile wiem to crt nie dość, że jest przestarzałe to jeszcze stricte windowsowe, taki odpowiednik conio.h. Czyli "użyj a cię zabiję".
Odp: [pascal] błąd w kodzie programu
: 17 lis 2010, 19:20
autor: Wojtol
Muszę używać tego programu w szkole

Może ktoś wie jak rozwiązać problem?
Odp: [pascal] błąd w kodzie programu
: 17 lis 2010, 19:49
autor: karmelek
To powinno się liczyć tylko, jeżeli D>=0
Kod: Zaznacz cały
Else (D>0)
writeln ('rozwiĄzania to:');
writeln (a,b);
A nie powinno zwracać x1 i x2?
Odp: [pascal] błąd w kodzie programu
: 17 lis 2010, 20:21
autor: lesiu1111
Jest:
Powinno być:
Kod: Zaznacz cały
x1:=(-b-sqrt(D))/(2*a);
x2:=(-b+sqrt(D))/2*a;
No i oczywiście powinno być zwracane x1, x2 zamiast a i b.
Odp: [pascal] błąd w kodzie programu
: 17 lis 2010, 20:27
autor: mutopompka
Jak już oczywiście
Do tego warunek, aby przy D=0 liczył tylko x1 (bo ma tylko 1 rozwiązanie (podwójne) = wierzchołek paraboli znajduje się na osi X): x1=x2=p = -b/2a
A jaki błąd wyskakuje?
Odp: [pascal] błąd w kodzie programu
: 17 lis 2010, 21:51
autor: karmelek
Kod: Zaznacz cały
If (D<0) then
Begin
writeln ('brak rozwiĄzania');
Else (D>0)
Zapewne błąd kompilacji spowodowany brakiem enda, jakby ta instrukcja grupująca tu miała jakikolwiek sens.
Odp: [pascal] błąd w kodzie programu
: 18 lis 2010, 15:27
autor: lesiu1111
mutopompka pisze: Jak już oczywiście
Przecież przypisanie wartości do zmiennej to w Pascalu :=, więc nie wiem czemu miałoby być =.
A zresztą jeden pierwiastek jest z + przy pierwiastku z delty, a drugi z - przy pierwiastku z delty, a Ty sugerujesz, że zarówno X1, jak i X2 ma być z - przy pierwiastku z delty?
Nie ma też znaczenia, czy zapisze się SQRT, czy też sqrt. W Pascalu to jedno i to samo.
Odp: [pascal] błąd w kodzie programu
: 18 lis 2010, 18:12
autor: mutopompka
Po 1: Moja pomyłka, oczywiście, że ma być x2:=
Po 2. A gdzie u Ciebie jest x2 z pierwiastkiem ???? Moja pomyłka jest taka, że zamiast + dałem -, więc poprawnie powinno być:
Napisałem SQRT z dużej, abyś umieścił pierwiastek w wyliczeniu zmiennej x2 (patrz Twój 1 post).
I ponawiam pytanie: jaki błąd występuje u Ciebie?
Odp: [pascal] błąd w kodzie programu
: 18 lis 2010, 21:53
autor: warlock24
Bład to najpewniej Runtime Error 200 - dzielenie przez zero. Najwyraźniej autor ma większy problem z matematyką niż z programowaniem więc zalecałbym uporządkowanie wiedzy z zakresu funkcji kwadratowej.
Kod: Zaznacz cały
Mamy wartości a, b, c
delta = b^2 - 4*a*c
jeżeli delta > 0 to
x1 = -b - sqrt(delta) / 2*a
x2 = -b + sqrt(delta) / 2*a
wyświetl wynik
zakończ program
jeżeli delta = 0 to
x1 = -b/2*a
wyświetl wynik
zakończ program
jeżeli delta < 0 to
Wyświetl komunikat o braku rozwiązań
koniec programu
teraz kodowanie powinno pójść o wiele sprawniej
PS
"zakończ programu" to wywołanie funkcji exit;
Odp: [pascal] błąd w kodzie programu
: 18 lis 2010, 22:41
autor: karmelek
Kod: Zaznacz cały
"zakończ programu" to wywołanie funkcji exit;
a to niby w Pascalu jaki to ma sens?
Odp: [pascal] błąd w kodzie programu
: 19 lis 2010, 01:31
autor: warlock24
karmelek pisze:Kod: Zaznacz cały
"zakończ programu" to wywołanie funkcji exit;
a to niby w Pascalu jaki to ma sens?
Znaczy o co się dokładnie pytasz? Co nie miałoby sensu w pascalu? Wykorzystanie exit zamiast else if?
Odp: [pascal] błąd w kodzie programu
: 19 lis 2010, 19:37
autor: Szmitas
W przypadku delty < 0 nie ma rozwiązań rzeczywistych, ale są zespolone. Opracuj to również jeśli chcesz być dokładny, bo stwierdzenie:
If (D<0) then
Begin
writeln ('brak rozwiĄzania');
to bzdura

Odp: [pascal] błąd w kodzie programu
: 19 lis 2010, 20:21
autor: tristan
karmelek pisze:Kod: Zaznacz cały
"zakończ programu" to wywołanie funkcji exit;
a to niby w Pascalu jaki to ma sens?
Taki sam, jak w innych językach -- zrobienie dupiatego algorytmu z wieloma wyjściami.
Odp: [pascal] błąd w kodzie programu
: 19 lis 2010, 21:17
autor: mutopompka
@szmitas: a czy w liceum/technikum są liczby zespolone? Raczej nie. Jak już to na studiach.
Odp: [pascal] błąd w kodzie programu
: 19 lis 2010, 21:23
autor: warlock24
tristan pisze:Taki sam, jak w innych językach -- zrobienie dupiatego algorytmu z wieloma wyjściami.
Nie powiedziałbym że kod z wieloma wyjściami jest dupny.
Istnieją 2 rodzaje kodu: kod przyjazny programiście i kod przyjazny komputerow.
Tak samo są programiści piszący na szybko i tacy co zawsze chcą wszystko optymalizować aby zaoszczędzić choćby 1 cykl procesora czy 1 kb pamięci.
Odp: [pascal] błąd w kodzie programu
: 20 lis 2010, 01:30
autor: tristan
warlock24 pisze:Nie powiedziałbym że kod z wieloma wyjściami jest dupny.
Istnieją 2 rodzaje kodu: kod przyjazny programiście i kod przyjazny komputerow.
Tak samo są programiści piszący na szybko i tacy co zawsze chcą wszystko optymalizować aby zaoszczędzić choćby 1 cykl procesora czy 1 kb pamięci.
No ale co zaoszczędzisz takim kodem? Sądzisz, że będzie optymalny przez te wyjścia? Że optymalizator kompilatora sobie nie poradzi? Ja tam wolę jednak kod przyjazny programiście, zwłaszcza, że w tak prostym przypadku nie ma co optymalizować i cudować. Kod ma być czytelny i jasny.
Odp: [pascal] błąd w kodzie programu
: 20 lis 2010, 23:34
autor: Hauleth
mutopompka pisze:@szmitas: a czy w liceum/technikum są liczby zespolone? Raczej nie. Jak już to na studiach.
Zależy od klasy, czasami nauczyciel zrobi jako ciekawostkę. A z resztą to nie jest wielki problem je przerobić samemu. Tylko jedna zasada więcej, że i^2 = -1 i nie trzeba więcej.
Odp: [pascal] błąd w kodzie programu
: 22 lis 2010, 21:44
autor: Wojtol
Dzięki za odpowiedzi

Już mam ten program napisany, wygląda on następująco:
Kod: Zaznacz cały
program deelta;
Uses
Crt;
var
x1,x2,d,a,b,c:Real;
Begin
clrscr;
writeln ('wprowad« a');
readln (a);
writeln ('wprowad« b');
readln (b);
writeln ('wprowad« c');
readln (c);
d:=(b*b)-4*a*c;
writeln ('delta to ',d:0:2);
readln;
If (d<0) then
begin
writeln ('brak rozwiĄzaä');
end
Else If (d=0) then
Begin
x1:=((-b)/(2*a));
writeln ('Pierwiastek to ',x1:0:2)
end
Else If (d>0) then
Begin x1:=(-b-d)/(2*a);
x2:=(-b+d)/(2*a);
writeln ('pierwiastkami rownania sĄ x1 = ',x1:0:2 ,' oraz x2 = ',x2:0:2);
end;
readln;
end.
.