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

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

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

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

Сообщение tr1nes » 31.05.2015 15:31:00

Объясните код программы, распишите всех операторов, и что делают строки.
Код: Выделить всё
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.
tr1nes
незнакомец
 
Сообщения: 1
Зарегистрирован: 31.05.2015 15:28:34

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

Сообщение Helltar » 31.05.2015 16:19:32

Аватара пользователя
Helltar
новенький
 
Сообщения: 22
Зарегистрирован: 11.07.2013 02:28:53

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

Сообщение MiniQ » 01.06.2015 12:04:09

Мой знакомый в таких случаях говорит:
- В этом предложении отсутствует одно слово.
- ???
- Пожалуйста.
MiniQ
новенький
 
Сообщения: 81
Зарегистрирован: 28.01.2013 16:31:55

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

Сообщение McLion » 01.06.2015 13:19:41

Учитель уже раздал задачки перед экзаменом, или что это?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

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

Сообщение Vadim » 01.06.2015 16:39:02

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

Это магистерский диплом. :-D
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение pda » 01.06.2015 18:24:22

Помню, когда в институте учился и делал лабы по информатике на заказ (в промышленных масштабах :)) у меня была отдельная опция: "гарантируемо сдаваемая лаба". Каждая строка снабжалась не менее чем тремя строками комментариев, детально поясняющих что она делает и зачем. Позволяло сдавать лабу не видя её раньше и не зная паскаль. На любой вопрос "что делает эта строка" достаточно было прочесть комментарий. :)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

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

Сообщение Little_Roo » 01.06.2015 20:32:54

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

Ну и почему вы не гениальный директор мелкомягких ??? :( :( :( В
Настолько бы проще было :D
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение скалогрыз » 01.06.2015 21:37:06

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

tr1nes, ты явно не доплатил за программку :mrgreen: :mrgreen: :mrgreen:
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение pda » 02.06.2015 01:30:11

А строчка после них? ;-)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

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

Сообщение Лекс Айрин » 02.06.2015 10:50:05

pda, да там вся прога бред, если подумать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение pda » 02.06.2015 14:25:33

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

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

А вообще прикольно. Даже чётная ошибка есть. :)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

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

Сообщение Лекс Айрин » 02.06.2015 14:42:15

pdaугу... только вот это не та задача... да и Trim, как я понимаю, в компиляторе отсутствует.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение VirtUX » 02.06.2015 15:38:57

кроме отсутствия проверки пустой строки - весь код, в принципе, адекватный. Я не вижу повода для стёба... Начальные и конечные пробелы удаляются, сдвоенные (строенные и т.д.) пробелы чистятся - всё наглядным для обучения способом. s:=s+' '; - тут нужна, чтоб вывести последнее слово, согласно построенному алгоритму поиска разделителя.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение скалогрыз » 02.06.2015 16:14:04

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

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

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

в условиях задачки, скорей всего сказано, что строка не пустая.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение pda » 02.06.2015 17:06:04

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

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

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

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

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

След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru