Урок 17. Задача №3. Решение.

Урок 17. Задача №3.

Пользователь вводит произвольную строку, посчитайте количество чисел в ней - тех, что больше 125. Например, в строке:

123ret34#2145esrt5

такое число только одно и это:

2145

(сначала выделите эти числа из строки и запишите их в массив (of integer), а затем уже посчитайте число тех, что больше 125).

type
  myArr = array [1..4] of integer;

function inc_too(var b : integer): integer;
begin
  b += 1;
  result := b;
end;

function Check_tmp(s : string; var mas : myArr): myArr;
var a, k : integer;
begin
  if(s <> '') then
  begin
    for k := low(mas) to high(mas) do
      if(mas[k] = 0) then
      begin
        val(s, a);
        mas[k] := a;
      end;
  end else
    Exit;
  result := mas;
end;

function Count_Arr(var z : integer; full_arr : myArr): integer;
var q : integer;
begin
  for q := low(full_arr) to high(full_arr) do
    if(full_arr[q] > 125) then
      inc_too(z);
  result := z;
end;

var str, tmp : string;
  key : boolean;
  i, j, c, conv : integer;
  arr : myArr;

begin
  writeln('Enter arbitrary string: ');
  readln(str);
  for i := 1 to length(str) do
  begin
    key := false;
    if(str[i] >= '0') and (str[i] <= '9') then
      tmp += str[i]
    else
      key := true;

    if(key = true) and (tmp <> '') then
    begin
      val(tmp, conv);
      j += 1;
      arr[j] := conv;
      tmp := '';
    end;
  end;

  Check_tmp(tmp, arr);
  Count_Arr(c, arr);
  writeln('In your string quantity numbers > 125: ', c);

  readln(); // Удержание консоль
end.// Завершение программы    
vedro-compota's picture

надо или возвращать значения, или передавать по ссылке.

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

vedro-compota's picture

for k := low(mas) to high(mas) do
      if(mas[k] = 0) then

-- не оптимально, передавайте в подпрограмму будущий индекс последнего элемента, на случай если он будет записан.

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

Firons's picture

type
  myArr = array [1..4] of integer;

function inc_too(b: integer): integer;
begin
  b += 1;
  result := b;
end;

function Check_tmp(s: string; mas: myArr): myArr;
var a: integer;
begin
  if(s <> '') then
  begin
    val(s, a);
    mas[4] := a;
  end;
  result := mas;
end;

function Count_Arr(z: integer; full_arr: myArr): integer;
var q: integer;
begin
  for q := low(full_arr) to high(full_arr) do
    if(full_arr[q] > 125) then
      z := inc_too(z);
  result := z;
end;

var str, tmp: string;
  key: boolean;
  i, j, c, conv: integer;
  arr: myArr;

begin
  writeln('Enter arbitrary string: ');
  readln(str);
  for i := 1 to length(str) do
  begin
    key := false;
    if(str[i] >= '0') and (str[i] <= '9') then
      tmp += str[i]
    else
      key := true;

    if(key = true) and (tmp <> '') then
    begin
      val(tmp, conv);
      j += 1;
      arr[j] := conv;
      tmp := '';
    end;
  end;

  Check_tmp(tmp, arr);
  writeln();
  writeln('In your string quantity numbers > 125: ', Count_Arr(c, arr));

  readln(); // Удержание консоль
end.// Завершение программы