Массивы структур и массивы строк

1. Цель работы:

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

2. Получить практические навыки работы со структурами.

3. Получить практические навыки организации динамических массивов с элементами сложной структуры.

Теоретические сведения

Структуры

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

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;

}

Постановка задачи

1. Сформировать динамический массив из элементов структурного типа. Структурный тип определен в варианте.

2. Распечатать сформированный массив.

3. Выполнить поиск элементов в массиве, удовлетворяющих заданному в варианте условию и сформировать из них новый массив.

4. Распечатать полученный массив.

5. Сформировать динамический массив, состоящий из динамических строк.

6. Распечатать сформированный массив.

7. Выполнить обработку этого массива.

8. Распечатать полученный массив.

Варианты

№ варианта Структура Критерий для поиска в массиве структур Задание для обработки массива строк
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 }; Студены пятого курса Удалить строки, начиная со строки К1 и до строки К2
struct employee { char*name; float salary; int stage }; Сотрудники со стажем меньше 3 лет Добавить строки, начиная со строки К1 и до строки К2
struct pupil { char*name; int age; float rating }; Ученики со средним баллом равным 4.5 Удалить все строки, которые начинаются на букву ‘F’
struct person { char*name; int age; }; Имена начинаются на букву ‘A’ Удалить все четные строки
struct date { int day; char*month; int year; }; Даты с зимними месяцами Удалить все строки, в которых есть хотя бы одна цифра
struct student { char*name; int kurs; float rating }; Студенты первого курса у которых рейтинг меньше 3 Удалить все столбцы, в которых есть хотя бы одна буква ‘A’
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 года Добавить К строк, начиная со строки с номером N
struct student { char*name; int kurs; float rating }; Студенты 1 и 2 курса, у которых рейтинг меньше 3 Удалить К строк, начиная со строки с номером N
struct employee { char*name; float salary; int stage }; Сотрудники, у которых имя начинается на букву ‘Л’ и заработная плата меньше 6000 Добавить строку после самой длинной строки массива
struct pupil { char*name; int age; float rating }; Ученики, у которых фамилия “Иванов” и рейтинг больше 4 Добавить строку после самой короткой строки массива

Методические указания

1. Для выделения памяти под массивы использовать операцию new, для удаления массивов из памяти – операцию delete.

2. Для формирования и печати структур написать отдельные функции:

person make_person()

{

int Age; char Name[20];

cout<<"Name?";

cin>>Name;

cout<<"Age?";

cin>>Age;

person p;

p.name=new char[strlen(Name)+1];

strcpy(p.name,Name);

p.age=Age;

return p;

}

void print_person(person p)

{

cout<<"\nName: "<<p.name<<"\t"<<"Age: "<<p.age;

}

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

5. Если в массиве отсутствуют элементы, соответствующие критерию поиска, то должно быть выведено сообщение о том, что требуемые элементы не найдены.

6. При удалении строк предусмотреть ситуации, в которых будет выполняться попытка удаления строки из пустого массива или количество удаляемых элементов будет превышать количество имеющихся строк. В этом случае должно быть выведено сообщение об ошибке.

Содержание отчета

  1. Постановка задачи (общая и для конкретного варианта).
  2. Определения функций для реализации поставленных задач.
  3. Определение функции main().
  4. Тесты

Лабораторная работа №7

Функции в С++

1. Цель работы:

1) Получить практические навыки работы с функциями;

2) получить практические навыки работы с шаблонами функций;

3) получить практические навыки работы с указателями функций.

Теоретические сведения

Наши рекомендации