Задача 16 Урок 15

Задача 16 Урок 15:

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

a1 # a2 # ..... # aN

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

program u15z16;
var n: integer;

function stroka(a:integer): string;
  var i,t:integer;
      s,c,res:string;
  const Chars = '*+-';    //символы которые нужно выводить
begin
  randomize;
  for i:=1 to a do   //выбираем случайное число
  begin
    t:=random(99)+1;  //выбираем случайное число
    str(t,c);        //переводим число в строку
    s:= Chars[Random(Length(Chars))+1]; //выбираем случайно символ
    res:=res+c+s;
   end;
  delete(res,length(res),1); //удаляем последний символ в строке
  result:=res;
end;

begin
  writeln('Vvedite N');
  readln(n);
  writeln('N=',n);
  write(stroka(n));
  readln;
end.
vedro-compota's picture

  1. решить без str() - в этой задаче можно не конвертировать (реализовать свою подобную функцию)
  2. Length(Chars) -- никогда не меняется, можно посчитать 1 раз

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

program u15z16v2;
var n: integer;

function itos(t:integer): string; //перевод числа в строку
var
  j:array [1..10] of string;
  z,x:string;
begin
  z:='';
  x:='';
  j[1]:='0';
  j[2]:='1';
  j[3]:='2';
  j[4]:='3';
  j[5]:='4';
  j[6]:='5';
  j[7]:='6';
  j[8]:='7';
  j[9]:='8';
  j[10]:='9';
  if t>=10 then
  begin
    z:=j[t mod 10];
    x:=j[t div 10];
  end
  else
    x:=j[t mod 10];
  result:=x+z;
end;

function sim(): string;   //выбор слчайного символа
var
  s:array [1..3] of string;
  b:integer;
begin
  s[1]:='*';
  s[2]:='+';
  s[3]:='-';
  b:=random(3)+1;
  result:=s[b];
end;

function stroka(a:integer): string; //формирование строки
var i,t:integer;
    c,res,d:string;
begin
  randomize;
  for i:=1 to a do   //выбираем случайное число
  begin
    t:=random(98)+1;  //выбираем случайное число
    c:=itos(t);       //переводим число в строку
    res:=res+c+sim;   //формируем строку
  end;
  delete(res,length(res),1); //удаляем последний символ в строке
  result:=res;
end;

begin
  writeln('Vvedite N');
  readln(n);
  writeln('N=',n);
  write(stroka(n));
  readln;
end.

При открытии на сайте ошибка,в Лазарусе все норм

vedro-compota's picture

засчитано

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