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

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

Форум «Всё о Паскале» _ Задачи _ Ожидание

Автор: Venik 17.04.2006 1:12

И снова здрасьте! Вообщем, выполняется операция. Repeat...until. И мне нужно, чтобы она выполнялась до тех пор, пока пользователь не нажмёт какую-нибудь клавишу.
И что получится? Напишите плиз. Пробовал разные варианты:
Repeat
...
Until AnyKey;
и тому подобное, но ничего не выходит. Скажите, какой код надо написать. Заранее спасибо.

Автор: volvo 17.04.2006 1:45

Repeat
...
Until KeyPressed;

тебе поможет...

Только перед выходом не забудь очистить буфер клавиатуры:
While KeyPressed Do ReadKey;

Автор: мисс_граффити 17.04.2006 1:48

В модуле crt есть ф-ция KeyPressed. Думаю, она Вас и интересует...

**опоздала. а как удалить сообщение?

Автор: Гость 17.04.2006 2:13

Спасибо, всё получилось!

Автор: Гость 17.04.2006 2:20

Ах, да и есшо:
Вот у меня выводится текст постепенно (тобишь медленно, по буквам). Необходимо, чтобы когда пользователь нажмёт любую клавишу, текст перестал выводится (аналог CTRL+BRAKE) и вывелся сразу весь, чтобы можно было приступить к другим операциям.
Ну вот, например заставка в играх идёт, вы нажимаете Пробел, заставка выключается и появляется главное меню. Вот также, но только с текстом.
Вариант увелечение вывода скорости текста (путём уменьшения Delay) не предлагать.
Ну блин, вообщем выводится текст. Нажимаю пробел и выводится сразу весь текст. Разом.

Автор: APAL 17.04.2006 2:56

Пиши свою функцию/процедуру.

Автор: volvo 17.04.2006 3:15

Цитата(Гость @ 16.04.2006 22:20)
Вариант увелечение вывода скорости текста (путём уменьшения Delay) не предлагать.

Но совсем без Delay ты тоже не обойдешься. Я надеюсь, объяснять, почему - не нужно?

uses crt;
const
T = 50;

function get_char(var f: text): string;
var ch: char;
begin
read(f, ch);
if ch = #13 then begin
read(f, ch);
get_char := #13#10;
end
else get_char := ch;
end;

var
f: text;
ch: char;

begin
assign(f, 'aa.txt');
reset(f);

repeat
if not eof(f) then begin
write(get_char(f));
delay(T)
end;
until eof(f) or keypressed;

while keypressed do readkey;

while not eof(f) do
write(get_char(f));
close(f);
end.

В файле 'aa.txt' - текст, который будет печататься. Величину T подберешь экспериментально.

Автор: Гость 18.04.2006 2:07

А попроще нельзя?
Вот код ИИ:

" (Показать/Скрыть)

Строчки, после которых идёт Delay (1) - это постепенный вывод текста. Затем, где If C[ix] - это ответ на условия. Могу потом поконкретнее объяснить. Так вот. Мне нужно чтобы текст, который медленно выводится, при нажатии любой клавиши выводился сразу и у меня появлялось меню. Т.е. чтобы ты нажимаешь кнопку, текст перестаёт выводится, выводится сразу и появляется меню. Вот.

Автор: volvo 18.04.2006 4:10

Цитата(Гость @ 17.04.2006 22:07)
А попроще нельзя?

lol.gif lol.gif lol.gif Это ты меня спрашиваешь про ПОПРОЩЕ??? Я тебя должен спросить, тебе не кажется? То, что ты делаешь в сотнях строк, у меня реализовано в двух десятках...

Цитата(Гость @ 17.04.2006 22:07)
Вот код ИИ:

blink.gif Код ЧЕГО??? blink.gif Ты вообще в курсе, что такое ИИ? ЭТО по-твоему ИИ? Ну, тогда, извини, что помешал тебе создавать Искуственный Интеллект своими советами... Больше мешать не буду. Можешь продолжать спокойно.

Автор: klem4 18.04.2006 11:14

извиняюсь за оффтоп ...

Это самый крутой код, который я видел в своей жизни. Долго писал ?))))

Хотя вообще-то да, искуственный интеллект - это вам не шутки lol.gif lol.gif lol.gif
good.gif

Автор: lapp 18.04.2006 13:32

В Юмор! lol.gif

Автор: FreeMan 18.04.2006 21:06

Вся тайна ИИ в иероглифах. Вольво, ты не запутался в этом сложнейшем коде? ты мог ошибится в 56 строчке. Помоему, это очень оптимальный вариант, надо провети замеры скорости, часто большая программа выигрывает по скорости.
Гость, а попробуй графику рисовать, по точкам лучше всего. Не верь им, они тебя запугивают, продолжай в том же духе!!! Не используй сложных алгоритмов.

Автор: volvo 18.04.2006 21:10

Цитата(FreeMan @ 18.04.2006 17:06)
а попробуй графику рисовать, по точкам лучше всего.
Главное - после вывода каждой точки не забыть Delay(1) поставить... rolleyes.gif

Автор: GoodWind 18.04.2006 21:36

и выводить обязательно через баб-ягу - не верь что прямой вывод в видеопамять быстрее чем через прерывания.

Автор: Гость 19.04.2006 0:58

А чё такое-то? Я просто пишу Искуственный Интеллект.
Эта программа состоит из 3 подпрограмм:
1)Массив, в котором содержаться условия;
2)Рандомизатор условий, в последствии выводит их на эран;
3)"Отвечальщик" на условия.
Ну и мелкая подподпрограмма, связывающая всё это воедино. Программа носит кодовое имя AA-v1.0FR. Принцип действия:
В массиве содержаться некие условия. Рандомизатор берёт эти условия и "перемешивает" их. Далее выводит одно из них (сами понимаете, в случайном порядке) на экран. Далее, другая подпрограмма анализирует это условие и ищет его в Базе Данных ответов. Как только она находит сопоставление, ответ сразу же выводится на экран. Пример:
Массив=Словарь, чтобы было понятнее.
В словаре есть 3 слова: препятствие, фотоаппарат, обрыв. Эти слова перемешивается и из них выбирается любое. Выбрано препятствие. На него ищется ответ и выводится на экран. Ответом является "Обойти препятствие". Т.е. грубо говоря вся работа программы сводится в одну строчку:
Условие=препятствие. Ответ на условие=обойти.
Вот собственно и всё.
Иероглифы-буквы. При Copy-Paste они превратились в кракозябру.
Delay(1) у меня стоит, так как я задолбался по 10 раз читать одно и тоже (что занимает довольно длительное вермя при выводе), чтобы протестировать 1 функцию. Поэтому я и обратился к вам за помощью в создании своеобразного "прерывания" вывода текста и вывода его целиком - сразу после нажатия люой клавиши. Стандартное значение Delay для постепенного вывода текста - 100. Чё вы сразу налетели-то?
Лучше посоветуйте, какие поправки в коде надо сделать!

Автор: Гость 19.04.2006 0:58

Только без шуток! sad.gif

Автор: GoodWind 19.04.2006 10:32

примерно так (компилятора на работе нет):

procedure DelayedOutput(str:string; delay_value:longint);
var i:byte;
begin
repeat
write(str[i]);
inc(i);
delay(delay_value);
until (keypressed) or (i>length(str));
while i<=length(str) do
begin
write(str[i]);
inc(i);
end;
end;
end;

можно конечно и оптимизировать...

Автор: Гость 19.04.2006 21:44

А куда здесь текст вставлять?

Автор: GoodWind 20.04.2006 10:25

блин, ты процедурами пользоваться умеешь ? а типы различаешь ? вот текст - это сторока или целое число ?

DelayedOutput('Hello World!',100);

вывод строки "Hello World!" c задержкой между в 100 мс. между выводом символов.