Цель работы: изучить циклические операторы do..while, while, for, научиться реализовывать циклические алгоритмы. Изучив простейшие средства отладки программ в среде C++ Builder, составить и отладить программу.
Под циклом понимается многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений может быть задано в явной или неявной форме.
Для организации повторений в языке C++ предусмотрены три различных оператора цикла.
Оператор
do
< операторы >
while ( < условие > );
организует повторение операторов, помещенных между ключевыми словами do и while, до тех пор, пока выполнится <условие>=true, после чего управление передается следующему за циклом оператору.
Оператор
while ( <
условие > ) {
< операторы >
}
организует повторение операторов, помещенных между { и }, до тех пор, пока не выполнится <условие>=false. Заметим, что если <условие>=false при первом входе, то <операторы> не выполнятся ни разу, в отличие от do..while, в котором они выполнятся хотя бы один раз.
Оператор
for (i=i1;
i<=i2 ; i++ )
{
<
операторы >
}
организует повторение операторов при нарастающем изменении переменной цикла i от начального значения i1 до конечного i2 с шагом “единица”. Заметим, что если i2>i1, то <операторы> не выполнятся ни разу.
3.2. Средства отладки программ в
C++ Builder
Практически в каждой вновь написанной программе после запуска обнаруживаются ошибки.
Ошибки первого уровня (ошибки компиляции) связаны с неправильной записью операторов (орфографические, синтаксические). При обнаружении ошибки компилятор C++ Builder останавливается напротив первого оператора, в котором обнаружена ошибка. В нижней части экрана появляется текстовое окно, содержащее сведения обо всех ошибках, найденных в проекте. Каждая строка этого окна содержит имя файла, в котором найдена ошибка, номер строки с ошибкой и характер ошибки. Для быстрого перехода к интересующей ошибке необходимо дважды щелкнуть по строке с ее описанием. Для получения более полной информации о характере ошибки необходимо обратиться к HELP нажатием клавиши F1. Следует обратить внимание на то, что одна ошибка может повлечь за собой другие, которые исчезнут при ее исправлении. Поэтому следует исправлять ошибки последовательно, сверху вниз и, после исправления каждой ошибки компилировать программу снова.
Ошибки второго уровня (ошибки выполнения) связаны с ошибками выбранного алгоритма решения или с неправильной программной реализацией алгоритма. Эти ошибки проявляются в том, что результат расчета оказывается неверным либо происходит переполнение, деление на ноль и др. Поэтому перед использованием отлаженной программы ее надо протестировать, т.е. сделать просчеты при таких комбинациях исходных данных, для которых заранее известен результат. Если тестовые расчеты указывают на ошибку, то для ее поиска следует использовать встроенные средства отладки среды C++ Builder. В простейшем случае для локализации места ошибки рекомендуется поступать следующим образом. В окне редактирования текста установить курсор в строке перед подозрительным участком и нажать клавишу F4 (выполнение до курсора). Выполнение программы будет остановлено на строке, содержащей курсор. Теперь можно увидеть, чему равно значение интересующей переменной. Для этого можно поместить на нужную переменную курсор (на экране будет высвечено ее значение) либо нажать Ctrl-F7 и в появившемся диалоговом окне указать интересующую переменную (с помощью данного окна можно также изменить значение переменной во время выполнения программы). Нажимая клавишу F7 (пошаговое выполнение), можно построчно выполнять программу, контролируя изменение тех или иных переменных и правильность вычислений. Если курсор находится внутри цикла, то после нажатия F4 расчет останавливается после одного выполнения тела цикла. Для продолжения расчетов следует нажать <Run> меню Run.
3.3. Порядок выполнения задания
Задание: написать и отладить программу, которая выводит таблицу значений функции S(x) для х, изменяющегося в интервале от X1 до X2 c шагом h.
Панель диалога представлена на рис. 3.1.
Рис 3.1.
Текст программы:
//---------------------------------------------------------------------------
#include
<vcl.h>
#pragma hdrstop
#include
"Unit1.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";
Edit2->Text="2";
Edit3->Text="5";
Edit4->Text="0,25";
Memo1->Clear();
Memo1->Lines->Add("Результаты ст. 4 к. ПИЭ Курбанова А.");
}
//---------------------------------------------------------------------------
void
__fastcall TForm1::Button1Click(TObject *Sender)
{
double
x1,x2,x,h,a,s;
int N;
x=x1=StrToFloat(Edit1->Text);
Memo1->Lines->Add("x1="+Edit1->Text);
x2=StrToFloat(Edit2->Text);
Memo1->Lines->Add("x2="+Edit2->Text);
N=StrToInt(Edit3->Text);
Memo1->Lines->Add("N="+Edit3->Text);
h=StrToFloat(Edit4->Text);
Memo1->Lines->Add("h="+Edit4->Text);
int c=-1; do { x+=h; // Запись эквивалентна x=x+h;
double a=1,
s=1;
for(int
k=1;k<=N;k++)
{
a=c*a*x/k;
s+=a;
}
Memo1->Lines->Add("при
x”+FloatToStrF(x,ffFixed,8,2) +"сумма="+FloatToStrF(s,ffFixed,8,2));
}
while(x<x2);
}
//---------------------------------------------------------------------------
3.4. Выполнение индивидуального
задания
Для каждого x, изменяющегося от a до b с шагом h,
найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)|
и вывести в виде таблицы. Значения a, b, h и n
вводятся с клавиатуры. Так как значение S(x) является рядом
разложения функции Y(x), при правильном решении значения S
и Y для заданного аргумента x (для тестовых значений исходных
данных) должны совпадать в целой части и в первых двух-четырех позициях после
десятичной точки.
Работу программы
проверить для a = 0,1; b = 1,0; h = 0,1; значение
параметра n выбрать в зависимости от задания.
1. ,
;
2.
;
3.
;
4.
;
5.
;
6.
;
7. ,
;
8. ,
;
9. ,
;
10. ,
;
11. ,
;
12. ,
;
13. ,
;
14. ,
;
15. ,
;
16.
.