КАТЕГОРИИ: Архитектура-(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.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.
Код программы (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» - условие для выполнения итерации внутреннего цикла по у.
Код программы (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; Просмотров: 345; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |