Приведенная ниже программа должна печатать время закрытия магазина в раз-

Личные дни недели (в виде таблицы). В программе объявлен новый перечислимый

тип данных "День" и определена функция "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 выведет на экран подобные сообщения:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: