Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

3.1.3Пример создания процедуры

Для примера создадим процедуру, приветствующую пользователя на трех разных языках. Начнем с псевдокода этой процедуры.

Процедура ВывестиПриветствие

Начало

Вывести приветствие по-русски;

Вывести приветствие по-английски;

Вывести приветствие по-французски;

Конец.

Переведем этот псевдокод на язык C++:

void say_hello() {

cout << "Hello!" << endl;

cout << "Bonjour!" << endl;

cout << "Привет!" << endl;

}

В данном примере say_hello – это название процедуры, void – это указание того, что say_hello является процедурой; точнее, void – это пустой тип, значит, подпрограмма say_hello не возвращает никакого значения. В последующих темах рассматриваются функции, которые возвращают какие-либо значения. При их создании вместо типа void указывается тип возвращаемого значения, например, int, float, double, string и пр.

Открывающая и закрывающая фигурные скобки означают слова Начало и Конец соответственно. Тело процедуры расположено между фигурными скобками и печатается с отступом. Пустые круглые скобки после названия процедуры указывают на отсутствие аргументов. Если процедура или функция принимает аргументы, то они перечисляются в этих скобках. Если аргументов нет, то скобки все равно ставятся.

3.1.4Пример вызова процедуры

Создание процедуры без вызова не приводит к каким-либо действиям. Единственное, что может произойти, – это сообщение об ошибке компиляции, если процедура имеет синтаксические ошибки. Чтобы процедура выполнила действия, ее требуется вызвать. Рассмотрим пример создания и вызова процедуры.

#include <iostream>

using namespace std;

//Создание (определение) процедуры

void say_hello() {

cout << "Hello!" << endl;

cout << "Bonjour!" << endl;

cout << "Привет!" << endl;

}

int main() {

say_hello(); //Вызов функции

say_hello(); //Вызов функции

system("pause");

return 0;

}

Разберем эту программу. В данном случае процедура say_hello() выводит три приветствия, выполняя группу из трех команд

cout << "Hello!" << endl;

cout << "Bonjour!" << endl;

cout << "Привет!" << endl;

После этого внутри функции main() созданная процедура вызывается два раза. Значит, эта программа выполнит те же действия, что и следующая программа.

int main() {

cout << "Hello!" << endl;

cout << "Bonjour!" << endl;

cout << "Привет!" << endl;

cout << "Hello!" << endl;

cout << "Bonjour!" << endl;

cout << "Привет!" << endl;

system("pause");

return 0;

}

3.1.5Распространенная ошибка

Определять процедуры локально (внутри других функций и процедур) нельзя! Вызывать можно, но определять – нет. Например, следующая программа ошибочна, поскольку функция say_hello() определяется внутри функции main().

int main() {

//Локальное определение недопустимо!

void say_hello() {

cout << "Hello!" << endl;

cout << "Bonjour!" << endl;

cout << "Привет!" << endl;

}

}

3.1.6Процедуры с аргументами

Рассмотренная процедура say_hello() работает всегда одинаково, другими словами, сколько бы раз она ни вызывалась, результат всегда один: приветствие на трех языках. Для управления процессом исполнения процедур и функций можно использовать аргументы. Аргументы – это параметры, которые передаются в функцию при вызове и доступны внутри нее.

Создадим три процедуры, первая из которых выводит на экран три звездочки, вторая – пять, а третья – семь.

void drawThreeStars() {

for (int i=1; i<=3; i++) {

cout << "*";

}

}

void drawFiveStars() {

for (int i=1; i<=5; i++) {

cout << "*";

}

}

void drawFiveStars() {

for (int i=1; i<=7; i++) {

cout << "*";

}

}

Все три процедуры одинаковы за исключением одного параметра внутри цикла. Получается, что из-за одного параметра приходится создавать новые процедуры. Кроме того, при таком подходе возникают сложности с изменением числа выводимых звездочек. Данную проблему можно решить, используя аргументы. Создадим процедуру, которая принимает аргумент и выводит на экран ряд звездочек, количество которых определяется этим аргументом. Для этого необходимо придумать имя этому аргументу и указать его вместе с типом в скобках после названия функции. Очевидно, что количество звездочек должно иметь целый тип.

void drawStars(int n) {

for (int i=1; i<=n; i++) {

cout << "*";

}

}

Наконец, создадим программу целиком.

#include <iostream>

using namespace std;

void drawStars(int n) {

for (int i=1; i<=n; i++) {

cout << "*";

}

cout << endl;

}

int main() {

drawStars(10); //Вывод 10 звездочек

drawStars(2); //Вывод 2 звездочек

int x=7;

drawStars(x); //Вывод x звездочек

drawStars(2*x+5); //Вывод 2*x+5 звездочек

system("pause");

return 0;

}

В качестве фактического аргумента в процедуру можно передать число, переменную или выражение типа int.