Занятие 1. Программная реализация циклического алгоритма

Пример 1. Вычислить таблицу «x, f» значений функции f(x)=2x+1 при 0≤х≤4 с шагом 2,5.

Решение. Т.к. переменная х имеет не одно, а несколько значений (а именно 0; 2,5), то следует использовать циклический алгоритм. Решим данную задачу несколькими способами: блок-схема с предусловием, блок-схема с постусловием, программа с оператором while (соответствует блок-схеме с предусловием), программа с оператором for (соответствует блок-схеме с предусловием), программа с оператором do while (соответствует блок-схеме с постусловием).

В данной задаче мы имеем:

х – переменная цикла, т.к. х изменяется согласно условиям задачи;

х=0 – первоначальное значение переменной цикла х;

h=2,5 – шаг изменения переменной цикла х;

«х≤4» - условие выполнения итерации цикла.

В теле цикла мы будем считать значение функции f и выводить строку со значениями x, f на экран.

В программе мы будем использовать функцию setw(10) из библиотеки <iomanip>, чтобы таблица значений строилась ровно.

Блок-схема с предусловием представлена на рис. 1.

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Рис. 1 Блок-схема с предусловием для примера 1

Выполнение блок-схемы:

Начало

вывод заголовка таблицы «x, f»

x=0

x≤4 0≤4 да

f=2x+1=2•0+1=1

вывод x, f

Экран
x f 0 1

x=x+2,5=0+2,5=2,5

наверх

x≤4 2,5≤4 да

f=2x+1=2•2,5+1=6

вывод x, f

Экран
x f 0 1 2,5 6

x=x+2,5=2,5+2,5=5

наверх

x≤4 5≤4 нет

выход из цикла по х

Конец.

Код программы с оператором while:

// proga23while.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

double x, f;

cout<<setw(10)<<"x"<<setw(10)<<"f"<<endl;

x=0;

while(x<=4){

f=2.0*x+1.0;

cout<<setw(10)<<x<<setw(10)<<f<<endl;

x=x+2.5;

}

return 0;}

Код программы с оператором for:

// proga23for.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

double x, f;

cout<<setw(10)<<"x"<<setw(10)<<"f"<<endl;

for(x=0; x<=4; x=x+2.5){

f=2.0*x+1.0;

cout<<setw(10)<<x<<setw(10)<<f<<endl;

}

return 0;}

Блок-схема с постусловием представлена на рис. 2.

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Рис. 2 Блок-схема с постусловием для примера 1

Выполнение блок-схемы:

Начало

x=0

f=2x+1=2•0+1=1

вывод x, f

Экран
x f 0 1

x=x+2,5=0+2,5=2,5

x≤4 2,5≤4 да

наверх

f=2x+1=2•2,5+1=6

вывод x, f

Экран
x f 0 1 2,5 6

x=x+2,5=2,5+2,5=5

x≤4 5≤4 нет

выход из цикла по х

Конец.

Код программы с оператором do while:

// proga23dowhile.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

double x, f;

cout<<setw(10)<<"x"<<setw(10)<<"f"<<endl;

x=0;

do{

f=2.0*x+1.0;

cout<<setw(10)<<x<<setw(10)<<f<<endl;

x=x+2.5;

}while(x<=4);

return 0;

}

Результат выполнения программ с операторами while, for, do while:

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Ручной счет:

Диапазон значений х: 0; 2,5.

при x=0 f=2x+1=2•0+1=1

при x=2,5 f=2x+1=2•2,5+1=6

Пример 2. Вычислить таблицу «x, Z» значений функции Занятие 1. Программная реализация циклического алгоритма - student2.ru при -1≤х≤2 с шагом 1.

Решение. Функция Z является кусочной, поэтому для ее расчета используем разветвляющийся алгоритм.

Необходимо добавить реализацию одномерного цикла по переменной х.

В данной задаче:

х=-1 – начальное задание переменной цикла;

h=1 – шаг изменения переменной цикла х;

«х≤2» - условие для прохождения итерации цикла.

В теле цикла следует рассчитать значение функции Z и вывести очередную строку значений x, Z таблицы на экран.

В программе используется функция setw() для построения ровной таблицы значений.

Приведем две блок-схемы: с предусловием и с постусловием.

К блок-схеме с предусловием относятся две программы – с оператором while и for.

К блок-схеме с постусловием относится одна программа с оператором do while.

Блок-схема с предусловием приведена на рис. 3.

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Рис. 3 Блок-схема с предусловием для примера 2

Код программы с оператором while:

// proga24while.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

double x, Z;

cout<<setw(10)<<"x"<<setw(10)<<"Z"<<endl;

x=-1.0;

while(x<=2.0){

if(x<1){

Z=x+3;

}

else {

Z=4*x;

}

cout<<setw(10)<<x<<setw(10)<<Z<<endl;

x=x+1.0;

}

return 0;}

Код программы с оператором for:

// proga24for.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

double x, Z;

cout<<setw(10)<<"x"<<setw(10)<<"Z"<<endl;

for(x=-1; x<=2; x=x+1){

if(x<1){

Z=x+3;

}

else {

Z=4*x;

}

cout<<setw(10)<<x<<setw(10)<<Z<<endl;

}

return 0;}

Блок-схема с постусловием представлена на рис. 4.

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Рис. 4 Блок-схема с постусловием для примера 2

Код программы с оператором do while:

// proga24dowhile.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

double x, Z;

cout<<setw(10)<<"x"<<setw(10)<<"Z"<<endl;

x=-1;

do{

if(x<1){

Z=x+3;

}

else {

Z=4*x;

}

cout<<setw(10)<<x<<setw(10)<<Z<<endl;

x=x+1;

}while(x<=2);

return 0;}

Результат выполнения программ с операторами while, for, do while:

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Ручной счет:

Диапазон значений х: -1; 0; 1; 2.

при x=-1 Z={по первой ветви}=x+3=-1+3=2;

при x=0 Z={по первой ветви}=x+3=0+3=3;

при x=1 Z={по первой ветви}=4x=4•1=4;

при x=2 Z={по первой ветви}=4x=4•2=8.

Пример 3. Вычислить таблицу «x, y, Z» значений функции Занятие 1. Программная реализация циклического алгоритма - student2.ru при -1≤х≤0,5 с шагом 1, 5≤y≤15 с шагом 5 .

Решение. В данной задаче изменяются две переменные: х и у. Следовательно, нужно реализовать двумерный цикл: внешний цикл по переменной х, внутренний цикл по переменной у. Тело цикла будет содержать вычисление функции Z и вывод на экран строчки значений x, y, Z.

В данной задаче имеем:

х=-1 – начальное значение переменной внешнего цикла х;

hx=1 – шаг изменения переменной внешнего цикла х;

«х≤0,5» - условие для выполнения итерации внешнего цикла по х;

у=5 – начальное значение переменной внутреннего цикла у;

hy=5 – шаг изменения переменной внутреннего цикла у;

«у≤15» - условие для выполнения итерации внутреннего цикла по у.

Блок-схема с предусловием приведена на рис. 5.

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Рис. 5 Блок-схема с предусловием для примера 3

Код программы с оператором while:

// proga25while.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

double x, y, Z;

cout<<setw(10)<<"x"<<setw(10)<<"y"<<setw(10)<<"Z"<<endl;

x=-1;

while(x<=0.5){

y=5;

while(y<=15){

if(x*y<1){

Z=x+y;

}

else{

Z=x-y;

}

cout<<setw(10)<<x<<setw(10)<<y<<setw(10)<<Z<<endl;

y=y+5;

}

x=x+1;

}

return 0;}

Код программы с оператором for:

// proga25for.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

double x, y, Z;

cout<<setw(10)<<"x"<<setw(10)<<"y"<<setw(10)<<"Z"<<endl;

for(x=-1; x<=0.5; x=x+1){

for(y=5; y<=15; y=y+5){

if(x*y<1){

Z=x+y;

}

else{

Z=x-y;

}

cout<<setw(10)<<x<<setw(10)<<y<<setw(10)<<Z<<endl;

}

}

return 0;}

Блок-схема с постусловием приведена на рис. 6.

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Рис. 6 Блок-схема с постусловием для примера 3

Код программы (Visual Studio) с оператором do while (постусловие):

// proga25dowhile.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

double x, y, Z;

cout<<setw(10)<<"x"<<setw(10)<<"y"<<setw(10)<<"Z"<<endl;

x=-1;

do{

y=5;

do{

if(x*y<1){

Z=x+y;

}

else{

Z=x-y;

}

cout<<setw(10)<<x<<setw(10)<<y<<setw(10)<<Z<<endl;

y=y+5;

}while(y<=15);

x=x+1;

}while(x<=0.5);

return 0;}

Результат выполнения программ с операторами while, for, do while:

Занятие 1. Программная реализация циклического алгоритма - student2.ru

Ручной счет:

Диапазон значений х: -1; 0.

Диапазон значений у: 5, 10, 15.

при x=-1 y=5 Z={по первой ветви}=x+y=-1+5=4;

при x=-1 y=10 Z={по первой ветви}=x+y=-1+10=9;

при x=-1 y=15 Z={по первой ветви}=x+y=-1+15=14;

при x=0 y=5 Z={по первой ветви}=x+y=0+5=5;

при x=0 y=10 Z={по первой ветви}=x+y=0+10=10;

при x=0 y=15 Z={по первой ветви}=x+y=0+15=15.

Примечание. В данном примере операторы вложенного и внешнего циклов совпадают. Например, в одной программе задействован один оператор while два раза. Можно сочетать операторы цикла как угодно: оператор do while может быть вложен в оператор for, оператор for в оператор while и т.д. Результат выполнения программы не должен зависеть от выбранного оператора цикла.

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