Страница 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 i:=1 to length(s) do
Если не ошибаюсь, то в цикле for верхняя граница вычисляется один раз, перед началом цикла. А так как length(s) все время уменьшается, то условие верхней границы вскоре перестает быть верным.

Так что, или использовать цикл while (где условие считается при каждом витке цикла), или (что я постоянно "рекламирую" :) ) перебирать символы строки не от начала к концу, а от конца к началу. В этом случае постоянное удаление символов отрицательного эффекта не имеет:

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

for i:=length(s) downto 1 do

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, иногда в ущерб эффективности.
А вообще лучше всего для подобных целей использовать регулярные выражения