Oppure

Loading
14/01/17 14:19
anne45
ciao ho da poco iniziato ad utilizzare pascal. Dovrei creare un programma che faccia ruotare una linea con un 'perno'/punto fisso.
sviluppando il programma ho trovato difficoltà nel risolvere dei problemi riguardanti ai tipi di dato utilizzati.
esempio:
program LineaColorata;
uses crt,graph;
const L=50;

var p1,p2,e,f,n2,colore:smallint;
n,s,a:real;
Gd,Gm:smallint;
begin
detectgraph(Gd,Gm);
initgraph(Gd,Gm,'c:\dev-pascal');
p1:=80;
p2:=50;
n:=0;
s:=0;
repeat
begin
for a:=0 to 40 do
begin
colore:=6;
n:= COS(a)*(L);
s:= SIN(a)*(L);
trunc(n);
trunc(s);
setcolor(colore);
line(p1,p2,n,s);
ClearDevice;

L'ERRORE DICE 'incompatible types: got 'S80REAL' expeted 'smallint'.
grazie mille.
Ultima modifica effettuata da anne45 15/01/17 8:57
aaa
14/01/17 17:54
lumo
Senza riga dell'errore è impossibile sapere come correggere, copia l'errore interamente.
Probabilmente usi una variabile di tipo sbagliato, in tal caso o cambi il tipo da real a smallint oppure fai una conversione nel punto che serve.
aaa
14/01/17 22:04
Poggi Marco
Ciao!
Le variabili s e n sono dichiarate real, di conseguenza modifica l' istruzione
line(p1,p2,n,s); 
con
 line(p1,p2,round(n),round(s));


Inoltre, se usi il ciclo for, la variabile a deve essere dichiarata integer.
aaa
15/01/17 8:49
anne45
grazie mille veramente.
aaa
15/01/17 8:57
Poggi Marco
Postato originariamente da anne45:

grazie mille veramente.
Di nulla.
aaa
15/01/17 9:02
anne45
scusa ma ora ho un altro problema... credo di essere proprio un disastro con pascal..
comunque

ho inizializzato e ed f però mi da errore su (f:=COS(a)*(L)) e su (e:=SINA(a)*(L) ) la variabile a è di tipo integer.
l'errore dice:
Error: Incompatible types: got "S80REAL" expected "SMALLINT"

for a:=1 to 30 do
begin
colore2:=5;
trunc(f);
trunc(e);
f:= COS(a)*(L);
e:= SIN(a)*(L);
setcolor(colore2);
line(p1,p2,round(f),round(e));
ClearDevice;
aaa
15/01/17 9:21
Poggi Marco
Posta il programma intero, utilizzando i tag Code.
aaa
15/01/17 9:34
anne45
non so come si usino i tag code sono un po' imbranata con queste cose ho guardato su internet e spero di averli messi giusti.

program LineaColorata;
uses crt,graph;
const L=50;

var p1,p2,e,f,n2,colore,colore2:smallint;
n,s:real;
a:integer;
    Gd,Gm:smallint;
begin
detectgraph(Gd,Gm);
initgraph(Gd,Gm,'c:\dev-pascal');
p1:=80;
p2:=50;
n:=0;
s:=0;
f:=0;
e:=0;
 repeat
   begin
     for a:=0 to 40 do
      begin
       colore:=15;
         trunc(n);
  trunc(s);
         n:= COS(a)*(L);
  s:= SIN(a)*(L);
  setcolor(colore);
  line(p1,p2,round(n),round(s));
  ClearDevice;
      end;

     for a:=41 to 80 do
      begin
       colore:=14;
         trunc(n);
  trunc(s);
         n:= COS(a)*(L);
  s:= SIN(a)*(L);
  setcolor(colore);
  line(p1,p2,round(n),round(s));
  ClearDevice;
      end;

     for a:=81 to 120 do
      begin
       colore:=6;
           trunc(n);
  trunc(s);
         n:= COS(a)*(L);
  s:= SIN(a)*(L);
  setcolor(colore);
  line(p1,p2,round(n),round(s));
  ClearDevice;
      end;

     for a:=121 to 160 do
      begin
       colore:=12;
          trunc(n);
  trunc(s);
         n:= COS(a)*(L);
  s:= SIN(a)*(L);
  setcolor(colore);
  line(p1,p2,round(n),round(s));
  ClearDevice;
      end;

     for a:=161 to 180 do
      begin
       colore:=5;
           trunc(n);
  trunc(s);
         n:= COS(a)*(L);
  s:= SIN(a)*(L);
  setcolor(colore);
  line(p1,p2,round(n),round(s));
  ClearDevice;
      end;

     for a:=181 to 200 do
      begin
       colore2:=5;
       trunc(f);
       trunc(e);
       f:= COS(a)*(L);
  e:= SIN(a)*(L);
  setcolor(colore2);
  line(p1,p2,round(f),round(e));
  ClearDevice;
      end;

     for a:=201 to 240 do
      begin
       colore2:=11;
       trunc(f);
       trunc(e);
       f:= COS(a)*(L);
  e:= SIN(a)*(L);
  setcolor(colore2);
  line(p1,p2,round(f),round(e));
  ClearDevice;
      end;

     for a:=241 to 280 do
      begin
       colore2:=1;
        trunc(f);
       trunc(e);
       f:= COS(a)*(L);
  e:= SIN(a)*(L);
  setcolor(colore2);
  line(p1,p2,round(f),round(e));
  ClearDevice;
      end;

     for a:=281 to 320 do
      begin
       colore2:=2;
        trunc(f);
       trunc(e);
       f:= COS(a)*(L);
  e:= SIN(a)*(L);
  setcolor(colore2);
  line(p1,p2,round(f),round(e));
  ClearDevice;
      end;

     for a:=321 to 360 do
      begin
       colore2:=10;
         trunc(f);
       trunc(e);
       f:= COS(a)*(L);
  e:= SIN(a)*(L);
  setcolor(colore2);
  line(p1,p2,round(f),round(e));
  ClearDevice;
      end;
   end;
  until(keypressed);
closegraph;
end.
aaa