Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1й курс / Primery_vypolnenia_lab_raboty_4

.pdf
Скачиваний:
1
Добавлен:
12.06.2023
Размер:
224.11 Кб
Скачать

1

ЛАБОРАТОРНАЯ РАБОТА №4. «АЛГОРИТМИЗАЦИЯ И С++. ОРГАНИЗАЦИЯ ЦИКЛИЧЕСКОГО ВЫЧИСЛИТЕЛЬНОГО ПРОЦЕССА»

4.1. ПРОВЕРКА ОГРАНИЧЕНИЙ В ЦИКЛЕ

Задание 4.1. В соответствии с вариантом задания, используя цикл с постусловием, составить блок-схему алгоритма и программу на языке С++, которая для каждого значения х из заданного интервала xn x xk с шагом Dx вычисляет соответствующие значения y=f(x). Для ввода данных использовать потокcin, для вывода – cout.

Пример выполнения задания 4.1

 

ПОСТАНОВКА ЗАДАЧИ:

 

1. Исходные данные: a, xn, xk, Dx

 

 

 

 

2. Математическая модель:

 

 

 

 

ìax2 + ln(ax),

если х < 2

ï

 

 

 

 

 

a + x,

если 2 £ x £ 4

y = íx2 +

 

ï

+ cos x,

если x > 4

ïa / x

î

 

 

 

 

3.Ограничения:

а) 1-я формула: выражение под знаком логарифма должно бытьax>0 прове-

рять;

б) 2-я формула: подкоренное выражение должно быть a+x ³ 0 – проверять;

в) 3-я формула: знаменатель не должен быть равен нулю x ¹ 0 – не проверять, т.к. 3-я формула для вычисленияy используется, только если x > 4, а значит, ограничение (x ¹ 0) всегда будет истинным.

4.Выходные данные: x, y

5.Блок-схема алгоритма:

Примечание. Для решения поставленной задачи необходимо организовать циклический вычислительный процесс по параметруx. С помощью цикла будет организован перебор всех значений х из заданного интервала xn x xk с шагом Dx. На каждом шаге цикла для текущего значениях будет вычисляться в соответствии с условиями отбора значение у.

Например, в качестве исходных данных возьмем интервал0 ≤ x ≤ 6 (xn=0 и xk=6)с шагом Dx=2. Тогда на каждом шаге цикла будут получены следующие значения:

1 шаг: для x = xn = 0, выполняется 1-е условие отбора (x < 2) и у будем вычислять по 1-й формуле, содержащей ограничение ax>0, которое необходимо проверить перед вычислением у по заданной формуле.

2 шаг: для x = 2 (x+Dx=0+2), выполняется 2-е условие отбора (2 £ x £ 4) и у будем вычислять по2-й формуле, содержащей ограничение a+x ³ 0, которое необходимо проверить перед вычислением у по заданной формуле.

Ó Ефименко К.Н.

Информатика

2

3шаг: для x = 4 (x+Dx=2+2), выполняется 2-е условие отбора (2 £ x £ 4) и у будем вычислять по2-й формуле, содержащей ограничение a+x ³ 0, которое необходимо проверить перед вычислением у по заданной формуле.

4шаг: для x = 6 (x+Dx=4+2), выполняется 3-е условие отбора (x > 4) и у будем вычислять по 3-й формуле, ограничение в которой проверять перед вычислением у по заданной формуле не надо.

5шаг: для x = 8 (x+Dx=6+2) не выполнится условие входа в цикл (x xk=6) и произойдет выход из цикла.

1

НАЧАЛО

+

+

5

 

ax>0

6

 

 

 

y = ax2 + ln(ax)

 

 

 

ln не

 

существует

A

Изменение

параметра

цикла

+

Условие входа в цикл

 

 

 

 

2

 

 

Подготовка

 

Ввод a,xn,xk,Dx

 

 

 

 

 

к циклу

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

x = xn

 

 

 

 

 

 

 

 

Тело

 

4

 

 

 

 

 

цикла

 

 

 

 

 

 

 

 

x < 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

8

 

 

 

 

 

 

x > 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

+

10

 

y = a / x + cos x

 

 

7

 

 

 

a+x³0

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y = x2 +

 

 

 

 

 

 

 

 

 

 

 

a + x

 

12

Корень не существует

13

A

Вывод x, y

14

A

x = x + Dx

15

x ≤ xk

16

КОНЕЦ

Ó Ефименко К.Н.

Информатика

3

6. Описание блок-схемы:

Блок 2 – ввод исходных данных.

Блок 3 – подготовка к циклу(присваивание параметру циклаx начального значения).

Блоки 4-15 – тело цикла с постусловием по параметру x.

Блоки 4, 8 – проверка условий отбора. Блоки 5, 10 – проверка ограничений.

Блоки 6, 9, 11 – вычисление текущего значения у. Блоки 7, 12 – вывод сообщений.

Блок 13 – вывод текущих значений х и у.

Блок 14 – вычисление следующего значения х (изменение параметра цикла).

Блок 15 – условие входа в цикл.

Организация цикла для всех вариантов задания4.1 выполняется аналогичным образом (см. ниже). Отличия в алгоритме будут только при вычисленииу в соответствии с заданными условиями отбора.

1

НАЧАЛО

2

Ввод a,xn,xk,Dx

3

x = xn

Вычисление текущего значения у по заданным условиям отбора

 

Переход при

13

невыполнении

ограничения

Вывод x, y

14 A

x= x + Dx

+

15

x ≤ xk

 

 

 

 

16

КОНЕЦ

Ó Ефименко К.Н.

Информатика

4

7. Программа решения задачи на ++,С реализованная с помощью компилятора

Dev-C++.

//Директивы процессора

#include <cstdlib> #include <iostream> #include <math.h> #include <stdio.h> using namespace std;

//Начало главной функции программы int main(int argc, char *argv[])

{//Описание переменных float a,b,x,xn,xk,dx,y;

//Ввод исходных данных a и xn,xk,dx cout<<"Input a="; cin>>a; cout<<"Input xn="; cin>>xn; cout<<"Input xk="; cin>>xk; cout<<"Input dx="; cin>>dx;

//Подготовка к циклу x=xn;

do //Начало тела цикла

{

if (x<2)

{

if (a*x>0) y=a*x*x+log(a*x); else

{//Вывод сообщения о невыполнении ограничения cout<<"For x="<<x<<"\t No ln!"<<endl;

goto m1; } //Переход по метке

}

else

{

if (x>4) y=a/x+cos(x); else

{

if (a+x>=0) y=x*x+sqrt(a+x); else

{//Вывод сообщения о невыполнении ограничения cout<<"For x="<<x<<"\t No radiсal!"<<endl; goto m1; } //Переход по метке

}

}

//Вывод результата x и у

cout<<"For x="<<x<<"\t y="<<y<<endl; m1: x=x+dx; //Изменение параметра цикла

}

Ó Ефименко К.Н.

Информатика

5

while(x<=xk); //Конец тела цикла

system("PAUSE"); return EXIT_SUCCESS;

}

8. Результаты работы программы.

4.2. ВЫЧИСЛЕНИЕ В ЦИКЛЕ СУММЫ, ПРОИЗВЕДЕНИЯ И КОЛИЧЕСТВА ЗНАЧЕНИЙ

Задание 4.2. В соответствии с вариантом задания, используя цикл с предусловием, составить блок-схему алгоритма и программу на языке ++,С которая для каждого значения х из заданного интервала xn x xk с шагом Dx вычисляет соответствующие значения y=f(x). Для ввода-вывода данных использовать функ-

ции scanf(), printf().

Пример выполнения задания 4.2

ПОСТАНОВКА ЗАДАЧИ:

1.Исходные данные: a, xn, xk, Dx

2.Математическая модель:

y = ln(x +1) + cos2 (x - a)

Вычислить количество y£a

Вычислить сумму (S) и произведение (P) значений у:

S = åy

P =Õy

y>a

y<a

Ó Ефименко К.Н.

Информатика

 

 

 

 

 

6

3. Ограничения:

 

 

 

 

 

а) выражение под знаком логарифма x+1 > 0 – проверять.

 

4. Выходные данные: x, y, S, P и k.

 

 

 

5. Блок-схема алгоритма:

 

 

 

 

 

Подготовка

НАЧАЛО

 

 

 

к циклу

 

 

 

 

Тело

 

 

Ввод a, xn, xk, Dx

 

цикла

 

 

 

 

 

 

 

 

Условие

 

 

x = xn; S = 0; P = 1; k = 0

входа в

 

 

цикл

 

 

 

 

 

 

Проверка

x £ xk

-

 

 

ограничения

 

 

 

 

 

+

Вывод S, P, k

Если текущее

 

+

x+1>0

-

КОНЕЦ

значение у

y = ln(x +1) + cos2 (x - a)

 

больше a, то

 

 

оно накапли-

 

 

 

Текущее значение

вается в сум-

 

 

 

Вывод x,y

 

 

у оказалось £ a, и

ме S

 

 

 

 

 

 

 

его учитываем в

 

 

 

 

 

количестве k

 

+

y > a

-

 

 

Если текущее

S = S + y

 

k = k + 1

ln не су-

значение у бу-

 

 

 

ществует

дет еще и < a,

 

 

 

 

 

то оно накап-

 

+

y < a

 

 

ливается в

 

 

 

произведении

 

P = P × y

-

 

 

P

 

 

 

 

 

x = x + Dx

 

Изменение

 

 

 

 

 

параметра

 

 

 

 

 

цикла

 

6. Программа решения задачи на С++.

 

 

 

#include <cstdlib>

 

 

 

 

#include <iostream>

 

 

 

#include <math.h>

 

 

 

 

#include <stdio.h>

 

 

 

 

using namespace std;

 

 

 

int main(int argc, char *argv[])

 

 

Ó Ефименко К.Н.

 

 

 

 

Информатика

7

{float xn,xk,dx; float a,x,y,S,P; int k;

//Ввод исходных данных

printf("Input a="); scanf("%f",&a); printf("Input xn="); scanf("%f",&xn); printf("Input xk="); scanf("%f",&xk); printf("Input dx="); scanf("%f",&dx); x=xn; S=0; P=1; k=0;

//Начало тела цикла с предусловием while (x<=xk)

{

if (x+1>0)

{

y=log(x+1)+pow(cos(x-a),2); printf("For x=%5.1f\ty=%7.3f\n",x,y); if (y>a) S+=y;

else

{

k++;

if (y<a) P*=y;

}

}

else

printf("For x=%5.1f\ty=Error!\n",x); x+=dx;

}//Конец тела цикла printf("\nS=%7.3f\tP=%7.3f\tk=%d\n",S,P,k);

system("PAUSE"); return EXIT_SUCCESS;

}

7. Результаты работы программы

Ó Ефименко К.Н.

Информатика

8

4.3. ОРГАНИЗАЦИЯ ВЛОЖЕННЫХ ЦИКЛОВ

Задание 4.3. В соответствии с вариантом задания составить блок-схему алгоритма и программу на языкеC++ для расчета указанной модели при всех комбинациях a и b, значения которых заданы в виде интерваловan a ak с шагом Da и bn b bk с шагом Db соответственно. Циклы по параметрам a и b должны быть разного типа. Для ввода данных использовать поток cin, для вывода – cout.

Пример выполнения задания 4.3 ПОСТАНОВКА ЗАДАЧИ:

1. Исходные данные: an, ak, Da, bn, bk, Db. 2. Математическая модель:

z= bx - ab + 2 x2 +1

x=1 - tg (1 + a)

3.Ограничения:

а) формула для вычислениях содержит функциюtg(), следовательно, cos(1+a)¹0 – проверять;

б) формула для вычисления y: подкоренное выражение должно быть неотрица-

тельным ab+2 ³ 0 – проверять;

в) формула для вычисления y: знаменатель не должен быть равен нулю x2+1 ¹ 0

не проверять, т.к. это неравенство всегда является истинным.

4.Выходные данные: a, b, x, z.

5.Блок-схема алгоритма:

Примечание. Внешним рационально выбрать цикл по параметру a, так как х (должен вычисляться первым) зависит только от a. Значение х необходимо вычислять во внешнем цикле, это позволит избежать многократного вычисления одних и тех же значений х. Во внутреннем цикле по параметру b будет вычисляться значение z, которое зависит от двух параметров а и b.

Если бы х и z зависели от двух параметров а и b, то значения х и z вычислялись бы во внутреннем цикле.

Блок 2 – ввод исходных данных.

Блок 3 – подготовка к внешнему циклу по параметру a. Блоки 4-16 – тело внешнего цикла с предусловием. Блок 4 – условие входа во внешний цикл.

Блоки 5, 9 – проверка ограничений.

Блок 8 – подготовка к внутреннему циклу по параметру b. Блоки 9-14 – тело внутреннего цикла с постусловием.

Блок 13 – изменение параметра внутреннего цикла (вычисление следующего значения b).

Блок 14 – условие входа во внутренний цикл.

Блок 16 – изменение параметра внешнего цикла(вычисление следующего значения а).

При каждом значении параметра внешнего циклаа, вычисляется одно зна-

Ó Ефименко К.Н.

Информатика

9

чение х и во внутреннем цикле будут перебираться все значения параметраb. Для каждой полученной во внутреннем цикле комбинации значений и b будет вычисляться соответствующее значение z.

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

НАЧАЛО

 

 

 

 

 

 

 

Тело

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

Ввод an, ak, Da, bn, bk, Db

 

 

 

внешнего

 

 

 

 

 

 

цикла

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a = an

 

 

 

 

 

 

 

 

+

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

a ≤ ak

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

 

 

 

 

 

 

 

 

 

 

 

 

5

+

 

КОНЕЦ

 

 

cos(1+a)¹0

 

 

 

 

 

 

 

6

 

 

 

15

 

 

 

 

 

 

 

 

 

tg не

 

 

 

 

 

x = 1 - tg (1 + a)

 

 

 

 

 

 

 

 

 

 

 

 

 

существует

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

 

 

Тело

 

 

 

 

 

 

 

 

 

 

a,x

 

 

внутреннего

 

 

 

 

 

 

 

8

 

 

цикла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b = bn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

9

_

 

 

 

 

 

 

 

ab+2≥0

 

 

 

 

 

 

 

 

 

 

 

12

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

Корень не

 

 

 

z =

bx - ab +

2

 

 

 

 

 

 

 

 

 

 

 

существует

 

 

 

x2 +1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

Вывод

 

 

 

 

 

 

 

 

 

 

 

 

b,z

 

 

 

 

 

 

 

 

 

 

13

 

 

 

 

 

 

 

 

 

 

 

 

 

b = b + Db

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_

 

14

+

 

 

 

 

 

 

b ≤ bk

 

 

 

16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a = a + Da

Ó Ефименко К.Н.

Информатика

10

6. Программа решения задачи на С++.

#include <cstdlib> #include <iostream> #include <math.h> #include <stdio.h> using namespace std;

int main(int argc, char *argv[])

{float a,b,x,z;

float an,ak,da,bn,bk,db; cout<<"Input an="; cin>>an; cout<<"Input ak="; cin>>ak; cout<<"Input da="; cin>>da; cout<<"Input bn="; cin>>bn; cout<<"Input bk="; cin>>bk; cout<<"Input db="; cin>>db; a=an;

//Начало внешнего цикла с предусловием while (a<=ak)

{

if (cos(1+a)!=0)

{x=1-tan(1+a);

cout<<"a="<<a<<"\t x="<<x<<endl; b=bn;

//Начало внутреннего цикла с постусловием do

{

if (a*b>=0)

{z=(b*x-sqrt(a*b+2))/(x*x+1);

cout<<"\tb="<<b<<"\t z="<<z<<endl;

}

else

//Вывод сообщения о невыполнении ограничения cout<<"\tb="<<b<<"\t No radical!"<<endl;

b=b+db;

}

while (b<=bk); //Конец внутреннего цикла

}

else

//Вывод сообщения о невыполнении ограничения cout<<"\a="<<a<<"\t No tg!"<<endl;

a=a+da;

} //Конец внешнего цикла system("PAUSE");

return EXIT_SUCCESS;

}

Ó Ефименко К.Н.

Информатика

Соседние файлы в папке 1й курс