Опубликован: 26.03.2015 | Уровень: для всех | Доступ: платный | ВУЗ: Нижегородский государственный технический университет имени Р. Е. Алексеева
Лекция 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 >
Игорь Беличенко
Игорь Беличенко

Постройте таблицу значений функции y(x)=5x^2-3x+4 при -20\le х\le 20 с шагом 0,5. Определите наименьшее значение функции и значение х, при котором оно достигается.

Алексей Бережнов
Алексей Бережнов
Мария Емельянова
Мария Емельянова
Россия, ИжГТУ, 2013
Андрей Павловский
Андрей Павловский
Россия