Объясните код.

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

tr1nes
незнакомец
Сообщения: 1
Зарегистрирован: 31.05.2015 14:28:34

Объясните код.

Сообщение tr1nes »

Объясните код программы, распишите всех операторов, и что делают строки.

Код: Выделить всё

Program KL8;
uses crt;
var s,t:string;
i:integer;
begin
clrscr;
readln(s);
while s[1]=' ' do delete(s,1,1);
while pos('  ',s)<>0 do  delete(s,pos('  ',s),1);
while s[length(s)]=' ' do delete(s,length(s),1);
s:=s+' ';
t:='';
for i:=1 to length(s) do
if (s[i]<>' ') and (s[i]<>',')  then t:=t+s[i]
else begin
write('(',t,')',s[i]);
t:='';
readln;
end;
end.
MiniQ
новенький
Сообщения: 81
Зарегистрирован: 28.01.2013 16:31:55

Сообщение MiniQ »

Мой знакомый в таких случаях говорит:
- В этом предложении отсутствует одно слово.
- ???
- Пожалуйста.
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Учитель уже раздал задачки перед экзаменом, или что это?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

McLion писал(а):или что это?

Это магистерский диплом. :-D
Аватара пользователя
pda
постоялец
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение pda »

Помню, когда в институте учился и делал лабы по информатике на заказ (в промышленных масштабах :)) у меня была отдельная опция: "гарантируемо сдаваемая лаба". Каждая строка снабжалась не менее чем тремя строками комментариев, детально поясняющих что она делает и зачем. Позволяло сдавать лабу не видя её раньше и не зная паскаль. На любой вопрос "что делает эта строка" достаточно было прочесть комментарий. :)
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

pda писал(а):На любой вопрос "что делает эта строка" достаточно было прочесть комментарий.

Ну и почему вы не гениальный директор мелкомягких ??? :( :( :( В
Настолько бы проще было :D
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Доставили первые три цикла while :mrgreen:

tr1nes, ты явно не доплатил за программку :mrgreen: :mrgreen: :mrgreen:
Аватара пользователя
pda
постоялец
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение pda »

А строчка после них? ;-)
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

pda, да там вся прога бред, если подумать.
Аватара пользователя
pda
постоялец
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение pda »

Ну в оригинале было обычное задание на строки. Звучало оно как-то: "Пользователь вводит предложение, где слова разделены пробелами или запятыми. Выделите каждое слово в скобки и покажите разделитель".

Ну и дальше понеслось... Как обработается ситуация ", ". Что будет, если введённая строка будет пуста? Или состоять из одного или большего числа пробелов? ;-) А если запустить в Delphi или fpc в режиме objfpc?

А вообще прикольно. Даже чётная ошибка есть. :)
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

pdaугу... только вот это не та задача... да и Trim, как я понимаю, в компиляторе отсутствует.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

кроме отсутствия проверки пустой строки - весь код, в принципе, адекватный. Я не вижу повода для стёба... Начальные и конечные пробелы удаляются, сдвоенные (строенные и т.д.) пробелы чистятся - всё наглядным для обучения способом. s:=s+' '; - тут нужна, чтоб вывести последнее слово, согласно построенному алгоритму поиска разделителя.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

VirtUX писал(а):сдвоенные (строенные и т.д.) пробелы чистятся

:shock: действительно, сдвоенные, а не одиночные.
эх стыдоба! ничего уже не вижу!

Добавлено спустя 6 минут 33 секунды:
VirtUX писал(а):кроме отсутствия проверки пустой строки

в условиях задачки, скорей всего сказано, что строка не пустая.
Аватара пользователя
pda
постоялец
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение pda »

Лекс Айрин писал(а):да и Trim, как я понимаю, в компиляторе отсутствует.

Да, в Borland Pascal Trim не было. А функции для сжатия пробелов нет и сейчас, насколько знаю.

VirtUX писал(а):Я не вижу повода для стёба...

Да я и не стебусь. Просто вспомнил, как у нас лабы принимали. Если бы кто-то попытался сдать такое, то получил бы на ввод строку из пробела и пошёл бы переделывать код.

Про чётную ошибку, это скорее забавность. В реальной жизни такие приколы не слишком часто встречаются. Если строка была из одних пробелов, то она очистилась до пустой и делать s[Length(s)] нельзя, т.к. вместо символа попадёшь в счётчик. Но, поскольку 0 <> $20, этот код не выдаст ошибки и сработает "как надо"! 8) Ну это помимо того, что всё зависнет ещё на первом цикле и сюда выполнение просто не дойдёт.
Ответить