Оцените решенную задачу
Оцените решенную задачу...Она простая, так что не судите строго, только учусь... Дайте дельные советы: как можно упросить код? где сделал ошибки? Спасибо.
/* * Программа должна запрашивать несколько слов, выдавая на экран их характеристику. * Например, «животное, муж. рода, ед. числа., имен. падеж)». * После ввода всех слов, на экран выдается стихотворение, в котором часть слов заменены введенными с клавиатуры словами. */ var name = prompt("Укажите имя существа!"); name = name.toLowerCase(); var pol = prompt("Какой у него род?"); pol = pol.toLowerCase(); var stringLine = "У меня живёт то ли спит то ли я на достоинство стал и в обморок "; var mass = stringLine.split(' '); function addName(){ if (name != false){ massName = name.split();} else throw alert("Вы не ввели имя существа!") ; if (mass != undefined && mass instanceof Array) { return mass.splice(3,0,massName);} else throw alert("Не создан массив!");} function addPol(){ if (pol && typeof(pol) == "string"){ if (pol == "мужской"){ mass.splice(9,0,"здох"); mass.splice(13,0,"ему"); mass.splice(15,0,"он"); mass.splice(20,0,"упал"); } else if (pol == "женский"){ mass.splice(9,0,"здохла"); mass.splice(13,0,"ей"); mass.splice(15,0,"она"); mass.splice(20,0,"упала"); } else throw alert("Вы не правельно ввели род!"); } else {throw alert("Вы не ввели Род!");} return mass; } addName(); addPol(); mass.splice(4,0,","); mass.splice(11,0,","); mass.splice(17,0,"-"); mass.splice(27,0,"."); alert(mass.join(' ')); |
Вы не прав
Вы не правильно ввели род Собственно вот эта конструкция занудна mass.splice(20,0,"упал"); наверно нужно создать три массива(а не один), разбив их по тестовым проверкам, Тогда можно искать текущее слово по индексу в массиве, не задавая жестко позиции проверяемых элементов массива http://javascript.ru/forum/misc/2890...nazvaniyu.html |
Цитата:
|
Цитата:
|
Цитата:
|
1.Плохо понятен алгоритм
2. Нет проверочного массива с тестовыми словами "здox" "eмy" "oн" "yпaл" и спец символами , . - ? 3.Откуда беруться эти цифры ? mass.splice(11,0,","); |
mass.splice(11,0,","); цифры это позиции слов куда они будут внедренны в массив.
|
По логике того как я писал скрипт, я делал всё таким образом -
1) создал массив с стихотворением 2) проверка введённых данных 3) внедрение слов в массив |
Цитата:
|
Да но по мере добавление элементов их будет 20, так как слово "упал" последнее то есть четвёртое..Сейчас сделаю с массивами пример скину код..он более оригинальней чем этот...
|
Вот написал с использованием массивов!
/* * Программа должна запрашивать несколько слов, выдавая на экран их характеристику. * Например, «животное, муж. рода, ед. числа., имен. падеж)». * После ввода всех слов, на экран выдается стихотворение, в котором часть слов заменены введенными с клавиатуры словами. */ var name = prompt("Укажите имя существа!"); name = name.toLowerCase(); var pol = prompt("Какой у него род?"); pol = pol.toLowerCase(); var men = "На полу лежит ,то ли спит то ли здох, я на хвост ему стал, оказалось он спал."; var women = "На полу лежит ,то ли спит то ли здохла, я на хвост её стал, оказалось она спала."; var arrMen = men.split(' '); var arrWomen = women.split(' '); if (name && typeof(name) == "string"){ var arrName = name.split(); if (arrName instanceof Array){} else {document.write("Error not array");}} else {alert("Проблемма с введёнными данными 'Имени существа'");} if (pol && typeof(pol) == "string"){ if (pol == "женский") { var arrPolWomen = pol.split(); if (arrPolWomen instanceof Array){ index = arrWomen.indexOf('лежит'); arrWomen.splice(index+1,0,arrName); delete index; alert(arrWomen.join(" "));} else {document.write("Проблемма с массивом");}} else if (pol == "мужской"){ var arrPolMan = pol.split(); if (arrPolMan instanceof Array){ index = arrMen.indexOf('лежит'); arrMen.splice(index+1,0,arrName); delete index; alert(arrMen.join(" "));} else {document.write("Not PolMan Array ");}} } else {alert("Проблемма с введёнными данными 'Рода'");} |
Цитата:
|
Цитата:
|
Для удобства за пуска и подсветки синтаксиса:
/*
* Программа должна запрашивать несколько слов, выдавая на экран их характеристику.
* Например, «животное, муж. рода, ед. числа., имен. падеж)».
* После ввода всех слов, на экран выдается стихотворение, в котором часть слов заменены введенными с клавиатуры словами.
* Copyright Vitaliy_m
*/
var name = prompt("Укажите имя существа!");
name = name.toLowerCase();
var pol = prompt("Какой у него род?");
pol = pol.toLowerCase();
var men = "На полу лежит ,то ли спит то ли здох, я на хвост ему стал, оказалось он спал.";
var women = "На полу лежит ,то ли спит то ли здохла, я на хвост её стал, оказалось она спала.";
var arrMen = men.split(' ');
var arrWomen = women.split(' ');
if (name && typeof(name) == "string"){
var arrName = name.split();
if (arrName instanceof Array){}
else {document.write("Error not array");}}
else {alert("Проблемма с введёнными данными 'Имени существа'");}
if (pol && typeof(pol) == "string"){
if (pol == "женский") {
var arrPolWomen = pol.split();
if (arrPolWomen instanceof Array){
index = arrWomen.indexOf('лежит');
arrWomen.splice(index+1,0,arrName);
delete index;
alert(arrWomen.join(" "));}
else {document.write("Проблемма с массивом");}}
else if (pol == "мужской"){
var arrPolMan = pol.split();
if (arrPolMan instanceof Array){
index = arrMen.indexOf('лежит');
arrMen.splice(index+1,0,arrName);
delete index;
alert(arrMen.join(" "));}
else {document.write("Not PolMan Array ");}}
}
else {alert("Проблемма с введёнными данными 'Рода'");}
|
И вот кстати, как это на мой взгляд лучше сделать:
var strReplace = '[---%name%---]';
var name = prompt("Укажите имя существа!");
var pol = prompt("Какой у него род?");
var men = "На полу лежит "+strReplace+", то ли спит то ли cдох, я на хвост ему стал, оказалось он спал.";
var women = "На полу лежит "+strReplace+", то ли спит то ли cдохла, я на хвост её стал, оказалось она спала.";
var end = '';
if (!name) {
alert('Вы не ввели имя');
throw new Error;
}
if (!pol) {
alert('Вы не ввели род');
throw new Error;
}
name = name.toLowerCase();
pol = pol.toLowerCase();
switch (pol) {
case 'мужской':
end = men.replace(strReplace, name);
break;
case 'женский':
end = women.replace(strReplace, name);
break;
default:
alert('Вы неправильно ввели род');
throw new Error;
}
alert(end);
Можно конечно ещё подсократить |
| Часовой пояс GMT +3, время: 16:57. |