Файл: Лабораторная работа 11 Выполнила Драчева Кристина Проверил Савин Н. И. Тула 2023.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.12.2023

Просмотров: 30

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Вывод краткой информации.
Вывод информации о конкретном рабочем.

Изменение стоимости часа.
6. Контрольные вопросы.
1. полиморфизм – это технология вызова виртуальных функций, реализуемых в иерархически связанных классах. Иерархия классов формируется на базе механизма наследования.
2.
Полиморфизм времени компиляции - это использование шаблонов (экземпляры которых изменяются, но фиксируются во время компиляции), тогда как полиморфизм времени выполнения относится к использованию наследования и виртуальных функций (экземпляры которых изменяются и фиксируются во время выполнения).
3.
Наследование является одним из основополагающих принципов
ООП. В соответствии с ним, класс может использовать переменные и методы другого класса как свои собственные.
4.
Конструктор производного класса в первую очередь всегда должен вызывать конструктор базового класса. Деструктор производного класса всегда неявно по умолчанию после выполнения своего тела вызывает деструкторы базовых классов. Причем порядок разрушения объекта (вызовов деструкторов) обратен порядку создания (вызова конструкторов).
5.
При множественном наследовании класс наследник может иметь несколько несвязанных родительских классов.

6.
Указатель на базовый класс нужно использовать тогда, когда заранее неизвестно, вызов какой функции (т.е. какого конкретного наследника) нужен.
7.
Виртуальная функция
— это функция-член, которую предполагается переопределить в производных классах. При ссылке на объект производного класса с помощью указателя или ссылки на базовый класс можно вызвать виртуальную функцию для этого объекта и выполнить версию функции производного класса.
8.
В базовом классе описывается функция с ключевым словом virtual, а в производных классах описываются эти же функции с ключивым словом override.
9.
Основное различие между виртуальной функцией и чисто виртуальной функцией является то, что виртуальная функция является функцией в базовом классе, который объявлен с использованием виртуального ключевого слова в то время как чистая виртуальная функция является виртуальной функцией в базовом классе без определения функции.
10.
К стандартным классам языка С++ можно отнести класс string, ofstream, ifstream, шаблоны из библиотеки stl.

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

высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 13
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023

1. Цель работы
Организация ввода-вывода в С++
2. Задание
Построить класс queue. Перегрузить операторы ввода-вывода.
3. Ход работы
Для выполнения задания я создал класс queue
. Для хранения элементов использовал контейнер list.
4. Листинг
#include

#include

#include

using namespace std; class queue
{ private
: list
<
int
>ochered; public
: void operator <<
(
int elem
) { ochered.push_back(
elem
); } void operator >>
(
int
&
i
)
{ auto itr = ochered.begin(); i
=
*
itr; ochered.pop_front();
} int razm() { return ochered.size(); } void pechat()
{ for
(
auto i = ochered.begin(); i
!=
ochered.end(); i
++
)
{ cout
<<
*
i
<<
endl;
}
}
}; int main()

{
SetConsoleCP(1251);
// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251);
// установка кодовой страницы win-cp 1251 в поток вывода int i; queue och1; och1
<<
1;
// добавление в очередь 1
och1
<<
2;
// добавление в очередь 2
och1.pechat();
// вывод элементов очереди och1
>>
i;
// получение элемента из очереди cout
<<
i
<<
"вывод первого "
<<
endl;
// вывод на экран полученного элемента och1
<<
3;
// добавление в очередь 3
och1.pechat();
// вывод элементов очереди och1
>>
i;
// получение элемента из очереди cout
<<
i
<<
"вывод первого "
<<
endl;
// вывод на экран полученного элемента
}
5. Результат выполнения

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт Прикладной математики и компьютерных наук
Кафедра Вычислительной техники
Учебная дисциплина
Программирование
Уровень профессионального образования: (высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 14
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023

1. Цель работы
Обобщенное программирование в языке С++
2. Задание
Спроектировать шаблон класса set.
3. Ход работы
Для выполнения задания я создал класс set. В качестве типа хранимых данных использовал шаблонный тип template
<
typename
T
>
. Для хранения элементов множества использовал контейнер list. Для добавления элементов создал метод void dobavit(
T
x
)
. В процессе добавления элемента происходит проверка на совпадение и сортировка методом вставки. Одинаковые элементы недобавляются. С помощью метода void vivod()
можно просмотреть элементы множества.
В основной программе создаются два объекта класса set, одному в качестве типа хранимых элементов указывается int, второму char. Элементы добавляются в разнабой и затем выводятся на экран.
4. Листинг
#include

#include

using namespace std; template
<
typename
T
> class set
{ private
: list
<
T
> mnojestvo; public
: void dobavit(
T
x
)
{ if
(mnojestvo.empty())
{ mnojestvo.push_front(
x
); return
;
} for
(
auto it = mnojestvo.begin(); it != mnojestvo.end(); it++)
{ if
(*it == x
) return
; if
(*it > x
)
{ mnojestvo.insert(it, x
); return
;


}
} mnojestvo.push_back(
x
);
} void vivod()
{ auto it = mnojestvo.begin(); while
(it != mnojestvo.end())
{ cout << *it << endl; it++;
}
}
}; int main()
{ set
<
int
> a; a.dobavit(5); a.dobavit(3); a.dobavit(8); a.dobavit(3); a.dobavit(13); a.dobavit(1); a.dobavit(88); a.vivod(); cout
<<
endl; set
<
char
> b; b.dobavit(
'a'
); b.dobavit(
'g'
); b.dobavit(
'a'
); b.dobavit(
'z'
); b.dobavit(
'b'
); b.vivod();
}
5. Результат выполнения

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт Прикладной математики и компьютерных наук
Кафедра Вычислительной техники
Учебная дисциплина
Программирование
Уровень профессионального образования: (высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 15
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023

1. Цель работы.
Визуальное проектирование программ в среде VisualStudio. Основные компоненты
2. Задание.
Спроектировать приложение, на гавной форме которого поместить три кнопки: exit, beep, about.
3. Ход работы.
Для выполнения работы я доустановил в Visual Studio недостающие компоненты для работы с windows forms. Создал проэкт CLR .NET
Framework. В проэкте добавил форму windows. В свойствах установил подсистему windows, точку входа main. Далее в сср файле формы описал саму функцию main. Затем в конструкторе формы с помощью панели элементов добавил на форму три кнопки и в их свойствах изменил текст на них.
4. Результат выполнения.


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт Прикладной математики и компьютерных наук
Кафедра Вычислительной техники
Учебная дисциплина
Программирование
Уровень профессионального образования: (высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 16
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023

1. Цель работы.
Визуальное проектирование программ в среде VisualStudio. Ввод-вывод информации
2. Задание.
Спроектировать приложение. На форме предусмотреть: поле ввода информации; поле вывода информаци, кнопку переноса информации из поля ввода в поле вывода. В поле ввода предусмотреть ввод строк в очередь. В поле вывода отобразить информацию из очереди.
3. Ход работы.
Для выполнения на форму я поместил два текстовых поля и кнопку
«перенести». В свойствах полей установил возможность многострочности.
Код обработки события нажатия на кнопку следующий: private
:
System::
Void button1_Click(System::
Object
^ sender
,
System::
EventArgs
^ e
) { this
->textBox2->Text = this
->textBox1->Text; this
->textBox1->Text =
""
;
}


4. Результат выполнения.
До нажатия на кнопки
После.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт Прикладной математики и компьютерных наук
Кафедра Вычислительной техники
Учебная дисциплина
Программирование
Уровень профессионального образования: (высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 17
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023

1. Цель работы
Визуальное проектирование программ в среде VisualStudio. Диалоги
2. Задание
Спроектировать приложение. На форме предусмотреть кнопки управления, однострочное поле TextBox, элементы диалога OpenFileDialog
SaveFileDialog. Из файла прочитать множество вещественных чисел, вычислить их сумму и вывести в файл.
3. Ход работы
Для выполнения работы я подключил пространство имён using namespace
System::IO;
. Так же создал форму с текстовым полем для вывода чисел хранящихся в файле. Кнопками «открыть и вычислить» для вычисления,
«сохранить» для сохранения результата и «выход» для завершения работы.
При нажатии на кнопку «открыть и вычислить» открывается диалог открытия файла с числами. После выбора файла производится вычисление суммы, вывод чисел в текстовое поле и вывод результата в поле лейбл2. При нажатии на кнопку «сохранить» открывается диалог сохранения и после выбора файла или задании нового происходит сохранение резульртата.
Код обработки событий при нажатии на кнопки следующий: private
:
System::
Void button1_Click(System::
Object
^ sender
,
System::
EventArgs
^ e
) {
String
^ fileName;
String
^ promejutochnoe; this
->openFileDialog1->ShowDialog(); fileName = this
->openFileDialog1->FileName;
StreamReader
^ file =
File
::OpenText(fileName); this
->textBox1->Text = file->ReadLine(); while
(!file->EndOfStream)
{ promejutochnoe = file->ReadLine(); this
->textBox1->Text = this
->textBox1->Text
+
" + "
+
promejutochnoe; res = res + System::
Convert
::ToDouble(promejutochnoe);
} this
->label2->Text =System::
Convert
::ToString(res); file->Close();
} private
:
System::
Void button3_Click(System::
Object
^ sender
,
System::
EventArgs
^ e
) { this
->Close();
}
private
:
System::
Void button2_Click(System::
Object
^ sender
,
System::
EventArgs
^ e
) {
String
^ puth; this
->saveFileDialog1->ShowDialog(); puth = saveFileDialog1->FileName; this
->textBox1->Text = puth;
TextWriter
^ vivod = gcnew
StreamWriter
(puth); vivod->WriteLine(
this
->label2->Text); vivod->Close();
}
4. Результат выполнения
При запуске
Выбор файла
После открытия и вычисления


Выбор файла для сохранения
Файл с результатом
Исходный файл


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТУЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Институт Прикладной математики и компьютерных наук
Кафедра Вычислительной техники
Учебная дисциплина
Программирование
Уровень профессионального образования: (высшее образование –
бакалавриат)
Направление подготовки: Информатика и вычислительная техника
Профиль подготовки: Электронно-вычислительные машины, комплексы, системы и сети
Лабораторная работа № 18
Выполнила Драчева Кристина
Проверил Савин Н.И.
Тула 2023

1. Цель работы
Визуальное проектирование программ в среде VisualStudio. Графика
2. Задание
Спроектировать пркложение для рисования изометрии пирамиды на форме. На форме предусмотреть кнопку для ввода данных, кнопу для рисования, поле ввода. В поле ввода задаются параметры линий, таблица значений координат вершин пирамиды.
3. Ход работы
Для выполнения задания я создал форму на которой разместил кнопки рисовать и выход, поля для ввода координат вершин пирамиды и чекбокс включения и отключения осей.
Для отрисовки пирамиды реализовал несколько дополнительных функций.
Функцию для перевода градусов в радианы double
Perevod_v_radian(
int grad
)
{ double m = 3.14159 / 180; return grad
* m;
}
Перегруженную функцию для перевода трёхмерных изометрических координат в двумерные и вспомогательную
System::Drawing::
Point
XYizometr( int x1
, int y1
, int z1
)
{ int const
X0 = 210; int const
Y0 = 210; int
X, Y;
X = x1
;
Y = y1
;
XYizo(X, Y); return
System::Drawing::
Point
(X0 + X, (Y0 - Y)- z1
);
}
System::Drawing::
Point
XYizometr(
String
^ x1
,
String
^ y1
,
String
^ z1
)
{ int const
X0 = 210; int const
Y0 = 210; int
X, Y;
X = System::
Convert
::ToInt32(
x1
);
Y = System::
Convert
::ToInt32(
y1
);
XYizo(X, Y); return
System::Drawing::
Point
(X0
+
X,
(Y0
-
Y)
-
System::
Convert
::ToInt32(
z1
));
}

Перегрузка нужна для возможности задавать координаты как целыми числами так и строковыми неконвертированными переменными. void
XYizo(
int
&
x
, int
&
y
)
{ double rad30, rad150; int x1, y1; x1 = x
; y1 = y
; rad30 = Perevod_v_radian(30); rad150 = Perevod_v_radian(150); x
= (cos(rad30) * x1) + (cos(rad150) * y1); y
= (sin(rad30) * x1) + (sin(rad150) * y1);
}
Функцию для отрисовки пирамиды void risovat_piramidu(
array
<:drawing::>Point
>
^
koord
,
System::Windows::Forms::
PictureBox
^ pictureBox1
)
{
System::Drawing::
Color
^ cvet = gcnew
System::Drawing::
Color
;
System::Drawing::
Pen
^ pero = gcnew
System::Drawing::
Pen
(cvet-
>Red, 4);
System::Drawing::
Graphics
^ risunok
= pictureBox1
-
>CreateGraphics(); risunok->DrawLine(pero, koord
[1], koord
[2]); risunok->DrawLine(pero, koord
[3], koord
[4]); pero->Color = cvet->Blue; risunok->DrawLine(pero, koord
[2], koord
[3]); risunok->DrawLine(pero, koord
[4], koord
[1]); pero->Color = cvet->Green; risunok->DrawLine(pero, koord
[5], koord
[1]); risunok->DrawLine(pero, koord
[5], koord
[2]); risunok->DrawLine(pero, koord
[5], koord
[3]); risunok->DrawLine(pero, koord
[5], koord
[4]);
}
Вершины я хранил и передавал в массиве объектов Рoint private
: array
<:drawing::>Point
>^ tochki
= gcnew array
<:drawing::>Point
>(6);
Заполнение массива и отрисовка пирамиды происходит во время обработки события нажатия на кнопку «рисовать»
System::
Void okno2::
MyForm
::button1_Click(System::
Object
^ sender
,
System::
EventArgs
^ e
)
{ tochki[1]
=
XYizometr(
this
->textBox_x1->Text, this
->textBox_y1-
>Text, this
->textBox_z1->Text); tochki[2]
=
XYizometr(
this
->textBox_x2->Text, this
->textBox_y2-
>Text, this
->textBox_z2->Text); tochki[3]
=
XYizometr(
this
->textBox_x3->Text, this
->textBox_y3-
>Text, this
->textBox_z3->Text); tochki[4]
=
XYizometr(
this
->textBox_x4->Text, this
->textBox_y4-
>Text, this
->textBox_z4->Text);