Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_prog.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
163.27 Кб
Скачать

Void f1(int m[3][4]) {

int i, j;

for ( i = 0; i<3; i++)

for ( j = 0; j<4; j++)

. . . // Обработка массива

}

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

57 Указатели на функции В языке Си идентификатор функции является константным указателем на начало функции в оперативной памяти и не может быть значением переменной. 1. указатель на функции необходимо декларировать. Формат объявления указателя на функции следующий: тип (*переменная-указатель)(список параметров); double (*p_f )(char, double); говорит о том, что декларируется указатель p_f, который можно устанавливать на функции, возвращающие результат типа double и имеющие два параметра: первый – символьного типа, а второй – вещественного типа. 2. Идентификатор функции является константным указателем, поэтому для того чтобы установить переменную-указатель на конкретную функцию, достаточно ей присвоить ее идентификатор: переменная-указатель = ID_функции; 3. Вызов функции после установки на нее указателя выглядит так: (*переменная-указатель)(список аргументов); После таких действий кроме стандартного обращения к функции: ID_функции(список аргументов); появляется еще два способа вызова функции: (*переменная-указатель)(список аргументов); Для нашего примера к функции f1 можно обратиться следующими способами:

f1(‘z’, 1.5); – обращение к функции по имени (ID);

(* p_f)(‘z’, 1.5); – обращение к функции по указателю;

p_f(‘z’, 1.5); – обращение к функции по ID указателя.

58. Перегрузка функций Перегрузка функций улучшает удобочитаемость программ Перегрузка функций C++ позволяет вашим программам определять несколько функций с одним и тем же именем. Перегруженные функции должны возвращать значения одинакового типа*, но могут отличаться количеством и типом параметров. До появления перегрузки функций в C++ программисты языка С должны были создавать несколько функций с почти одинаковыми именами. К сожалению программисты, желающие использовать такие функции, должны были помнить, какая комбинация параметров соответствует какой функции. С другой стороны, перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции. Использование шаблонов функций По мере того как ваши программы становятся более сложными, возможны ситуации, когда вам потребуются подобные функции, выполняющие одни и те же операции, но с разными типами данных. Шаблон функции позволяет вашим программам определять общую, или типонезависимую, функцию. Когда программе требуется использовать функцию для определенного типа, например int или float, она указывает прототип функции, который использует имя шаблона функции и типы возвращаемого значения и параметров. В процессе компиляции C++ создаст соответствующую функцию. Создавая шаблоны, вы уменьшаете количество функций, которые должны кодировать самостоятельно, а ваши программы могут использовать одно и то же имя для функций, выполняющих определенную операцию, независимо от возвращаемого функцией значения и типов параметров.

59 Классы памяти. Области действия объектовКласс памяти программного объекта определяет время ее существования (время жизни) и область видимости (действия) и может принимать одно из значений: auto, extern, static и register. Область действия объекта – это часть кода программы, в которой его можно использовать для доступа к связанному с ним участку памяти. В зависимости от области действия переменная может быть локальной (внутренней) или глобальной (внешней). Эти переменные соответственно называются локальными (внутренними) переменными, формальными параметрами и глобальными (внешними) переменными. Существуют следующие области действия: Блок. Идентификаторы, описанные внутри блока, являются локальными. Область действия идентификатора начинается в точке определения и заканчивается в конце блока. После выхода из блока память освобождается. Файл. Идентификаторы, описанные вне любого блока, функции, класса или пространства имен, имеют глобальную видимость и постоянное время жизни и могут использоваться с момента их определения. Функция. Единственными идентификаторами, имеющими такую область действия, являются метки операторов. В одной функции все метки должны различаться, но могут совпадать с метками других функций. Прототип функции. Идентификаторы, указанные в списке параметров прототипа (декларации) функции, имеют областью действия только прототип функции. Структурированный тип данных. Элементы структур и объединений являются видимыми лишь в их пределах. Они образуются при создании переменной указанного типа и разрушаются при ее уничтожении.

60.Работа с файлами.Типы файлов (текстовый и бинарный) Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки как единое целое. В файлах размещаются данные, предназначенные для длительного хранения. Различают два вида файлов: текстовые и бинарные. Текстовые файлы представляют собой последовательность ASCII символов и могут быть просмотрены и отредактированы с помощью любого текстового редактора.Бинарные (двоичные) файлы представляют собой последовательность данных, структура которых определяется программно.В языке Си имеется большой набор функций для работы с файлами,большинство которых находятся в библиотеках stdio.h и io.h. Открытие файла FILE *указатель на файл; FILE - идентификатор структурного типа, описанный в стандартной библиотеке stdio.h. Для открытия файла для доступа используется функция FILE* fopen(char * имя_файла, char *режим); При успешном открытии функция fopen возвращает указатель на файл (в дальнейшем - указатель файла). При ошибке возвращается NULL. Посимвольный ввод-вывод происходит прием одного символа из файла или передача одного символа в файл: int fgetc(FILE *f) - считывает и возвращает символ из файла f; int fputc(int ch, FILE *f) - записывает в файл f код ch символа. Закрытие файла После работы с файлом доступ к нему необходимо закрыть. Это выполняет функция int fclose(указатель файла). Например: fclose (f); Текстовые файлы Для работы с текстовыми файлами удобнее всего пользоваться функциями fprintf, fscanf, fgets и fputs.Создание текстовых результирующих файлов обычно необходимо для оформления отчетов по лабораторным и курсовым работам. Бинарные файлы (двоичные) файлы обычно используются для организации баз данных, состоящих, как правило, из объектов структурного типа. При чтении-записи бинарных файлов удобнее всего пользоваться функциями, выполняемыми блоковый ввод-вывод fread и fwrite.Наиболее распространенные функции, с помощью которых можно организовать работу с файлами: 1) int fileno(FILE *f) – возвращает значение дескриптора файла f fd (число, определяющее номер файла); 2) long filelength(int fd) – возвращает длину файла, имеющего номер (дескриптор) fd в байтах; 3) int chsize(int fd, long pos) – выполняет изменение размера файла, имеющего номер fd, признак конца файла устанавливается после байта с номером pos; 4) int fseek(FILE *f, long size, int kod) – выполняет смещение указателя файла f на size байт в направлении признака kod: 0 - от начала файла;1 - от текущей позиции указателя; 2 - от конца файла; 5) long ftell(FILE *f) – возвращает значение указателя на текущую позицию файла (-1 – ошибка); 6) int feof(FILE *f) – возвращает ненулевое значение при правильной записи признака конца файла; 7) int fgetpos(FILE *f, long *pos) – определяет значение текущей позиции pos файла f, возвращает 0 при успешном завершении.

65. Работа с файлами. Указатель текущей позиции в файле, его перемещение к нужной позиции. Каждый открытый файл, как уже отмечалось, имеет скрытый указатель на текущую позицию в нем. При открытии файла этот указатель устанавливается на начало данных, и все операции в файле будут производиться с данными, начинающимися в этой позиции. При каждом выполнении функции чтения или записи указатель смещается на количество прочитанных или записанных байт, т.е. устанавливается после прочитанного или записанного блока данных в файле – это последовательный доступ к данным. В языке Си/С++ можно установить указатель на некоторую заданную позицию в файле. Для этого используют стандартную функцию fseek, которая позволяет выполнить чтение или запись данных в произвольном порядке. Декларация функции позиционирования следующая:

int fseek(FILE *f, long size, int code);

Значение параметра size задает количество байт, на которое необходимо сместить указатель в файле f, в направлении параметра code, который может принимать следующие значения:

– смещение от начала файла –

0

(SEEK_SET);

– смещение от текущей позиции –

1

(SEEK_CUR);

– смещение от конца файла –

2

(SEEK_END).

Таким образом, смещение может быть как положительным, так и отрицательным, но нельзя выходить за пределы файла. В случае успеха функция возвращает нулевое значение, а в случае ошибки (например, попытка выхода за пределы файла) – единицу. Доступ к файлу с использованием функции позиционирования (fseek) называют произвольным доступом. Иногда нужно определить текущее положение в файле. Для этого используют функцию со следующей декларацией:

long ftell(FILE *f);

которая возвращает значение указателя на текущую позицию в файле или –1 в случае ошибки.

66. Графический режим. Функции черчения и Заполнения С++ Builder позволяет программисту разрабатывать программы, которые работают с графикой. Программа может вывести графику на поверхность формы (или компонента image), которой соответствует свойство canvas (Canvas — холст для рисова­ния). Для того чтобы на поверхности формы или компонента image появи­лась линия, окружность, прямоугольник или другой графический элемент (примитив), необходимо к свойству canvas применить соответствующий ме­тод. Например, оператор Forml->Canvas->Rectangle(10,10,50,50); рисует на поверхности формы прямоугольник. LineTo(x,y) - Рисует линию из текущей точки в точку с указанными координатами. Rectangle(x1, y1, x2, y2) - Рисует прямоугольник, xl, y1 и x2, y2 — коор­динаты левого верхнего и правого нижнего уг­лов прямоугольника. Цвет границы и внутрен­ней области прямоугольника могут быть раз­ными FillRect(xl,yl,x2,y2) - Рисует закрашенный прямоугольник, xl, yl, x2, y2 определяют координаты диагональных углов. FrameRect(xl,yl,x2,y2) - Рисует контур прямоугольника, xl, yl, х2, у2 - определяют координаты диагональных углов. RounRect(xl,yl,x2,y2,x3,y3) - Рисует прямоугольник со скругленными углами. Ellipse(xl,yl,x2,y2) - Рисует эллипс или окружность (круг), xl. y1. х2. у2 - координаты прямоугольника, внутри которого вычерчивается эллипс или, если пря­моугольник является квадратом, окружность. Polyline (points,n) - Рисует ломаную линию, pointsмассив типа TPoint. Каждый элемент массива представля­ет собой запись, поля х и у которой содержат координаты точки перегиба ломаной; n — коли­чество звеньев ломаной. Метод Polyline вы­черчивает ломаную линию, последовательно соединяя прямыми отрезками точки, координа­ты которых находятся в массиве: первую со второй, вторую с третьей, третью с четвертой и т. д. Для рисования дуги эллипса (рис. П 6.2) используется функция

Arc (hdc, x1, y1, x2, y2, xStart, yStart, xEnd, yEnd);

в которой значения (x1, y1) задают левый верхний угол, (x2, y2) – правый нижний; (xStart, yStart) – начало дуги; (xEnd, yEnd) – конец дуги.

Rectangle – прямоугольник; Ellipse – эллипс; RoundRect – прямоугольник со скругленными углами; Chord – дуга кривой эллипса, концы которой соединены хордой; Pie – кусок, вырезанный из эллипса; Polygon – многоугольник; PolyPolygon – множество многоугольников. Функция FillRect (hdc, &rect, hBrush); закрашивает прямоугольник (не включая правую и нижнюю координаты) заданной кистью. Функция FrameRect (hdc, &rect, hBrush); использует кисть для рисования прямоугольной рамки, но не закрашивает внутреннюю область. Функция InvertRect (hdc, &rect); инвертирует все пиксели в прямоугольнике, устанавливая единичные биты в ноль, а нулевые – в единицу, т.е. переводит белую область в черную, черную – в белую (зеленую – в фиолетовую). Функция PaintRgn закрашивает внутреннюю область региона текущей выбранной в контекст устройства кистью. Во всех функциях предполагается, что регион определен в логических координатах.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]