
- •Иванов и.Н. Паскаль История развития языка.
- •Как пишутся программы
- •Язык программирования
- •Методика решения задач
- •Структура паскаль-программы
- •Раздел описаний
- •Uses - подключение библиотеки данные и их типы
- •Переменные
- •Имена переменных
- •Константы
- •Синтаксис и семантика написания программ
- •Стандартные типы данных
- •Знакомство с интегрированной средой
- •Вход в интегрированную среду
- •Поля основного меню File - работа с файлами
- •Edit - редактирование
- •Search - поиск информации
- •Compile - компиляция программы
- •Debug - отладка программы
- •Tools - инструментальные средства
- •Options - параметры среды
- •Window - работа с окнами
- •Help - информационная помощь
- •Лабораторная работа №1 на тему
- •Запуск среды
- •1). Прежде всего, установите свой каталог, в котором будут содержаться ваши программы:
- •2). Ввод новой программы:
- •Редактирование программы
- •Копирование информации
- •Операторы паскаля: присваивания, ввода-вывода данных Оператор присваивания.
- •Оператор ввода данных.
- •Оператор вывода данных.
- •Модуль crt.
- •Выражения и функции в Паскале.
- •Возведение в степень
- •Практическая работа № 1 тема: "составление линейных и диалоговых программ"
- •Организация ввода-вывода в паскале.
- •Стандартные функции. Линейные программы
- •Ветвления и циклы в паскале. Оператор варианта Оператор ветвления (условный).
- •Оператор варианта.
- •Оператор цикла с параметром.
- •Вложенные циклы
- •Оператор цикла с предусловием. (Работает, пока истинно условие)
- •Оператор цикла с постусловием. (Работает, пока ложно условие)
- •Нестандартные типы данных: перечисляемый и ограниченный тип
- •Var имя переменной: имя типа;
- •Ограниченный тип данных
- •1 Октября 1994 года - 4 квартал – суббота
- •Символьные переменные и функции в паскале
- •Процедуры и функции в паскале
- •Графика паскаля
- •Практический зачет на тему:
- •Сложные типы данных тип массив. Одномерные массивы
- •Решение задач
- •IV. Домашнее задание.
- •Сложные типы данных. Тип массив двумерные массивы
- •Ввод-вывод элементов массива.
- •Решение задач
- •Файловый тип данных
- •Урок № 55-56
- •Ход урока.
- •I. Самостоятельная работа с теоретическим материалом.
- •II. Теоретический материал.
- •III. Домашнее задание.
- •Урок № 57-58
- •Ход работы.
- •Урок-исследование № 59-60
- •Ход урока.
- •Теоретический материал к уроку.
- •Var имя множества: set of базовый элемент;
- •Var имя множества: имя типа;
- •Задание для работы в группах по теме “Множества”
- •Урок № 61-62
- •Ход работы.
- •I. Консультация по билетам.
- •II. Решение задач.
- •III. Домашнее задание.
Процедуры и функции в паскале
Что такое подпрограмма?
Процедуры и функции аналогичны программам в миниатюре и имеют общее название - подпрограммы.
Подпрограмма - это часть программы, описывающая некоторый алгоритм, который можно многократно использовать, обращаясь к нему из различных точек программы.
Зачем нужны подпрограммы?
Применение подпрограмм дает возможность уменьшать число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм. Это позволяет получить более логичный процесс программирования.
Где располагаются подпрограммы в программе?
В программе описание процедур и функций должно располагаться между разделами переменных и операторов.
Как работает компьютер по программе, имеющую подпрограммы?
Выполнение программы, имеющую подпрограмму, начинается с выполнения основной программы. Как только в программе идет обращение к подпрограмме, данные из основной программы (входные данные) передаются в подпрограмму, которая начинает выполняться. Затем результаты подпрограммы (выходные данные) передаются в основную программу в то место, откуда был сделан вызов подпрограммы, и продолжает выполняться основная программа.
Как оформляется подпрограмма?
Подпрограмма оформляется подобно основной программе, т.е. состоит из заголовка, раздела описаний, раздела операторов.
Различие глобальных и локальных переменных?
Все имена, представленные в разделе описаний основной программы, называются глобальными. Они действуют как во всей основной программе, так и в любой подпрограмме. Имена, представленные в разделе описаний подпрограммы, называют локальными. Они действуют только в рамках подпрограммы и недоступны операторам основной программы.
Два вида подпрограмм в Паскале?
В языке Паскаль имеется два вида подпрограмм:
процедура (PROCEDURE), функция (FUNCTION)
Чем процедура похожа на функцию?
И процедура и функция – отдельные программные блоки.
И процедура и функция вызываются по имени из любой части основной программы.
В процедуру или функцию можно передавать фактические параметры (числа, слова и т.п.) для их работы (если они нужны)
После их выполнения продолжается выполнение основной программы с того места, где были вызваны процедура или функция.
Чем процедура отличается от функции?
После выполнения процедура не возвращает никакого результата в основную программу. Она не может быть вставлена внутрь арифметического выражения. Самый простой пример процедуры – СходитьВМузей(). Назад домой вы ничего не принесли .
Функция после выполнения возвращает результат (единственное значение!) в основную программу. Поэтому функцию можно использовать в арифметических выражениях. Самый простой пример функции – КупитьХлеб(деньги). Домой принесли хлеб.
Примечание: Если мы хотим в результате выполнения функции получить несколько значений (а возвращает только одно), то надо использовать подпрограмму и глобальные переменные.
Оформление процедуры.
PROCEDURE имя (формальные параметры);
раздел описаний
BEGIN
раздел операторов
END;
Вызывается процедура по имени:
имя (фактические параметры);
Фактические и формальные параметры.
С помощью фактических и формальных параметров данные передаются из программы в процедуру и из процедуры в программу. В качестве формальных параметров могут быть только переменные с указанием типа, а в качестве фактических параметров могут быть константы, переменные, выражения без указания их типа. Порядок передачи фактических параметров должен соответствовать порядку формальных параметров, иначе возникнет путаница.
Как это делается:
Допустим, фактические параметры – это числа, с которыми должна работать процедура или функция. При вызове процедуры (функции) эти числа указываются в скобках. Тем самым они передаются телу функции для обработки. Однако процедура напрямую не работает с этими числами (или переменными, содержащими числа – можно их и так передать в функцию). Процедура присваивает их (значения переменных или числа) своим формальным параметрам – внутренним (локальным) переменным. Функция (процедура) начинает работать со своими локальными переменными.
Результат выполнения передается в основную программу по-разному.
Ещё раз о параметрах процедуры
Процедура может содержать несколько операторов и несколько результатов выполнения. Каждый результат обозначается своим именем. В основной программе после вызова процедуры мы можем пользоваться этими результатами, сохраняя те же имена или давая другие.
Пример. Допустим, вызывается процедура нахождения площади прямоугольника: PLOSH(A,B,S) или PLOSH(3,2.5,S). Переменные А и В содержат значения сторон, которые передаются в процедуру для решения. После решения ответ передается в переменную S. Эту S можно использовать в основной программе, так как она объявлена как глобальная переменная. Это был вызов процедуры.
Понятно, что прежде чем вызывать процедуру, ее нужно описать. В нашем случае заголовок будет выглядеть так:
PROCEDURE PLOSH(dlina, shirina:integer; VAR otvet: integer);
Переменные dlina, shirina, otvet – формальные переменные (внутренние переменные процедуры). Им в соответствие ставятся фактические переменные А, В, S при вызове процедуры. Далее при вызове происходит следующее: значение переменной А присваивается переменной dlina, значение переменной В присваивается переменной shirina, а после всех вычислений значение переменной otvet присваивается переменной S. Таким образом результат из процедуры выходит «наружу», в основную программу.
Параметры процедуры делятся на отдельные виды, но в простых программах чаще всего используются параметры-значения (у нас А, В) и параметры-переменные (у нас S). В формальных параметрах процедуры перед параметрами-переменными ставится слово VAR. Данные этих параметров передаются в обоих направлениях: из программы в процедуру и, наоборот, из процедуры в программу. В случае переопределения этих данных в процедуре, они все равно доступны программе. Если в процедуре перед формальными параметрами не стоит слово VAR, то такие параметры называются параметрами-значениями. Их можно передавать только в одном направлении: из программы в процедуру. Эти параметры не могут быть результатом выполнения процедуры. Таким образом, параметры-значения могут быть только входными для процедуры, а параметры-переменные как входными, так и выходными.
Пусть имеется процедура:
Procedure summa(a:integer; var b:integer);
Begin
A:=A+3;
B:=B+3
End;
Посмотрим, чему будут равны значения А и В в основной программе после выполнения следующих операторов:
A:=5; B:=5;
SUMMA(A,B);
WRITE(A,B);
Здесь значения А = 5 и В = 5 передаются в процедуру, где вычисляются новые значения А=5+3=8 и В=5+3=8. Новое значение В передается в программу, а значение А – нет. Поэтому в основной программе будем иметь А=5, В=8.
Примеры программ с процедурами.
Пример 1. Вычислить:
Степень находить так: XN = X X X ... X
program pr1;
var d,z,m,,a,b,c:integer;
y,y1,y2,y3: real;
procedure step(x,n:integer; var w:real); {здесь после var объявляются переменные для ответов}
var i:integer;
begin
w:=1;
for i:=1 to n do
w:=w*x;
end;
begin
read (d,a,z,b,m,c); {исходные данные}
{начинаем вызывать процедуры}
step (d,a,y1); {вычисляется степень первого числа, результат – в y1}
step (z,b,y2);
step (m,c,y3);
y:=(y1+y2)/y3; {ответ}
writeln ('y=',y);
end.
Пример 2. Среди трехзначных чисел найти такие, в которых сумма факториалов цифр равнялась бы самому числу. (факториал числа – это последовательное произведение чисел, начиная с 1 и до этого числа: 4! = 1*2*3*4)
program pr2;
var a,b,c,i,s1,s2,s3:integer;
procedure faktor(x:integer; var s:integer);
var i:integer;
begin
s:=1;
for i:=1 to x do
s:=s*i;
end;
begin
for i:=100 to 999 do
begin
a:=i div 100; {получаем цифру сотней}
b:=(i-a*100) div 10; {получаем цифру десятков}
c:=i - a*100 - b*10; {получаем цифру единиц}
faktor (a,s1); {посылаем цифру сотней, получаем ее факториал в s1}
faktor (b,s2); {аналогично}
faktor (c,s3); {аналогично}
if s1+s2+s3=i then writeln (i);
end;
end.
Оформление функций.
Функция, как и процедура, может содержать несколько операторов, несколько входных параметров, но результат ее выполнения только один. Этот единственный результат обозначается именем функции и передается в основную программу. Если нам нужно возвратить больше одного результата, то придется иметь дело с процедурой.
В общем виде функция записывается так:
FUNCTION ИМЯ(список формальных параметров: тип): тип;
раздел описаний
BEGIN
раздел операторов;
END;
Вызывается функция по ее имени с указанием фактических параметров. При этом вызов функции можно делать непосредственно внутри выражения, подобно тому, как используются стандартные встроенные функции, например SIN(X).
Примеры программ с функциями:
Тот же самый пример , но с использованием функции:
program pr1;
var d,z,m,a,b,c:integer;
y: real;
function step(x,n:integer):real;
var i,w:integer;
begin
w:=1;
for i:=1 to n do
w:=w*x;
step:=w;
end;
begin
read (d,a,z,b,m,c);
y:=(step (d,a)+step (z,b))/step (m,c); {вызов функции из ариф. выражения}
writeln ('y=',y);
end.
Пример.
Даны действительные числа S и T. Получить: F(T,-2*S,1.17) + F(2.2,T,S-T),
где
program pr3;
var y,t,s:real;
function form(a,b,c:real):real;
begin
form:=(2*a-sin(c))/(5+abs(c));
end;
begin
read (t,s);
y:=form(t,-2*s,1.17)+form(2.2,t,s-t);
writeln (y:8:2);
end.
Пример 4. Даны действительные числа a,b,c. Получить:
program pr4;
var a,b,c,z:real;
function max(x,y:real):real;
var m:real;
begin
if x>y then m:=x else m:=y;
end;
begin
read (a,b,c);
z:=(max(a,a+b)+max(a,b+c))/(1+max(a+b*c,1.5));
writeln (z:8:2);
end.
Ещё различие процедур и функций.
Функции являются частным случаем процедур и принципиально отличаются от них тем, что:
1. результат выполнения функции - одно значение, а процедуры - одно или несколько;
2. результат выполнения функции передается в основную программу как значение имени этой функции, а результаты выполнения процедуры - как значения ее параметров.
ЗАДАНИЯ на использование процедур:
Задача 1.
Даны координаты вершин треугольника и точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника.
Алгоритм:
1. Нахождение длин сторон (OB, OC,OA,BA,CA,BC). (Процедура dlin)
2. Нахождение площади трех треугольников S1(ABO), S2 (OBC), S3 (OCA). (Процедура pl)
3. Нахождение высот треугольников. (Процедура vis)
4. Сравнение высот (нахождение до ближайшей стороны). (Процедура min)
Проверить результаты выполнения программы по таблице:
№ п/п |
X |
Y |
X1 |
Y1 |
X2 |
Y2 |
X3 |
Y3 |
Ответ |
1. |
21 |
7 |
10 |
11 |
20 |
3 |
30 |
16 |
1.65 |
2. |
187 |
93 |
162 |
102 |
213 |
76 |
296 |
157 |
3.34 |
3. |
200 |
100 |
10 |
170 |
160 |
10 |
300 |
190 |
23.68 |
З
адача
2.
Дана окружность радиусом R. Внутри этой окружности находится еще 3 непересекающихся друг с другом окружности радиусов R1, R2, R3. Написать программу, вычисляющую площадь заштрихованной поверхности:
Задача 3
Напишите программу с использованием процедуры calendar()(ее нужно создать). Программа будет запрашивать номер дня недели для первого числа и выводить календарь на месяц из расчета 31 день примерно так:
Введите номер дня недели для первого числа: 4
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4
5 6 7 8 9 10 11
13 14 15 16 17 18
20 21 22 23 24 25
26 27 28 29 30 31
Еще (y/n)? _
ЗАДАНИЯ на использование функций
Задача 1.
Напишите программу, вычисляющую длину гипотенузы прямоугольного треугольника. Для вычисления гипотенузы использовать функцию.
Задача 2.
Вычислить:
Где
Проверить результаты выполнения программы по таблице:
№ п/п |
A |
B |
Ответ |
1. |
2.3 |
21.3 |
45.46 |
2. |
-0.6 |
31.2 |
1033.02 |
3. |
0.15 |
-2.1 |
-0.13 |
Задача 3
Написать функцию, которая возводит некоторое число х в степень n.
Задача 4
Расстояние (функция Distance()) до точки падения тела, брошенного под углом «альфа» к горизонту с начальной скоростью V0 м/с вычисляется по формуле:
,
где g
– ускорение свободного падения и = 9,8
м/с2
Напишите программу, реализующую игру, в которой пользователь сначала вводит расстояние до цели, затем вводится угол и скорость броска тела. Если тело падает рядом с целью в пределах одной десятой процента всего расстояния до цели, то пользователь выигрывает игру. Если тело упало далеко от цели, то выводится расстояние – насколько далеко и дается еще одна попытка (при том же расстоянии до цели – опять его вводить не нужно). После пятой попытки игра считается проигранной. Угол вводится в градусах, затем переводится в радианы по формуле: Радианы = градусы * 3,14 / 180
Дополните программу, чтобы она сообщала – недолет или перелет.
Теоретический зачет по процедурам и функциям:
Что такое подпрограмма?
Зачем нужны подпрограммы?
Где располагаются подпрограммы в программе?
Как работает компьютер по программе, имеющую подпрограммы?
Как оформляется подпрограмма?
Различие глобальных и локальных переменных?
Два вида подпрограмм в Паскале?
Чем процедура похожа на функцию?
Чем процедура отличается от функции?
Оформление процедуры.
Фактические и формальные параметры.
Чем отличаются параметры-значения от параметров-переменных? Как они оформляются в вызовах?