27.09.2013, 20:33
|
Аспирант
|
|
Регистрация: 25.09.2013
Сообщений: 44
|
|
Да, нужно было сохранять первоначальный массив, спасибо за помощь!
|
|
27.09.2013, 20:58
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Сообщение от Anna77
|
Нужно определить количество максимальных элементов в массиве из 10 элементов
|
У Вас почти верно.
function nummax(Arr)
{
var n = Arr.length, max = Arr[0], count = 1;
for (var i = 1; i < n; i++)
{ if (Arr[i] > max)
{ max = Arr[i]; count = 1; }
else
{ if (Arr[i] == max) count++; }
}
return [max,count];
}
// Пример вызова функции
var A = nummax([-1,7,2,-6,7,1,7,-7,4,5]);
alert("Максимальное значение массива: " + A[0] + ", его количество: " + A[1]);
|
|
27.09.2013, 22:02
|
Аспирант
|
|
Регистрация: 25.09.2013
Сообщений: 44
|
|
Спасибо Вам большое! Приятно, что есть такие отзывчивые люди!
|
|
28.09.2013, 01:10
|
Интересующийся
|
|
Регистрация: 03.03.2013
Сообщений: 15
|
|
Сообщение от Anna77
|
Скажите, а как сделать, чтобы в конце отображался введенный пользователем массив(из prompt)? и исходя из него выбиралось nummax?
|
Я тут мимо проходил, вот набросал функцию. Вызываете её, она отдаёт вам массив и можете делать с ним всё, что душе угодно.
function get_array_from_user() {
var ret = []; // то, что будем возвращать
var err = ""; // будем хранить ошибку для показа пользователю
var str = ""; // объявляем строку
while(str.indexOf('!') < 0) { // пока в ответе пользователя нет "!". Если строка "20!", то 20 будет добавлен в массив и цикл завершится
str = prompt((err?err + '\n\n' : '') + //если есть ошибка, показываем её
"Введите элемент массива, завершение ввода - символ '!':");
err = ''; // обнуляем ошибку
var num = parseInt(str);
// тут обрабатываем ошибки
if(str === null) { // если нажата отмена. По идее лучше бы завершить ввод, но мы ждём "!".
// Eсли хотите завершить, замените "continue" на "break"
err = 'Ошибка: Вы отменили ввод!'; // записываем ошибку
str = ''; // иначе у null нет свойства indexOf и скрипт авершится с ошибкой без результатов.
continue; // обрываем "круг" цикла.
} else
if(!str) { // если пользователь ничего не ввёл
err = 'Ошибка: Вы ничего не ввели!'; // записываем ошибку
continue; // обрываем "круг" цикла.
} else
if(isNaN(num)) { //если не число
err = 'Ошибка: "' + str + '" не является числом!'; // записываем ошибку
continue; // обрываем "круг" цикла.
}
ret.push(num); // если всё нормально, то записываем в массив
}
return ret;
}
// демонстрация:
var user_array = get_array_from_user(); // записываем в user_array то, что вернёт наша функция
alert('Пользователь ввёл: ' + user_array);
Последний раз редактировалось user222, 28.09.2013 в 01:28.
Причина: Накидал обработку ошибок
|
|
28.09.2013, 01:48
|
Аспирант
|
|
Регистрация: 25.09.2013
Сообщений: 44
|
|
Подскажите, почему в конце не выводится document.write?
Последний раз редактировалось Anna77, 11.10.2013 в 12:05.
|
|
28.09.2013, 02:12
|
Интересующийся
|
|
Регистрация: 03.03.2013
Сообщений: 15
|
|
Anna77,
Я вообще не уверен как у вас это работает.
У вас " break;" вынесен за пределы if'a. А после него фигурные скобки. Вы толи else хотели там, толи другой if
И не понятно что вообще делает надпись "Массив симметричный" в цикле проверки. Только после окончания проверки мы может сказать симметричен массив, или нет.
Видимо вы хотели вот так
var Arr = [];
var i = 0;
do
{
var str = prompt("Введите элемент массива, завершение ввода - символ '!':");
if (!isNaN(+str) && +str == parseInt(str))
{
Arr[i++] = str;
}
}
while(str !== "!")
document.write("Исходный массив Arr: " + Arr + "<br/>");
var x = true;
var n = Arr.length;
for (var i = 0; i < (n-1)/2; i++)
{
if (Arr[i] !== Arr[n-1-i])
{
x = false;
break;
}
}
if(x) {
document.write("Массив симметричный");
}else{
document.write("Массив несимметричный");
}
|
|
28.09.2013, 02:27
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Сообщение от Anna77
|
Если не сложно, подскажите, пожалуйста, как написать программу, определяющую, является ли массив симметричным, т. е. совпадает ли его первый элемент с последним, второй с предпоследним и т. д.
|
Сообщение от Anna77
|
Подскажите, почему в конце не выводится document.write, когда массив симметричный?
var Arr = [];
var i = 0;
do
{
var str = prompt("Введите элемент массива, завершение ввода - символ '!':");
if (!isNaN(+str) && +str == parseInt(str))
{
Arr[i++] = str;
}
}
while(str !== "!")
document.write("Исходный массив Arr: " + Arr + "<br/>");
var x = true;
var n = Arr.length;
for (var i = 0; i < (n-1)/2; i++)
{
if (Arr[i] !== Arr[n-1-i])
{
x = false;
document.write("Массив несимметричный" + "<br/>");
} break;
{
document.write("Массив симметричный");
}
}
|
Вот так примерно
var Arr = [], i = 0;
do { var str = prompt("Введите элемент массива, завершение ввода - символ '!':");
if (!isNaN(+str) && +str == parseInt(str)) Arr[i++] = str;
} while (str !== "!");
document.write("Исходный массив: Arr = [" + Arr + "]<br/>");
var x = "симметричный",
n = Arr.length,
k = (n%2==1) ? n/2 : (n-1)/2;
for (var i = 0; i < k; i++)
{ if (Arr[i] !== Arr[n-1-i])
{ x = "несимметричный"; break; }
}
document.write("Массив " + x);
Последний раз редактировалось Demath, 28.09.2013 в 02:30.
|
|
28.09.2013, 02:51
|
Интересующийся
|
|
Регистрация: 03.03.2013
Сообщений: 15
|
|
Anna77,
В общем вот вам готовый результат. Симметричность проверяется другим "необычным" способом. Всё прокомментировал, изучайте.
function get_array_from_user() { // функция получения массива пользователя
var ret = []; // то, что будем возвращать
var err = ""; // будем хранить ошибку для показа пользователю
var str = ""; // объявляем строку
while(str.indexOf('!') < 0) { // пока в ответе пользователя нет "!". Если строка "20!", то 20 будет добавлен в массив и цикл завершится
str = prompt((err?err + '\n\n' : '') + //если есть ошибка, показываем её
"Введите элемент массива, завершение ввода - символ '!':");
err = ''; // обнуляем ошибку
var num = parseInt(str);
// тут обрабатываем ошибки
if(str === null) { // если нажата отмена. По идее лучше бы завершить ввод, но мы ждём "!"
// Eсли хотите завершить, замените "continue" на "break"
err = 'Ошибка: Вы отменили ввод!'; // записываем ошибку
str = ''; // иначе у null нет свойства indexOf и скрипт авершится с ошибкой без результатов.
continue; // обрываем "круг" цикла
} else
if(!str) { // если пользователь ничего не ввёл
err = 'Ошибка: Вы ничего не ввели!'; // записываем ошибку
continue; // обрываем "круг" цикла
} else
if(isNaN(num)) { //если не число
err = 'Ошибка: "' + str + '" не является числом!'; // записываем ошибку
continue; // обрываем "круг" цикла
}
ret.push(num); // если всё нормально, то записываем в массив
}
return ret;
}
function is_symmetrical(arr) { // функция проверки симметричности
var len = arr.length; // получаем длину массива
if(len <= 1) return false; // если в массиве меньше 2 элементов, нам проверять нечего
var to = Math.floor(len/2); // получаем половину длины
var arr_1 = arr.slice(0, to).reverse(); // отрезаем первую половину от массива и разворачиваем его наоборот. Был 123 станет 321
if(len%2) to++; // если длина не кратна двум, то пропускаем средний элемент
var arr_2 = arr.slice(to); // отрезаем вторую половину
return !(arr_1<arr_2 || arr_2<arr_1); // возвращаем результат проверки
}
//демо
var user_arr = get_array_from_user(); // получаем массив пользователя
var symmetrical = is_symmetrical(user_arr); // проверяем симметричность
alert('Пользователь ввёл: ' + user_arr + '\nМассив симметричен: ' + (symmetrical?'Да':'Нет')); // выводим результат
|
|
28.09.2013, 19:19
|
Аспирант
|
|
Регистрация: 25.09.2013
Сообщений: 44
|
|
Спасибо огромное!!!
Последний раз редактировалось Anna77, 11.10.2013 в 12:34.
|
|
28.09.2013, 19:22
|
Аспирант
|
|
Регистрация: 25.09.2013
Сообщений: 44
|
|
Благодарю за ценную и исчерпывающую информацию!!!Четко и доступно!
Последний раз редактировалось Anna77, 11.10.2013 в 12:35.
|
|
|
|