Закрепление навыков использования процедур и функций.
Практическая работа
Составление программ, в которых применяются процедуры и функции
Цель работы: | Научиться работать с процедурами и функциями и использовать параметры-переменные в процедуре. |
Пример:
Написать программу для нахождения значения функции , где х изменяется от p/2 до 2p с шагом p/12. Вычисление у оформить в виде функции.
{ Вычисление значений у}
program prac9;
var x,y:real;
function f(x:real):real;
begin
f:=sin(x)-1;
end;
begin
writeln(' x y');
writeln('------------------------');
x:=pi/2;
repeat
y:=f(x);
writeln(x:6:2,y:15:6);
x:=x+pi/12;
until x>2*pi;
writeln('------------------------');
readln;
end.
Задание.
№1.
1. Написать программу для нахождения значения функции
х изменяется от p/2 до 2p с шагом p/12. Вычисление у оформить в виде функции.
ProgramFunc_1_1;
Const
pi=3.14;
Var
y,x:real;
Functionf(x:real):real;
Begin
f:= sin(x)/x;
end;
Begin
x:= pi/2;
Whilex < 2 * pi do
Begin
y:=f(x);
writeln('x = ', (x * 180)/pi:3:2, ' y=',y:3:2);
x:=x+pi/12;
end;
end.
x = 90.00 y=0.64
x = 105.00 y=0.53
x = 120.00 y=0.41
x = 135.00 y=0.30
2. Написать программу и процедуру, вызываемую из основной программы для вычисления объема шара и площади его поверхности.
ProgramProc_1_2;
Const
pi=3.14;
Var
r,P,V:real;
ProcedureObS(r:real; var m,n:real);
Begin
m:= 4/3 *pi * sqr(r);
n := 4/3 * pi *power(r,3);
end;
Begin
write('Введите радиус r = ');
read (r);
Obs(r, p, v);
writeln('p = ',p:3:2, ' v =', v:3:2);
end.Введите радиус r = 5
p = 104.67 v =523.33
№2.
1. Написать программу для нахождения значения функции
х изменяется от p/2 до 2p с шагом p/12. Вычисление у оформить в виде функции.
ProgramFunc_2_1;
Const
pi=3.14;
Var
y,x:real;
Functionf(x:real):real;
Begin
f:= x * cos(x);
end;
Begin
x:= pi/2;
whilex <= 2 * pi do
Begin
y:=f(x);
writeln('x = ', (x * 180)/pi:3:2, ' y=',y:3:2);
x:=x+pi/12;
end;
end.
x = 90.00 y=0.00
x = 105.00 y=-0.47
x = 120.00 y=-1.04
x = 135.00 y=-1.66
x = 150.00 y=-2.26
2. Написать программу и процедуру, вызываемую из основной программы для вычисления объема параллелепипеда и площади его поверхности (V = abc, P = 2(ab + bc + ac)).
ProgramProc_2_2;
Var
a,b,c,v,p:real;
ProcedureObPl(x,y,z:real; varo,s:real);
Begin
o:= 2*(x*y + y* z + x* z);
s := x*y*z;
end;
Begin
writeln('Введите a,b,c');
read (a,b,c);
ObPl(a,b,c,p,v);
writeln('площадь параллепипеда p = ',p:3:2, ' объем параллепипеда v =', v:3:2);
end.
Введите a,b,c
2.1
3.3
6.4
площадь параллепипеда p = 82.98 объем параллепипеда v =44.35
№3.
1. Написать программу для нахождения значения функции
х изменяется от -1 до 3 с шагом 0,5. Вычисление у оформить в виде функции.
2. Написать программу и процедуру, вызываемую из основной программы для вычисления объема куба и площади его поверхности (V = a3 , P = 6a2 ).
Введите a = 4
площадь куба = 96.00 объем куба v =64.00
№4.
1. Написать программу для нахождения значения функции
х изменяется от -15 до 20 с шагом 5. Вычисление у оформить в виде функции.
Ответ:
x=-15 y=0.81
x=-10 y=0.71
x= -5 y=0.46
x= 0 y=2.00
x= 5 y=1.62
x= 10 y=1.31
x= 15 y=1.20
2. Написать программу и процедуру, вызываемую из основной программы для вычисления объема кругового цилиндра и площади его боковой поверхности (V = pR2 h, S = 2pRh).
Ответ:
Введите радиус r = 5
Введите высоту h = 10
площадь кругового цилиндра s = 314.00 объем кругового цилиндра v =785.00
№5.
1. Написать программу для нахождения значения функции
х изменяется от -p до p с шагом p/12. Вычисление у оформить в виде функции.
Ответ:
x=-3.14 y=0.00
x=-2.88 y=-0.29
x=-2.62 y=-0.57
и т.д.
2. Написать программу и процедуру, вызываемую из основной программы для вычисления объема кругового конуса и площади его боковой поверхности
№6.
1. Написать программу для нахождения значения функции
y = sin x + sin 2x + sin 3x
х изменяется от -2p до 2p с шагом p/8. Вычисление у оформить в виде функции.
2. Написать программу и процедуру, вызываемую из основной программы для вычисления гипотенузы и площади прямоугольного треугольника, если известны его катеты.
№7.
1. Написать программу для нахождения значения функции
х изменяется от 1 до 5 с шагом 0,5. Вычисление у оформить в виде функции.
2. Написать программу и процедуру для перевода введенного значения фунтов в унции и килограммы
(1 фут = 16 унций = 0,454 кг).
№8.
1. Написать программу для нахождения значения функции
y = x2 – 2x + 3
х изменяется от -3 до 3 с шагом 0,5. Вычисление у оформить в виде функции.
2. Написать программу и процедуру для вычисления сопротивления цепи из четырех сопротивлений при последовательном и параллельном соединении.
№ 9.
1. Написать программу для нахождения значения функции
y = x3 – 0.8x + 2
х изменяется от -2 до 4 с шагом 0,5. Вычисление у оформить в виде функции.
2. Написать программу и процедуру для вычисления скоростей шаров массами m1 и m2 после удара, скорость первого шара – v1, второй шар до удара покоился
№10.
1. Написать программу для нахождения значения функции
y = (x + 1)2 – 2(x +5)
х изменяется от -3 до 3 с шагом 0,5. Вычисление у оформить в виде функции.
2. Написать программу и процедуру для вычисления емкости батареи из четырех конденсаторов при последовательном и параллельном соединении.
Оформление отчета:
В отчете должны быть представлены:
1. Номер и название работы.
2. Цель работы.
3. Задание.
4. Для каждого задания должен быть записан текст программы.
Контрольные вопросы:
1. Что такое процедура?
2. Как объявляется процедура?
3. Как вызывается процедура?
4. Чем отличается параметр-переменная от простого параметра?
5. Какие переменные называются локальными?
6. Какие переменные называются глобальными?
7. Что такое функция?
8. Как объявляется функция-программиста?
9. Как происходит вызов функции?
Практическая работа №10.
Закрепление навыков использования процедур и функций.
Цель работы: | Научиться использовать процедуры и функции при работе с массивами. |
Теоретическая справка
Если необходимо передать в качестве параметра в процедуру или функцию массив, то необходимо в начале программы задать новый тип для массива в разделе TYPE. Это делается следующим образом
type новое_имя_типа [диапазон массива] of тип_массива;
Например:
type mas [1..10] of integer;
это означает, что создан новый тип mas, для одномерных массивов размерности 10, состоящих из целых чисел. Если необходимо будет передать такой массив с именем В в процедуру input, заголовок которой выглядит так:
procedure input(a:mas);
то обращение к процедуре будет выглядеть:
input(B) ;
Также поступают и с двумерными массивами, только их диапазон состоит из количества строк и количества столбцов.
Пример:
Написать программу для ввода двух массивов С и D, вывести эти массивы в виде матриц, найти минимальные элементы, а также суммы этих массивов. Выполнить перестановки: в массиве С переставить последнюю и предпоследнюю строки, в массиве D переставить 1 и 2 строки. Все повторяющиеся действия оформить в виде процедур или функций.
Программа выглядит следующим образом:
program massiv;
uses crt;
const n=3;
m=3;
type mas=array[1..n,1..m] of real;
var C,D:mas;
i,j:integer;
S,buf,min:real;
{Ввод элементов массива}
procedure vvod(var a:mas);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to m do
begin
write(i,',',j,'->');
readln(a[i,j]);
end;
end;
{Ввывод элементов массива в виде матрицы}
procedure vivod(a:mas);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:10:2);
writeln;
end;
end;
{Перестановка в массиве k-той и l-той строк}
procedure perest(var a:mas;k,l:integer);
var buf:real;
i,j:integer;
begin
for j:=1 to m do
begin
buf:=a[k,j];
a[k,j]:=a[l,j];
a[l,j]:=buf;
end;
end;
{Поиск минимального элемента массива}
function min_mas(a:mas):real;
var min:real;
i,j:integer;
begin
min:=a[1,1];
for i:=1 to n do
for j:=1 to m do
if a[i,j]<min then min:=a[i,j];
min_mas:=min;
end;
{Поиск суммы элементов массива}
function sum_mas(a:mas):real;
var S:real;
i,j:integer;
begin
S:=0;
for i:=1 to n do
for j:=1 to m do
S:=S+a[i,j];
sum_mas:=S;
end;
begin
clrscr;
writeln('Введите элементы массива С:');
vvod(C);
writeln;
writeln('Введите элементы массива D:');
vvod(D);
clrscr;
writeln('Массив С:');
vivod(C);
perest(C,n,n-1);
writeln('Массив С после перестановки:');
vivod(C);
S:=sum_mas(C);
min:=min_mas(C);
writeln('Сумма элементов массива С->',S:5:2);
writeln('Минимальный элемент массива С->',min:5:2);
writeln
writeln('Массив D:');
vivod(D);
perest(D,1,2);
writeln('Массив D после перестановки:');
vivod(D);
S:=sum_mas(D);
min:=min_mas(D);
writeln('Сумма элементов массива D->',S:5:2);
writeln('Минимальный элемент массива D->',min:5:2);
readln;
end.
Задание
№1.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти среднее арифметическое этих массивов, переставить местами первую и последнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№2.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти количество отрицательных элементов в массивах, переставить местами первый и последний столбики, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№3.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти максимальные элементы массивов, переставить местами первую и вторую строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№4.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти количество положительных элементов в этих массивах, переставить местами второй и третий столбики, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№5.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти количество элементов больше среднего в этих массивах, переставить местами первую и предпоследнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№6.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти сумму элементов стоящих на главной диагонали в этих массивах, переставить местами первую и последнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№7.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти сумму положительных элементов этих массивов, переставить местами первый и предпоследний столбики, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№8.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти количество элементов больше 10 в этих массивах, переставить местами вторую и последнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№9.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти среднее арифметическое всех чисел больше 5 этих массивов, переставить местами первую и последнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№10.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти количество четных элементов в массивах, переставить местами первый и последний столбики, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№11.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти количество нулевых элементов массивов, переставить местами первую и вторую строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№12.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти сумму положительных элементов в этих массивах, переставить местами второй и третий столбики, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№13.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти количество элементов меньше 1 в этих массивах, переставить местами первую и предпоследнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№14.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти сумму элементов стоящих на главной диагонали в этих массивах, переставить местами первую и последнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№15.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти произведение элементов, стоящих на главной диагонали этих массивов, переставить местами первый и предпоследний столбики, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
№16.
Написать программу: объявить два двумерных массива, заполнить эти массивы данными, вывести на экран в виде матриц, найти сумму элементов больше 10 в этих массивах, переставить местами вторую и последнюю строки, вывести новые массивы. Все действия с массивами оформить в виде процедур или функций.
Оформление отчета:
В отчете должны быть представлены:
1. Номер и название работы.
2. Цель работы.
3. Задание.
4. Для каждого задания должен быть записан текст программы.
Контрольные вопросы:
1. Как происходит передача массива в процедуру или функцию?
2. В каком случае применяется процедура, а в каком функция?
3. Где описывается новый, объявляемый пользователем тип?
4. Чем отличается обращение к процедуре от обращения к функции?