Кашина_СП_ЛБ7
.docxМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
«Владимирский государственный университет
имени Александра Григорьевича и Николая Григорьевича Столетовых» (ВлГУ)
Колледж инновационных технологий и предпринимательства
КАФЕДРА ФИЗИКИ И ПРИКЛАДНОЙ МАТЕМАТИКИ
Лабораторная работа № 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;
}
Результат работы программы
Блок схема
Вывод: в ходе выполнения лабораторной работы были восстановлены и расширены навыки работы со структурами данных и указателями на языке С++.
