Личные дни недели (в виде таблицы). В программе объявлен новый перечислимый
тип данных "День" и определена функция "closing_time(...)", которая должна воз-
Вращать час закрытия магазина в заданный день (пока эта функция не слишком слож-
На – для любого дня возвращает значение 17). Программа демонстрирует, как можно
использовать типы "int" и "Day" в преобразованиях типов (в заголовке цикла "for" и
при вызове функции "closing_time(...)").
#include <iostream.h>
enum Day { Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday, Sunday };
int closing_time(Day day_of_the_week);
// Главная функция
Int main()
{
int count;
// Печать заголовка таблицы
cout.width(17);
cout << "ДЕНЬ";
cout.width(19);
cout << "ВРЕМЯ ЗАКРЫТИЯ \n\n";
// Печать таблицы от понедельника (Monday) до
// воскресенья ___________(Sunday)
for (count = int(Monday); count <= int(Sunday); count++)
{
cout.width(19);
Switch (count)
{
case 0: cout << "Понедельник"; break;
case 1: cout << "Вторник"; break;
case 2: cout << "Среда"; break;
case 3: cout << "Четверг"; break;
case 4: cout << "Пятница"; break;
case 5: cout << "Суббота"; break;
|
|
case 6: cout << "Воскресенье"; break;
default: cout << "ОШИБКА!";
}
cout.width(9);
cout << closing_time(Day(count)) << ":00\n";
}
return 0;
}
// Конец главной функции
// Функция, возвращающая время закрытия магазина
// в заданный день недели
Int closing_time(Day day_of_the_week)
{
return 17;
}
62
(а) Что произойдет (и почему), если заменить оператор "switch" на строку
cout << Day(count);?
Вместо этого замените "switch" на строку
print_day(Day(count), cout);
и добавьте описание и определение функции "print_day(...)", внутри которой
разместите удаленный из главной функции оператор "switch" (поток стандарт-
ного вывода "cout" передавайте в функцию как параметр по ссылке ти-
па "ostream&").
(б) Магазин закрывается в воскресенье в 13:00, в субботу в 17:00, в среду в 20:00 и в
остальные дни в 18:00. С помощью оператора "switch" внесите соответствующие
изменения в функцию "closing_time(...)" и проверьте работу программы.
Упражнение 5
Напишите программу, которая отображает в виде таблицы количество строч-
ных английских букв (от 'a' до 'z') в собственном исходном файле "ex5_5.cpp"
(сохраните исходный текст программы именно в этом файле).
При разработке программы предположите, что у компьютера очень мало памя-
ти – используйте только одну переменную типа "ifstream", одну переменную типа
"char" и две переменных типа "int". Программа должна выдавать на экран сообще-
ния, похожие на следующие:
СИМВОЛ КОЛИЧЕСТВО ВХОЖДЕНИЙ
A 38
B 5
C 35
D 7
E 58
F 8
...
...
W 4
X 4
Y 0
Z 1
63
ЛЕКЦИЯ 6. Массивы и символьные строки
Назначение массивов
В программировании часто возникают задачи, связанные с обработкой боль-
|
|
Ших объемов данных. Для постоянного хранения этих данных удобно пользоваться
Файлами. Например, в программе для ввода и сортировки длинных числовых списков
Данные можно ввести с клавиатуры один раз и сохранить в файле для последующего
Многократного использования. Но до сих пор не было рассмотрено удобного способа
представления больших объемов данных внутри программ. Для этой цели в Си++
часто применяются массивы – простейшая разновидность структурных типов дан-
ных (о более сложных структурах данных будет говориться в следующих лекциях).
Массив – это набор переменных одного типа ("int", "char" и др.). При объявле-
нии массива компилятор выделяет для него последовательность ячеек памяти, для
Обращения к которым в программе применяется одно и то же имя. В то же время мас-
Сив позволяет получить прямой доступ к своим отдельным элементам.
Объявление массивов
Оператор описания массива имеет следующий синтаксис:
<тип данных> <имя переменной>[<целое значение>];
Допустим, в программе требуется обрабатывать данные о количестве часов, от-
Работанных в течении недели группой из 6-ти сотрудников. Для хранения этих дан-
ных можно объявить массив:
int hours[6];
или, лучше, задать численность группы с помощью специальной константы:
const int NO_OF_EMPLOYEES = 6;
int hours[NO_OF_EMPLOYEES];
Если подобные массивы будут часто встречаться в программе, то целесообраз-
но определить новый тип:
const int NO_OF_EMPLOYEES = 6;
typedef int Hours_array[NO_OF_EMPLOYEES];
Hours_array hours;
Hours_array hours_week_two;
В любом из трех перечисленных вариантов, в программе будет объявлен мас-
сив из 6 элементов типа "int", к которым можно обращаться с помощью имен:
hours[0] hours[1] hours[2] hours[3] hours[4] hours[5]
Каждое из этих имен является именем элемента массива. Числа 0,..., 5 назы-
ваются индексами элементов. Отличительная особенность массива заключается в том,
Что его элементы – однотипные переменные – занимают в памяти компьютера после-
Довательные ячейки памяти (рис. 1).
64
Рис. 1.. Расположение элементов массива в оперативной памяти (направление
Сверху вниз соответствует возрастанию адресов ячеек памяти).
Использование элементов массивов в выражениях
С элементами объявленного массива можно выполнять все действия, допусти-
Мые для обычных переменных этого типа (выше был приведен пример целочисленно-
го массива, т.е. типа "int"). Например, возможны операторы присваивания наподо-
бие:
hours[4] = 34;
hours[5] = hours[4]/2;
или логические выражения с участием элементов массива:
if (number < 4 && hours[number] >= 40) {...
Присвоить значения набору элементов массива часто бывает удобно с помо-
щью циклов "for" или "while". В программе 1.1 в цикле у оператора запрашивается
Количество часов, отработанных каждым сотрудником группы за неделю. Хотя более
Естественной может показаться нумерация сотрудников от 1 до 6, а не от 0 до 5, но
необходимо помнить, что индексация массивов в Си++ начинается с 0. Поэтому про-
Грамма 1.1 вычитает 1 из порядкового номера сотрудника, чтобы вычислить индекс
Соответствующего элемента массива.
#include <iostream.h>
const int NO_OF_EMPLOYEES = 6;
typedef int Hours_array[NO_OF_EMPLOYEES];
Int main()
{
Hours_array hours;
int count;
for (count = 1; count <= NO_OF_EMPLOYEES; count++)
{
cout << "Сколько часов отработал сотрудник";
cout << " номер " << count << "?: ";
cin >> hours[count - 1];
}
return 0;
}
Программа 1.1.
В типичном сеансе работы программа 1.1 выведет на экран подобные сообщения: