Yutex - Платный хостинг PHP.
Advego.ru - система покупки и продажи контента для сайтов, форумов и блогов

Технические фишки инфобизнеса 2014

Статьи для сайтов!!!
Дизайн сайтов
Использование функций Параллельные массивы Передача переменной в функцию

Параллельные массивы в Javascript - Практическая задача

Количество просмотров: 354

Здесь Вы познакомитесь с понятием параллельные массивы и научитесь с ними работать.

Мы продолжим работать с этим кодом, который, напомним: определяет максимальное число в массиве и выдает индексы (позиции) этого числа.

На этой странице исходная задача будет усложнена.

Условие задачи и немного теории:

Есть два числовых массива:

var kpd = [42, 70, 49, 68, 70, 61, 43, 47, 70, 35]
var cost = [22, 24, 25, 21, 22, 23, 23, 26, 23, 24]

Представим следующее:

kpd - массив содержащий значения КПД (коэффициента полезного действия) различных модификаций какого-либо двигателя.

cost - массив, повторяющий структуру массива kpd и содержащий стоимость этих модификаций двигателя.

Массивы kpd и cost называются параллельными, так как для каждого значения из kpd есть соответствующее значение из массива cost с тем же индексом.

То есть значению 42 из kpd соответствует значение 22 из cost - у обоих индекс 0. Индекс 1 - это значения 70 и 24 и т.д.

Нужно сделать следующее:

1. Узнать максимальное значение КПД двигателя из массива kpd. А также индексы (позиции) этого значения (это мы уже делали здесь).

Максимальный КПД двигателя равен 70

Это значение занимает следующие позиции: 1,4,8

2. Согласно этим индексам проанализировать соответствующие значения ЦЕНЫ из массива cost и определить минимальное из них.

То есть нужно выяснить, какой двигатель с максимальным КПД (это массив kpd) имеет минимальную стоимость производства (массив cost).

Минимальная цена при максимальном КПД: 22

Параллельные массивы - Исходный код

Ниже размещен код, от которого мы будем отталкиваться - именно о нем шла речь в начале страницы.

<script type="text/javascript">

var kpd = [42, 70, 49, 68, 70, 61, 43, 47, 70, 35];
var cost = [22, 24, 25, 21, 22, 23, 23, 26, 23, 24];

var i = 0;
var maxi = 0;

while (i < kpd.length)
{
if(kpd[i] > maxi)
{
maxi = kpd[i]
}
i ++;
}

document.write("Максимальный КПД двигателя равен " + maxi);

 

var empty = [];

for(i = 0; i < kpd.length; i++)
{
if(kpd[i] == maxi)
{
empty.push(i);
}
}

document.write("<br /> Это значение занимает следующие позиции: " + empty);

</script>

Результат - Исходный код

Максимальный КПД двигателя равен 70
Это значение занимает следующие позиции: 1,4,8

Итак, для начала мы имеем максимальный КПД равный 70 и номера позиций (индексов) этого значения в массиве kpd - 1,4 и 8.

  • Подробнее о том, как работает этот фрагмент кода Вы можете узнать здесь.

Работа с параллельными массивами в Javascript

Теперь нам предстоит выяснить: как сопоставить элементы двух параллельных массивов между собой?

А в нашем случае узнать: какому из максимальных значений КПД (число 70 из массива kpd) соответствует минимальная стоимость двигателя (выбирается меньшее из 3-х значений массива cost с индексами 1,4 и 8).

<script type="text/javascript">

var kpd = [42, 70, 49, 68, 70, 61, 43, 47, 70, 35];
var cost = [22, 24, 25, 21, 22, 23, 23, 26, 23, 24];

var i = 0;
var maxi = 0;

while (i < kpd.length)
{
if(kpd[i] > maxi)
{
maxi = kpd[i]
}
i ++;
}

document.write("Максимальный КПД двигателя равен " + maxi);

 

var empty = [];
var mini = Infinity;

for(i = 0; i < kpd.length; i++)
{
if(kpd[i] == maxi)
{
empty.push(i);
if (cost[i] < mini)
{
mini = cost[i]
}

}
}

document.write("<br /> Это значение занимает следующие позиции: " + empty);

document.write("<br /> Минимальная цена при максимальном КПД: " + mini);

</script>

Результат - Работа с параллельными массивами в Javascript

Максимальный КПД двигателя равен 70
Это значение занимает следующие позиции: 1,4,8
Минимальная цена при максимальном КПД: 22

Комментарии к коду (красным помечены изменения в исходном коде).

  • Вводим переменную mini и присваиваем ей значение Infinity (что обозначает бесконечность) var mini = Infinity. С бесконечностью будут сравниваться нужные значения массива cost с целью поиска минимального.

    Если предположить, что нам не известен диапазон значений массива cost, то их лучше сравнивать именно с бесконечностью.

    Но если известен, то в нашем случае, можно было бы переменной mini присвоить значение 100.

  • Теперь, после того, как в массив empty занесен индекс очередного максимального значения КПД empty.push(i), мы используем этот индекс для получения соответствующего значения из массива cost.

    И если это значение меньше текущего значения переменной mini, последней оно и присваивается.
    if (cost[i] < mini){mini = cost[i]}

    Подробнее о том, что происходит в примере...

    1. Итак, сначала был определен индекс первого максимального значения 70 из массива kpd (этот число 1, которое заносится в массив empty).

    2.Затем берется значение из массива cost также с индексом 1, то есть 24.

    3. Далее идет сравнение: если 24 < Infinity, то число 24 присваивается переменной mini, то есть теперь ее текущее значение равно 24.

    4. Затем определяется индекс следующего максимального значения 70 из массива kpd - он равен 4.

    5. Индексу под номером 4 соответствует число 22 из массива cost.

    6. Снова сравнение: 22 < 24, поэтому теперь mini = 22.

    7. Последний индекс, с которым мы работаем равен 8 - это значение 23 из массива cost.

    8. Но теперь условие 23 < 22 ложно, поэтому переменная mini не меняет своего значения и по прежнему mini = 22.

  • Таким образом, мы имеем минимальную цену при максимальном КПД двигателя, равную 22.

Параллельные массивы - Упрощаем код

Если, например, нам не нужны номера индексов максимального значения КПД в массиве, то можно не заносить их в массив empty, тем самым немного упростив код.

<script type="text/javascript">

var kpd = [42, 70, 49, 68, 70, 61, 43, 47, 70, 35];
var cost = [22, 24, 25, 21, 22, 23, 23, 26, 23, 24];

var i = 0;
var maxi = 0;

while (i < kpd.length)
{
if(kpd[i] > maxi)
{
maxi = kpd[i]
}
i ++;
}

document.write("Максимальный КПД двигателя равен " + maxi);

 

/* Исключаем этот фрагмент кода: var empty = []; */
var mini = 100;

for(i = 0; i < kpd.length; i++)
{
if(kpd[i] == maxi)
{
/* Исключаем этот фрагмент кода: empty.push(i); */
if (cost[i] < mini)
{
mini = cost[i]
}
}
}

document.write("<br /> Минимальная цена при максимальном КПД: " + mini);

</script>

Результат - Упрощаем код

Максимальный КПД двигателя равен 70
Минимальная цена при максимальном КПД: 22

Обратите внимание: здесь мы уже работаем со значением переменной mini = 100 (в предыдущем примере работали с Infinity).

Параллельные массивы - Добавляем функции

Код из предыдущего примера можно оптимизировать, используя функции.

<script type="text/javascript">

var kpd = [42, 70, 49, 68, 70, 61, 43, 47, 70, 35];
var cost = [22, 24, 25, 21, 22, 23, 23, 26, 23, 24];

function max_kpd(kpd)
{

var i = 0;
var maxi = 0;

while (i < kpd.length)
{
if(kpd[i] > maxi)
{
maxi = kpd[i]
}
i ++;
}
return maxi;
}

var best_kpd = max_kpd(kpd);

document.write("Максимальный КПД двигателя равен " + best_kpd);

function min_cost(kpd,cost)
{

var mini = Infinity;

for(i = 0; i < kpd.length; i++)
{
if(kpd[i] == best_kpd)
{
if (cost[i] < mini)
{
mini = cost[i]
}
}
}
return mini;
}

var best_cost = min_cost(kpd,cost);

document.write("<br /> Минимальная цена при максимальном КПД: " + best_cost);

</script>

Результат - Параллельные массивы - Добавляем функции

Максимальный КПД двигателя равен 70
Минимальная цена при максимальном КПД: 22

Теперь функции max_kpd и min_cost можно повторно использовать для определения максимального КПД и минимальной стоимости других двигателей.

Частота просмотра уроков
JavaScript
Использование функций Параллельные массивы Передача переменной в функцию

Ваши комментарии:

Комментариев нет...

Добавить комментарий:

Ваше Имя:*
Комментарий:*
Ответьте на вопрос: *
Сколько дней в Високосном году?
* - поля обязательные для заполнения.
ПОИСК ПО САЙТУ:

Моё имя Антон. Связаться со мною Вы можете по e-mail: averagev@mail.ru