Нижегородский государственный технический университет имени Р. Е. Алексеева
Опубликован: 26.03.2015 | Доступ: свободный | Студентов: 6254 / 1182 | Длительность: 07:05:00
ISBN: 978-5-9556-0173-1
Специальности: Программист, Преподаватель
Лекция 4:

Реализация линейного и разветвляющегося алгоритмов

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Аннотация: Умение писать программы начинается с понимания реализации простейших алгоритмов. Разбор линейного и разветвляющегося алгоритмов на примерах с результатами выполнений программ нам в этом поможет. Цель данной лекции – сформировать однозначное понимание принципов построения программ.

В данной лекции мы рассмотрим множество задач, соответствующих линейному и разветвляющемуся алгоритмам. В каждой задаче будут представлены блок-схемы, коды программ, а также результаты выполнения программ (консоли).

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

Пример 1. Даны числа a=2, b=7. Вычислить сумму S и разность R чисел a и b.

Приведем блок-схему на рис. 4.1.

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

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

Код программы (Visual Studio):

// proga10.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
	double a, b, S, R;
	a=2;
	b=7;
	S=a+b;
	R=a-b;
	cout<<"S="<<S<<endl;
	cout<<"R="<<R<<endl;
	return 0;
}

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


Код программы (Borland C++):

#include <iostream.h>
int main(){
	double a, b, S, R;
	a=2;
	b=7;
	S=a+b;
	R=a-b;
	cout<<"S="<<S<<endl;
	cout<<"R="<<R<<endl;
	return 0;
}

Результат выполнения программы (Borland C++):


Пример 2. Составить блок-схему и программу для вычисления значений функций y=\sin x и z=\ln x при x, который считывается с экрана (клавиатуры).

Приведем блок-схему на рис. 4.2.

Блок-схема для примера 2

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

Код программы (Visual Studio):

// proga11.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int main(){
	double x, y, z;
	cout<<"vvedi x=";
	cin>>x;
	y=sin(x); z=log(x);
	cout<<"pri x="<<x<<" y="<<y<<" z="<<z<<endl;
	return 0;
}

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


Ручной счет:

x=1.5
y=sin(1.5)=0.997495 
z=ln(1.5)=0.405465

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


Ручной счет:

x=0.2
y=sin(0.2)=0.198669
z=ln(0.2)=-1.609438

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


Ручной счет:

x=-2
y=sin(-2)=-0.909297
z=ln(-2)=не существует, что соответствует результату на экране.

Код программы (Borland C++):

#include <iostream.h>
#include <math.h>
int main(){
	double x, y, z;
	cout<<"vvedi x=";
	cin>>x;
	y=sin(x);
	z=log(x);
	cout<<"pri x="<<x<<" y="<<y<<" z="<<z<<endl;
	return 0;
}

Результат выполнения программы(Borland C++):


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

Когда требуется записать программно сложную математическую функцию, ее мысленно разбивают на внутреннюю и внешнюю. Например, если дано выражение \tg^2 x, то внешней функцией будет возведение в квадрат, а внутренней – тангенс от х. Поэтому сначала начинают писать функцию возведения в степень: pow( , 2.0), а потом вписывают на первое место тангенс: pow( tan(x), 2.0).

Когда требуется записать дробь, то ее мысленно разбивают на числитель и знаменатель. если в числителе или знаменателе стоит выражение, а не одно число или одна переменная, то все выражение берут в скобки: \frac{a+3}{a-1} будет выглядеть в программе как (a+3.0)/(a-1.0). Но дробь \frac{a}{a-1} будет записана в виде a/(a-1.0).

Пример 3. Составить блок-схему и программу для вычисления значений функций U=x^2+\frac{y+3}{x-1} и V=\frac{1}{y^e}\sin^2(\sqrt{x}+1.5) при различных значениях аргументов x, y. Переменные x, y считать с клавиатуры.

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

Блок-схема для примера 3

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

Код программы (Visual Studio):

// proga12.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int main(){
	double x, y, U, V;
	cout<<"vvedi x=";
	cin>>x;
	cout<<"vvedi y=";
	cin>>y;
	U=pow(x, 2.0)+(y+3.0)/(x-1.0);
	V=1.0/pow(y, exp(1.0))*pow(sin(sqrt(x)+1.5), 2.0);
	cout<<"pri x="<<x<<" y="<<y<<endl;
	cout<<"U="<<U<<" V="<<V<<endl;
	return 0;
}

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


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


Код программы (Borland C++):

#include <iostream.h>
#include <math.h>
int main(){
	double x, y, U, V;
	cout<<"vvedi x=";
	cin>>x;
	cout<<"vvedi y=";
	cin>>y;
	U=pow(x,2.0)+(y+3.0)/(x-1.0);
	V=1.0/pow(y,exp(1.0))*pow(sin(sqrt(x)+1.5),2.0);
	cout<<"pri x="<<x<<" y="<<y<<endl;
	cout<<"U="<<U<<" V="<<V<<endl;
	return 0;
}

Результат выполнения программы (Borland C++):


Пример 4. Найти длину окружности и площадь круга, если известен радиус.

Решение. Введем обозначения: r – радиус, который будет считываться с клавиатуры (т.к. он не задан конкретным числом); C – длина окружности, вычисляемая по формуле C=2\pi r; S – площадь круга, вычисляемая по формуле S=\pi r^2.

Приведем блок-схему на рис. 4.4.

Блок-схема для примера 4

Рис. 4.4. Блок-схема для примера 4

Код программы (Visual Studio):

// proga13.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int main(){
	double r, C, S;
	cout<<"vvedi r=";
	cin>>r;
	C=2.0*3.141593*r;
	S=3.141593*pow(r, 2.0);
	cout<<"r="<<r<<" C="<<C<<" S="<<S<<endl;
	return 0;
}

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


Код программы (Borland C++):

#include <iostream.h>
#include <math.h>
int main(){
	double r, C, S;
	cout<<"vvedi r=";
	cin>>r;
	C=2.0*M_PI*r;
	S=M_PI*pow(r, 2.0);
	cout<<"r="<<r<<" C="<<C<<" S="<<S<<endl;
	return 0;
}

Результат выполнения программы (Borland C++):


< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Никита Беллонский
Никита Беллонский

Лекция 4. Упражнение №4.

Составил блок-схему и по ней написал программу. Работает корректно, но если подбираю значения, чтобы выходила сумма меньше -2, на выводе значится: "-na n(i nd)". 

Я так понимаю, это потому что в выражении выполняется извлечение квадратного корня из отрицательного числа. Но что значит "-na n(i nd)"? Почему вывод именно такой? Машина всегда так сообщает о "неудачных" вычислениях? 

Антон Биганов
Антон Биганов

в лекции 2.

"Таблица 2.4. Выполнение блок-схемы с предусловием для примера 9" - в блоке условия стоит а<10, при таком условии последяя строка {S=17, R=3} на экран выведена не будет.

 

Семен Дядькин
Семен Дядькин
Беларусь, Минск, БГУ, 2003
Зайнобиддин Насриддинов
Зайнобиддин Насриддинов
Узбекистан, Наманган