Циклы часто применяют при обработке массивов.
Массив- совокупность переменных одинакового типа, имеющих одно имя и различные индексы,
задающиеся последовательно. Массивы могут быть одномерными (вектора), двухмерными (матрицы)
и многомерными.
Среди типовых задач, связанных с обработкой массивов, часто встречаются следующие:
нахождение максимального (минимального) элемента массива и упорядочивание элементов
в массиве по возрастанию (убыванию). Ниже рассмотрим возможные решения этих задач.
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));
// вывод значения введенного элемента, разделяем их пробелами- символами " "
document.write(x[i][j]+"       ");
}
// по окончании вывода очередной строки в документ пишем символ перевода строки, "<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