Урок 22 Задача 2

Урок 22 Задача 2:

Есть исходный код:

var s:string;  i, n: Integer;
  a:  array[1..8] of char;
begin
 writeln('Vvedite stroku');
 readln(s);
 n := 1;
 while(n<10) do      // 1-8
   begin
   for i:=1 to Length(s) do
       if (s[i]>='0')and(s[i]<='9') then
         begin
           a[n]:=s[i]; 
           inc(n); 
         end;
   end;
 for i:=low(a) to high(a) do
   write(a[i],' '); // выводим массив
 readln();
end.

Задача:

Определить, что делает эта программа (добавьте текстовое описание)
В ней есть лишние конструкции -- перепишите код оптимальным образом

{   Программа принимает от пользователя строку и
  вписывает первые 8 числовых символов, встретившиеся в этой строке,
  в массив из 8 элементов.
    Если в строке числовых символов меньше, чем 8,
  то после записи в массив последнего числового символа
  происходит возврат к первому числовому символу в строке
  и снова производится запись числовых символов в массив,
  пока не заполнится весь массив  } 

Переписанный код:

var
  s: string;
  i, n: integer;
  a:  array[1..8] of char;
begin
  writeln('Vvedite stroku');
  readln(s);
  n:= 1;    // счетчик массива
  i:= 0;    // счетчик строки
  while not (n > high(a)) do // пока счетчик не выйдет за пределы массива
  begin
    if i = length(s) then             // если строка закончилась
      i:= 1                           // начинаем обходить строку заново
    else                              // если строка не закончилась
      i:= i+1;                        // переходим к след. символу строки
    if (s[i]>='0')and(s[i]<='9') then // если встретилось число
    begin
      a[n]:= s[i];                    // записываем его в массив
      write(a[n],' ');                // выводим элемент массива на экран
      inc(n);                         // увеличиваем счетчик массива
    end;
  end;
  readln();
end.  
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)