Показать сообщение отдельно
Старый 13.10.2012, 14:47   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от lenchik1 Посмотреть сообщение
зависает при вводе слов
Что вполне естественно. Потому что Вы не разобрались в разнице между read и readln, а также write и writeln, и ставите эти операторы, как ни попадя. Конкретно:
1. У Вас:
Код:
    Writeln('введи кол-во слов в кодировочной книге');
    read(n);
Так нельзя. При вводе с консоли одиночного числа, строки или символа следует использовать ТОЛЬКО readln. Это - некая тонкость, которую просто необходимо знать. Я бы предложил так:
Код:
  Write('введи кол-во слов в кодировочной книге ');
  readln(n);
2. Аналогично, вместо
Код:
write('введи ',n,' слов');
следует написать
Код:
writeln('введи ',n,' слов');
Зачем же прилеплять первое вводимое слово к выведенному на экран указанию?
3. Но это всё "цветочки", а вот дальше пошли "ягодки".
Код:
k:=0;
 repeat
   Readln(s);
   Write(f,s);
   k:=k+1;
 until k=n;
Сразу возникает вопрос - зачем тут вообще цикл repeat-until, почему не обойтись обычным for k:=1 to n do? Впрочем, это не главное. При такой записи в файл все вводимые слова сольются воедино, без пробелов между ними. А потому нужно либо писать Writeln(f,s); (тогда каждое слово займет свою отдельную строку), либо Write(f,s+' '); (тогда слова разделятся пробелами).
4.
Код:
reset(f);
Не пойдёт! Для того, чтобы ранее открытый на запись файл открыть на чтение, его необходимо предварительно закрыть. То есть так:
Код:
close(f);
reset(f);
5. Продолжение - в том же духе.
Код:
while not eof(f) do
 begin
  read(f,s);
  write(s,' ');
 end;
 Close(f);
Так можно, если
а) Каждое слово в файле располагается на своей отдельной строке.
б) Вместо read(f,s); поставить readln(f,s);
Если же слова в файле идут просто через пробел, то нужно организовывать довольно сложную процедуру посимвольного считывания до пробела - пропуск пробела - следующее считывание и т.д. Между прочим, использование оператора read для считывания строковой переменной вообще недопустимо. Никогда и нигде. Только readln.
Вот Вам для начала. Размышляйте, исправляйте.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070