Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
40
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

Программа 41. Время как структура

// Файл StrcTime.cpp

#include <iostream.h>

struct Time{ // Время суток

unsigned int h, m; // Часы, минуты

void Set(int hh, int mm) // Установка времени

{h = hh; m = mm;}

void AddHour(int n); // Добавить n часов

void AddMin(int n); // Добавить n минут

void Print(); // Печать времени

};

В состав структуры Time кроме данных h и m, предназначенных для хранения часов и минут, включены функции: Set, AddHour, AddMin и Print. Функции, объявленные внутри структуры, называются функциями-членами или методами. Данные, хранящиеся в структуре, иногда называют свойствами.

Функция Set определена непосредственно внутри структуры, то есть, написан блок с телом функции, остальные функции в структуре лишь объявлены, так как дан только их заголовок.

Функции, объявленные в структуре, следует где-то определить. При определении функции-члена структуры следует указывать имя структуры, разделяя имя структуры и имя функции оператором разрешения области видимости (::):

// Продолжение файла StrcTime.cpp

void Time::AddHour(int n) // Добавить n часов

{

h = (h + n) % 24;

}

Внутри функции-члена обращаться к другим членам структуры можно непосредственно по их именам, то есть можно не писать:

Time::h = (Time::h + n) % 24;

хотя это и допустимо.

void Time::AddMin(int n) // Добавить n минут

{

h = (h + (m + n) / 60) % 24;

m = (m + n) % 60;

}

void Time::Print() // Печать времени

{

if(h < 10) cout << '0' << h << ':';

else cout << h << ':';

if(m < 10) cout << '0' << m << ' ';

else cout << m << ' ';

}

В функции печати времени предусмотрен вывод числа часов и минут с ведущим нулем.

В главной функции вводится время начала занятий в вузе, а затем выводятся время конца пары и время начала следующей.

#include <conio.h>

void main()

{

Time Pair; // Время начала или конца очередной пары

int Phour; // Длительность пары в часах

int Pmin; // Длительность пары в минутах

int interval; // Длительность перерыва в минутах

int hh, mm;

int n; // Количество пар

cout << "Введите время начала первой пары: ";

cin >> hh >> mm;

Pair.Set(hh, mm); // Установка времени в структуре Pair

cout << "Введите длительность пары в часах и минутах: ";

cin >> Phour >> Pmin;

cout << "Введите длительность перерыва в минутах: ";

cin >> interval;

cout << "Введите количество пар: ";

cin>> n;

cout << "Начало Конец" << endl; // Заголовок таблицы

for(int i = 0; i < n; i++){

Pair.Print(); // Печать времени начала пары

Pair.AddHour(Phour); Pair.AddMin(Pmin); //Расчет конца пары

Pair.Print(); cout << endl; // Печать времени конца пары

Pair.AddMin(interval); // Расчет начала следующей пары

}

getch();

}

Вызов функции-члена структуры производится так же, как доступ к обычному члену структуры с помощью оператора точка (.).

Программа выводит:

Введите время начала первой пары: 8 0

Введите длительность пары в часах и минутах: 1 30

Введите длительность перерыва в минутах: 10

Введите количество пар: 6

Начало Конец

08:00 09:30

09:40 11:10

11:20 12:50

13:00 14:30

14:40 16:10

16:20 17:50