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


 

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

57950. Розв’язування ірраціональних рівнянь 168.5 KB
  Запитання: Скільки розв’язків має рівняння один Корінь якого степеня існує із будьякого числа непарного Як називають корінь третього степеня кубічний Скільки розв’язків має рівняння якщо 0 два Як називається рівняння в якому змінна знаходиться під знаком кореня ірраціональне Як називається корінь рівняння який одержується в результаті нерівносильних перетворень сторонній...
57951. НАСЕЛЕННЯ ТА ДЕРЖАВИ ПІВДЕННОЇ АМЕРИКИ 41.5 KB
  Мета: поглибити та систематизувати знання про освоєння території материка походження та формування населення материка його кількість склад та розміщення; ознайомити з політичною картою Південної Америки...
57952. Географія материків та океанів 87 KB
  За картою географічних поясів та природних зон визначте природні зони Північної Америки та вкажіть зони що займають найбільшу площу. Але окремі природні зони ми з вами ще ніколи не розглядали крім того сьогодні ви довідаєтесь чому особливе місце в розподілі природних комплексів материка належить рельєфу та впливу океану.
57953. Подорож героїв казки Г.К. Андерсена «Снігова Королева» по країні Синтаксис 221 KB
  Але перш ніж розпочати наш урок пропонуємо вам визначити капітана кожної команди експерта який буде слідкувати за роботою кожного учня в групі а також визначитися із назвою команди клас розподілений на 3 команди.
57954. Англія. Бінарний урок всесвітньої історії – англійської мови 180.5 KB
  Мета: Всесвітня історія ознайомити учнів з особливостями розвитку капіталістичних відносин в Англії особливостями Реформації в Англії та основними напрямками зовнішньої політики в 16 ст. Після уроку учні зможуть: Називати час правління Єлизавети...
57955. Антарктида 80 KB
  Мета навчальна: закріпити та узагальнити знання і вміння учнів з теми: «Антарктида»; поглибити їх знання за допомогою цікавих фактів про вивчений об’єкт, вдосконалювати вміння та навички роботи з картою, формувати нестандартне мислення...
57956. Антарктида і Антарктика. Загальні відомості. Відкриття та сучасні наукові дослідження 248 KB
  Сформувати поняття «Антарктика»; сприяти формуванню в учнів знань про географічне положення; поглибити і систематизувати знання про відкриття та сучасні дослідження Антарктиди в рамках міжнародного співробітництва; продовжити формування навичок встановлювати закономірності поширення природних умов
57957. Антарктида. Своєрідність географічного положення. Відкриття материка. Льодовиковий покрив 33 KB
  Мета уроку: дати поняття Антарктика и Антарктида льодовий материк планети; вивчити загальні відомості про материк: своєрідність ГП материка його розміри; розглянути відкриття Антарктиди та сучасні наукові дослідження материка...
57958. встралия – самый маленький материк Земли 60.5 KB
  Перед началом соревнования вам ребята надо потренироваться повторить изученный материал о природе Австралии. На протяжении трех уроков вы составляли вопросы об особенностях природы Австралии теперь у вас есть возможность задать их своим одноклассникам и выслушать ответы. Какой остров расположен к северу от Австралии Правила игры: В течение изучения материка ученики составляют вопросы по параграфам. По плану ФГП ученики сравнивают физикогеографическое положение Австралии с ФГП...