1й курс / Konspekt_lektsiy_Informatika_4
.pdfÓЕфименко К.Н.
Итоговые значения в переменных S, k и P будут получены только после завершения работы цикла. Поэтому они должны выводиться только после выхода из цикла.
Пошаговое выполнение цикла
№ |
x |
y |
k=0 |
S=0 |
P=1 |
1 |
-2 |
-3 |
0+1=1 |
0+(-3)=-3 |
1 |
2 |
-1 |
-1 |
1+1=2 |
(-3)+(-1)=-4 |
1 |
3 |
0 |
1 |
2+1=3 |
-4 |
1×1=1 |
4 |
1 |
3 |
3+1=4 |
-4 |
1×3=3 |
5 |
2 |
5 |
4+1=5 |
-4 |
3×5=15 |
6 |
3 |
|
|
|
|
5. Текст программы: int main()
{float xn, xk, dx, x, y, S, P; int k;
cout<<"Input xn="; cin>>xn; cout<<"Input xk="; cin>>xk; cout<<"Input dx="; cin>>dx; x=xn; S=0; k=0; P=1;
do {y=2*x+1;
cout<<"x="<<x<<"\t y="<<y<<endl; k++;
if (y<=0) S+=y; else P*=y; x+=dx; }
while(x<=xk); cout<<"S="<<S<<"\tk="<<k<<"\tP="<<P<<endl; }
|
Пример 5.7 |
(лабораторная |
работа 4.2)№. Вычислить |
значения |
выражения |
|
|
|
|
|
|||
y =| ax3 | -ctg x 2 , |
соответствующие каждому значению х из заданного интервалаxn ≤ x ≤ xk с |
шагом Dx. Определить количество y≤0.5 и R = Õ y - å y
y>0.5 y >a
Постановка задачи
1.Исходные данные: a, хn, xk, Dx.
2.Выводимые результаты: x, y, R, k.
3.Ограничения: 1) sin(x2) ¹ 0.
4.Блок-схема алгоритма и программа:
#include <stdio.h>
#include <math.h> int main()
{float a, xn, xk, dx, x, y, S, P, R; 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; k=0; S=0; P=1;
while(x<=xk)
{if (sin(x*x)!=0)
{y=fabs(a*x*x*x)-cos(x*x)/sin(x*x); printf("x=%4.2f \t y=%5.2f \n",x,y); if (y<=0.5) k++;
else P*=y;
11
if (y>a) S+=y; }
else printf("Divizion by zero\n"); x+=dx; }
R=P-S;
printf("k=%d \t R=%5.2f \n",k,R);
}
|
|
|
НАЧАЛО |
||
|
|
Ввод a, xn, xk, Dx |
|||
|
|
|
|
|
|
|
x = xn; k=0; S=0; P=1 |
|
|||
|
|
|
|
|
|
+ |
|
|
– |
||
|
|
|
x ≤ xk |
||
sin(x2)¹0 |
+ |
|
|
||
|
|
|
|
||
|
|
|
|
||
– |
|
y =| ax3 | -ctg x2 |
|
||
ctg не су- |
|
Вывод x, y |
|||
ществует |
|
||||
+ |
|
|
|
– |
|
|
|
|
y≤0.5 |
ÓЕфименко К.Н.
R = P – S
Вывод k, К
КОНЕЦ
k = k + 1 |
P = P ∙ y |
+
y>a
S = S + y |
– |
|
|
x= x + Dx
5.5.Вложенные циклы
Цикл, в состав которого не входят другие циклы, называется простым. Однако решение некоторых задач требует перебора значений не одной, а нескольких величин одновременно. В этом случае используются вложенные циклы, каждый из которых организовывается по стандартному принципу (может быть любого из трех типов) и осуществляет перебор только одного параметра. При этом первый цикл называется внешним, а вложенные в него циклы– внутренними. Границы внутреннего цикла не могут выходить за границы внешнего по отношению к нему цикла.
12
ÓЕфименко К.Н.
Для каждого значения параметра внешнего цикла происходит перебор всех возможных значений параметра внутреннего цикла. Другими словами, всегда выполняется в первую очередь внутренний цикл. Такая организация циклов дает возможность перебрать значения параметров во всех возможных комбинациях.
Пример 5.8. Вычислить значения функции у=a–2∙b, для всех возможных комбинаций значений параметров a и b, принадлежащих интервалам [0; 2], Da = 1 и [-2; 2], Db = 2, соответственно.
Для решения задачи необходимо организовать два вложенных цикла по перебору параметров a и b. При этом каждый цикл является циклом с известным числом повторений, т. к. заранее можно вычислить количество значений a (Na =](2–0)/1[+1=3) и b (Nb =](2–(-2))/2[+1=3), а следовательно и общее количество вычисленных значенийy (N = Na × Nb). Следовательно, для организации циклов можно использовать любой из трех стандартных типов.
Постановка задачи
1. |
Исходные данные: an, ak, Da, bn, bk, Db. |
|
|
2. |
Выводимые результаты: a,b, y. |
1 |
|
3. |
Ограничения: нет. |
|
|
НАЧАЛО |
|
||
4. |
Блок-схема алгоритма, |
|
|
|
|
в которой используются |
2 |
|
вложенные циклы |
||
Ввод |
||
с постусловием: |
||
an, ak, Da, bn, bk, Db |
||
|
3
a = an
4
b = bn
5
|
|
|
|
|
|
|
|
|
|
у=a–2·b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
Вывод a,b,y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
9 |
|
|
|
|
|
b = b + Db |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
a = a + Da |
|
|
|
_ |
|
|
|
8 |
|
+ |
||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|||||||||
|
10 |
|
|
|
|
|
|
|
b ≤ bk |
||||
+ |
_ |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||||||
a ≤ ak |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
11 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5. Описание блок-схемы: |
|
|
|
|
|
КОНЕЦ |
|
|
|
||||
Блок 2 – ввод исходных данных. |
|
|
|
|
|
|
|
|
|
|
|
Блок 3 – подготовка к внешнему циклу по параметру a. Блоки 4-10 – тело внешнего цикла с постусловием.
Блок 4 – подготовка к внутреннему циклу по параметру b. Блоки 5-8 – тело внутреннего цикла с постусловием. Блок 7 – изменение параметра внутреннего цикла b.
Блок 8 – условие выхода из внутреннего цикла. Блок 9 – изменение параметра внешнего цикла a. Блок 10 – условие выхода из внешнего цикла.
6. Текст программы: int main()
{ float an, ak, da, a, bn, bk, db, b, y;
13
ÓЕфименко К.Н.
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;
do
{b=bn; do
{y=a-2*b;
cout<<"a="<<a<<"\t b="<<b<<"\t y="<<y<<endl; b+=db;
}
while(b<=bk);
a+=da;
}
while(a<=ak);
}
Результаты:
Вычисляемое значение y одновременно за-
висит от двух параметров a и b, поэтому не имеет принципиального значения по какому параметру делать внешний цикл, а по какому – внутренний. В случае же если одна из вычисляемых величин зависит только от одного параметра, то цикл по этому параметру рационально сделать внешним и вычислять величины, зависящие только от этого параметра во внешнем цикле. Такая организация позволит избежать многократного вычисления одних и тех же значений во внутреннем цикле.
Пример 5.9 (лабораторная работа №4.3). Вычислить значения функций |
x = 1 |
b +1 |
и |
|
|
|
y = 2b + x 2 - a ,
для всех значений параметров a и b, принадлежащих интервалам [an; ak] с шагом Da и [bn; bk] с шагом Db, соответственно.
Функция x зависит только от одного параметраb, поэтому цикл по параметру b рационально сделать внешним и вычислять x, зависящий только от этого параметра во внешнем цикле. Функция y зависит от двух параметров, поэтому будет вычисляться во внутреннем цикле по параметру a.
Постановка задачи
1.Исходные данные: an, ak, Da, bn, bk, Db.
2.Выводимые результаты: a,b, x,y,k.
3.Ограничения: 1) b+1≠0. 2) x2–a ≥0.
4.Блок-схема алгоритма
5.Описание блок-схемы:
Блок 2 – ввод исходных данных.
Блок 3 – подготовка к внешнему циклу по параметру b. Блоки 4-14 – тело внешнего цикла с постусловием. Блоки 4, 8 – проверка ограничений.
Блок 7 – подготовка к внутреннему циклу по параметру a. Блоки 8-12 – тело внутреннего цикла с постусловием. Блок 11 – изменение параметра внутреннего цикла a. Блок 12 – условие выхода из внутреннего цикла.
Блок 13 – изменение параметра внешнего цикла b.
14
ÓЕфименко К.Н.
Блок 14 – условие выхода из внешнего цикла.
1
НАЧАЛО
2
Ввод an, ak, Da, bn, bk, Db
3
b = bn
|
4 |
+ |
|
b+1≠0 |
|
||
|
5 |
||
|
|
||
_ |
|
|
x = 1 |
|
|
|
b +1 |
|
|
Вывод b,x |
|
|
7 |
|
|
a = an |
|
|
|
|
8 |
_ |
6 |
x2–a≥0 |
|
|
|
|
|
|
|
+ |
9 |
|
|
|
|
|
|
y = 2b + |
x2 -a |
1 |
|
|
|
Вывод a,y
|
|
|
|
|
|
1 |
|
|
|
1 |
|
|
a = a + Da |
|
|
|
|
|
|
|
|
|
|
|
b = b + Db |
|
_ |
1 |
+ |
||
|
|
|
|||||
|
|
|
|||||
|
|
|
|
|
a ≤ ak |
||
+ |
1 |
_ |
|
|
|
||
|
|
|
|
||||
|
b ≤ bk |
|
|
|
|
||
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
5. Текст программы: |
|
|
КОНЕЦ |
|
|
|
|
int main() |
|
|
|
|
|
|
|
{float an, ak, da, a, bn, bk, db, b, x, y; 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; b=bn;
do
{if (b+1!=0)
{
x=1/(b+1);
cout<<"b="<<b<<"\t x="<<x<<endl; a=an;
do
{
if (x*x-a>=0)
{y=2*b+sqrt(x*x-a);
15
ÓЕфименко К.Н.
cout<<"a="<<a<<"\t y="<<y<<endl;
}
a+=da;
}
while(a<=ak);
}
b+=db;
}
while(b<=bk);
}
16