Exited with exitcode=201

0

Wyskakuje 'Program e:\xxx\nowe.exe exited with exitcode=201'. Kompilacja przebiega pomyślnie, jednak w połowie programu pracę urywa. Proszę o pomoc, gdyż potrzebna mi jest szybka pomoc.

 USES CRT;
VAR
t:array[0..21]of integer;
wynik:array[0..10]of integer;
b:array[0..10]of integer;
h,e:longint;
i:longint;
z:integer;
BEGIN
z:=0;
CLRSCR;
randomize;
i:=0;
REPEAT
i:=i+1;
t[i]:=random(10)+1;
UNTIL i=20;
REPEAT
h:=0;
e:=0;
REPEAT
h:=h+1;
WRITELN(t[h],'*',t[h+1],'=');
e:=e+1;
READ(wynik[e]);
UNTIL h=20;
UNTIL e=10;
IF wynik[1]=b[1] THEN z:=z+1
ELSE BEGIN
textcolor(red);
writeln(wynik[1]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[1]);
END;
IF wynik[2]=b[2] THEN z:=z+1
ELSE BEGIN
textcolor(red);
writeln(wynik[2]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[2]);
END;
IF wynik[3]=b[3] THEN z:=z+1
ELSE BEGIN
textcolor(red);
writeln(wynik[3]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[3]);
END;
IF wynik[4]=b[4] THEN z:=z+1
ELSE BEGIN
textcolor(red);
writeln(wynik[4]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[4]);
END;
IF wynik[5]=b[5] THEN z:=z+1
ELSE BEGIN
textcolor(red);
WRITELN(wynik[5]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[5]);
END;
IF wynik[6]=b[6] THEN z:=z+1
ELSE BEGIN
textcolor(red);
WRITELN(wynik[6]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[6]);
end;
IF wynik[7]=b[7] THEN z:=z+1
ELSE BEGIN
textcolor(red);
WRITELN(wynik[7]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[7]);
END;
IF wynik[8]=b[8] THEN z:=z+1
ELSE BEGIN
textcolor(red);
WRITELN(wynik[8]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[8]);
END;
IF wynik[9]=b[9] THEN z:=z+1
ELSE BEGIN
textcolor(red);
WRITELN(wynik[9]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[9]);
END;
IF wynik[10]=b[10] THEN z:=z+1
ELSE BEGIN
textcolor(red);
WRITELN(wynik[10]);
textcolor(white);
WRITE('- Twój wynik jest zly. Poprawny to: ');
textcolor(green);
WRITELN(b[10]);
END;
textcolor(white);
WRITELN('Ilosc poprawnych odpowiedzi to ',z);
WRITE(z, ' Poprawnych odpowiedzi to ');
textcolor(magenta);
WRITELN(z*1,00, '%');
IF (z=10) AND (z>9.9) THEN
BEGIN
textcolor(white);
writeln('Brawo!!! Otrzymujesz ocene: ');
textcolor(green);
writeln('CELUJACA - 6');
END;
If (z>=8.6) AND (z<=9.9) THEN
Begin
textcolor(white);
writeln('Brawo!!! Otrzymujesz ocene: ');
textcolor(green);
writeln('BARDZO DOBRA - 5');
END;
If (z>=8.5) AND (z<=7.1) THEN
BEGIN
textcolor(white);
writeln('Brawo!!! Otrzymujesz ocene: ');
textcolor(green);
writeln('DOBRA - 4');
END;
If (z>=7.0) AND (z<=5.1) THEN
BEGIN
textcolor(white);
writeln('Brawo!!! Otrzymujesz ocene: ');
textcolor(green);
writeln('DOSTATECZNA - 3');
END;
IF (z>=5.0) AND (z<=3.1) THEN
BEGIN
textcolor(white);
writeln('Brawo!!! Otrzymujesz ocene: ');
textcolor(green);
writeln('DOPUSZCZAJACA - 2');
END;
If (z>=0) AND (z<=3.0) THEN
BEGIN
textcolor(white);
writeln('Brawo!!! Otrzymujesz ocene: ');
textcolor(green); writeln('NIEDOSTATECZNA - 1');
END;
delay(5000);
END.



0

O.O

1.Formatowanie kodu.
2.Kolorowanie składni: <code class="delphi">tutaj kod</code>
3.Don't repeat yourself!!!

Póki nie poprawisz tych 3 rzeczy nikt nie spojrzy nawet na twój kod.

Poza tym oczywiście próbowałeś używać debuggera i nie przyniosło to żadnych rezultatów, prawda?

0
  1. Formatowanie kodu - Było skopiowane ze źródła, tam zapisuje mi bez formatowania, już poprawione.
  2. Jest.
  3. ok.

Tak próbowałem, nic nie dawało.

USES CRT;
VAR
  t:array[0..21]of integer;
  wynik:array[0..10]of integer;
  b:array[0..10]of integer;
  h,e:longint;
  i:longint;
  z:integer;
BEGIN
      z:=0;
 CLRSCR;
  randomize;
      i:=0;
  REPEAT
      i:=i+1;
      t[i]:=random(10)+1;
  UNTIL i=20;
  REPEAT
      h:=0;
      e:=0;
  REPEAT
      h:=h+1;
         WRITELN(t[h],'*',t[h+1],'=');
      e:=e+1;
           READ(wynik[e]);
  UNTIL h=20;
  UNTIL e=10;
     IF wynik[1]=b[1] THEN z:=z+1
        ELSE BEGIN
             textcolor(red);
             writeln(wynik[1]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[1]);
        END;
     IF wynik[2]=b[2] THEN z:=z+1
        ELSE BEGIN
             textcolor(red);
             writeln(wynik[2]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[2]);
        END;
     IF wynik[3]=b[3] THEN z:=z+1
        ELSE BEGIN
             textcolor(red);
             writeln(wynik[3]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[3]);
        END;
     IF wynik[4]=b[4] THEN z:=z+1
     ELSE BEGIN
             textcolor(red);
             writeln(wynik[4]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[4]);
        END;
     IF wynik[5]=b[5] THEN z:=z+1
     ELSE BEGIN
             textcolor(red);
             WRITELN(wynik[5]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[5]);
        END;
     IF wynik[6]=b[6] THEN z:=z+1
     ELSE BEGIN
             textcolor(red);
             WRITELN(wynik[6]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[6]);
        END;
     IF wynik[7]=b[7] THEN z:=z+1
     ELSE BEGIN
             textcolor(red);
             WRITELN(wynik[7]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[7]);
             END;
     IF wynik[8]=b[8] THEN z:=z+1
     ELSE BEGIN
             textcolor(red);
             WRITELN(wynik[8]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[8]);
        END;
     IF wynik[9]=b[9] THEN z:=z+1
     ELSE BEGIN
             textcolor(red);
             WRITELN(wynik[9]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[9]);
        END;
     IF wynik[10]=b[10] THEN z:=z+1
     ELSE BEGIN
             textcolor(red);
             WRITELN(wynik[10]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[10]);
        END;
             textcolor(white);
             WRITELN('Ilosc poprawnych odpowiedzi to ',z);
             WRITE(z, ' Poprawnych odpowiedzi to ');
             textcolor(magenta);
             WRITELN(z*1,00, '%');
     IF (z=10) AND (z>9.9) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('CELUJACA - 6');
        END;
        If (z>=8.6) AND (z<=9.9) THEN
        Begin
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('BARDZO DOBRA - 5');
        END;
        If (z>=8.5) AND (z<=7.1) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('DOBRA - 4');
        END;
        If (z>=7.0) AND (z<=5.1) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('DOSTATECZNA - 3');
        END;
        IF (z>=5.0) AND (z<=3.1) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('DOPUSZCZAJACA - 2');
        END;
        If (z>=0) AND (z<=3.0) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green); writeln('NIEDOSTATECZNA - 1');
        END;
        delay(5000);
END.



 
0

w połowie znaczy gdzie? zapewne to miejsce wystąpienia błędu więc daleko szukać nie musisz
jeszcze tylko użyj F1 lub google żeby wiedzieć co oznacza exitcode 201 (a oznacza wyjechanie za tablicę)

0

Doczytałem, że jest to przez to, że wychodzi po za obszar tablicy. Ale nie mogłem się tego dopatrzeć. Jeżeli źle coś rozumuję, to proszę mnie poprawić, nie jestem jakimś super pro programistą, tylko laikiem, więc spokojnie.
Co do przerywania w połowie jest to od pierwszego "ELSE BEGIN". Nie wiem do teraz jak to naprawić.

0

Użyj debuggera (spytaj googla jak to działa) i naucz się używać procedur/funkcji.

0

A pomógł by mi ktoś i pokazał jak kod mniej więcej powinien wyglądać? Nie jest tak, że nic z nim nawet nie próbowałem i chcę byście wy za mnie zrobili. Męczę się z nim prawie od 10. A program mam na jutro, może dacie mniej więcej wskazówki gdzie i jak poprawić kod?

0

Nie jest tak, że nic z nim nawet nie próbowałem i chcę byście wy za mnie zrobili. Męczę się z nim prawie od 10. A program mam na jutro

Czy naszym problemem jest to jak zarządzasz swoim czasem? Naprawdę, mało mnie obchodzi na kiedy masz napisać ten program... A jak jesteś zdesperowany to jest dział Praca.

Jak się zbierzesz w kupę to dzisiaj powinieneś to skończyć. Po prostu poczytaj tutoriale o debuggowaniu kodu. Jak jeszcze się nauczysz formatować kod i używać procedur to super.
I jeżeli dysponujesz środowiskiem pokroju TP, to polecam pobrać szybko Lazarusa (www.lazarus.freepascal.org ), tam jest formater kodu wbudowany i łatwo się debugguje, więc polecam.

0

a co jest twoim zdaniem w tablicy b i skąd się to tam bierze że do niej porównujesz wynik?

0

Usiadłem na spokojnie, popatrzałem na program w notatniku i zobaczyłem jaki głupi jestem. Podczas pracy usunąłem działania i przez to nie działało. Jeszcze później wrzucę cały kod bo jeszcze są powtórzenia. Dzięki za wszystko :)

 PROGRAM TabliczkaMnozenia;
Uses CRT;

 VAR
  mnoz:ARRAY [1..10, 1..10]OF real;
  t:array[0..20]of integer;
  wynik:array[0..10]of integer;
  b:array[0..10]of integer;
  i,y,f,c,z:integer;
  a,w:byte;
  k:real;
  x:char;
  procedure tablica;
BEGIN
  clrscr;
 FOR w:=1 TO 10 DO
  Begin
   FOR a:=1 TO 5 DO
    Begin
     mnoz[a,w]:=a*k;
     Write (a,'*',w,'=',mnoz[a,w]:2:0,'         ');
    End;
    WriteLn;
  End;
  end;

BEGIN
 clrscr;
 writeln('Jest to program do nauki tabliczki mnozenia');
 writeln('Za chwile ukaze Ci sie Tabliczka, mozesz wybrac test lub wyjsc z programu        ');
 writeln();
 writeln();
 writeln();
 writeln('Autor: Damian XXX');
 delay(5000);
 clrscr;
 writeln('                               TABLICZKA MNOZENIA ');
 Writeln(' ');
 FOR w:=1 TO 10 DO
  Begin
   FOR a:=6 TO 10 DO
    Begin
     mnoz[a,w]:=a*w;
     write (a,'*',w,'=',mnoz[a,w]:2:0,'         ');
    End;
    writeln();
    End;
    Writeln('By przejsc do testu nacisnij ');
    textcolor(green);
    write('ENTER ');
    textcolor(white);
    Write('By wyjsc nacisnij ');
    textcolor(red);
    write('ESC');
    x:=readkey;
    if x=#27 THEN halt;
    textcolor(white);
    readln();

BEGIN
      z:=0;
 CLRSCR;
  randomize;
      i:=0;
  REPEAT
      i:=i+1;
      t[i]:=random(10)+1;
  UNTIL i=20;
  f:=0;
  REPEAT
  c:=0;
  REPEAT



      writeln(t[f],'*',t[f+1],'=');
      read(wynik[c]);
      b[c]:=t[f]*t[f+1];



        IF wynik[c]=b[c] THEN z:=z+1
        ELSE BEGIN
             textcolor(red);
             writeln(wynik[c]);
             textcolor(white);
             WRITE('- Twój wynik jest zly. Poprawny to: ');
             textcolor(green);
             WRITELN(b[c]);
             textcolor(white);
             end;
        c:=c+1;
        f:=f+1
        until c=10;
        until f=10 ;



     writeln('No Popatrz zdobyles ',z,' punktow na 10');
     writeln('Popolniles ',z- 10,' bledow');
     writeln();
     IF (z=10) AND (z>9.9) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('CELUJACA - 6');
        END;
        If (z>=8.6) AND (z<=9.9) THEN
        Begin
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('BARDZO DOBRA - 5');
        END;
        If (z>=8.5) AND (z<=7.1) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('DOBRA - 4');
        END;
        If (z>=7.0) AND (z<=5.1) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('DOSTATECZNA - 3');
        END;
        IF (z>=5.0) AND (z<=3.1) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green);
             writeln('DOPUSZCZAJACA - 2');
        END;
        IF (z>=0) AND (z<=3.0) THEN
        BEGIN
             textcolor(white);
             writeln('Brawo!!! Otrzymujesz ocene: ');
             textcolor(green); writeln('NIEDOSTATECZNA - 1');
        END;
        delay(5000);
END;
end.



0

btw błąd miałeś tutaj:

repeat // <======
    h:=0;
    e:=0;
    repeat // <======
        h:=h+1;
        Writeln(t[h],'*',t[h+1],'=');
        e:=e+1; // <======
        Read(wynik[e]);
    until h=20;
until e=10; // <======

e++ masz zamknięte w dwie pętle, przez co zmienia wartość od 1 do 200, a tablicę masz do 10. druga sprawa, że jeśli by się nie wywalił w tym miejscu, to by się zawiesił - w momencie sprawdzenia e = 10 e miałoby wartość 20, a potem tylko wyższe (aż do przekroczenia zakresu longinta). no i jeśli nie używasz zerowego elementu tablic, to deklaruj je 1.., a nie 0... i wreszcie - nie używaj instrukcji pisanych samymi dużymi literami. stosuj się do notacji upper camel case używanej w pascalu tak często, że jej potoczną nazwą stało się.... Pascal. Pascal case dokładniej.
aaa i bym zapomniał - zapanuj nad wcięciami. dwie lub cztery spacje (jeden tab) tylko i wyłącznie dla zagnieżdżonego bloku kodu, deklaracji zmiennych/typów/stałych lub jeśli instrukcja nie mieści się w jednej linii.

1 użytkowników online, w tym zalogowanych: 0, gości: 1