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.  Написать программу, выполняющую следующие действия:
  •  ввод с клавиатуры данных в массив экземпляров структур, состоящий из пяти записей;
  •  поиск информации о магазинах, в которых есть товар, название которого введено с клавиатуры;
  •  поиск информации о магазинах, в которых есть товар, название которого ведено с клавиатуры, со стоимостью, не превышающей значение, введенное с клавиатуры.


 

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

18929. СМИ как главное звено в системе взаимодействия ПР-специалиста с общественностью 66 KB
  СМИ как главное звено в системе взаимодействия ПРспециалиста с общественностью Механизм отношений служб ПР со СМИ является связующим звеном для всех сфер деятельности т. к. именно через СМИ устанавливается обратная связь отражая состояние общественного мнен
18930. Развитие информационно-коммуникационных технологий (ИКТ) в России 127 KB
  Развитие информационно-коммуникационных технологий ИКТ в России Эволюция информационно-коммуникационных технологий ИТК: новые структуры сетей Информационно коммуникационные технологии ИКТ Information and Communication Technologies ICT Совокупность методов производст
18931. Государственная служба как открытая система. «Электронное правительство» 201 KB
  Государственная служба как открытая система. Электронное правительство Слово служба имеет много значений. Под службой понимается и вид деятельности людей и ведомственное подразделение служба уголовного розыска МВД и др. и самостоятельное ведомство федеральна...
18932. Изучение общественного мнения в ходе избирательной кампании: количественные и качественные подходы 35.5 KB
  Изучение общественного мнения в ходе избирательной кампании: количественные и качественные подходы. Специалисты по стратегическому планированию избирательных кампаний советуют начинать со сбора информации: Успех стратегии зависит от проведения исследований. По
18933. Сущность политического консультирования: ключевые понятия, основные виды, функции 91 KB
  Сущность политического консультирования: ключевые понятия основные виды функции Следует отметить что политическое консультирование долгое время составляло теневую скрытую от общественности сторону политических процессов. Лицевая сторона процесса обычно предс...
18934. Сущность и типология политической культуры. Виды политического участия 47.5 KB
  Сущность и типология политической культуры. Виды политического участия Политическая культура – составная часть общей культуры совокупный показатель политического опыта качества политических знаний и предпочтений образцов поведения и функционирования политичес
18935. Массовая коммуникация и тенденции мирового развития. Понятия «медиакультура» и «информационное общество» 34.5 KB
  Массовая коммуникация и тенденции мирового развития. Понятия медиакультура и информационное общество Массовая коммуникация – систематическое распространение сообщений среди численно больших аудиторий с целью воздействия на оценки мнения и поведения людей. Масс...
18936. Реальная и потенциальная аудитория средств массовой коммуникации. Социологические способы изучения коммуникативного поведения аудитории 30 KB
  Реальная и потенциальная аудитория средств массовой коммуникации. Социологические способы изучения коммуникативного поведения аудитории Реальным физическим объектом социологического изучения аудитории СМИ являются массы людей различные общественные группы в...
18937. Социологический подход к общественному мнению 38 KB
  Социологический подход к общественному мнению. Распространенное представление об общественном мнении сводится к тому что оно является простой совокупностью отдельных точек зрения по тому или иному вопросу. Этот подход к определению общественного мнения который мо...