Oppure

Loading
22/05/15 14:10
EgoFred
Ciao a tutti,
posto questo semplice programma scolastico che devo consegnare, ma che alla fine mi da l'errore runtime error 201.
Spero riusciate ad aiutarmi e ringrazio anticipatamente tutti!

Program TabellaTabellineFinoA_10;
uses crt, graph;
const
percorso='D:\Programmi\FreePascal';
incipit='Tabelline fino al dieci dei primi dieci numeri';
zero='0';
mcgames='MCGames(c)';
diritti='Mirko Cantilli Games, all rights reserved (c).';
risultato='Inserisci numero, quindi premi invio, inserisci moltiplicatore, quindi premi invio, per avere il risultato';
x1='x1';
x2='x2';
x3='x3';
x4='x4';
x5='x5';
x6='x6';
x7='x7';
x8='x8';
x9='x9';
x10='x10';
n1='1';
n2='2';
n3='3';
n4='4';
n5='5';
n6='6';
n7='7';
n8='8';
n9='9';
n10='10';
var tabellat:array[1..10,1..10] of integer;
r,c,cnt,n,ccc,h,hh,pyl,pxl,f,scheda,modo,nn,m,ns,cc : integer;
begin
scheda:=detect;
initgraph(scheda,modo,percorso);
setcolor(white);
line(30,50,30,250);
line(30,250,230,250);
line(250,250,30,250);
line(30,50,230,50);
pxl:=trunc(200/10);
pyl:=trunc(200/10);
ccc:=0;
repeat
begin
ccc:=ccc+1;
line(((pxl*ccc)+30),50,((pxl*ccc)+30),250);
end;
until ccc=10;
ccc:=0;
repeat
begin
ccc:=ccc+1;
line(50,((pyl*ccc)+50),250,((pyl*ccc)+50));
end;
until ccc=10;
f:=getmaxx;
moveto((f div 2),20);
outtext(incipit);
moveto(15,40);
outtext(zero);
moveto(15,65);
outtext(x1);
moveto(15,85);
outtext(x2);
moveto(15,105);
outtext(x3);
moveto(15,125);
outtext(x4);
moveto(15,145);
outtext(x5);
moveto(15,165);
outtext(x6);
moveto(15,185);
outtext(x7);
moveto(15,205);
outtext(x8);
moveto(15,225);
outtext(x9);
moveto(15,245);
outtext(x10);
moveto(35,40);
outtext(n1);
moveto(55,40);
outtext(n2);
moveto(75,40);
outtext(n3);
moveto(95,40);
outtext(n4);
moveto(115,40);
outtext(n5);
moveto(135,40);
outtext(n6);
moveto(155,40);
outtext(n7);
moveto(175,40);
outtext(n8);
moveto(195,40);
outtext(n9);
moveto(215,40);
outtext(n10);
moveto(15,270);
outtext(mcgames);
moveto(15,275);
outtext(diritti);
repeat
begin
c:=c+1;
n:=+1;
repeat
begin
r:=r+1;
cc:=cc+1;
ns:=n*cc;
tabellat[r,c]:=ns;
end;
until r=10;
begin
r:=0;
cc:=0;
ns:=0;
end;
end;
until c=10;
repeat
begin
repeat
begin
hh:=hh+1;
r:=r+1;
pyl:=pyl*hh;
moveto(pxl,pyl);
write(tabellat[r,c]);
end;
until hh=10;
hh:=0;
pyl:=0;
r:=0;
end;
until h=10;
moveto(250,130);
outtext(risultato);
readln(nn);
readln(m);
moveto(250,140);
write(tabellat[m,nn]);
repeat
until keypressed;
end.
Ultima modifica effettuata da EgoFred 22/05/15 14:11
aaa
23/05/15 18:51
Poggi Marco
Ciao!

Ho letto il tuo programma, e ho riscontrato le variabili contatore non correttamente inizializzate.
Ecco il programma corretto:
Program TabellaTabellineFinoA_10;
uses crt, graph; 
const 
incipit='Tabelline fino al dieci dei primi dieci numeri'; 
zero='0'; 
mcgames='MCGames(c)'; 
diritti='Mirko Cantilli Games, all rights reserved (c).'; 
risultato='Inserisci numero, quindi premi invio, inserisci moltiplicatore, quindi premi invio, per avere il risultato'; 
x1='x1'; 
x2='x2'; 
x3='x3'; 
x4='x4'; 
x5='x5'; 
x6='x6'; 
x7='x7'; 
x8='x8'; 
x9='x9'; 
x10='x10'; 
n1='1'; 
n2='2'; 
n3='3'; 
n4='4'; 
n5='5'; 
n6='6'; 
n7='7'; 
n8='8'; 
n9='9'; 
n10='10'; 
var tabellat:array[1..10,1..10] of integer; 
    r,c,cnt,n,ccc,h,hh,pyl,pxl,f,nn,m,ns,cc : integer;
    scheda,modo:integer;
begin 
scheda:=detect; modo:=0;
initgraph(scheda, modo, '');
setcolor(white); 
line(30,50,30,250); 
line(30,250,230,250); 
line(250,250,30
,250); 
line(30,50,230,50); 
pxl:=trunc(200/10); 
pyl:=trunc(200/10); 
ccc:=0; 
repeat 
  ccc:=ccc+1;
  line(((pxl*ccc)+30),50,((pxl*ccc)+30),250);
until ccc=10; 
ccc:=0; 
repeat 
  ccc:=ccc+1;
  line(50,((pyl*ccc)+50),250,((pyl*ccc)+50));
until ccc=10; 
f:=getmaxx; 
moveto((f div 2),20); 
outtext(incipit); 
moveto(15,40); 
outtext(zero); 
moveto(15,65); 
outtext(x1); 
moveto(15,85); 
outtext(x2); 
moveto(15,105); 
outtext(x3); 
moveto(15,125); 
outtext(x4); 
moveto(15,145); 
outtext(x5); 
moveto(15,165); 
outtext(x6); 
moveto(15,185); 
outtext(x7); 
moveto(15,205); 
outtext(x8); 
moveto(15,225); 
outtext(x9); 
moveto(15,245); 
outtext(x10); 
moveto(35,40); 
outtext(n1); 
moveto(55,40); 
outtext(n2); 
moveto(75,40); 
outtext(n3); 
moveto(95,40); 
outtext(n4); 
moveto(115,40); 
outtext(n5); 
moveto(135,40); 
outtext(n6); 
moveto(155,40); 
outtext(n7); 
moveto(175,40); 
outtext(n8); 
moveto(195,40); 
outtext(n9); 
moveto(215,40); 
outtext(n10); 
moveto(15,270); 
outtext(mcgames); 
moveto(15,275); 
outtext(diritti); 
c:=0;
cc:=0;
n:=0;
repeat 
  c:=c+1;
  n:=n+1;
  r:=0;
  repeat
    r:=r+1;
    cc:=cc+1;
    ns:=n*cc;
    tabellat[r,c]:=ns;
  until r=10;
  r:=0;
  cc:=0;
  ns:=0;
until c=10;
h:=0;
repeat 
  hh:=0;
  h:=h+1;
  repeat
    hh:=hh+1;
    r:=r+1;
    pyl:=pyl*hh;
    moveto(pxl,pyl);
    write(tabellat[r,c]:4);
   until hh=10;
   writeln;
   pyl:=0;
   r:=0;
until h=10; 
moveto(250,130); 
outtext(risultato); 
writeln;
write('Colonna ? ');
readln(nn); 
write('Riga ? ');
readln(m); 
moveto(250,140); 
write(tabellat[m,nn]); 
repeat 
until keypressed; 
end.
aaa
29/05/15 11:40
EgoFred
Innanzi tutto grazie mille!
In secondo luogo io ho copiato il programma da lei corretto, ma compilandolo con free pascal su windows mi da sempre l'errore con l'exitcode 201.
:)
aaa
30/05/15 18:32
Poggi Marco
Errore 201 indica errore di assegnamento tra tipi o indice fuori range in un vettore.
( Da manuale)
201 Range check error
If you compiled your program with range checking on, then you can get this error in the following cases:
An array was accessed with an index outside its declared range.
Trying to assign a value to a variable outside its range (for instance an enumerated type).
Probabilmente non hai inizializzato gli indici dei cicli correttamente.
aaa