Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа ЯПВУ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Лабораторная работа№ 4

Тема: Программирование циклических структур в среде Си++Builder.

Цель работы: Знакомство с операторами цикла, при создании программ использовать компоненты вкладки Standard среды Си++Builder.

Время выполнения: 2 часа.

1 Порядок выполнения лабораторной работы:

    1. Знакомство с теоретическим материалом, соответствующим теме лабораторной работы

    2. Ответить на следующие вопросы:

1.Перечислить операторы цикла и указать особенности применения каждого.

2.Как применяются операторы перехода (break, continue, goto)?

3.Назначение препроцессора, назвать основные директивы препроцессора и указать правила их использования.

4. Каково значение переменной f:

А) i=1; f=2; while (i<6) i=i+1; f=f*i;

b) i=1; f=2; while (i<6) { i=i+1; f=f*i }

5. Какое значение получит S после выполнения следующих операторов:

А) s=0; i=1; do s=s+i; i=i-1 while (i<=1);

b) s=1; n=1; for (i=2; i<= n; i++) s=s+i;

6. Сколько раз выполнится цикл и какие значения примут переменные:

a) k=0; for (i=1; i<= k+3; i++) k=k+1;

b) k=0; for (i=1; i<= k+3; i++); k=k+1;

7. Какое значение получит S после выполнения следующих операторов

s=0; i=0; while (i<5) i=i+1; s=s+1/i;

8. Какое значение получит S после выполнения следующих операторов

s=0; i=1; while (i>1) {s=s+1/i; i=i-1;}

9. Укажите какое значение получит переменные s и i после выполнения следующих операторов: int i,s; s=0; і=0; whіle( і<5) і=і+1; s=s+1/і;

a) і=5, s=0

b) і=5, s=1

c) і=5, s=0.2

d) і=6, s=1/6

e) i=1, s=0

10. Написать фрагмент программы для определения суммы элементов побочной диагонали.

Задание

  1. Задание группы А: вычислить значение функции по формулам приведенным в лабораторной № 3. Составить блок-схему задачи, написать и отладить программу, учитывая шаг и диапазон изменений значений переменных. Здесь а) – оператор цикла с предусловием; b) – оператор цикла с постусловием

Задание группы В должны быть выполнены задания а) и b).

Таблица 8

№ вар.

1

2

3

4

5

6

7

8

9

10

Вид оператора цикла

a

b

a

b

a

b

b

a

a

b

№ вар.

11

12

13

14

15

16

17

18

19

20

Вид оператора цикла

a

b

a

b

a

b

b

a

a

b

2 Примеры

П ример 2.1. Учитывая изменения значений х в диапазоне [0,7], определить значение функции s при a=2.6, b=-0.39, dx=0.6.

Решение задачи:

Первый способ:1. Алгоритм решения задачи представить в виде блок-схемы (рис.13).

1-ый блок: начало;

2-ой блок: ввод исходных данных, здесь: xn-начальное и xk-конечное значение переменной, по условию задачи это в диапазоне [0,7]; dx – шаг изменения значения x;

3-ий блок: x присваивается начальное значение, т.е. xn =x, а он равен 0 (см. 2-блок);

4,5 и 6-ые блоки - для действительных значений x согласно условиям задачи опремеляется значение функции s;

7-ой блок: вывод вычисленного значения функции s;

8-ой блок: по условию задачи функция s должна быть для вычислена для каждого значения x, увеличивающегося на dx на каждом шаге итерации, поэтому значение переменной x увеливиается на шаг dx;

9-тый блок: пока значение x меньше конечного значения xk вычисление функции циклически повторяется: если текущее значение x меньше xk – (не достиг конца диапазона) операторы тела цикла повторяются, если превысит значение xk , то цикл завершится.

10-тый блок: конец задачи.

2. Установить на форме необходимые компоненты (рисунок-12), назначить свойства. Как видно из рисунка необходимы пять компонентов Label, пять Edit, одно Memo, три Button. Результаты задачи удобно выводить в поля компоненты Memo, т.к. значение функции s вычисляется и выводится для каждого x в диапазоне [0;7]. В поля компонентов Edit вводятся исходные данные.

3. На рисунке 13 приведена блок-схема, характеризующая цикл с постуловием или do …while .

4 . Вычисления осуществляем с помощью события OnClick командной кнопки Button1, вначале объявляем входные и выходные

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

5. Переменной x присваивается начальное значение: x=xn;

6. Цикл – оператор цикла с постусловием do…while (условие):

do if (x<2.8) {i=1; s=(a+b)/(exp(x)+cos(x));} else

if (x>=2.8 && x<=6)

Рисунок 12. Исходная форма

{ i=2; s=(a+b)/(x+1); }

else {i=3; s=exp(x)+sin(x); }

… while (x<=xk);

Для вывода каждого вычисленного значения х используем компоненту Memo1:

Memo1->Lines->Add("при x="+ FloatToStrF(x,ffFixed,4,2)+" : "+

"s= "+ FloatToStrF(s,ffFixed,6,4));

7. Как сказано выше, текущее значение переменной х меняется с шагом dx, т.е. x=x+dx;

Проверяем вычисленное значение x на окончание цикла: while (x<=xk);

8. Как описано в алгоритме, если условие не выполнено, то цикл завершается.

9. Необходимо описать события OnClick командной кнопки Button2. В проекте эта кнопка используется для обновления данных. Перед обновлением данных поля компоненты Edit необходимо с помощью метода Clear очистить это поле:

...

Edit1->Clear();

Следующая функция дает возможность с помощью события OnClick командной

кнопки Button3 закрыть форму.

void __fastcall TForm1::Button3Click (Sender: TObject);

{

Form1->Close();

}

1 0. На рис.14 приведены результаты вычисления функции s для x в диапазоне [0;7].

Второй способ: В соответствии с постановкой задачи рассмотрим другой оператор цикла: Оператор цикла с предусловием whіle (условие) { операторы тела цикла } (цикл-пока).

Этот оператор используется, когда заранее неизвестно сколько раз должны повторяться операторы тела цикла. Формат записи оператора

whіle (<логическое выражение А>) {<тело цикла>; }

Выполнение оператора начинается с вычисления логического выражения А, т.е. x<=xk . Если логическое выражение А истина, то выполняются операторы тела цикла, если значение ложь, то управление передается следующему за циклом оператору. Примеры применения цикла с предусловием можно увидеть из следующего отрывка программы: пока выполняется условие x<=xk (да) операторы тела цикла выполняются, если условие на выполнено (нет), то осуществляется выход из цикла (рис.15).

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

dx=StrToFloat(Edit5->Text);

x=xn; // x присваивается начальное значение

while (x<=xk) { // проверка условия окончания цикла (логическое выражение)

if (x<2.8) { i=1; s=(a+b)/(exp(x)+cos(x)); }

if (x>=2.8 && x<=6) { i=2; s=(a+b)/(x+1); }

if (x>=6){ i=3; s=exp(x)+sin(x); }

Memo1->Lines->Add(“при x=”+FloatToStr(x)+” : “+ “s= “+ FloatToStr(s));

x=x+dx; //увеличение текущего значения x на шаг dx

}

Ц иклические операции выполняются с помощью инструкций for, while, do…while. Третий вид оператора цикла –цикл с параметром :