
6. Процедуры и функции
Подготовка к работе
1. По указанной литературе изучить:
-
правила описания функций и обращения к ним,
-
правила описания процедур и обращения к ним,
-
способы передачи параметров в процедуру и функцию.
2. Разработать алгоритмы решения в соответствии с заданием.
3. Составить программы решения задач.
Контрольные вопросы
-
Что такое подпрограмма? Какие виды подпрограмм бывают?
-
Каковы преимущества использования подпрограмм?
-
Что такое функция? Ее назначение.
-
Что такое процедура? Ее назначение.
-
В чем отличие между функциями и процедурами? Каким критерием пользуются при выборе способа оформления подпрограммы?
-
Правила описания функции. Форма вызова функции.
-
Правила описания процедур. Форма вызова процедуры.
-
Что такое формальные и фактические параметры?
-
Какие правила надо соблюдать при работе с аргументами и параметрами?
-
В чем отличие входных параметров от выходных параметров?
-
Какие переменные в программах являются глобальными, а какие – локальными?
-
Если в программе и в процедуре описана одна и та же переменная, то, какое из этих описаний имеет силу в процедуре?
-
Объяснить на примере, как можно многократно использовать функцию или процедуру в другой программе?
Задание и порядок выполнения работы
-
Задача1. Составить алгоритм, написать программу, использующую подпрограмму-функцию. Проект консольное приложение, варианты решения задач, заданы в таблице 6.1.
Cохранить проект в папке на диске D:\Temp\ …\ Inf\Р6\P6_1 под именем Fun в папке P6_1.
Таблица 6.1
№ |
Функция |
a |
b |
Задание: Написать подпрограмму-функцию, которая вычисляет |
1 |
|
3 |
5 |
значение xy/x = exp(y/xln(x)) |
2 |
|
2 |
4 |
значение tan(x,z)=sin(x+z)/cos(x+z) |
3 |
|
5 |
2 |
значение log10 (y,t)=ln(y+t2)/ln(10) |
4 |
|
5 |
5 |
значение y-z = exp(-zln(y)) |
5 |
|
3 |
- |
значение log2 (b,y)= ln(b+y)/ln(2) |
6 |
|
0,5 |
0,2 |
значение Сtan(y,с)=cos(y2+c)/sin(y2+c) |
7 |
t=g(1.2b, -a)+g(b, a)-g(2a-1, 3b) |
-1 |
10 |
значение g(x,y)=(x2 +y2) |
8 |
|
2 |
5 |
значение zn= exp(nln(z)) |
9 |
|
-0,5 |
15 |
значение tan(z,y)=sin(z+y)2/cos(z+y)2 |
10 |
|
-0,5 |
2 |
u(x,y)= (x2 +y2 )/2xy |
11 |
|
4 |
2 |
значение Сtan(x)=cos2(x)/sin2(x) |
12 |
|
- |
3 |
значение ya/y= exp(a/yln(y)) |
-
Задачи2-3. Составить алгоритмы, написать программы, использующие подпрограмму -процедуру. Проекты консольное приложение, варианты решения задач, заданы в таблице 6.2. Выполнить задачи по вариантам N и N+1.
-
Сохранить проекты в папке на диске D:\Temp\ …\ Р6\P6_2(3) под именем Prc1(2) в папке P6_2.
Таблица7.2
-
№
Задание: Написать процедуру, которая
1
в
ычерчивает на экране параллелограмм заданными символами.
2
вычисляет объем и площадь поверхности параллелепипеда. Сторона основания и высота фигуры задается произвольно.
3
в
ычерчивает на экране ромб заданными символами.
4
вычисляет объем и площадь поверхности цилиндра. Радиус и высота цилиндра задается произвольно.
5
в
ычерчивает на экране параллелограмм заданными символами.
6
вычисляет объем и площадь поверхности пирамиды, в основании которой лежит равносторонний треугольник. Сторона основания треугольника и высота фигуры задается произвольно.
7
в
ычерчивает на экране равносторонний треугольник заданными символами.
8
вычисляет объем и площадь поверхности конуса. Радиус и высота конуса задаются произвольно.
9
в
ычерчивает на экране прямоугольный треугольник заданными символами.
10
вычисляет объем и площадь поверхности 4-угольной пирамиды. Стороны основания и высота пирамиды задаются произвольно.
11
в
ычерчивает на экране равносторонний треугольник заданными символами.
12
вычисляет объем и площадь поверхности пирамиды, в основании которой лежит прямоугольный треугольник. Стороны основания и высота пирамиды задаются произвольно.
-
Cкопировать созданные проекты – папки P6_1 – Р6_2 , Р6_3 с их содержимым на свою flash-память.
-
Завершить работу и подготовить отчет. В отчете для каждого задание (п.п.1, 2) отразить: условие, алгоритм решения, программу, полученные результаты.
На защите уметь составлять программы по любому варианту заданий, приведенных в таб. 1,2.
Методические указания по выполнению задания
Задача
1 Дано действительное y .
Получить t=
, где
class
Program { static
double F(double x) // Объявление
функции F
{ return
x+Math.Pow(x,2)/2+Math.Pow(x,3)/6;
} static
void Main(string[] args) { double
y,z,t; Console.WriteLine("Введите
y "); y
= Convert.ToDouble(Console.ReadLine()); z=6-F(Math.Pow(y,2)-1); if
(z!= 0) { t
= (1.7 * F(0.75) + 2 * F(1 + y)) / z; Console.WriteLine("t={0,5:f}",t); } else
Console.WriteLine("На нуль делить нельзя"); Console.WriteLine(); Console.ReadLine(); } }
Рис.
6.1. Блок-схема алгоритма Задачи1
Задача
2. Написать
процедуру, которая вычисляет объем и
площадь поверхности куба.
class
Program {
static
void Kub(out double S, out double V, int x)
{ S=(double)6*Math.Pow(x,2); V=(double)Math.Pow(x,3); } static
void Main(string[] args) { double
s,v; int a; // сторона куба Console.WriteLine("Площадь
и объем
поверхности
куба"); Console.WriteLine(); Console.WriteLine("Введите
а "); a
= Convert.ToInt32(Console.ReadLine()); Console.WriteLine(); if
(a>0) { Kub(out
s, out v, a); // Вызов процедуры
Console.WriteLine("s={0,5:f}
v={1,5:f}", s,v); } else
Console.WriteLine("а должно быть >
0"); Console.ReadLine(); } }
Рис. 6.2. Блок-схема алгоритма Задачи2
Задача
3. Вывести на экран рамку из символов
'
* ',
высота которой
k
строк, ширина m
позиций с использованием процедуры
Print(s,n),
обращаясь к которой выводятся n
раз символы s.
static
void Print(char s, int n) // Процедура
“Печать”
{ for
(int i = 0; i < n; i++) Console.Write(s);
// Вывод строки с символами s
} static
void Main(string[] args) { int
m, k=0;
Console.WriteLine("Рамка"); Console.WriteLine();
Console.WriteLine("Введите
число столбцов
m "); m
= Convert.ToInt32(Console.ReadLine()); Console.WriteLine();
// ширина рамки
Console.WriteLine("Введите
число строк
k "); k
= Convert.ToInt32(Console.ReadLine()); Console.WriteLine();
// высота рамки Print('*',
m); // вывод верхней
стороны рамки
'*'
Console.WriteLine(); for
(int j = 0; j
< k; j++)
{
// рисуем слева на право в
цикле Print('*',1);
// вывод левой границы '*'
Print('
',m-2); // заполнение середины пробелами
' '
Print('*',1);
// вывод правой границы '*' Console.WriteLine();
//переход к новой строке
} Print('*',
m); // вывод нижней стороны рамки '*'
Console.ReadLine(); } }
Рис. 6.3. Блок-схема алгоритма Задачи3
Процедура и функция – два способа оформления подпрограммы. Одну и ту же подпрограмму можно оформить как процедуру или как функцию.
Функция возвращает одно значение, процедура – ни одного или несколько.
Процедура вызывается по имени в строке кода программы.
Функция вызывается по имени в выражениях.
Правило оформления подпрограммы: если подпрограмма должна изменить значение только одной переменной основной программы, то ее следует оформить как функцию, в остальных случаях подпрограмму следует оформить как процедуру.