На этой странице рассмотрим решение задач Boolean20 – Boolean24, где рассмотрим вопрос о сравнении цифр трехзначного и четырехзначного числа, выяснение, является ли число палиндромом, а также проверка существования вещественных решений квадратного уравнения.
Boolean20. Дано трехзначное число. Проверить истинность высказывания: «Все цифры данного числа различны».
var
N: integer;
a1, a2, a3: byte; { <-- 1, 2 и 3 цифры числа N }
begin
writeln('Введите целое трехзначное число:');
readln(N);
writeln;
N := abs(N); { <== Находим модуль числа (на случай N<0) }
a3 := N mod 10; { <== число единиц }
a2 := N div 10 mod 10; { <== число десятков }
a1 := N div 100; { <== число сотен }
{ Чтобы цифры все цифры числа были различными, должны
ОДНОВРЕМЕННО выполняться три условия: a1≠a2, a2≠a3, a3≠a1.
Поэтому объединяем эти условия логическим оператором and: }
writeln(' ', (a1 <> a2)and(a2 <> a3)and(a3 <> a1));
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**function** Abs(x: real): real;
: Возвращает модуль числа x.A **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на ВA **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на В Boolean21. Дано трехзначное число. Проверить истинность высказывания: «Цифры данного числа образуют возрастающую последовательность».
var
N: integer;
a, b, c: byte; { <-- цифры числа N }
begin
writeln('Введите целое трехзначное число:');
readln(N);
writeln;
N := abs(N); { <== Находим модуль числа (на случай N<0) }
c := N mod 10; { <== единицы }
b := N div 10 mod 10; { <== десятки }
a := N div 100; { <== сотни }
{ Проверяем расположение цифр в порядке возрастания: }
writeln(' ', (a < b) and (b < c));
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**function** Abs(x: real): real;
: Возвращает модуль числа x.A **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на ВA **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на В Boolean22. Дано трехзначное число. Проверить истинность высказывания: «Цифры данного числа образуют возрастающую или убывающую последовательность».
var
N: integer;
a, b, c: byte; { <-- цифры числа N }
f, g: boolean; { <-- логические высказывания }
begin
writeln('Введите целое трехзначное число:');
readln(N);
writeln;
N := abs(N); { <== Находим модуль числа (на случай N<0) }
c := N mod 10; { <== число единиц }
b := N div 10 mod 10; { <== число десятков }
a := N div 100; { <== число сотен }
{ Высказывание "цифры расположены в порядке возрастания": }
f := (a < b) and (b < c);
{ Высказывание "цифры расположены в порядке убывания": }
g := (a > b) and (b > c);
{ Поскольку высказывания f и g не могут выпонятся одновременно
(цифры расположены или в порядке убывания, или в порядке
возрастания), то при проверке используем логический оператор
xor ("исключающее или"). Впрочем, здесь можна использовать
также оператор or ("или"): }
writeln(' ', f xor g);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** boolean;
: Представляет логическое значение.**function** Abs(x: real): real;
: Возвращает модуль числа x.A **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на ВA **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на В Второй вариант решения немного проще:
var
N: integer;
a, b, c: byte; { <-- цифры числа N }
begin
writeln('Введите целое трехзначное число:');
readln(N);
writeln;
N := abs(N); { <== Находим модуль числа (на случай N<0) }
c := N mod 10; { <== единицы }
b := N div 10 mod 10; { <== десятки }
a := N div 100; { <== сотни }
{ Если цифры a, b, c числа расположены в порядке возрастания или
убывания, то b-a и c-b одного знака (оба положительные или
оба отрицательные); в таком случае их произведение положительно: }
writeln(' ', (b-a) * (c-b) > 0);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**function** Abs(x: real): real;
: Возвращает модуль числа x.A **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на ВA **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на В Boolean23. Дано четырехзначное число. Проверить истинность высказывания: «Данное число читается одинаково слева направо и справа налево».
Число, которое одинаково читается в обоих направлениях, называется палиндромом. Первый вариант решения можно назвать прямым: мы находим цифры числа, а потом их сравниваем. Все комментарии в коде программы:
var
N: integer; { <-- четырехзначное число abcd }
a, b, c, d: byte; { <-- цифры числа N }
begin
writeln('Введите целое четырехзначное число:');
readln(N);
writeln;
N := abs(N); { <== Находим модуль числа (на случай N<0) }
d := N mod 10; { <== число единиц }
c := N div 10 mod 10; { <== число десятков }
b := N div 100 mod 10; { <== число сотен }
a := N div 1000; { <== число тысяч }
{ Четырехзначное число будет палиндромом (то есть читаться
одинаково справа налево и слева направо), если первая цифра
равна четвертой, а вторая цифра равна третьей: }
writeln(' ', (a = d)and(b = c));
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**function** Abs(x: real): real;
: Возвращает модуль числа x.A **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на ВA **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на ВA **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на В Второй вариант решения можно назвать "стандартным", так как таким способом обычно проверяется любое число на палиндромность (как правило, в цикле). Особенностью этого метода есть то, что мы отделяем первую половину числа (первые 2 цифры), и вторую половину (вторые 2 цифры), только записанную справа налево. И если эти два числа совпадают, то исходное число – палиндром.
Так, для числа 6116 первая часть равна 61, а вторая прочитанная в обратном порядке – тоже 61. Таким образом, 6116 будет палиндромом.
var
N, R: integer; { <-- N - четырехзначное число abcd }
begin
writeln('Введите целое четырехзначное число:');
readln(N);
writeln;
N := abs(N); { <== Находим модуль числа (на случай N<0) }
{0 шаг} R := 0; { R=0, N=abcd }
{1 шаг} R := 10 * R + N mod 10; N := N div 10 { R=d, N=abc }
{2 шаг} R := 10 * R + N mod 10; N := N div 10 { R=dc, N=ab }
{ Четырехзначное число abcd будет палиндромом, если число,
образующее первые две цифры (ab), и число, образующее
последние две цифры, но в обратном порядке (dc), равны.
В нашем случае, если конечные R и N равны: }
writeln(' ', (R = N));
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**function** Abs(x: real): real;
: Возвращает модуль числа x.A **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на ВA **mod** B
- остаток при целочисленном делении А на ВA **div** B
- целочисленное деление А на В Boolean24. Даны числа A, B, C (число A не равно 0). Рассмотрев дискриминант D = B2 − 4·A·C, проверить истинность высказывания: «Квадратное уравнение A·x2 + B·x + C = 0 имеет вещественные корни».
var
A, B, C, D: real;
begin
writeln('Введите числа A, B, C (А не равно 0):');
readln(A, B, C);
writeln;
D := sqr(B) - 4 * A * C; { <== вычисляем дискриминант }
{ Если дискриминант уравнения с коэффициентами A, B, C
неотрицателен, то уравнение имеет вещественные корни: }
writeln(' ', (D >= 0));
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.