Урок 5. Математические операции, функции и процедуры в Pascal (Часть первая)


Блок-схема

Так как в воскресенье на сайте открывается новая рубрика — решение задач,  мы с вами должны по-быстрому изучить основную часть математических операций, функций и процедур.

Давайте разберемся, что такое функция и процедура. Это подпрограмма — часть программы, выполняющая определенный алгоритм и допускающая обращение к ней из различных частей общей программы. В чем же разница между процедурой и функцией?

Процедуры — мини-программы.

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

20131220-004613.jpg

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

program superpuper;
var очень много буковок; 
procedure ampersand; 
begin 
write('&&&&&&&&&&&&&&&&&&&&'); 
end;
begin 
суперсложный код;
ampersand; 
суперсложный код;
ampersand; 
суперсложный код; 
ampersand; 
суперсложный код; 
ampersand; 
end.

Функции в Паскале — мега переменные.

Функции отличается от процедуры тем, что после выполнения функции на ее месте в коде ставится одно число, буква, строка и т.д. Набор встроенных функций в языке Паскаль достаточно широк. Например, для того, чтобы подсчитать квадрат числа можно воспользоваться стандартной функцией sqr(x). Как вы, наверное, уже поняли sqr(x) требует лишь один фактический параметр — число.

Пример: a:=sqr(4).

Обратите внимание! Функции необходимо присваивать! Просто написав их в тексте программы, как процедуры, вы ничего не добьетесь!

Структура функции представлена на картинке ниже.

20131220-004554.jpg

Если в программу необходимо включить новую уникальную функцию, ее надо описать также, как процедуру. Более подробно о том, как делать собственные процедуры и функции, мы поговорим через 10 уроков. Ниже вы видите таблицу основных стандартных функций и процедур в Паскаль.

Математические функции

ИмяТип аргументаРезультат вычисленияПример
Abs(x)Целый или Вещ.Модуль   хAbs(-6) = 6
Sqrt(x)ВещественныйКорень из хSqrt(25)=5
Sqr(x)Целый и Вещ.Квадрат хSqr(5)=25
Power(x, a)ВещественныйЗначение хаPower(5,3)=125
Frac(x)ВещественныйДробная часть хFrac(5.67)=0.67
Sin(x)ВещественныйСинус хSin(45)=0.8509
Cos(x)ВещественныйКосинус хCos(45)=0.5253
Arctan(x)ВещественныйАрктангенс хArctan(5)=1.3734
Int(x)ВещественныйЦелая часть хInt(5.67)=5.0
Random(x)ЦелыйСлучайное число (0..х-1)Random(5)=4
Succ(x)ПорядковыйСледующийSucc(10)=11
Pred(x)ПорядковыйПредыдущийPred(‘Z’)=’Y’

Математические процедуры

Inc(x, a)ЦелыйX:=X+AInc(5)=6
Dec(x, a)ЦелыйX:=X-ADec(25,20)=5

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

Trunc(x)ВещественныйЦелая часть хTrunc(5.67)=5
Round(x)ВещественныйОкругление х до целогоRound(5.67)=6
Важно! Если х = 5.5, то результат – 6, а если х = 6.5, то результат тоже 6!?
Очень странная ошибка.
Очень странная ошибка.

Операции div и mod.

Иногда нам требуется найти частное либо же остаток от деления. В такие моменты на помощь нам приходят такие операции, как div и mod. Заметим, что эти операции выполняются только над целыми числами.

Div

Для того, чтобы найти частное от деления, мы используем операцию div.

   Примеры:

  • 25 div 20 = 1;
  • 20 div 25 = 0;
  • 39 div 5 = 7;
  • 158 div 3 = 52.

Mod

Для того, чтобы найти остаток от деления, мы используем операцию mod.

    Примеры:

  • 25 mod 20 = 5;
  • 20 mod 25 = 0;
  • 39 mod 5 = 4;
  • 158 mod 3 = 2.

Чтобы окончательно понять, с чем мы имеем дело, решим следующую задачу:

Задача 1. Найти сумму цифр двухзначного числа.

Так как эта задача очень простая, мы с вами обойдемся блок-схемой и программой.

Блок-схема
Блок-схема
program Sumoftwo;
var Number, Num1, Num2, Sum: integer;
begin
write('Введите двухзначное число: ');
read(Number);  { Возьмем число 25 }
Num1 := Number div 10; { 25 div 10 = 2 }
Num2 := Number mod 10; { 25 mod 10 = 5 }
Sum := Num1 + Num2; { 2 + 5 = 7 }
write('Сумма двух чисел -- ', Sum);
end.

Задача 2. Найти сумму цифр трехзначного числа.

Чуть усложненная версия предыдущей задачи. Самая большая сложность — вторая цифра.

Блок-схема
Приоритет div и mod больше, чем приоритете + и -. Поэтому в данной программе можно обойтись без скобок.
program Sumoftree;
var Number, Sum: integer;
begin
write('Введите трехзначное число: ');
read(Number);  { Возьмем число 255 }
Sum := Number div 100 + Number mod 10 + Number div 10 mod 10; { 255 div 100 + 255 mod 10 + 255 div 10 mod 10 = 12 }
write('Сумма трёх чисел -- ', Sum);
end.

Вот и всё. На следующем уроке мы с вами начнём изучать особенности PascalABC.Net.

  1. Здравствуйте!Очень интересно и доходчиво!Спасибо!Но в таблице есть ошибка: вместо Inc(5)=6 должно быть Inc(5,1)=6

    1. Если нам нужно прибавлять 1, то можно его не писать , а если уже прибавляем больше 1 , то обязательно писать сколько прибавляешь.

  2. Здравствуйте.
    Существует две процедуры:
    1) inc(a) — увеличивает a на 1;
    2) inc(a, x) — увеличивает а на х.
    Так что ошибки нет 🙂

  3. Это процедура значит: увеличить ‘x’ на ‘a’, т.е inc(6, 2)=8, а если ‘a’ не указана, то увеличение идёт на единицу(по умолчанию)

  4. Здравствуйте, все очень хорошо расписано, спасибо 🙂

    Но, скажите, пожалуйста, чему будет равно выражение «255 div 10 mod 10».

  5. Результаты cos, sin, tan — просто числа, безразмерные величины, а никак не радианы. Не вводите новичков в заблуждение, это грубая математическая ошибка.

  6. Это мне понятно, но тогда это должно быть упомянуто в колонке «входные параметры», а не в выходных.

  7. Насколько я знаю то в Паскаль регистр не важен, тобиж А и а это одно и тоже

  8. Это не означает, что опечаток быть не должно. Программирование точная вещь, и не надо путать такими вещами новичков. А то потом появляются «программисты», у которых такой стиль типа «какая разница, если компилятору пофиг», а потом их код поддерживать…

  9. вот как я решил ваше последнее задание

    PROGRAM summ;

    var a,num1,num2,num3,num4,sum:INTEGER;

    begin

    WRITE(‘vvedite trexznacnoye cislo: ‘);

    read (a);
    num1:=a div 100;
    num2:=a mod 100;
    num3:=num2 div 10;
    num4:=num2 mod 10 ;
    sum:=num1+num3+num4;
    write(‘summa trex cisel ‘, sum);

    readln;

    end.

  10. Слишком длинный код получился, займет больше памяти из-за кучи num.
    У меня с четырехзначным числом получилось div 1000 + mod 10 + div 100 mod 10 + div 10 mod 10;

  11. Стоит лишь по шагам разобрать действия, как и нужно делать в «хорошем стиле» и все получиться!
    Я верю в вас)

  12. Почему в примере с поиском суммы 2 чисел присутствуют num1, num2, а в примере с поиском суммы 3 чисел не добавляется num3. Это просто варианты решений или есть какое-то правило?

  13. Это одно и то же. Разница лишь в том, что во втором примере мы решили не записывать значения выделенных цифр в отдельные переменные, а находить их непосредственно в получении суммы. По сути, оба варианта допустимы, но за счет того, что первая программа занимает две дополнительные переменные, вторая получается выигрышнее

  14. «Важно! Если х = 5.5, то результат – 6, а если х = 6.5, то результат тоже 6!?» — Чётное число округляется в меньшую сторону

  15. Ребят, в паскале не важен регистр, но если речь идёт о переменных то это правило продолжает действовать или нет.

  16. как видно на скриншоте, не важно)
    https://uploads.disquscdn.com/images/c72294a3798a989e4afe87bda5a40c1cd054637baf28888c8122bee50cf27d24.png

  17. У меня вот что получилось, программа для нахождения суммы чисел у четырехзначного числа

    program a1;

    uses
    crt;

    var
    number, b, c, d, f, e: Integer;

    begin
    write(‘Введите любое четырёхзначное число>>’);
    read(number);
    b := number div 1000;
    c := number div 100 mod 10;
    d := number mod 100 div 10;
    f := number mod 10;
    e := b + c + d + f;
    write(e);
    readkey;
    end.

  18. «Важно! Если х = 5.5, то результат – 6, а если х = 6.5, то результат тоже 6!? Очень странная ошибка» — дело в том, что функция Round имеет малоизвестную особенность — «половинки» округляет до ближайшего чётного числа

  19. «Важно! Если х = 5.5, то результат – 6, а если х = 6.5, то результат тоже 6!? Очень странная ошибка» — дело в том, что функция Round имеет малоизвестную особенность — «половинки» округляет до ближайшего чётного числа

  20. Извините, кажется, что есть опечатка. Разве можно функцию random использовать с вещественным типом переменной?

  21. здравствуйте! все доступно написано. помогите пожалуйста сделать 2 задания :1) Дано четырёхзначное число Х. Найди произведение всех цифр. 2) Дано трёхзначное число В. Вывести на экран среднюю цифру.

  22. Добрый вечер!
    При решении задач используйте приведенный в примере способ

  23. помогите решить пожалуйста!!! с клавиатуры вводятся два числа а и b вычислить с=а-b если а>b c=b-a+1если a<=b

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *