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

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

<script type="text/javascript">
//    объявляется массив x
    var x = new Array();    
//    цикл по i от 0 до 11 : ввод элементов массива и вывод введенных элементов в открытый документ
    for(i=0; i<12; i++ )    
    {    
    x[i]=Number(prompt("x["+i+"]=",i));    
    document.write("x["+i+"]="+x[i]+"<br>");    
    }    
//    cобственно вот оно решение - следующие три строчки:
//    1. пусть x[0] -максимальный элемент массива; присвоим переменной max_x значение x[0]
    max_x=x[0];    
//    2. цикл по i от 0 до 11 : перебор элементов массива
    for(i=0; i<12; i++ )    
//    3. проверка: если текущий элемент x[i] больше max_x, то max_x=x[i]
    if(x[i]>max_x) max_x=x[i];    
//    после выполнения цикла пишем выводим ответ в информационное окно браузера и в документ
    alert("max x = "+max_x);    
    document.write("<br><br> max x = "+max_x);    
</script>

Вы можете выполнить эту программу в новом окне браузера.

Вместо "традиционного" решения:
    max_x=x[0];    
    for(i=0; i<12; i++ )    
    if(x[i]>max_x) max_x=x[i];    
можно воспользоваться методом "max" объекта "Math" языка JavaScript. И тогда решение будет выглядеть компактнее (но менее прозрачно):
   max_x=Math.max.apply(0,x);

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

<script type="text/javascript">
//    объявляется массив x
    var x = new Array();    
//    цикл по первому индексу - номеру строки матрицы
    for(i=0; i<3; i++ )    
    {    
//    каждая строка матрицы содержит 4 столбца: x[i] - одномерный массив элементов, находящихся в i-ом столбце
    x[i] = new Array();    
//    цикл по второму индексу - номеру столбца матрицы
    for(j=0; j<4; j++ )    
    {    
//    ввод x[i][j]- значения элемента матрицы, стоящего в i-ой строке, j-ом столбце
    x[i][j]=Number(prompt("x["+i+"]["+j+"]=",i+j));    
//    вывод значения введенного элемента, разделяем их пробелами- символами "&nbsp"
    document.write(x[i][j]+" &nbsp&nbsp&nbsp&nbsp&nbsp ");    
    }    
//    по окончании вывода очередной строки в документ пишем символ перевода строки, "<br>"
    document.write("<br>");    
    }    
//    Далее следует собственно решение и вывод результатов:
//    пусть минимальный элемент (min_x) стоит в строке 0, столбце 0
    min_x=x[0][0]; min_i=0; min_j=0;    
//    в циклах по строкам и столбцам матрицы проверяем..........
    for(i=0; i<3; i++ )    
    for(j=0; j<4; j++ )    
    {    
//    ...........если текущий элемент массива x[i][j] меньше min_x, то производим соответствующую корректировку:
    if(x[i][j] < min_x) {min_x=x[i][j]; min_i=i; min_j=j;}    
    }    
//    выводим ответы
   alert("min x["+min_i+","+min_j+"] = "+min_x);    
   document.write("<br><br> min x["+min_i+","+min_j+"] = "+min_x);    
</script>

Вы можете выполнить эту программу в новом окне браузера.

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

<script type="text/javascript">
//    объявление массива и его ввод/вывод в исходном порядке
    var x = new Array();    
    document.write("Исходный массив <br>");    
    for(i=0; i<12; i++ )    
    {    
    x[i]=Number(prompt("x["+i+"]=",10-i));    
    document.write("x["+i+"]="+x[i]+"<br>");    
    }    
//    далее - собственно решение, правда, не рациональное, но простое:
    for(j=0; j<12; j++ )     // делаем 12 переборок всего массива
    for(i=0; i<11; i++ )     // а в каждой переборке - сравниваем x[i] с последующим x[i+1],
    {    
/*    и если x[i]>x[i+1], то меняем их значения местами: копируем значение x[i] в буферную переменную buf; присваиваем x[i]=x[i+1]; и значение x[i] из buf присваиваем x[i+1]-му элементу     */
    if(x[i]>x[i+1]) {buf=x[i]; x[i]=x[i+1]; x[i+1]=buf; }    
    }    
//    выводим ответы
    document.write("<br><br> Отсортированный по возрастанию массив<br>" );    
    for(i=0; i<12; i++ ) document.write("x["+i+"]="+x[i]+"<br>");    
</script>

Вы можете выполнить эту программу в новом окне браузера.

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

<script type="text/javascript">
//    объявление массива и его ввод/вывод в исходном порядке
    var x = new Array();    
    document.write("Исходный массив <br>");    
    for(i=0; i<12; i++ )    
    {    
    x[i]=Number(prompt("x["+i+"]=",10-i));    
    document.write("x["+i+"]="+x[i]+"<br>");    
    }    
//    далее - собственно решение
    do     // будем повторять переборку элементов........................
    {    
    flag=0;     // (flag=0 - флаг, указывает на то, что перестановок не было)
    for(i=0; i<11; i++ )    
    {    
    if(x[i]>x[i+1]) {buf=x[i]; x[i]=x[i+1]; x[i+1]=buf; flag=1;}    // (flag=1 - флаг, указывает на то, что были перестановки)
    }    
    }while(flag);     // ..................................повторять, если на предыдущем шаге были сделаны перестановки
//    выводим ответы
    document.write("<br><br> Отсортированный по возрастанию массив<br>" );    
    for(i=0; i<12; i++ ) document.write("x["+i+"]="+x[i]+"<br>");    
</script>

Вы можете выполнить эту программу в новом окне браузера.

В JavaScript массивы - это объекты, имеющие свои методы (функции для работы с этими объектами). И один из этих методов - метод сортировки sort.
Чтобы отсортировать массив чисел, необходимо передать методу sort функцию сравнения двух чисел. Функция, передаваемая методу sort, поочерёдно вызывается для различных пар элементов массива, и должна вернуть отрицательное число, если первый аргумент меньше второго, положительное число, если первый аргумент больше второго, и 0, если они равны. (Подробнее функции в JavaScript рассмотрены в следующем разделе.)
Таким образом, возможное решение:

<script type="text/javascript">
    var x = new Array();    
    document.write("Исходный массив <br>");    
    for(i=0; i<12; i++ )    
    {    
    x[i]=Number(prompt("x["+i+"]=",10-i));    
    document.write("x["+i+"]="+x[i]+"<br>");    
    }    
       
    x.sort(function f(a, b) { return a - b; });     // вот и все решение - в одну строку!
       
    document.write("<br><br> Отсортированный по возрастанию массив<br>" );    
    for(i=0; i<12; i++ ) document.write("x["+i+"]="+x[i]+"<br>");    
</script>

Вы можете выполнить эту программу в новом окне браузера.




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

                      аналог на Fortran                        аналог на Basic                 аналог на Pascal                 аналог на C

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