Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 16:35   #1
Рамик
Студент
Форумчанин
 
Аватар для Рамик
 
Регистрация: 18.02.2009
Сообщений: 125
По умолчанию [Pascal] крутящаяся звезда

парни, помогите пожалуйста! я запутался конкретно...

условие:

Вывести в центре экрана заданную фигуру цветом линии с номером 1. При нажатии стрелок влево и вправо фигура поворачивается в соответствующую сторону, меняя цвет. Выход из программы при нажатии ESC.
Построение фигуры оформить процедурой. Поиск координат точек поворота оформить функциями.


Код:
program krut_zvezd;
uses crt,graph;
procedure zvezda1(x0,y0,r,a,gradus:integer);
var i,x,y:integer;
begin
x:=x0+round(r*cos(a*2*pi/360));
y:=y0-round(r*sin(a*2*pi/360));
moveto(x,y);
for i:=1 to 6 do begin
    a:=a+30;
    x:=x0+round(r/2*cos(a*2*pi/360));
    y:=y0-round(r/2*sin(a*2*pi/360));
    lineto(x,y);
    a:=a+30;
    if a>360 then a:=gradus;
    x:=x0+round(r*cos(a*2*pi/360));
    y:=y0-round(r*sin(a*2*pi/360));
    lineto(x,y);
    end;
end;
function povorlevo(x0,y0,r,a,gradus:integer; kod:char):integer;
begin
repeat
    cleardevice;
    gradus:=gradus+10;
    a:=gradus;
    zvezda1(x0,y0,r,a,gradus);
    delay(30000);
    until kod<>#75;
    end;
var r:integer;      {radius zvezdi}
    x0,y0:integer;  {koordinati zentra zvezdi}
    a:integer;      {ugol mezhdu osyu 0X i pryamoi, soedinyayushei centr zvezdi i konec lucha}
    d,m:integer;
    gradus:integer;
    kod:char;
begin
d:=0;
initgraph(d,m,'');
x0:=325;
y0:=250;
r:=60;
gradus:=30;
a:=gradus;

repeat
zvezda1(x0,y0,r,a,gradus);
until keypressed;
repeat
kod:=readkey;
if kod=#0 then
   kod:=readkey;
   if kod=#75 then
   povorlevo(x0,y0,r,a,gradus,kod);
until kod<>#75;

end.
Рамик вне форума Ответить с цитированием
Старый 27.05.2009, 16:47   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот, подкорректировал.
Так и не понял, зачем вам там нужны были бесконечные циклы.
Код:
program krut_zvezd;
uses crt,graph;


procedure zvezda1(x0,y0,r : integer; var a,gradus:integer);
var i,x,y:integer;
begin
x:=x0+round(r*cos(a*2*pi/360));
y:=y0-round(r*sin(a*2*pi/360));
moveto(x,y);
for i:=1 to 6 do begin
    a:=a+30;
    x:=x0+round(r/2*cos(a*2*pi/360));
    y:=y0-round(r/2*sin(a*2*pi/360));
    lineto(x,y);
    a:=a+30;
    if a>360 then a:=gradus;
    x:=x0+round(r*cos(a*2*pi/360));
    y:=y0-round(r*sin(a*2*pi/360));
    lineto(x,y);
    end;
end;


procedure povorlevo(x0,y0,r : integer; var a,gradus:integer; kod:char);
begin
//repeat
cleardevice;
gradus:=gradus+10;
if gradus>60 then gradus := 0;
a:=gradus;
zvezda1(x0,y0,r,a,gradus);
//delay(30000);
//until kod<>#75;
end;

var r:integer;      {radius zvezdi}
    x0,y0:integer;  {koordinati zentra zvezdi}
    a:integer;      {ugol mezhdu osyu 0X i pryamoi, soedinyayushei centr zvezdi i konec lucha}
    d,m: smallint;      // если TP7, то изменить на integer
    gradus:integer;
    kod:char;

begin
d:=0;
initgraph(d,m,'');
x0:=325;
y0:=250;
r:=60;
gradus:=30;
a:=gradus;

//repeat
zvezda1(x0,y0,r,a,gradus);
//until keypressed;

repeat
kod:=readkey;
if kod=#0 then
 kod:=readkey;
if kod=#75 then
  povorlevo(x0,y0,r,a,gradus,kod);
until kod=#27;

end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.05.2009, 17:08   #3
Рамик
Студент
Форумчанин
 
Аватар для Рамик
 
Регистрация: 18.02.2009
Сообщений: 125
По умолчанию

спасибо большое!
вот вся задача(вдруг кому пригодится)!

Код:
program krut_zvezd;
uses crt,graph;
procedure zvezda1(x0,y0,r : integer; var a,gradus:integer);
var i,x,y:integer;
begin
x:=x0+round(r*cos(a*2*pi/360));
y:=y0-round(r*sin(a*2*pi/360));
moveto(x,y);
for i:=1 to 6 do begin
    a:=a+30;
    x:=x0+round(r/2*cos(a*2*pi/360));
    y:=y0-round(r/2*sin(a*2*pi/360));
    lineto(x,y);
    a:=a+30;
    if a>360 then a:=gradus;
    x:=x0+round(r*cos(a*2*pi/360));
    y:=y0-round(r*sin(a*2*pi/360));
    lineto(x,y);
    end;
    end;
function povorlevo(x0,y0,r:integer; var a,gradus:integer; kod:char):integer;
 begin
 cleardevice;
 gradus:=gradus+10;
 if gradus>60 then gradus := 0;
 a:=gradus;
 zvezda1(x0,y0,r,a,gradus);
 end;
function povorpravo(x0,y0,r:integer; var a,gradus:integer; kod:char):integer;
 begin
 cleardevice;
 gradus:=gradus-10;
 if gradus>60 then gradus:=0;
 a:=gradus;
 zvezda1(x0,y0,r,a,gradus);
 end;
var r:integer;      {radius zvezdi}
    x0,y0:integer;  {koordinati zentra zvezdi}
    a:integer;      {ugol mezhdu osyu 0X i pryamoi, soedinyayushei centr zvezdi i konec lucha}
    d,m: integer;
    c,gradus:integer;
    kod:char;
begin
 d:=0;
 initgraph(d,m,'');
 x0:=325;
 y0:=250;
 r:=60;
 c:=1;
 gradus:=30;
 a:=gradus;
 setcolor(c);
 zvezda1(x0,y0,r,a,gradus);
 repeat
 kod:=readkey;
 if kod=#0 then
 kod:=readkey;
 if kod=#75 then begin
  c:=c+1;
  setcolor(c);
  povorlevo(x0,y0,r,a,gradus,kod);
  end
  else
  if kod=#77 then begin
  c:=c+1;
  setcolor(c);
  povorpravo(x0,y0,r,a,gradus,kod);
  end;
until kod=#27;
end.
Рамик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28
БД Pascal lumon^^ Помощь студентам 1 29.03.2009 15:14
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37