Решение №5 из главы 16. Выделите из строки массив первых 8 строковых литералов, которые являются числами

Задача №5

Пользователь вводит строку произвольных символов, выделите из неё массив первых 8 строковых литералов, которые являются числами. И выведите эти числа на экран.
Например, из строки:
rew2@#$$#435tr353453t4er4
должны быть выделены подстроки:
2
435
353453
4
4

program pascal_string_array_char2;
var i , j , amount : integer; // секция обьявления переменных
    inputstr , emptystr , symbol : string;
    str : array [1..8] of string;
begin // начало тела программы
i := 1;
j := 1;
amount := 0;
writeln( 'input string : ' );
readln( inputstr ) ; // считывание строки
while( i <= length( inputstr ) ) do // пока истинно условие выполняем
begin
  emptystr := ' ' ; // пустая строка
  symbol := inputstr[ i ]; // первый символ строки
  { пока условие выполняется в пустую строку добавляем символы строки}
  while( symbol >= '0' ) and ( symbol <= '9' ) and ( amount <> 8 ) do
  begin
    emptystr += symbol; // добавляем
    i+=1; // при каждом проходе увеличиваем индекс 
    if( i <= length( inputstr ) ) then // если не вышли за длинну строки
      symbol := inputstr[ i ] // символ равен символу строки с индексом i
    else
      break; // иначе завершаем
  end;
  i+=1; // увеличиваем при каждом проходе внешнего цикла
  if ( emptystr <> ' ' ) then // если строка не пуста 
  begin
    str[j] := emptystr; // элемент массива равен накопленной строке
    j+=1; // увеличиваем индекс массива
    amount += 1; // увеличиваем переменную пока она не будет равна 8
  end
end;
for j := 1 to high(str) do //обходим массив с целью извлечения его значений
  writeln( str[j] ); // выводим элемент массива
end.

program pascal_function_string_array_char2;
type arr =  array [1..8] of string; //секция обьвления типов
     
function filling_array( inputstr : string ): arr; //функция заполнения массива
var acc_string , symbol : string;
      i , j , amount : integer;
      str_arr : arr;
begin // начало тела функции
  i := 1;
  j := 1;
  amount := 0;
  readln( inputstr ) ; // считывание строки
  while( i <= length( inputstr ) ) do // пока истинно условие выполняем
  begin
    acc_string := ' ' ; // пустая строка
    symbol := inputstr[ i ]; // первый символ строки
    { пока условие выполняется в пустую строку добавляем символы строки}
    while( symbol >= '0' ) and ( symbol <= '9' ) and ( amount <> 8 ) do
    begin
      acc_string += symbol; // добавляем
      i+=1; // при каждом проходе увеличиваем индекс 
      if( i <= length( inputstr ) ) then // если не вышли за длинну строки
        symbol := inputstr[ i ] // символ равен символу строки с индексом i
      else
        break; // иначе завершаем
    end;
    i += 1; // увеличиваем при каждом проходе внешнего цикла
    if ( acc_string <> ' ' ) then // если строка не пуста 
    begin
      str_arr[j] := acc_string; // элемент массива равен накопленной строке
      j+=1; // увеличиваем индекс массива
      amount += 1; // увеличиваем переменную пока она не будет равна 8
    end;
  end;
  filling_array := str_arr; // передача значения функции в глобальную область 
end; // завершение тела функции
 
procedure conclusion_arr( out_arr : arr ); // процедура вывода массива
var j : integer;
begin
  for j := 1 to high(out_arr) do //обходим массив с целью извлечения его значений
    writeln( out_arr[j] ); // выводим элемент массива
end;

var
  new_arr : arr; // секция обьявления переменных 
begin // начало основной программы
  new_arr := filling_array('input string : '); // вызов функции
  conclusion_arr( new_arr ); // вызов процедуры
  readln(); 
end. // завершение основной программы
vedro-compota's picture

решение засчитано

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