Newsgroup: it.comp.lang.pascal
Titolo: Chi mi corregge questo programma?

Salve a tutti
sono uno studente di un Liceo Scientifico, e sono iscritto alla terza
classe. Sto studiando la goniometria: funzioni seno,coseno, ecc.
Sto tentando di realizzare un programma che assegnato un valore in
gradi sessagesimali per l'angolo alfa determini un punto e lo
congiunga con l'origine degli assi ortogonali, in modo da mostrare il
variare dell'angolazione di questa retta (segmento) al variare
dell'angolo assegnato. Mi sono basato sulle seguenti definizioni prese
dal mio testo di matematica:
1) Si chiama seno dell'angolo orientato a e si scrive sen a,
l'ordinata del punto P.
2) Si chiama coseno dell'angolo orientato a e si scrive cos a
l'ascissa del punto P.
Il programma che ho scritto è questo, ma non funziona bene:
program sinum;
uses graph;
var a,scheda,modo,x,y: integer;
var rad:real;
begin
detectgraph  (scheda,modo);
initgraph (scheda,modo,'d:\tp\bgi');
writeln ('immetti il valore di alfa');
readln (a);
rad:=(a*3.1415)/180;
writeln ('il seno di alfa Š',sin(rad));
writeln ('il coseno di alfa Š',cos(rad));
line (320,0,320,480);
line (0,240,640,240);
x:=round (cos(rad));
y:=round (sin(rad));
x:=x+320+10;
y:=y+240+10;
line (320,240,x,y)
end.
Qualcuno potrebbe dirmi dove ho sbagliato, perchè e come correggerlo?
VI prego di essere elementari, perchè mi sto appena accostando al
Pascal.
Grazie in anticipo.
Francesco.

 y:=round (sin(rad));
Hai considerato che sin e cos sono valori che vanno da -1 a 1?
dario...@iol.it
http://dariobrunocorti.freeweb.org
ICQ#: 30478061
--
MS Windows: quante volte vuoi formattare oggi?

 Francesco.
Nessun problema. Dopo che risolvo programmi che la mia prof. non sa fare
è il minimo che potessi fare. Se hai altri dubbi contattami
purX-Mozilla-Status: 0009esente che per una risposta ci vorranno diversi
giorni
perché mi collego poco a Internet a causa dei costi telefonici).

Qualcuno potrebbe dirmi dove ho sbagliato, perchè e come correggerlo?
La regola che vale e' che una circonferenza di centro (cx,cy) e
raggio R e' il luogo dei punti di coordinate :
((cx + R*cos(alfa)), (cy+ R*sin(alfa)))
per alfa compreso tra 0 e 2pi, o tra -pi e +pi, a seconda del sistema
di riferimento.
Cio' che ti manca e' la moltiplicazione per il raggio.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------


Ti Invio comunque il modo con cui avrei risolto io il problema ...
*********************
Program Angolo;
Uses Graph, Crt;
Const Raggio=200;		{ Raggio variabile }
Var GraphDriver, GraphMode: Integer;
    Alfa: Real;
    AlfaRad: Real;
    x,y: Integer;
Begin
 ClrScr;						{ Pusisce Schermo }
 Write('Inserisci l''ampiezza dell''angolo: ');		
 Readln(alfa);					{ Richiede ampiezza angolo }
 Alfarad:=Alfa*pi/180;				{ Trasforma l'angolo in radianti }
 GraphDriver:=Detect;	
 InitGraph(GraphDriver, GraphMode, '');		{ Inizializza modalità grafica }
 Line(GetMaxx div 2, 0, GetMaxx div 2, GetMaxy);  { Asse x }
 Line(0, GetMaxy div 2, GetMaxx, GetMaxy div 2);  { Asse y }
 x:=(GetMaxx div 2)+ Round(Raggio*cos(Alfarad));  { Cerca la posizione x dell'angolo }
 y:=(GetMaxy div 2)- Round(Raggio*sin(Alfarad));    { Cerca la posizione y dell'angolo }
 SetColor(Yellow);				{ Disegnerà il segmento in giallo }
 Line(GetMaxx div 2, GetMaxy div 2, x , y);		{ Traccia il segmento }
 Readln;				
 CloseGraph;					{ Chiude la modalità grafica }
End.
************************
La differenza principale tra il mio e il tuo programma è che non devo adattare il programma per
farlo funzionare con un'altra modalità video (magari 320x200).
Infatti gli assi vengolo determinati in base al massimo valore di x e di y di quella modalità
grafica.
Se ti servono ulteriori spiegazioni fammelo sapere ....
-=> NeGuS <=-
www.infinito.it/utenti/negus80
 troverete guida, esempi, programmi, utility per Pascal/C++/Asm ....