Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Білети 9 і 10.doc
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
2.37 Mб
Скачать

Билет №9:

  1. Поясніть призначення і застосування макросів у программах С++:

  1. Поясніть взаємозв’язок між данними типу «массив» і змінною типу «показчик»:

Массивы и указатели в С++ тесно связаны и могут быть использованы почти эквивалентно. Имя массива можно понимать как константный указатель на первый элемент массива. Его отличие от обычного указателя только в том, что его нельзя модифицировать. Указатели можно использовать для выполнения любой операции, включая индексирование массива. Пусть вы сделали следующее объявление:

int b[5] = {1,2,3,4,5}, *Pt;

Тем самым вы объявили массив целых чисел b[5] и указатель на целое Pt. Поскольку имя массива является указателем на первый элемент массива, вы можете задать указателю Pt адрес первого элемента массива b с помощью оператора

Pt = b;

Это эквивалентно присваиванию адреса первого элемента массива следующим образом

Pt = &b[0];

Таким образом манипуляции, определенные для массивов, определены и для указателей на массивы. Указатели могут применяться как операнды в арифметических выражениях, выражениях присваивания и выражениях сравнения. Однако не все операции, обычно используемые в этих выражениях, разрешены применительно к переменным указателям. С указателями может выполняться ограниченное количество арифметических операций. Указатель можно увеличивать (++), уменьшать (--), складывать с указателем целые числа (+ или +=), вычитать из него целые числа (- или -=) или вычитать один указатель из другого. Если продолжить приведенный выше пример, в котором указателю Pt было присвоено значение b — указателя на первый элемент массива, то после выполнения оператора

Pt += 2;

Арифметика указателей теряет всякий смысл, если она выполняется не над указателями на массив. Нельзя полагать, чтоб две переменные одинакового типа хранятся в памяти вплотную друг к другу, если только они не соседствуют в массиве. Сравнение указателей операциями >, <, >=, <= также имеют смысл только для указателей на один и тот же массив. Мы рассмотрели ранее указатели на массивы. Однако соотношение между массивами и указателями может быть и обратным — могут использоваться массивы указателей. Например, вы можете сделать следующее объявление:

char *Sa[2] = {"Это первая строка", "Вторая"};

Вы объявили массив размером 2 элементов типа (char *). Каждый элемент такого массива — строка. Но в C++ строка является, по существу, указателем на ее первый символ. Таким образом, каждый элемент в массиве строк в действительности является указателем на первый символ строки. Каждая строка хранится в памяти как строка, завершающаяся нулевым символом. Число символов в каждой из строк может быть различным. Таким образом, массив указателей на строки позволяет обеспечить доступ к строкам символов любой длинны.

  1. Формат записів для одержання стану перемикаючих клавіш за допомогою функції 02h преривання int16h:

INT16h 02h – функция позволяет проверять состояние переключающих клавиш(CapsLock, Insert, NumLock, Alt, Ctrl, Shift). Ввод информации с клавиатуры ПК может осуществляться двумя способами:

  • Обращение функции BIOS.

  • Использование функций операционной системы MS DOS. Функции MS DOS при вводе информации позволяют определять место вывода вводимой информации. Метод ввода информации с помощью BIOS называют базовым(основным) методом.

На входе: AH=02

На выходе: AL=байт состояния переключающих клавиш

Биты

Значение, если в бит заложена 1

0

Нажата правая клавиша Shift

1

Нажата левая клавиша Shift

2

Нажаты клавиши Ctrl+ Shift

3

Нажаты клавиши Alt+ Shift

4

Состояние ScrolLock

5

Состояние NumLock

6

Состояние CapsLook

7

Состояние Insert



  1. Види програмних модулів у проекті С++ Builder:

Проект представляет собой набор программных единиц — модулей. Один из модулей, называемый главным, содержит инструкции, с которых начинается выполнение программы. Чтобы увидеть главный модуль, нужно в меню Project выбрать команду View Source. Таким образом, главный модуль обеспечивает вывод стартовой формы программы, дальнейшее поведение которой определяют функции обработки событий стартовой формы. Помимо главного модуля в состав проекта входят модули формы. Для каждой формы C++ Builder создает отдельный модуль, который состоит из двух файлов: заголовочного файла и файла кода (содержимое этих файлов отражается в окне редактора кода). Заголовочный файл содержит описание формы, файл кода (модуль формы) — описание (текст) функций, в том числе и обработки событий.

Билет №10:

Билет №10:

  1. Правила оголошення змінних типу «показчик».

Указатель — это переменная, указывающая на адрес в памяти, где хранятся какие-то данные, например, значение некоторой другой переменной. В этом смысле имя этой другой переменной отсылает к ее значению прямо, а указатель — косвенно. Ссылка на значение посредством указателя называется косвенной адресацией. Указатели, подобно любым другим переменным, перед своим использованием должны быть объявлены. Объявление указателя имеет вид:

type *ptr;

где type — один из предопределенных или определенных пользователем типов, а ptr — указатель. Читается это объявление так: "ptr является указателем на значение типа type".

Например:

int *countPtr, count;

объявляет переменную countPtr типа int * (т.е. указатель на целое число) и переменную count целого типа. Символ (*) в этих записях обозначает операцию косвенной адресации. Может быть объявлен и указатель на void:

void *Pv;

Это универсальный указатель на любой тип данных. Но прежде, чем его использовать, ему надо в процессе работы присвоить значение указателя на какой-то конкретный тип данных. Например:

Pv = countPtr;

Указатели должны инициализироваться либо при своем объявлении, либо с помощью оператора присваивания. Указатель может получить в качестве начального значения 0, NULL или адрес. Указатель с начальным значением 0 или NULL ни на что не указывает. NULL — это символическая константа, определенная специально для цели показать, что данный указатель ни на что не указывает. Пример объявления указателя с его инициализацией:

int *countPtr = NULL;

Для присваивания указателю адреса некоторой переменной используется операция адресации &, которая возвращает адрес своего операнда. Например, если имеются объявления:

int y = 5;

int *yPtr, x;

то оператор

yPtr = &y;

присваивает адрес переменной y указателю yPtr. Для того чтобы получить значение, на которое указывает указатель, используется операция *, обычно называемая операцией косвенной адресации или операцией разыменования. Она возвращает значение объекта, на который указывает ее операнд (т.е. указатель). Например, если продолжить приведенный

выше пример, то оператор

x = *yPtr

присвоит переменной x значение 5, т.е. значение переменной y, на которую указывает yPtr.