Показать сообщение отдельно
  #18 (permalink)  
Старый 28.09.2013, 02:51
Интересующийся
Отправить личное сообщение для user222 Посмотреть профиль Найти все сообщения от user222
 
Регистрация: 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?'Да':'Нет')); // выводим результат
Ответить с цитированием