остаток

Задачи читателей. День третий. «Остаток».

Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачку, которую нам по форме обратной связи прислал Дмитрий.

Текст сообщения: «Помогите написать функцию, которая принимает 3 числа, наибольшее из них делит наименьшее и возвращает это значение».

Для решения задачи понадобится оператор деления с остатком

Немножко посовещавшись мы решили дать ей красивое название(наша традиция). В итоге мы пришли к консенсусу и нарекли нашу третью задачу от читателя  «Остаток»!

Решается эта задача очень просто.

Итак, наш план действий:

1) Найти наименьшее и наибольшее значение из трех чисел.

2) Поделить наибольшее на наименьшее, используя оператор mod.

Со вторым пунктом нашего плана всё понятно. Одна строчка и готово. Но как же найти наименьшее и наибольшее? Эту задачу мы уже решали целых два раза. В первом случае мы применяли сложные логические условия(if14), во втором перестановки и процедуры(proc13).

Итак, можно приступать к решению задачи.

Первый способ решения задачи «Остаток».

program max_mod_min;

var
  a, b, c, d: integer;

function MaxD_mod_MinD(a, b, c: integer): integer;
var
  min, max: integer;
begin
  //код из if14
  if (a > c) and (a > b) then max := a
  else 
   if b > c then max := b
   else max := c;
  if (a < c) and (a < b) then min := a
  else 
   if b < c then min := b
   else min := c;
   Result := max mod min;
end;

begin
  write('Введите три числа: ');
  readln(a, b, c);
  write('Наибольшее число, деленное mod на наименьшее: ', MaxD_mod_MinD(a, b, c)) 
end.

Второй способ решения задачи «Остаток».

program max_mod_min;

var
  a, b, c: integer;
  
//Код из proc13 
//Обменивает значение двух переменных
procedure Swap(var x, y: integer);//var есть. Мы связываем значение переменных. 
//Все, что происходит с локальными x, y происходит и с глобальными x,y
var
  tmp: integer;
begin
  tmp := x;
  x := y;
  y := tmp;
end;

//Перемещает наибольшее значение в переменную x
procedure MaxMin(var x, y: integer);
begin
  if x < y then Swap(x, y) 
end;

//Сортирует по убыванию
procedure SortDec3(var x, y, z: integer);
begin
  MaxMin(y, z);
  MaxMin(x, y);
  MaxMin(y, z);
end;

function MaxD_mod_MinD(a, b, c: integer): integer;//var нет. Мы не привязываем 
//значение глобальных переменных к значениям локальных.
begin
  SortDec3(a, b, c); //Сортируем по убыванию
  Result := a mod c; //Теперь в а - наибольшее, а в с - наименьшее.
end;

begin
  write('Введите три числа: ');
  readln(a, b, c);
  write('Наибольшее число, деленное mod на наименьшее: ', MaxD_mod_MinD(a, b, c)) 
end.

Ну вроде бы всё. если у вас остались какие-то вопросы, задавайте их в комментариях. Я постараюсь на них ответить. И не забывайте нажимать на кнопочки и рассказывать о нас всему миру!

P.S. Вы, наверное, заметили, что сегодня у меня было очень хорошее настроение и позитивный настрой! А знаете почему? Потому что мы на отдыхе. Именно поэтому на нашем сайте не появлялось ничего новенького уже больше месяца. Но с сентября, когда закончатся затянувшиеся летние каникулы, и вновь над нашими светлыми головами сгустятся тучи повседневности и учёбы, мы снова начнем наполнять этот сайт скучными интересными уроками и решениями однообразных разнообразных задач.