Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




Пример 1. Вычислить таблицу «x, f» значений функции f (x)=2 x +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 Блок-схема с предусловием для примера 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.

Рис. 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:

Ручной счет:

Диапазон значений х: 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≤ х ≤2 с шагом 1.

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 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.

Рис. 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; 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≤ х ≤0,5 с шагом 1, 5≤ y ≤15 с шагом 5.

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

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

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

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

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

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

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

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

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

Рис. 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.

Рис. 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; 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 и т.д. Результат выполнения программы не должен зависеть от выбранного оператора цикла.

 





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


Дата добавления: 2015-10-27; Мы поможем в написании ваших работ!; просмотров: 562 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Велико ли, мало ли дело, его надо делать. © Неизвестно
==> читать все изречения...

2460 - | 2139 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.