Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Процедуры и функции модуля Crt и Dos

Автор: Вадим 14.10.2004 0:07

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

Автор: xds 14.10.2004 4:07

А волшебное слово?

Автор: Amro 14.10.2004 5:49

А он скажет, если сделаешь :D

Автор: Altair 14.10.2004 12:11

Цитата
Сделайте кто лабу.

Какая наглость! angry.gif angry.gif
IP я твой запомню ....

Автор: APAL 14.10.2004 14:48

Oleg_Z, терпимей... ;)

Автор: BRS 14.10.2004 16:44

Не - насамом деле такие посты убивают... Я плохо представляю: о чем задумывается человек постящий такие посты? Что здесь сидят маньяки-кодеры которым абсолютно не чего делать и они просто деруться изза возможности порешить какую нить задачу?

Автор: GoodWind 14.10.2004 21:17

смотри а Анекдотах форму приказа lol.gif

Автор: GoodWind 14.10.2004 21:23

Цитата
Что здесь сидят маньяки-кодеры которым абсолютно не чего делать и они просто деруться изза возможности порешить какую нить задачу?

сознаюсь, бывают у меня подобные состояния rolleyes.gif

Автор: Вадим 18.10.2004 0:44

Чё вы все так сразу налетели?
Я же вас не заставляю, а прошу, пожалуйста, помочь написать лабу. blink.gif

Автор: Altair 18.10.2004 0:49

Действительно, что все налетели?
Ну у меня наверное как всегда было гадкое настроение, но у вас то?
Так, Вадим, тут надо использовать функции:
gotoXY (перевод курсора)
и процелуры изменения цвета шрифта и фона...

Автор: volvo 18.10.2004 1:56

Вадим

Это самый первый набросок. Его еще можно улучшать и улучшать... ;)


{$N+}
Uses Crt;

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

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.



Исправлено

Автор: Amro 18.10.2004 2:08

Прикольно, тока директиву сопроцес -ра надо включить {$N+}

Автор: volvo 18.10.2004 2:20

Так я и не выключал lol.gif

Автор: BlackShadow 19.10.2004 1:42

Цитата
Цитата Что здесь сидят маньяки-кодеры которым абсолютно не чего делать и они просто деруться изза возможности порешить какую нить задачу?

сознаюсь, бывают у меня подобные состояния

Та же беда...

Автор: Гость_Вадим 22.10.2004 1:19

Volvo, после этой строчки выдаётся ошибка 116
currDegree := Pred(i) * (360 / numBars);
Объясни, пожалуйста, в чём проблема.
Спасибо.

Автор: volvo 22.10.2004 1:51

Ну Amro уже написал:
первой строкой программы добавь


{$N+}


Автор: Bast 7.12.2007 19:47

Помогите переделать, что бы волна шла в другую сторону. Я сделала, но у меня таогда кусок синусоиды отрубаеться

Автор: Michael_Rybak 7.12.2007 19:54

Код в студию.

Автор: Bast 7.12.2007 20:56

{$N+}
Uses Crt;

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

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.

Автор: volvo 8.12.2007 1:09

Ну, неужели так сложно догадаться, что надо всего лишь "прокрутить" массив в другом направлении:

Заменить кусок:

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

вот на это:
        T := bars[numBars];
Move(bars[1], bars[2], Pred(numBars)*SizeOf(Word));
bars[1] := T;