Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Циклы с постусловием



Используются существенно реже, потому что основное отличие их от предыдущих инструкций заключается в том, что в них тело цикла в первый раз выполняется без проверки условия продолжения (прекращения) цикла. Единственный смысл применения такой конструкции, на наш взгляд, состоит в получении в теле цикла с помощью операций ввода-вывода информации из внешней среды, которая используется в условии. Заметим, что подобная манипуляция легко реализуется с помощью циклов с предусловием заданием условия, которое при первом проходе по циклу заведомо выполняется. Тем не менее рассмотрим инструкции, реализующие такие циклы.

C

Формат:

do <инструкция> while <условие>;

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

label: <инструкция>;

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

Пример. Дано: {ai}, i=1...100. Найти Sai и Pai.

s=i=0;

p=1;

do { s += a[ i ];

p *= a[ i ];

i++;

} while (i<100);


Basic

Формат:

Do

<инструкции>

loop { while | until } <условие>

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

s=0: i=0

p=1

Do

s += a(i)

p *= a(i)

i += 1

loop while i<100

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

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

Примеры.

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=Saik*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





Дата публикования: 2014-11-02; Прочитано: 244 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...