Цикл с постусловием (Цикл-до)
Синтаксис оператора:
do <Оператор > while (<Выражение>) ;
где:
Выражение - совокупность выражений, разделенных запятой, определяющая условия выполнения цикла.
Оператор – любой оператор С++, в том числе составной оператор.
Цикл выполняется до тех пор, пока результат выражения отличен от нуля. Так как проверка условия проводится в конце цикла, то цикл выполняется по крайней мере один раз.
Цикл с постусловием легко преобразовать в цикл с предусловием.
Пример 2. Определить сумму ряда
S = 1 - 1/x + 1/x 2- 1/x3 + …
с заданной точностью e ( при x > 1). Задача решается с использованием рекуррентных соотношений, которые позволяют найти закона формирования следующего члена ряда по предыдущему.
Рекурентную формулу определения очередного члена нашего ряда легко определить: Rn = -Rn/x
Сумма ряда определяется по формуле S=S+Rn
Условие выхода из цикла | Rn | < e
На рисунке 5 представлена схема алгоритма программы. Анализ алгоритма показывает, что он неструктурный, так как в нем присутствует цикл суммирования, который не является ни циклом-пока, ни циклом-до, ни циклом с заданным количеством повторений. Для реализации данного алгоритма на языке С++ необходимо его преобразовать в структурный, чтобы можно было использовать один из имеющихся операторов цикла.
Рисунок 5 – Схема алгоритма определения суммы ряда с заданной точностью
Поскольку количество повторений цикла определить не удается, попробуем преобразовать неструктурный цикл к циклу-пока. Для этого необходимо операцию S=S+R продублировать: одну копию поместить до цикла, а вторую – в конце цикла.
Операторы S=0 и S=S+R, записанные до цикла, заменим оператором S=1, так как в этот момент R=1. Условие выхода из цикла также необходимо заменить на противоположное. Окончательный вариант фрагмента алгоритма с ц и к л о м - п о к а показан на рисунке 6, а.
Рисунок 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. Почему вы выбрали именно такой тип цикла?