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

1й курс / Konspekt_lektsiy_Informatika_4

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

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

Итоговые значения в переменных 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–2b, для всех возможных комбинаций значений параметров 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) x2a ≥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

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