Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Реализация циклического алгоритма




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

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

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

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

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

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

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

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

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

Блок-схема (с предусловием) Выполнение блок-схемы
Рис. 5.16. Блок- схема для примера 5.14  

Начало

вывод заголовка таблицы «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 нет

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

Конец.

Код программы (Visual Studio) с оператором 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;}   Код программы (Visual Studio) с оператором 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;}
Результат выполнения программы (Visual Studio) с оператором while (предусловие):   Результат выполнения программы (Visual Studio) с оператором for (предусловие):

 

Код программы (Visual Studio) с оператором 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; } Код программы (Borland C++) с оператором while (предусловие): #include <iostream.h> #include <iomanip.h> 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;}  
Блок-схема (с постусловием) Выполнение блок-схемы
Рис. 5.17. Блок- схема для примера 5.14 (с постусловием)

Начало

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 нет

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

Конец.

 

Результат выполнения программы:   Результат выполнения программы:
Код программы (Borland C++) с оператором for (предусловие): #include <iostream.h> #include <iomanip.h> 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;}   Код программы (Borland C++) с оператором do while (постусловие): #include <iostream.h> #include <iomanip.h> 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;}
Результат выполнения программы:   Результат выполнения программы:
Проверка результатов в программе MathCad: Ручной счет: Диапазон значений х: 0; 2,5. при x=0 f=2x+1=2•0+1=1 при x=2,5 f=2x+1=2•2,5+1=6  
     

 

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

Решение. Функция Z задана так же, как в Примере 5.7. Поэтому принцип вычисления функции возьмем из Примера 5.7.

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

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

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

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

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

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

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

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

К блок-схеме с предусловием относятся две программы – с оператором while и for (реализация в Visual Studio и Borland C++).

К блок-схеме с постусловием относится одна программа с оператором do while (реализация в Visual Studio и Borland C++).

Также приведен ручной счет и проверка результатов в программе MathCad.

 

 

Блок-схема с предусловием Блок-схема с постусловием
Рис. 5.18. Блок- схема для примера 5.15 Рис. 5.19. Блок- схема для примера 5.15  
Выполнение блок-схемы (с предусловием): Выполнение блок-схемы (с постусловием):

Начало

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

Экран
x Z

x=-1

x≤2 -1≤2 да

x<1 -1<1 да

Z=x+3=-1+3=2

вывод x, Z

Экран
x Z -1 2

x=x+1=-1+1=0

наверх

x≤2 0≤2 да

x<1 0<1 да

Z=x+3=0+3=3

вывод x, Z

Экран
x Z -1 2 0 3

x=x+1=0+1=1

наверх

x≤2 1≤2 да

x<1 1<1 нет

Z=4x=4•1=4

вывод x, Z

Экран
x Z -1 2 0 3 1 4

x=x+1=1+1=2

наверх

x≤2 2≤2 да

x<1 2<1 нет

Z=4x=4•2=8

вывод x, Z

Экран
x Z -1 2 0 3 1 4 2 8

x=x+1=2+1=3

наверх

x≤2 3≤2 нет

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

Конец.

Начало

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

Экран
x Z

x=-1

x<1 -1<1 да

Z=x+3=-1+3=2

вывод x, Z

Экран
x Z -1 2

x=x+1=-1+1=0

x≤2 0≤2 да

наверх

x<1 0<1 да

Z=x+3=0+3=3

вывод x, Z

Экран
x Z -1 2 0 3

x=x+1=0+1=1

x≤2 1≤2 да

наверх

x<1 1<1 нет

Z=4x=4•1=4

вывод x, Z

Экран
x Z -1 2 0 3 1 4

x=x+1=1+1=2

x≤2 2≤2 да

наверх

x<1 2<1 нет

Z=4x=4•2=8

вывод x, Z

Экран
x Z -1 2 0 3 1 4 2 8

x=x+1=2+1=3

x≤2 3≤2 нет

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

Конец.

 

Код программы (Visual Studio) с оператором 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;}

Результат выполнения программы:

Код программы (Visual Studio) с оператором 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;}

Результат выполнения программы:

Код программы (Visual Studio) с оператором 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;}

Результат выполнения программы:

Код программы (Borland C++) с оператором while (предусловие):

#include <iostream.h>

#include <iomanip.h>

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;}

Результат выполнения программы:

Код программы (Borland C++) с оператором for (предусловие):

#include <iostream.h>

#include <iomanip.h>

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;}

Результат выполнения программы:

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

#include <iostream.h>

#include <iomanip.h>

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;}

Результат выполнения программы:

Проверка результатов в программе MathCad:

Ручной счет:

Диапазон значений х: -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.

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

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

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

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

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

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

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

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

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

Рис. 5.20. Блок- схема для примера 5.16 Рис. 5.21. Блок- схема для примера 5.16
Выполнение блок-схемы Выполнение блок-схемы

Начало

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

Экран
x y Z

x=-1

x≤0,5 -1≤0,5 да

y=5

y≤15 5≤15 да

xy<1 -1•5<1 -5<1 да

Z=x+y=-1+5=4

вывод x, y, Z

Экран
x y Z -1 5 4

y=y+5=5+5=10

наверх по внутреннему циклу

y≤15 10≤15 да

xy<1 -1•10<1 -10<1 да

Z=x+y=-1+10=9

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9

y=y+5=10+5=15

наверх по внутреннему циклу

y≤15 15≤15 да

xy<1 -1•15<1 -15<1 да

Z=x+y=-1+15=14

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14

y=y+5=15+5=20

наверх по внутреннему циклу

y≤15 20≤15 нет

выход из внутреннего цикла

x=x+1=-1+1=0

наверх по внешнему циклу

x≤0,5 0≤0,5 да

y=5

y≤15 5≤15 да

xy<1 0•5<1 0<1 да

Z=x+y=0+5=5

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14 0 5 5

y=y+5=5+5=10

наверх по внутреннему циклу

y≤15 10≤15 да

xy<1 0•10<1 0<1 да

Z=x+y=0+10=10

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14 0 5 5 0 10 10

y=y+5=10+5=15

наверх по внутреннему циклу

y≤15 15≤15 да

xy<1 0•15<1 0<1 да

Z=x+y=0+15=15

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14 0 5 5 0 10 10 0 15 15

y=y+5=15+5=20

наверх по внутреннему циклу

y≤15 20≤15 нет

выход из внутреннего цикла

x=x+1=0+1=1

наверх по внешнему циклу

x≤0,5 1≤0,5 нет

выход из внешнего цикла

Конец.

Начало

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

Экран
x y Z

x=-1

y=5

xy<1 -1•5<1 -5<1 да

Z=x+y=-1+5=4

вывод x, y, Z

Экран
x y Z -1 5 4

y=y+5=5+5=10

y≤15 10≤15 да

наверх по внутреннему циклу

xy<1 -1•10<1 -10<1 да

Z=x+y=-1+10=9

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9

y=y+5=10+5=15

y≤15 15≤15 да

наверх по внутреннему циклу

xy<1 -1•15<1 -15<1 да

Z=x+y=-1+15=14

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14

y=y+5=15+5=20

y≤15 20≤15 нет

выход из внутреннего цикла

x=x+1=-1+1=0

x≤0,5 0≤0,5 да

наверх по внешнему циклу

y=5

y≤15 5≤15 да

xy<1 0•5<1 0<1 да

Z=x+y=0+5=5

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14 0 5 5

y=y+5=5+5=10

y≤15 10≤15 да

наверх по внутреннему циклу

xy<1 0•10<1 0<1 да

Z=x+y=0+10=10

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14 0 5 5 0 10 10

y=y+5=10+5=15

y≤15 15≤15 да

наверх по внутреннему циклу

xy<1 0•15<1 0<1 да

Z=x+y=0+15=15

вывод x, y, Z

Экран
x y Z -1 5 4 -1 10 9 -1 15 14 0 5 5 0 10 10 0 15 15

y=y+5=15+5=20

y≤15 20≤15 нет

выход из внутреннего цикла

x=x+1=0+1=1

x≤0,5 1≤0,5 нет

выход из внешнего цикла

Конец.

Код программы (Visual Studio) с оператором 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;}

Результат выполнения программы:

Код программы (Visual Studio) с оператором 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;}

Результат выполнения программы:

Код программы (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;}

Результат выполнения программы:

Код программы (Borland C++) с оператором while (предусловие):

#include <iostream.h>

#include <iomanip.h>

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;}

Результат выполнения программы:

Код программы (Borland C++) с оператором for (предусловие):

#include <iostream.h>

#include <iomanip.h>

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;}

Результат выполнения программы:

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

#include <iostream.h>

#include <iomanip.h>

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;}

Результат выполнения программы:

Проверка результатов в программе MathCad:

Ручной счет:

Диапазон значений х: -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 и т.д.

 




Поделиться с друзьями:


Дата добавления: 2017-01-13; Просмотров: 330; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.282 сек.