Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_2_изд_испр.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

5.6.3. Вложенные циклы

Суть: инструкция тела цикла есть другая инструкция цикла.

Примеры.

1.Умножение матриц. C=A*B, где:

{aik}, i=1... m, k=1... n; {bkj}, k=1...n, j=1... l; {cij}, i=1...m, j=1...l cij=aik*bkj

C

for(i=0; i<m; i++){

for(j=0; j<l; j++){

c[ i ][ j ]=0;

for(k=0; k<n; k++){

c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ];

}

}

}

Basic

for i=0 to m-1

for j=0 to l-1

c( i, j )=0

for k=0 to n-1

c( i, j ) += a( i, k )*b( k, j )

next k

next j

next I

2.Сортировка по неубыванию элементов массива методом "пузырька".

C

pr=1; // pr – признак наличия перестановки: 1- есть перестановка, 0 - нет

while(pr){

pr=0;

for(i=0; i<n-1; i++){

if(a[ i ]>a[ i+1 ]){ // Сравнение "соседей"

b=a[ i ]; a[ i ]=a[ i+1]; a[ i+1]=b; pr=1;//Произошла перестановка

}

}

}

Basic

pr=true ' pr – признак наличия перестановки: 1- есть перестановка, 0 - нет

do while pr

pr=false

for i=1 to n-1

if a(i)>a(i+1)) ' Сравнение "соседей"

b=a( i ): a( i )=a(i+1): a(i+1)=b: pr=true 'Произошла перестановка

end if

next i

loop

3.Цикл с вещественным(дробным) параметром. Вычислить значение функции P(x)=anxn+an-1xn-1+...+a1x+a0 при изменении x от 2 до 3 с шагом dx=0.1.

Схема Горнера – вычисление полинома (многочлена): вывод формулы.

a3x3+a2x2+a1x+a0= (a3x+a2)x2+a1x+a0= ((a3x+a2)x+a1)x+a0

C

j=-1;

for(x=2; x<3.05; x+=.1){ // Формирование массива значений

j++;

p[ j ]=0; // Вычисление значения полинома для заданного x

for(i=n; i>=0; i--){

p[ j ]=p[ j ]*x+a[ i ];

}

}

Basic

j=-1

for x=2 to 3.05 step 0.1 ' Формирование массива значений

j=j+1

p( j )=0 ‘ Вычисление значения полинома для заданного x

for i=n to 0 step -1

p( j )=p( j )*x+a( i )

next i

next x

4. Дана матрица {aik}, i,k=1...10. Найти {bi}, i=1...10, где

1, если в i-й строке диагональный элемент максимален

bi=

0, если нет

C

for(i=0; i<10; i++){

for(k=0; k<10 && a[ i ][ k ]<=a[ i ][ i ]; k++);

if(k==10){

b[ i ]=1;

}else{

b[ i ]=0;

}

}

Basic

for i=0 to 9

k=0

do while k<=10 and a(i,k)<=a(i,i)

k += 1

loop

if k=10 then b(i)=1 else b(i)=0

next i

5.7. Управляемые переходы

Предназначены для выхода из сложных инструкций управления, например, циклов.

В языке C есть 2 инструкции управляемых переходов.

5.7.1. Инструкция break

Передает управление инструкции, непосредственно следующей за инструкцией цикла или switch (см. ниже).

Формат:

break;

Эквивалентная схема:

f or(e1; e2; e3){ for(e1; e2; e3){

................................. ......................................

if(<условие>)break; if(<условие>)goto exit;

................................. ......................................

} }

......................... exit:...................

Пример. Дано {xi}, i=1...30. Найти длину первой подпоследовательности, состоящей только из положительных элементов.

for(pr=kol=i=0; i<30; i++){

if(x[ i ]>0){

kol++; if(!pr)pr=1;

}

if(x[ i ]<=0 && pr)break;

}

Замечание. Почти всегда без инструкции break можно обойтись.

Пример. Тот же.

fl=1;

for(pr=kol=i=0; i<30 && fl; i++){

if(x[ i ]>0){

kol++; if(!pr)pr=1;

}

if(x[ i ]<=0 && pr)fl=0;

}