8. структуры с и классы студент гр. 2183 Алексеев А. С
![]()
|
МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧСЕКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра РЭС ОТЧЕТ По лабораторной работе №5 По дисциплине «Информатика» Тема: 8. СТРУКТУРЫ С++ И КЛАССЫ Студент гр. 2183 _______________ Алексеев А. С. Преподаватель _______________ Ситников И. Ю. Санкт-Петербург 2022 Содержание Спецификация задания…………………………………………………………...3 Описание алгоритма……………………………………………………………....4 Блок Схема ………………………………………………………...……………5-6 Выбор и обоснование переменных………………………………………………7 Вводимые и выводимые параметры и их типы……………………………….7 Структура проекта, перечень нужных файлов………………………………….7 Синтаксический разбор текста………………………………………………..8-10 Контрольный пример…………………………………….…………………..10-11 Результаты лабораторной работы………………………………………………11 СПЕЦИФИКАЦИЯ ЗАДАНИЯ 1. С использованием двух классов создать консольное приложение для записи телефонной книжки. 2. Ввод записей осуществлять, пока не будет введен телефонный номер «0». 3. Выводить записи телефонной книжки в таблицу в алфавитном порядке: − порядковый номер; − ник; − телефон. 4. Таблицу выводить построчно. 5. Использовать библиотеку и общее с лабораторными № 3–4 решение. Описание алгоритма Зацикливаем главную функцию main что б она срабатывала пока пользователь не введет 0 вместо номера, когда пользователь вводит номер он записывает в массив [i][], затем проходит проверку посимвольно на наличие иных символов(разрешены только цифры) . После запрашивается ник который так же записывается в своей массив. Инициализируем два класса “Родитель” и второй “потомок”. 2.1) Родитель называется «variables», инициализирован как «var» и содержит в себе переменные 2.2) Потомок называется «funks» инициализирован как «fun» и содержит в себе необходимые функции и использует переменные от родителя. Если в номер введен 0, то вызывается функция из класса которая выводит все номера в алфавитном порядке по нику в формате порядковый номер: ник: номер, номера выводятся с выравниванием. После вывода, программа заканчивается с кодом 0. БЛОК СХЕМЫ АЛГОРИТМОВ MAIN: ![]() Рисунок 1. Схема для main COUTION: ![]() Рисунок 2. Схема для coution ВЫБОР И ОБОСНОВАНИЕ ТИПОВ ПЕРЕМЕННЫХ Хранение в двумерных массивах типа char [100] []- хранит как цифры так и символы, еще и в строчном виде, из аналогов только std::string. Так как в данной лабораторной работе не предусмотрено хранение в tht. Было решено оставить максимальное кол-во 100, так как динамичные массивы не были изучены. Переменные «счётчики» типа int Два класса: «variables содержит в себе переменные, и класс потомок «funks» содержит в себе необходимые функции и использует переменные от родителя ВВОДИМЫЕ И ВЫВОДИМЫЕ ПАРАМЕТРЫ И ИХ ТИПЫ Ввод в программе происходит только в двух ситуациях: Пользователь вводит только данные типа char[][] Выводятся переменные типа char, а так же нумерация происходит переменными int СТРУКТУРА ПРОЕКТА, ПЕРЕЧЕНЬ НУЖНЫХ ФАЙЛОВ Программа разрабатывается в современной среде разработки Microsoft Visual Studio 2022. Написана на языке C++. Программа состоит из файлов: prot.cpp variables.h Tекст программы и файлов заголовков с комментариями, синтаксический разбор текста в комментариях labka5.cpp: #include #include #include "classik.h"// подключение класса int main() { setlocale(LC_ALL, "Russian");// русский язык SetConsoleCP(1251); //функция SetConsoleOutputCP(1251); //функция variables var;// объект var funks fun;// объект fun int i = 0; //переменная счеткик while (true) { std::cout << "Введите номер телефона, либо 0 что б вывести введенные номера и закончить программу:"; std::cin >> var.numbers[i];// ввод номера system("cls"); //очистка консоли if (var.numbers[i][0] == '0')//проверка на запрос вывода номеров { fun.coution(var.nik, i, var.numbers);//вызов функции и передача в нее аргументов return 0; } int n = 20; // переменная счетчик необходимая для удаления ошибочных символов for (int kl = 0; kl < n; kl++) //цикл проверки номеров на ошибки { if (var.numbers[i][kl] >= 32 && var.numbers[i][kl] <= 47 || var.numbers[i][kl] >= 58) { // ветвление сравнения for (long g = kl; g < n; g++) // цикл удаления симола где (kl) удаляемый { var.numbers[i][g] = var.numbers[i][g + 1]; // перезапись массива без ошбики kl--; // массив уменьшился за счет удаленного символа } n--; //счеткчик для завершения цикла } } std::cout << "Введите ник номера (" << var.plus << var.numbers[i] << "):"; std::cin >> var.nik[i];//ввод ника std::cout << "Номер записан!\n" << var.nik[i] << ":" << var.plus << var.numbers[i] << std::endl;//вывод ника i++;// счет для ввода данных в массив } } classik.h:: #include #include class variables //создание класса { public:// публичный модификатор char plus = '+'; char numbers[100][20]; char nik[100][20]; }; class funks :variables //создание дочернего класса { public:// публичный модификатор void coution(char nik[100][20], int size, char numbers[100][20]) { //void функция int q = 0; int w = 0; // неоходимые переменные int e = 0; for (int i = 0; i < size; i++) //цикл по количеству циклов сравнения/обмена { w = i; //умный счетчик для цикла for (e = i; e < size; e++) //цикл сравнения { if (nik[w][0] > nik[e][0]) //ветвления для смена мест { w = e; } } std::swap(nik[i], nik[w]); std::swap(numbers[i], numbers[w]); // логическая смена мест } int k = 1; //счетчик для строк for (int j = 0; j < size; j++)// цикл выводяший массив { int a; a = strlen(nik[j]); // определения длинны строки для дальнейшего выравнивания std::cout << k << ") " << nik[j] << ": " << std::setw(20 - a) << plus << numbers[j] << "\n";// вывод данных k++; } } }; Контрольный пример Рисунки 3(a, b, c, d). Примеры ввода данных Рисунок 4. Примеры вывода данных РЕЗУЛЬТАТЫ ЛАБОРАТОРНОЙ РАБОТЫ Приложение разработано по поставленной задаче для ОП Windows(7:11) Все исключения обработаны Тип приложения «Консольный» C:\Users\ Arseniy \OneDrive\Рабочий стол\инфор\prot\prot.sln Достоинства: Простота. Недостатки: не замечены |