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


 

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

37034. В ГОСТЯХ У СКАЗОК БРАТЬЕВ ГРИММ 84.86 KB
  Und ds ist mein Zuberstock. lle zuschuen Wer ist ds Heinz ist ful Ist Heinz ful Wie ist Heinz Он любит много спать и много есть совсем не любит работать. Nennt lle Lebensmittel die Heinz mg Дети: Ds ist У. Rtet ws er will Дети задают вопросы типа: Ist ds Kse Вот так мечтая о благополучии и вкусной пище но не работая Гейнц лишился козы которая у него была улья с пчелами и даже последнего горшка с медом.
37035. Дети войны. Последние свидетели 73.5 KB
  Оборудование: плакаты компьютер мультимедийный проектор фотографии военных лет Презентация 1 отрывок из документального фильма Дети войны. Презентация 1. Слайд 1 Презентация 1. Презентация 1.
37036. Дружба в нашем классе 36.5 KB
  Вводная часть Здравствуйте ребята Вы же помните первый классный час который мы у вас проводили На какую тему он был Ответы детей Да ребятаон был про дружбу. Не имей 100 рублей а Старый друг лучше Нет друга – ищи а Друг познаётся А знаете ли вы ещё какиенибудь пословицы о дружбе Ответы детей Молодцы ребята – Считаете ли вы свой класс дружным Ответы детей – Что нужно сделать для того чтобы все в классе жили дружно Ответы детей Ребята для этого нужно уважать и помогать друг другу. одноклассники...
37037. СКАЖИ ТЕЛЕФОНУ ДОВЕРИЯ ДА! 192.5 KB
  Информировать учеников о том для чего предназначен и как работает Телефон доверия 2.Мотивировать обращение за помощью на Телефон доверия в трудных жизненных ситуациях ЗАДАЧИ: 1.Рассказать о Телефоне доверия как о виде психологической помощи 2.
37038. Вред курения 56 KB
  Судья Займите свое место. Итак внимание: суд идет Судья: Начинаем наше судебное заседание. Ввести подсудимую Входит сигарета Судья: У нас присутствуют со стороны защиты: Табак рода многолетних трав из семейства пасленовых. Судья:Не понятно что Владимир Иванович Даль имел в виду.
37039. Думаем о будущем сегодня. Классный час о вреде курения 47 KB
  Откуда же пришла к нам эта напасть Из истории табака О курении табака европейцам стало известно после открытия Америки Христофором Колумбом. привез листья табака из Лиссабона для Екатерины Медичи. Вследствие неумеренного курения табака появились случаи отравления что побудило власти к преследованию курения.
37040. Общение в моей жизни 62.5 KB
  КОНСПЕКТ ЗАЧЕТНОГО ВНЕКЛАССНОГО ВОСПИТАТЕЛЬНОГО МЕРОПРИЯТИЯ Францкевич Алина Алексеевна ФРЯиЛ 4 курс 2 группа Гимназия № 62 7 Г класс Общение в моей жизни Практикум занятие с элементами практических упражнений и последующим их обсуждением; ролевая игра. Цель: дать первоначальное представление о значении общения в жизни человека; воспитать необходимых для жизни в современном социуме качеств личности; охарактеризовать общение как своеобразную деятельность. Задачи: познакомить с различными формами общения; формировать...
37041. Классный час «Правила этикета» 46 KB
  Ход классного часа: Преподаватель:ЗдравствуйтедетиСегодня у нас не обычный внеклассный часа урокигракоторая называется Мастерская этикета. Преподаватель:что нужно сделать перед началом урокавикториныну конечно же разминку. Преподаватель:Хорошоа теперь познакомимся с Нехочухойнашим домовёнкомкоторый ничего не знает об этикетевывешивает на доску изображение толстенького домовенкаименно он поможет нам ответить на этот вопрос Ученикам раздаются карточки с одним словомкоторое содержится в понятии этикет....