Последний из описанных вариантов организации циклов часто применяют при обработке массивов. 
Массив- совокупность переменных одинакового типа, имеющих одно имя и различные индексы, задающиеся последовательно. Массивы могут быть одномерными (вектора), двухмерными (матрицы) и многомерными.
Среди типовых задач, связанных с обработкой массивов, часто встречаются следующие: нахождение максимального (минимального) элемента массива и упорядочивание элементов в массиве по возрастанию (убыванию). Ниже рассмотрим возможные решения этих задач.

1)Пусть требуется найти максимальный элемент в одномерном массиве Х, состоящем из 12 элементов. 
Возможное решение:

dimension x(12)              !так определяем массив Х из 12 элементов 
C        Следующие 4 строки - обслуживание ввода массива Х пользователем:
do i=1,12                          !цикл по i от 1 до 12
write(*,*)' x(',i,')='           !пишем подсказку: "Х(...)="
read(*,*) x(i)                    !считываем значение i-го элемента массива X
end do                              !конец цикла
С        собственно вот оно решение:
y=x(1)                                 !пусть Y=х(1) -максимальный элемент массива
do i=1,12                            !задаем цикл по i от 1 до 12
if( x(i).gt.y) y=x(i)              !проверка: если текущий элемент X(i) больше Y, то y=x(i)
end do                                !конец цикла
write(*,*)' maximal x=',y  !после выполнения цикла пишем на экран ответ
end                                     !конец программы

2)Пусть требуется найти минимальный элемент и его индексы в матрице (двухмерном массиве) Х из трех строк и четырех столбцов.
Возможное решение:

dimension x(3,4)    !определяется матрица Х 3 на 4 элемента 
    Следующие 7 строк - обслуживание ввода массива Х пользователем:
write(*,*)' input values of x:'
do i=1,3
do j=1,4
write(*,*)' x(',i,',',j,')='
read(*,*) x(i,j)
end do
end do
C
      а вот и решение - следующие 12 строк!
y=x(1,1)                !пусть Y=min элемент стоит в первой строке, первом столбце
ii=1
jj=1
do i=1,3
                 !цикл по строкам
do j=1,4                 !... и по столбцам
if( x(i,j).lt.y) then  !и если текущий элемент массива x(i,j) меньше Y, то
y=x(i,j)                  !корректируем текущие значения Y
ii=i                         !и индексов ii и jj
jj=j
end if                    
!конец условного блока if
end do                    !конец цикла по столбцам
end do                   !конец цикла по строкам
write(*,*)' minimal x(',ii,',',jj,')=',y   !выводим ответ на экран
end

3)Пусть требуется упорядочить по возрастанию одномерный массив Х, состоящий из 12 элементов. 
Возможное решение:

dimension x(12)
C         
обслуживание ввода массива Х пользователем:
write(*,*)' input values of X:'
do i=1,12 
write(*,*)' x(',i,')='
read(*,*) x(i)
end do
C
        далее - собственно решение, правда, не рациональное, но простое:
do j=1, 11                       !делаем 11 переборок всего массива
do i=1, 11                       !а в каждой переборке - сравниваем
if (x(i).gt.x(i+1)) then     !x(i) с последующим x(i+1), и если x(i)>x(i+1),
y=x(i)                             !копируем значение x(i) в буферную переменную Y
x(i)=x(i+1)                      !присваиваем x(i)=x(i+1)
x(i+1)=y                !и значение x(i) из буферной Y присваиваем x(i+1)-му элементу
end if !                            конец блока if
end do 
enddo

C       пишем результат на экран:
write(*,*)'***********result:*********'
do i=1, 12 
write(*,*)' x(',i,')=',x(i)
end do
end

Что нерационального в приведенной выше программе? Конечно же принудительная переборка всего массива 11 раз.
Сделаем так, чтобы переборка повторялась только в том случае, если на предыдущем шаге были сделаны перестановки. Возможное решение:

dimension x(12)
write(*,*)' input values of X:'
do i=1,12 
write(*,*)' x(',i,')='
read(*,*) x(i)
end do
j=1
do while(j.eq.1) 
!будем повторять переборку элементов до тех пор... 
j=0
do i=1, 11
if (x(i).gt.x(i+1)) then 
j=1
                      ! j=1 - флаг, указывает на то, что перестановки были сделаны
y=x(i) 
x(i)=x(i+1) 
x(i+1)=y 
end if 
end do 
enddo
                !...до тех пор, пока на предыдущем шаге были сделаны перестановки
C          пишем результат на экран:
write(*,*)'***********result:*********'
do i=1, 12 
write(*,*)' x(',i,')=',x(i)
end do
end

                    <<ранее             к оглавлению        далее>>

                      то же на С                        то же на Basic                 то же на Pascal

                аналог на JavaScript
Используются технологии uCoz