2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 помогите с программированием [Pascal ]
Сообщение27.11.2010, 17:17 


24/11/10
59
:cry:
я написала рограмму но не могу выполнить поворот...
помогите пожалуйста...
смысол программы в том чтобы 4-е окружности расположенные по углам квадрата двигались по часовой стрелке с одинаковой скоростью...
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
  1. program Jyk;
  2. uses Graph,crt;
  3. var
  4.  Dr,M,Error:integer;
  5.  b,c:integer;  {первый жук}
  6.  b1,c1:integer; {второй жук}
  7.  b2,c2:integer; {третий жук}
  8.  b3,c3:integer; {четвертый жук}
  9.  r:integer; {радиус жуков}
  10. begin
  11.  Dr:=detect;
  12.  InitGraph (Dr,M,'');
  13.  if GraphResult <> 0 then
  14.   begin
  15.    writeln ('Ошибка');
  16.    halt
  17.   end
  18.  else
  19.  begin
  20.   outtextxy (245,40,'Траектория движения жуков');
  21.   {создаем окно в центре экрана для вывода "жуков"}
  22.   rectangle (170,80,500,410);
  23.   SetViewPort (171,81,499,409,ClipOn); {Все жуки нах-ся в квадрате со стороной А}
  24.   SetColor (red);              {цвет}
  25.   SetLineStyle (0,0,2*Random (2)+1);  {стиль линий}
  26.   b:=30;
  27.   c:=40;
  28.   b1:=280;
  29.   c1:=40;
  30.   b2:=30;
  31.   c2:=300;
  32.   b3:=280;
  33.   c3:=300;
  34.   SetFillStyle (6, red);
  35.   Circle (b,c,25);
  36.   FloodFill (b+1,c+1, red);
  37.   Circle (b1,c1,25);
  38.   FloodFill (b1+1,c1+1, Red);
  39.   Circle (b2,c2,25);
  40.   FloodFill (b2+1,c2+1, Red);
  41.   Circle (b3,c3,25);
  42.   FloodFill (b3+1,c3+1, Red);
  43.   repeat
  44.    delay (1000);
  45.    ClearViewPort;
  46.    delay (100);
  47.    b:=b+30;
  48.    c:=40;
  49.    b1:=280;
  50.    c1:=c1+30;
  51.    b2:=30;
  52.    c2:=c2-30;
  53.    b3:=b3-30;
  54.    c3:=300;
  55.    SetFillStyle (6, red);
  56.    Circle (b,c,25);
  57.    FloodFill (b+1,c+1, red);
  58.    Circle (b1,c1,25);
  59.    FloodFill (b1+1,c1+1, Red);
  60.    Circle (b2,c2,25);
  61.    FloodFill (b2+1,c2+1, Red);
  62.    Circle (b3,c3,25);
  63.    FloodFill (b3+1,c3+1, Red);
  64.    delay (100);
  65. Вот тут нужен поворот, а я не знаю какое условие надо
  66.    if (b<30) or (c<40) and (b+r+1>280) or (c+r+1>300) then
  67.     begin
  68.      b:=b+30;
  69.      c:=40;
  70.      b1:=280;
  71.      c1:=c1+30;
  72.      b2:=30;
  73.      c2:=c2-30;
  74.      b3:=b3-30;
  75.      c3:=300;
  76.      SetFillStyle (6, red);
  77.      Circle (b,c,25);
  78.      FloodFill (b+1,c+1, red);
  79.      Circle (b1,c1,25);
  80.      FloodFill (b1+1,c1+1, Red);
  81.      Circle (b2,c2,25);
  82.      FloodFill (b2+1,c2+1, Red);
  83.      Circle (b3,c3,25);
  84.      FloodFill (b3+1,c3+1, Red);
  85.      delay (100);
  86.      end
  87.   until KeyPressed;
  88.  { if ReadKey=#0 then
  89.    b:=ord (ReadKey); }
  90.  CloseGraph;
  91.  end;
  92. end.
  93.  

 Профиль  
                  
 
 Re: помогите с программированием
Сообщение27.11.2010, 17:30 
Заслуженный участник


27/04/09
28128
Проставьте отступы побольше ( :-) ).

 Профиль  
                  
 
 Re: помогите с программированием
Сообщение27.11.2010, 17:46 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Переехали в Программирование

 Профиль  
                  
 
 Re: помогите с программированием
Сообщение28.11.2010, 14:20 


28/11/10
2
вообще если все "жуки" одного цвета, то можно схитрить и не делать поворота ;), а просто сделать так, чтобы каждый "жук" доходил до конца - 1 шаг стороны А и цикл тупо начинался сначала )

Если жуки все же разных цветов и необходимо сделать движение по кругу, то нужно следующее:
1. точно определиться с шагом "жуков", чтобы сделать движение равномерным и с одинаковым отступом у краев квадрата. Либо рассчитывать шаг автоматически если сторона квадрата произвольная. пример для "жука" сверху: А=310, r=30, shag=30, отступ от края=по 5 с двух сторон, шагов нужно пройти 10, x(начальное)=20, x(конечное)=290 (x - твое b; y - твое c)
2. условие для поворота можно использовать такое: if (x + shag = A) то делаем поворот
3. реализация поворота у тебя неправильная (если ты ее описал так, как у тебя в коде). общий случай движения по кругу для каждого из жуков при его нахождении в определенной позиции (сверху, справа, снизу, слева) будет выглядеть так: "жук" сверху - x = x + shag, "жук" справа - y = y - shag, "жук" снизу - x = x - shag, "жук" слева - y = y - shag.
поворотом же будет просто смена знака у shag'a при определенной позиции
4. через if делать геморно, в данной ситуации лучше воспользоваться циклом while. Все это будет выглядеть так:
Код:
//начальные координаты
//рисуем круги
 
repeat
   
   while (x + shag <> A)
      begin
         x = x + shag;
         y1 = y1 + shag;
         x2 = x2 + shag;
         y3 = y3 - shag;
         
         //рисуем круги
      end
      
   while (x3 + shag <> A)
      begin
         y = y + shag;
         x1 = x1 - shag;
         y2 = y2 - shag;
         x3 = x3 + shag;
         
         //рисуем круги
      end
      
   while (x2 + shag <> A)
      begin
         x = x - shag;
         y1 = y1 - shag;
         x2 = x2 + shag;
         y3 = y3 + shag;
         
         //рисуем круги
         end
      
   while (x1 + shag <> A)
      begin
         y = y - shag;
         x1 = x1 + shag;
         y2 = y2 + shag;
         x3 = x3 - shag;
         
         //рисуем круги
      end
 
until KeyPressed;


циклы while пишутся именно в такой последовательности

-- Вс ноя 28, 2010 13:20:42 --

 Профиль  
                  
 
 Re: помогите с программированием
Сообщение28.11.2010, 16:47 


24/11/10
59
[quote="v0lkan0 в сообщении #381382"]вообще если все "жуки" одного цвета, то можно схитрить и не делать поворота ;), а просто сделать так, чтобы каждый "жук" доходил до конца - 1 шаг стороны А и цикл тупо начинался сначала )

да все "жуки" одного цвета вот именно этот цикл я не могу написать... :cry:

а цикл который предложили вы он не работает и зацикливается :cry:

 Профиль  
                  
 
 Re: помогите с программированием
Сообщение28.11.2010, 16:58 


28/11/10
2
точно ) совсем забыл еще определять другие координаты ) сорри

ну а для одноцветных жуков цикл без поворота таков:

Код:
repeat
//определяем начальные координаты всех "жуков"
while (x + shag < A)
      begin
         x = x + shag;
         y1 = y1 + shag;
         x2 = x2 - shag;
         y3 = y3 - shag;
         
         //рисуем круги
      end
until KeyPressed


должно работать

 Профиль  
                  
 
 Re: помогите с программированием
Сообщение29.11.2010, 00:28 


24/11/10
59
спасибо спасибо спасибо...прога заработала...)))))

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group