esercizi di grafica con turbo pascal 1.1 su mac

 

Program mobili1;
{ FIGURE MOBILI in pagina grafica }
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      sagoma: EventRecord;
      vertici:rect;
      colore,figure,seno,coseno,conta,angolo:integer;
      t:real;
      
procedure richiesta;
begin
 writeln('indica numero figure 1..5..10 ');
 readln(figure);
end;       
procedure grafica;
BEGIN
{inizializzazione sottoprogrammi o routine}
   InitGraf(@thePort);      
   initfonts;
   InitCursor;
   HideCursor;
   OpenPort(@gPort);   
   
{inizio programma principale}   
   PenPat(BLACK);
   BackPat(WHITE);
   EraseRect(gPort.portRect);
   FrameRect(gPort.portRect);
end;
        
procedure disegna;
begin
 for conta:=1 to figure do
  begin
   t:=round(arctan(1)*4)/(50+25*conta);
     begin
      for angolo:=1 to 400 do
       begin
        seno:=round(sin(angolo*t)*95)+95;
        coseno:=round(cos(angolo*t)*95)+95;
        moveto(angolo+50,seno);
        lineto(400-angolo,coseno);
       end;
      end;
     end;   
   end;
  
 PROCEDURE fine;
 begin
 sysbeep(1);
 moveto(10,300);
 drawstring('premi return per finire');
 readln;
 end;
   
begin
richiesta;
grafica;
disegna;
fine;
end.

Program mobili2;
{ FIGURE MOBILI in pagina grafica }
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      sagoma: EventRecord;
      vertici:rect;
      figure,seno,coseno,conta,angolo:integer;
      t:real;
      
procedure richiesta;
begin
 writeln('indica numero figure 1..5..10 ');
 readln(figure);
end;       
procedure grafica;
BEGIN
{inizializzazione sottoprogrammi o routine}
   InitGraf(@thePort);      
   initfonts;
   InitCursor;
   HideCursor;
   OpenPort(@gPort);      
   PenPat(BLACK);
   BackPat(WHITE);
   EraseRect(gPort.portRect);
   FrameRect(gPort.portRect);
end;
 
 PROCEDURE cancella;
 begin
  MOVETO(10,20);
  sysbeep(1);
  drawstring('premi return');
  readln;
  EraseRect(gPort.portRect);
  FrameRect(gPort.portRect); 
 end;
         
procedure disegna(colore,VOLTE:integer);
begin
{ MODIFICABILI....X,Y,VOLTE }
case colore of
1:penpat(black);
2:penpat(dkgray);
3:penpat(gray);
end;
 for conta:=1 to figure do
  begin
   t:=round(arctan(1)*4)/(50+25*conta);
     begin
      for angolo:=1 to volte do
       begin
        seno:=round(sin(angolo*t)*95)+200;
        coseno:=round(cos(angolo*t)*95)+200;
        moveto(angolo+100,seno);
        lineto(380-angolo,coseno);
       end;
      end;
     end;   
   end;
  
 PROCEDURE fine;
 begin
 moveto(10,30);
 drawstring('premi return per finire');
 readln;
 end;
   
begin
richiesta;
grafica;
disegna(1,400);cancella;
disegna(2,300);cancella;
disegna(3,200);cancella;
fine;
end.

Program mobili3;
{ FIGURE MOBILI in pagina grafica }
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      sagoma: EventRecord;
      vertici,QUADRO,QUADRO1:rect;
      figure,seno,coseno,conta,angolo:integer;
      t:real;
      
procedure richiesta;
begin
 writeln('indica numero figure 1..5..10 ');
 readln(figure);
end;       
procedure grafica;
BEGIN
{inizializzazione sottoprogrammi o routine}
   InitGraf(@thePort);      
   initfonts;
   InitCursor;
   HideCursor;
   OpenPort(@gPort);      
   PenPat(BLACK);
   BackPat(WHITE);
   EraseRect(gPort.portRect);
   FrameRect(gPort.portRect);
end;
 
 PROCEDURE cancella;
 begin
  MOVETO(10,20);
  sysbeep(1);
  drawstring('premi return');
  readln;
  EraseRect(gPort.portRect);
  FrameRect(gPort.portRect); 
 end;
         
procedure disegna(colore,A,B,VOLTE:integer);
VAR X,Y:INTEGER;
begin
{ MODIFICABILI....X,Y,VOLTE }
X:=A;
Y:=B;
case colore of
1:penpat(black);
2:penpat(dkgray);
3:penpat(gray);
end;
 for conta:=1 to figure do
  begin
   t:=round(SIN(1)*5)/(30+25*conta);
     begin
      for angolo:=1 to volte do
       begin  
        seno:=round(sin(angolo*t)*95)+Y;
        coseno:=round(cos(angolo*t)*95)+Y;
        setrect(quadro,angolo+X,seno,angolo+X+20,seno+20);
        frameoval(quadro);
        SETRECT(quadro1,ANGOLO+X,COSENO,X+20+angolo,COSENO+20);
        framerect(quadro1); 
        moveto(angolo+X,seno);
        lineto(380-angolo,coseno);      
       end;
      end;
     end;   
   end;
  
 PROCEDURE fine;
 begin
 moveto(10,30);
 drawstring('premi return per finire');
 readln;
 end;
   
begin
richiesta;
grafica;
disegna(1,100,100,400);cancella;
disegna(2,100,150,300);cancella;
disegna(3,100,200,200);cancella;
fine;
end.

Program MUOVE1;
{ FIGURE MOBILI in pagina grafica }
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      A,B:INTEGER;
      seno,coseno:integer;
procedure grafica;
BEGIN
{inizializzazione sottoprogrammi o routine}
   InitGraf(@thePort);      
   initfonts;
   InitCursor;
   HideCursor;
   OpenPort(@gPort);      
   PenPat(BLACK);
   BackPat(WHITE);
   EraseRect(gPort.portRect);
   FrameRect(gPort.portRect);
end;
 
 PROCEDURE cancella;
 begin
  MOVETO(10,20);
  sysbeep(1);
  drawstring('premi return');
  readln;
  EraseRect(gPort.portRect);
  FrameRect(gPort.portRect); 
 end;
         
 PROCEDURE fine;
 begin
 moveto(10,30);
 drawstring('premi return per finire');
 readln;
 end;
procedure disegna(angolo,k:integer);
{ provare con modulo=0...1...-1 }
var h,modulo:integer;
begin
 b:=100;
 modulo:=0;
 for a:=1 to angolo do
  begin
   seno:=trunc(50*sin(a*3.14/180));
   coseno:=trunc(150*cos(a*3.14/180));
   moveto(b+a,200-h);
   lineto(b+a+seno,200+coseno);
   a:=a+k;
   h:=h+modulo;
  end;
  end;
      
begin
grafica;
disegna(120,2);cancella;
disegna(180,1);cancella;
disegna(90,2);cancella;
disegna(90,1);cancella;
disegna(75,4);cancella;
fine;
end.

Program MUOVE2;
{ FIGURE MOBILI in pagina grafica }
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      A,B,volte,q:INTEGER;
      seno,coseno:integer;
      quadro:rect;
      
procedure richiesta;
begin
 writeln('indica numero animazioni 1.2.5..=');
 readln(volte);
end;       
      
procedure grafica;
BEGIN
{inizializzazione sottoprogrammi o routine}
   InitGraf(@thePort);      
   initfonts;
   InitCursor;
   HideCursor;
   OpenPort(@gPort);      
   PenPat(BLACK);
   BackPat(WHITE);
   EraseRect(gPort.portRect);
   FrameRect(gPort.portRect);
end;
 
 PROCEDURE cancella;
 begin  
  EraseRect(gPort.portRect);
  FrameRect(gPort.portRect); 
 end;
 
 procedure pausa(durata:integer);
 var tempo:integer;
 begin
  for tempo:=1 to durata do
  begin
  moveto(10,10);
  drawstring('');
  end;
 end;         
 PROCEDURE fine;
 begin
 moveto(10,30);
 drawstring('premi return per finire');
 readln;
 end;
procedure disegna1;
var b,h,k,a:integer;
begin
 b:=1;
 k:=0;
 h:=0;
 for a:=1 to 180 do
  begin
   seno:=trunc((k+10)*sin(a*3.14/180));
   coseno:=trunc((h+10)*cos(a*3.14/180));
   setrect(quadro,b+A+seno,50+h+coseno,b+A+SENO+k+40,50+coseno+h+40);
   frameOVAL(quadro);
   pausa(100);
   a:=a+1;
   h:=h+1;
   k:=k+1;
  end;
  end;
 
 procedure disegna2;
var b,h,k,a:integer;
begin
 b:=1;
 k:=0;
 h:=0;
 PENPAT(gray);
 for a:=1 to 180 do
  begin
   seno:=trunc((k+10)*sin(a*3.14/180));
   coseno:=trunc((h+10)*cos(a*3.14/180));
   setrect(quadro,b+A+seno,50+h+coseno,b+A+SENO+k+40,50+coseno+h+40);
   PAINTRECT(quadro);
   pausa(200);
   a:=a+1;
   h:=h+1;
   k:=k+1;
  end;
  end;
procedure disegna3;
var b,h,k,a:integer;
begin
 b:=1;
 k:=0;
 h:=0;
 penpat(dkgray);
 for a:=1 to 180 do
  begin
   seno:=trunc((k+10)*sin(a*3.14/180));
   coseno:=trunc((h+10)*cos(a*3.14/180));
   setrect(quadro,b+A+seno,50+h+SENO,b+A+SENO+k+40,50+SENO+h+40);
   paintoval(quadro);
   pausa(300);
   a:=a+1;
   h:=h+1;
   k:=k+1;
  end;
  end;
procedure disegna4;
var b,h,k,a:integer;
begin
 b:=1;
 k:=0;
 h:=0;
 for a:=1 to 180 do
  begin
   seno:=trunc((k+10)*sin(a*3.14/180));
   coseno:=trunc((h+10)*cos(a*3.14/180));
   penpat(black);
   setrect(quadro,b+A+seno,50+h+coseno,b+A+SENO+k+40,50+coseno+h+40);
   framerect(quadro);
   penpat(gray);
   setrect(quadro,b+A+seno,50+h+coseno,b+A+SENO+k+40,50+coseno+h+40);
   frameoval(quadro);
   pausa(400);
   a:=a+1;
   h:=h+1;
   k:=k+1;
  end;
  end;
procedure disegna5;
var b,h,k,a:integer;
begin
 b:=1;
 k:=0;
 h:=0;
 for a:=1 to 180 do
  begin
   seno:=trunc((k+10)*sin(a*3.14/180));
   coseno:=trunc((h+10)*cos(a*3.14/180));
   penpat(dkgray);
   setrect(quadro,b+A+seno,50+h+coseno,b+A+SENO+k+40,50+coseno+h+40);
   framerect(quadro);
   penpat(black);
   setrect(quadro,b+A+COSENO,50+h+SENO,b+A+COSENO+k+40,50+SENO+h+40);
   paintoval(quadro);
   pausa(500);
   a:=a+1;
   h:=h+1;
   k:=k+1;
  end;
  end;
 
 procedure disegna6;
var b,h,k,a:integer;
begin
 b:=1;
 k:=0;
 h:=0;
 for a:=1 to 180 do
  begin
   seno:=trunc((k+1)*sin(a*3.14/180));
   coseno:=trunc((h+1)*cos(a*3.14/180));
   penpat(dkgray);
   setrect(quadro,b+A+seno,50+h+coseno,b+A+SENO+k+40,50+coseno+h+40);
   framerect(quadro);
   penpat(black);
   setrect(quadro,b+A+COSENO,50+h+SENO,b+A+COSENO+k+40,50+SENO+h+40);
   paintoval(quadro);
   pausa(500);
   ERASERECT(quadro);
   a:=a+1;
   h:=h+1;
   k:=k+1;
  end;
  end;
     
begin
richiesta;
grafica;
FOR Q:=1 TO VOLTE DO
BEGIN
disegna1;cancella;
disegna2;cancella;
disegna3;cancella;
disegna4;cancella;
disegna5;cancella;
disegna6;cancella;
END;
fine;
end.