Помощь - Поиск - Пользователи - Календарь
Полная версия: Отсоединение части диаграммы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
John
Люди помогите пожалуйста, если я не сделаю это задание к этой пятнице, то меня могут выгнать из института.
Задание такое….
Диаграмма все время крутиться.
По нажатию на стрелку(влево или вправо) минимальная часть диаграммы должна выезжать, при этом диаграмма также крутиться.


program diagram;
uses
crt,graph;
var
rt:string;
z,x1,y1,cd,cg:integer;
ch:char;
lm:integer;
s:string[4];
k,kol,sum,x,y,i,j:integer;
mas,mas1:array[0..15] of integer;
color: array [1..15] of byte;
begin
 clrscr;
 mas[0]:=0;
 mas1[0]:=0;
 write('kolvo = ');
 readln(kol);
 for j:=1 to kol do
   begin
    write(j,' = ');
    readln(mas[j]);
    sum:=sum+mas[j];
   end;

 for j:=1 to kol do
  for i:=j to kol do                    {упорядочивание массива}
   begin
    if mas[i]<mas[j] then
     begin
      z:=mas[i];
      mas[i]:=mas[j];
      mas[j]:=z;
     end;
   end;

 for j:=1 to kol do
  mas1[j]:=round(mas[j]*360/sum + mas1[j-1]) ;

 randomize;
 for j:=1 to kol do
   color[j]:=random(15);

 cd:=0;
 cg:=detect;
 initgraph(cd,cg,'d:\bp\BGI');

 x:=300;y:=220;
 lm:=0;
 while keypressed=false do begin
  for j:=1 to kol do begin
   setfillstyle(1,color[j]);
   if (mas1[j]+lm >= 360) and (mas1[j-1]+lm < 360) then begin     
    pieslice(300,220,mas1[j-1]+lm,360, 50);
    pieslice(300,220,1,mas1[j]+lm-360, 50);
   end
   else
    pieslice(300,220,mas1[j-1]+lm,mas1[j]+lm, 50);
    x1:=round(cos(((2*lm+mas1[j]+mas1[j-1]) div 2)*3.14/180)*30+300);
    y1:=round(sin(((2*lm+mas1[j]+mas1[j-1]) div 2)*3.14/180)*(-30)+220);
    str(mas[j],s);
    outtextxy(x1,y1,s);
    delay(500);
   end;
   LM:=LM+1;
   if lm>=359 then lm:=0;
  end;
 readln;
end.



Вот сама диаграмма уже крутиться все работает, надо сделать только это задание...
Заранее СПАСИБО!!!
John
Чего никто не знает? blink.gif
Помогите пожалуйста yes2.gif
Иначе мне будет mega_chok.gif
volvo
Давай я тебе покажу, как сделать крутящийся сегмент, уже выдвинутый из диаграммы, а отлов нажатия клавиши, и установку какого-нибудь флажка ты сделаешь сам? Смотри:

...
 lm:=0;
 while keypressed=false do begin
   for j := 1 to kol do begin
     if j = 1 then begin

       setfillstyle(solidfill, black);
       setcolor(black);
       if (mas1[j]+lm >= 360) and (mas1[j-1]+lm < 360) then begin
         pieslice(x,y,mas1[j-1]+lm,360, 70);
         pieslice(x,y,1,mas1[j]+lm-360, 70);
       end
       else
         pieslice(x,y,mas1[j-1]+lm,mas1[j]+lm, 70);

       x := x + trunc(20*cos((lm+mas1[j]/2)*Pi/180));
       y := y - trunc(20*sin((lm+mas1[j]/2)*Pi/180));
     end
     else begin
       x := 300; y := 220;
     end;

     setfillstyle(1,color[j]);
     setcolor(white);

     if (mas1[j]+lm >= 360) and (mas1[j-1]+lm < 360) then begin
       pieslice(x,y,mas1[j-1]+lm,360, 50);
       pieslice(x,y,1,mas1[j]+lm-360, 50);
     end
     else
       pieslice(x,y,mas1[j-1]+lm,mas1[j]+lm, 50);

     x1:=round(cos(((2*lm+mas1[j]+mas1[j-1]) div 2)*3.14/180)*30+x);
     y1:=round(sin(((2*lm+mas1[j]+mas1[j-1]) div 2)*3.14/180)*(-30)+y);
     str(mas[j],s);
     outtextxy(x1,y1,s);
   end;
   delay(45); { <--- поставь сколько нужно, я проверял на FPC - поэтому поменял... }
   LM:=LM+1;
   if lm>=359 then lm:=0;
 end;
...


John
Спасибо Volvo спасибо...
Очень благодарен..
Спас мне жизнь..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.