Страница 1 из 2

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

СообщениеДобавлено: 31.05.2015 15:31:00
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.

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

СообщениеДобавлено: 31.05.2015 16:19:32
Helltar

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

СообщениеДобавлено: 01.06.2015 12:04:09
MiniQ
Мой знакомый в таких случаях говорит:
- В этом предложении отсутствует одно слово.
- ???
- Пожалуйста.

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

СообщениеДобавлено: 01.06.2015 13:19:41
McLion
Учитель уже раздал задачки перед экзаменом, или что это?

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

СообщениеДобавлено: 01.06.2015 16:39:02
Vadim
McLion писал(а):или что это?

Это магистерский диплом. :-D

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

СообщениеДобавлено: 01.06.2015 18:24:22
pda
Помню, когда в институте учился и делал лабы по информатике на заказ (в промышленных масштабах :)) у меня была отдельная опция: "гарантируемо сдаваемая лаба". Каждая строка снабжалась не менее чем тремя строками комментариев, детально поясняющих что она делает и зачем. Позволяло сдавать лабу не видя её раньше и не зная паскаль. На любой вопрос "что делает эта строка" достаточно было прочесть комментарий. :)

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

СообщениеДобавлено: 01.06.2015 20:32:54
Little_Roo
pda писал(а):На любой вопрос "что делает эта строка" достаточно было прочесть комментарий.

Ну и почему вы не гениальный директор мелкомягких ??? :( :( :( В
Настолько бы проще было :D

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

СообщениеДобавлено: 01.06.2015 21:37:06
скалогрыз
Доставили первые три цикла while :mrgreen:

tr1nes, ты явно не доплатил за программку :mrgreen: :mrgreen: :mrgreen:

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

СообщениеДобавлено: 02.06.2015 01:30:11
pda
А строчка после них? ;-)

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

СообщениеДобавлено: 02.06.2015 10:50:05
Лекс Айрин
pda, да там вся прога бред, если подумать.

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

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

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

А вообще прикольно. Даже чётная ошибка есть. :)

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

СообщениеДобавлено: 02.06.2015 14:42:15
Лекс Айрин
pdaугу... только вот это не та задача... да и Trim, как я понимаю, в компиляторе отсутствует.

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

СообщениеДобавлено: 02.06.2015 15:38:57
VirtUX
кроме отсутствия проверки пустой строки - весь код, в принципе, адекватный. Я не вижу повода для стёба... Начальные и конечные пробелы удаляются, сдвоенные (строенные и т.д.) пробелы чистятся - всё наглядным для обучения способом. s:=s+' '; - тут нужна, чтоб вывести последнее слово, согласно построенному алгоритму поиска разделителя.

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

СообщениеДобавлено: 02.06.2015 16:14:04
скалогрыз
VirtUX писал(а):сдвоенные (строенные и т.д.) пробелы чистятся

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

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

в условиях задачки, скорей всего сказано, что строка не пустая.

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

СообщениеДобавлено: 02.06.2015 17:06:04
pda
Лекс Айрин писал(а):да и Trim, как я понимаю, в компиляторе отсутствует.

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

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

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

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