- •Часть 1
- •Содержание
- •Общие требования к оформлению контрольной работы
- •Лабораторная работа №1. Линейный вычислительный процесс
- •1.1. Общие теоретические сведения
- •Декларация объектов
- •Директивы препроцессора
- •1.2. Создание консольного приложения
- •Стандартные функции вывода информации
- •Стандартные функции ввода информации
- •Ввод-вывод в потоке
- •1.3. Создание оконного приложения Настройка формы
- •Компонента Edit
- •Основные функции преобразования строк
- •Компонента Label
- •Компонента Memo
- •Обработка событий
- •Функция-обработчик FormCreate
- •Функция-обработчик нажатия кнопки (Button*Click)
- •Запуск и работа с программой
- •1.4. Пример выполнения задания
- •1.4.1. Создание консольного приложения
- •1.4.2. Создание оконного приложения
- •1.5. Индивидуальные задания
- •Лабораторная работа №2. Реализация разветвляющихся алгоритмов
- •2.1. Общие теоретические сведения Оператор условной передачи управления if
- •Оператор выбора switch
- •2.2. Создание оконного приложения
- •2.3. Пример выполнения задания
- •2.3.1. Реализация примера оконного приложения
- •Компонента СheckBox
- •Компонента RadioGroup
- •2.3.1. Пример написания программы консольного приложения
- •2.4. Индивидуальные задания
- •Лабораторная работа №3. Реализация циклических алгоритмов
- •3.1. Общие теоретические сведения
- •3.2. Пример выполнения задания
- •3.2.1. Пример создания оконного приложения
- •3.2.2. Пример создания консольного приложения
- •3.3. Индивидуальные задания
- •Лабораторная работа №4. Функции пользователя
- •4.1. Краткие теоретические сведения
- •4.2. Пример выполнения задания
- •4.2.1. Создание оконного приложения
- •4.2.2. Создание консольного приложения
- •4.3. Индивидуальные задания
- •Лабораторная работа №5. Обработка одномерных массивов
- •5.1. Общие теоретические сведения
- •5.2. Создание оконного приложения Компонента StringGrid
- •5.3. Пример выполнения задания
- •5.3.1. Пример создания оконного приложения
- •Настройка компоненты StringGrid
- •5.3.2. Пример создания консольного приложения
- •5.4. Индивидуальные задания
- •Лабораторная работа №6. Обработка двухмерных динамических массивов
- •6.1. Краткие теоретические сведения Особенности применения указателей
- •Связь указателей с массивами
- •Декларация многомерного массива:
- •Указатели на указатели
- •Динамическое размещение данных
- •Минимальный набор действий, необходимых для динамического размещения одномерного массива действительных чисел размером n:
- •4.3.2. Пример создания консольного приложения
- •6.3. Индивидуальные задания
- •Лабораторная работа №7. Использование строк
- •7.1. Общие теоретические сведения Строки как одномерные массивы символов
- •7.2. Создание оконного приложения
- •7.3. Пример выполнения задания
- •7.3.1. Создание оконного приложения
- •7.3.2. Создание консольного приложения
- •7.4. Индивидуальные задания
- •Лабораторная работа №8. Обработка структур с использованием файлов
- •8.1. Теоретические сведения
- •Работа с файлами
- •8.2. Создание оконного приложения Компоненты OpenDialogиSaveDialog
- •8.3. Пример выполнения задания
- •8.3.1. Создание оконного приложения Настройка компонент OpenDialog и SaveDialog
- •Работа с программой
- •8.3.2. Создание консольного приложения
- •8.4. Индивидуальные задания
- •Лабораторная работа №9. Построение графиков функций
- •9.1. Краткие теоретические сведения Построение графиков с помощью компоненты Chart
- •Использование класса Сanvas
- •9.2. Пример создания оконного приложения
- •Настройка формы
- •9.3. Индивидуальные задания
- •Приложение 1. Операции и основные математические функции
- •Стандартные математические функции
- •Приложение 2. Описание общих структур файлов проекта
- •Общая структура файла текста программы Unit*.Cpp
- •Структура заголовочного файла Unit*.H
- •Общая структура файла проекта Project*.Cpp
- •Литература
Оператор выбора switch
Общая форма оператора выбора (переключателя):
switch(выражение) {
case const_1: операторы; break;
…
case const_N: операторы; break;
default: операторы;
}
Вычисляется выражениеи проверяется, совпадает ли его результат со значением одной из констант. При совпадении выполняются операторы этогоcase. Значениямиconst_1,…,const_Nмогут быть только целые или символьные константы. Конструкцияdefaultвыполняется, если результат выражения не совпал ни с одной из констант, и может отсутствовать. Операторbreakвыполняет досрочный выход изswitch(после выполнения ветвиcaseвсе остальные будут опущены). Если операторbreakвcaseне записан, то будут выполняться операторы следующих ветвейcaseдо появления оператораbreak, либо до завершения оператораswitch.
Например:
switсh(i) {
case 1: f=pow(x,2); break;
case 2: f=fabs(x); break;
case 3: f=sqrt(x); break;
default: cout << “Error!” << endl; exit(1);
}
f=f+5;
2.2. Создание оконного приложения
При создании оконного приложения для организации разветвлений используются компоненты в виде кнопок-переключателей. Состояние такой кнопки (включено/выключено) визуально отражается на форме. На форме (рис. 2.1) представлены кнопки-переключатели двух типов TCheckBoxиTRadioGroup.
Компонента CheckBoxсоздает кнопку независимого переключателя, с помощью которой Пользователь может указать свое решение типа да/нет. В программе состояние кнопки связано со значением булевой переменной, которая проверяется с помощью оператораif.
Компонента Radiogroupсоздает группу кнопок – зависимых переключателей. При нажатии одной из кнопок группы все остальные кнопки отключаются. В программу передается номер включенной кнопки (0,1,2,…), который анализируется с помощью оператораswitсh.
В языке C++ используются переменные типа bool, которые могут принимать только два значения –trueиfalse(истина – 1, ложь – 0).
2.3. Пример выполнения задания
Ввести исходные данные x,y,z. Вычислить значениеuв зависимости от выбора:sin(x),cos(x) илиtg(x), после чего определить максимальное либо изu,y,z, либо из их модулей – |u|, |y|, |z|.
2.3.1. Реализация примера оконного приложения
Cоздать форму, представленную на рис. 2.1, скорректировать текст надписей, положение окон Editи написать соответствующую программу.
Компонента СheckBox
В меню Standardвыберите пиктограмму, поместите ее в нужное место формы, измените заголовокCaptionна «max модулей», после чего в тексте программы появится переменнаяCheckBox1 типаTСheckBox. В зависимости от того, сделан выбор или нет, булева переменнаяCheckBox1->Checkedбудет принимать значениеtrueилиfalse.
Компонента RadioGroup
В меню Standardвыберите пиктограмму, поместите ее в нужное место формы. На форме появится окаймленный линией чистый прямоугольник с заголовкомRadioGroup1. Замените заголовок (Caption) на «Выбор функции».
В инспекторе объектов в свойстве Itemsвызовите строчный редактор списка заголовков кнопок и наберите три строки с именами выбираемых функций (cos(x),sin(x),tg(x)), нажмитеОК. После этого внутри компоненты появятся три кнопки-переключателя с введенными надписями.
В тексте Unit1.hпоявилась переменнаяRadioGroup1 типаTRadioGroup. Теперь при нажатии одной из кнопок группы в переменной целого типаRadioGroup1->ItemIndexбудет находиться номер выбранной строчки (отсчитывается от нуля).
В функции FormCreate() желательно установить начальное значение этой переменной, например,RadioGroup1->ItemIndex= 0.
Подготовив форму, создайте функции-обработчики событий FormСreateиBotton1Сlickаналогично первой работе. Текст функций приведен в примере.
Запустите программу и убедитесь в том, что все ветви алгоритма выполняются правильно. Форма приведена на рис. 2.1.
Рис. 2.1
Текст программы может быть следующим:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.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="0,1";
Edit2->Text="0,356";
Edit3->Text="-3,5";
Memo1->Clear();
Memo1->Lines->Add("Лабораторная работа 2");
RadioGroup1->ItemIndex = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double x,y,z,u,ma;
x=StrToFloat(Edit1->Text);
y=StrToFloat(Edit2->Text);
z=StrToFloat(Edit3->Text);
// Проверка номера нажатой кнопки и выбор соответствующей функции
switch(RadioGroup1->ItemIndex){
case 0: u=cos(x);
Memo1->Lines->Add("Cos(x)= "+FloatToStrF(u,ffFixed,8,6));
break;
case 1: u=sin(x);
Memo1->Lines->Add("Sin(x)= "+FloatToStrF(u,ffFixed,8,6));
break;
case 2: u=tan(x);
Memo1->Lines->Add("Tg(x)= "+FloatToStrF(u,ffFixed,8,6));
break;
}
// Проверка состояния кнопки CheckBox1
if (CheckBox1->Checked){
u = fabs(u);
y = fabs(y);
z = fabs(z);
}
// Нахождение максимального из трех чисел
if (u>y) ma=u;
else ma=y;
if (z>ma) ma=z;
if (CheckBox1->Checked)
Memo1->Lines->Add("Max модулей= "+FloatToStrF(ma,ffFixed,8,6));
else Memo1->Lines->Add("Max= "+FloatToStrF(ma,ffFixed,8,6));
}