Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2017, 22:33   #1
Echo17
Новичок
Джуниор
 
Регистрация: 21.10.2017
Сообщений: 2
По умолчанию [РЕШЕНО][JavaScript] Получить массив из четырёх наименьших элементов заданного массива. Есть код, помогите найти ошибку.

Подскажите пожалуйста, что не так. Должно выводить массив из 4 минимальных элементов другого массива, а выводит массив из одного значения, повторяющегося 4 раза (минимального).
array_num - изначальный массив
array_total - конечный массив

Код:
var array_total = [], index, min = 9999999999;;
                    while (array_total.length < 4) {
                      for (var i = 0; i < array_num.length; i++) {
                          if (min > array_num[i]) 
                                {
                                    min = array_num[i];
                                    index = i;
 
                                }
                        }
                        array_total.push(min);
                        delete array_num[index];
                    }
                 alert(array_total);
Решение:
Цитата:
Операция вида delete arr[index] не приводит к удалению элемента из массива - элемент остаётся на месте, но его значение устанавливается в undefined, а длина массива не изменяется.
Вместо этого нужно воспользоваться методом splice: arr.splice(index, 1).

Задавать значение min в начале программы - неверно. Задавайте его равным нулевому элементу массива перед циклом for, а поиск начинайте с первого элемента. Именно в этом у вас заключается вся проблема - после того, как нашли минимум, вы его не обновляете, то есть, не сбрасываете. У вас условие выполняется всегда, min - не изменяется, поэтому идут одинаковые значения.

Исправьте эти ошибки и всё должно заработать.

Последний раз редактировалось Вадим Мошев; 07.05.2018 в 19:03.
Echo17 вне форума Ответить с цитированием
Старый 21.10.2017, 23:19   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Операция вида delete arr[index] не приводит к удалению элемента из массива - элемент остаётся на месте, но его значение устанавливается в undefined, а длина массива не изменяется.
Вместо этого нужно воспользоваться методом splice: arr.splice(index, 1).

Задавать значение min в начале программы - неверно. Задавайте его равным нулевому элементу массива перед циклом for, а поиск начинайте с первого элемента. Именно в этом у вас заключается вся проблема - после того, как нашли минимум, вы его не обновляете, то есть, не сбрасываете. У вас условие выполняется всегда, min - не изменяется, поэтому идут одинаковые значения.

Исправьте эти ошибки и всё должно заработать. Кстати, а что требуется делать по заданию, если в исходном массиве - менее 4 элементов?
Вадим Мошев вне форума Ответить с цитированием
Старый 22.10.2017, 00:29   #3
Echo17
Новичок
Джуниор
 
Регистрация: 21.10.2017
Сообщений: 2
По умолчанию

Вадим Мошев, спасибо за ответ. Все заработало!

Я изначально использовал splice, но тоже выдавало не то. Я подумал именно здесь ошибка и заменил на delete. Кроме того, читал что delete меньше памяти ест. А вся соль действительно в том, что min - задано не в том месте. Код работает и со splice, и с delete.

"Кстати, а что требуется делать по заданию, если в исходном массиве - менее 4 элементов?" - такой подзадачи не стояло.
Echo17 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Помогите найти ошибку (есть код): Дано выражение x-x^3/3+...+(-1)^n*(x^2n-1)/2n-1, до тех пор, пока сумма не будет >= k. Сначала вводится k, после уже все остальное. Romeshek Паскаль, Turbo Pascal, PascalABC.NET 3 13.10.2017 21:20
Дан массив m*n. Составить массив из наименьших элементов каждой строки данного массива. Найти сумму наибольшего и наименьшего элемента массива. Miriam_ Паскаль, Turbo Pascal, PascalABC.NET 2 23.04.2017 11:18
[free Pascal]: Получить новый массив путём удаления из заданного массива все числа, больше заданного R Jon_Morgan Помощь студентам 1 24.12.2016 18:58
Дан массив а(n) типа SWORD. найти сумму всех отрицательных элементов массива.помогите найти ошибку Юлия123456 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.09.2016 06:12
игра домино.код уже есть! помогите найти ошибку! kitty_girl Помощь студентам 3 24.09.2014 12:02