Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ООП - Лабораторна робота №1 - Структури

.doc
Скачиваний:
43
Добавлен:
25.03.2015
Размер:
116.22 Кб
Скачать

ООП - Лабораторна робота №1 Структури

Лабораторна робота №1

СТРУКТУРИ

Мета: вивчити структури як складову мови С++.

ТЕОРЕТИЧНІ ВІДОМОСТІ

Протягом попереднього курсу «Алгоритмізація та програмування» розглядалися тільки змінні стандартних типів, таких, як float, char або int. Подібні змінні здатні представляти яку-небудь одну величну – висоту, значення лічильника, кількість сторінок та ін. Однак іноді окремі змінні буває зручно об'єднувати у більш складні конструкції. Якщо провести паралель із реальним життям, то прикладом може бути організація працівників фірми у підрозділи або складання речення з окремих слів. У C++ однією з конструкцій, що реалізують об’єднання різнорідних даних, є структура.

Структура являє собою об’єднання простих змінних. Ці змінні можуть мати різні типи: int, float, bool і т.д. (саме різнорідністю типів структури відрізняються від масивів, в яких усі змінні повинні мати однаковий тип). Змінні, що входять до складу структури, називаються полями структури.

Структури є однією зі складових головних концепцій мови С++ – об’єктів та класів. Насправді синтаксис структури фактично ідентичний синтаксису класу. На практиці різниця між структурою та класом полягає в наступному: структури, як правило, використовуються як об’єднання даних, а класи – як об’єднання даних та функцій. Таким чином, вивчаючи структури, закладаються основи для розуміння класів та об’єктів.

Проста структура

Почнемо знайомство зі структури, яка містить три поля, два з яких мають цілий тип й одне – дійсний. Ця структура призначена для зберігання інформації про комплектуючі деталі виробів, що випускаються фабрикою. Компанія виробляє декілька типів виробів, тому номер моделі виробу включено до структури як перше з полів. Номер самої деталі представлений другим полем, а її вартість – останнім, третім полем.

// parts.cpp – структура для зберігання інформації про деталі виробів

#include <iostream>

using namespace std;

struct part // створення структури

{

int modelnumber; // номер моделі виробу

int partnumber; // номер деталі

float cost; // вартість

};

int main()

{

part part1; // створення структурної змінної

// ініціалізація полів структурної змінної part1

part1.modelnumber = 6244;

part1.partnumber = 373;

part1.cost = 217.55F;

// вивід значень полів на екран

cout<<"Модель "<<part1.modelnumber;

cout<<", деталь "<<part1.partnumber;

cout<<", вартість $"<<part1.cost<<endl;

return 0;

}

Результат роботи програми виглядає наступним чином:

Модель 6244, деталь 373, вартість $217.55

У програмі визначається структура part та змінна part1 цієї структури. Потім полям змінної part присвоюються значення та виводяться на екран.

У прикладі присутні три головні аспекти роботи зі структурами: визначення структури, створення змінної типу цієї структури та доступ до полів структури.

Визначення структури

Визначення структури задає її внутрішню організацію, описуючи поля, що входять до складу структури:

struct part

{

int modelnumber;

int partnumber;

float cost;

};

Синтаксис визначення структури

Визначення структури починається з ключового слова struct. Далі визначається ім’я структури, в даному випадку – part. Оголошення полів структури modelnumber, partnumber и cost поміщено у фігурні дужки. На відміну від циклів, розгалужень та функцій після закриваючої фігурної дужки йде крапка з комою (;) – символ, що визначає кінець визначення структури.

Значення визначення структури

Визначення структури необхідно для того, щоб створювати на її основі змінні типу part. Саме визначення не створює жодної змінної, не виконується ані виділення пам’яті, ані оголошення змінної. У той же час визначення звичайної змінної передбачає виділення пам’яті під неї. Таким чином, визначення структури фактично задає внутрішню організацію структурних змінних після того, як їх буде визначено.

Оголошення структурної змінної

Перший рядок функції main() виглядає наступним чином:

part part1;

Він представляє собою оголошення змінної part1, що має тип part. Це означає, що під цю змінну виділяється пам'ять.

Доступ до полів структури

Коли структурна змінна оголошена, доступ до її полів можливий з використанням операції точки (.). У програмі першому з полів структури присвоюється значення за допомогою оператора

part1.modelnumber = 6244;

Поле структури ідентифікується за допомогою трьох складових: імені структурної змінної part1, операції точки та імені поля modelnumber. Подібний запис слід розуміти як ”поле modelnumber змінної part1”. Операція точки згідно з загальноприйнятою термінологією називається операцією доступу до поля структури, але, як правило, така довга назва не використовується.

Слід зазначити, що у виразі з використанням операції точки на першому місці стоїть не назва структури (part), а ім’я структурної змінної (part1). Це імя необхідне для того, щоб відрізняти одну змінну від іншої: part1 від part2 і т.д. З полями структурної змінної можна поводитися так само, як і зі простими змінними. Так, в результаті виконання оператору

part1.modelnumber = 6244;

полю modelnumber присвоюється значення 6244 завдяки звичайній операції присвоювання. В програмі також продемонстровано вивід значення поля на екран за допомогою cout:

cout << "Модель " << part1.modelnumber;

Ініціалізація полів структури

Наступний приклад демонструє спосіб, завдяки якому можна ініціалізувати поля заздалегідь визначеній структурній змінній. В програмі використовуються дві структурні змінні.

// partinit.cpp – ініціалізація структурних змінних

#include <iostream>

using namespace std;

struct part

{

int modelnumber;

int partnumber;

float cost;

};

int main()

{

part part1 = {6244,373,217.55F }; // ініціалізація змінної

part part2; // оголошення змінної

// вивід полів першої змінної

cout<<"Модель " << part1.modelnumber;

cout<<", деталь " << part1.partnumber;

cout<<", вартість $" << part1.cost << endl;

part2 = part1; // присвоєння структурних змінних

// вивід полів другої змінної

cout<<"Модель "<<part2.modelnumber;

cout<<", деталь "<<part2.partnumber;

cout<<", вартість $"<<part2.cost<<endl;

return 0;

}

У наведеній програмі визначено дві змінні типу part: part1 та part2. Після того, як поля змінної part1 ініціалізовані, відбувається вивід їх значень на екран, потім значення змінної part1 присвоюється змінній part2, та значення її полів також виводяться на екран. Результат роботи програми наступний:

Модель 6244, деталь 373, вартість $217.55

Модель 6244, деталь 373, вартість $217.55

Обидві строки однакові, оскільки значення другої змінної було присвоєно першій змінній.

Ініціалізація полів змінної part1 проводиться в момент її визначення:

part part1 = { 6244. 373. 217.55 };

Значення, які присвоюються полям структурної змінної, поміщені у фігурні дужки та розділені комами. Перша з величин присвоюється першому полю, друга – другому полю і т.д.

Присвоєння структурних змінних

Як видно з програми PARTINT, можна присвоювати значення однієї структурної змінної іншій:

part2 = part1;

Значення кожного поля змінної part1 присвоюється відповідному полю змінної part2. Оскільки у великих структурах кількість полів може визначатися десятками, для виконання присвоєння структурних змінних компілятору може знадобитися виконати великий обсяг роботи.

Треба зазачити, що операція присвоєння може бути виконана тільки над змінними, що мають однаковий тип. У разі спроби виконати операцію над змінними різних типів компілятор видасть повідомлення про помилку.

Вкладені структури

Структури припускають вкладеність, тобто використання структурної змінної у якості поля іншої структури.

struct Distance

{

int feet;

float inches;

};

struct Room

{

Distance length;

Distance width;

};

Доступ до полів вкладених структур

Якщо одна структура вкладена в іншу, то для доступу до полів внутрішньої структури необхідно двічі застосувати операцію точки:

dining.length.feet = 13;

У цьому операторі dining – ім’я структурної змінної, length – ім’я поля зовнішньої структури. Room; feet – ім’я поля внутрішньої структури Distance. Таким чином, даний оператор отримує доступ до поля feet поля length змінної dining та присвоює цьому полю значення 13.

Ініціалізація та вкладені структури

Розглянемо іншу методику ініціалізації структурної змінної, яка містить у собі поле, що також представляє собою структурну змінну:

Room dining = { {13. 6.5),{10. 0.0} };

Перша із внутрішніх структур ініціалізується за допомогою конструкції:

{13. 6.5}

а друга – за допомогою конструкції:

{10. 0.0}

Варіанти завдань

ЗАДАНИЕ

№ вари-анта

Задание

1

Номер телефона, например (212) 767-8900, можно условно разделить на три части: код города (212), номер телефонной станции (767) и номер абонента (8900). Написать программу с использованием структуры, поз­воляющую раздельно хранить эти три части телефонного номера. Назвать структуру phone. Создайте две структурные переменные типа phone. Инициализацию одной из них произвести самостоятельно, а значения для другой запросите с клавиатуры. Затем вывести содержимое обеих переменных на экран. Результат работы программы должен выглядеть приблизитель­но так:

Введите код города, номер станции и номер абонента: 415 555 1212

Мой номер (212) 767-8900

Ваш номер (415) 555-1212

2

Расположение точки на плоскости можно задать с помощью двух коорди­нат: х и у. Например, если точка имеет координаты (4, 5), то это значит, что она отстоит на 4 единицы справа от вертикальной оси и на 5 единиц вверх от горизонтальной оси. Сумма двух точек определяется как точка, име­ющая координаты, равные сумме соответствующих координат слагаемых.

Написать программу, использующую для интерпретации точки на плоско­сти структуру с названием point. Определить три переменные типа point, и две из них инициализировать с помощью значений, вводимых с клавиа­туры. Затем присвоить третьей переменной значение суммы первых двух переменных и вывести результат на экран. Результат работы программы может выглядеть следующим образом:

Введите координаты точки p1: 3 4

Введите координаты точки р2: 5 7

Координаты точки pl+p2 равны 8 11

3

Создать структуру с именем employee, содержащую два поля: номер со­трудника типа int и величину его пособия в долларах типа float. Запроси­ть с клавиатуры данные о трех сотрудниках, сохраните их в трех струк­турных переменных типа employee и выведите информацию о каждом из сотрудников на экран.

4

Разработать структуру для управления базой данных «Абитуриенты», содержащую следующие поля: ФИО, год рождения, школа, средний балл). Создать две структурные переменные типа fonoteka. Инициализацию одной из них произвести сами, а значения для другой запросить с клавиатуры. Затем вывести содержимое обеих переменных на экран.

5

Написать структуру, которая хранит значе­ния двух дробей в виде числителя и знаменателя, а затем складывает эти дроби согласно арифметическому правилу. Значения дробей должны располагаться в структуре fraction, состоящей из двух полей типа int, предназначенных для хранения числителя и знаменателя. Все значения дробей должны храниться в переменных типа fraction.

6

Разработать структуру для управления базой данных «Абитуриенты», содержащую следующие поля: ФИО, год рождения, школа, средний балл). Создайте две структурные переменные типа fonoteka. Инициализацию одной из них произвести самостоятельно, а значения для другой запросить с клавиатуры. Затем вывести содержимое обеих переменных на экран.

7

Создать структуру dist, хранящую координаты точки.

Написать программу, определяющую расстояние между двумя точками.

Известны координаты первой точки – А (25;66)). Запросите координаты второй точки (В) с клавиатуры и выведите на экран расстояние между А и В.

8

Разработать структуру fonoteka, хранящие данные о музыкальных композициях (исполнитель, название альбома, жанр, год выпуска). Создать две структурные переменные типа fonoteka. Инициализацию одной из них произвести самостоятельно, а значения для другой запросить с клавиатуры. Затем вывести содержимое обеих переменных на экран.

9

Разработать структуру для расчета площади фигуры (треугольника), содержащую следующие поля: основание и высота. Создать 3 структурные переменные treugol (поля 2-х заполнить самостоятельно, значения полей для третьей – запросить с клавиатуры). Вывести на экран все площади.

10

Разработать структуру для расчета времени, которое транспортное средство провело в пути, содержащую следующие поля: скорость движения и пройденное расстояние. Создать 2 структурные переменные time. Вывести на экран рассчитанное время.

11

Создайте структуру с именем time. Три ее поля, имеющие тип int, будут называться hours, minutes и seconds. Напишите программу, которая просит пользователя ввести время в формате часы, минуты, секунды. Можно запрашивать на ввод как три значения сразу, так и выводить для каж­дой величины отдельное приглашение. Программа должна хранить время в структурной переменной типа time и выводить количество секунд во вве­денном времени, определяемое следующим образом:

long totalsecs = tl.hours*3600 + tl.minutes*60 + tl.seconds

12

Создайте структуру типа date, содержащую три поля типа int: месяц, день и год. Попросите пользователя ввести день, месяц и год в формате 31/12/2002, сохраните введенное значение в структурной переменной, а за­тем извлеките данные из этой переменной и выведите их на экран в том же формате, в каком они вводились.

13

Разработать структуру student, хранящие данные о студентах университета (ФИО, год рождения, факультет). Создать две структурные переменные типа student. Инициализацию одной из них произвести самостоятельно, а значения для другой запросить с клавиатуры. Затем вывести содержимое обеих переменных на экран.

14

Разработать структуру sort, хранящие данные о сотрудниках предприятия (фамилия, имя, отчество, год рождения, категория, отдел). Создать две структурные переменные типа sort. Инициализацию одной из них произвести самостоятельно, а значения для другой запросить с клавиатуры. Затем вывести содержимое обеих переменных на экран.

Розробив Кільдейчик О.О.