ЛАБОРАТОРНАЯ РАБОТА 6. КЛАССЫ ПАМЯТИ.


ЦЕЛЬ РАБОТЫ: Ознакомиться с областью видимости, временем жизни  и инициализацией переменных разных классов памяти. Научиться  целесообразно применять их в программах.

  1. Порядок выполнения работы.

1.1. Дополнить программу 1 так,чтобы  можно  было  удостове-

риться, что в программе имеется три различных переменных с  тремя

различными значениями, но с одинаковыми именами «ab».

1.2. В программе 2 (строка А2) объявить переменную b в клас-

се памяти auto (Приложение 1). Изучить отличие результатов  прог-

рамм исходной 2 и модифицированной 2.

С помощью трассировки (Приложение 2) проследить  за  измене-

нием содержания регистра (Меню Window режим Register), содержаще-

го переменную ab.

1.3. В модифицированной по п.1.2 программе  2  в  строке  А1

объявить переменную «а» в классе памяти  static  (Приложение  1).

Изучить отличие результатов работы всех трех версий программы 2.

1.4. Проверить работоспособность программы 3 в случаях

— отсутствия объявления глобальной переменной glob в строке А1;

-описания переменной glob в классе памяти auto в строках А2 и А3.

Отладку осуществлять с использованием трассировки  (Приложе-

ние 2).

/* Программа 1 */

#include <stdio.h>

void  prog1A(void);

void  prog1B(void);

int ab=1;

main()

{

int ab=0;

prog1A();

prog1B();

}

void prog1A(void)

{

auto int ab=2;

}

void prog1B(void)

{

printf(«Значение переменной ab = %d\n»,ab);

}

/* Программа 2 */

// Классы памяти: статическая переменная

#include <stdio.h>

void  prog2A(void);

main()

{

register int ab;

for (ab=1;ab<=3;ab++)

{

printf(«Итерация  %d\n»,ab);

prog2A();

}

}

void prog2A(void)

{

int a=1;          // строка А1

static int b=1;   // строка А2

printf(«a = %d  и  b = %d\n»,a++,b++);

}

/* Программа 3 */

// Классы памяти: глобальная переменная

#include <stdio.h>

void  prog3A(void);

int glob;  // внешняя переменная   строка А1

main()

{

extern int glob;            //  строка А2

printf(» Введите числовой пароль \n»);

scanf («%d»,&glob);

while (glob!=57)

prog3A();

printf(» Вы получаете доступ к базе.\n»);

}

void prog3A(void)

{

extern int glob;            // строка А3

printf(» Введите пароль еще раз \n»);

scanf («%d»,&glob);

return (0);

}

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ.

  1. В программе 3 вводить пароль-ключ доступа к Базе (длиной  не

более 6 байт).

  1. В программе 3 организовать подсчет количества раз ввода непра-

вильного пароля и вывод этого количества на экран.

  1. Даны отрезки a, b, c, d. Для каждой тройки этих отрезков вы-

числить площадь треугольника в функции и распечатать ответ в  вы-

зывающей программе.

  1. Даны координаты отрезков a, b, c, d. Для каждой тройки  этих

отрезков построить треугольники на экране дисплея.

  1. Даны две квадратные вещественные матрицы 10-го порядка. Напеча-

тать квадрат той из них, в которой наименьший след  (сумма  диаго-

нальных элементов).

*** Написать функции:

forward — переместиться на заданное расстояние;

left — повернуть налево на заданный угол;

right — повернуть направо на заданный угол;

pen_up — поднять перо;

pen_down — опустить перо.

Функции должны взаимодействовать через глобальные переменные:

xpos, ypos — координаты;

pen — поднято перо или нет;

angle — угол с осью абсцисс.

С помощью этих функций нарисовать на экране:

  1. Квадрат со стороной 75 единиц и центром, совпадающим с центром

экрана.

  1. Прямоугольник с отношением сторон 1:2 и со срезанными углами.

Положение прямоугольника на экране произвольно.

  1. Четыре крупные цифры — текущий год (цифры написаны по девяти-

сегментному шаблону, как на почтовых конвертах)&

  1. Те же цифры, что в зад.8, но по семисегментному шаблону, как в

электронных часах.

  1. Содержание отчета.

2.1. Текст программы 1 с изменениями, вызванными п.1.1. Рас-

печатать значения трех переменных с именем ab.

2.2. Измененные тексты программы 2 в соответствии с п.1.2  и

п.1.3. Результаты pаботы трех версий пpогpаммы. Значения всех ре-

гистров после выполнения всех версий программы 2.

2.3. Объяснить поведение программы 3 в случаях изменений  по

п.1.4.

2.4. Индивидуальное задание.

  1. Вопросы по лабораторной работе:
  1. Описать программу 1.
  2. Описать программу 2.
  3. Описать программу 3.
  4. Какие существуют классы памяти (Приложение 1).
  5. Время жизни, область действия и место создания в  памяти

автоматических переменных? Время инициализации.

  1. Время жизни, область действия и место создания в  памяти

внешних переменных? Время инициализации.

  1. Время жизни, область действия и место создания в  памяти

внутренних статических переменных? Время инициализации.

  1. Время жизни, область действия и место создания в  памяти

внешних статических переменных? Время инициализации.

  1. Время жизни, область действия и место создания регистро-

вых переменных? Время инициализации.

  1. Трассировка.

ПРИЛОЖЕHИЕ.

  1. Класс памяти определяет:

-область действия переменной;(какие функции имеют доступ к переменной);

-продолжительность ее существования в памяти.

Класс памяти устанавливается при описании  переменной  соот-

ветствующим ключевым словом.

Переменные, определенные ВНЕ функции,  являются  внешними  и

имеют глобальную область действия.

Переменные, определенные ВНУТРИ функции, являются  автомати-

ческими и локальными, если только не используются  другие  ключе-

вые слова.

Внешние переменные, определенные  раньше  функции,  доступны

ей, ДАЖЕ если не описаны внутри ее.

Таблица

Класс памяти    Ключевое слово  Продолжительность Область

существования     действия

(видимости)

Автоматический  auto            Временно        Локальная

Регистровый     register        Временно        Локальная

Статический     static          Постоянно       Локальная

—————————————————————-

Внешний         extern          Постоянно       Глобальная (все

файлы компиляции)

Внешний ста-    static          Постоянно       Глобальная (oдин

тический                                       файл компиляции)

Классы памяти, перечисленные выше (ниже) линии ——, описы-

ваются внутри (вне) функций.

Продолжительность существования — интервал выполнения  прог-

раммы, в течение которого этот объект существует.

Область видимости — часть текста программы, в  которой  этот

объект может использоваться.

  1. Трассировка — каждый оператор программы выполняется пос-

ле нажатия определенной клавишы (F7). См. режим Trace into в  ме-

ню Run.

Трассировка без захода в функцию — клавиша <F8>.