до 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(...)";
Файл реализации с определением этих двух функций.
Снова проверьте свою программу для различных исходных данных.
40
Упражнение 3
(а) Создайте заголовочный файл "statistics.h" и соответствующий файл реализа-
ции "statistics.cpp" с функциями "average(...)" и "standard_deviation(...)".
Эти функции должны вычислять среднее значение и среднеквадратическое откло-
Нение для последовательности из 1, 2, 3 или 4 вещественных чисел. Среднеквадра-
тическое отклонение чисел r 1,..., r N определяется как корень из среднего значения
квадратов отклонений чисел от своего среднего:
Σ=
= −
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. Текстовые файлы и потоки ввода/вывода
Назначение файлов
Во всех рассматривавшихся до сих пор программах ввод данных производился
Только с клавиатуры, а вывод – только на экран. Если в качестве устройств вво-
Да/вывода ограничиться только клавиатурой и экраном, то в таком случае будет
Сложно обработать большие объемы входных данных. Выходные данные, отображен-
Ные на экране, после выключения компьютера безвозвратно теряются.
Для устранения подобных проблем удобно сохранять данные на запоминаю-
Щих устройствах, предназначенных для долговременного хранения данных (обычно
Это магнитные диски). Данные, сгенерированные с помощью одной программы, мож-
Но сохранить на диске и в дальнейшем, при необходимости, извлечь и обработать в
Другой программе.
На дисках данные хранятся в виде структур данных, обслуживаемых операци-
онной системой, – в виде файлов. Файл проще всего представить как линейную по-
Следовательность символов. Текст этой лекции (если не учитывать специальные сим-
волы форматирования) можно сохранить в файле с именем "Lecture_4.txt" в виде
(рис. 1):
Рис. 1. Начало файла "lecture_4.txt".
Потоки ввода/вывода
Перед началом изучения файловых операций в Си++, необходимо ознакомить-
ся с понятием потока ввода/вывода. Поток напоминает "канал" или "трубу", через ко-
Торую данные поступают от передатчика к приемнику. Исключительно важная осо-
Бенность потоковой обработки данных состоит в том, что элементы данных можно
посылать или считывать из потока только по одному за раз, т.е. последовательно.
В данном курсе рассматриваются только однонаправленные потоки, в которых
Данные всегда передаются в одном направлении. Из программы данные можно отпра-
вить (записать) в поток вывода, а получить (прочитать) их в программе из потока
ввода. Например, сразу после запуска программы, поток стандартного ввода "cin"
подключается к клавиатуре, а поток стандартного вывода "cout" – к экрану.
Потоки ввода/вывода, вроде "cin" и "cout", являются примерами объектов
класса "поток". Поэтому изучение потоков полезно и по той причине, что позволяет
Ознакомиться с элементами синтаксиса и некоторыми объектно-ориентированными
понятиями Си++.
Список функций для работы с файловыми потоками хранится в заголовочном
файле "fstream.h". Поэтому во всех рассматриваемых ниже фрагментах программ
предполагается, что в начале программы есть соответствующая директива "#include":
#include<fstream.h>
Создание потоков
В программе перед первым обращением к потоку ввода или вывода необходи-
мо "создать" поток. Операторы для создания потоков похожи на описания перемен-
42
Ных, и они обычно размещаются в начале программы или функции рядом с описа-