Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Используются существенно реже, потому что основное отличие их от предыдущих инструкций заключается в том, что в них тело цикла в первый раз выполняется без проверки условия продолжения (прекращения) цикла. Единственный смысл применения такой конструкции, на наш взгляд, состоит в получении в теле цикла с помощью операций ввода-вывода информации из внешней среды, которая используется в условии. Заметим, что подобная манипуляция легко реализуется с помощью циклов с предусловием заданием условия, которое при первом проходе по циклу заведомо выполняется. Тем не менее рассмотрим инструкции, реализующие такие циклы.
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!