Задачи Урок 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
- 222 reads