Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Задание 2. Процедуры управления динамической памятью программы.Стр 1 из 16Следующая ⇒
Указатели. Процедуры управления динамической памятью программы.
Цели работы: – Усвоить понятия «динамическое распределние памяти», «статическое распределение памяти», работа с переменными при статическом и динамическом распределении памяти, «указатели». – Получить практические навыки в создании динамических переменных разных типов. – Создать простейший проект в системе QT Creator на языке С++, в котором осуществляется работа с переменными в динамической памяти.
Цель создания проекта:
Целью проекта является размещение трех переменных типа int, float, double в динамической памяти и вывод их значений на экран, а также анализ значений указателей на эти переменные до выделения памяти и после и проведения анализа этих исследований.
Задания для самопроверки: Задание 1
1. Разместите в динамической памяти две переменные типа float и занесите в одну из них значение корня квадратного от 2.18, а в другую – синус от значения, которое находится в первой переменной. float * pf1, * pf2; pf1 = new float; pf2 = new float; * pf1 = sqrt(2.18); * pf2 = sin(* pf1);
2. Разместите в динамической памяти две переменные типа структура, содержащую информацию о преподавателе: Фамилия, Кафедра, Должность, Зарплата. Одну переменную заполните следующей информацией: Иванов, ИКС, Доцент, 5000. Затем скопируйте значение заполненной первой переменной во вторую и только поменяйте значение поля Фамилия на «Петров».
typedef struct { string name; string department; string post; int salary; } MyStruct; MyStruct * str1, * str2; str1 = new MyStruct; str2 = new MyStruct; * str1 = { " Гребенник", " ИКС", " Доцент", 5000}; * str2 = * str1; str2-> name = " Петров";
3. Разместите в динамической памяти переменную типа массив из трех целых чисел и заполните его первый элемент значением 5. int * ar = new int[3]; * ar = 5;
4. Разместите в динамической памяти массив из 10 структур, содержащих ту же информацию, что и записи в пункте 2 и заполните третий элемент этого массива информацией о вашем преподавателе. typedef struct { string name; string department; string post; int salary; } MyStruct; MyStruct * strar = new MyStruct[10]; strar[2] = {" Гребенник", " ИКС", " Доцент", 5000};
Задание 2 Напишите программы, которые обеспечат следующее расположение данных в памяти: 1.
int * P1; int * P1 = new int; P1 = 78; int * P1 = new int; * P1 = 56; P1 = NULL;
2.
int * P1, * P2, * P3; P1 = new int; * P1 = 78; P2 = NULL; P3 = new int; 3.
int * P1, * P2, * P3; P1 = new int; * P1 = 78; P3 = P2 = P1;
4.
typedef struct { int a; void * P; } MyStruct; MyStruct * P1, * P2; P1 = new MyStruct; P2 = new MyStruct; P1-> a = 78; P1-> P = P2; P2-> a = 56; P2-> P = NULL;
5.
typedef struct { int a; char * c; void * P; } MyStruct1; typedef struct{ string s; void * P; } MyStruct2; MyStruct1 * P1; MyStruct2 * P3; P1 = new MyStruct1; P3 = new MyStruct2; P1-> c = new char; *P1-> c = 'Д'; P1-> a = 78; P1-> P = P3; P3-> s = " Зима"; P3-> P = NULL;
Интерфейс проекта: На рисунке 1.1 изображен интерфейс проекта.
Рисунок 1.1 – интерфейс проекта Текст программы:
#include < iostream>
using namespace std;
void varInDynamicMemory();
int main() { varInDynamicMemory(); return 0; }
void varInDynamicMemory() { int * p1; float * p2; double * p3;
int i; float f; double d;
cout < < " Initial values for putting in dynamic memory: \nint flaot double: "; cin > > i > > f > > d; cout < < endl;
int iP1 = (int) p1; int iP2 = (int) p2; int iP3 = (int) p3;
cout < < " Values of pointers before putting in memory: \n"; cout < < " P1=" < < iP1 < < endl; cout < < " P2=" < < iP2 < < endl; cout < < " P3=" < < iP3 < < endl;
p1 = new int; p2 = new float; p3 = new double;
iP1 = (int) p1; iP2 = (int) p2; iP3 = (int) p3;
* p1 = i; * p2 = f; * p3 = d;
cout < < " Values of pointers after putting variables in memory: \n"; cout < < " P1=" < < iP1 < < endl; cout < < " P2=" < < iP2 < < endl; cout < < " P3=" < < iP3 < < endl;
cout < < " Values of dynamic variables: \n";
i = * p1; f = * p2; d = * p3;
cout < < " P1=" < < i < < endl; cout < < " P2=" < < f < < endl; cout < < " P3=" < < d < < endl; }
Вывод Указатели, до их инициализации и выделения динамической памяти имеют неопределенные значения. После размещения переменных в динамической памяти указатели расположились упорядоченно в памяти и их адреса отличаются ровно на количество байтов, необходимых каждому типу.
В таблице 1.1 приведены значения указателей и переменных до и после выделения динамической памяти.
Таблица 1.1 – Значения указателей и переменных до и после выделения динамической памяти
Попытка обращения к участку памяти в котором находится «мусор» может иметь различные результаты. Значение первой переменной удалось вывести на экран, хотя там находился «мусор», но при попытке вывести значение второй переменной произошла ошибка, и программа остановила дальнейшее выполнение. При разыменовании указателя с присвоенным значением NULL произошла ошибка, поскольку адрес NULL зарезервирован в памяти компьютера, соответственно разыменование невозможно.
|