Цикл с постусловием (Цикл-до)

Синтаксис оператора:

do <Оператор > while (<Выражение>) ;

где:

Выражение - совокупность выражений, разделенных запятой, определяющая условия выполнения цикла.

Оператор – любой оператор С++, в том числе составной оператор.

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

Цикл с постусловием легко преобразовать в цикл с предусловием.

Пример 2. Определить сумму ряда

S = 1 - 1/x + 1/x 2- 1/x3 + …

с заданной точностью e ( при x > 1). Задача решается с использованием рекуррентных соотношений, которые позволяют найти закона формирования следующего члена ряда по предыдущему.

Рекурентную формулу определения очередного члена нашего ряда легко определить: Rn = -Rn/x

Сумма ряда определяется по формуле S=S+Rn

Условие выхода из цикла | Rn | < e

На рисунке 5 представлена схема алгоритма программы. Анализ алгоритма показывает, что он неструктурный, так как в нем присутствует цикл суммирования, который не является ни циклом-пока, ни циклом-до, ни циклом с заданным количеством повторений. Для реализации данного алгоритма на языке С++ необходимо его преобразовать в структурный, чтобы можно было использовать один из имеющихся операторов цикла.

Цикл с постусловием (Цикл-до) - student2.ru

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

Поскольку количество повторений цикла определить не удается, попробуем преобразовать неструктурный цикл к циклу-пока. Для этого необходимо операцию S=S+R продублировать: одну копию поместить до цикла, а вторую – в конце цикла.

Операторы S=0 и S=S+R, записанные до цикла, заменим оператором S=1, так как в этот момент R=1. Условие выхода из цикла также необходимо заменить на противоположное. Окончательный вариант фрагмента алгоритма с ц и к л о м - п о к а показан на рисунке 6, а.

Цикл с постусловием (Цикл-до) - student2.ru

Рисунок 6 - Структурные варианты алгоритма

с использованием цикла-пока (а) и с использованием цикла-до (б)

Его реализация представлена ниже:

#include "stdafx.h"

#include <stdio.h>

#include <math.h>

void main(int argc, char* argv[])

{ float s, r,x,eps;

puts("Input x>1, eps:");

scanf("%f %f", &x, &eps);

s=0;

r=1;

s+=r;

while (fabs(r)>eps)

{ r=-r/x;

s+=r;

}

printf(“ Result= %10.7f r=%10.8\n", s,r);

}

Тот же алгоритм можно преобразовать так, чтобы цикл можно было реализовать с использованием ц и к л а - д о.

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

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

Фрагмент программы с указанным циклом приведен ниже:

do {

printf("Введите значение от %d до % d : ",low, high);

scanf(" %d ", &a);

} while (a<low || a>high);

Другие примеры программ, содержащих циклы, приведены в [1].

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

1. Прочитать и проанализировать задание в соответствии со своим вариантом.

2. Разработать схему алгоритма решения задачи.

3. Написать программу.

4. Вызвать среду программирования Turbo Delphi, создать новый проект консольного приложения и ввести текст программы в среду программирования.

5. Подобрать тестовые данные (не менее 3-х вариантов).

6. Отладить программу на выбранных тестовых данных.

7. Продемонстрировать работу программы преподавателю.

8. Составить отчет по лабораторной работе.

9. Защитить лабораторную работу преподавателю.

Требования к отчету

Отчет должен быть выполнен на бумаге формата А4 или А5 в том числе в тетрадях или на тетрадных листах. Если отчет выполняется на отдельных тетрадных листах, то они должны быть аккуратно обрезаны по линии подшивки и скреплены. Неаккуратно выполненные, оборванные или грязные отчеты не принимаются.

Все записи в отчете должны быть либо напечатаны на принтере, либо разборчиво выполнены от руки синей или черной ручкой (карандаш – не допускается). Схемы также должны быть напечатаны при помощи компьютера или нарисованы с использованием чертежных инструментов, в том числе карандаша.

Каждый отчет должен иметь титульный лист на котором указывается:

а) наименование факультета и кафедры;

б) название дисциплины;

в) номер и тема лабораторной работы;

г) фамилия преподавателя, ведущего занятия;

д) фамилия, имя и номер группы студента;

е) номер варианта задания.

Кроме того отчет по лабораторной работе должен содержать:

1) схему алгоритма, выполненную вручную или в соответствующем пакете, для решения вашей задачи с одним из трех циклов;

2) текст программы для лучшего с вашей точки зрения варианта;

3) результаты тестирования, которые должны быть оформлены в виде таблицы вида:

Исходные данные Ожидаемый результат Полученный результат
     

4) выводы.

2.4. Контрольные вопросы

1. Что такое «цикл»? В каких случаях используется эта конструкция?

2. Как показать циклический процесс в схеме алгоритма?

3. Какие операторы реализуют ветвление в программе?

4. Какой синтаксис имеют эти операторы?

5. Объясните, почему в вашей программе следует использовать цикл?

6. Почему вы выбрали именно такой тип цикла?


Наши рекомендации