31.01.2019 Learnpascal

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

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

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

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

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

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

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

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

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

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

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

Если в программу необходимо включить новую уникальную функцию, ее надо описать также, как процедуру. Более подробно о том, как делать собственные процедуры и функции, мы поговорим через 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+A Inc(5)=6
Dec(x, a) Целый X:=X-A Dec(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.




Например: 11 div 5 = 2 10 div 3 = 3 2 div 3 = div 4 = div -5 = div 5 = div -5 = 3 10 mod 5 = 0 11 mod 5 = 1 10 mod 3 = 1 14 mod 5 = 4 17 mod - 5 = mod 5 = mod -5 = -2


0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целом" title="Взаимосвязь между операциями div и mod Аргументы операций div и mod целые числа. Для а>0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целом" class="link_thumb"> 6 Взаимосвязь между операциями div и mod Аргументы операций div и mod целые числа. Для а>0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целому b. А именно, а кратно b тогда и только тогда, когда а mod b = 0 0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целом"> 0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целому b. А именно, а кратно b тогда и только тогда, когда а mod b = 0"> 0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целом" title="Взаимосвязь между операциями div и mod Аргументы операций div и mod целые числа. Для а>0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целом"> title="Взаимосвязь между операциями div и mod Аргументы операций div и mod целые числа. Для а>0 и b>0 справедливо: A mod b = a – (a div b)*b (a div b)*b + (a mod b) = a Обратите внимание операцию mod можно использовать, чтобы узнать, кратно ли целое а целом">


Определить кол-во оставшихся слив, если их делили на 5 человек write (Кол-во слив = "); readln (a); b:= a mod 5; writeln(Осталось,b, слив);


Операции отношения Не равно Меньше = Равно Больше = Меньше или равно Больше или равно = Меньше или равно Больше или равно"> = Меньше или равно Больше или равно"> = Меньше или равно Больше или равно" title="Операции отношения Не равно Меньше = Равно Больше = Меньше или равно Больше или равно"> title="Операции отношения Не равно Меньше = Равно Больше = Меньше или равно Больше или равно">






Вычислить гипотенузу прямоугольного треугольника (длина катетов - a и b) write ("a="); readln (a); write ("b="); readln (b); c:= sqrt (sqr(a) + sqr(b)); writeln ("c=", с:5:2);


Вычислить модуль разности чисел a и b write ("a="); readln (a); write ("b="); readln (b); c:= abs (a - b); writeln ("модуль=", с);






Экспонента и логарифм Exp (x) ln x (натуральный логарифм) Ln (x) e x (экспонента числа, e) Exp (b*Ln (a)) ab ab










Примеры использования DIV и MOD: Операции DIV и MOD часто используются для анализа чисел, например, для получения цифр, из которых состоит число. Задача: Ввести с клавиатуры какое-нибудь трехзначное число. Определить сумму его цифр и вывести эти цифры в обратном порядке.


Пусть переменная а содержит значение заданного числа. Цифры числа а обозначим так: i - количество сотен; j – количество десятков; k - количество единиц; s – сумма этих цифр. Program MyNamber; Uses Crt; Var a, i, j, k, s: integer; Begin clrscr; Writeln (Задайте 3-х значное число); Readln (a); i:=a div 100; {количество сотен} j:=a div 10 mod 10; {десятков} k:=a mod 10; {количество единиц} s:=i+j+k; Writeln (Сумма цифр числа,a,=,s); Writeln (k, j, i); Readln; End.


Стандартные функции Функция ПаскаляМатематическая запись Название Abs(x)|Х||Х| Абсолютная величина числа Х (модуль) Sqr(x)Х2Х2 Возведение числа в квадрат Exp(x)exex Экспонента Sqrt (x) x Вычисление квадратного корня Exp(b*ln(a)) abab Возведение числа в степень Round (x) Округляет до ближайшего целого числа Trunc (x) Отсекает дробную часть Sin(x)sinx Вычисление синуса Cos(x)сosx Вычисление косинуса



Ответы 1.1,68 4.2,06 5.1,10 6.2,16 7.3,05 8.0,10


2.Дано трёхзначное число. В нём зачеркнули первую слева цифру и приписали её справа. Вывести полученное число.(Например,) 3.Дано трёхзначное число. Вывести число, полученное при перестановке цифр десятков и единиц исходного числа. (Например,)

Арифметические операции языка Pascal ABC

СТРУКТУРА ПРОГРАММЫ. ОПИСАНИЕ ПЕРЕМЕННЫХ В PASCAL ABC

Цель работы Изучить структуру программы. Освоить работу пользователя по описанию переменных различных типов при работе в интегрированной среде PASCAL ABC 7.0.

ЗНАК ВЫРАЖЕНИЕ ОПЕРАЦИЯ
+ A+B СЛОЖЕНИЕ
_ A – B ВЫЧИТАНИЕ
* A*B УМНОЖЕНИЕ
/ A/B ДЕЛЕНИЕ
DIV A div B ЦЕЛОЕ ДЕЛЕНИЕ
MOD A mod B ОСТАТОК ОТ ЦЕЛОГО ДЕЛЕНИЯ
Функция Функция
Frac(x) Дробная часть х
Int(x) Целое
Ln(x) Натуральный логарифм
Pi Постоянная величина π
Abs(x) Абсолютное значение (модуль числа)
Arctan(x) Арктангес х
Cos(x) Косинус х
Exp(x) е - экспанента
Random Случайное число от 0 до 1
Random(n) Случайное число от 0 до n
Odd(x) True , если х – нечетное False , если х – четное
Sin(x) Синус х –(в радианах)
Sqr(x) Квадрат аргумента
Sqrt(x) Квадратный корень
Trunc(x) Ближайшее целое, не превышающие аргумент по модулю (отсекание дробной части числа x)
Round(x) Округление до ближайшего целого аргумента

Задания 1

Вычислить месячные выплаты m по займу в s рублей на n лет под процент p. Вычисления выполняются по формулам:

Наберите текст программы:

Выполнить самостоятельно:

1. Заданы длины трех сторон треугольника a , b , c . Вычислить периметр и площадь треугольника по формуле Герона

2. Вычислить значение выражения по формуле (все переменные принимают действительные значения):

1. Запустите программу на выполнение и проверьте её работу;

2. Просмотрите результат выполнения программы;

Стандартными функциями языка программирования Pascal приведены в табл. 1

Таблица 1:

Имя функции Выполняемая операция
ABS(X) Вычисляет модуль аргумента х, тип х – вещественный или целый, тип результата совпадает с типом аргумента
SQR(X) Вычисляет квадрат аргумента (х 2), тип х – вещественный или целый, результат совпадает с типом аргумента
SQRT(X) Вычисляет корень квадратный из аргумента х (х>0); тип х – вещественный или целый, тип результата вещественный
SIN(X) Вычисляет синус аргумента х (х – в радианах); тип х – вещественный или целый, тип результата вещественный
COS(X) Вычисляет косинус аргумента х (х – в радианах); тип х – вещественный или целый, тип результата вещественный
ARCTG(X) Вычисляет арктангенс аргумента х (х – в радианах); тип х – вещественный или целый, тип результата вещественный
EXP(X) Возведение числа е=2,71828 в степень х (е х), тип х – вещественный или целый, тип результата вещественный

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

Примеры составления линейной программы

Пример 1 Найти среднее арифметическое трёх чисел - двух целых (X и Y) и одного вещественного (Z) и квадрат среднего арифметического.

Программа :

Program Midding;

X, Y: Integer;

Z, Midd, SqrMidd: Real;

WriteLn("Введите два целых числа X и Y:");

ReadLn(X,Y);

WriteLn("Введите вещественное число Z:");

ReadLn(Z);

Midd:=(X+Y+Z)/3;

SqrMidd:=SQR(Midd)

Writeln("Среднее арифметическое = ",Midd);

Write("Квадрат среднего арифметического = ",SqrMidd);

Описание программы

В заголовке указано имя программы - Midding (среднее), затем словом var открывается раздел описания переменных: X и Y – целые, Z – вещественная. Слово begin открывает основной блок программы, в котором:

▪ оператор WriteLn выводит на экран текст "Введите два целых числа X и Y:";

▪ оператор ReadLn(X,Y)считывает значения чисел, введённых с клавиатуры и присваивает их соответственно целым переменным X и Y;

оператор ReadLn(Z)считывает значение числа, введённого с клавиатуры и присваивает его вещественной переменной Z;

▪ затем оператор присваивания вычисляет среднее значение X,Y,Z и присваивает его переменной Midd, затем аналогично вычисляется квадрат этой величины и присваивается переменной SqrMidd;

▪ оператор Writeln выводит текст "Среднее арифметическое = ",

рассчитанное значение Midd и переводит курсор на новую строку;

▪ оператор Write выводит текст "Квадрат среднего арифметического = " и рассчитанное значение SqrMidd;

▪ оператор end. закрывает основной блок и завершает выполнение программы.

Пример 2 Вычислить площадь круга S и длину окружности L по заданному радиусу R.

Программа

Program KRUG;

const P=3.14159

R,S,L:Real;

Read(R);{ввод значения радиуса}

L:=2*P*R;

S:=P*SQR(R);

Writeln(Длина окружности = ",L,"см");

Write("Площадь круга = ",S,"кв.см");

Контрольные вопросы

1 Из каких разделов состоит любая программа на языке Pascal?

2 Формат и назначение оператора присваивания.

3 Формат и назначение операторов ввода данных.

4 Формат и назначение операторов вывода данных.

Задание

Найти площадь поверхности куба по формуле T=6a 2
Определить расстояние, пройденное физическим телом за время t, если тело движется с постоянной скоростью v.
Вычислить:
В году примерно 3.156х10 7 сек. Написать программу, которая запрашивает возраст в годах и переводит его в секунды.
Вычислить:
Найти объем цилиндра по формуле: V=pR 2 H
Найти расстояние от точки с координатами (x,y) до начала координат.
Масса m одной молекулы воды примерно равна 3.0х10 -23 гр. Кварта воды равна примерно 950 гр. Написать программу, которая запрашивает количество воды в квартах и выводит число молекул в этом количестве воды.
Найти объем куба по формуле V=a 3 . (с использованием и без использования стандартных функций).
Вычислить:
Написать программу, которая запрашивает количество дней и переводит в недели и дни. Например, 18 дней = 2 недели и 4 дня.
Найти диагональ и площадь квадрата
Вычислить:
Найти площадь боковой поверхности шара: T=4pR 2
Вычислить:
Вычислить:

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

Подпрограммы - это своего рода разбиения больших программ на отдельные части. Это удобно и эффективно разбивать большие программы на несколько подпрограмм, что упрощает разработку кода основной программы. Чтобы использовать подалгоритм как подпрограмму, нужно присвоить ему имя и описать алгоритм в соответствии с правилами языка Паскаль.

Далее, если появилась необходимость вызвать подалгоритм в основной программе, то упоминают в необходимом месте имя того или иного подалгоритма в сочетании со списком данных (как входных, так и выходных). Это упоминание, как правило, производит выполнение операторов, входящих в подпрограмму и работающих с указанными данными. После выполнения используемой подпрограммы работа основной программы продолжается, но уже начиная с команды, следующей сразу после вызова подпрограммы.

В Паскале можно выделить два типа подпрограмм:

  • Функции
  • Процедуры

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

Структура процедуры в Паскале представлена так:

Как и в формате описания функций, так и в формате описания процедур формальные параметры в заголовке функций и процедур представляются следующим образом:

var имя параметра: имя типа;

Формальные параметры разделяются запятыми; ключевое слово var в некоторых случаях может быть опущено. Когда параметры имеют одинаковый тип, то имена этих параметров перечисляют чрез запятую, указывая в конце после знака «:» имя соответствующего типа.

Когда описывают параметры, то можно пользоваться только стандартными именами типов, которые определены при помощи команды type. Процедуры вызываются с помощью оператора, имеющего следующую структуру:

имя процедуры(список фактических параметров);

В круглых скобочках указан список фактических параметров (их перечисление через «,»). Когда осуществляется вызов процедуры, то фактические параметры выступают в качестве формальных параметров, которые находятся на том же месте в заголовке процедуры. В результате передаются входные параметры, а затем происходит выполнение операторов исполняемой части, а после этого осуществляется возврат в вызывающий блок.

Функция в Паскале вызывается аналогично, однако есть возможность вызвать функцию внутри какого-нибудь выражения, т.е. имя функции может находиться в разделе условий оператора if, справа от оператора присваивания и т.д. Чтобы передать в вызывающий блок выходное значение функции в исполняемой части, перед возвратом в вызывающий блок нужно прописать команду:

имя функции:=результат;

Когда появилась необходимость вызвать процедуру и функцию, то следует руководствоваться следующими правилами

  1. количество формальных параметров = количество фактических параметров;
  2. фактические и формальные параметры должны обладать одним и тем же порядком следования и типом.

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