problem pascal

PC
  • Rejestracja:prawie 13 lat
  • Ostatnio:prawie 10 lat
  • Postów:3
0

cześć robię program w free pascalu i gdy doszedłem do tego momentu to kompiluje bez problemu ale gdy wprowadzę już liczby to wywala mi błąd w którym jest najpierw ścieżka a potem exited with exitcode = 201 na ogół wywalało mi to gdy były jakieś błędy logiczne.

Program sortowanie;
Uses
Crt;
VAR
j,i,x,n : integer;

a:array of integer;

procedure wypisz_zmienne;

begin
j:=1;
repeat
writeln(a[j]);
j:=j+1;
until j=n;
end;

Begin
clrscr; // czyści ekran
writeln('wprowadź n'); // wyświetla napis wprowadź n
readln(n); // czeka aż użytkownik wprowadzi n
SetLength(a,n); // ustala wielkość tablicy na n
writeln('Wprowadź kolejno ',n,' liczb'); // prosi o wprowadzenie tylu liczb ile wynosi n
for j:=1 to n do read(a[j]); //wczytuje wszystkie elementy tablicy (od 1 do n)
clrscr;
j:=2; //bez kawałka kodu stąd do "wypisz_zmienne;" włącznie też wyskakuje ten błąd

if j>n then
wypisz_zmienne;

readln();

End.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1
Kopiuj
 SetLength(a,n);                // ustala wielkość tablicy na n
   writeln('Wprowadź kolejno ',n,' liczb');         // prosi o wprowadzenie tylu liczb ile wynosi n
         for j:=1 to n do read(a[j]);   

1.Numerowanie tablicy zaczyna się od 0, a nie 1.
2.Robiąc np.setLength(Tablica, 10) masz dostęp do indexów: 0..9, a nie 0..10 (!).


Moje uwagi: ```delphi j:=1; repeat writeln(a[j]); j:=j+1; until j=n; ``` Słyszałeś o pętli "for"? Poza bym bezpieczniejszym warunkiem byłoby `j>=n`.

edytowany 1x, ostatnio: Patryk27
PC
dziękuje wpisałem długość tablicy na n+1 "SetLength(a,n+1); " i wszystko gra chodziło o index akurat łatwiej mi jest od jedynki więc daje n+1 na późniejsze obliczenia to będzie potrzebne, a z pętlą repeat akurat działa program normalnie. tak wiem co to jest for ale repeat jest dla mnie wygodniejszym sposobem. jestem przyzwyczajony o bardzo dużo bym nie skrócił programu w ten sposób ;D
babubabu
głupi jestes... Nie wpisuj SetLength (a,n+1) tylko zostaw n a pętle zrób for j:=0 to n-1 do read(a[j]); Bo tak to nie potrzebnie tablice robisz o 1 element większą...
PC
no ok robię ją o 1 element większą. no i co z tego, już zrobiłem wszystko działa.
1

problem pascal

Ależ DOKŁADNY opis problemu! Gratulujemy głupoty.

cześć robię program w free pascalu i gdy doszedłem do tego momentu to kompiluje bez problemu ale gdy wprowadzę już liczby to wywala mi błąd w którym jest najpierw ścieżka a potem exited with exitcode = 201 na ogół wywalało mi to gdy były jakieś błędy logiczne.

i?

clrscr; // czyści ekran

Dzięki bo nie wiedziałem.

Poza tym nie byłeś łaskaw zadać pytania (to już nawet nikogo nie dziwi).

Ja mam do ciebie śmieszne pytania: Czy czytałeś o tym co może błąd 201 oznaczać? Pewnie nie. Czy używałeś debuggera? Pewnie nie. Czy umiesz myśleć? Pewnie nie.

Naucz się szukać odpowiedzi, a jeżeli pytasz to rób to z głową.

PC
tak przepraszam powinienem zapytać czy nie widzicie jakiegoś błędu w programie. używałem debugera który jest w free pascalu i nie pokazał żadnych błędów, błąd 201 oznacza na ogół jakieś błędy logiczne jak napisałem w temacie, to wiem z doświadczenia może nie jest zbyt duże ale wiem co to jest i nawet napisałem. owszem umiem myśleć, przepraszam jeszcze raz za nie zadanie pytania. sądziłem że to dość oczywiste, widocznie się pomyliłem. a do clrscr napisałem komentarz gdyby przeglądał to ktoś kto na ogół kodzi w innych językach. może to i zbędne ok, ale czy to komuś wadzi/
babubabu
jesteś głupi 2x: 201 Range check error ( Błąd przekroczenia zakresu ) - przyczyny wystąpienia błędu: wyrażenie określające indeks tablicy przekracza określony zakres, przypisanie wartości zmiennej przekraczającej zakres jej typu, przekroczenie zakresu wartości parametru procedury lub funkcji. Pierwszy link po wpisaniu w google: pascal 201 error

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.