esercizi di grafica con turbo pascal 1.1 su mac

 

 

Program figure2;
{ attivazione funzioni grafiche per disegnare con quickdraw }
{$U-}
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      sagoma: EventRecord;          
procedure pausa;
var a:integer;
begin
 for a:=1 to 5 do
  sysbeep(1);
 end;
  
procedure disegna;
var x1,y1,x2,y2,a:integer;
       vertici:rect;
       sfondo:pattern;
       v,w,q,p:integer;
       
 begin
    x1:=20;y1:=20;x2:=100;y2:=100;
    v:=30;w:=30; { smussamento vertici cornice }
    {----------------------------------------------1----------}
    { assegnare a variabile VERTICI tipo RECT le coordinate }
    { per delimitare cornice rettangolare assegnando a variabili }
    { x1,y1,x2,y2 tipo INTEGER le coordinate dell'angolo alto sinistro}
    { e basso destro }
    setrect(vertici,x1,y1,x2,y2);    
    {disegnare cornice smussata usando come argomento VERTICI }
    frameroundrect(vertici,v,w);pausa;
     {-----------------------------------------------2---------}
     { assegnare dimensione penna con PENSIZE(a,b) }
     { con a,b interi per dimensione verticale e orizzontale penna }
     { assegnare colore penna con PENPAT(nome colore) }
     { nome colore:bkack,white,gray,dkgray }
      
      penpat(dkgray);
      pensize(10,2);
      setrect(vertici,180,20,300,100);
      frameroundrect(vertici,v,50);pausa;
      {-----------------------------------------------3---------}
      {disegna riquadro pieno con PAINTroundRECT(vertici) }
      setrect(vertici,350,20,450,100);
      penpat(black);
      paintroundrect(vertici,v,w);pausa;
      {----------------------------------------------4----------}
       { assegna tipo tratteggio per riempire con FILLRECT ..sfondo} 
      { ritaglia porzione figura con OFFSETRECT q,p } 
      { la parte ritagliata e' protetta da cancellazione con ERASE..} 
      q:=10;p:=20; 
      stuffhex(@sfondo,'121212121212121212');          
      setrect(vertici,20,120,100,200);      
      frameroundrect(vertici,w,v);pausa;
      offsetrect(vertici,q,p);pausa;
      paintroundrect(vertici,w,v);
      pausa;
      offsetrect(vertici,w,v);
      paintroundrect(vertici,w,v);
      {----------------------------------------------5----------}
      { assegna tipo tratteggio per riempire con FILLRECT ..sfondo} 
      { ritaglia porzione figura con OFFSETRECT q,p }  
      q:=20;p:=20; 
      stuffhex(@sfondo,'123321456654765123');
       setrect(vertici,320,120,400,200);              
       frameroundrect(vertici,v,w); pausa; 
       offsetrect(vertici,q,p);pausa;
       fillrect(vertici,gray);
      {-------------------------------------------------------}
      { pausa e cancellazione disegni }
      pausa;
       eraserect(gport.portrect);
       framerect(gport.portrect);            
       {-------------------------------------------------------}
      { disegna ovali con SETRECT..FRAMEOVAL...PAINTOVAL..FILLOVAL }
       x1:=30;y1:=20;x2:=100;y2:=100;
    {--------------------------------------------------6------}
    { assegnare a variabile VERTICI tipo RECT le coordinate }
    { per delimitare cornice rettangolare assegnando a variabili }
    { x1,y1,x2,y2 tipo INTEGER le coordinate dell'angolo alto sinistro}
    { e basso destro }
    setrect(vertici,x1,y1,x2,y2);    
    {disegnare cornice usando come argomento VERTICI }
    frameoval(vertici);
    offsetrect(vertici,30,30); pausa;{ protegge sezione }
    eraseoval(vertici);pausa; { cancella sezione non protetta }
    paintoval(vertici); { disegna ovale con nuove coordinate }
    pausa;
     {---------------------------------------------------7-----}
     { assegnare dimensione penna con PENSIZE(a,b) }
     { con a,b interi per dimensione verticale e orizzontale penna }
     { assegnare colore penna con PENPAT(nome colore) }
     { nome colore:bkack,white,gray,dkgray }
      
      penpat(dkgray);
      pensize(20,10);
      setrect(vertici,180,20,300,100);
      frameoval(vertici);
      offsetrect(vertici,10,50);
      paintoval(vertici);pausa;
      {-------------------------------------------------8-------}
      {disegna ovale pieno con PAINTOVAL(vertici) }
      setrect(vertici,350,20,450,100);
      penpat(black);
      paintoval(vertici);
      offsetrect(vertici,50,10);
      filloval(vertici,gray);pausa;
      {-------------------------------------------------9-------}
      {disegna OVALE con tratteggio FILLRECT...e colore}
      setrect(vertici,20,120,100,200);      
      fillOVAL(vertici,gray);
      offsetrect(vertici,10,10);
      paintrect(vertici);
      offsetrect(vertici,20,20);
      filloval(vertici,gray);
      offsetrect(vertici,50,50);
      paintroundrect(vertici,30,50);pausa;
      {-------------------------------------------------10-------}
      { assegna tipo tratteggio per riempire con FILLRECT ..sfondo}    
      stuffhex(@sfondo,'123321456654765123');
       setrect(vertici,120,120,200,200);              
       fillOVAL(vertici,sfondo);         
end;
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);
   { procedura operativa modificabile..altre procedure aggiungere }
   disegna;
   WHILE NOT OSEventAvail(mDownMask + keyDownMask, sagoma) DO;
END.

 

Program figure3;
{ attivazione funzioni grafiche per disegnare con quickdraw }
{$U-}
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      sagoma: EventRecord;          
      vertici:rect;
      sfondo:pattern;
      
procedure pausa;
var a,tempo:integer;
begin
 textfont(0);
 tempo:=100;
 for a:=1 to tempo do
  begin
  moveto(10,10);
  drawstring('attendere,prego');
  end;
 end;
procedure fine;
var a,tempo:integer;
begin
 textfont(0);
 sysbeep(1);
  moveto(10,350);
  drawstring('premi return per finire');
 end;
procedure cancella; { cancella area grafica }
begin
   setrect(vertici,1,1,450,400);
   eraserect(vertici);
 end;    
 
procedure disegna;
var x1,y1,x2,y2,a:integer;
       vertici:rect;
       sfondo:pattern;
       q,p:integer;
   begin
   {--------------------------1----------------------------}
   { disegnare rette con LINETO...MOVETO..}
   { LINETO(X,Y) traccia linea da posizione cursore a punto }
   { indicato da nuove coordinate colonna,riga }
   { MOVETO(X,Y) posiziona cursore a colonna,riga indicate }
   
   pensize(10,10);
   penpat(gray);
   x1:=20;y1:=20;x2:=200;y2:=100;
   moveto(x1,y1);   { posiziona cursore a colonna,riga } 
   lineto(x2,y1);      { traccia linea da posizione a nuovo punto}
   penpat(black);
   pensize(15,10);
   lineto(x2,y2);      { traccia linea da posizione a nuovo punto }
   pennormal;          { penna normalizzata ,dimensione e colore }
   lineto(x1,y1);      { traccia linea da posizione a nuovo punto }
   pausa;
   {------------------------------2-----------------------}
   { disegnare rette con LINE...MOVE }
   { LINE(X,Y) traccia segmento da posizione cursore }
   { spostando x spazi verso destra se X positivo,sinistra se X negativo}
   { verso basso se Y positivo,verso alto se Y negativo }
   { MOVE(X,Y) posiziona cursore spostando X,Y spazi da posizione}
   { occupata,a destra,sinistra,alto,basso }
   PENSIZE(2,2);
   moveto(20,200);
   lineto(100,200);
   move(20,0);
   pensize(5,5);line(50,0);
   pensize(10,5);line(0,50);
   pensize(5,2);line(30,0);
   pensize(8,4);line(0,-50);
   pensize(2,6);line(-30,0);  
   pausa;  
   cancella;
   pausa;
   {----------------------------3----------------------------}
   { disegna archi con ARC... }
   { angoli misurati da 0 in senso orario come orologio 0-9-12-18-24}
   { delimitare sezione rettangolare con SETRECT }
    setrect(vertici,20,20,100,100);
    framearc(vertici,0,90);    
    setrect(vertici,120,20,200,100);
    framearc(vertici,0,180);
     setrect(vertici,220,20,300,100);
    framearc(vertici,0,270);    
    p:=90;q:=180;
    setrect(vertici,320,20,400,100);
    framearc(vertici,0,360);
     pausa;
     cancella;
     { disegna archi pieni con FILLARC...PAINTARC..OFFSETARC }
     stuffhex(@sfondo,'1010101010101010');
     setrect(vertici,20,20,100,100);pausa;
     fillarc(vertici,0,90,gray); {arco 90 gradi grigio }
     setrect(vertici,120,20,200,100);
     paintarc(vertici,0,120);pausa;
     setrect(vertici,220,20,300,100);
     fillarc(vertici,0,300,dkgray);pausa;
     offsetrect(vertici,50,50);pausa;
     paintarc(vertici,90,150);pausa;
     erasearc(vertici,90,120); { cancella parte di arco }
     pausa;
   end; 
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);
   { procedura operativa modificabile..altre procedure aggiungere }
   disegna;
   fine;
   WHILE NOT OSEventAvail(mDownMask + keyDownMask, sagoma) DO;
END.

Program figure4;
{ disegna poligoni con POLYHANDLE }
{$U-}
   USES Memtypes,QuickDraw,OSIntf,ToolIntf;
   
   VAR
      gPort:   GrafPort;      
      sagoma: EventRecord;
      vertici:rect;
      sfondo:pattern;
      poligono:polyhandle;
  
  procedure fine;
  begin
   textfont(0);
   sysbeep(1);
   moveto(10,50);
   drawstring('premi return per finire ');
  end;
  
  procedure pausa;
  var a,tempo:integer;
    begin
       textfont(0);
       tempo:=100;
      for a:=1 to tempo do
        begin
          moveto(10,20);
          drawstring('attendere,prego');
         end; 
     end;
          
   procedure disegna;
     begin
     stuffhex(@sfondo,'1234567891234567');{ serie 16 numeri }
       poligono:=openpoly; {definizione poligono}
         moveto(30,290);
         lineto(30,280);
         lineto(50,265);
         lineto(90,265);
         lineto(80,280);
         lineto(95,290);
         lineto(30,290);
        closepoly;
        
     framepoly(poligono); pausa;       
     offsetpoly(poligono,25,15);pausa;
     pensize(3,2);
     erasepoly(poligono);pausa;
     framepoly(poligono);pausa;
     
     offsetpoly(poligono,25,15);pausa;
     paintpoly(poligono);pausa;
     
     offsetpoly(poligono,25,15);pausa;
     pennormal;
     fillpoly(poligono,gray);pausa;
     framepoly(poligono);pausa;
     
     offsetpoly(poligono,25,15);pausa;
     fillpoly(poligono,sfondo);pausa;
     framepoly(poligono);pausa;
     killpoly(poligono);pausa;
   end;  
     
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);
   { procedura operativa modificabile..altre procedure aggiungere }
   disegna;
   fine;
   WHILE NOT OSEventAvail(mDownMask + keyDownMask, sagoma) DO;
END.