Сделайте кто лабу. Составить программу вывода на экран окна, которое условно "разбито" на вертикальные столбцы. Верхние части столбцов окрашены одним фоном, нижние - другим. Граница раздела фонов столбцов формирует синусоиду произвольной амплитуды с периодом, равным ширине окна. При нажатии клавиши "Ввод" начинают изменяться соотношения заполнения столбцов разными фонами, т.е. создается эффект "бегущей" слева направо волны.
xds
14.10.2004 0:07
А волшебное слово?
Amro
14.10.2004 1:49
А он скажет, если сделаешь :D
Altair
14.10.2004 8:11
Цитата
Сделайте кто лабу.
Какая наглость! IP я твой запомню ....
APAL
14.10.2004 10:48
Oleg_Z, терпимей... ;)
BRS
14.10.2004 12:44
Не - насамом деле такие посты убивают... Я плохо представляю: о чем задумывается человек постящий такие посты? Что здесь сидят маньяки-кодеры которым абсолютно не чего делать и они просто деруться изза возможности порешить какую нить задачу?
GoodWind
14.10.2004 17:17
смотри а Анекдотах форму приказа
GoodWind
14.10.2004 17:23
Цитата
Что здесь сидят маньяки-кодеры которым абсолютно не чего делать и они просто деруться изза возможности порешить какую нить задачу?
сознаюсь, бывают у меня подобные состояния
Вадим
17.10.2004 20:44
Чё вы все так сразу налетели? Я же вас не заставляю, а прошу, пожалуйста, помочь написать лабу.
Altair
17.10.2004 20:49
Действительно, что все налетели? Ну у меня наверное как всегда было гадкое настроение, но у вас то? Так, Вадим, тут надо использовать функции: gotoXY (перевод курсора) и процелуры изменения цвета шрифта и фона...
volvo
17.10.2004 21:56
Вадим
Это самый первый набросок. Его еще можно улучшать и улучшать... ;)
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
17.10.2004 22:08
Прикольно, тока директиву сопроцес -ра надо включить {$N+}
volvo
17.10.2004 22:20
Так я и не выключал
BlackShadow
18.10.2004 21:42
Цитата
Цитата Что здесь сидят маньяки-кодеры которым абсолютно не чего делать и они просто деруться изза возможности порешить какую нить задачу?
сознаюсь, бывают у меня подобные состояния
Та же беда...
Гость_Вадим
21.10.2004 21:19
Volvo, после этой строчки выдаётся ошибка 116 currDegree := Pred(i) * (360 / numBars); Объясни, пожалуйста, в чём проблема. Спасибо.
volvo
21.10.2004 21:51
Ну Amro уже написал: первой строкой программы добавь
{$N+}
Bast
7.12.2007 15:47
Помогите переделать, что бы волна шла в другую сторону. Я сделала, но у меня таогда кусок синусоиды отрубаеться
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
7.12.2007 21: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;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.