итоговый отчет 1. Лабораторная работа 2 Классы. Основы 12 Лабораторная работа 3 Классы. Инкапсуляция 16
Скачать 129.17 Kb.
|
Министерство науки и высшего образования Российской Федерации федеральное государственное бюджетное образовательное учреждение высшего образования «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им. Н. П. ОГАРЕВА» Факультет математики и информационных технологий Кафедра систем автоматизированного проектирования ОТЧЁТ ПО ЛАБОРАТОРНЫМ РАБОТАМ по дисциплине: Объектно-ориентированное программирование Автор отчёта по лабораторным работам Е. А. Охотников подпись, дата Обозначение отчёта по лабораторным работам ЛР-02069964-090304-09-21 Направление подготовки 09.03.04 Программная инженерия Руководитель работы канд. техн. наук, доц А. В. Шамаев подпись, дата Саранск 2021 СодержаниеЛабораторная работа №2 Классы. Основы 12 Лабораторная работа №3 Классы. Инкапсуляция 16 Лабораторная работа №4 Приведение типов. RTTI 25 Лабораторная работа №5 Наследование. Полиморфизм 30 Цель работы:приобретение практических навыков использования основных языковых конструкции, операторов ввода-вывода и передачи переменных в функции по значению, по ссылке и по указателю на языках программирования C++ и С. Задание для работы Составить программу, определяющую принадлежности точки (x,y) области заданной конфигурации, выделенной на рисунке 1.1 серым цветом. Составленная программа должна включать реализацию трех функций: функции ввода пользователем координат точки (x,y); функция определения принадлежности точки заданной области; функция вывода результата для демонстрации решения задачи. Рисунок 1.1 – Область заданной конфигурации В функцию ввода переменные должны передаваться тремя способами: по значению; по ссылке; по указателю. Код программы на языке C Передача параметров с использованием ссылок не может быть продемонстрировано в программах, написанных на языке С, так как данный язык не поддерживает концепцию ссылок и ссылочный тип. Для цели передачи значения через параметр функции в языке С используется концепция указателя. В результате выполнения задания была разработана программа на языке С. Она представлена в виде проекта, состоящего из четырех файлов с расширением *.c и трёх заголовочных файлов (с расширением *.h), код которых приведен ниже: //файл input.h #ifndef inputs #define inputs double limitedInput(const char coordinateName); double input1(const char coordinateName); void input2(double* x, const char coordinateName); #endif //файл input.c #include "StdAfx.h" #include #include "input.h" #include #include #include bool valid_string_to_double(const char *s) { char *end; strtod(s, &end); return s != end; } double limitedInput(const char coordinateName) { printf("Введите значение координаты %c",coordinateName); printf(", принадлежащее диапазону [-2;2].\n"); double value; while(1) { scanf("%lf",&value); if (fabs(value)>2) printf("Введенное значение не принадлежит диапазону [-2;2]! Повторите ввод. \n"); else break; } printf("Значение координаты %c",coordinateName); printf("=%lf",value); printf(" принято. \n"); return value; } double input1(const char coordinateName) { return limitedInput(coordinateName); } void input(double& x, const char coordinateName) { x=limitedInput(coordinateName); } void input2(double* x, const char coordinateName) { *x=limitedInput(coordinateName); } //файл check_the_arrea.h #ifndef check_the_arrea #define check_the_arrea bool check_arrea(float x, float y); #endif //файл check_the_arrea.c #include "StdAfx.h" #include "check_the_arrea.h" int check_arrea(float x, float y) { if (((x>=-1)&&(x<=1))&&((y>=-1)&&(y<=1))) return 0; return 1; } //файл get_result.h #ifndef get_result #define get_result void getresult(bool answer); #endif //файл get_result.c #include "StdAfx.h" #include "get_result.h" #include #include void getresult(bool answer) { if (answer) printf("Вывод: точка попадает в заштрихованную область. \n"); else printf("Вывод: точка НЕ попадает в заштрихованную область. \n"); } //файл main.c #include "stdafx.h" #include #include #include "input.h" #include "check_the_arrea.h" #include "get_result.h" void menu() { char a='x',b='y'; double x,y; int value_of_choice, doubt; system("chcp 1251"); // переходим в консоли на русский язык system("cls"); // очищаем окно консоли printf("Вы находитесь в программе, которая определяет принадлежность точки (x, y) заданной области. \n"); printf("x и y принадлежат промежутку [-2;2] \n"); do { printf("Меню способов ввода координат точки (x, y) \n"); printf("1 - передача параметров по значению. \n"); printf("2 - передача параметров через указатель. \n"); printf("3 - выход. \n"); printf("Введите выбранный вами пункт: \n"); scanf("%d",&value_of_choice); switch (value_of_choice) { case 1: { printf("Передача параметров по значению\n"); x=input1(a); y=input1(b); printf("Введенные вами координаты точки (%lf",x); printf(",%lf",y); printf(")\n"); getresult(check_arrea(x,y)); break; } case 2: { printf("Передача параметров по ссылке\n"); input2(&x,a); input2(&y,b); printf("Введенные вами координаты точки (%lf",x); printf(",%lf",y); printf(")\n"); getresult(check_arrea(x,y)); break; } case 3: { system("pause"); exit(0); } } } while(value_of_choice != 3); } int _tmain(int argc, _TCHAR* argv[]) { menu(); system("pause"); return 0; } Результат работы программы на языке C Передача параметров по значению Вы находитесь в программе, которая определяет принадлежность точки (x, y) заданной области. x и y принадлежат промежутку [-2;2] Меню способов ввода координат точки (x, y) 1 - передача параметров по значению. 2 - передача параметров через указатель. 3 - выход. Введите выбранный вами пункт: 1 Передача параметров по значению Введите значение координаты x, принадлежащее диапазону [-2;2]. 1 Значение координаты x=1.000000 принято. Введите значение координаты y, принадлежащее диапазону [-2;2]. 2 Значение координаты y=2.000000 принято. Введенные вами координаты точки (1.000000,2.000000) Вывод: точка попадает в заштрихованную область. Передача параметров через указатель и осуществление проверки ввода на попадание в заданный промежуток рассмотрения Меню способов ввода координат точки (x, y) 1 - передача параметров по значению. 2 - передача параметров через указатель. 3 - выход. Введите выбранный вами пункт: 2 Передача параметров через указатель Введите значение координаты x, принадлежащее диапазону [-2;2]. 1.5 Значение координаты x=1.500000 принято. Введите значение координаты y, принадлежащее диапазону [-2;2]. 1.5 Значение координаты y=1.500000 принято. Введенные вами координаты точки (1.500000,1.500000) Вывод: точка попадает в заштрихованную область. Код программы на языке C++ Данный вариант программы в отличие от предыдущего использует: логический тип данных bool; передача параметров по ссылке; перегрузка функций, реализующая один из принципов статического полиморфизма; использование пространства имен (namespace) std, которое является средством логического разделения области видимости включаемых в них классов и данных; использованием механизмов потокового ввода и вывода данных. В результате выполнения задания была разработана программа на языке C++. Она представлена в виде проекта, состоящего из четырех файлов с расширением *.cpp и трёх заголовочных файлов (с расширением *.h), код которых приведен ниже: //файл input.h #ifndef inputs #define inputs double limitedInput(const char coordinateName); double input1(const char coordinateName); void input2(double* x, const char coordinateName); #endif //файл input.cpp #include "StdAfx.h" #include #define MAX_RANGE 2 #define MIN_RANGE -2 using namespace std; double limitedInput(const char coordinateName) { cout << "Введите значение координаты " << coordinateName << ", принадлежащее диапазону [" << MIN_RANGE << ";" << MAX_RANGE << "]." << endl; double value; while(true) { cin >> value; if (fabs(value) > MAX_RANGE) cout << "Введенное значение не принадлежит диапазону [" << MIN_RANGE << ";" << MAX_RANGE << "]! Повторите ввод." << endl; else break; } cout << "Значение координаты" << coordinateName << " = " << value << " принято." << endl; return value; } double input1(const char coordinateName) { return limitedInput(coordinateName); } void input(double& x, const char coordinateName) { x = limitedInput(coordinateName); } void input2(double* x, const char coordinateName) { *x = limitedInput(coordinateName); } //файл check_the_arrea.h #pragma once bool check_arrea(double x, double y); //файл check_the_arrea.cpp #include "StdAfx.h" int check_arrea(float x, float y) { if (((x>=-1)&&(x<=1))&&((y>=-1)&&(y<=1))) return 0; return 1; } //файл get_result.h #ifndef get_result #define get_result void getresult(bool answer); #endif //файл get_result.cpp #include "StdAfx.h" #include void getresult(bool answer) { if (answer) std::cout << "Вывод: точка попадает в заштрихованную область." << std::endl; else std::cout << "Вывод: точка НЕ попадает в заштрихованную область." << std::endl; } //файл main.cpp #include "stdafx.h" #include #include "input.h" #include "check_the_arrea.h" #include "get_result.h" using namespace std; void menu() { char a='x', b='y'; double x, y; int value_of_choice, doubt; setlocale(LC_ALL, "russian");; system("cls"); cout << "Вы находитесь в программе, которая определяет принадлежность точки (x, y) заданной области." << endl; cout << "x и y принадлежат промежутку [-2;2]" << endl; do { cout << "Меню способов ввода координат точки (x, y)" << endl; cout << "1 - передача параметров по значению." << endl; cout << "2 - передача параметров через указатель." << endl; cout << "3 - выход." << endl; cout << "Введите выбранный вами пункт:" << endl; cin >> value_of_choice; switch (value_of_choice) { case 1: { cout << "Передача параметров по значению" << endl; x = input1(a); y = input1(b); cout << "Введенные вами координаты точки (" << x << "; " << y << ")" << endl; getresult(check_arrea(x, y)); break; } case 2: { cout << "Передача параметров по ссылке" << endl; input2(&x, a); input2(&y, b); cout << "Введенные вами координаты точки (" << x << "; " << y << ")" << endl; getresult(check_arrea(x, y)); break; } case 3: { system("pause"); exit(0); } } } while(value_of_choice != 3); } int _tmain(int argc, _TCHAR* argv[]) { menu(); system("pause"); return 0; } Результат работы программы на языке C++ Передача параметров по значению и осуществление проверки ввода на попадание в заданный промежуток рассмотрения Вы находитесь в программе, которая определяет принадлежность точки (x, y) заданной области. x и y принадлежат промежутку [-2;2] Меню способов ввода координат точки (x, y) 1 - передача параметров по значению. 2 - передача параметров по ссылке. 3 - передача параметров через указатель. 4 - выход. Введите выбранный вами пункт: 1 Передача параметров по значению Введите значение координаты x, принадлежащее диапазону [-2;2]. 2 Значение координаты x=2 принято. Введите значение координаты y, принадлежащее диапазону [-2;2]. 1 Значение координаты y=1 принято. Введенные вами координаты точки (2,1) Вывод: точка попадает в заштрихованную область. Передача параметров по ссылке Меню способов ввода координат точки (x, y) 1 - передача параметров по значению. 2 - передача параметров по ссылке. 3 - передача параметров через указатель. 4 - выход. Введите выбранный вами пункт: 2 Передача параметров по ссылке Введите значение координаты x, принадлежащее диапазону [-2;2]. 0.5 Значение координаты x=0.5 принято. Введите значение координаты y, принадлежащее диапазону [-2;2]. -0.5 Значение координаты y=-0.5 принято. Введенные вами координаты точки(0.5,-0.5) Вывод: точка НЕ попадает в заштрихованную область. Передача параметров через указатель Меню способов ввода координат точки (x, y) 1 - передача параметров по значению. 2 - передача параметров по ссылке. 3 - передача параметров через указатель. 4 - выход. Введите выбранный вами пункт: 3 Передача параметров через указатель Введите значение координаты x, принадлежащее диапазону [-2;2]. 1 Значение координаты x=1 принято. Введите значение координаты y, принадлежащее диапазону [-2;2]. 0.6 Значение координаты y=0.6 принято. Введенные вами координаты точки (1,0.6) Вывод: точка попадает в заштрихованную область. |