Страница 2 из 2
Re: Pascal.Множественный тип данных
Добавлено: 02 июн 2008, 18:47
MOTOCoder
Что тут сложного?
[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]
Re: Pascal.Множественный тип данных
Добавлено: 03 июн 2008, 11:45
Хыиуду
Можно, в принципе, и с циклом работать, только его приходится модернизировать:
Код: Выделить всё
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;
Не знаю, может, без второго брейка можно обойтись, проверять лень.
Re: Pascal.Множественный тип данных
Добавлено: 03 июн 2008, 13:24
MOTOCoder
Да можно было вообще просто проверять каждый символ в обычном цикле, а подходящие записыавть в другую строку.
Re: Pascal.Множественный тип данных
Добавлено: 03 июн 2008, 13:44
BBB
Если не ошибаюсь, то в цикле for верхняя граница вычисляется один раз, перед началом цикла. А так как length(s) все время уменьшается, то условие верхней границы вскоре перестает быть верным.
Так что, или использовать цикл
while (где условие считается при каждом витке цикла), или (что я постоянно "рекламирую"

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