Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Структуры и указатели




Динамические структуры данных

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

 

Цель работы – получить практические навыки работы с динамическими структурами данных.

 

Теория

Структуры

Структура – это объединенное в единое целое множество поименованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена.

 

Пример

struct Date //определение структуры

{

int day;

int month;

int year;

};

Date birthday; //переменная типа Date

 

Для переменных одного и того же структурного типа определена операция присваивания. При этом происходит поэлементное копирование.

Доступ к элементам структур обеспечивается с помощью уточненных имен:

 

имя_структуры.имя_элемента

 

Пример

//присваивание значений полям переменной birthday

birthday.day=11;

birthday.month=3;

birthday.year=1993;

Date Data;

//присваивание значения переменной birthday переменной Data

Data=birthday;

 

Из элементов структурного типа можно организовывать массивы также как из элементов стандартных типов.

 

Пример

Date mas[15]; //массив структур

//ввод значений массива

for (int i=0;i<15;i++)

{

cout<<”\nEnter day:”;cin>>mas[i].day;

cout<<”\nEnter month:”;cin>>mas[i].month;

cout<<”\nEnter year:”;cin>>mas[i].year;

}

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

Фактически указатели на структуры так часто используются в Си++, что существует специальный символ для ссылки на элемент структуры, адресованной указателем.

 

Пример

#include <iostream.h>

#include <string.h>

typedef struct worker

{

char name[15];

char sonname[15];

char duty[15];

int sum;

};

main()

{

worker *p;

strcpy(p->name, "Василий);

strcpy(p->sonname, "Иванов");

strcpy(p->duty, "разнорабочий");

p->sum=10;

cout <<"имя фамилия должность зарплата\n";

cout<<p->name<<“ ”<<p->surname<<“ ”<<p->duty<<“ ”<<p->sum);

}

 

В этом варианте p объявляется как указатель типа worker, а не как переменная типа worker. Теперь, когда вы ссылаетесь на элементы p, используйте конструкцию: имя_указателя -> элемент_структуры Символ -> означает, что "элемент структуры направлен в..."; это сокращенный вариант от точно такой же по смыслу конструкции (*имя_указателя).элемент_структуры, принятый в Си++.

 

Линейный однонаправленный список

Описание простейшего элемента такого списка выглядит следующим образом:

 

struct имя_типа

{

информационное поле;

адресное поле;

};

 

Информационное поле (данные) – это поле любого, ранее объявленного или стандартного, типа; адресное поле – это указатель на объект того же типа, что и определяемая структура, в него записывается адрес следующего элемента списка.

Информационных полей может быть несколько.

 

информа-ционное поле адресное поле           информа-ционное поле NULL

Рис. 10

Пример

1. struct Node

{

int key;//информационное поле

Node*next;//адресное поле

};

2. struct point

{

char*name;//информационное поле

int age;//информационное поле

point*next;//адресное поле

};

 

Каждый элемент списка содержит ключ, который идентифицирует этот элемент. Ключ обычно бывает либо целым числом (1.), либо строкой (2.).

 

Задание

1. Запустите C++Builder 6.0.

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

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

4. Выполните компиляцию программы. При наличии ошибок внесите исправления.

5. Сдайте отчет преподавателю.

Варианты

Структура Критерий для поиска в массиве структур
  struct person {char*name; char *adres; int age;}; Имена начинаются на букву ‘A’
  struct date {int day; char*month; int year;}; Даты с летними месяцами
  struct student {char*name; int kurs; float rating}; Студенты первого курса
  struct employee {char*name; float salary; int stage}; Сотрудники со стажем больше 10 лет
  struct pupil {char*name; int age; float rating;}; Ученики со средним баллом больше 4
  struct person {char*name; int age;}; Возраст больше 25 лет
  struct date {int day; char*month; int year;}; Даты после 2000 года
  struct student {char*name; int kurs; float rating;}; Студенты, у которых рейтинг меньше 3
  struct employee {char*name; float salary; int stage;}; Сотрудники, у которых имя начинается на букву ‘Л’
  struct pupil {char*name; int age; float rating;}; Ученики, у которых фамилия “Иванов”

 

Продолжение табл.

Структура Критерий для поиска в массиве структур
  struct person {char*name; int age;}; Возраст меньше 18
  struct date {int day; char*month; int year;}; Дата принадлежит первой декаде месяца
  struct student {char*name; int kurs; float rating;}; Студены пятого курса
  struct employee {char*name; float salary; int stage;}; Сотрудники со стажем меньше 3 лет
  struct pupil {char*name; int age; float rating;}; Ученики со средним баллом равным 4.5
  struct person {char*name; int age;}; Имена начинаются на букву ‘A’
  struct date {int day; char*month; int year;}; Даты с зимними месяцами
  struct student {char*name; int kurs; float rating;}; Студенты первого курса, у которых рейтинг меньше 3
  struct employee {char*name; float salary; int stage;}; Сотрудники со стажем больше 10 лет и заработной платой больше 15000
  struct pupil {char*name; int age; float rating;}; Ученики 13 лет со средним баллом больше 4
  struct person {char*name; int age;}; Возраст больше 25 лет и фамилия начинается на букву ‘C’

 

 

Продолжение табл.

Структура Критерий для поиска в массиве структур
  struct date {int day; char*month; int year;}; Зимние даты после 2000 года
  struct student {char*name; int kurs; float rating;}; Студенты 1 и 2 курса, у которых рейтинг меньше 3
  struct employee {char*name; float salary; int stage;}; Сотрудники, у которых имя начинается на букву ‘Л’ и заработная плата меньше 6000
  struct pupil {char*name; int age; float rating;}; Ученики, у которых фамилия “Иванов” и рейтинг больше 4

 





Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 935; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.