Урок 15. Задача 14.

Урок 15. Задача 14.

Напишите функцию, которая принимает на вход целое число N и возвращается строку, содержащую арифметическое выражение вида:

a1 # a2 # ..... # aN

Где:

a1, a2,....., aN -- случайные числа из диапазона от 1 до 100
# - один из случайных знаков (*, +, -)

var N :integer;

function change_str(n_1 :integer) :string;
var i, j, num_a :integer;
    s, st :string; // s - строка, st - отображение числа
    Arr_ch :array[1..3] of char = ('*', '+', '-');
begin
  randomize;
  for i := 1 to n_1 do // длина строки
  begin
    j := 1 + random(3); // случайный знак
    num_a := 1 + random(100); // случайное число
    str(num_a, st); // перевод числового значения в строковый
    if(i < n_1) then
      s := st + ' ' + Arr_ch[j]  + ' ' + s
    else
      s := s + st;
  end;
  result:= s;
end;

begin
  writeln('Enter an integer : ');
  readln(N);
  write(change_str(N));
  readln();
end.
vedro-compota's picture

1)

s := st + ' ' + Arr_ch[j]  + ' ' + s

лучше добавлять в конец строки

2)
Оптимальнее сделать цикл до предпоследнего символа, а уже после цикла разобраться с последним

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

var N :integer;

function change_str(n_1 :integer) :string;
var i, j, num_a :integer;
    s, st :string; // s - строка, st - отображение числа
    Arr_ch :array[1..3] of char = ('*', '+', '-');
begin
  randomize;
  for i := 1 to n_1 do // длина строки
  begin
    j := 1 + random(3); // случайный знак
    num_a := 1 + random(100); // случайное число
    str(num_a, st); // перевод числового значения в строковый
    s := st + ' ' + Arr_ch[j]  + ' ' + s
  end;
  result:= s + st;
end;

begin
  writeln('Enter an integer : ');
  readln(N);
  write(change_str(N));
  readln();
end.
vedro-compota's picture

решение видимо рабочее, но для тренировки перепишем альтернативно по комментариям выше

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

var N :integer;

function change_str(n_1 :integer) :string;
var i, j, num_a :integer;
    s_integer, st :string; // st - строка, s_integer - отображение числа
    Arr_ch :array[1..3] of char = ('*', '+', '-');
begin
  randomize;
  for i := 1 to n_1 - 1 do // длина строки до предпоследнего элемента
  begin
    j := 1 + random(3); // случайный знак
    num_a := 1 + random(100); // случайное число
    str(num_a, s_integer); // перевод числового значения в строковый
    st := st + s_integer + ' ' + Arr_ch[j] + ' '
  end;
  num_a := 1 + random(50); // случайное число
  str(num_a, s_integer); //
  change_str := st + s_integer ;
end;

begin
  writeln('Enter an integer : ');
  readln(N);
  write(change_str(N));
  readln();
end. 
vedro-compota's picture

засчитано

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