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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2011, 00:41   #1
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию Повернуть волну

как изменить код, чтобы волна побежала справа налево, сверху вниз и снизу вверх
помогите написать ещё 3 кода, вот пример, когда волна бежит слева направо.. и сам текст задачи
текст: Составьте программу вывода на экран окна, которое условно «разбито» на вертикальные столбцы. Верхние части столбцов окрашены одним фоном, нижние – другим. Граница раздела фонов столбцов формирует синусоиду произвольной амплитуды с периодом, равным ширине окна. При нажатии клавиши Enter начинают изменяться соотношения заполнения столбцов разными фонами, т.е. создается эффект «бегущей» слева направо волны.

Код:
{$N+}
Uses Crt;

Const
  numBars = 80;
  TimeDelay = 100; { Задержка перед перерисовкой очередного кадра }

Var
  bars: Array[1 .. numBars] of Word;

  currDegree: Double;
  T: Word;
  i, j: Integer;

Const
  Change: Boolean = False;

Begin
  ClrScr;
  For i := 1 To numBars Do
    Begin 
      { Здесь я пытаюсь изобразить синусоиду }
      currDegree := Pred(i) * (360 / numBars);
      bars[i] := Trunc(13 - 12 * sin(currDegree / (180 / Pi)));
    End;


  While True Do
    Begin

      For j := 1 To numBars Do
        For i := 1 To 24 Do
          Begin
            If i > bars[j] Then TextColor(Red) Else TextColor(Yellow);
            GotoXY(j, i); Write(#176)
          End;

      If Change Then
        Begin
          { Если уже был нажат Enter }
          Delay(TimeDelay);

          T := bars[1];
          Move(bars[2], bars[1], Pred(numBars)*SizeOf(Word));
          bars[numBars] := T;

          { Для выхода из программы - Esc }
          If KeyPressed Then
            If ReadKey = #27 Then Break
        End
      Else
        Begin
          { Сразу после отрисовки статичной картинки - ждем нажатия на Enter }
          While not KeyPressed Do;
          Change := (ReadKey = #13)
        End;
    End;

  ClrScr;
End.
Klik_1602 вне форума Ответить с цитированием
Старый 04.03.2011, 00:58   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

чтобы двигалось слева направо изменить код сдвига на такой:
Код:
          T := bars[numBars];
          Move(bars[1], bars[2], Pred(numBars)*SizeOf(Word));
          bars[1] := T;

а движение сверху вниз или снизу вверх я себе представить не могу...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.03.2011, 01:10   #3
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

То же, но для строк, и волна «бежит» сверху вниз, снизу вверх.
Klik_1602 вне форума Ответить с цитированием
Старый 04.03.2011, 01:11   #4
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

спасибо большое за слева направо))) очень помогли))
Klik_1602 вне форума Ответить с цитированием
Старый 04.03.2011, 01:13   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, что ли?
Код:
{$N+}
Uses Crt;

Const
  numBars = 24;
  TimeDelay = 100; { Задержка перед перерисовкой очередного кадра }

Var
  bars: Array[1 .. numBars] of Word;

  currDegree: Double;
  T: Word;
  i, j: Integer;

Const
  Change: Boolean = False;

Begin
  ClrScr;
  For i := 1 to numBars Do
    Begin
      { Здесь я пытаюсь изобразить синусоиду }
      currDegree := (i-1) * (180 / numBars);
      bars[i] := Trunc(80 - 79 * sin(currDegree / (180 / Pi)));
    End;


  While True Do
    Begin

      For j := 1 To numBars Do
        For i := 1 To 80 Do
          Begin
            If i > bars[j] Then TextColor(Red) Else TextColor(Yellow);
            GotoXY(81-i, j); Write(#176)
          End;

      If Change Then
        Begin
          { Если уже был нажат Enter }
          Delay(TimeDelay);

          T := bars[numBars];
          Move(bars[1], bars[2], Pred(numBars)*SizeOf(Word));
          bars[1] := T;

          { Для выхода из программы - Esc }
          If KeyPressed Then
            If ReadKey = #27 Then Break
        End
      Else
        Begin
          { Сразу после отрисовки статичной картинки - ждем нажатия на Enter }
          While not KeyPressed Do;
          Change := (ReadKey = #13)
        End;
    End;

  ClrScr;
End.
ну и в обратную сторону:
Код:
          T := bars[1];
          Move(bars[2], bars[1], Pred(numBars)*SizeOf(Word));
          bars[numBars] := T;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.03.2011, 01:20   #6
Klik_1602
Пользователь
 
Аватар для Klik_1602
 
Регистрация: 06.09.2010
Сообщений: 51
По умолчанию

вы гений))) спасибо большое)) очень вам благодарна)))
Klik_1602 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повернуть массив на 90 градусов HIP-H0P Помощь студентам 6 31.01.2012 23:46
Повернуть div под углом gigi1988 HTML и CSS 1 22.12.2010 09:47
повернуть экран на 180 градусов jihot Общие вопросы Delphi 4 10.04.2010 13:07
Как повернуть изображение в TextBox(e)? Diego__ Microsoft Office Word 10 18.08.2009 12:01
Повернуть ProgressBar Monstrodamus2007 Помощь студентам 9 17.02.2009 19:04