Что тут сложного?
[syntax='Delphi']
const
GL=['A','E','I','O','U','Y'];
var
Txt:string;
I:integer;
procedure Input;
begin
writeln('Введите текст');
ReadLn(Txt);
end;
procedure Main;
begin
I:=1;
while I<=Length(Txt) do
if (UpCase(Txt) in GL) then
Delete(Txt,I,1)
else
Inc(I);
end;
procedure Output;
begin
Writeln(Txt);
Readln;
end;
begin
Input;
Main;
Output;
end.
[/syntax]
Pascal.Множественный тип данных
Ни что так не ограничивает фантазию программиста, как компилятор...
Можно, в принципе, и с циклом работать, только его приходится модернизировать:
Не знаю, может, без второго брейка можно обойтись, проверять лень.
Код: Выделить всё
for i:=1 to length(s) do
while s[i] in mnoz do
begin
delete(s,i,1);
if i>length(s) then break;
end;
if i>length(s) then break;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Да можно было вообще просто проверять каждый символ в обычном цикле, а подходящие записыавть в другую строку.
Ни что так не ограничивает фантазию программиста, как компилятор...
Если не ошибаюсь, то в цикле for верхняя граница вычисляется один раз, перед началом цикла. А так как length(s) все время уменьшается, то условие верхней границы вскоре перестает быть верным.Хыиуду писал(а):Код: Выделить всё
for i:=1 to length(s) do
Так что, или использовать цикл while (где условие считается при каждом витке цикла), или (что я постоянно "рекламирую"

Код: Выделить всё
for i:=length(s) downto 1 do
BBB писал(а):Если не ошибаюсь, то в цикле for верхняя граница вычисляется один раз, перед началом цикла. А так как length(s) все время уменьшается, то условие верхней границы вскоре перестает быть верным.
Именно поэтому я и ставлю проверку на выход за границу строки
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Хыиуду,
так навороченно как-то получилось все. Цикл for, внутри него (!) еще и цикл while, внутри которого еще и проверка на if.
Я же предложил:
так навороченно как-то получилось все. Цикл for, внутри него (!) еще и цикл while, внутри которого еще и проверка на if.
Я же предложил:
Код: Выделить всё
for i:=length(s) downto 1 do begin
if (s[i] in mnoz) then begin
delete(s,i,1);
end;
end;
BBB, не спорю, изящней. Видимо, закостеневаю уже. Привык большинство проблем решать циклом с to вместо downto, иногда в ущерб эффективности.
А вообще лучше всего для подобных целей использовать регулярные выражения
А вообще лучше всего для подобных целей использовать регулярные выражения
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.