Решение задач. День десятый. Задачи If16-30


if16-30

Приветствуем читателей нашего сайта! С сегодняшнего дня две недели подряд мы решаем задачи из сборника Абрамяна. Сегодня мы наконец-то добьем if16-30. А вообще мы решим все задачи из While и For и, может быть, Series.

If16. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C.

Program If_16;

var a, b, c: integer;

begin
  write('Введите A, B и C: ');
  readln(a, b, c);
  if (b<c) and (a<b) then
    begin
      a := 2 * a;
      b := 2 * b;
      c := 2 * c;
    end
  else begin
      a := -a;
      b := -b;
      c := -c;
    end;
  writeln (a,' ', b,' ', c);
end.

If17. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию или убыванию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C.

Program If_17;

var
  a, b, c: integer;

begin
  write('Введите A, B и C: ');
  readln(a, b, c);
  if (b < a) and (c < b) or (b < c) and (a < b) then
  begin
    a := 2 * a;
    b := 2 * b;
    c := 2 * c;
  end
  else 
  begin
    a := -a;
    b := -b;
    c := -c;
  end;
  writeln(a, ' ', b, ' ', c);
end.

If18. Даны три целых числа, одно из которых отлично от двух других, равных между собой. Определить порядковый номер числа, отличного от остальных.

Program If_18;

var
  a, b, c: integer;

begin
  readln(a, b, c);
  if a = b then write(3);
  if b = c then write(1);
  if a = c then write(2);
end.

If19. Даны четыре целых числа, одно из которых отлично от трех других, равных между собой. Определить порядковый номер числа, отличного от остальных.

Используем метод полностью противоположный предыдущему. Проверяем числа на неравенство, а не на равенство.

program if19;

var
  a, b, c, d: integer;

begin
  read(a, b, c, d);
  if (a <> b) and (a <> c) then write(1) {проверяем неравенство два раза. вдруг это b другое число.}
  else
  if (a <> b) and (b <> c) then write(2)
  else
  if (c <> a) and (c <> b) then write(3)
  else write(4); {если все варианты совпадают, следовательно 4 другой}
end.

If20. На числовой оси расположены три точки: A, B, C. Определить, какая из двух последних точек (B или C) расположена ближе к A, и вывести эту точку и ее расстояние от точки A.

Для того чтобы решить эту задачу, используем модуль, ведь модуль — это расстояние. В Паскаль есть специальная функция для превращения любого числа в положительное число —  abs.

program if20;
var
  A, B, C, ras1, ras2: integer;

begin
  write('Введите A: ');
  read(A);
  write('Введите B и C: ');
  read(B, C);
  ras1 := Abs(A - B);
  ras2 := Abs(A - C);
  if ras1 < ras2 then Write('Ближайшая к точке А точка B и растояние между ними - ', ras1)
  else write('Ближайшая к точке А точка C и растояние между ними - ', ras2);
end.

If21. Даны целочисленные координаты точки на плоскости. Если точка совпадает с началом координат, то вывести 0. Если точка не совпадает с началом координат, но лежит на оси OX или OY, то вывести соответственно 1 или 2. Если точка не лежит на координатных осях, то вывести 3.

program if21;

var
  x, y: integer;

begin
  read(x, y);
  if (x = 0) and (y = 0) then write(0)
  else 
  if x = 0 then write(2) 
  else 
  if y = 0 then write(1)
  else write(3);
end.

If22°. Даны координаты точки, не лежащей на координатных осях OX и OY. Определить номер координатной четверти, в которой находится данная точка.

Если кто-то не помнит как располагаются координатные четверти, вот небольшая картинка.

quadrant 510x510

program if22;

var
  X, Y: integer;

begin
  write('Введите X: ');
  read(X);
  write('Введите Y: ');
  read(Y);
  if (X > 0) and (Y > 0) then write(1);
  if (X < 0) and (Y > 0) then write(2);
  if (X < 0) and (Y < 0) then write(3);   
  if (X > 0) and (Y < 0) then write(4);
end.

If23. .аны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Найти координаты его четвертой вершины.

Очень много if. Суть метода в том, что сравнивая введенные x  и  y друг с другом, мы находим, какие точки лежат на одной прямой, какие нет, а затем в зависимости от их положения находим неизвестный x и y.

program if23;

var
  x1, y1, x2, y2, x3, y3, x4, y4: integer;

begin
  write('Введите x1. y1: ');
  readln(x1, y1);
  write('Введите x2, y2: ');
  readln(x2, y2);
  write('Введите x3, y3: ');
  readln(x3, y3);
  if x1 = x2 then x4 := x3;
  if x1 = x3 then x4 := x2;
  if x2 = x3 then x4 := x1;
  if y1 = y2 then y4 := y3;
  if y1 = y3 then y4 := y2;
  if y2 = y3 then y4 := y1;
  writeln('Координаты четвертой вершины: (', x4, ';', y4,')' ); 
end.

If24. Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения: f(x) =
2·sin(x), если x > 0,
6 – x, если x ≤ 0.

program if24;

var
  x, f: real;

begin
  write('Введите X: ');
  readln(x);
  if x > 0 then f := 2 * Sin(x) 
  else f := 6 - x;
  writeln('f(x) = ', f:1:2); 
end.

If25. Для данного целого x найти значение следующей функции f, принимающей значения целого типа: f(x) =
2·x, если x < –2 или x > 2,
–3·x, в противном случае.

program if25;

var
  x, f: integer;

begin
  write('Введите X: ');
  readln(x);
  if (x < -2) or (x > 2) then f := 2 * x 
  else f := -3 * x;
  writeln('f(x) = ', f); 
end.

If26°. Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения: f(x) =
–x, если x ≤ 0,
 x2, если 0 < x < 2,
4, если x ≥ 2.

program if26;

var
  x, f: real;

begin
  write('Введите X: ');
  readln(x);
  if (x <= 0) then f := -x    else    if (x >= 2) then f := 4
  else f := Sqr(x);
  writeln('f(x) = ', f:1:2); 
end.

If27. Для данного вещественного x найти значение следующей функции f, принимающей значения целого типа: f(x) =
0, если x < 0,
1, если x принадлежит [0, 1), [2, 3), …,
–1, если x принадлежит [1, 2), [3, 4), ….

Как решать эту задачу? Давайте поразмышляем. Посмотрите на второе условие, нижняя граница полуинтервала — четное число. Любое число в этом интервале задается формулой — четное число. набор цифр. Тогда наша цель — достать целую часть из вещественного числа. Для этого используем функцию truncОсталось только узнать четность числа, в этом нам помогут div и mod.

program if27;

var
  f, x: real;

begin
  write('Введите X = ');  {предположим вы ввели 1.5}
  readln(X);
  if (x < 0) then f := 0 
  else
  if (Trunc(x) mod 2 = 0) then f := 1 { trunk(1.5) = 1, 1 mod 2 <> 0}
  else f := -1; 
  writeln('f(x) = ', f); { вывод: -1}
end.

If28. Дан номер года (положительное целое число). Определить количество дней в этом году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней. Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400 (например, годы 300, 1300 и 1900 не являются високосными, а 1200 и 2000 — являются).

program if28;

var
  year: integer;

begin
  write('Введите год: ');
  readln(year);
  if year mod 4 = 0 then
    if year mod 100 = 0 then 
      if year mod 400 <> 0 then write('365 дней')
      else write('366 дней')
    else write('366 дней')
  else write('365 дней');
end.

If29. Дано целое число. Вывести его строку-описание вида «отрицательное четное число», «нулевое число», «положительное нечетное число» и т. д.

program if29;

var
  number: integer;

begin
  write('Введите число: ');
  readln(number);
  if number = 0 then 
    begin
    write('нулевое число');
    exit // обрывает работу программы
    end
  else 
  if number > 0 then write('Положительное ') else write('Отрицательное ');
  if number mod 2 = 0 then write('четное ') else write('нечетное ');
end.

If30. Дано целое число, лежащее в диапазоне 1–999. Вывести его строку-описание вида «четное двузначное число», «нечетное трехзначное число» и т. д.

program if30;

var
  a: integer;

begin
  write('Введите число: ');
  read(a);
  if Odd(a) then write('Нечетное ') else write('Четное ');
  if a >= 100 then write('трехзначное число') else
    if a < 10 then write('однозначное число') else write('двухзначное число');
end.

На сегодня все! Не забудьте подписаться на наш сайт и покликать по кнопочкам. Если у вас возникли вопросы, задавайте их в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *