Программа


program Lab_3_graph_1;
Uses Crt,Graph;
Const KYm=12;
      Xm=620;
      Ym=200;
      NameF='abcdefgh.ijk';
Type YSDF=record
            Year:integer;
            SunDay:0..366
          end;
     YSDA=array[1..KYm] of record
                            Year:integer;
                            SunDayP:real
                          end;
Var ArraySunDay:YSDA;
    Flag:boolean;
    Otv:char;
    DriverVar,ModeVar:integer;
    KY:byte;
procedure D;
  Begin
    Delay(50)
  End;
procedure DD;
  Begin
    Delay(0500)
  End;
procedure DDD;
  Begin
    Delay(1500)
  End;
procedure MakerFileYSD(Var KY:byte);
  Var F:file of YSDF;
      Buf:YSDF;
      I:integer;
      Otv:char;
  Begin
    repeat
      KY:=Random(10)+2; {        KY:=12;  }
      ClrScr;
      writeln('SCVORTCOV_SOFT'); writeln;                                  d;
      Assign(F,NameF);
      rewrite(F);
      for I:=1994-KY to 1993 do
        begin
          Buf.Year:=I;
          if (I mod 4)=0 then Buf.SunDay:=Random(367)
                         else Buf.SunDay:=Random(366);
          writeln(Buf.Year,' ',Buf.SunDay);                                d;
          write(F,Buf)
        end;
      Close(F);
      writeln;
{      writeln('Изменить ? (Y)');
 }   until {not (ReadKey in ['Y','y'])} true
  End;
procedure FileToASD(Var ASD:YSDA;Var FlagV:boolean);
  Var I:byte;
      F:file of YSDF;
      Buf:YSDF;
  Begin
    ASD[KY].Year:=0;
    Assign(F,NameF);
    Reset(F);
    I:=0;
    While (not eof(F)) and (I<KY) do
      begin
        I:=I+1;
        read(F,Buf);
        ASD[I].Year:=Buf.Year;
        if (Buf.Year mod 4)=0 then ASD[I].SunDayP:=Buf.SunDay/366
                              else ASD[I].SunDayP:=Buf.SunDay/365;
      end;
    Close(F);
    FlagV:=ASD[KY].Year<>0
  End;
procedure s;
  begin
    MoveTo(33*8,1*8);
    SetTextStyle((Random(5)+3) mod 5,0,1);
    OutText('SKVORTSOV-SOFT');
    SetTextStyle(0,0,1);
  end;
procedure Dekart;
 Var I:byte;
     Buf:string[3];
  Begin                        s;                                        d;
    SetLineStyle(0,0,1);
    Rectangle(0,0,638,199);
    SetTextStyle(0,0,1);
    OutTextXY(12,4,'%');                                                 d;
    OutTextXY(2,16,'100');                                               d;
    MoveTo(32,20);
    LineRel(0,4);                                                        d;
    LineRel(-8,0);                                                       d;
    MoveRel(8,0);
    for I:=10 downto 1 do
      begin
        LineRel(0,16);                                                   d;
        Str((I-1)*10,Buf);
        LineRel(-8,0);                                                   d;
        MoveRel(-20,-8);
        OutText(Buf);                                                    d;
        MoveRel(12,8)
      end;
    LineRel(480,0);                                                      d;
  End;
procedure Gr(ASD:YSDA;KY:byte);
  Var L:0..620;
      X,X1,X2,dX:0..620;
      Y,Y1,Y2,dY:0..200;
      I:byte;
      Buf:string[4];
  Begin
    ClearDevice;
    SetColor(15);
    SetLineStyle(Random(4),0,Random(2)*2+1);

    Dekart;                                                              dd;
    X1:=32;
    if KY>1 then dX:=440 div (KY-1)
            else dX:=440;
    X2:=488;
    Y2:=16;
    Y1:=184;
    for I:=0 to KY-1 do
      begin
        X:=X1+dX*I;
        Line(X,Y1,X,Y1+4);                                                d;
        Str(ASD[I+1].Year,Buf);
        OutTextXY(X-16,Y1+6,Buf);                                         d;
        OutTextXY(X2,Y2+I*8,Buf);                                          d;
      end;
    MoveTo(X1,Y1-Trunc(ASD[1].SunDayP*160));
    SetLineStyle(1,0,3);
    for I:=2 to KY do LineTo(X1+dX*(I-1),Y1-Trunc(ASD[I].SunDayP*160));   d;
    X2:=536;
    Y2:=16;
    for I:=1 to KY do
      begin
        MoveTo(X2,Y2);
        Str(Trunc(ASD[I].SunDayP*100),Buf);
        OutText(Buf+'%');                                                 d;
        Y2:=Y2+8;
      end
  End;
procedure Kist(ASD:YSDA;KY:byte);
  Var L:0..620;
      X,X1,X2,dX:0..620;
      Y,Y1,Y2,dY:0..200;
      I:byte;
      Buf:string[4];
  Begin
    ClearDevice;
{    SetColor(Random(15)+1);   }
    SetColor(3);
    SetLineStyle(0,0,1);
    SetTextStyle(0,0,1);
    SetFillStyle(Random(10)+2,Random(15)+1);
    Dekart;                                                              dd;
    X1:=32;
    if KY>0 then dX:=440 div KY
            else dX:=440;
    X2:=488;
    Y2:=16;
    Y1:=184;
    if KY=0 then Bar(X,Y1,x+8,y1+4);                                      d;
    for I:=0 to KY-1 do
      begin
        X:=X1+dX*I;
        Line(X,Y1,X,Y1+4);                                                d;
        Str(ASD[I+1].Year,Buf);
        OutTextXY(X+8,Y1+6,Buf);                                          d;
        OutTextXY(X2,Y2+I*8,Buf);                                         d;
      end;
    MoveTo(X1,Y1-Trunc(ASD[1].SunDayP*160));
    SetLineStyle(0,0,1);
    for I:=2 to KY+1 do Bar3D(X1+dX*(I-2)+4,Y1-Trunc(ASD[I-1].SunDayP*160),X1+dX*(I-1)-4,Y1,14,true);
d;    X2:=536;
    Y2:=16;
    for I:=1 to KY do
      begin
        MoveTo(X2,Y2);
        Str(Trunc(ASD[I].SunDayP*100),Buf);
        OutText(Buf+'%');                                                 d;
        Y2:=Y2+8;
      end
  End;
procedure SectDiag(ASD:YSDA;KY:byte);
  Const R=110;
        X=200;
        Y=100;
        Xt=480;
        Yt=4;
       Z=-12;
  Var Sum,Ra,Ra2:real;
      I,J:integer;
      Angle,Angle2:word;
      Buf,Buf2:string[4];
  Begin
    ClearDevice;                 s;                                  dd;
    SetLineStyle(0,0,1);
    SetTextStyle(0,0,1);
    Rectangle(0,0,638,199);
    Sum:=0;
    for I:=1 to KY do
      begin
        Sum:=Sum+ASD[I].SunDayP
      end;
    for I:=1 to KY do
      begin
        ASD[I].SunDayP:=ASD[I].SunDayP/Sum
      end;
    Angle2:=0;
    for I:=1 to KY do
      begin
        Angle:=Angle2;Ra2:=0;
        for J:=1 to I do Ra2:=Ra2+ASD[J].SunDayP*360;
        Angle2:=Trunc(Ra2);
        SetFillStyle(I+1,I+1);
        PieSlice(X,Y,Angle,Angle2,R);                                    dd;
        Angle:=Angle+Trunc(ASD[I].SunDayP*360);
        Str(ASD[I].Year,Buf);
        Str(Trunc(ASD[I].SunDayP*1000),Buf2);
        OutTextXY(Xt,Yt+I*16+Z,Buf+':       0.'+Buf2);                   dd;
        Bar(Xt+48,Yt+I*16-4+Z,Xt+48+32,Yt+I*16+8+Z);                      d;
      end
  End;
BEGIN
  repeat
    ClrScr;
{    write('Создать новый файл?(Y/N) ');
    repeat
      Otv:=ReadKey
    until Otv in ['Y','N','y','n'];
    writeln(Otv);
 }   if {  Otv in ['Y','y']   }  true then MakerFileYSD(KY);             ddd;
    FileToASD(ArraySunDay,Flag);
if {Flag} true then Begin
                   ClrScr;
                   DriverVar:=Detect;
                   InitGraph(DriverVar,ModeVar,'C:\TP7');
                   Gr(ArraySunDay,KY);                                   ddd;
{                   Otv:=ReadKey;
 }                  Kist(ArraySunDay,KY);                                ddd;
{                   Otv:=ReadKey;
 }                  SectDiag(ArraySunDay,KY);                       ddd; ddd;
{                   Otv:=ReadKey;
 }                  CloseGraph
                 End
            else Begin
                   writeln(' ошибка чтения файла ');
                   Otv:=ReadKey
                 End
  until false
END.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию