Глава 17.Задача №3.Пользователь вводит произвольную строку, посчитайте количество чисел в ней - тех, что больше 125.

Задача №3 из главы 17

Пользователь вводит произвольную строку, посчитайте количество чисел в ней - тех, что больше 125. Например, в строке:
123ret34#2145esrt5
такое число только одно и это:
2145
(сначала выделите эти числа из строки и запишите их в массив (of integer), а затем уже посчитайте число тех, что больше 125)

program pascal_17_3;
var i , j , int , code , len_arr : integer; //секция обьявления переменных
   symbol , str , empty_str : string;
   arr : array[1..10] of integer;
begin // начало программы
i := 1;
j := 1;
len_arr := 0;
writeln( 'Input string : ' );
readln( str ) ; // считывание строки
while( i <= length( str ) ) do // внешний while
begin
  empty_str := ' '; // пустая строка
  symbol := str[i]; // символу присваиваем значение элемента строки
  while( symbol >= '0' ) and ( symbol <= '9' ) do // пока верно делаем
  begin
    empty_str += symbol; // добавляем в пустую стоку
    i += 1; // увеличиваем индекс
    if( i <= length( str ) ) then // если не вышли за длинну строки
      symbol := str[i] // присваиваем элемент с большим индексом
    else
      break; // если вышли за длинну то завершаем
  end;
  i += 1; // увеличиваем при каждом проходе
  if( empty_str <> ' ' ) then // если что то накопили  
  begin
    val( empty_str , int , code ); // преобразуем в числовое значение 
    arr[j] := int; // присваиваем элементу массива 
    j += 1; // увеличиваем индекс массива
    len_arr += 1; // считаем длинну массива
  end
end;
for j := 1 to len_arr do // обходим массив 
begin
  if( arr[j] ) > 125 then //  если больше 125  то выводим
  write( arr[j] , ' ' );
end;
readln();
end.
vedro-compota's picture

декомпозируйте решение на подпрограммы

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

program pascal_17_3;
type arr = array[1..10] of integer; // секция обьявления типов
 
function filling_array( str: string; in_arr: arr ): arr;// заполнение массива
var symbol, empty_str : string;
    i, j, int, code: integer;  
begin // начало тела функции
  i := 1;
  j := 1;
  while( i <= length( str ) ) do // внешний while
  begin
    empty_str := ' '; // пустая строка
    symbol := str[i]; // символу присваиваем значение элемента строки
    while( symbol >= '0' ) and ( symbol <= '9' ) do // пока верно делаем
    begin
      empty_str += symbol; // добавляем в пустую стоку
      i += 1; // увеличиваем индекс
      if( i <= length( str ) ) then // если не вышли за длинну строки
        symbol := str[i] // присваиваем элемент с большим индексом
      else
        break; // если вышли за длинну то завершаем
    end;
    i += 1; // увеличиваем при каждом проходе
    if( empty_str <> ' ' ) then // если что то накопили  
    begin
      val( empty_str , int , code ); // преобразуем в числовое значение 
      in_arr[j] := int; // присваиваем элементу массива 
      j += 1; // увеличиваем индекс массива
    end
  end;
  filling_array := in_arr;
end; // завершение тела функции
 
procedure print_line( element, count_in : integer );//вывод очередного значения
begin // начало тела процедуры
  write( 'value ', count_in,'= ', element, ' ' );  
end; // завершение тела процедуры
 
procedure conclusion( out_arr : arr ); // вывод массива
var j , count : integer;
begin // начало тела процедуры
  count := 0;
  for j := low( out_arr ) to high( out_arr ) do // обходим массив 
  begin
    if( out_arr[j] ) > 125 then //  если больше 125 
    begin
      count += 1;
      print_line( out_arr[j] ,count );
    end;
  end;
end; // завершение тела процедуры
 
var new_arr : arr; //секция обьявления переменных
   str_in : string;
begin // начало программы
  writeln( 'Input string : ' );
  readln( str_in ) ; // считывание строки
  new_arr := filling_array( str_in, new_arr );
  conclusion( new_arr );
end.
vedro-compota's picture

procedure conclusion( out_arr : arr );

-- переделать на функцию, которая принимает исходный массив и значение минимума для фильтрации и возвращает отфильтрованный массив.

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

vedro-compota's picture

проверьте будет ли работать:

procedure (a: array[1..10] of integer);
function (a: array[1..10] of integer): array[1..10] of integer

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

program pascal_17_3;
type arr = array[1..10] of integer; // секция обьявления типов
 
function filling_array( str: string; in_arr: arr ): arr;// заполнение массива
var symbol, empty_str : string;
    i, j, int, code: integer;  
begin // начало тела функции
  i := 1;
  j := 1;
  while( i <= length( str ) ) do // внешний while
  begin
    empty_str := ' '; // пустая строка
    symbol := str[i]; // символу присваиваем значение элемента строки
    while( symbol >= '0' ) and ( symbol <= '9' ) do // пока верно делаем
    begin
      empty_str += symbol; // добавляем в пустую стоку
      i += 1; // увеличиваем индекс
      if( i <= length( str ) ) then // если не вышли за длинну строки
        symbol := str[i] // присваиваем элемент с большим индексом
      else
        break; // если вышли за длинну то завершаем
    end;
    i += 1; // увеличиваем при каждом проходе
    if( empty_str <> ' ' ) then // если что то накопили  
    begin
      val( empty_str , int , code ); // преобразуем в числовое значение 
      in_arr[j] := int; // присваиваем элементу массива 
      j += 1; // увеличиваем индекс массива
    end
  end;
  filling_array := in_arr;
end; // завершение тела функции
 
procedure print_line( element, count_in, number : integer );//вывод очередного значения
begin // начало тела процедуры
  write(  count_in, ' value more ',number,' = ', element, ', ' );  
end; // завершение тела процедуры
 
function conclusion( out_arr : arr; number: integer ): arr;  // вывод массива
var j , count : integer;
begin // начало тела процедуры
  count := 0;
  for j := low( out_arr ) to high( out_arr ) do // обходим массив 
  begin
    if( out_arr[j] ) > number then //  если больше 125 
    begin
      count += 1;
      print_line( out_arr[j] ,count, number );
    end;
  end;
end; // завершение тела процедуры
 
var new_arr : arr; //секция обьявления переменных
   str_in : string;
begin // начало программы
  writeln( 'Input string : ' );
  readln( str_in ) ; // считывание строки
  new_arr := filling_array( str_in, new_arr );
  conclusion( new_arr, 125 );
end.
vedro-compota's picture

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

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