[Pascal] Błąd kompilacji


(Blady214) #1

Witam, mam problem, bo kompilator TP pokazuje mi błąd podczas kompilacji, gdzie ja nie widzę go, możecie mi go wskazać:?:

program nowy;

uses crt;

var

a,b,c,x,e,n:word;

begin

clrscr;

writeln('Podaj liczbe');

readln(x);

n:=1;

b:=0;

repeat

begin

c:=x-b*b;

n:=n+1;

end;

until(c=0);

writeln(n);

end.

([alex]) #2

Kompilator kiedy pokazuje błąd to podaje opis tego błędu oraz numer wiersza w którym ten błąd wystąpił.

Błędów składni w tym kodzie niema, natomiast są błędy logiczne - pętla repeat nigdy się nie skończy o ile podana liczba nie jest zerem.


(M@ster) #3

Nie dam głowy ale repeat nie ma bloku begin ... end (no przynajmniej tak jest w Delphi). Pętla repeat kończy się (w sensie składni) w momencie słowa kluczowego until, zatem pewno tutaj tkwi problem. Popraw na coś takiego:

repeat

  c:=x-b*b;

  n:=n+1;

until(c=0);

([alex]) #4

Blok begin end jest traktowany jako jedna instrukcja, wiec

repeat

(Ryan) #5

Zamiast się prześcigać w zgadywaniu, zgodziłbym się z pierwszym komentarzem aleksa - pisanie "znajdźcie mi błąd" kiedy kompilator wyraźnie informuje w czym problem, jest marnowaniem czasu próbujących pomoc. Jaki jest ten błąd i dlaczego treść komunikatu błędu nie pozwoliła Blademu na naprawienie błędu?


(Blady214) #6

No tak, nie napisałem, że kompilator pokazuje mi błąd w 14 wierszu, czyli niby jest źle sformułowane n:=n+1, ale przecież to nie jest błędem.


(Ryan) #7

Komunikaty błędu mają to do siebie, że należy patrzeć także na linię przed i po sugerowanej jako błędna. Poza tym napisz proszę co *dokładnie* wypluł kompilator.


(Blady214) #8

W sumie to nie wywala błędu kompilacji, tylko zapętla bez końca, jak przerywam, to podkreśla mi 14 linię, czyli

n:=n+1

([alex]) #9

Czyli dokładnie to co podałem w pierwszym poście :smiley:

Zmienna c na każdym kroku pętli przyjmuje taką samą wartość równą wprowadzonej liczbie.


(Ryan) #10

Niech mnie ktoś przytuli...

Jak można zawieszający się program nazwać "błędem kompilacji"? Nie, kompilator nie popełnił żadnego błędu. Ty pisząc kod popełniłeś błąd. Dlaczego nie zacząłeś od tego?


(M@ster) #11

Mnie też...

Podświetla Ci linie na której przerwałeś wykonywanie programu, jako że wpadał w pętle nieskończoną to zawsze była ta linia.