Лабораторная работа №4.
“Программирование циклических вычислительных процессов”
Цель работы: освоение методов составления алгоритмов циклических вычислительных процессов и организации циклических программ сложной структуры.
Теоретическая часть
4.1.1. Циклические алгоритмы.
Цикл – это последовательность действий, которая может выполняться более одного раза.
Циклический алгоритм – это алгоритм, содержащий один или несколько циклов.
Имеется 3 вида циклов:
- цикл с предусловием;
- цикл с постусловием;
- цикл со счетчиком (счетный цикл).
Если выполнение цикла связано с каким-либо логическим условием, то используются циклы с предусловием или с постусловием.
Циклы со счетчиком представляют такой класс, в котором выполнение тела цикла должно повторяться заранее определенное число раз.
Блок-схемы циклических алгоритмов выглядят следующим образом:
1. Цикл со счетчиком.
2. Цикл с предусловием. 3. Цикл с постусловием.
4.1.2 Операторы цикла в языке программирования C++.
В C++ для каждого вида цикла имеется соответствующий оператор:
- цикл типа while (с предусловием);
- цикл типа do…while (с постусловием);
- цикл типа for (счетный).
1.Оператор цикла типа while
Форма записи:
while (условие) оператор;
где: (условие) – логическое выражение;
оператор – выполняемый в цикле оператор или тело цикла.
Если тело цикла представляет собой составной оператор, то его нужно заключить в операторные скобки{...}:
while (условие)
{
группа операторов
}
Схема работы такого цикла: пока условие является истинным (true), выполняется тело цикла и снова проверяется условие и т.д. Когда условие станет ложным (false) цикл завершает работу.
2. Оператор цикла типа do…while
Форма записи:
do
оператор;
while (условие);
Схема работы такого цикла: сначала выполняется оператор, потом проверяется условие, если условие является истинным, выполняется оператор и снова проверяется условие и т.д. Когда условие станет ложным, цикл завершает работу.
Если тело цикла представляет собой составной оператор, то, как и для цикла с предусловием, его нужно заключить в операторные скобки{...}:
do
{
группа операторов
}
while (условие);
3. Оператор цикла типа for
Форма записи:
for (A;B;C)
оператор;
A – начальное выражение, которое задает начальные значения параметру цикла и при необходимости начальные значения другим параметрам. Например:
i=0, x=0.5, p=1, s=0
B – условное выражение, которое проверяет условие продолжения работы цикла. Например:
x<=5
C – выражение приращения, которое задает приращение параметру цикла и при необходимости другим параметров, тогда они записываются списком. Например: x+=0.1, i++
4.1.3 Пример составления алгоритма и программы на языке C++ для циклического вычислительного процесса.
Задание:
Вычислить значение выражения:
b – исходная величина, ее значение вводятся с клавиатуры и не изменяется;
a – изменяется в диапазоне [0;10] с шагом 1;
y – результат, его значения выводятся на экран.
Решение.
Исходя из условия задания переменная a является целочисленной, поэтому может быть использована в качестве счетчика в счетном цикле.
Блок-схема алгоритма решения данной задачи с использованием счетного цикла выглядит следующим образом:
Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:
#include <conio.h>
#include <math.h>
#include <stdio.h>
int main()
{ int a;
float b,y;
clrscr();
printf(“Введите b: “);
scanf(“%f”,&b);
printf(“ a y\n”);
for (a=0;a<=10;a++)
{
printf(“%3d”,a);
if (a>b)
{
y=1.2*a+3*b;
printf(“%8.2f\n”,y);
}
else
{
if (a>0)
{
y=(a-b)/sqrt(a);
printf(“%8.2f\n”,y);
}
else printf(“ y не существует\n”);
}
}
getch();
return 0;
}
Блок-схема алгоритма решения данной задачи с использованием цикла с предусловием выглядит следующим образом:
Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:
#include <conio.h>
#include <math.h>
#include <stdio.h>
int main()
{ int a;
float b,y;
clrscr();
printf(“Введите b: “);
scanf(“%f”,&b);
a = 0;
printf(“ a y\n”);
while(a<=10)
{
printf(“%3d”,a);
if (a>b)
{
y=1.2*a+3*b;
printf(“%8.2f\n”,y);
}
else
{ if (a>0)
{
y=(a-b)/sqrt(a);
printf(“%8.2f\n”,y);
}
else printf(“ y не существует\n”);
}
a=a+1;
}
getch();
return 0;
}
Блок-схема алгоритма решения данной задачи с использованием цикла с постусловием выглядит следующим образом:
Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:
#include <conio.h>
#include <math.h>
#include <stdio.h>
int main()
{ int a;
float b,y;
clrscr();
printf(“Введите b: “);
scanf(“%f”,&b);
a = 0;
printf(“ a y\n”);
do
{
printf(“%3d”,a);
if (a>b)
{
y=1.2*a+3*b;
printf(“%8.2f\n”,y);
}
else
{ if (a>0)
{
y=(a-b)/sqrt(a);
printf(“%8.2f\n”,y);
}
else printf(“ y не существует\n”);
}
a=a+1;
}
while(a<=10);
getch();
return 0;
}
Практическая часть
4.2.1 Требования к выполнению работы:
Выполнить задание из лабораторной работы № 3 для диапазона значений одной из переменных. Изменяемая переменная, диапазон ее изменения и шаг указаны в таблице 4. Составить блок-схемы алгоритмов и программы для двух типов циклов, указанных в индивидуальном задании (таблица 4).
Оформить вывод результатов таким образом, чтобы четко выделялись значения изменяемого параметра и при каждом его конкретном значении выводились значения результата (трех переменных из столбца 2 таблицы 3) в виде таблицы.
Порядок выполнения работы.
1. Выполнить анализ задания, сформулировать постановку задачи.
2. Составить блок-схемы алгоритмов.
3. Составить программу на языке C++. Предусмотреть ввод исходных данных с клавиатуры и вывод результатов на экран.
4. Выполнить проверку работоспособности программы на различных исходных данных.
5. Выполнить анализ полученных результатов.
Варианты индивидуальных заданий.
Варианты индивидуальных заданий выбираются из таблицы 4 в соответствии с номером студента в списке группы в журнале преподавателя.
Таблица 4. Варианты индивидуальных заданий
№ п/п | Изменяемая переменная | Типы циклов |
10 ≤ a ≤ 10, Δ a=1 | 1. С предусловием, 2. Счетный | |
-4 ≤ d ≤ 4, Δ d = 0.5 | 1. С предусловием, 2. С постусловием | |
-6 ≤ x ≤ 3, Δ x = 0.5 | 1. Счетный, 2. С постусловием | |
0 ≤ b ≤ 30, Δ b = 1.5 | 1. С предусловием, 2. Счетный | |
-15 ≤ j ≤ 10, Δ j = 0.5 | 1. С предусловием, 2. С постусловием | |
5 ≤ e ≤ 35, Δ e = 2 | 1. Счетный, 2. С постусловием | |
-5 ≤ m ≤ 15, Δ m = 1 | 1. С предусловием, 2. Счетный | |
1 ≤ c ≤ 70, Δ c = 3 | 1. С предусловием, 2. С постусловием | |
1.5 ≤ c ≤ 15, Δ c = 0.5 | 1. Счетный, 2. С постусловием | |
-8 ≤ b ≤ 28, Δ b = 2 | 1. С предусловием, 2. Счетный | |
-4.5 ≤ x ≤ 11.5, Δ x = 0.5 | 1. С предусловием, 2. С постусловием | |
-7 ≤ k ≤ 2, Δ k = 0.3 | 1. Счетный, 2. С постусловием | |
-1 ≤ m ≤ 21, Δ m = 1 | 1. С предусловием, 2. Счетный | |
-2 ≤ e ≤ 34, Δ e = 2 | 1. С предусловием, 2. С постусловием | |
-11 ≤ c ≤ 23, Δ c = 2 | 1. Счетный, 2. С постусловием | |
-13 ≤ p ≤ 50, Δ p = 3 | 1. С предусловием, 2. Счетный | |
3.3 ≤ b ≤ 9.3, Δ b = 0.3 | 1. С предусловием, 2. С постусловием | |
3.5 ≤ y ≤ 12.3, Δ y = 0.4 | 1. Счетный, 2. С постусловием | |
-7.5 ≤ a ≤ 5.7, Δ a = 0.6 | 1. С предусловием, 2. Счетный | |
-1.5 ≤ h ≤ 1.2, Δ h = 0.1 | 1. С предусловием, 2. С постусловием | |
0 ≤ h ≤ 10, Δ h=0.5 | 1. Счетный, 2. С постусловием | |
-15 ≤ b ≤ 15, Δ b =2 | 1. С предусловием, 2. Счетный | |
-7 ≤ l ≤ 3, Δ l = 0.5 | 1. С предусловием, 2. С постусловием | |
-5.5 ≤ b ≤ 6.5, Δ b = 0.5 | 1. Счетный, 2. С постусловием | |
1 ≤ k ≤ 9, Δ k = 0.4 | 1. С предусловием, 2. Счетный | |
0 ≤ b ≤ 6.9, Δ b = 0.3 | 1. С предусловием, 2. С постусловием | |
-3 ≤ v ≤ 9, Δ v = 0.6 | 1. Счетный, 2. С постусловием | |
-2 ≤ p ≤ 2.6, Δ p = 0.2 | 1. С предусловием, 2. Счетный |
4.3 Контрольные вопросы и практические задания:
1. Как работает оператор while?
2. Как работает оператор do ... while?
3. Как работает оператор for?
4. Подчеркнуть в программе операторы, образующие цикл.
5. В чем заключается отличие операторов while и do ... while?
6. Заменить в программе один оператор цикла другим.