Главная » Просмотр файлов » Лаба № 1. Составные типы данных

Лаба № 1. Составные типы данных (1017106)

Файл №1017106 Лаба № 1. Составные типы данных (Лаба № 1. Составные типы данных)Лаба № 1. Составные типы данных (1017106)2017-07-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Лабораторная работа № 1. СОСТАВНЫЕ Типы данных

СТРУКТУРЫ

1 Цель работы

Усвоение студентами понятия составного типа данных; получение практических навыков в работе с интегрированными типами данных - структурами и массивами структур языка C++.

2 Теоретические сведения

Концепция типа данных

Основная цель любой программы состоит в обработке данных. Данные различного типа хранятся и обрабатываются по-разному. В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип.

Все типы языка С++ можно разделить на основные и составные. В языке С++ определено шесть основных типов данных для представления целых, вещественных, символьных и логических величин. На основе этих типов программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.

При обработке данных достаточно часто приходится работать с рядом переменных одинакового типа (и описывающих одинаковые объекты). В этом случае эти переменные имеет смысл объединить одним идентификатором. Это позволяют сделать массивы.

Массивы - это группа элементов одинакового типа (float, char, int и т.п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве.

Работа с массивами облегчает понимание и написание программы, когда для обозначения похожих элементов используется один идентификатор. Однако в ряде случаев приходится обрабатывать разнородные элементы, описывающие один объект. В этом случае вместо массива используется структура.

Объявление структуры

Структура - это совокупность логически связанных переменных, возможно, различных типов, сгруппированных под одним именем для удобства дальнейшей обработки. Cтруктура - это составной объект, в который входят элементы любых типов, за исключением функций.

В отличие от массива, который является однородным объектом, структура может быть неоднородной.

Тип структуры определяется записью вида:

struct [имя_структуры] {

тип_элемента_структуры имя_ элемента1; // описания полей структуры

тип_элемента_структуры имя_ элемента2;

...

тип_элемента_структуры имя_ элементаN;

} [список_объявляемых_переменных];

Здесь имя_структуры — это любое имя, соответствующее синтаксису языка Си, описания полей структуры — любая последовательность описаний переменных, имена и типы этих переменных могут быть произвольными. Эти переменные называются полями структуры. Заканчивается описание структуры закрывающей фигурной скобкой. За закрывающей фигурной скобкой в описании структуры обязательно следует точка с запятой.

Типом элемента структуры может быть:

    • другой структурный тип (допускаются вложенные структуры);

    • указатель на данный структурный тип;

    • неполно объявленный структурный тип;

    • любой другой базовый или производный тип, не ссылающийся рекурсивно на объявляемый структурный тип.

Точно так же, как в случае любого другого базисного типа, за правой фигурной скобкой, закрывающей список членов, может следовать список переменных. Оператор

struct \( ...\) x,y,z;

синтаксически аналогичен

int x,y,z;

в том смысле, что каждый из операторов описывает x, y и z в качестве переменных соответствующих типов и приводит к выделению для них памяти.

Описание структуры, за которым не следует списка переменных, не приводит к выделению какой-либо памяти; оно только определяет шаблон или форму структуры.

После того как вы определите структуру, ваша программа может объявить переменные типа этой структуры, используя имя структуры (иногда называемое структурным тэгом), как показано ниже:

struct employee

{
char name [64] ;

long employee_id;

float salary;

char phone[10];

int office_number;

};
employee boss, worker, new_employee; //объявление переменных

В данном случае оператор создает три переменные структуры employee. В некоторых случаях вы можете увидеть объявление, в котором тэг структуры предваряется ключевым словом struct, как показано ниже:


struct employee boss, worker, new_employee;

Ключевое слово struct является обязательным при программировании на С, так что некоторые программисты могут включать его по привычке. Однако в C++ использовать ключевое слово struct необязательно.

Список объявляемых переменных типа данной структуры может содержать:

    • имена переменных;

    • имена массивов;

    • указатели.

Для использования указателя на структуру ему необходимо присвоить адрес переменной типа структуры.

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

Например:

struct structA {

struct structA *pA; int iA; } sA; // pA указатель на структуру

При одновременном объявлении структурного типа, объявлении переменной данного типа и ее инициализации список значений указывается в фигурных скобках в последовательности, соответствующей последовательности определения элементов структуры.

Доступ к элементам структуры

Для обращения к отдельным элементам структуры используются операторы: . и ->.

Доступ к элементам структуры может иметь следующее формальное описание:

переменная_структурного_типа.элемент_структуры=значение;

имя_структурного_типа *указатель_структуры=& переменная_структурного_типа;

указатель_структуры->элемент_структуры=значение;

Например:

struct structA {

char c1;

char s1[4];

float f1;} aS1, *prtaS1=&aS1; // aS1 - переменная структурного типа

// prtaS1 - указатель на структуру aS1

struct structB {

struct structA aS2; // Вложенная структура

} bS1, *prtbS1=&bS1;

aS1.c1= 'Е'; // Доступ к элементу c1 структуры aS1

prtaS1->c1= 'Е'; // Доступ к элементу c1 через указатель prtaS1

(*prtaS1).c1= 'Е'; // Доступ к элементу c1

(prtbS1->aS2).c1='Е'; // Доступ к элементу вложенной структуры

Массив структур

Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива:

struct book libry[MAXBKS];

Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book. Таким образом, libry[0] является book-структурой, libry[1] - второй book-структурой и т.д.

Доступ к элементу массива структурного типа имеет следующий формальный синтаксис:

имя_массива[индекс_элемента_массива].элемент_структуры

При определении элементов массива структур мы применяем те же самые правила, которые используются для отдельных структур: сопровождаем имя структуры операцией получения элемента и имени элемента:

libry[0].value value - первый элемент массива

libry[4].title title - пятый элемент массива

При использовании указателей на массив структур следует сначала присвоить указателю адрес первого элемента массива, а затем реализовывать доступ к элементам массива, изменяя этот указатель адреса.

Например:

struct structA {

int i; char c;} sA[4], *psA;

psA=&sA[0];

cout<<psA->i; // Доступ к первому элементу массива структур

psA++; // Переход ко второму элементу массива

// Эквивалентно записи: psA=&sA[1];

cout<<psA->i;

Передача структур в качестве параметров

Переменные структурного типа и элементы структуры можно передавать в функции в качестве параметров.

Передача параметров может выполняться:

    • по ссылке или указателю;

    • по значению.

При передаче параметра по указателю передается только указатель на структуру, при передаче по значению в стек копируется все содержание структуры.

Например:

struct structA {

int i; char c;} sA, *psA=&sA;

void F1(struct structA sA); // Передача параметров по значению

void F2(struct structA *psA); // Передача параметров по указателю

void F3(struct structA &sA); // Передача параметров по ссылке

void F2(struct structA *psA) {

psA->i =10; } // Доступ к элементу структуры

При большой вложенности вызовов и использовании большого числа структур или их значительных размерах вызов по значению может привести к переполнению стека.

Функция может возвращать значение структурного типа или типа указателя на структуру.

Например:

struct structA { int i; char с;};

struct structA Function3(void); // Функция возвращает значение структурного типа

struct structA *Function4(void); // Функция возвращает указатель на структуру

Пример использования структуры

Пусть требуется составить перечень музыкальных компакт-дисков. Достаточной для поиска диска в коллекции является следующая информация:

– название альбома;

– исполнитель;

– количество композиций;

– цена;

– дата покупки.

Итак, получено пять элементов будущей структуры. Теперь необходимо определить тип данных для каждого члена создаваемого структурированного типа. Название альбома и имя исполнителя будут описываться массивом символьных переменных. Поскольку нельзя знать заранее количество символов, входящих в эти поля, следовательно, в структуре будет храниться указатель на символьный массив. Количество композиций определяется целочисленной переменной, для хранения значения цены можно использовать число с плавающей запятой. Дата покупки определяется символьным массивом, состоящим из восьми элементов. Для наглядности вышесказанное представлено в виде таблицы:

Имя элемента

Соответствующий тип данных

Название альбома

Исполнитель

Количество композиций

Цена

Дата покупки

Символьный массив неизвестного размера (char *)

Символьный массив неизвестного размера (char *)

Целочисленная переменная (int)

Переменная с плавающей запятой (float)

Символьный массив (char [8])

Подобное представление при программировании структуры значительно упрощает и ускоряет написание программы.

Определение структуры для хранения сведений о музыкальной коллекции, описанной выше, будет выглядеть следующим образом:

struct CD_collection

{

char * title;

char * artist;

int num_songs;

float price;

char date_purchased [8];

} cd1, cd2, cd3;

Определенный структурный тип имеет имя - CD_collection, он содержит пять членов структуры title, artist, num_songs, price и date_purchased. Здесь же объявлены три переменные - cd1, cd2, cd3 формата CD_collection.

Как и при работе с обычными переменными после объявления структуры необходимо заполнить её данными. Самый простой способ заключается в одновременном декларировании и инициализации структуры. Чтобы пояснить сказанное, ниже приведен пример:

struct CD_collection

{

char title [14];

char artist [18];

int num_songs;

float price;

char date_purchased [8];

} CD1 = { "Marilyn Manson", "Mechanical Animals", 14, 11.95, "11/12/01" };

В данном случае нам точно известны размеры символьных массивов, поэтому при декларировании структуры количество элементов полей title и artist заданы точно.

Программа заполняет структурную переменную с именем Top_CD и выводит значения её полей на экран.

#include <stdio.h>

#include <string.h>

#include <conio.h>

struct CD_collection // Объявление структуры

{

char * title;

char * artist;

int num_songs;

float price;

char date_purchased [8];

};

void main()

{

CD_collection Top_CD; // Объявление новой переменной

Top_CD.title = new char [17]; // Выделение памяти под заголовок

Top_CD.artist = new char [10]; // Выделение памяти под имя исполнителя

Top_CD.title = "The Sinister Urge";

Top_CD.artist = "Rob Zombie";

Top_CD.num_songs = 10;

Top_CD.price = 10.75;

strcpy(Top_CD.date_purchased,"26/12/06"); // Копировать дату в строку

printf("/n Диск №1: /n Название диска: %s/n Исполнитель: %s/n Кол-во песен: %d /n Цена: %f /n Дата покупки: %s", Top_CD.title, Top_CD.artist, Top_CD.num_songs, Top_CD.price, Top_CD.date_purchased);

getch();

}

3 Содержание лабораторной работы

  1. В соответствии с заданием варианта работы написать программу на C++, обрабатывающую структурированный тип данных.

    1. Напишите программу, которая объявляет структуру и создает пе­ременную типа Struct(имя_структуры) с именем Name, присваивая элементам этой структуры значения на ваш выбор. Присваивание (инициализация) должно быть частью объявления Name. В результате программа должна вывести содержимое переменной Name.

    2. Напишите программу, которая создает массив из трех структур Struct(имя_структуры), присваивает им значения, введенные с клавиатуры пользователем (использование функций get() и getline()), и затем выводит содержимое каждой структуры.

    3. Выполните упражнение 1.1, но используйте оператор new для выделения структуре области памяти вместо объявления структурной переменной. Присваивание значений элементам структуры должно производиться с клавиатуры.

    4. Напишите набор функций для работы с массивом из элементов разработанного структурированного типа.

  2. Оформление отчета по лабораторной работе

4 Варианты заданий

Номер варианта

Задание

1

Структурированный тип: Фирма

Поля: название фирмы, Ф.И.О. директора, количество сотрудников, адрес, уставной капитал.

Функции:

Ввод количества фирм с клавиатуры

Заполнение массива структур с клавиатуры

Печать массива структур на экране

Вычисление среднего уставного капитала

Поиск структуры с заданными Ф.И.О. директора

2

Структурированный тип: абонент телефонной связи.

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

Функции:

Ввод количества абонентов с клавиатуры

Заполнение массива структур с клавиатуры

Печать массива структур на экране

Поиск абонента с заданным номером

Подсчет количества абонентов с телефоном индивидуального пользования

3

Структурированный тип: Перечень комплектующих деталей компьютера

Поля: тип детали (например, видеокарта, процессор и т. п), марка, производитель, цена, срок гарантийного обслуживания

Функции:

Заполнение массива структур с клавиатуры

Печать массива структур на экране

Вычисление средней стоимости одного компьютера

Поиск комплектующей детали с минимальным гарантийным сроком обслуживания

Вывод перечня комплектующих заданного типа

4

Структурированный тип: Средство связи

Поля: тип, радиус действия, цена одной минуты связи.

Функции:

Заполнение массива структур с клавиатуры

Печать массива структур на экране

Вычисление средней стоимости одного часа связи для средств заданного типа

Поиск средства связи с максимальным радиусом действия

5

Структурированный тип: товар

Поля: Название, фирма-производитель, входная цена одной единицы товара, количество, торговая надбавка в процентах

Функции:

Заполнение массива структур с клавиатуры

Печать массива структур на экране

Поиск товара с минимальной ценой заданного производителя

Вычисление общего количества товаров

6

Структурированный тип: читатель

Поля: Ф.И.О., номер билета, количество книг на руках, дата перерегистрации(число, месяц, год)

Функции:

Заполнение массива структур с клавиатуры

Печать массива структур на экране

Поиск читателя с наиболее поздней датой перерегистрации

Вычисление общего количества книг на руках

7

Структурированный тип: книга

Поля: автор, название, год издания, число страниц

Функции:

Заполнение массива структур с клавиатуры

Печать массива структур на экране

Подсчет книг заданного автора

Поиск книги с наиболее поздним годом издания

5 Требования к отчету

Отчет по лабораторной работе должен содержать:

  1. Цель лабораторной работы.

  2. Краткую теорию (ответы на контрольные вопросы).

  3. Листинги разработанных программ с комментариями.

  4. Результаты выполнения разработанных программ.

  5. Выводы по работе.

Приложение

Характеристики

Тип файла
Документ
Размер
125,5 Kb
Тип материала
Высшее учебное заведение

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов лабораторной работы

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6353
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее