Задачи Урок 9.1.
Primary tabs
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.
- Log in to post comments
- 58 reads