Цвинтарный Иван 362-2 Лабораторная работа 3
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Томский Государственный Университет Систем Управления и Радиоэлектроники (ТУСУР)
Кафедра промышленной электроники (ПрЭ)
ОТЧЁТ
по результатам лабораторной работы №3
по дисциплине «Информатика»
Указатели
Студент гр. 362-2
подпись ______ Цвинтарный И.В.
дата __________
Руководитель
подпись ___________ Савин Д.А.
дата __________
Томск 2022
Оглавление
Введение 3
1. Ход работы 4
2. Индивидуальное задание 5
3. Программный код – текст программы 6
4. Результаты работы программы 8
5. Заключение 9
Введение
Задачами третей практической работы является написание программы на языке C++, используя указатели. Научиться работать со статическими и динамическими переменными. Освоить применение операций адресации и разадресации. Научиться выделять память под динамические переменные и освобождать ее при помощи операторов new и delete. Освоить обращение к динамическим объектам. Научиться выделять память под динамические переменные и освобождать ее при помощи функций calloc, malloc и free. Научиться визуализировать адреса статических и динамических объектов. Освоить функции rand() генерирующие случайные числа. Написать программу так, чтобы не произошла утечка памяти. Выполнить индивидуальное задание.
1. Ход работы
Создать проект на Visual C++, написать программу на C++ в соответствии заданным индивидуальным заданием.
Вывести требуемые адреса указателей и переменные.
Составить отчет, отразить программный код с комментариями, привести скриншоты с результатами работы программы.
Представить преподавателю результат.
2. Индивидуальное задание
Вариант индивидуального задания – 23.
Рисунок 2.1 – формулировка задания
Рисунок 2.2 – особенность ИЗ
3. Программный код – текст программы
#include <iostream>
#include <time.h>
using namespace std;
#define rnd1(a, b) (rand()%((b) - (a) + 1) + (a))
#define rnd2(a, b) (((double)rand()/RAND_MAX)*((b) - (a)) + (a))
int main()
{
setlocale(LC_ALL, "RUS");
srand(time(NULL));
int X = rnd1(-23, 235);
int* XPtr = &X;
int* YPtr = new int;
*YPtr = rnd1(-23, 235);
cout << "X=" << X << " " << "Xptr: " << XPtr << endl;
cout << "*YPtr=" << *YPtr << " " << "YPtr: " << YPtr << endl;
delete YPtr;
cout << "XPtr + 1: " << XPtr + 1 << sizeof(int) << endl;
cout << "(XPtr + 1) - XPtr=" << (XPtr + 1) - XPtr << sizeof(int) << endl;
float* APtr = (float*)malloc(sizeof(float));
float* BPtr = (float*)calloc(1, sizeof(float));
*APtr = rnd2(-23.0, 235.0);
*BPtr = rnd2(-23.0, 235.0);
cout << "*APtr=" << *APtr << " " << "APtr: " << APtr << endl;
cout << "*BPtr=" << *BPtr << " " << "BPtr: " << BPtr << endl;
void* VPtr = APtr;
APtr = BPtr;
BPtr = (float*)VPtr;
cout << "*APtr=" << *APtr << " " << "APtr: " << APtr << endl;
cout << "*BPtr=" << *BPtr << " " << "BPtr: " << BPtr << endl;
free(APtr);
free(BPtr);
}
4. Результаты работы программы
Рисунок 4.1 – первый запуск программы
Рисунок 4.2 – второй запуск программы
Рисунок 4.3 – третий запуск программы
5. Заключение
В ходе практической работы научились использовать указатели в работе. Написали программу на языке С++, согласно своему индивидуальному заданию. Корректно создали программный код, благодаря чему утечки памяти не произошло. В конечном счете, вывели адреса указателей и значения переменных.