Главная страница
Навигация по странице:

  • Цель работы

  • Задание для работы

  • Код программы на языке C

  • Результат работы программы на языке C Передача параметров по значению

  • Код программы на языке C++

  • Результат работы программы на языке C++ Передача параметров по значению и осуществление проверки ввода на попадание в заданный промежуток рассмотрения

  • Передача параметров по ссылке

  • Передача параметров через указатель

  • итоговый отчет 1. Лабораторная работа 2 Классы. Основы 12 Лабораторная работа 3 Классы. Инкапсуляция 16


    Скачать 129.17 Kb.
    НазваниеЛабораторная работа 2 Классы. Основы 12 Лабораторная работа 3 Классы. Инкапсуляция 16
    Дата14.01.2022
    Размер129.17 Kb.
    Формат файлаdocx
    Имя файлаитоговый отчет 1.docx
    ТипЛабораторная работа
    #331247
    страница1 из 5
      1   2   3   4   5

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

    высшего образования

    «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
    МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
    им. Н. П. ОГАРЕВА»
    Факультет математики и информационных технологий
    Кафедра систем автоматизированного проектирования
    ОТЧЁТ ПО ЛАБОРАТОРНЫМ РАБОТАМ
    по дисциплине: Объектно-ориентированное программирование
    Автор отчёта по лабораторным работам  Е. А. Охотников

    подпись, дата

    Обозначение отчёта по лабораторным работам ЛР-02069964-090304-09-21
    Направление подготовки 09.03.04 Программная инженерия
    Руководитель работы

    канд. техн. наук, доц  А. В. Шамаев

    подпись, дата

    Саранск 2021

    Содержание


    Лабораторная работа №2 Классы. Основы 12

    Лабораторная работа №3 Классы. Инкапсуляция 16

    Лабораторная работа №4 Приведение типов. RTTI 25

    Лабораторная работа №5 Наследование. Полиморфизм 30


    Цель работы:приобретение практических навыков использования основных языковых конструкции, операторов ввода-вывода и передачи переменных в функции по значению, по ссылке и по указателю на языках программирования C++ и С.

    Задание для работы

    Составить программу, определяющую принадлежности точки (x,y) области заданной конфигурации, выделенной на рисунке 1.1 серым цветом. Составленная программа должна включать реализацию трех функций:

    1. функции ввода пользователем координат точки (x,y);

    2. функция определения принадлежности точки заданной области;

    3. функция вывода результата для демонстрации решения задачи.



    Рисунок 1.1 – Область заданной конфигурации
    В функцию ввода переменные должны передаваться тремя способами:

    1. по значению;

    2. по ссылке;

    3. по указателю.

    Код программы на языке 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;

    }


    1. Результат работы программы на языке C

      1. Передача параметров по значению

    Вы находитесь в программе, которая определяет принадлежность точки (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)

    Вывод: точка попадает в заштрихованную область.


      1. Передача параметров через указатель и осуществление проверки ввода на попадание в заданный промежуток рассмотрения

    Меню способов ввода координат точки (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)

    Вывод: точка попадает в заштрихованную область.


    1. Код программы на языке 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;

    }

    1. Результат работы программы на языке C++

      1. Передача параметров по значению и осуществление проверки ввода на попадание в заданный промежуток рассмотрения

    Вы находитесь в программе, которая определяет принадлежность точки (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)
    Вывод: точка попадает в заштрихованную область.

      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)

    Вывод: точка НЕ попадает в заштрихованную область.


      1. Передача параметров через указатель

    Меню способов ввода координат точки (x, y)

    1 - передача параметров по значению.

    2 - передача параметров по ссылке.

    3 - передача параметров через указатель.

    4 - выход.

    Введите выбранный вами пункт:

    3

    Передача параметров через указатель

    Введите значение координаты x, принадлежащее диапазону [-2;2].

    1

    Значение координаты x=1 принято.

    Введите значение координаты y, принадлежащее диапазону [-2;2].

    0.6

    Значение координаты y=0.6 принято.

    Введенные вами координаты точки (1,0.6)
    Вывод: точка попадает в заштрихованную область.

      1   2   3   4   5


    написать администратору сайта