Лаб.раб. Министерство образования и науки российской федерации пензенский государственный
Скачать 0.8 Mb.
|
Лабораторнаяработа№7Тема: "Подпрограммы. Функции" Цель работы: изучение правил составления и использования функций в программах на С++. Краткие теоретические сведения. В практике программирования часто складываются ситуации, когда одну и ту же группу операторов, реализующих определённую цель, требуется повторить без изменений в нескольких местах программы. Для избавления от столь нерациональной траты времени была предложена концепция подпрограммы. Подпрограмма — именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. В языке C++ подпрограммы реализованы в виде функций. Функция — это поименованный набор описаний и операторов, выполняющих определённую задачу. Функция может принимать параметры и возвращать значение. Информация, передаваемая в функцию для обработки, называется параметром, а результат вычисления функции её значением. Обращение к функции называют вызовом. Описание функции состоит из заголовка и тела функции: тип имя_функции(список_переменных) { тело_функции } Заголовок функции содержит: тип возвращаемого функцией значения, он может быть любым; если функция не возвращает значения, указывают тип void; имя_функции; список_переменных — перечень передаваемых в функцию величин (аргументов), которые отделяются друг от друга запятыми; для каждой переменной из списка указывается тип и имя; если функция не имеет аргументов, то в скобках указывают либо тип void, либо ничего. Тело функции представляет собой последовательность описаний и операторов, заключённых в фигурные скобки. В общем виде структура программы на C++ может иметь вид: директивы компилятора тип имя_1(список_переменных) { тело_функции_1; } тип имя_2(список_переменных) { тело_функции_2; } ... тип имя_n(список_переменных) { тело_функции_n; } int main (список_переменных) { //Тело функции может содержать операторы вызова //функций имя_1, имя_2, ..., имя_n тело_основной_функции; } Однако допустима и другая форма записи программного кода : директивы компилятора тип имя_1(список_переменных); тип имя_2(список_переменных); ... тип имя_n(список_переменных); int main (список_переменных) { //Тело функции может содержать операторы вызова // функций имя_1, имя_2, ..., имя_n тело_основной_функции; } тип имя_1(список_переменных) { тело_функции_1; } тип имя_2(список_переменных) { тело_функции_2; } ... тип имя_n(список_переменных) { тело_функции_n; } Здесь функции описаны после функции main(), однако до неё перечислены заголовки всех функций. Такого рода опережающие заголовки называют прототипами функций. Прототип указывает компилятору тип данных, возвращаемых функцией, тип переменных, выступающих в роли аргументов, и порядок их следования. Прототипы используются для проверки правильности вызова функций в основной программе. Вызвать функцию можно в любом месте программы. Для вызова функции необходимо указать её имя и в круглых скобках, через запятую перечислить имена или значения аргументов, если таковые имеются: имя_функции(список_переменных); Рассмотрим пример. Создадим функцию f(), которая не имеет входных значений и не формирует результат. При вызове этой функции на экран выводится строка символов "С Новым Годом, ". #include void f ( ) //Описание функции. { cout << "С Новым Годом, "; } int main ( ) { f ( ); //Вызов функции. cout <<"Студент!" << endl; f ( ); //Вызов функции. cout <<"Преподаватель!" << endl; f ( ); //Вызов функции. cout <<"Народ!" << endl; } Результатом работы программы будут три строки: С Новым Годом, Студент! С Новым Годом, Преподаватель! С Новым Годом, Народ! Далее приведён пример программы, которая вычисляет значение выражения sin2(α)+cos2(α) при заданном значении α. Здесь функция radian выполняет перевод градусной меры угла в радианную1. #include double radian ( int deg, int min, int sec ) { return ( deg * PI/180+min* PI /180/60+ sec * PI /180/60/60); } int main ( ) { int DEG, MIN, SEC; double RAD; //Ввод данных. cout<<" Input :"< //Величина угла в радианах. RAD=radian (DEG, MIN, SEC); //Вызов функции. cout << " Value in radian A="< //Вычисление значения выражения и его вывод. cout << " sin (A) ^2+ cos (A) ^2= "; cout << pow( sin (RAD), 2 )+pow( cos (RAD), 2 ) << endl; return 0; } Переменные, описанные внутри функции, а также переменные из списка аргументов, являются локальными. Например, если программа содержит пять разных функций, в каждой из которых описана переменная N, то для C++ это пять различных переменных. Область действия локальной переменной не выходит за рамки функции. Значения локальных переменных между вызовами одной и той же функции не сохраняются. Переменные, определённые до объявления всех функций и доступные всем функциям, называют глобальными. В функции глобальную переменную можно отличить, если не описана локальная переменная с теми же именем. Глобальные переменные применяют для передачи данных между функциями, но это затрудняет отладку программы. Для обмена данными между функциями используют параметры функций и значения, возвращаемые функциями. Пример выполнения задания. Задание. Найти максимальную сумму элементов строк матрицы 3×5 с использованием функций. Схемы программ функций ввода-вывода и обработки данных представлены на рисунках 25 и 26. Схема главной функции main представлена на рисунке 27: Inparr (а[m][n]) outarr (а[m][n]) Рисунок 25 – Функции ввода и вывода массива данных processarr (a[m][n]) Рисунок 26 – Функция обработки массива данных Рисунок 27 – Главная функция программы main Пример программы: #include //функция ввода void inparr(int a[m][n]) { int i,j; for (i=0;i scanf("%d",&a[i][j]); } //функция вывода void outarr (int a[m][n]) { int i,j; printf("Matrica:\n"); for (i=0; i { for (j=0; j } } int processarr(int a[m][n]) { int i,j,s,max; for(i=0;i { s=0; for (j=0;j if (i==0) max=s; else if (max } return max; } void main() { int b[m][n]; inparr(b); outarr(b); printf("Maximalnaya summa stroki = %d", processarr(b)); } Контрольные вопросы Структура функции в языке С++, ее заголовок. Вызов функции. Способы передачи параметров. Оператор return (2 формы записи). Описание функции (прототип). Варианты заданий См. задание к лабораторной работе № 5. |