[Pascal]Символьные переменыые и строки

Ответить
maxg5
Сообщения: 10
Зарегистрирован: 06 фев 2007, 21:54

Дана строка символов.Удалить из неё каждое слово нечётной длины.Слова отделяются друг от друга группой пробелов.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Самое важное:

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

If (lenght(s) mod 2=1) then delete(s,nachalo,konec);
Надеюсь, как отделятются слова враг от врага ты знаешь.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
maxg5
Сообщения: 10
Зарегистрирован: 06 фев 2007, 21:54

Напряг мозги,кое-как чтото написал.Исправте что не так плз!!!

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

var
str:string;
i,l,k,c:integer;
FLAG:BOOLEAN;
M:SET OF CHAR;
begin
M:=[' ','.',',','!',':',';','?','-','_','"',' '];
writeln('vvedite text');
readln(str);
str:=str+' ';
l:length(str);
i:=1;c:=0;k:=0;FLAG:=FALSE;
repeat
if not (str[i] in M) then
begin
k:=k+1;
i:=i+1;
FLAG:=TRUE;
end
else If (lenght(s) mod 2=1) then
begin
DELETE(STR,i-k,k);
k:=0;i:=i-k;FLAG:=FALSE;
end
else begin i:=i+1;FLAG:=FALSE;k:=0;end;
writeln(str);
end.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Несколько ужасно...
Во-первых, вместо set of char здесь намного проще использовать константную строку. Вроде const M='_,.!?:" ', тогда вместо if not (str in M) будет использоваться if pos(str,M)=0.
Во-вторых, я ничуть не удивлюсь, если компилятор ругается на If (lenght(s) mod 2=1). Ну нет у нас в программе переменной s. Если уж ты сохраняешь в переменной k длину текущего слова, так и сравнивать надо If odd(k) then. (одд - функция, возвращающая истину при нечетном аргументе).
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Хыиуду писал(а):Несколько ужасно...
Во-первых, вместо set of char здесь намного проще использовать константную строку. Вроде const M='_,.!?:" ', тогда вместо if not (str in M) будет использоваться if pos(str,M)=0.
Не соглашусь. Чем использование строки проще-то???
Со множеством, по-моему, гораздо нагляднее.
Предполагаю, что у способа с использованием строки "ноги растут" из языка C, где понятие "множество" просто отсутсвует как класс.
(хех, хороший калабмурчик получился, учитывая наличие в C++ термина "class" :) ))
Я, кстати (еще в "давние-давние годы"), когда начал изучать C++, то в качестве тренировки реализовал на C++ класс "множество" по аналогии с паскалевским.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

maxg5, а ты пробывал запустить свою программу прежде чем оставлять её код на форуме? Я ж тебе говорил: делишь строку на слова, и если (length(slovo) mod 2=1) then delete(stroka,nachalo,konec)!
Хыиуду писал(а):Несколько ужасно...
Полностью с тобой согласен. Код какой-то грязный, поналяпано всяких ненужных и неправильных процедур... ой! Только вместо слова "несколько" я бы написал "насколько" -);
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Ответить