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

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

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

Автор: Jekaterina 5.01.2007 19:35

Добрый день! Решала задачу такого содержания: во входном файле в первой строке указано количество чисел, записанных ниже в строку или столбик, например:
3
23 45 78
или:
3
23
45
78
В файл вывода числа записываются в обратном порядке в строчку, т.е.: 78 45 78 и в первом, и во втором случае. Кроме того, в первой строчке может стоять 0 или ничего, тогда все равно считываются числа, записанные далее в строчку и выводятся в обратном порядке, напр.:
0
3 56 8
Вывод:
8 56 3
Если в первой сроке стоит 0 и далее чисел нет, либо входной файл пуст, то в выходной файл выводится сообщение "чисел нет". У меня, кажется, получилось все, кроме случая, когда колличечтво чисел в файле не дано, но числа есть, напр.:
(пустая строка)
4 6 8
Выводится в файл не 8 6 4, а нули! В отдельной программе я эту задачу решаю, все получается, а "добавить" в ту, что привожу ниже, не получается. Пожалуйста, подскажите, где ошибка!


Прикрепленные файлы
Прикрепленный файл  REVERSE.PAS ( 843 байт ) Кол-во скачиваний: 233

Автор: мисс_граффити 5.01.2007 20:14

а как классифицировать случай:
3
23
34
12
то ли это 4 числа без указанного количества, то ли 3, но с количеством?

Автор: Jekaterina 5.01.2007 20:23

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

Автор: Jekaterina 6.01.2007 6:08

Заработалась я, простите. Дала глупый ответ no1.gif В данном случае это 3 числа. Т.е. в выходном файле должно быть 12 34 23. Этот вариант у меня, кажется, выполняется корректно.

Автор: Lapp 6.01.2007 20:15

Ты ошибочно считаешь, что если считывать число оператором ReadLn, то в случае пустой строки он введет ноль. Ничего подобного, можешь поэкспериментировать на вводе с клавы. Вот простая программка для теста:

var
n:integer;
begin
ReadLn(n);
WriteLn('n=',n);
end.

Запусти ее и несколько раз нажми Enter (ввод пустой строки), а потом число (и снова Enter). Ты увидишь, что ReadLn(n) ждет ввода числа, игнорируя пустые строки.
Я рекомендую тебе первую строку читать не в числовую переменную, а в строковую. Затем, если она пустая - переходишь к алгоритму ввода чисел без заранее заданного количества, если в ней что-то есть - обрабатываешь это "что-то" процедурой Val.

Еще небольшое замечание: не ставь пробел между Read/Write и их параметрами - это смотрится странно.. И делай правильное форматирование (отступы нужно увеличивать после кадого begin и уменьшать на каждом end) - включая внешние begin/end программы!

Автор: Jekaterina 6.01.2007 22:02

Большое спасибо за ваш комментарий! Действительно, оформление решений у меня храмает (не только сами решения smile.gif ). Буду исправляться.