курсе объектно-ориентированногопрограммирования.
#ifndef AVERAGES_H
# define AVERAGES_H
38
// (Определения констант и пользовательских типов)
// ПРОТОТИП ФУНКЦИИ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ 3-Х ЦЕЛЫХ ЧИСЕЛ:
int average( int first_number, int second_number,
int third_number );
// ПРОТОТИП ФУНКЦИИ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ 2-Х ЦЕЛЫХ ЧИСЕЛ:
int average( int first_number, int second_number );
#endif
Заголовочный файл averages.h.
Ниже показаносодержимоефайла "averages.cpp" сисходнымтекстомполь-
зовательских функций:
#include <iostream.h>
#include "averages.h"
// ФУНКЦИЯ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ 3-Х ЦЕЛЫХ ЧИСЕЛ:
int average( int first_number, int second_number,
int third_number )
{
return ((first_number + second_number + third_number)/3);
}
// ФУНКЦИЯ ДЛЯ ВЫЧИСЛЕНИЯ ЦЕЛОЧИСЛЕННОГО СРЕДНЕГО
// ЗНАЧЕНИЯ 2-Х ЦЕЛЫХ ЧИСЕЛ:
int average( int first_number, int second_number )
{
return ((first_number + second_number)/2);
}
Файл реализации averages.cpp.
Программа 6.1 демонстрирует основное достоинство модульного подхода: при
изменении деталей реализации в файле "averages.cpp" не обязательно вносить из-
менения в файл "averages.h" или в главный файл программы.
7. Сводка результатов
В данной лекции описано, как в Си++ можно создавать новые функции. Есть
два способа передачи параметров внутрь функции: по значению и по ссылке. Функ-
ции облегчают применение процедурной абстракции при разработке программ мето-
дом "сверху вниз". При модульном подходе описание и реализация функций разме-
щаются в отдельных файлах, в таком случае для вызова функции необходимо вклю-
чать в текст программы заголовочный файл.
39
8. Упражнения
Упражнение 1
В программе из упражнения 2 лекции 2 (файл ex2_2.cpp) выделите 6 функций,
имена и назначение которых перечислены ниже:
fahrenheit_of
Возвращает значение температуры по шкале Фаренгейта для передан-
ного значения по шкале Цельсия.
absolute_value_of
Возвращает значение температуры в абсолютной шкале для передан-
ного значения по шкале Цельсия.
print_preliminary_message
Печать сообщения, поясняющего назначение программы.
input_table_specifications
Запрос параметров таблицы с клавиатуры.
print_message_echoing_input
Повторное отображение параметров, введенных пользователем.
print_table
Печать таблицы температур.
Проверьте свою программу для различных исходных данных. В качестве кон-
трольного примера можете использовать следующие выходные данные:
Эта программа печатает значения температур в разных шкалах.
Введите минимальное (целое) значение температуры
по Цельсию, которое будет в первой строке таблицы: 0
Введите максимальное значение температуры: 100
Введите разницу температур между соседними строками таблицы: 20
Преобразование значений температуры от 0 градусов Цельсия
до 100 градусов Цельсия, с шагом 20 градусов:
Цельсий Фаренгейт Абсолютная температура
0 32.00 273.15
20 68.00 293.15
40 104.00 313.15
... ... ...
... ... ...
100 212.00 485.15
Упражнение 2
Разделите программу из упражнения 1 на три файла:
1) главный файл программы;
2) заголовочный файл "conversions.h" с прототипами функций
"fahrenheit_of(...)" и "absolute_value_of(...)";
3) файл реализации с определением этих двух функций.
Снова проверьте свою программу для различных исходных данных.
40
Упражнение 3
(а) Создайте заголовочный файл "statistics.h" и соответствующий файл реализа-
ции "statistics.cpp" с функциями "average(...)" и "standard_deviation(...)".
Эти функции должны вычислять среднее значение и среднеквадратическое откло-
нение для последовательности из 1, 2, 3 или 4 вещественных чисел. Среднеквадра-
тическое отклонение чисел r1, ..., rN определяется как корень из среднего значения
квадратов отклонений чисел от своего среднего:
Σ=
= −
N
i
i r m
N 1
2 ) ( 1 σ , где Σ=
=
N
i
i r
N
m
1
1
Подсказки: (1) Примените средства перегрузки функций Си++. (2) Функции
можно вызывать изнутри друг друга. (3) Максимально используйте возможности
текстового редактора по копированию фрагментов исходного текста.
(б) Напишите тестовую программу для проверки функций из файла "statistics.h",
которая в цикле запрашивает исходные данные до тех пор, пока пользователь не
сообщит о завершении работы (некоторым специально оговоренным числом). Ва-
ша тестовая программа должна выдавать на экран сообщения, подобные приве-
денным ниже:
Эта программа предназначена для тестирования функций из
заголовочного файла "statistics.h".
Сколько чисел будет в тестовой последовательности – 1, 2, 3
или 4? (для завершения работы введите 0): 3
Введите первое число: 5
Введите второе число: 7
Введите третье число: 9
Среднее значение: 7. Среднеквадратическое отклонение: 1.63299.
Сколько чисел будет в тестовой последовательности – 1, 2, 3
или 4? (для завершения работы введите 0): 1
Введите первое число: 5.8
Среднее значение: 5.8. Среднеквадратическое отклонение: 0.
Сколько чисел будет в тестовой последовательности – 1, 2, 3
или 4? (для завершения работы введите 0): 8
Извините, но эта программа может работать только с 1, 2, 3
или 4-мя числами.
Сколько чисел будет в тестовой последовательности – 1, 2, 3
или 4? (для завершения работы введите 0): 0
Программа тестирования функций из заголовочного файла
"statistics.h" завершила работу.
Подсказки: (1) Разрабатывайте свою программу методом "сверху вниз ". Начни-
те с написания короткой главной функции, в которой вызываются функции-
заглушки, например, "test_three_values()". Детали этих функций вы уточни-
те позже, после отладки функции "main()". (2) В качестве высокоуровневой
структуры программы вы можете использовать цикл for с пустым разделом
инициализации и пустым оператором изменения значений (эквивалент цикла
while, который будет рассматриваться в следующих лекциях).
41
ЛЕКЦИЯ 4. Текстовые файлы и потоки ввода/вывода
1. Назначение файлов
Во всех рассматривавшихся до сих пор программах ввод данных производился
только с клавиатуры, а вывод –только на экран. Если в качестве устройств вво-
да/вывода ограничиться только клавиатурой и экраном, то в таком случае будет
сложно обработать большие объемы входных данных. Выходные данные, отображен-
ные на экране, после выключения компьютера безвозвратно теряются.
Для устранения подобных проблем удобно сохранять данные на запоминаю-
щих устройствах, предназначенных для долговременного хранения данных (обычно
это магнитные диски). Данные, сгенерированные с помощью одной программы, мож-
но сохранить на диске и в дальнейшем, при необходимости, извлечь и обработать в
другой программе.
На дисках данные хранятся в виде структур данных, обслуживаемых операци-
онной системой, –в виде файлов. Файл проще всего представить как линейную по-
следовательность символов. Текст этой лекции (если не учитывать специальные сим-
волы форматирования) можно сохранить в файле с именем "Lecture_4.txt" в виде
(рис. 1):
Рис. 1. Начало файла "lecture_4.txt".
2. Потоки ввода/вывода
Перед началом изучения файловых операций в Си++, необходимо ознакомить-
ся с понятием потока ввода/вывода. Поток напоминает "канал" или "трубу", через ко-
торую данные поступают от передатчика к приемнику. Исключительно важная осо-
бенность потоковой обработки данных состоит в том, что элементы данных можно
посылать или считывать из потока только по одному за раз, т.е. последовательно.
В данном курсе рассматриваются только однонаправленные потоки, в которых
данные всегда передаются в одном направлении. Из программы данные можно отпра-
вить (записать) в поток вывода, а получить (прочитать) их в программе из потока
ввода. Например, сразу после запуска программы, поток стандартного ввода "cin"
подключается к клавиатуре, а поток стандартного вывода "cout" –к экрану.
Потоки ввода/вывода, вроде "cin" и "cout", являются примерами объектов