- •ГЛАВА 7. ОСНОВЫ АЛГОРИТМИЗАЦИИ
- •1. ПОНЯТИЕ ОБ АЛГОРИТМЕ
- •2. ОСНОВНЫЕ СТРУКТУРЫ
- •2.1. Структура «следование»
- •2.2. Структура «развилка»
- •2.3. Структура «цикл»
- •3. ОСНОВНЫЕ ТИПЫ АЛГОРИТМОВ
- •3.1. Линейный алгоритм
- •3.2. Разветвленный алгоритм
- •3.3. Циклический алгоритм
- •Практические задания
- •1. Алгоритмы линейной структуры
- •2. Алгоритмы разветвляющейся структуры
- •3. Алгоритмы циклической структуры (цикл «ПОКА»)
- •4. Алгоритмы циклической структуры (цикл «ДО»)
- •ГЛАВА 8. ОСНОВЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ VISUAL С++ 2005
- •ВВЕДЕНИЕ
- •1. РАЗРАБОТКА ПРОГРАММЫ
- •2. ПЕРЕМЕННЫЕ
- •3. ЛИНЕЙНАЯ ПРОГРАММА
- •3.1. Оформление линейной программы
- •3.2. Программирование в стандартизованной среде CLR
- •Практические задания
- •Русская система мер
- •4. ПРОГРАММА С ВЕТВЛЕНИЕМ
- •Практические задания
- •5. ЦИКЛ С ПАРАМЕТРОМ
- •6. ЦИКЛ «ПОКА»
- •Практические задания
- •7. ОДНОМЕРНЫЕ МАССИВЫ
- •7.1. Понятие об одномерном массиве
- •7.2. Сортировка в одномерном массиве
- •Практические задания
- •8. ДВУМЕРНЫЕ МАССИВЫ
- •8.1. Понятие о двумерном массиве
- •8.2. Датчик случайных чисел
- •Практические задания
- •9. ФУНКЦИИ
- •9.1. Понятие о пользовательских функциях
- •Рис. 8.20. Пятиугольник со сторонами a, b, c, d, f и диагоналями h,g.
- •9.2. Рекурсия
- •9.3. Вызов функции из функции
- •9.4. Функция типа void и глобальные переменные
- •9.5. Передача в функцию имени функции
- •Практические задания
- •10. СОБСТВЕННАЯ БИБЛИОТЕКА ПРОГРАММИСТА
- •10.1. Перегрузка функций
- •Рис. 8.25. Результат работы программы примера
- •11. ПЕРЕЧИСЛИМЫЙ ТИП
- •11.1. Понятие о перечислимом типе
- •11.2. Множественный выбор
- •12. УКАЗАТЕЛИ
- •12.1. Понятие об указателях
- •12.2. Указатели и функции
- •12.3. Указатели и динамические массивы
- •12.4. Указатели и перегрузка операций
- •13. ОБРАБОТКА СИМВОЛЬНЫХ СТРОК
- •13.1. Символьные переменные
- •13.2. Символьные строки (как массивы символов)
- •13.3. Обработка массивов строк
- •Практические задания
- •14. СТРУКТУРЫ
- •Практические задания
- •15. КЛАССЫ
- •15.1. Понятие класса
- •15.2. Открытые и закрытые члены класса
- •15.3. Конструкторы и деструкторы
- •Практические задания
- •Раздел А
- •Раздел Б
- •16. ФАЙЛЫ
- •16.1. Работа с текстовыми файлами
- •16.2. Работа со структурами в файлах
- •16.3. Работа с классами в файлах
- •Практические задания
- •Раздел А
- •Раздел Б
- •ПРИЛОЖЕНИЯ
- •Приложение 1. Список библиотечных функций
- •Математические функции
- •Строковые функции (для работы с символьными массивами)
- •Приложение 2. План лабораторных работ
- •ГЛАВА 9. ПРИЛОЖЕНИЯ WINDOWS FORMS
- •ВВЕДЕНИЕ
- •1. РАЗРАБОТКА ПРИЛОЖЕНИЯ
- •3. ДИНАМИЧЕСКИЕ ССЫЛКИ НА ОБЪЕКТЫ
- •3.1 Понятие о динамических ссылках.
- •3.2. Программа «Калькулятор»
- •4. ИСПОЛЬЗОВАНИЕ ТАЙМЕРА. КОМПОНЕНТ CHECKBOX
- •4.1 Таймер
- •4.2. Компонент CheckBox
- •5. СПИСКИ ВЫБОРА И ПОЛОСЫ ПРОКРУТКИ. ГРАФИЧЕСКИЕ КОМПОНЕНТЫ В C++Builder
- •5.1. Список выбора ListBox
- •5.2. Полосы прокрутки
- •5.3. Графика
- •6. РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ.
- •6.1. Чтение и запись текстового файла
- •ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
- •Раздел 1. Кнопки, метки и окна редактирования
- •Раздел 2. Радиокнопки
- •Раздел 3. Полосы прокрутки
- •Раздел 4. Обработка текстовых файлов
- •ЛИТЕРАТУРА
- •ТЕСТЫ
- •Тесты по основам алгоритмизации
- •Тесты по программированию на С++
- •Учебное издание
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