Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик ПиОА / СправПосЛР89.doc
Скачиваний:
33
Добавлен:
22.03.2015
Размер:
524.8 Кб
Скачать

2. Определение и использование массивов

тип имя[константное_выражение_целого_типа]={список значений};

Пример:

а) intc[5] = {1,2,3,4,5}; с[3] = 6;

б) const int n = 5; int a[n];

в) const int n = 5; int b[n] = {1,2,3,4,5};

г) float d[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; d[2][4] = 8;

3. Определение и использование структур

1) Описание структурного типа

struct имя_типа{тип имя_характеристики1;

тип имя_характеристики2;

. . .

тип имя_характеристикиn;};

Пример:

struct student {char fam[10]; int gr; int sb;};

2) Определение объекта структуры

имя_типа имя_объекта = {список значений характеристик};

3) Обращение к характеристике объекта:

имя_объекта.имя_характеристики = значение;

Пример:

studentst1 = {“Иванов И.И.”, 1985, 4.5};st1.gr= 1986;

4) Определение массива структурных объектов

studentgroup[20]; group[0].gr = 1986; group[0].sb = 4.3;

3А. Определение функций

Синтаксис определения имеет вид:

тип_функции имя_функции(спецификации_формальных_параметров)

{ Тело функции }

Тип функцииэто тип выражения, значение которого возвращает функция в точку вызова с помощью оператораreturn. Если функция в точку вызова никакого значения не возвращает, то вместо типа ставится ключевое словоvoid. В последнем случае вызов функции не может быть операндом выражения, т.е. должен быть отдельным оператором.

Имя функциидолжно быть уникальным в пределах всей программы и записывается по правилам, установленным для идентификаторов.

Спецификации формальных параметров– либо отсутствуют (скобки обязательны), либоvoid, либо список описаний формальных параметров, в конце которого может быть многоточие.

Описание формального параметра имеет вид:

тип имя_параметра,

тип имя_параметра = значение_по-умолчанию.

Вторая форма будет рассмотрена ниже.

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

В качестве параметра может выступать указатель, в том числе и указатель на другую функцию.

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

returnвыражение;

Тип результата вычисления выражения определяет тип функции. В функции могут быть несколько операторов return, но при каждом вызове функции выполняется только один из них.

Если тип выражения не будет соответствовать типу результата в заголовке функции, то компилятор выдаст ошибку. Если функция не возвращает никакого значения (тип void), то используется формаreturn; (которую можно опускать).

Примеры определения функции:

1. int max(int n, int m)

{return n < m ? m : n;}

2. float min(float a, float b)

{if (a < b) return a;

else return b;}

3. void write(void)

{cout<< “\nНазвание: ”;}

м) Описание функции

Определение функции должно предшествовать первому обращению (вызову) к ней в программе. С этой целью вместо определения может использоваться описание (прототип, заголовок функции), например:

int max(int n, int m); или int max(int, int);

Если определения функций находятся в библиотеке (например, стандартные), то предваряющее подключение их прототипов (заголовков), находящихся в соответствующих заголовочных файлах, осуществляется препроцессорной директивой:

#include <имя_файла.h>

имя_файла.h– файл с заголовками (прототипами, описаниями) (заголовочные файлы имеют расширение .h).

Различные классы стандартных функций распределены по различным библиотекам и соответствующим заголовочным файлам.

н) Вызов функции

Синтаксис вызова (обращения):

имя_функции(список_фактических_параметров);

Список фактических параметровлибо отсутствует, либоvoid, либо разделенные запятыми фактические параметры.

Фактический параметр(аргумент) – это выражение, частным случаем которого, как определено ранее, может быть константа, переменная, массив, объект (экземпляр структуры, класса, объединения), вызов функции или имя указателя на другую функцию, которая вызывается в теле данной функции.

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

(целевой_тип) имя_аргумента

или целевой_тип (имя_аргумента).

Многие стандартные функции перегружены для различных типов параметров, поэтому, например, функции sin() могут передаваться при вызове как вещественные, так и целые числа. В то же время для вычисления абсолютного значения числа предусмотрены две разноименные функции для целый чисел (abs()) и вещественных чисел (fabs()).

В общем случае аргумент является выражением, поэтому перед передачей управления функции вычисляется выражение и значение выражения преобразуется в соответствии с типом параметра.

В языке Си существуют два варианта вызова функции:

а) вызов функции является операндом выражения;

б) вызов функции является отдельным оператором.

В первом случаерезультат передается в точку вызова с помощью оператораreturn.

Пример: Написать определение функции для вычисления выражения:

y=|a|ex-sinb/x.

и продемонстрировать вариант ее вызова.

double f(double x, double a, double b)

{ double y=fabse(a)*exp(x)-sin(b/x); return y; }

void main()

{ double x1,a1,b1,y1;

cin>>x1>>a1>>b1;

y1=f(x1,a1,b1);

cout<<”y= “<<y1; }

Во втором- результат передается через список параметров. Во втором варианте передача аргумента-результата осуществляется специальным образом. Если результатов несколько, то один из них может передаваться в точку вызова, а остальные – через список параметров.

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

Пример:

void ChangePtr(double *a, double *b)

{double c = *a; *a = *b; *b = c;}

voidmain()

{ double d = 1.23;

doublee = 4.56;

ChangePtr(&d, &e); }

Здесь реализован вызов функции с передачей аргументов по ссылке. Формальные параметры являются указателями, поэтому при вызове функции необходимо передавать адреса аргументов или однотипные указатели. В первом случае параметр-указатель при вызове инициализируется адресом передаваемого объекта, во втором – адресом, содержащимся в однотипном указателе. Изменение значения параметра-указателя в теле функции не влечет изменение аргумента-указателя, т.е. указатель передается по значению.

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

void ChangePtr(double &a, double &b)

{double c = a; a = b; b = c;}

void main()

{double d = 1.23;

double e = 4.56;

ChangePtr(d, e); }

Последний способ предпочтителен, так как не требуются операции разыменования в теле функции. Однако, если требуются операции адресной арифметики над аргументами, необходимо использовать указатели.

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

4. Структура визуальной среды С++ Builder

Администратор (инспектор) проектапредназначен для манипуляции с текущим проектным файлом с расширением.cpp. Открытие Администратора проекта:View[ProjectManager]. Окно Администратор проекта содержит список всех составляющих фалов, ассоциированных с текущим проектом. Допустимые операции:

- перетаскивание мышью элементов из одной части проекта в другую;

- удаление элементов;

- открытие элементов проекта.

Контекстное меню зависит от типа выбранного файла и обеспечивает :

- открытие файла;

- удаление из проекта;

- сохранение файла;

- компиляцию;

- настройку параметров редакторов среды.

Редактор формы. Форма представляет собой окно с управляющими визуальными компонентами, которые переносятся программистом на стадии проектирования или создаются динамически в процессе работы программы. C++ Builder создает форму в окне Редактора формы при добавлении формы к проекту или берет ее из хранилища объектов. Открытие:

File | New Application | New Form | Open Project.

Визуальные компоненты берутся из палитры компонентов и помещаются на форму одним из двух способов:

  1. Щелчок левой кнопки мыши на компоненте и затем щелчок левой кнопки мыши на форме.

  2. Двойной Щелчок левой кнопки мыши на компоненте.

Контекстное меню обеспечивает автоматизацию настройки положения и размеры объектов на форме.

Инспектор объектовпредназначен для задания нужных свойств компонентов (объектов) помещаемых на форму, а также для кодирования функций-обработчиков событий, связанных с их назначением. Инспектор объектов состоит из двух вкладок: свойства (Properties) и события (Events). Вкладка свойств обеспечивает возможность манипулирования свойствами компонентов (объектов), задавая их исходное (начальное) значение. Изменение свойств компонентов во временя выполнения программы требует написания соответствующих текстов кода обработки событий. Свойства могут быть вложенными. Такие свойства отмечены знаком «+» слева от имени базового свойства.

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

В верхней части инспектора объектов расположен раскрывающийся список всех объектов на форме.

Редактор кодаобеспечивает доступ и редактирование всего кода программного модуля. В ходе визуального создания объектов курсор редактора кода устанавливается автоматически на соответствующий участок кода. Может содержать несколько вкладок по числу открытых файлов проекта.

С помощью контекстного меню (щелчок правой кнопки мыши) редактора кода можно выполнить следующие операции:

  • OpenFileAtCursor– открывает текстовый файл модуля начиная с текущей позиции курсора.

  • RunToCursor– запускает загруженную программу до строки текста содержащей курсор. После этого можно перейти к пошаговому исполнению программы:Run|StepOverилиRun|TraceInto.

Контекстное меню редактора кода обеспечивает:

- переход от файла SourceкHeaderи обратно;

- закрытие текущей страницы;

- выдача контекстно-зависимой справки;

- открытие файла с перечнем сообщений об ошибках компиляции и компоновки;

- открытие вложенного меню отладчика;

- открытие окна проводника классов;

- открытие окна текущих настроек редактора кода и др.

Хранилище объектов. В качестве объектов могут выступать подготовленные C++ Builder или созданные программистом формы, проекты, модули данных и мастера. Кроме объектов в хранилище могут быть помещены их шаблоны. Хранилище объектов позволяет хранить и использовать ранее разработанные проекты путем их модификации.

Доступ к хранилищу: File | New | New Items | Project.

Запись в хранилище: Project | Add To Repository.

Запись шаблона объекта в хранилище: Tools|Repository... |Add... |Save...

Палитра компонентов. C++ Builder содержит библиотеку визуальных компонентов, которая объединяет более 100 повторно используемых компонентов. Компонент – это прототип конкретного объекта на форме. Основные компоненты помещены на палитру компонентов.

Стандартные компоненты могут быть модифицированы и помещены в библиотеку. Таким образом, создаются пользовательские компоненты. Создание компонент базируется на механизме наследования и проходит следующие стадии:

  • наследование от существующего компонентного типа;

  • определение новых свойств, методов и событий;

  • регистрация созданной компоненты.

Стандартные компоненты объединены в группы, реализованные в виде вкладок на панели компонентов.

Визуальная среда С++ Builderвключает широкий набор средств, обеспечивающих автоматизацию создания проекта. К этим средствам относятся: суфлер кода (CodeInsight), проводник классов (ClassExplorer), отладчик (Debuger), страж кода (CodeGuard).

а) Суфлер кода.Поддерживает процесс написания программы в среде Редактора кода, вызывая оперативную информацию в окне редактора по следующим категориям:

  • синтаксис и семантика кодовых конструкций;

  • структура объекта (имя.|);

  • структура класса объекта (имя объекта ->| );

  • параметры функции (имя функции(| );

  • общеупотребительные кодовые конструкции С++ (Ctrl+J);

  • списки классов, свойств, методов и событий (Ctrl+”Пробел”);

  • информация о переменной, разрешенной справа от знака равенства (имя =| и Ctrl+”Пробел”);

  • значения типизированных переменных в процессе отладки (Пометить точку останова->RUN->Навести курсор на имя переменной);

  • объявления идентификаторов (при наведении курсора на идентификатор);

  • поиск и замена текста (навести курсор(или выделить на искомый элемент и Ctrl+R);

  • список фалов контейнера системы (Ctrl+B).

Подсказка не отображается, если курсор указывает на исходное определение объекта либо, если определение объекта не распространяется на данный блок.

Данная информация создается динамически в процессе написания программы по завершении написания очередной кодовой конструкции. Информация берется из текущего кода, созданного в окне Редактора, и из подключенных с помощью директивы includeфайлов исходного текста.

Режимы работысуфлера задаются на вкладке контекстного меню (открывается щелчком правой кнопки мышиPropertiesилиToolsEditorOptionsCodeInsight). Сняв флажок можно выключить соответствующую автоматическую подсказку. Там же приведен перечень шаблонов кодовых конструкций, которые можно редактировать, дополнять новыми шаблонами. Правая панель вверху (Delay) позволяет устанавливать время реакции суфлера.

б) Проводник классов. Отображает иерархию классов и методов проекта. Поддерживает процесс создания новых или модификации существующих классов. Контекстное меню обеспечивает автоматизацию создания новых компонентных данных, свойств и соответствующих методов чтения и записи, а также новых методов. Окно контекстного меню открывается щелчком правой кнопки мыши на имени класса в окнеClassExplorer.

Поиск и копирование ранее созданных конструкций из других проектов (файлов) реализуется с помощью специального диалогового окна, которое открывается при активизации подменю Find in files пункта главного меню Search.

Режимы работыпроводника изменяются с помощью опцийClassHierarchyиNodeв окне проводника, а также с помощью вкладкиClassExplorerподменюEnvironment Options пункта главного меню Tools.

в) Отладчик. Отладка – это процесс локализации и фиксирования программных логических ошибок и ошибок, связанных с периодом исполнения программы. Интегрированный отладчик позволяет программисту:

  • управлять процессом выполнения приложения;

  • следить за значениями простых переменных, массивов и структур, за поведением объектов – экземпляров классов, в том числе компонентов;

  • модифицировать значения элементов информации, не выходя из режима отладки.

Рекомендуемая установка режимов работы отладчика:

а) у отладчика есть несколько окон. Целесообразно сделать их все видимыми.

Tools  Debugger Options  General  Ispectors stay on top.

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

Tools  Debugger Options  OS Exceptions.

в) в ходе выполнения программы можно контролировать ход изменения отдельных переменных, помещаемых в список WatchList. Этот список обеспечивает останов программы при изменении переменной, находящейся в списке. Для занесения переменной в список достаточно навести указатель мыши на идентификатор щелком правой кнопки мыши открыть контекстное меню и активизировать опциюDebugи в раскрывающемся списке отметить пунктAddWatchatCursor. В открывшемся спискеWatchListщелчком правой кнопки мыши на выделенной переменной открыть контекстное меню и в нем активизировать пунктBreakWhenChanged.

г) Страж кода (Code Guard).

Предназначен для выявления логических ошибок.

Включение режима: Project  Options CodeGuard. Включить соответствующие (все) флажки.

Настройка: Tools  Code Guard Configuration. Как правило, настройки по умолчанию не меняют. Важно, чтобы был помечен флажокEnable.

  1. Создание переносимого приложения

Исполняемый файл приложения, созданный в обычном режиме, подгружает коды некоторых стандартных функций, расположенных в библиотеках среды проектирования, во время выполнения приложения. Чтобы приложение было независимым от среды, необходимо произвести компоновку программы, предварительно изменив некоторые настройки компилятора и компоновщика.

1. ProjectOptionsCompiler.

2. Включить режим Release(по умолчанию:Fulldebug).

3. ProjectOptionsLinker.

3. Сбросить флажок: Use dynamic RTL.

4.  OK.

  1. Выполнить команду: ProjectBuild Project1.

  2. Перенести приложение (exe– файл) в нужный директорий.

7. Запустить приложение в автономном режиме (на компьютере, где не установлен Builder)..

  1. Быстрые клавиши редактирования

В редакторе кода имеется возможность работы с быстрыми клавишами.

Shift+Delete– перенести выделенный блок из окна редактора в буфер обмена.

Shift+Insert– перенести информацию из буфера обмена в текст.

Shift+ F6 – активизировать предыдущее активное окно.

Alt+ F5 – показать окно программы.

Ctrl + F9 – компиляция и запуск из оболочки программирования.

Ctrl + Insert – копировать выделенный блок в буфер обмена.

Ctrl + F1 – получить контекстное меню.

Ctrl + K,B– пометить начало блока.

Ctrl + K,K– пометить конец блока.

Ctrl + K,P– напечатать блок.

Ctrl + K,C– копировать блок, начиная с позиции курсора.

Ctrl + K,V– переместить блок.

7. Структура проекта в C++ Builder

Любая программа в C++Builderавтоматически оформляется в виде проекта (Project). Проект состоит из нескольких файлов, которые создаются автоматически.

Все файлы проекта необходимо хранить в отдельной папке. Вначале работы над проектом целесообразно выполнить операцию SaveProjectas(илиSaveall), при этом будет предложено сохранить файлыUnit1.cppиProject1.bpr. Исходное количество файлов в проекте – шесть. Если далее создаются дополнительные файлы проекта, то их необходимо добавить в проект (пункт менюProjects  Add to project).

Основные файлы проекта:

Project1.res– файл ресурсов приложения. Содержит описание пиктограмм, графических изображений, курсоров мыши, строк, созданных программистом и отображаемых на форме.

Unit1.cpp–файл реализации проекта. Содержит исходный текст обработчиков событий приложения. Это основной файл, с которым работает программист.

Unit1.dfm– текстовый файл, содержащий описание формы и всех компонентных объектов, статически размещенных на ней. Этот файл поддерживается и обновляется средой С++Builderавтоматически.

Имя формы, например Form1, является одновременно и именем класса для ее объектов. Объявление этого класса содержится в файлеUnit1.h. Стандартный идентификатор класса формы имеет вид: TFormX, где X – число, задающее номер формы в последовательности всех форм проекта.

Существует две разновидности форм: модальная (modal) и немодальная (modeless).

Модальные диалоговые окна раскрываются методом ShowModalи позволяют просматривать и модифицировать параметры с помощью объектов формы. Чтобы перейти на другую форму, модальную форму необходимо закрыть.

Немодальные формы раскрываются методом Show() и остаются на экране, не препятствуя переключению на другие формы.

Формы могут находиться в памяти статически и динамически. Статические формы постоянно находятся в памяти, динамические создаются в процессе выполнения программы. Изменить соответствующий статус формы можно с помощью вкладки Formsдиалогового окнаProjectoptions. Формы, показанные в спискеAuto-createforms, являются статическими. Их можно перевести в разряд динамических (Availableforms) путем манипулирования соответствующими управляющими кнопками. Результат манипулирования можно посмотреть в файле реализации проекта (Project.cpp). автоматически исчезнут соответствующие инструкцииApplicationCreateForm( ).

Project1.cpp– управляющий модуль проекта. В этот файл автоматически включаются все формы, ресурсы, программные модули и модули данных проекта. Именно здесь инициируется, запускается и завершается исполняемый код приложения, создаются его главная и дочерни формы если таковые имеются.. Любая новая форма, программный модуль или модуль данных автоматически включаются в проектный файл. Этот файл категорически не рекомендуется редактировать вручную.

Project1.bpr– обеспечивает проведение компиляции и сборки приложения. Менеджер проектов автоматически отслеживает в этом файле все текущие проектные настройки, сделанные программистом по командеProjectOptionsглавного меню. Он содержит ссылки на все формы проекта и относящиеся к ним модули.

Unit1.h–интерфейсный модулю с объявлениями компонентных объектов формы и ее конструктора. Функции-обработчики объявлены с ключевым словом _fastcall. Это означает, что передача параметров идет не через стек, а через регистры центрального процессора, что значительно сокращает время обработки событий, а значит и время выполнения программы.

Файлы с расширением .tdsхранят настройки проекта: какие окна открыты, их координаты. Сохраняет внешний вид приложения.

После компиляции исходного кода добавляется файл Project1.objи после компоновки –Project1.exe.

При сохранении создаются резервные копии некоторых файлов с расширениями, например, ~ddp, ~cpp.

При сохранении проекта (SaveProjectas) в соответствующей папке последовательно сохраняются файлыUnit1.cpp,Project1.bprи сопутствующие им одноименные файлы. При этом система выдает запрос на сохранение автоматически. Эта опция менюFileдолжна быть активизирована только один раз. Повторная активизация создает в той же папке новый проект с именемProject2, что недопустимо.

Соседние файлы в папке Курсовик ПиОА