Задачи Урок 9.1.

Задачи Урок 9.1. :

3) Сравните два числа, если первое больше второго, то выведите на экран "12". (здесь нужно использовать неполную форму условного оператора)

var a,b: integer;
begin
  writeln('Введите 2 целых числа: ');
  readln(a, b);
  if (a > b) then
    writeln('12');
  
  readln();
end.
4) Сравните два числа, если первое больше второго, то выведите на экран "12", а если нет, то выведите на экран "888".
var a, b : integer;
begin
  writeln('Введите 2 целых числа');
  readln(a, b);
  
  if a > b then
    writeln('12')
  else 
    writeln('888');
  
  readln();
end.
5) Даны три целых числа: A, B, C. Проверить истинность высказывания: «Число A находится между числами B и C» -- выведите "да", если истинно и "нет" если ложно.
var a, b, c : integer;
begin
  writeln('Введите 3 целых числа');
  readln(a, b, c);
  
  if (a > b) AND (a < c) OR (a > c) AND (a < b) then
    writeln('да')
  else 
    writeln('нет');
  
  readln();
end.
6) Даны три целых числа: A, B, C. Проверить истинность высказывания: « Число A и число B больше 17, а C > 7». -- выведите "да", если истинно и "нет" если ложно.
var a, b, c : integer;
begin
  writeln('Введите 3 целых числа');
  readln(a, b, c);
  
  if (a > 17) AND (b > 17) AND (c > 7) then
    writeln('да')
  else 
    writeln('нет');
  
  readln();
end.
7) Пользователь вводит два числа, найдите из них максимальное.
var a, b : integer;
begin
  writeln('Введите 2 целых числа');
  readln(a, b);
  
  if a > b then
    writeln('a - максимальное число')
  else 
    writeln('b - максимальное число');
  
  readln();
end.
8)Лишние операторные скобки. -- есть ли здесь лишние операторные скобки? Объясните почему есть или нет и если есть, перепишите более кратким образом.
var a: integer;
begin
  readln(a);
  if (a > 2) then
  begin  //операторные скобки здесь, потому что в ветке истинности 2 операции
    writeln('2');
    writeln('3');
  end else
    writeln('0');
end.
9) Дан код (ситуация "отрыва от блока"): -- что с ним не так? Какие есть варианты по исправлению
var a: integer;
begin
  readln(a);
  if (a > 2) then
  begin  //не хватало операторных скобок
    writeln('*');
    writeln('*');
  end;
 
  readln();
end.
10) Ситуация "неопределенности в ветке истинности" или "невозможности отделения else от if независимым кодом": -- это код не запустится? Почему? Какие есть варианты его переписать, чтобы он все-таки стал рабочим.
var a: integer;
begin
  readln(a);
  if (a > 2) then
  begin  //не хватало операторных скобок
    writeln('*');
    writeln('*');
  end
  else
    writeln('#');
 
  readln();
end. 
11) Пользователь вводит три числа, найдите из них максимальное.
Решите тремя способами:
1) С использованием логической операции and.
2) С вложенными блоками (без and, все операторы if должны быть в полной форме).
3) Без вложенных блоков (без and) -- запомнив максимум из первых двух чисел в специальной переменной.

1)

var a, b, c : integer;
begin
  writeln('Введите 3 целых числа');
  readln(a, b, c);
  
  if (a > b) AND (a > c) then
    writeln('а - максимальное число')
  else if (b > a) AND (b > c) then
      writeln('b - максимальное число')
  else 
    writeln('с - максимальное число');
 
  readln();
end.
 

2)

var a, b, c : integer;
begin
  writeln('Введите 3 целых числа');
  readln(a, b, c);
  
  if a > b then
    if a > c then
      writeln('а - макс. число')
    else 
      writeln('c - макс. число')
  else if b > c then
      writeln('b - макс. число')
    else 
      writeln('c - макс. число');

  readln();
end.
 

3)

var a, b, c, max : integer;
begin
  writeln('Введите 3 целых числа');
  readln(a, b, c);
  
  if a > b then
    max := a
  else
    max := b;
  
  if c > max then
    writeln('c - макс. число')
  else
    writeln(max, ' - макс. число');
    
  readln();
end. 
12) Пользователь вводит четыре числа, найдите из них максимальное -- решите через вложенные блоки if в полной форме (без использования логических операций).
var a, b, c, d : integer;
begin
  writeln('Введите 4 целых числа');
  readln(a, b, c, d);
  
  if a > b then
    if a > c then
      if a > d then
        writeln('a - макс. число')
      else
        writeln('d - макс. число')
    else if c > d then
        writeln('c - макс. число')
      else
        writeln('d - макс. число')
  else
    if b > c then
      if b > d then
        writeln('b - макс. число')
      else
        writeln('d - макс. число')
    else if c > d then
        writeln('c - макс. число')
      else
        writeln('d - макс. число');
    
  
  readln();
end. 
13)Коля набрал k баллов, Миша n баллов, а Петя d баллов в ходе соревнований. Если:
сумма баллов Коли и Миши больше 20 или произведение баллов Пети и Миши меньше 55 --то тогда вывести в консоль сообщение о том, что ничья, в противном случае вывести сообщение, что победил Коля.
var k, n, d : integer;
begin
  writeln('Введите число баллов каждого участника');
  readln(k, n, d);
  
  if ((k + n) > 20)  OR ((d * n) < 55) then
    writeln('ничья')
  else 
    writeln('победил Коля');
  
  readln();
end.
 
14) Есть программа, где стоит проверка на ввод пользователем числа 1 или числа 5: -- но сейчас код написан неоптимально и при каждом запуске выполняется 2 сравнения, при этом код можно переписать так, что при вводе одного из двух значений, которые приводят к выводу сообщения, сравнение будет выполняться только один раз. Перепишите программу оптимальным образом.
var s : integer;
begin
  writeln('Введите число 1 или 5');
  readln(s);
  
  if (s = 1) then
    writeln('сообщение 1')
  else if (s = 5) then
    writeln('сообщение 2');
 
  readln();
end.
15) Есть программа -- при этом известно, что если s равно 1, то на экран должно вывестись только первое сообщение (а второе выводиться не должно), а если s не равно 1, но равно m, то второе (а первое выводиться не должно).
Но сейчас программа работает не так, исправьте это.
var m, s : integer;
begin
  writeln('Введите число М');
  readln(m);
  writeln('Введите число S');
  readln(s);
  
  if (s = 1) then
    writeln('сообщение 1')
  else if (s = m) then
       writeln('сообщение 2');
     
  readln();
end.
16) Есть программа -- в двух условных операторах действия частично совпадают, а значит наблюдается дублирование кода. Перепишите код так, чтобы дублирования не было.
var z, s : integer;
  f : boolean;
begin
  readln(z);
  f := z > 5;
  s := 1;
  
  if (z = s) then
  begin
    writeln(); // делаем перенос строки
    z:=0;
    if (f = false) then
      s := s + 1  // но увеличиваем кол-во строк
    else if (f=true) then
      s:=s - 1;//но уменьшаем кол-во строк
  end;
end.  
17) Изучите код -- блоки условий можно переписать более кратко, без использования сравнения = true или = false, с сохранением той же логики работы программы.
Подсказки:
оператор if итак неявно сравнивает значение логического выражения в скобках с true (и принимает решение, какую именно ветку then или else выполнить)
для второго if в коде выше потребуется использование оператора Not.
var s, t : integer;
    f, b : boolean;
begin
  f := true;
  b := false;
 
  if (f) then  //f = true
    t:=1
  else
    t:=2;
 
   if (not b) then  //b = false 
    s:=3
  else
    s:=4;
end. 
18) У вас есть код: -- который сообщает пользователю, что число не равно нулю, если это действительно так, или в обратной ситуации не делает вообще ничего.
Задача: Перепишите это код в неполной форме (без использования else).
var f : integer;
begin
  write('Введите число : ');
  readln(f);
  
  if f <> 0 then
    writeln('Не равно 0!');
 
  readln();
end.
19) У вас есть три числа (три переменные) найдите их медиану(link is external).
Примечание: это условие давалось как простая разминочная задачка для собеседования в Яндекс.
var a, b, c : integer;
begin
  writeln('введите 3 целых числа');
  readln(a, b, c);
  
  if a > b then
  begin
    if a < c then
      writeln('медиана в коде это а = ', a)
    else if b > c then
      writeln('медиана в коде это b = ', b)
    else 
      writeln('медиана в коде это c = ', c);
  end
  else 
  begin
    if a > c then
      writeln('медиана в коде это а = ', a)
    else if b < c then
      writeln('медиана в коде это b = ', b)
    else
      writeln('медиана в коде это c = ', c);
  end;
  
  readln();
end.
21) Была программа - - изменилось ли что-то в поведении программы, если да, то почему Объясните письменно, можно прокомментировать код, если изменения в логике есть
var a: integer;
begin
  writeln('Введите а:');
  readln(a);
  if (a > 5) then
     writeln('a')
  else if (a < 5) then //во 2 варианте не обрабатывается случай a = 5 
     writeln(5);
 
  readln();
end.