Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - come utilizzare i tipi di dato all'interno di graph?
Forum - Pascal - come utilizzare i tipi di dato all'interno di graph?

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
anne45 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/01/2017

Segnala al moderatore
Postato alle 15:19
Sabato, 14/01/2017
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 il 15/01/2017 alle 9:57
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 413
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 18:54
Sabato, 14/01/2017
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.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:04
Sabato, 14/01/2017
Ciao!
Le variabili s e n sono dichiarate real, di conseguenza modifica l' istruzione  
Codice sorgente - presumibilmente Plain Text

  1. line(p1,p2,n,s);

con
Codice sorgente - presumibilmente Plain Text

  1. line(p1,p2,round(n),round(s));



Inoltre, se usi il ciclo for, la variabile a deve essere dichiarata integer.


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
anne45 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/01/2017

Segnala al moderatore
Postato alle 9:49
Domenica, 15/01/2017
grazie mille veramente.

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 9:57
Domenica, 15/01/2017
Testo quotato

Postato originariamente da anne45:

grazie mille veramente.

Di nulla.


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
anne45 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/01/2017

Segnala al moderatore
Postato alle 10:02
Domenica, 15/01/2017
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;

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 10:21
Domenica, 15/01/2017
Posta il programma intero, utilizzando i tag Code.


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
anne45 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/01/2017

Segnala al moderatore
Postato alle 10:34
Domenica, 15/01/2017
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.

Codice sorgente - presumibilmente Delphi

  1. program LineaColorata;
  2. uses crt,graph;
  3. const L=50;
  4.  
  5. var p1,p2,e,f,n2,colore,colore2:smallint;
  6. n,s:real;
  7. a:integer;
  8.     Gd,Gm:smallint;
  9. begin
  10. detectgraph(Gd,Gm);
  11. initgraph(Gd,Gm,'c:\dev-pascal');
  12. p1:=80;
  13. p2:=50;
  14. n:=0;
  15. s:=0;
  16. f:=0;
  17. e:=0;
  18.  repeat
  19.    begin
  20.      for a:=0 to 40 do
  21.       begin
  22.        colore:=15;
  23.          trunc(n);
  24.   trunc(s);
  25.          n:= COS(a)*(L);
  26.   s:= SIN(a)*(L);
  27.   setcolor(colore);
  28.   line(p1,p2,round(n),round(s));
  29.   ClearDevice;
  30.       end;
  31.  
  32.      for a:=41 to 80 do
  33.       begin
  34.        colore:=14;
  35.          trunc(n);
  36.   trunc(s);
  37.          n:= COS(a)*(L);
  38.   s:= SIN(a)*(L);
  39.   setcolor(colore);
  40.   line(p1,p2,round(n),round(s));
  41.   ClearDevice;
  42.       end;
  43.  
  44.      for a:=81 to 120 do
  45.       begin
  46.        colore:=6;
  47.            trunc(n);
  48.   trunc(s);
  49.          n:= COS(a)*(L);
  50.   s:= SIN(a)*(L);
  51.   setcolor(colore);
  52.   line(p1,p2,round(n),round(s));
  53.   ClearDevice;
  54.       end;
  55.  
  56.      for a:=121 to 160 do
  57.       begin
  58.        colore:=12;
  59.           trunc(n);
  60.   trunc(s);
  61.          n:= COS(a)*(L);
  62.   s:= SIN(a)*(L);
  63.   setcolor(colore);
  64.   line(p1,p2,round(n),round(s));
  65.   ClearDevice;
  66.       end;
  67.  
  68.      for a:=161 to 180 do
  69.       begin
  70.        colore:=5;
  71.            trunc(n);
  72.   trunc(s);
  73.          n:= COS(a)*(L);
  74.   s:= SIN(a)*(L);
  75.   setcolor(colore);
  76.   line(p1,p2,round(n),round(s));
  77.   ClearDevice;
  78.       end;
  79.  
  80.      for a:=181 to 200 do
  81.       begin
  82.        colore2:=5;
  83.        trunc(f);
  84.        trunc(e);
  85.        f:= COS(a)*(L);
  86.   e:= SIN(a)*(L);
  87.   setcolor(colore2);
  88.   line(p1,p2,round(f),round(e));
  89.   ClearDevice;
  90.       end;
  91.  
  92.      for a:=201 to 240 do
  93.       begin
  94.        colore2:=11;
  95.        trunc(f);
  96.        trunc(e);
  97.        f:= COS(a)*(L);
  98.   e:= SIN(a)*(L);
  99.   setcolor(colore2);
  100.   line(p1,p2,round(f),round(e));
  101.   ClearDevice;
  102.       end;
  103.  
  104.      for a:=241 to 280 do
  105.       begin
  106.        colore2:=1;
  107.         trunc(f);
  108.        trunc(e);
  109.        f:= COS(a)*(L);
  110.   e:= SIN(a)*(L);
  111.   setcolor(colore2);
  112.   line(p1,p2,round(f),round(e));
  113.   ClearDevice;
  114.       end;
  115.  
  116.      for a:=281 to 320 do
  117.       begin
  118.        colore2:=2;
  119.         trunc(f);
  120.        trunc(e);
  121.        f:= COS(a)*(L);
  122.   e:= SIN(a)*(L);
  123.   setcolor(colore2);
  124.   line(p1,p2,round(f),round(e));
  125.   ClearDevice;
  126.       end;
  127.  
  128.      for a:=321 to 360 do
  129.       begin
  130.        colore2:=10;
  131.          trunc(f);
  132.        trunc(e);
  133.        f:= COS(a)*(L);
  134.   e:= SIN(a)*(L);
  135.   setcolor(colore2);
  136.   line(p1,p2,round(f),round(e));
  137.   ClearDevice;
  138.       end;
  139.    end;
  140.   until(keypressed);
  141. closegraph;
  142. end.


PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 13:24
Domenica, 15/01/2017
Le variabili e ed f, siccome ricevono il risultato di calcoli con le funzioni sin e cos, devono essere dichiarate come real.

Inoltre sin ( a ) e cos ( a ) calcolano in seno e coseno di un angolo espresso in radianti.
Ho rivisto il programma:
Codice sorgente - presumibilmente Delphi

  1. program LineaColorata;
  2. uses crt,graph;
  3. const L=50;
  4.  
  5. var p1,p2,n2,colore,colore2:smallint;
  6. n,s,f,e, convertiInRadianti:real;
  7. a:integer;
  8.     Gd,Gm:smallint;
  9. begin
  10. detectgraph(Gd,Gm);
  11. initgraph(Gd,Gm,'c:\dev-pascal');
  12. p1:=80;
  13. p2:=50;
  14. n:=0;
  15. s:=0;
  16. f:=0;
  17. e:=0;
  18. convertiInRadianti:=PI/180; (* fattore di conversione da gradi in radianti*)
  19. repeat
  20. begin
  21.      for a:=0 to 40 do
  22.      begin
  23.        colore:=15;
  24.        (*trunc(n);  commento le funzioni trunc
  25.        trunc(s);  *)
  26.        n:= COS(a*convertiInRadianti)*(L);
  27.        s:= SIN(a*convertiInRadianti)*(L);
  28.        setcolor(colore);
  29.        line(p1,p2,round(n),round(s));
  30.        ClearDevice;
  31.      end;
  32.  
  33.      for a:=41 to 80 do
  34.      begin
  35.        colore:=14;
  36.        (* trunc(n);
  37.        trunc(s);    *)
  38.        n:= COS(a*convertiInRadianti)*(L);
  39.        s:= SIN(a*convertiInRadianti)*(L);
  40.        setcolor(colore);
  41.        line(p1,p2,round(n),round(s));
  42.        ClearDevice;
  43.      end;
  44.  
  45.      for a:=81 to 120 do
  46.      begin
  47.        colore:=6;
  48.        (*    trunc(n);
  49.        trunc(s); *)
  50.        n:= COS(a*convertiInRadianti)*(L);
  51.        s:= SIN(a*convertiInRadianti)*(L);
  52.        setcolor(colore);
  53.        line(p1,p2,round(n),round(s));
  54.        ClearDevice;
  55.      end;
  56.  
  57.      for a:=121 to 160 do
  58.      begin
  59.        colore:=12;
  60.        (*   trunc(n);
  61.        trunc(s);   *)
  62.        n:= COS(a*convertiInRadianti)*(L);
  63.        s:= SIN(a*convertiInRadianti)*(L);
  64.        setcolor(colore);
  65.        line(p1,p2,round(n),round(s));
  66.        ClearDevice;
  67.      end;
  68.  
  69.      for a:=161 to 180 do
  70.      begin
  71.        colore:=5;
  72.        (*    trunc(n);
  73.        trunc(s); *)
  74.        n:= COS(a*convertiInRadianti)*(L);
  75.        s:= SIN(a*convertiInRadianti)*(L);
  76.        setcolor(colore);
  77.        line(p1,p2,round(n),round(s));
  78.        ClearDevice;
  79.      end;
  80.  
  81.      for a:=181 to 200 do
  82.      begin
  83.        colore2:=5;
  84.        (*trunc(f);
  85.        trunc(e); *)
  86.        f:= COS(a*convertiInRadianti)*(L);
  87.        e:= SIN(a*convertiInRadianti)*(L);
  88.        setcolor(colore2);
  89.        line(p1,p2,round(f),round(e));
  90.        ClearDevice;
  91.      end;
  92.  
  93.      for a:=201 to 240 do
  94.      begin
  95.        colore2:=11;
  96.        (*trunc(f);
  97.        trunc(e);*)
  98.        f:= COS(a*convertiInRadianti)*(L);
  99.        e:= SIN(a*convertiInRadianti)*(L);
  100.        setcolor(colore2);
  101.        line(p1,p2,round(f),round(e));
  102.        ClearDevice;
  103.      end;
  104.  
  105.      for a:=241 to 280 do
  106.      begin
  107.        colore2:=1;
  108.        {trunc(f);
  109.        trunc(e);}
  110.        f:= COS(a*convertiInRadianti)*(L);
  111.        e:= SIN(a*convertiInRadianti)*(L);
  112.        setcolor(colore2);
  113.        line(p1,p2,round(f),round(e));
  114.        ClearDevice;
  115.      end;
  116.  
  117.      for a:=281 to 320 do
  118.      begin
  119.        colore2:=2;
  120.        (* trunc(f);
  121.        trunc(e);*)
  122.        f:= COS(a*convertiInRadianti)*(L);
  123.        e:= SIN(a*convertiInRadianti)*(L);
  124.        setcolor(colore2);
  125.        line(p1,p2,round(f),round(e));
  126.        ClearDevice;
  127.      end;
  128.  
  129.      for a:=321 to 360 do
  130.      begin
  131.        colore2:=10;
  132.        (*  trunc(f);
  133.        trunc(e);*)
  134.        f:= COS(a*convertiInRadianti)*(L);
  135.        e:= SIN(a*convertiInRadianti)*(L);
  136.        setcolor(colore2);
  137.        line(p1,p2,round(f),round(e));
  138.        ClearDevice;
  139.      end;
  140.  
  141.  end;
  142.  until(keypressed);
  143. closegraph;
  144. end.



Nulla va più veloce della luce, quindi rilassati.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo