Цели:

  1. Закрепить умения ввода и вывода данных;
  2. Научиться использовать различные типы данных;
  3. Получить навыки использования целочисленных арифметических операций mod, div.

Арифметические операции. Рассмотрим несколько примеров:

|| Заданы два числа. Найдите их сумму


                рrogram zadacha2_4;                        //название программы
                var
                    a, b, s: byte;                         //описание переменных
                Begin                                      //начало
                    writeln('введите целое число a: ');    //вывод сообщения
                    read(a);                               //ввод a
                    write('введите целое число b: ');      //вывод сообщения
                    read(b);                               //ввод b
                    s := a + b;                            //вычисление суммы
                    writeln('s = ', s);                    //вывод результата
                End.                                       //конец
            

Проанализируйте полученный результат при a + b > 255. Поменяйте тип данных byte на integer. Что получается теперь? Просмотрите, до какой предельной суммы a + b вычисления происходят верно? Установите тип данных longint. Просмотрите суммы.

|| Заданы два целых числа k и d. Используя только арифметические операции, найдите целую и дробную части от деления k на d


                program zadacha2_5;                     //начало
                var
                    a, drobn: real;
                    k, d, cel: integer;                 //описание переменных
                Begin
                    writeln('введите два числа: ');     //вывод сообщения
                    readln(k, d);                       //ввод k, d
                    cel := k div d;                     //целочисленное деление
                    a := k / d;                         //обычное деление
                    drobn := a - cel;                   //вычисление дробной части
                    writeln('целая часть - ', cel);     //вывод результата целой части
                    writeln('дробная часть - ', drobn); //вывод результата дробной части
                Еnd.                                    //конец
            

Можно ли было в данной программе все переменные определить, как integer или как real? Попробуйте и проанализируйте.

|| Дано трёхзначное число. Чему равны его цифры


                program zadacha2_6;                            //начало
                var
                    a, с1, с2, с3: integer;                    //описание переменных
                Begin
                    writeln('введите трёхзначное число: ');    //вывод сообщения
                    readln(a);                                 //ввод a
                    c1 := a div 100;                           //вычисление 1ой цифры
                    c2 := (a mod 100) div 10;                  //или c2:=(a div 10) mod 10; вычисление 2ой цифры
                    c3 := a mod 10;                            //вычисоение 3ей цифры
                    writeln('первая цифра -', c1);             //вывод 1ой цифры
                    writeln('вторая цифра -', c2);             //вывод 2ой цифры
                    writeln('третья цифра -', c3);             //вывод 3ей цифры
                Еnd.                                           //конец
            

|| Дано действительное число a. Используя только пять операций умножения получить a15


                program zadacha2_7;                    //начало
                var
                    a, b, c, d, s: longint;            //описание переменных
                Begin                                  //начало
                    writeln('введите число a: ');      //вывод сообщения
                    readln(a);                         //ввод a
                    b := a * a;                        //вычисление второй степени
                    с := b * b;                        //вычисление 4ой степени
                    d := c * a;                        //вычисление 5ой степени
                    s := d * d * d;                    //вычисление 15ой степени
                    writeln('результат = ', s);        //вывод результата
                Еnd.                                   //конец
            

Приоритет операций (по убыванию старшинства):

  • стандартные функции
  • *, /, div, mod
  • +, -

Вопросы для повторения:

  1. Чем отличается операция / от операции div?
  2. Есть ли в PascalABC.net операция возведения в степень?
  3. Выполняется ли равенство:
    (264 mod 100) div 10 = (368 div 10) mod 10
  4. Придумайте формулу для нахождения предпоследней цифры числа?
  5. Можно ли производить операции mod и div над переменными, которые описаны как real?
  6. Как должна быть описана переменная fl, если она вычисляется по формуле fl := a / b? А как можно описать переменные a и b?
  7. Как должна быть описана переменная k, если она вычисляется по формуле k := a div b? А как нужно описать переменные a и b?

Задания для самостоятельной работы:

  1. Задано двухзначное число. Чему равна первая цифра числа?
  2. Задано двухзначное число. Чему равна последняя цифра числа?
  3. В двухзначное число вписать ноль в середину и получить трехзначное число.
  4. Найдите сумму цифр заданного трёхзначного числа.
  5. Найдите цифры заданного четырёхзначного числа.
  6. Задано пятизначное число. Найдите цифры и сумму цифр пятизначного числа.
  7. С начала суток прошло k минут. Определите сколько сейчас часов и минут.
  8. Идёт k-ая секунда суток. Определить который сейчас час (в часах, минутах и секундах).
  9. Робинзон Крузо провёл на острове f дней. Сколько полных недель он пробыл на острове?
  10. Поезд перевозит s тонн груза. Сколько автомобилей грузоподъемностью b тонн (b«s) он способен заменить?