Лабораторная работа №1.

Программирование линейных алгоритмов

         Цель работы: изучить правила составления текстов программ, научиться реализовывать линейные алгоритмы, а также составлять каркас простейшей программы в среде C++ Builder. Написать и отладить программу линейного алгоритма.

Интегрированная среда разработчика C++ Builder

         Среда Builder визуально реализуется в виде нескольких окон, одновременно раскрытых на экране монитора. Количество, расположение, размер и вид окон может меняться пользователем в зависимости от поставленной задачи. Меню среды Builder может иметь вид, представленный на рис. 1.1.

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

Окно инспектора объектов (вызывается c помощью клавиши F11) предназначено для изменения свойств выбранных компонентов и состоит из двух страниц. Страница Properties (Свойства) предназначена для изменения необходимых свойств компонента, страница Events (События) - для определения реакции компонента на то или иное событие (например, нажатие определенной клавиши или щелчок по кнопке мыши).

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

Окно текста программы предназначено для просмотра, написания и редактирования текста программы. В системе C++ Builder используется язык программирования C++. При первоначальной загрузке в окне текста программы находится текст, содержащий минимальный набор операторов для нормального функционирования пустой формы в качестве Windows-окна.

Программа в среде C++ Builder составляется как описание алгоритмов, которые необходимо выполнить, если возникает определенное событие, связанное с формой (например, щелчок по кнопке мыши - событие OnClick, создание формы - OnCreate). Для каждого обрабатываемого в форме события с помощью страницы Events инспектора объектов в тексте программы организуется функция, между символами { и }, в которой программист записывает на языке С++ требуемый алгоритм.

Переключение между окном формы и окном текста программы осуществляется с помощью клавиши F12.

1.1.Структура программ C++ Builder

Программа в C++ Builder состоит из множества моделей, которые объединяются в один проект с помощью файла проекта (файл с расширением .bpr). Файл проекта автоматически создается и обрабатывается средой C++ Builder и не предназначен для редактирования. Объявления классов, функций и переменных находятся в заголовочном файле (расширение .h), текст программы, написанный на языке C++, - в файле исходного текста (расширение .cpp). Описание окна формы находится в файле с расширением .dfm. Файл проекта может быть только один, файлов с другими расширениями может быть несколько.

Внимание! Для того чтобы перенести проект на другой компьютер, необходимо переписать все файлы с расширениями: bpr, h, cpp, dfm.

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

Файл проекта имеет следующую структуру:

// Директивы препроцессора

#include <vcl.h>

#pragma hdrstop

// Подключение файлов форм и файлов ресурсов

USEFORM("Unit1 .cpp", Form1);

USEFORM("Unit2.cpp", Form2);

// Главная программа

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

Application->Initialize(); // Инициализация

 // Создание объектов форм

Application->CreateForm(___classid(TForm1), &Form1);

Application->CreateForm(___classid(TForm2), &Form2);

Application->Run(); // Выполнение программы

}

 

Заголовочный файл имеет следующую структуру:

// Директивы препроцессора

#ifndef Unit1 H

#define Unit1

//-----------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

// Объявление класса формы class

TForm1 : public TForm

{

// Компоненты, размещенные на форме

__ published:      // IDE-managed Components

TLabel *Label1;

TEdit *Edit1;

TMemo *Memo1;

TButton *Button1;

 private:      // User declarations

// Объявления функций, типов переменных, доступных

 // только в данном модуле

public:                 // User declarations

// Объявления функций, типов, переменных, доступных

 // в данном и в других модулях

         __fastcall TForm1(TComponent* Owner);

};

extern PACKAGE TForm1 *Form1;

// Объявления функций, типов, переменных, которые

// не включаются в данный класс

#endif

Файл текста программы имеет следующую структуру:

// Директивы препроцессора

#include <vcl.h> // Подключение заголовочного файла библиотеки VCL

#pragma hdrstop // Установки компилятора

#include "Unit1.h" // Подключение заголовочного файла

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1; // Объявление объекта формы

//-----------------------------------------------------------------------

// Вызов конструктора формы

___fastcall TForm1 ::TForm1 (TComponent* Owner)

: TForm(Owner)

{

}

1.3. Пример выполнения задания

Задание: Cоставить программу вычисления арифметического выражения для заданных значений x, y, z:

                                     .

Панель диалога программы организовать в виде,  представленном на рис 1.2.

                                           1.3.1.Настройка формы

Пустая форма в правом верхнем углу имеет кнопки управления, которые предназначены для свертывания формы в пиктограмму p1, разворачивания формы на весь экран p4, возвращения к исходному размеру p2 и для закрытия формыp3. С помощью мыши, «захватывая» одну из кромок формы или выделенную строку заголовка, отрегулируйте нужные размеры формы и ее положение на экране.

1.3.2.Изменение заголовка формы

Новая форма имеет одинаковые имя (Name) и заголовок (Caption) - FORM1. Имя формы менять не рекомендуется, т.к. оно входит в текст программы.

Рис. 1.2

 

Для изменения заголовка вызовите окно инспектора объектов (F11) и щелкните кнопкой мыши по форме. В форме инспектора объектов найдите и щелкните мышью по Properties - Caption . В выделенном окне наберите номер лабораторной работы, номер группы, Ф.И.О., например, “Лаб. раб. N1. Ст. 4 к ПИЭ Курбанова Али”.

1.3.3.Размещение строки ввода (TEdit)

Если необходимо ввести из формы в программу или вывести на форму информацию, которая вмещается в одну строку, используют окно однострочного редактора текста, представляемого компонентом TEdit.   В данной программе с помощью однострочного редактора будут вводиться переменные x,y,z типа double или int.   Выберите в меню компонентов Standard пиктограммуp8, щелкните мышью в том месте формы, где вы хотите ее поставить. Вставьте три компонента TEdit в форму. Захватывая их мышью, отрегулируйте размеры окон и их положение (см. рис. 1.2). Обратите внимание на то, что в тексте программы появились три новые однотипные переменные Editl, Edit2, Edit3. В каждой из этих переменных с расширением Text будет содержаться строка символов (тип String) и отображаться в соответствующем окне Edit.

Так как численные значения переменных x,y,z имеют действительный тип, для преобразования строковой записи числа, находящегося в переменной Edit1->Text, в          действительное,                             используется стандартная функция

X=StrToFloat(Edit1->Text).

Если исходные данные имеют целочисленный тип, например int, то используется стандартная функция X=StrToInt(Edit1->Text).

При этом в записи числа не должно быть пробелов.

С помощью инспектора объектов установите шрифт и размер символов, отражаемых в строке Edit (свойство Font).

1.3.4.Размещение надписей (TLabel)

На форме рис. 1.2 имеются четыре пояснительные надписи. Для нанесения таких надписей на форму используется компонент TLabel. Выберите в меню компонентов Standard p7пиктограмму щелкните по ней мышью. После этого в нужном месте формы щелкните мышью, появится надпись Label1. Проделайте это для четырех надписей. Для каждой надписи, щелкнув по ней, отрегулируйте размер и, изменив свойство Caption инспектора объектов, введите строку, например “Введите значение X:”, а также выберите размер символов (свойство Font).  Обратите внимание, что в тексте программы автоматически появились четыре новые переменные типа TLabel. В них хранятся пояснительные строки, которые можно изменять в процессе работы программы.

1.3.5. Размещение многострочного окна вывода (TMemo)

Для вывода результатов работы программы обычно используется текстовое окно, которое представлено компонентом (TMemo). Выберите в меню компонентов пиктограммуp6  и поместите компонент TMemo на форму. С помощью мыши отрегулируйте его размеры и местоположение. После установки с помощью инспектора свойства ScrollBars - SSBoth в окне появятся вертикальная и горизонтальная полосы прокрутки. В тексте программы появилась переменная Memo1 типа ТMemo. Информация, которая отображается построчно в окне типа ТMemo, находится в массиве строк Memo1->Lines. Каждая строка имеет тип String.

Для очистки окна используется метод Memo1->Clear. Для того чтобы добавить новую строку в окно, используется метод Memo1->Lines->Add (переменная типа String).

Если нужно вывести число, находящееся в переменной действительного или целого типа, то его надо предварительно преобразовать к типу String и добавить в массив Memo1->Lines.Например, если переменная u=100 целого типа, то метод Memo1->Lines-> Аdd (“Значение u=”+IntToStr(u)) сделает это и в окне появится строка “Значение u=100”. Если переменная u=-256,38666 действительная, то при использовании метода Memo1->Lines->Add (“Значение u=”+FloatToStrF(u,fffixed,8,2)) будет выведена строка “Значение u= -256.39”. При этом под все число отводится восемь позиций, из которых две позиции занимает его дробная часть.

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

1.3.6.Написание программы обработки события создания формы

(FormCreate)

При запуске программы возникает событие «создание формы» (OnCreate). Создадим программу для обработки этого события, которая заносит начальные значения переменных x, y, z в соответствующие окна TEdit, а в окне ТMemo помещает строку с указанием номера группы и фамилии студента. Для этого дважды щелкнем мышью на любом свободном месте формы. На экране появится текст, в который автоматически внесен заголовок функции - обработчика события

создания формы: void__fastcallTForm1::Button1Click(TObject *Sender). Между {…} вставим текст программы (смотрите пример, п. 1.3.8).

1.3.7.Написание программы обработки события

нажатия кнопки (ButtonClick)

Поместите на форму кнопку, которая описывается компонентом TButton, для чего выберите в меню компонентов Standard пиктограмму p5. С помощью инспектора объектов измените заголовок (Caption) - Button 1 на слово “Выполнить” или другое по вашему желанию. Отрегулируйте положение и размер кнопки.

После этого два раза щелкните мышью по кнопке, появится текст программы, дополненной заголовком процедуры обработчика события - нажатия кнопки (void___fastcall TForm2::Form Create(TObject *Sender)).

Наберите текст этой процедуры, приведенный в примере.

1.3.8. Запуск и работа с программой

 

Запустить программу можно, нажав Run в главном меню Run, или клавишу F9, или пиктограммуp9. При этом происходит трансляция и, если нет ошибок, компоновка программы и создание единого загружаемого файла с расширением .exe. На экране появляется активная форма программы (см. рис.1.2).

Работа с программой происходит следующим образом. Нажмите (щелкните мышью) по кнопке “Выполнить”. В окне Memo1 появится результат. Измените исходные значения x, y, z в окнах Edit и снова нажмите кнопку «Выполнить» - появятся новые результаты. Завершить работу программы можно, нажав или ProgramReset в главном меню Run, или кнопку p3на форме. После отладки программы следует сохранить программу, для чего нужно выбрать в меню File пункт Save Project As.

Текст программы:

//----------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Tema1.h"

#include "math.h"

//---------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------

___fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------

void__fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text="3,28"; // Начальное значение X

Edit2->Text="0,54"; // Начальное значение Y

 Edit3->Text="14,65"; // Начальное значение Z

Memo1->Clear(); // Очистка окна редактора Memo1

         // Вывод строки в многострочный редактор Memo1

         Memo1->Lines->Add("Лаб. раб. N1. ПИЭ 4 к. Курбанов Али");

}

void  fastcall TForm1::Button1Click(TObject *Sender)

{

double x,y,z;

x=StrToFloat(Edit1->Text);             //   Считывается значение X

Memo1->Lines->Add("x="+Edit1->Text); // Вывод X в окно Memo1

y=StrToFloat(Edit2->Text);             //   Считывается значение Y

Memo1->Lines->Add("y="+Edit2->Text); // Вывод Y в окно Memo1

z=StrToFloat(Edit3->Text);             //   Считывается значение Z

Memo1->Lines->Add("z="+Edit3->Text); // Вывод Z в окно Memo1

// Вычисляем арифметическое выражение

double a=pow(tan(x+y),2);

double b=exp(y-z);

double c=sqrt(cos(x*x)+sin(z*z));

double u=a-b*c;

// Выводим результат в окно Memo1

Memo1->Lines->Add("Результат U = '+FloatToStrF(u,ffFixed,8,3));

}

//---------------------------------------------------------------------

 

1.4.Выполнение индивидуального задания

         Создать программу вычисления указанной величины. Результат проверить при заданных исходных значениях.

 

1. .

При x = 14.26; y = –1.22;

z = 3.5´10-2;        t=0.564846.

2.

При x = –4.5; y = 0.75´10-4;

z = 0.845´102;      u= -55.6848.

3.  .

При x= 3.74´10-2;  y = –0.825;

z = 0.16´102 ;        ν=1.0553.

4. .

При x = 0.4´104;  y = –0.875;

z = –0.475´10-3;     w= 1.9873.

5.

При x = –15.246; y =4.642´10-2; z = 20.001´102; α=182.036.

6.

При x = 16.55´10-3; y = –2.75;    

z = 0.15;  β=40.630694

7.

При x = 0.1722;  y = 6.33; z = 3.25´10-4;  γ= –205.305571.

8.

При x = –2.235´10-2; y = 2.23;  

z = 15.221;     φ=39.374.

9. .

При x =1.825´102; y = 18.225;         z = –3.298´10-2;        ψ=2131.

10.

При x=3.981´10-2;  y = –1.625 ´ ´103;  z = 0.512; α=1.26185.

11.

При x = 6.251;  y = 0.827;        

z = 25.001;          b=0.7121.

12.

При x = 3.251;  y = 0.325;

z = 0.466´10-4;    c= 4.251433.

13. .

При x=17.42; y= 10.365´10-3;

z = 0.828´105; f=0.33056.

14. .

При x = 12.3´10-1;  y = 15.4;            z= 0.252´103;    g= 82.825623.

15. .

При x = 2.444; y = 0.869´10-2;

z=–0.13´103;      h= 0.49871.

16.

При x =–2.235´10-2;  y = 2.23;    

z = 15.221; w=39.374.