Главная страница

Лабораторная работа по программированию. Лабораторная работа № 4. Лабораторная работа 4 массивы структур


Скачать 24.16 Kb.
НазваниеЛабораторная работа 4 массивы структур
АнкорЛабораторная работа по программированию
Дата05.05.2021
Размер24.16 Kb.
Формат файлаdocx
Имя файлаЛабораторная работа № 4.docx
ТипЛабораторная работа
#201821

Лабораторная работа № 4
массивы структур

1. Цель и задачи работы


Целью работы является получение студентами навыковработы с массивами структур в языке С++.

Задачами работы являются:

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

  • тестирование работоспособности программы для различных исходных данных.

2. Краткие теоретические сведения


Языки программирования C/C++ поддерживают определяемые пользователем структуры –структурированный тип данных.
Он является объединением одного или более объектов (переменных встроенных типов,массивов, указателей, других структур и т.д.), которые для удобства работы с ними сгруппированыпод одним именем. Переменные, образующие структуру, называются полями или элементами структуры.

Достоинства структур:

−  облегчают написание и понимание программ;

−  помогают сгруппировать данные, объединяемые каким-либо общим понятием;

−  позволяют группу связанных между собой переменных использовать как единое целое.

Как и массив, структура представляет собой совокупность данных, но отличается от него тем, чток ее элементам (компонентам) необходимо обращаться по имени и ее элементы могут быть различноготипа. Структуры целесообразно использовать там, где необходимо объединить данные, относящиеся кодному объекту. Объявление структуры приводит к образованию шаблона, используемого для создания объектов структуры.

Определение структуры состоит из двух шагов:

− объявление шаблона структуры (задание нового типа данных, определенногопользователем);

− определение переменных типа объявленного шаблона.

Общий синтаксис объявления шаблона структуры:

structимя_шаблона

{

тип1 имя_поля1;

тип1 имя_поля2;

//другие члены данных;

};


structDateBase

{

Charfam[20];

Charname[15];

LongTelNumber;

char *Adress;

};

Имена шаблонов должны быть уникальными в пределах их области определения для того, чтобыкомпилятор мог различать различные типы шаблонов. Задание шаблона осуществляется с помощьюключевого слова struct, за которым следует имя шаблона структуры и список элементов, заключенных вфигурные скобки.

Имена элементов в одном шаблоне также должны быть уникальными. Однако в разных шаблонахможно использовать одинаковые имена элементов.

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

Среди членов данных структуры могут также присутствовать, кроме стандартных типов данных(int, float, char и т.д.), ранее определенные типы, например:

/* объявление шаблона структуры типа date */

struct date

{ int day, month, year; };

/* шаблонструктуры person */

struct person

{

charfam[30], im[20], otch[15];

float weight;

struct date birthday;

};

Структура date имееттриполятипа int. Шаблон структуры person в качестве элемента включает полеbirthday, которое, в свою очередь, имеет ранее объявленный тип данных: structdate. Элемент birthdayсодержит в себе все компоненты шаблона structdate.

Определение структуры-переменной не отличается от объявления обычной переменной базового типа. Общий синтаксисопределения переменной типа структуры:

structимя_шаблонаимя_переменной;

Например:

structpersonstudent;

Компилятор выделит под каждую переменную количество байтов памяти, необходимое дляхранения всех ее элементов.

Разрешается совмещать описание шаблона и определение структурной переменной.

structbook{

chartitle[20];

charautor[30];

doublecast;

} book1, book2, *ptr_bk=&book1;

Доступ к полям осуществляется с помощью оператора «.»при непосредственной работе со структурой или «->» при использовании указателей на структуру. Этиоператоры называются селекторами членов класса.

Прямой доступ к полям осуществляется следующим образом:

имя_переменной_структуры.поле_данных;

1) date1[5].day=10;

2) date1[5].year=1991;

3) strcpy(book1.title, “Войнаимир”);

Используя прямое обращение к элементу, присваиваем значение выбранной переменной. Текст помещается в переменную, используя функцию копирования строковых переменных – strcpy().

4) stud[3].birthday.month=1;

5) stud[3].birthday.year=1980;

Доступ по указателю осуществляется аналогично:

имя_указателя->имя_поля;

1) (date1+5)->day=10;

2) (stud+3)->birthday.month=1;

Используя доступ по указателю на структуру, присваиваем значение соответствующейпеременной.

Указатель можно использовать и так:

(*имя_указателя).имя_поля;

1) (*(date1+5)).day=10;

2) (*(stud+3)).birthday.month=1;

При определении структурных переменных можно инициализироватьих поля. Эта возможность подобна инициализации массива и следует тем же правилами:

имя_шаблонаимя_переменной = {значение1, значение2…};

Компилятор присваивает значение1 первой переменной в структуре, значение2 – второйпеременной структуры и т.д., и тут необходимо следовать некоторым правилам:

- присваиваемые значения должны совпадать по типу с соответствующими полями структуры;

- можно объявлять меньшее количество присваиваемых значений, чем количество полей, компилятор присвоит нули остальными полями структуры;

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

structdate

{intday,month,year; }

d[5] = { {1,3,1999}, {5,1,1990}, {1,1,1883} };

Язык С++ позволяет оператору присваивания копироватьзначения одной структуры-переменной в другую переменную, при условии, что обе структуры-переменные относятся к одному и тому же типу. Таким образом, единственный оператор можетскопировать несколько членов данных, которые включают массивы и вложенные структуры.

Часто используются совокупности структур, объединяемые в массив структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа date следует написать:

structdatedate_array[100];

В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры date.

Для доступа к отдельным структурам массива date_array следует проиндексировать имя массива. Например, для вывода содержимого поля month третьей структуры, следует написать:

cout<
Как и в случае массивов переменных, индексациямассивов структур начинается с нуля.
Пример 1. Задан массив структур «Студент» (фамилия; имя; год рождения; оценки по трем экзаменам). Определить суммарный балл за сессию каждого студента. Вывести на экран отсортированный список студентов по возрастанию суммы баллов.

Программа на языке С++.

#include

#include

int main()

{

struct student // Описаниеструктурыstudent

{

char name[20];

charfam[30];

int year;

int mark[3];

doublesum;

};

struct student students[15]; // Объявлениемассива// структурstudentsтипаstudent

structstudentbuffer; // Объявление
// вспомогательной переменнойbufferтипаstudent

inti, j, records=0;

charflag = 'y'; // Объявление символьной
// переменной-флага

cout<
// Выводнаэкранзаголовка

cout<
// Вводданных

do {

cout<< "Студент " << records+1 <
cout<<"Введитефамилию: ";

cin>> students[records].fam;

cout<< "Введитеимя: ";

cin>> students[records].name;

cout<< "Введитевозраст: ";

cin>> students[records].year;

for (i=0; i<3; i++)

{ cout<< "Введитеоценкузаэкзамен " <
cin>> students[records].mark[i];

}

records++;

cout<< "Продолжитьввод? (y/n)";

cin>> flag;

} while(flag == 'y');

for (i=0; i
{ students[i].sum=0;

for (j=0; j<3; j++)

students[i].sum+=students[i].mark[j];

}

for (i=0; i
for (j=i; j
if (students[i].sum>students[j].sum)

{ buffer = students[i];

students[i]=students[j];

students[j]=buffer;

}

cout<
cout<
for (i=0; i
{

cout<
} return 0;

}

3. Порядок выполнения работы


  1. Получение варианта задания на лабораторную работу.

  2. Разработка алгоритма и графической схемы решения задачи.

  3. Составление программы на языке С++.

  4. Отладка программы.

  5. Тестирование программы.

  6. Составление отчета о проделанной работе.

4. Требования к оформлению отчета


  1. Оформить титульный лист с указанием темы работы.

  2. Сформулировать цель и задачи работы.

  3. Привести формулировку задания.

  4. Построить графическую схему алгоритма.

  5. Записать текст программы.

  6. Привести результаты тестирования программы для массива, содержащего не менее 15 элементов.

  7. Сформулировать вывод по проделанной работе.

5. Варианты заданий


  1. Задан массив структур «Автосервис» (регистрационный номер автомобиля; фамилия владельца; пробег; стоимость ремонта; фамилия мастера, выполнившего ремонт). Вывести на экран общую сумму ремонта по каждому мастеру.

  2. Задан массив структур «Сотрудник» (фамилия сотрудника; должность; возраст; стаж; заработная плата). Вывести на экран фамилии и должности сотрудников в порядке возрастаниязаработной платы.

  3. Задан массив структур «Режим дня» (наименования занятия в детском саду; время начала занятия; время окончания занятия). Вывести на экран суммарное количество свободного времени детей.

  4. Задан массив структур «Абонент» (фамилия; домашний адрес; номер телефона; тариф; баланс). Вывести на экран список абонентов с указанием номеров телефонов для рассылки сообщений о том, что достигнут порог отключения.

  5. Задан массив структур «Склад» (наименование товара; количество; стоимость; процент торговой надбавки). Вывести на экран перечень товаров на складе в порядке убывания общей стоимости.

  6. Задан массив структур «Ученик» (фамилия; класс; оценка по математике; оценка по русскому языку; оценка по литературе). Вывести на экран класс, в котором выше успеваемость.

  7. Задан массив структур «Афиша» (название фильма; номер зала; количество мест; стоимость билета; время сеанса). Вывести на экран информацию омаксимально возможной выручке за каждый фильм.

  8. Задан массив структур «Покупатель» (фамилия покупателя; имя;номер карты; наименование товара; стоимость покупки). Вывести на экран сведения о покупателях и суммарной стоимости покупок в порядке возрастания суммы.

  9. Задан массив структур «Игрушка» (название игрушки; цена; количество; возрастные ограничения). Вывести на экран наименования и стоимость игрушек, подходящих ребенку заданного возраста и имеющихся в наличии.

  10. Задан массив структур «Владелец» (фамилия владельца квартиры; имя; номер квартиры; площадь квартиры; задолженность по оплате коммунальных услуг). Вывести на экран список задолжников по оплате коммунальных услуг в порядке возрастания номера квартиры.

  11. Задан массив структур «Рейс» (место отправления; время отправления; место прибытия; время прибытия). Вывести на экран список возможных маршрутов из заданного места с указанием времени в пути.

  12. Задан массив структур «Читатель» (фамилия читателя; номер читательского билета; наименование книги; дата возврата). Вывести на экран фамилии и номера читательских билетов читателей, имеющих задолженности по возврату книг.

  13. Задан массив структур «Тур» (наименование тура; страна;продолжительность; стоимость; количество свободных путевок). Вывести на экран список туров, имеющихся в наличии, в порядке убывания стоимости.

  14. Задан массив структур «Преподаватель» (фамилия; имя; отчество; ученая степень; год рождения). Вывести на экран кандидатов наук,возраст которых не превышает 35 лет, и докторов наук, возраст которых не превышает 45 лет.

  15. Задан массив структур «Специальность» (шифр специальности подготовки; название специальности; количество бюджетных мест; проходной балл за предыдущий год; количество заявлений). Вывести на экран перечень специальностей с указанием конкурса (отношение количества заявлений к количеству бюджетных мест).

  16. Задан массив структур «Спортсмен» (фамилия спортсмена; порядковый номер; результаты трех попыток). Вывести на экран список спортсменов в порядке убывания суммарного результата.

  17. Задан массив структур «Вклад» (фамилия клиента банка; номер лицевого счета; сумма на счете; дата последнего изменения). Вывести на экран данные о клиентах, вносивших изменения за последние три месяца.

  18. Задан массив структур «Сотрудник» (фамилия; имя; квалификация; возраст; стаж работы). Вывести на экран данные о сотруднике, соответствующем требованиям на замещение вакантной должности.

  19. Задан массив структур «Государство» (название; столица; численность населения; площадь). Вывести на экран список государств и столиц в порядке убывания площади.

  20. Задан массив структур «Кредит» (фамилия заемщика; сумма кредита; процентная ставка; срок кредитования). Вывести на экран сумму переплаты каждого заемщика.

  21. Задан массив структур «Процесс» (наименование процесса; время начала; времяокончания). Вывести на экран общую продолжительность выполнения работы. Время начала и окончания задавать как целочисленные массивы из двух элементов – часы и минуты.

  22. Задан массив структур «Картина» (автор; название картины; стиль; размеры; цена). Вывести на экран сведения о картинах, выполненных в запрашиваемом стиле, в порядке возрастания стоимости.

  23. Задан массив структур «Телефон» (марка; оперативная память; емкость аккумулятора; разрешение камеры; стоимость). Вывести на экран перечень телефонов, параметры которых превышают заданные значения оперативной памяти, емкости аккумулятора и разрешения камеры.

  24. Задан массив структур «Пациент» (фамилия пациента; номер страхового полиса; домашний адрес; диагноз). Вывести на экран список всех пациентов, проживающих на заданной улице, с указанием номера страхового полиса и диагноза.

  25. Задан массив структур «Тендер» (наименование организации-участника тендера; количество сотрудников; стаж участия в работах; собственный капитал; заявленная стоимость работ). Вывести на экран организации, удовлетворяющие требованиям конкурса, в порядке убывания заявленной стоимости работ.

6. Критерии результативности выполнения работы


Лабораторная работа считается успешно выполненной, если:

  • представленный отчет содержит все необходимые пункты, согласно требованиям;

  • успешно демонстрируется работа программы как на выбранных студентом исходных данных, так и на заданных преподавателем исходных данных;

  • студент правильно отвечает на контрольные вопросы.

7. Контрольные вопросы


  1. Дайте определение структуры.

  2. Какиеспособыорганизациисимвольныхданных существуют?

  3. Как осуществляются объявлениеиинициализациясимвольныхмассивов?

  4. Какхранитсястроковоезначениевпамяти компьютера?

  5. Общиепринципыработыссимвольнымиданными.

  6. Библиотекиифункциидляработысостроками.

  7. Как объявить структуру?

  8. Какобращатьсякполямструктуры?

  9. Каквпамятихранитсяпеременнаяструктурноготипа?

  10. Для чего используются вложенные структуры?


написать администратору сайта