Этот шаг посвящен изложению правил использования аргументов функций.
Прежде чем приступить к работе с функцией, необходимо разобраться в следующих вопросах:
Все функции в программе, написанной на C++, равноправны: каждая из них может вызывать любую другую функцию, и в свою очередь может быть вызвана любой другой функцией. Это делает функции языка C++ несколько отличными от процедур языка Pascal, поскольку процедуры могут быть вложены в другие процедуры (причем, процедуры, содержащиеся в одном "гнезде", являются недоступными для процедур, расположенных в другом).
Специфика функции main() заключается в том, что после "сборки" программы, состоящей из нескольких функций, ее выполнение начинается обязательно с первого оператора функции main(). Приведем несколько примеров с использованием функций.
#include <iostream.h> void main () { void print(); /* --------------- */ for (int i=1; i<=15; i++) print (); } /* --------------------------------------------- */ void print () //Вызываемая функция (без параметров). { cout << "Мы устали!\n"; }
#include <iostream.h> void main () { void starbar (); /* --------- */ starbar (); cout << "г.Курган" << endl; cout << "ул.Гоголя, 25, КГУ" << endl; starbar (); } /* ------ */ void starbar () { for (int count=1; count<46; count++) cout << "*"; cout << endl; }
Результат работы программы:
********************************************* г.Курган ул.Гоголя, 25, КГУ *********************************************
Комментарий к примеру. При рассмотрении этой программы необходимо обратить внимание на следующие моменты.
#include <iostream.h> void main() { int x=2,y=45,z=0; char q='o'; void zero(int); //Прототипы используемых функций. void ch(char); /* ------------------------------------------------ */ cout << "x= "; zero (x); //Вызов функции zero c аргументом x. cout << "x+y+(x+y)^z = "; zero (x+y+(x+y)^z); //Вызов функции zero c аргументом // x+y+(x+y)^z. cout << "q = "; ch (q); //Вызов функции ch c аргументом q. } /* --------------------------------------------------------- */ void zero (int u) //Тип, имя функции, описание аргумента. { cout << u << endl; } /* --------------------------------------------------------- */ void ch (char u) //Тип, имя функции, описание аргумента. { cout << u << endl; }
Результат работы программы:
x = 2 x+y+(x+y)^z = 94 q = o
Комментарий к примеру. Определение функции zero() начинается со строки:
void zero (int u) //Тип, имя функции, описание аргумента.
Эта строка информирует компилятор о том, что у функции zero() имеется аргумент u целого типа. Переменная u называется формальным параметром. Фактически это новая переменная, и в памяти компьютера для нее должна быть выделена отдельная ячейка.
При вызове функции zero(x) мы присваиваем формальному параметру u значение фактического параметра x.
Короче говоря, формальный параметр - это переменная в вызываемой функции, а фактический параметр - конкретное значение, присвоенное этой переменной вызывающей функцией. Фактический параметр может быть константой, переменной или выражением. Независимо от типа фактического параметра он вначале вычисляется, а затем его величина (в данном случае целое число) передается функции.
В данном примере x, x+y+(x+y)^z, q являются фактическими параметрами, а u - формальным. Необходимо напомнить, что хотя аргументы в функциях zero() и ch() имеют одно и то же название, они различны.
Если некоторая функция имеет более одного аргумента, то роль разделителя в списке аргументов исполняет запятая. Например:
void printnum (int i,int j) { ... }
При вызове функции из основной программы и при ее описании в скобках должно содержаться одинаковое количество аргументов.
#include <iostream.h> void main() { void zero(int,int,int); /* ----------------------------------------------- */ cout << "Следующие величины могут быть сторонами\n"; cout << "прямоугольного треугольника:\n"; for (int x=1; x<=20; x++) for (int y=1; y<=20; y++) for (int z=1; z<=20; z++) if (y*y+z*z==x*x) zero (x,y,z); } /* ------------ */ void zero (int f,int g,int h) { cout << "x = " << f << ", y = " << g << ", z = " << h << endl; }
Результат работы программы:
Следующие величины могут быть сторонами прямоугольного треугольника: x = 5, y = 3, z = 4 x = 5, y = 4, z = 3 x = 10, y = 6, z = 8 x = 10, y = 8, z = 6 x = 13, y = 5, z = 12 x = 13, y = 12, z = 5 x = 15, y = 9, z = 12 x = 15, y = 12, z = 9 x = 17, y = 8, z = 15 x = 17, y = 15, z = 8 x = 20, y = 12, z = 16 x = 20, y = 16, z = 12
********************************************* г.Курган ул.Гоголя, 25, КГУ *********************************************
Воспользуйтесь функцией для печати нужного количества пробелов.
Решение и комментарии вы можете посмотреть
здесь.
На следующем шаге мы приведем несколько примеров, иллюстрирующих
применение функций.