Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Базовый курс. Ч.3. Основы алгоритмизации и про- граммирования в среде Visual C++ 2005.pdf
Скачиваний:
53
Добавлен:
05.02.2023
Размер:
3.81 Mб
Скачать

70

Рис. 8.22. Результат работы программы примера 9.4

9.4. Функция типа void и глобальные переменные

Но как быть, когда нам потребуется вызвать функцию, которая должна получить нам несколько значений в результате. В Паскале мы организовывали так называемыепроцедуры. Здесь для этого проще всего использовать так называемые функции типаvoid. Такие функции не содержат оператора return и поэтому как бы ничего не передают наружу. Однако в С++ существует понятие глобальной переменной, т.е. такой переменной, которая доступна в любой функции данной программы. Если, таким образом, обратится к функции типа void просто по имени (без использования присваивания) и внутри нее пересчитать глобальные переменные, то после этого в основной программе значения глобальных переменных изменятся. Напомним, что глобальные переменные описываются до открытия главной функции main().

Замечание. Более строго ограничение на возврат из функции только одного значения можно обойти с помощьюуказателей, но работа с ними будет рассмотрена нами в разделе 12.2 данного пособия.

Пример 9.5. Даны три тройки чисел: a1, b1, c1; a2, b2, c2; a3, b3, c3. Найти в каждой из них наибольшее и наименьшее, затем наибольшее и наименьшее среди наибольших и отдельно– среди наименьших. (Здесь и организуем функцию, в которой получим «на выходе» два значения – максимум и минимум для заданной тройки чисел.)

#include <iostream> #include <iomanip> #include <windows.h>

71

using namespace std;

void maxmin(double x,double y,double z);

double mx, mn;// глобальные переменные (из maxmin) int main()

{double max1,min1,max2,min2,max3,min3,mxmax,mnmax, mxmin, mnmin, a1,b1,c1, a2,b2,c2, a3,b3,c3;

char str[256], str1[256], str2[256]; AnsiToOem("\n введи a1,b1,c1 ", str); cout<<str; cin>>a1>>b1>>c1; AnsiToOem("\n введи a2,b2,c2 ", str1); cout<<str1; cin>>a2>>b2>>c2; AnsiToOem("\n введи a3,b3,c3 ", str2); cout<<str2; cin>>a3>>b3>>c3; maxmin(a1,b1,c1); max1=mx; min1=mn;

cout<<"\n max1,min1"<<setw(5)<<max1<<setw(5) <<min1; maxmin(a2,b2,c2); max2=mx; min2=mn;

cout<<"\n max2,min2"<<setw(5)<<max2<<setw(5) <<min2; maxmin(a3,b3,c3); max3=mx; min3=mn;

cout<<"\n max3,min3"<<setw(5)<<max3<<setw(5) <<min3; maxmin(max1,max2,max3); mxmax=mx; mnmax=mn; cout<<"\n maxmax,minmax "<<setw(5)<<mxmax<<setw(5) <<mnmax; maxmin(min1,min2,min3); mxmin=mx; mnmin=mn; cout<<"\n maxmin,minmin "<<setw(5)<<mxmin<<setw(5) <<mnmin; cout<<"\n";

return (0);}

void maxmin(double x,double y,double z)

{if ((x>y)&&(x>z)) mx=x; if ((y>x)&&(y>z)) mx=y; if ((z>x)&&(z>y)) mx=z;if ((x<y)&&(x<z)) mn=x; if ((y<x)&&(y<z)) mn=y;if ((z<x)&&(z<y)) mn=z;

}

В результате, например, получим (рис. 8.23):

Рис. 8.23. Результат работы примера 9.5