PDA

View Full Version : problea borland pascal v7.0


cele93
11-04-2010, 13:47
ragazzi ho un problema con il software di programmazione pascal 7.0... facendo un programma elementare di grafica per scuola mi da un errore usando il comando clrscr (pulizia dello schermo). il programma consiste nel disegnra un grafico con una retta di equazione y=x e una sinusoide di equazione y=sin(x). c'è una variabile (n) di scala per ingrandire e diminuire la sinusoide (dato che tenendo i valori normali, essendo questi decimali ed essendo la y sempre minore di 1, non è possibile disegnarli su schermo). con un ciclo repeat quindi ho fatto una specie di modalità zoom in cui digitando 0 la sinusoide si ingrandisce e digitando 1 si rimpicciolisce. il problema inizialmente era che disegnando la prima sinusoide e poi facendo zoom la sinusoide rimaneva e ne disegnava un altra sopra. ho cercato di risolvere mettendo all'inizio del ciclo di zoom un clrscr però quando lo faccio partire vedo su schermo una parte grigia in cui la sinusoide si sostituisce alla sinusoide precedente e sotto una parte nera dove le parti di sinusoidi si sovrappongono.
qui il programma completo
program funzioni;
uses graph, crt;

var medX, medY, n, z: integer;


{----------------------------------------------------------------------------}
{inizializzazione della modalit… grafica}
procedure init_graph;
var grdriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode,' ');
ErrCode := GraphResult;
if ErrCode = grOk then
end;

{----------------------------------------------------------------------------}
{creazione del grafico}
procedure grafico;
begin
medX:=GetMaxX div 2;
medY:=GetMaxY div 2;
line(0, medY, GetMaxX, medY);
line(medX, 0, medX, GetMaxY);
end;

{----------------------------------------------------------------------------}
{creazione della retta}
procedure retta;
var retta1, retta2, retta3, retta4: integer;
begin
retta1:=medX+500;
retta2:=medY+500;
retta3:=medX-500;
retta4:=medY-500;
line(medX, medY, retta1, retta4);
line(medX, medY, retta3, retta2);
end;

{----------------------------------------------------------------------------}
{creazione della sinusoide}
procedure seno;
var y, x, x2, y2:real;
corx, cory, color, z, truncy, truncx:integer;
h:real;
begin
clrscr;
x:=-60;
medX:=GetMaxX div 2;
medY:=GetMaxY div 2;
grafico;
retta;
repeat
y:=sin(x);
y2:=y*n;
x2:=x*n;
truncy:=trunc(y2);
truncx:=trunc(x2);
corx:=medx+truncx;
cory:=medy-truncy;
color:=6;
if n>150 then h:=0.005
else h:=0.01;
x:=x+h;
PutPixel(corx, cory, Color)
until keypressed;
end;
{----------------------------------------------------------------------------}
begin {main}
init_graph;
n:=50;
repeat
readln(z);
case z of
0: n:=n+10;
1: n:=n-10;
end;
seno;
until (n<0) or (n>500);
readln;
end.

lupoxxx87
11-04-2010, 15:55
è il mio monitor a pu***** o c'è qualcosa che non va ?

VirtualFlyer
11-04-2010, 18:10
è il mio monitor a pu***** o c'è qualcosa che non va ?

Non so se fosse ironico, comunque ha usato lo spoiler al posto del codice. Quindi testo=sfondo. :D

cele93
12-04-2010, 16:43
si scusa ma sono abituato a un altro forum dove lo spoiler è una barretta che occupa una riga e se cliccata viene mostrato il testo... volevo solo risparmaire spazio, non ho sbagliato...