Опубликован: 04.06.2007 | Уровень: для всех | Доступ: свободно | ВУЗ: Кабардино-Балкарский государственный университет
Дополнительный материал 1:

Выполнение аналога демоЕГЭ-2007

С4. Составить алгоритм удаления из заданного текста a всех символов, расположенных на нечетных местах другого заданного текста b.

Решение. Алгоритм (ШАЯ, Паскаль, Бейсик) запишется следующим образом.

ШАЯ:

алг C4(арг лит a, b, рез лит a)
дано  | текст a и текст b
надо  | из текста a удалить все символы, входящие в текст b и расположенные
      | на нечетных позициях текста b
нач   | начало алгоритма
   цел i,  | количество символов текста a
       j,  | количество символов текста b
       d,  | длина текста b
       m   | длина текста а
ввод(a,b)  | ввод исходных текстов
m:=длина(a) | переменной m присваиваится длина a
d:=длина(b) | переменной d присваиваится длина b
i:=1        | начальный номер символа a
нц пока (i<m) | перебор элементов текста a
  j:=1        | начальный нечетный номер символа b
  нц пока (j<d+1) | перебор нечетных символов b
    если (a[i]=b[j]) | если символ a совпадает с b
      то | организуем цикл удаления i-го символа a:
        нц для k от i до m-1 | этот цикл, последовательно сдвигает все
            a[k]:=a[k+1] | следующие символы a на 1 позицию вперед
         кц | конец цикла удаления символа из a
         m:=m-1  | уменьшение длины текста a из-за удаленного символа
     все | конец проверки совпадения символов
     j:=j+2 | переход к следующему нечетному символу текста b
  кц | конец цикла по элементам текста b
  i:=i+1 | переход к следующему символу текста a
кц   | конец цикла по элементам текста a
вывод("результирующий текст: ", a)  | вывод результата
кон  | конец алгоритма.

Программа на Паскале (не комментируем и записываем компактно):

var
   d, m, i, j: integer;
   a, b: string;
begin
   readln(a,b);
   m:=length(a);
   d:=length(b);
   i:=1;
   while (i<m) do 
      begin   
         j:=1; 
         while (j<d+1) do
            begin
               if (a[i]=b[j]) 
                  then begin 
                           for k:=i to m-1 do
                               a[k]:=a[k+1];
                           m:=m-1
                       end;
               j:=j+2
            end;
         i:=i+1
      end;
   writeln('результирующий текст: ', a); 
end.

Программа на Бейсике (не комментируем и записываем компактно):

dim
   d, m, i, j as integer
   a, b as string
   input a, b
   m = length(a) 
   d = length(b) 
   i = 1
   while (i < m) 
       j = 1 
       while (j < d + 1)
           if (a(i) = b(j)) 
             then for k = i to m - 1: a(k) = a(k + 1): next k: m = m - 1
           end if
           j = j + 2
       wend
       i = i + 1
   wend
   print("результирующий текст:", a) 
end.