Программирование разветвляющихся вычислительных процессов

Цели:

ü освоить методику написания разветвляющихся вычислительных алгоритмов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6.0.

Пример 1. Разработать алгоритм и составить по нему программу для вычисления значений функции y = f(x). Необходимо учитывать область определения функции:

 

Ход выполнения работы

1. Построить алгоритм. В задаче требуется вычислить функцию, вид которой зависит от значения аргумента. Поэтому разобьем числовую ось значениями, указанными в формуле на несколько промежутков, указав при этом, какой должен быть результат вычислений на каждом промежутке:

При разработке алгоритма будем рассматривать промежутки числовой оси слева направо. Обозначения в алгоритме: ФНЗ – функция не задана; ФНО – функция не определена.

Записывая основной алгоритм решения задачи, вместо вычислений каждой части функции для упрощения будем писать блок1, блок2 и блок3. Поставим в соответствие каждому блоку алгоритм вычисления конкретной функции с учетом её области определения. Последний этап разработки алгоритма решения исходной задачи – подстановка в основной алгоритм вместо блоков 1,2,3 соответствующих вычислительных алгоритмов.

Сделаем небольшое замечание относительно записи текста алгоритма. Рекомендуется записывать текст алгоритма «ступеньками», т.е. новый блок «если – иначе» нужно записывать с отступом относительно предыдущего блока «если – иначе» и т.д. Так же следует поступать и при записи текста программы, соответствующей алгоритму. Одной из причин этого является то, что структура алгоритма и программы хорошо просматривается, что может помочь при обнаружении синтаксических ошибок.

Основной алгоритм:

объявление переменных вещ: х, у

ввод х

если х<5

блок1

иначе

если x<7

«ФНЗ»

иначе

если x<12

блок2

иначе

если х<=15

«ФНЗ»

иначе

блок3

все_если

все_если

все_если

все_если

 

Рассмотрим вычисления в каждом из блоков 1, 2 и 3 отдельно.

Блок1. Требуется вычислить функцию . При вычислении учитываем, что подкоренное выражение должно быть больше или равно нулю и при этом знаменатель не должен равняться нулю. Таким образом, получаем:

если cos(х)>0

печать у

иначе

«ФНО»

все_если

 

Блок2. Требуется вычислить функцию . Здесь никаких ограничений на вычисления нет. Таким образом, получаем:

печать у

Блок3. Требуется вычислить функцию . При вычислении учитываем, что подкоренное выражение должно быть больше или равно. Таким образом, получаем:

если 25-х>=0

печать у

иначе

«ФНО»

все_если

В основной алгоритм вместо блоков 1,2,3 подставим алгоритмы вычисления соответствующих частей функции. В итоге получаем алгоритм решения исходной задачи.

2. Написать программу, соответствующую алгоритму.

Алгоритм Программа
объявление переменных вещ: х, у ввод х если х<5 если cos(х)>0 печать х,у иначе «ФНО» все_если иначе если x<7 «ФНЗ» иначе если x<12 печать х,у иначе если х<=15 «ФНЗ» иначе если 25-х>=0 печать х,у иначе «ФНО» все_если все_если все_если все_если все_если   # include "stdio.h" # include "math.h" int main ( ) { float x,y; printf ("x="); // ввод значения переменной x scanf("%f",&x); // проверка условий if (x<5) if(cos(x)>0) { y=1/sqrt(cos(x)); printf ("x=%f,y=%f\n",x,y); } else printf("FNO\n"); else if(x<7) printf("FNZ\n"); else if (x<12) { y=pow(x,2); printf ("x=%f,y=%f\n",x,y); } else if (x<=15) printf("FNZ\n"); else if(25-x>=0) { y=sqrt(25-x); printf ("x=%f,y=%f\n",x,y); } else printf("FNO\n"); return 1; }

3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.

Примечание. В качестве тестового примера можно ввести следующие значения: х=16 и х=30.

 

Пример 2. Разработать алгоритм и составить по нему программу для вычисления значений функции z = f(x,y) в зависимости от попадания точки с координатами (х,у) в область D (область D выделена серым цветом):

 
 

 


 

Ход выполнения работы

1. В задаче требуется вычислить функцию, вид которой зависит от координат точки координатной плоскости. Если точка с координатами (х,у) попадает в область D, то вычисляется первая часть функции (в алгоритме – блок 1), в противном случае – вторая часть (блок 2). Процесс написания алгоритма разобьем на четыре этапа:

написание основного алгоритма решения задачи;

определение условия принадлежности точки области D. Так как одна и та же точка не может принадлежать двум непересекающимся областям одновременно, разобьем область D на две области: D1 (треугольник) и D2 (кольцо);

написание вспомогательных алгоритмов вычисления каждой части заданной функции;

написание полного алгоритма решения исходной задачи и соответствующей программы.

Обозначения в алгоритме: ФНО – функция не определена.

Рассмотрим отдельно этапы алгоритма.

1. Запишем основной алгоритм решения задачи:

объявление вещ: x, y, z

ввод х, у

если ( ) или ( )

блок 1

иначе

блок 2

все_если

 

2. Математическое определение условий:

a) . Найдем уравнение прямой, проходящей через точки с координатами (-3;0) и (0;2). Запишем уравнение прямой в общем виде .

 

Таким образом, уравнение прямой .

.

b) . Определим уравнение окружности с центром в точке (2,0) радиуса R=2: (внешняя окружность). Определим уравнение окружности с центром в точке (2,0) радиуса R=1: (внутренняя окружность). Так как область D2 находится внутри кольца, включая его границы, то условием принадлежности точки (х,у) области D2 будут неравенства: , .

.

 

3. Вычислительные алгоритмы, соответствующие блокам 1,2:

Блок 1 Блок 2
если х-у ≠ 0 z=1/(x-y) печать х, у,z иначе «ФНО» все_если если ху > 0 z=ln(xy) печать х, у,z иначе «ФНО» все_если

2. Написать программу, соответствующую алгоритму:

Алгоритм Программа
объявление переменных вещ: х, у, z ввод х, у если (((x>=-3 и x<=0) и (y>=0 и y<=2*x/3+2)) или ((x-2)*(x-2)+y*y<=4 и (x-2)*(x-2)+y*y>=1)) если х-у ≠ 0 z=1/(x-y) печать х, у,z иначе «ФНО» все_если иначе если ху > 0 z=ln(xy) печать х, у,z иначе «ФНО» все_если все_если   # include "stdio.h" # include "math.h" int main ( ) { float x,y,z; printf ("x="); // ввод значения переменной x scanf("%f",&x); printf ("y="); // ввод значения переменной y scanf("%f",&y); if((x>=-3&&x<=0&&y>=0&& y<=2*x/3+2)||(pow(x-2,2)+y*y<=4 && pow(x-2,2)+y*y>=1)) if(x-y!=0) { z=1/(x-y); printf("x=%f,y=%f,z=%f\n",x,y,z); } else printf("FNO\n"); else if(x*y>0) { z=log(x*y); printf("x=%f,y=%f,z=%f \n",x,y,z); } else printf("FNO\n"); return 1; }

3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.

Примечание. В качестве тестового примера можно ввести значения х=1, у=1 и х=3, у=5.

 

Пример 3. С клавиатуры вводится целое число от 0 до 99, обозначающее количество копеек. Написать программу, которая должна вывести правильно напечатанное окончание слова «копейка».

 

Ход выполнения работы

1. Напишем алгоритм решения задачи. Окончания слов будут зависеть от последней цифры чисел из диапазона от 0 до 9 и от 14 до 99. Исключением будут четыре числа: 11, 12, 13 и 14. В алгоритме и программе используем оператор выбора. Ключом для него будет остаток от деления введенного целого числа на 10 (так можно определить последнюю цифру двузначного целого числа).

2. Написать программу, соответствующую алгоритму:

Алгоритм Программа
объявление переменных цел: х ввод х если x>=11 и x<=14 печать «х копеек» иначе выбор х%10 случай 1: «х копейка» случай 2: «х копейки» случай 3: «х копейки» случай 4: «х копейки» случай 5: «х копеек» случай 6: «х копеек» случай 7: «х копеек» случай 8: «х копеек» случай 9: «х копеек» все_выбор все_если   # include "stdafx.h" # include "stdio.h" int main( ) { int x; printf ("x="); //ввод х scanf("%i",&x); if(x>=11 && x<=14) printf (“%i копеек\n”,x); else { switch (x%10) { case 1: printf (“%i копейка\n”,x); break; case 2: printf (“%i копейки\n”,x); break; case 3: printf (“%i копейки\n”,x); break; case 4: printf (“%i копейки\n”,x); break; case 5: printf (“%i копеек\n”,x); break; case 6: printf (“%i копеек\n”,x); break; case 7: printf (“%i копеек\n”,x); break; case 8: printf (“%i копеек\n”,x); break; case 9: printf (“%i копеек\n”,x); break; }   } return 1; }

3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.

 








Дата добавления: 2015-08-08; просмотров: 2265;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.