[pascal] błąd w kodzie programu

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Wojtol
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 30 sty 2007, 20:56
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

[pascal] błąd w kodzie programu

Post 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.
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [pascal] błąd w kodzie programu

Post 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ę".
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
Wojtol
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 30 sty 2007, 20:56
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [pascal] błąd w kodzie programu

Post autor: Wojtol »

Muszę używać tego programu w szkole ;) Może ktoś wie jak rozwiązać problem?
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post autor: karmelek »

Kod: Zaznacz cały

                x1:=(-b-sqrt(D))/(2*a);
                x2:=(-b+D)/2*a;
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?
Wszystkich moderatorów Bóg po śmierci zabiera do nieba, żeby ci dwadzieścia cztery godziny na dobę moderowali modlitwy do niego.
http://karmelek.wordpress.com
inny OS=debian lenny
lesiu1111
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 29 paź 2005, 11:02
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post autor: lesiu1111 »

Jest:

Kod: Zaznacz cały

x1:=(-b-sqrt(D))/(2*a);
x2:=(-b+D)/2*a;
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.
Mess with the best, die like the rest!
Awatar użytkownika
mutopompka
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 18 lip 2010, 21:13
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Lokalizacja: Głogów
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post autor: mutopompka »

Kod: Zaznacz cały

x2 = (-b-SQRT(D))/(2*a)
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?
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post 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.
Wszystkich moderatorów Bóg po śmierci zabiera do nieba, żeby ci dwadzieścia cztery godziny na dobę moderowali modlitwy do niego.
http://karmelek.wordpress.com
inny OS=debian lenny
lesiu1111
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 29 paź 2005, 11:02
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post autor: lesiu1111 »

mutopompka pisze:

Kod: Zaznacz cały

x2 = (-b-SQRT(D))/(2*a)
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.
Mess with the best, die like the rest!
Awatar użytkownika
mutopompka
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 18 lip 2010, 21:13
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Lokalizacja: Głogów
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post 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ć:

Kod: Zaznacz cały

x2:=(-b+sqrt(D))/(2*a)
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?
Awatar użytkownika
warlock24
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 102
Rejestracja: 20 cze 2008, 22:35
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [pascal] błąd w kodzie programu

Post 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
:boat:

PS
"zakończ programu" to wywołanie funkcji exit;
Awatar użytkownika
karmelek
Przyjaciel
Przyjaciel
Posty: 883
Rejestracja: 10 lut 2007, 17:45
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post autor: karmelek »

Kod: Zaznacz cały

"zakończ programu" to wywołanie funkcji exit;
a to niby w Pascalu jaki to ma sens?
Wszystkich moderatorów Bóg po śmierci zabiera do nieba, żeby ci dwadzieścia cztery godziny na dobę moderowali modlitwy do niego.
http://karmelek.wordpress.com
inny OS=debian lenny
Awatar użytkownika
warlock24
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 102
Rejestracja: 20 cze 2008, 22:35
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [pascal] błąd w kodzie programu

Post 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?
Awatar użytkownika
Szmitas
Zakręcona Traszka
Zakręcona Traszka
Posty: 572
Rejestracja: 28 lis 2006, 17:38
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86
Lokalizacja: Luboń
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post 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 :)
www.ubuntu-pomoc.org - tutaj znajdziesz rozwiązanie każdego Twojego problemu.

Chcesz zostać Redaktorem ubuntu-pomoc.org? Skontaktuj się ze mną!
Awatar użytkownika
tristan
Wytworny Kaczor
Wytworny Kaczor
Posty: 333
Rejestracja: 04 maja 2005, 21:46
Wersja Ubuntu: 22.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [pascal] błąd w kodzie programu

Post 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.
Ja
Awatar użytkownika
mutopompka
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 18 lip 2010, 21:13
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Lokalizacja: Głogów
Kontakt:

Odp: [pascal] błąd w kodzie programu

Post autor: mutopompka »

@szmitas: a czy w liceum/technikum są liczby zespolone? Raczej nie. Jak już to na studiach.
Awatar użytkownika
warlock24
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 102
Rejestracja: 20 cze 2008, 22:35
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [pascal] błąd w kodzie programu

Post 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.
Awatar użytkownika
tristan
Wytworny Kaczor
Wytworny Kaczor
Posty: 333
Rejestracja: 04 maja 2005, 21:46
Wersja Ubuntu: 22.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [pascal] błąd w kodzie programu

Post 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.
Ja
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: [pascal] błąd w kodzie programu

Post 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.
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
Wojtol
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 30 sty 2007, 20:56
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

Odp: [pascal] błąd w kodzie programu

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

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 32 gości