Forum - Pascal
- come utilizzare i tipi di dato all'interno di graph?
Pagine: [ 1 2 ]
|
anne45 (Normal User)
Newbie
Messaggi: 5
Iscritto: 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
lumo (Member )
Expert
Messaggi: 449
Iscritto: 18/04/2010
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.
Poggi Marco (Member )
Guru
Messaggi: 969
Iscritto: 05/01/2010
Ciao!
Le variabili s e n sono dichiarate real, di conseguenza modifica l' istruzione
Codice sorgente - presumibilmente Plain Text
con
Codice sorgente - presumibilmente Plain Text
line(p1,p2,round(n),round(s));
Inoltre, se usi il ciclo for, la variabile a deve essere dichiarata integer.
anne45 (Normal User)
Newbie
Messaggi: 5
Iscritto: 14/01/2017
grazie mille veramente.
Poggi Marco (Member )
Guru
Messaggi: 969
Iscritto: 05/01/2010
Postato originariamente da anne45 :
grazie mille veramente.
Di nulla.
anne45 (Normal User)
Newbie
Messaggi: 5
Iscritto: 14/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;
Poggi Marco (Member )
Guru
Messaggi: 969
Iscritto: 05/01/2010
Posta il programma intero, utilizzando i tag Code.
anne45 (Normal User)
Newbie
Messaggi: 5
Iscritto: 14/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
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 .
Poggi Marco (Member )
Guru
Messaggi: 969
Iscritto: 05/01/2010
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
program LineaColorata;
uses crt, graph;
const L= 50 ;
var p1, p2, n2, colore, colore2: smallint ;
n, s, f, e, convertiInRadianti: 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 ;
convertiInRadianti: = PI / 180 ; (* fattore di conversione da gradi in radianti*)
repeat
begin
for a: = 0 to 40 do
begin
colore: = 15 ;
(*trunc(n); commento le funzioni trunc
trunc(s); *)
n: = COS ( a* convertiInRadianti) * ( L) ;
s: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
s: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
s: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
s: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
s: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
e: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
e: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
e: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
e: = SIN ( a* convertiInRadianti) * ( 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* convertiInRadianti) * ( L) ;
e: = SIN ( a* convertiInRadianti) * ( L) ;
setcolor( colore2) ;
line( p1, p2, round ( f) , round ( e) ) ;
ClearDevice;
end ;
end ;
until ( keypressed) ;
closegraph;
end .