Паскаль. Основы программирования

       

Преобразование типов


Пример 8. Двузначное десятичное число в сумме с числом, записанным теми же цифрами, но в обратном порядке, дает полный квадрат. Найти все такие числа.

Пусть искомое двузначное число

 = a
10 + b, тогда число, записанное теми же цифрами, но в обратном порядке будет
= b
10 + a, например, 12 и 21, 13 и 31 и т. п.

Сумма этих чисел должна давать полный квадрат, т.е. точный квадрат целых чисел. Как это проверить?

Проверку можно было бы выполнить так: извлечь квадратный корень из полученной суммы; затем округлить результат до целого числа, а потом умножить полученный результат на себя, если снова получится сумма этих чисел, то значит она является точным или полным квадратом.

Например, 12 + 21=33, извлекаем квадратный корень из 33, он равен 5.74...; округляем, будет 6; умножаем 6 само на себя и получаем 36.

Мы не получили исходного результата, значит сумма 33 не является точным квадратом.

Еще один пример, чтобы вам была понятна идея решения. Пусть двузначное число 29, тогда число, записанное теми же цифрами, но в обратном порядке - 92, в сумме они дают 121. Извлекаем квадратный корень из 121 и получаем 11. Умножив 11 само на себя, снова получим 121. Делаем вывод, что получен точный квадрат, а значит двузначное число 29 является искомым.

Чтобы составить программу по этому принципу, придется извлекать квадратный корень из суммы, что можно сделать с помощью стандартной функции sqrt(x). Результат функции sqrt(x) является вещественным числом, его надо округлить или отбросить дробную часть, а нам неизвестно, как это сделать.

Но, даже более существенным, является то, что если квадратный корень в множестве целых чисел извлекается нацело, как для 121 (он равен 11), то на множестве вещественных чисел мы не получим строго число 11, а результат будет очень близок к 11 и после умножения на себя всё равно не получится 121, т.е. возникает необходимость преобразовать

вещественное значение в целое.

Итак перед нами две задачи: 1) выяснить как округлять числа и; 2) установить, как преобразовывать вещественный тип в целый.


Для этого в Паскале есть стандартные функции round(x) и trunc(x)



Стандартные функции round и trunc предназначены для замены значений вещественного типа значениями целого типа.

Функция round(x) округляет вещественное число x до целого - ее значение есть ближайшее целое число:

                                      round(4.2) = 4, round(4.7) = 5, round(4.5)=5,

                                      round(-4.2) = -4, round(-4.7) = -5, round(-4.5) = -5.

Функция trunc(x) отбрасывает (без округления) дробную часть вещественного числа x:

                                      trunc(1.2) = 1, trunc(5.8) = 5, trunc(-1.2) = -1,

                                      trunc(-5.8) = -5, trunc(-6.7) = -6, trunc(8,9) = 8

Функции округления связаны так:

                                      trunc(x + 0.5) = round(x), если x
 0,

                                      trunc(x - 0.5)  = round(x), если x < 0.

Итак, в программе можно воспользоваться одной из этих функций. Какой? Подумайте сами и попробуйте применить в программе вначале функцию trunc, а потом замените ее на round и сравните полученные результаты.

Программа

Program Problem8;

    uses WinCrt;

    var

       d, e, k : integer;

    begin

       writeln('Искомые двузначные числа');

       for d := 1 to 9 do

         for e := 1 to 9 do

           begin

              k := round(sqrt(d*10 + e + e*10 + d));

              if k*k = d*10 + e + e*10 + d

                 then write(d*10 + e, ' ')

           end

    end.

Задание 7

Найти целые числа из заданного промежутка [m; n], которые являются точными квадратами и остаются таковыми после приписывания к ним справа единицы (в десятичной системе записи).

Упражнения

37. Составьте программу, которая находит 4 последовательных натуральных числа, произведение которых равно 1680.

38. Показать, что четырехзначное число, у которого цифры тысяч и десятков одинаковы и цифры сотен и единиц тоже одинаковы, не может быть точным квадратом.



39. Произведение шести последовательных натуральных чисел может быть равно произведению трех последовательных натуральных чисел. Например, 1
2
3
4
5
6 = 8
9
10 = 720. Есть ли еще такие числа?

40. Доказать, что произведение четырех последовательных целых чисел в сумме с единицей дает полный квадрат.

41. Найдите 11 последовательных натуральных чисел, сумма квадратов которых есть квадрат целого числа.

42. Существуют ли такие целые числа, которые уменьшаются в 57 раз при зачеркивании их первой (слева) цифры?

43. Найти четырехзначное число, зная, что оно является квадратом натурального числа и что цифры его распадаются на две пары, состоящие из одинаковых цифр.

44. Найдите все семизначные числа, которые делятся на 15 и записываются только цифрами 0 и 1.

45. Шестизначное число начинается с цифры 1. Если эту цифру переставить в конец числа, то новое число будет в три раза больше первоначального. Найдите число.

46. Сколько точных квадратов можно составить из цифр 3, 4, 5, 6?

47. Даны 20 различных натуральных чисел, не больших 50. Найдите два из них, разность которых равна 4, 5 или 9.

48. Во сколько раз увеличится двузначное число, если справа к нему приписать такое же двузначное число?

49. Определить наибольшее значение отношения трехзначного числа к числу, равному сумме цифр этого числа.

50. Найти трёхзначное число, кратное 45, если разность между этим числом и числом, записанным теми же цифрами, но в обратном порядке равна 297.

51. Найти четырёхзначное число
, кратное 11, при условии: b + c = a и
  есть полный квадрат.

52. Найти трёхзначное число, равное сумме цифры десятков, квадрата цифры сотен и куба цифры единиц.

53. Найти два числа, произведение которых есть трёхзначное число, являющееся кубом некоторого числа, а частное является квадратом этого числа.

54. Разность между числом и произведением его цифр равна сумме цифр этого числа. Найти это число.

55. Найти все значения числа m, для которых сумма 1! + 2! + ,,, + m! является полным квадратом.



56. Найти положительное четырёхзначное число, кратное 7 и представляющее собою сумму куба и квадрата некоторого числа.

57. Некоторое число при делении на 7 дает в остатке 3; его квадрат при делении на 72 дает остаток 44; его куб при делении на 73

даёт остаток 111. Найти это число.

58. При каком натуральном значении a число a2 + a + 1589 будет точным квадратом?

59. Найти совершенное число вида 16p.

60. Найти два числа, если сумма их квадратов равна 468, а сумма их общего наибольшего делителя и наименьшего кратного равна 42.

Ответы

К заданию 1

Program

Task1;

    uses WinCrt;

    var

       n, f, i, s : longint;

    begin

       write('Введите натуральное число '); readln(n);

       s := 0; f := 1;

       for i := 1 to n do

         begin

            f := f*i;  s := s + f

         end;

      writeln('Сумма факториалов чисел от 1 до ', n, ' равна ', s)

    end.

К

заданию 4


Program Task4;

    uses WinCrt;

    var

       t, s, d, e : integer;

    begin

       writeln('Искомое четырехзначное число');

       for t := 1 to 9 do

         for s := 0 to 9 do if s <> t then

           for d := 0 to 9 do if (d <> s) and (d <> t) then

             for e := 0 to 9 do

               if (e <> d) and (e <> s) and

(e <> t) then

                 if (t*1000 + s*100 + d*10 + e)*9 = t*10000 + s*100 + d*10 + e

                   then writeln(t*1000 + s*100 + d*10 + e)

    end.

К

заданию 6


 

Program Task6;

    uses WinCrt;

    var

       x, y, z, n, k, p : longint;

    begin

       write('Введите натуральное число '); readln(n);

       k := 0; x := 1;

       while x*x + 2<=n do

           begin

              k := k + 1;  x := x + 1

           end;

       p := 0;

       for x := 1 to k do

         for y := 1 to x do

           for z := 1 to y do

             if x*x + y*y + z*z=n

               then

                 begin

                    p := p + 1;

                    writeln(x, '*', x, '+', y, '*', y, '+', z, '*', z, '=', n)



                 end;

             if

p=0

               then

                 begin

                    write('Число ', n, ' нельзя представить в виде ');

                    writeln(' суммы квадратов трех чисел')

                 end

               else

writeln('Число способов равно ', p)

    end.





К

заданию 7


Program Task7;

    uses WinCrt;

    var

       m, n, i, k, k1 : longint;

    begin

       write('Введите начало промежутка '); readln(m);

       write('Введите конец промежутка '); readln(n);

       write('Искомые числа ');

       for i := m to n do

         begin

            k := round(sqrt(i));

            k1 := round(sqrt(i*10 + 1));

               if (k*k = i) and (k1*k1 = i*10 + 1) then

write(i, ' ')

         end

    end.






Содержание раздела