Root /ArchiveAbout
()

Цифры числа и палиндром

Цифры числа и палиндром

На этой странице рассмотрим решение задач 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.