Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кашина_СП_ЛБ7

.docx
Скачиваний:
0
Добавлен:
22.09.2026
Размер:
184 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«Владимирский государственный университет

имени Александра Григорьевича и Николая Григорьевича Столетовых» (ВлГУ)

Колледж инновационных технологий и предпринимательства

КАФЕДРА ФИЗИКИ И ПРИКЛАДНОЙ МАТЕМАТИКИ

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

по дисциплине «Системное программирование»

на тему: «Указатели на структуры»

Выполнил

студент группы ИПсп-123

Кашина Д. А.

Принял

Красильщикова В. В.

Владимир, 2026

Цель: восстановление и расширение навыков работы со структурами данных и указателями на языке С++.

Задание 1:

Код программы:

#include <iostream>

#include <string>

#include <clocale>

#include <Windows.h>

using namespace std;

// Описание структуры Person

struct Person {

string lastName;

string firstName;

int age;

string gender;

};

int main() {

// Установка русской локализации

setlocale(LC_ALL, "Russian");

// Для корректного ввода/вывода русских строк в консоли Windows

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int n;

cout << "Введите количество человек: ";

cin >> n;

cin.ignore(); // очистка буфера после cin

// Создаём динамический массив указателей

Person** people = new Person * [n];

// Заполнение массива

for (int i = 0; i < n; i++) {

people[i] = new Person; // выделяем память под структуру

cout << "\n--- Ввод данных о человеке " << i + 1 << " ---\n";

cout << "Фамилия: ";

getline(cin, people[i]->lastName);

cout << "Имя: ";

getline(cin, people[i]->firstName);

cout << "Возраст: ";

cin >> people[i]->age;

cin.ignore();

cout << "Пол (Мужской/Женский): ";

getline(cin, people[i]->gender);

}

// Ручная сортировка пузырьком по возрастанию (фамилия + имя)

for (int i = 0; i < n - 1; i++) {

for (int j = 0; j < n - i - 1; j++) {

// Сравниваем фамилии

if (people[j]->lastName > people[j + 1]->lastName) {

// Меняем местами указатели

Person* temp = people[j];

people[j] = people[j + 1];

people[j + 1] = temp;

}

// Если фамилии равны, сравниваем имена

else if (people[j]->lastName == people[j + 1]->lastName) {

if (people[j]->firstName > people[j + 1]->firstName) {

Person* temp = people[j];

people[j] = people[j + 1];

people[j + 1] = temp;

}

}

}

}

// Вывод отсортированного списка

cout << "\n--- Отсортированный список (фамилия + имя по возрастанию) ---\n";

for (int i = 0; i < n; i++) {

cout << i + 1 << ". " << people[i]->lastName << " "

<< people[i]->firstName << ", " << people[i]->age

<< " лет, " << people[i]->gender << endl;

}

// Освобождение памяти

for (int i = 0; i < n; i++) {

delete people[i];

}

delete[] people;

return 0;

}

Результат работы программы

Блок схема

Вывод: в ходе выполнения лабораторной работы были восстановлены и расширены навыки работы со структурами данных и указателями на языке С++.

Соседние файлы в предмете Системное программирование