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, справа от оператора присваивания и т.д. Чтобы передать в вызывающий блок выходное значение функции в исполняемой части, перед возвратом в вызывающий блок нужно прописать команду:
имя функции:=результат;
Когда появилась необходимость вызвать процедуру и функцию, то следует руководствоваться следующими правилами
- количество формальных параметров = количество фактических параметров;
- фактические и формальные параметры должны обладать одним и тем же порядком следования и типом.
Заметка . Имена фактических и формальных параметров могут быть одинаковыми - это не вызывает никаких проблем, поскольку соответствующие им параметры в любом случае окажутся разными по той причине, что хранятся в различных областях памяти.