Скачиваний:
5
Добавлен:
31.05.2025
Размер:
950 Кб
Скачать
☆

С помощью механизмов отладки проверить значения переменных I, j, f на строках кода отмеченных в комментариях.

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

Добавляю наблюдаемые переменные (см. скриншоты ниже).

На первой остановке значения следующие (остановки см. на скриншотах ниже – красные строчки):

что совпадает с моими проверками во 2 пункте (f = 0, так как переменная ещё не была задана).

Значение переменной i здесь равна 58.

С помощью инструментов отладки двигаюсь дальше (клавиша в dev-c++ --> «следующий шаг»):

Вторая остановка:

Значение переменной i здесь равна 60.

Третья остановка:

Значение переменной i здесь равна 32, а f = 33.3499985

Четвертая остановка:

Значение переменной i здесь равна 33, а f = 34.3499985

Пятая остановка:

Значение переменной f здесь равна 23.125

Шестая остановка:

Значение переменной i здесь равна 23, а f = 24.125

Седьмая остановка:

Значение переменной f здесь равна 25.125

Все точки остановки отладки свидетельствуют о том, что я сделал правильные выводы во 2 пункте.

Объяснить значения переменных в указанных строках

По остановкам:

1) Значение переменной i здесь равна 58. Сначала значение переменной при выводе выводится то, что задано ещё до функции (52), а потом приобретает значение 54. Это происходит благодаря инкриментам, прописанным в функциях (i++ и ++i). Сложение, совмещённое с присваиванием в программе дальше, доводит значение до 58.

2) Значение переменной i здесь равна 60. 13(нач. значение) – 1 (дискримент) = 12. Далее, умножение, совмещённое с присваиванием в программе, доводит значение до 60(12*5=60).

3) Видим, что переменная f прибрела значение, которое мы ей задали программно (33). После запятой появляются дополнительные цифры, и это возникает как следствие машинного представления дробей – сумма двоичных степеней (так как тип у нас float). Значение переменной i здесь равна 32 (приобретает это значение программно между 8 и 10 строчками кода).

4) Переменная f увеличивается на 1, что происходит благодаря инкрименту в прошлой функции. В прошлой же функции переменная i приобрела целочисленную часть f до инкримента(33), что и показала отладка.

5) Видим, что переменная f прибрела значение, которое мы ей задали программно (23). После запятой появляются дополнительные цифры, и это возникает как следствие машинного представления дробей – сумма двоичных степеней (так как тип у нас float).

6) Значение переменной i здесь равна 23 (приобретает это значение программно у переменной f, взяв целочисленную часть у неё), а f увеличивается на 1 целое значение, что происходит благодаря инкрименту в прошлой функции.

7) f увеличивается на 1 целое значение, что происходит благодаря инкрименту в прошлой функции.

Дополните код следующими строками: int* ptr_i = &i; int* ptr_j = &j

Дополнил код необходимыми строками (выделил в красный цвет):

Выясните следующее:

5.1. На какую величину отличаются значения указателей (значения адреса)?

5.2. Как вывести на экран значение адреса?

5.3. Как по указателю ptr_i вывести значение переменной i на экран?

5.4. Можно ли по указателю ptr_i получить значение переменной j? И как это можно сделать?

5.1) Видно, что значение указателей отличаются на величину “fe34”. Это связано с различием в типах переменных на которые переходят указатели(int и float).

5.2) С помощью кода или посмотреть на показания отладки (1 и 2 скриншот соответственно):

5.3) С помощью незначительных изменений в коде вывода (добавить звёздочку перед указателем):

5.4) С помощью следующего кода:

Вывод

1. В шаблоне консольного приложения реализовал предложенный нам код через DEV-C++.

2. Оценил результаты работы программы, пояснив изменения переменных и причины их изменения построчно.

3. С помощью механизмов отладки проверил значения переменных i, j, f на строках кода, отмеченных в комментариях. Проверка прошла успешно, отладка вывела истинные значения.

4. Объяснил значения переменных в указанных строках по остановкам:

1) Значение переменной i здесь равна 58. Сначала значение переменной при выводе выводится то, что задано ещё до функции (52), а потом приобретает значение 54. Это происходит благодаря инкриментам, прописанным в функциях (i++ и ++i). Сложение, совмещённое с присваиванием в программе дальше, доводит значение до 58.

2) Значение переменной i здесь равна 60. 13(нач. значение) – 1 (дискримент) = 12. Далее, умножение, совмещённое с присваиванием в программе, доводит значение до 60(12*5=60).

3) Видим, что переменная f прибрела значение, которое мы ей задали программно (33). После запятой появляются дополнительные цифры, и это возникает как следствие машинного представления дробей – сумма двоичных степеней (так как тип у нас float). Значение переменной i здесь равна 32 (приобретает это значение программно между 8 и 10 строчками кода).

4) Переменная f увеличивается на 1, что происходит благодаря инкрименту в прошлой функции. В прошлой же функции переменная i приобрела целочисленную часть f до инкримента(33), что и показала отладка.

5) Видим, что переменная f прибрела значение, которое мы ей задали программно (23). После запятой появляются дополнительные цифры, и это возникает как следствие машинного представления дробей – сумма двоичных степеней (так как тип у нас float).

6) Значение переменной i здесь равна 23 (приобретает это значение программно у переменной f, взяв целочисленную часть у неё), а f увеличивается на 1 целое значение, что происходит благодаря инкрименту в прошлой функции.

7) f увеличивается на 1 целое значение, что происходит благодаря инкрименту в прошлой функции.

5. Дополнил код следующими строками: int* ptr_i = &i; int* ptr_j = &j;

Выяснил:

5.1. На какую величину отличаются значения предложенных указателей – на величину “fe34”.

5.2. Как вывести на экран значение адреса (см. код, в пункте 5.2).

5.3. Как по указателю ptr_i вывести значение переменной i на экран (см. код, в пункте 5.3).

5.4. Что можно по указателю ptr_i получить значение переменной j (см. код, в пункте 5.4).

Соседние файлы в папке Лабы Беляев