68649

Применение производных типов данных для решения прикладных задач

Лабораторная работа

Информатика, кибернетика и программирование

Написать программу выполняющую следующие действия: ввод с клавиатуры данных в массив экземпляров структур состоящий из пяти записей; поиск записей в которых средний бал студента больше 40; поиск записей в которых совпадают номера групп студентов. Написать программу выполняющую следующие действия...

Русский

2014-09-24

92 KB

0 чел.

Лабораторная работа №7

Тема:  Применение производных типов данных для решения

прикладных задач

Цель занятия:

  •  Совершенствование навыков разработки программ в среде программирования MS Visual C++
  •  Совершенствование навыков описания и использования функций в программах
  •  Получение начальных навыков в объявлении, инициализации и использовании производных типов данных

Время на выполнение работы: 4 часа

Учебные вопросы:

  1.  Изучение порядка объявления и инициализации производных типов данных
  2.  Программирование с использованием производных типов данных
  3.  Использование функций для работы с производными типами данных

Подготовка к выполнению работы:

  1.  Изучить рекомендованную литературу (базовые конструкции структурного программирования, массивы и указатели, функции, производные типы данных).
  2.  Изучить материал настоящего руководства.

Материалы для подготовки к занятию:

  1.  Конспект лекций
  2.  [1] стр. 67-71.


ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

  1.  Изучение порядка объявления и инициализации производных типов данных

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

В языке С++ структура является видом структуруа и обладает всеми его свойствами, но на данном этапе изучения языка С++ достаточно использовать структуры так, как они определены в языке Си:

struct [ имя_типа ]

{

тип_1  элемент_1;

тип_2  элемент_2;

. . .

тип_n  элемент_n;

} [ список описателей ];

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

// Пример, описывающей анкетные данные о студентах

struct

{

char fam[20];

char name[15];

int  age;

} stud[30], *ptr;

В данном примере описывается структура, содержащая три поля: символьный массив на 20 элементов с именем fam, символьный массив на 15 элементов с именем name и целочисленная переменная с именем age, которые предназначены для хранения информации о фамилии, имени и возрасте студента соответственно. В списке описателей задан массив из 30 экземпляров этой структуры и указатель на структуру (который тоже задает экземпляр структуры, который идентифицируется не по имени экземпляра, а по имени указателя, который хранит адрес начала памяти, выделенной на экземпляр структуры, но без имени экземпляра). Если список описателей отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами, например:

struct  student

{

char fam[20];

char name[15];

int    age;

};

int main()

{ . . .

student  stud[30], *ptr;

   . . .

 return 0;

}

В данном примере описана глобальная структура данных типа структуры с заданием нового типа данных student. Задание же экземпляров этой структуры производится в рамках функции main().

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

student  *ptr=new student;   // экземпляр структуры

student *stud=new student[N];// массив экземпляров

                            // структур

Для инициализации структуры значениями используются те же методы, что и для обычных типов данных, но с небольшим дополнением: для доступа к полю структуры, экземпляр которой создан как обычная переменная или массив – через операцию «точка», а для обращения к полю структуры, экземпляр которой создан как указатель на структуру – через операцию «стрелка»:

stud[1].fam=”Сидоров”;      // Доступ

stud[1].name=”Александр”;   // по имени

stud[1].age=23;            // экземпляра

prt->fam=”Петров”;          // Доступ

ptr->name=”Семен”;        // через указатель

ptr->age=21;          // на структуру

На практике инициализация полей структуры, описанной массивом экземпляров, осуществляется с использованием циклов с параметром:

for (int i; i<N; i++)

{

cout<<”\nВведите фамилию студента: “;

cin  >>stud[i].fam;

cout<<”\nВведите имя студента: ”;

cin  >>stud[i].name;

cout<<”\nВведите возраст студента: ”;

 cin  >>stud[i].age;

 }

  1.  Программирование с использованием производных типов данных

Сами по себе структуры являются лишь средством описания сложных типов данных, но основное их достоинство – удобство в поиске и анализе описанных в таком виде данных. Например, необходимо вывести на экран данные о всех студентах, чей возраст на данный момент не превышает 22 лет:

 k=0;

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

 if ( stud[j].age<=22 )

  {

  cout<<”\nФамилия: ”<<stud[j].fam;

  cout<<”\tИмя: ”<<stud[j].name;

  cout<<”\tВозраст: ”<<stud[j].age;  

  k++;

  }

 if (k==0) cout<<”\nТаких студентов нет!”;

или о студентах, чья фамилия “Петров”:

k=0;

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

 if ( strcmp(stud[j].fam, “Петров”)==0 )

  {

  cout<<”\nФамилия: ”<<stud[j].fam;

  cout<<”\tИмя: ”<<stud[j].name;

  cout<<”\tВозраст: ”<<stud[j].age;  

  k++;

  }

 if (k==0) cout<<”\nТаких студентов нет!”;

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

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

void ZaprosFamily(student  *k, char  *f);

int main()

{ . . .

char *family;

. . .

cout<<”\nВведите фамилию для поиска: ”;

cin  >>family;

ZaprosFamily(kurs, family);

. . .

return 0;

}

void ZaprosFamily(student  *k, char  *f)

{

k=0;

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

  if ( strcmp(k[j].fam, f)==0 )

   {

   cout<<”\nФамилия: ”<<k[j].fam;

   cout<<”\tИмя: ”<<k[j].name;

   cout<<”\tВозраст: ”<<k[j].age;  

   k++;

   }

 if (k==0) cout<<”\nТаких студентов нет!”;

 return;

}

В этом примере в функцию передаются два указателя: один типа student, другой типа char. Что же это за указатели, почему они передаются и что значат?

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

Второй указатель есть указатель на тип данных char, то есть на символьный тип данных. Через этот указатель в функцию передается строка для поиска интересующей нас фамилии студента.

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

ПРОГРАММА  РАБОТЫ

В соответствии с номером рабочего места реализовать ввод данных в структуру и поиск информации в ней.

Вариант 1

  1.  Описать структуру STUDENT, содержащую следующие поля: фамилия и инициалы, номер группы, успеваемость (массив из пяти элементов).
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск записей, в которых средний бал студента больше 4,0;
  •  поиск записей, в которых совпадают номера групп студентов.

Вариант 2

  1.  Описать структуру AEROFLOT, содержащую следующие поля: название пункта назначения рейса, номер рейса, вместимость, тип самолета.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск записей, в которых пункт назначения совпадает с введенным с клавиатуры;
  •  поиск записей, в которых вместимость самолета не менее введенной с клавиатуры.

Вариант 3

  1.  Описать структуру TRAIN, содержащую следующие поля: номер поезда, название пункта назначения рейса, время отправления, время в пути.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск поездов, отправляющихся после времени, введенного с клавиатуры в течении ближайших двух часов;
  •  поиск поездов, отправляющихся в пункт назначения, введенный с клавиатуры.


Вариант 4

  1.  Описать структуру TOURIST, содержащую следующие поля: номер маршрута, наименование начального пункта маршрута, наименование конечного пункта маршрута, время в пути.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск маршрутов, начинающихся в пункте, наименование которого введено с клавиатуры;
  •  поиск маршрутов, общее время прохождения которых не превышает времени, введенного с клавиатуры.

Вариант 5

  1.  Описать структуру NOTE, содержащую следующие поля: фамилия, имя, номер телефона.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о человеке, чья фамилия введена с клавиатуры;
  •  поиск информации о человеке, чей номер телефона введен с клавиатуры;

Вариант 6

  1.  Описать структуру ZNAK, содержащую следующие поля: фамилия, имя, дата рождения, знак зодиака.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о людях, родившихся сегодня;
  •  поиск информации о людях, родившихся под веденным знаком зодиака;

Вариант 7

  1.  Описать структуру PRICE, содержащую следующие поля: наименование товара, название магазина, в который товар отгружен, стоимость товара.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о магазинах, в которые отгружен товар, название которого введено с клавиатуры;
  •  поиск информации о товарах, стоимость которых не превышает стоимость, введенную с клавиатуры;

Вариант 8

  1.  Описать структуру ORDER, содержащую следующие поля: фамилия налогоплательщика, инициалы налогоплательщика, ИНН налогоплательщика, сумма налогообложения.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о налогоплательщике,  фамилия которого введена с клавиатуры;
  •  поиск информации о налогоплательщиках, чей суммарный налог превышает сумму, введенную с клавиатуры;

Вариант 9

  1.  Описать структуру CAR, содержащую следующие поля: марка автомобиля, государственный регистрационный номер, фамилия владельца, инициалы владельца, пробег поквартально (массив из четырех элементов).
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о владельцах автомобилей, марка которого введена с клавиатуры;
  •  поиск информации об автомобилях, у которых суммарный пробег за 2 и 3 кварталы не превышает значение, введенное с клавиатуры;

Вариант 10

  1.  Описать структуру STUDENT, содержащую следующие поля: фамилия, имя, отчество, серия паспорта, номер паспорта, дата выдачи.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск записей, в которых совпадает имя  студента;
  •  поиск записей, в которых совпадает месяц выдачи паспорта.

Вариант 11

  1.  Описать структуру AEROFLOT, содержащую следующие поля: номер рейса, время отправления, время начала регистрации, тип самолета.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск рейсов, регистрация на которые уже началась по отношению ко времени, введенному с клавиатуры, но еще не закончилась (временем окончания регистрации считается время отправления минус 20 минут);

Вариант 12

  1.  Описать структуру WORKER, содержащую следующие поля: фамилия и инициалы работника, дата рождения, год начала трудовой деятельности, год поступления на работу.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск сотрудников, чей трудовой стаж не менее введенного с клавиатуры;
  •  поиск сотрудников, родившихся в течении месяца, введенного с клавиатуры;

Вариант 13

  1.  Описать структуру TRAIN, содержащую следующие поля: номер поезда, название пункта назначения рейса, количество спальных, купейных и плацкартных мест (массив из трех элементов), количество свободных спальных, купейных и плацкартных мест (массив из трех элементов).
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск поездов, отправляющихся в пункт назначения, введенный с клавиатуры и имеющих количество свободных плацкартных мест, заданных пользователем.
  •  вывод информации о поезде, номер которого введен с клавиатуры.

Вариант 14

  1.  Описать структуру NOTE, содержащую следующие поля: фамилия, имя, дата встречи, место встречи.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о встречах, назначенных на дату, введенную с клавиатуры;
  •  поиск информации о встречах, назначенных в месте, введенном с клавиатуры;

Вариант 15

  1.  Описать структуру PRICE, содержащую следующие поля: наименование магазина, наименование товара, количество товара на складе, стоимость товара.
  2.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о магазинах, в которых есть товар, название которого введено с клавиатуры;
  •  поиск информации о магазинах, в которых есть товар, название которого ведено с клавиатуры, со стоимостью, не превышающей значение, введенное с клавиатуры.


 

А также другие работы, которые могут Вас заинтересовать

68207. АГРОЕКОЛОГІЧНЕ ОБҐРУНТУВАННЯ ЗАХОДІВ ПОЛІПШЕННЯ ЯКОСТІ ПИТНОЇ ВОДИ ДЕЦЕНТРАЛІЗОВАНОГО ВОДОПОСТАЧАННЯ 1.1 MB
  Забруднювачі з ґрунту безпосередньо впливають на хімічний склад суміжних середовищ у тому числі й води підземних джерел. Оскільки ґрунтові води не захищені водотривкими породами а їх живлення відбувається в результаті фільтрації атмосферних опадів через інколи незначний 15–2 м завтовшки...
68208. ТЕХНОЛОГІЯ СОУСІВ ЯГІДНИХ З ВИКОРИСТАННЯМ ПРИРОДНОЇ НЕТРАДИЦІЙНОЇ СИРОВИНИ 975.5 KB
  Слід підкреслити що останнім часом все більшого розповсюдження у ресторанному господарстві набуває креативна кухня яка характеризується додаванням до страв з м’яса риби птиці дичини солодких соусів з плодів та ягід асортимент яких обмежується вишневим чорносмородиновим сливовим соусами...
68209. ФОРМУВАННЯ ГОТОВНОСТІ МАЙБУТНЬОГО ВЧИТЕЛЯ ПОЧАТКОВИХ КЛАСІВ ДО ПЕДАГОГІЧНОГО МОДЕЛЮВАННЯ 290 KB
  Нові: знання методів моделювання та застосування моделей зокрема до процесів об’єктів і суб’єктів навчання і виховання; уміння визначати доцільність застосування методів педагогічного моделювання до розв’язування педагогічних задач; здатність до освоєння сучасних в тому числі заснованих на застосуванні...
68210. СЕРЕДНЬОШРИФТОВЕ ЧЕТВЕРОЄВАНГЕЛІЄ: ЛІНГВІСТИЧНИЙ І ПАЛЕОГРАФІЧНИЙ АНАЛІЗ 176.5 KB
  Досягнення цієї мети передбачає виконання таких завдань: проаналізувати безвихідні дофедорівські книговидання в контексті проблеми дофедорівського книгодрукування на східнослов’янських землях; окреслити місце середньошрифтового Євангелія серед безвихідних видань...
68211. Оптимізація діагностики і лікування хронічного біліарного панкреатиту у хворих з ожирінням 196 KB
  Мета дослідження: підвищити якість діагностики і ефективність лікування біліарного ХП у хворих із ожирінням. Для досягнення цієї мети були поставлені наступні завдання: Проаналізувати клінічні прояви біліарного ХП у хворих із ожирінням.
68212. ЕКСПОРТНИЙ ПОТЕНЦІАЛ ПІДПРИЄМСТВ ЛІСОПРОМИСЛОВОГО КОМПЛЕКСУ 662 KB
  Розвиток світового господарства у теперішній час вирізняється посиленням глобалізаційних процесів, які зумовили трансформацію моделей міжнародного співробітництва, зміну структури об’єктів і суб’єктів світового ринку
68213. ДЕРЖАВНА ПОЛІТИКА РОЗВИТКУ ІННОВАЦІЙНОГО ПОТЕНЦІАЛУ РЕГІОНІВ УКРАЇНИ 324.5 KB
  Курс на інноваційний розвиток в Україні визначає перехід економіки до нового якісного рівня. Він супроводжується активізацією інноваційної діяльності, яка сприяє реорганізації економіки на основі розвитку наукоємних виробництв, запровадження у виробництво прогресивних...
68214. СОЦІАЛЬНИЙ КАПІТАЛ ЯК ЧИННИК ПРОФЕСІЙНОЇ СОЦІАЛІЗАЦІЇ ПРАВООХОРОНЦІВ 225 KB
  Проте на жаль потенціал соціального капіталу в її реалізації практично не використовується. Тому в даній дисертації вперше пропонується комплексно розглянути феномен соціального капіталу правоохоронців та визначити можливості його використання для оптимізації процесу їх професійної соціалізації.
68215. СУЛЬФАТРЕДУКУЮЧІ, ТІОНОВІ, ДЕНІТРИФІКУЮЧІ БАКТЕРІЇ В ПРИБЕРЕЖНІЙ ЗОНІ ЧОРНОГО МОРЯ І ЇХНЯ РОЛЬ У ТРАНСФОРМАЦІЇ НАФТОВИХ ВУГЛЕВОДНІВ 532.5 KB
  В 80х роках минулого сторіччя у відділі морської санітарної гідробіології Інституту біології південних морів НАН України вивчали деякі групи анаеробних бактерій біля узбережжя Криму та в західній частині Чорного моря Миронов 1988.