Помощь - Поиск - Пользователи - Календарь
Полная версия: Ввод длинной строки с клавиатуры
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Tan
1. Забавное задание, в чём его смысл ?
2. Именно если ввести то просто посимвольно считываешь и потом можно скинуть в массив чаров и вывести.
Perfez
Если я не ошибаюсь, такое громадище с клавиатуры ты вряд ли сможешь ввести:ввод с клавиатуры в Паскале имеет буфер, как и всё на свете имеюший определённые границы... yes2.gif так что понапрасну не трудись-лучше работать с файлом, хотя и это несколько неудобно... smile.gif но можно привыкнуть ко всему, вроде smile.gif .Смотри Файлы.
volvo
Цитата
так что понапрасну не трудись
Кто-то запрещает работать с PChar и посимвольным вводом (через ReadKey)? Нет... Тем более, что нечто подобное (если я не ошибаюсь - для строк до 400 символов) уже спрашивали, попробуй поискать (это к автору темы) ...
anchik
Цитата(Tan @ 11.04.2007 14:00) *

1. Забавное задание, в чём его смысл ?
2. Именно если ввести то просто посимвольно считываешь и потом можно скинуть в массив чаров и вывести.

Это часть решения задчки. Из файла считать могу, но такое условие в задаче, чтобы ввод с клавиатуры sad.gif

А как его посимвольно считывать?
Я, например, писала так:
 
var
str1: string;
begin
readLn(str1);



Как можно посимвольно считать?
Или надо readLn внутрь цикла поставить, считывать символы и складывать их в массив длиной 1100?
Tan

sum:=0;
repeat
ch:=readkey;
inc (sum);
until (ord(ch) = 13) or (sum = 1100); {ENTER}

Ну условие цикла сам под задание подредактируй. А так по идее если ты работать будешь с каждым элементом в отдельности, то создай массив чаров ms : array [1..1100] of char и после чтения пиши туда свой символ. Очень интересно для решения какого задания ты используешь такую операцию, отпиши главное задание если не трудно. Возможно это не лучший метод.
Malice
Можно приспособить вот такой вариант:
{$m 1024,0,65536}
uses dos;
begin
exec(getenv('comspec'),' /c cmd /c copy con test.$$$');
end.

Все введенное будет записано в файл test.$$$. Окончание ввода- Ctrl+Z, Enter. За то в качестве бонуса текст может быть многострочным smile.gif
anchik
Цитата(Tan @ 11.04.2007 16:05) *


sum:=0;
repeat
ch:=readkey;
inc (sum);
until (ord(ch) = 13) or (sum = 1100); {ENTER}

Ну условие цикла сам под задание подредактируй. А так по идее если ты работать будешь с каждым элементом в отдельности, то создай массив чаров ms : array [1..1100] of char и после чтения пиши туда свой символ. Очень интересно для решения какого задания ты используешь такую операцию, отпиши главное задание если не трудно. Возможно это не лучший метод.


Упс. Запрещено использовать CRT. sad.gif
Что делать, если и файл не использовать?
Гость
Цитата(Malice @ 11.04.2007 20:45) *

Можно приспособить вот такой вариант:
{$m 1024,0,65536}
uses dos;
begin
exec(getenv('comspec'),' /c cmd /c copy con test.$$$');
end.

Все введенное будет записано в файл test.$$$. Окончание ввода- Ctrl+Z, Enter. За то в качестве бонуса текст может быть многострочным smile.gif

Спасибо!
Все равно вопрос остается открытым: как сделать без записи в файл?
Malice
Делай тогда как Tan показал, readkey сделай сам своей функцией на асме. Выглядеть будет примерно так:
function readkey:char; assembler;
asm
xor ax,ax
int 16h
end;
tchib
На сколько я знаю, максимальная длина строки 255 символов, поэтому, как ни крути, сделать ее такой невозможно. Значит остается только массив из символов длинной 1100 элементов.
Поскольку CRT использовать нельзя, то остается только read. В цикле вводим каждый символ и все...
Цитата
в Паскале имеет буфер, как и всё на свете имеюший определённые границы... так что понапрасну не трудись-лучше работать с файлом

этот буффер и есть файл, причем текстовый, и процедура read без указания файловой переменной читает из файла input.txt, хотя на счет разширения точно сказать не могу.
Malice
Цитата(tchib @ 15.04.2007 0:17) *

Поскольку CRT использовать нельзя, то остается только read. В цикле вводим каждый символ и все...

Не получится.. Первый же Read(c:char) будет вводить в буфер всю строку и ждать enter-a. После энтера прочитается в "c" первый символ этой строки, следующие read-ы будут брать символы из буфера. Т.к. длина буфера ограничена (127 символов) - длина строки будет таже.
tchib
так я и не говорю вводить всю строку. Можно просто ввести символ, нажать энтер, и так 1100 разsmile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.