[Pascal]Символьные переменыые и строки
Дана строка символов.Удалить из неё каждое слово нечётной длины.Слова отделяются друг от друга группой пробелов.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Самое важное:
Надеюсь, как отделятются слова враг от врага ты знаешь.
Код: Выделить всё
If (lenght(s) mod 2=1) then delete(s,nachalo,konec);
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Напряг мозги,кое-как чтото написал.Исправте что не так плз!!!
Код: Выделить всё
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.
Несколько ужасно...
Во-первых, вместо 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. (одд - функция, возвращающая истину при нечетном аргументе).
Во-первых, вместо 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. (одд - функция, возвращающая истину при нечетном аргументе).
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Не соглашусь. Чем использование строки проще-то???Хыиуду писал(а):Несколько ужасно...
Во-первых, вместо 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)!
Полностью с тобой согласен. Код какой-то грязный, поналяпано всяких ненужных и неправильных процедур... ой! Только вместо слова "несколько" я бы написал "насколько" -);Хыиуду писал(а):Несколько ужасно...
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...