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


 

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

21945. ВИМІРЮВАННЯ ДОВЖИНИ ЛІНІЙ 1.36 MB
  Методи та прилади лінійних вимірювань Залежно від наявності приладів вимог точності умов місцевості лінії вимірюють способами: а прямим або безпосереднім способом за допомогою мірних стрічок рулеток підвісних мірних проволок та інших лінійних приладів; б непрямим або посереднім способом за допомогою ниткових віддалемірів та електрооптичних приладів світло та радіовіддалемірів геометричних побудов фігур на місцевості. Між закріпленими на місцевості точками А і В в створі лінії послідовно укладають мірний прилад. Створ лінії утворює...
21946. ВИМІРЮВАННЯ ПЕРЕВИЩЕНЬ 3.47 MB
  Види нівелювання Перевищенням називають різницю висот точок земної поверхні або будівельних конструкцій. Нівелювання вид геодезичних робіт для вимірювання перевищень між точками земної поверхні або споруд. За методами розрізняють такі види нівелювання [1]: Геометричне використовується принцип горизонтальності візирного променя зорової труби. В інженернобудівельній справі переважно використовуються: геометричне тригонометричне та гідростатичне нівелювання.
21947. Геодезичні розмічувальні роботи при плануванні та зведені інженерних споруд 1.67 MB
  Розмічування виконують в такій послідовності: 1 В точці А встановлюють теодоліт приводять в робоче положення і за ходом годинникової стрілки відкладають величину проектного кута . графічно зображено розмічування точки D з вихідного пункту В.Спосіб лінійної засічки Точка С в способі розмічування лінійною засічкою визначається перетином дуг проектних відстаней d1 і d2 віддалених від двох опорних пунктів A і В рис. Спосіб GPSрозмічування Використання GPSприймачів дозволяє визначати координати точок на земній поверхні та на поверхні...
21948. ГЕОДЕЗИЧНІ РОБОТИ ПРИ МОНТАЖІ ЕЛЕМЕНТІВ БУДІВЕЛЬНИХ КОНСТРУКЦІЙ 1.06 MB
  ГЕОДЕЗИЧНІ РОБОТИ ПРИ МОНТАЖІ ЕЛЕМЕНТІВ БУДІВЕЛЬНИХ КОНСТРУКЦІЙ Розглянувши елементи та методи інженерногеодезичних робіт розглянемо методику геодезичного забезпечення встановлення елементів будівельних конструкцій в проектне положення. Завдання та зміст геодезичних робіт При проведенні монтажних робіт встановлюють в проектне положення елементи та вузли будівельних конструкцій: фундаменти колони панелі цегляні стіни балки плити перекриття тощо. У промислових спорудах після монтажу будівельних конструкцій у проектне положення...
21949. ІНЖЕНЕРНО-ГЕОДЕЗИЧНІ ВИШУКУВАННЯ ЛІНІЙНИХ СПОРУД 3.34 MB
  Комплекс інженерногеодезичних робіт по вибору найбільш оптимальної економічно обґрунтованої траси називають трасуванням. Проектування траси лінійної споруди по топографічним картах і планам називають камеральним трасуванням. Вибір траси безпосередньо на місцевості називають польовим трасуванням.1 виходячи із дотримання граничного ухилу траси.
21950. ОРГАНІЗАЦІЯ ІНЖЕНЕРНО-ГЕОДЕЗИЧНИХ РОЗМІЧУВАЛЬНИХ РОБІТ 5.04 MB
  Організація інженерногеодезичних робіт Для геодезичного забезпечення будівельної галузі в системі Міністерства будівництва архітектури та комунального господарства України повинна бути створена державна Геодезична служба в будівництві ДГСБ. Вона повинна законодавчо відповідати за стан якість виконання інженерногеодезичних робіт в будівництві бути керівним органом по створенню нормативнотехнічних документів НТД. В системі Держбуду інших міністерствах і відомствах повинні бути створені підрозділи ДГСБ які б виконували керівні та...
21951. Виды и стадии инженерно-геологических изысканий 184.22 KB
  Виды и стадии инженерногеологических изысканий 1. Инженерногеологическая рекогносцировка. Инженерногеологическая съемка. Инженерногеологическая разведка.
21952. ОСОБЕННОСТИ ИНЖЕНЕРНО-ГЕОЛОГИЧЕСКИХ ИССЛЕДОВАНИЙ ДЛЯ РАЗЛИЧНЫХ ВИДОВ СТРОИТЕЛЬСТВА 260.31 KB
  ОСОБЕННОСТИ ИНЖЕНЕРНОГЕОЛОГИЧЕСКИХ ИССЛЕДОВАНИЙ ДЛЯ РАЗЛИЧНЫХ ВИДОВ СТРОИТЕЛЬСТВА. ИНЖЕНЕРНОГЕОЛОГИЧЕСКИЕ ИССЛЕДОВАНИЯ ДЛЯ ПРОМЫШЛЕННОГО И ГРАЖДАНСКОГО СТРОИТЕЛЬСТВА I. Инженерногеологические исследования при выборе строительной площадки выполняемые с целью сравнительной оценки возможных вариантов ее размещения первая стадия изысканий включают в себя проведение следующих работ. Инженерногеологическая рекогносцировка.
21953. ТЕХНИЧЕСКАЯ МЕЛИОРАЦИЯ ПОРОД. Отчетные инженерно-геологические материалы 229.19 KB
  Отчетные инженерногеологические материалы. ПРЕДМЕТ И ЗАДАЧИ ТЕХНИЧЕСКОЙ МЕЛИОРАЦИИ ПОРОД Главная задача грунтоведения и инженерной геологии заключается в оценке геологической обстановки сопровождающейся прогнозом инженерногеологических процессов и явлений применительно к требованиям различных видов производственной деятельности человека. В случае отрицательного прогноза в комплекс инженерногеологических работ входит выбор наиболее рациональных способов борьбы с неблагоприятными процессами и явлениями. Различают мероприятия двух типов: 1...