Песочные часы

В гафическом исполнении

uses graphABC;

var x,y,y0,ys,i,s: integer;

    k,q:real;

begin

setwindowsize(700,500);

s:=20;

setpencolor(clnavy);

arc(200,410,200,-8,61);    //это резервуары - арки

arc(400,410,200,119,-170);

arc(200,70,200,-60,7);

arc(400,70,200,173,-120);

setbrushcolor(clSilver);

setpencolor(clblack);

rectangle(170,50,430,30);     //это основания часов

rectangle(170,450,430,430);

floodfill(250,110,clSkyBlue);  // заливка стекла

floodfill(250,410,clSkyBlue);

k:=80; x:=300; q:=0;           //к - расстояние от х, q - коэффициент увеличения по х

for y:=130 to 230 do           //начинаем цикл для рисования полосочек (которыми нарисован песок)

    begin                         //это верхняя часть песка

    setpencolor(clNavy);

    line(round(x-k),y,round(x+k),y);      //рисуем линию песка с учетом расстояния от центра и коэффициента прироста

    k:=k-q; if y mod 25=0 then q:=q+0.45;   //в каждом цикле k уменьшается на q, а каждые 25 шагов по у  q увеличивается на 0,45

arc(200,410,200,-8,61);    //это резервуары - арки

arc(400,410,200,119,-170);

arc(200,70,200,-60,7);

arc(400,70,200,173,-120);

setbrushcolor(clSilver);

setpencolor(clblack);

rectangle(170,50,430,30);     //это основания часов

rectangle(170,450,430,430);

    end;

k:=80; x:=300; q:=0; y0:=430;

for y:=130 to 230 do                        //это нижняя часть песка и закрашивание верхней части голубым (как бы стирается песок)

    begin

arc(200,410,200,-8,61);    //это резервуары - арки

arc(400,410,200,119,-170);

arc(200,70,200,-60,7);

arc(400,70,200,173,-120);

setbrushcolor(clSilver);

setpencolor(clblack);

rectangle(170,50,430,30);     //это основания часов

rectangle(170,450,430,430);

    setpencolor(clSkyBlue);

    line(round(x-k),y,round(x+k),y);         //с линиями - что и прежде

    k:=k-q; if y mod 25=0 then q:=q+0.45;

    setpencolor(clNavy);

    line((x-100),430,x,y0);                  //здесь постепенно одна сторона линии поднимается по у, получается горка

    line(x,y0,(x+100),430);

    sleep(10*s);                              //пауза

    y0:=y0-1;

    for i:=1 to 20 do                        //полоса песка , 20 песчинок единовременно

        begin

        ys:=random(151)+250;                 //случайная позиция (для синего)

        putpixel(300,ys,clnavy);

         end;

    for i:=1 to 20 do

        begin

        ys:=random(101)+230;

        putpixel(300,ys,clSkyBlue);          //случайная позиция (для голубого)

         end;

    end;

setpencolor(clSkyBlue);                      //затираем струйку песка

line(300,250,300,330);

setpencolor(clnavy);

arc(200,410,200,-8,61);                      //это резервуары заново

arc(400,410,200,119,-170);

arc(200,70,200,-60,7);

arc(400,70,200,173,-120);

setbrushcolor(clSilver);

rectangle(170,50,430,30);

rectangle(170,450,430,430);

end.

 

"Песочные часы" - заполнить двумерный массив "0" и "1" в форме песочных часов

Program z1;

 Uses Crt;

 Var i,m,j: integer;

       a: array[1..20,1..20] of integer;

Begin

   ClrScr;

    for j:= 1 to 10 do

     begin

     for i:= 1 to 20 do

     begin

      textcolor (4);

      a[j,i]:=1;

      if (i<j) or (i+j>21) then begin a[j,i]:=0; textcolor (1); end;

      write (' ', a[j,i]);

      delay(5);

     end;

     WriteLn;

     end;

 

     for j:= 11 to 20 do

     begin

     for i:= 1 to 20 do

     begin

      textcolor (4);

      a[j,i]:=1;

      if (i>j) or (i+j<21) then begin a[j,i]:=0; textcolor (1); end;

      write (' ', a[j,i]);

      delay(5);

     end;

     WriteLn;

     end;

end.