Uses Mytpu,CRT,Graph; Const MaxValues = 6; Type ValType = record n : integer; p : real; end; Var values : array [1..MaxValues] of ValType; SumVal : Word; I : byte; LastArc : Word; Coords : ArcCoordsType; {--------====================--------------} Procedure Iniit; Var i:byte; Begin InitVGA; SumVal := 0; for i:=1 to MaxValues do begin values[i].n:=GetValue('Вводите значения',GetMaxX div 2,GetMaxY div 2,1,32767); SumVal := SumVal + values[i].n; end; for i := 1 to MaxValues do values[i].p :=values[i].n/SumVal; End;{Iniit} {---------------------------} Procedure Show3dSlice(StAng,EAng:integer;Show:boolean); var t:byte; Begin Arc(300,200,stang,eang,100); PieSlice(300,200,stang,eang,100); SetColor(white); GetArcCoords(Coords); With coords do begin SetColor(White); Line(300,200,xstart,ystart); Line(300,200,xend,yend); if stang > 180 then Line(xstart,Ystart,Xstart,Ystart+30); if eang > 180 then Line(xend,Yend,Xend,Yend+30); if eang > 180 then if stang > 180 then for t := 1 to 30 do begin if (t = 1) or (t=30) then Setcolor(white) else SetColor(i); Arc(300,199+t,stang,eang,100) end else for t := 1 to 30 do begin if (t = 1) or (t=30) then Setcolor(white) else SetColor(i); Arc(300,199+t,180,eang,100); end; end; End; {---------------------------} Begin Iniit; SetAspectRatio(3,5); For i := 1 to MaxValues do begin SetColor(i); SetFillStyle(solidfill,i); Show3dslice(LastArc,round(LastArc+360*values[i].p),false); LastArc:=round(LastArc+360*values[i].p); end; Line(200,200,200,230); ReadKey; CloseVGA End.