Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с задачей пожалуйста. (https://javascript.ru/forum/misc/43224-pomogite-s-zadachejj-pozhalujjsta.html)

YorikoSC 27.11.2013 14:39

Помогите с задачей пожалуйста.
 
Есть задача, условием которой является вывод определенного alert при определенных условиях.
1) При условии цвет не красный\зеленый, большой, круглый выводить 1 alert.
2) При условии цвет зеленый,большой или маленький, квадратный соответственно 2 alert.
Проблема - при любом условии выводится 2 alert.

//параметры
 var color = prompt('Цвет','синий, красный или зеленый?');
  var size = prompt('Размер','большой или маленький?');
  var form = prompt('Форма','круглый или квадратный?');
 //условие для 1 alert
	if ((color = !'зеленый')&&(color = !'красный')&&(size = 'большой')&&(form = 'круглый'))
		{
		alert('Что-то синее и большое');
		}
//условие для 2 alert
	else if ((color ='зеленый')&&(form = 'квадратный'))
		{
		alert('Наверное вы подумали про яблоко, но почему квадратное?');
		}


Объясните нубу где мой косяк.

рони 27.11.2013 14:54

Цитата:

Сообщение от YorikoSC
size = 'большой'

Цитата:

Сообщение от YorikoSC
form = 'круглый'

Цитата:

Сообщение от YorikoSC
color ='зеленый'

Цитата:

Сообщение от YorikoSC
form = 'квадратный'

вота :-?

YorikoSC 27.11.2013 14:56

Цитата:

Сообщение от рони (Сообщение 283125)
вота :-?

А по-прозрачней можно пожалуйста?
Это к тому, что они должны быть на латинице написаны или что?

рони 27.11.2013 15:02

YorikoSC,
смотрите внимательнее медитируйте и наступит просветление -- почему
Цитата:

Сообщение от YorikoSC
color = !'зеленый'

это не гуд и
Цитата:

Сообщение от YorikoSC
color ='зеленый'

не есть хорошо?

ksa 27.11.2013 15:02

Цитата:

Сообщение от YorikoSC
А по-прозрачней можно пожалуйста?

Достаточно почитать букварь... :D
http://javascript.ru/comparison-operators

Цитата:

Сообщение от YorikoSC
color = !'зеленый'

Это так же фигня полная...

рони 27.11.2013 15:04

ksa,
точно :cray:
Цитата:

Сообщение от ksa
Это так же фигня полная...


YorikoSC 27.11.2013 15:05

Спасибо большое.

ksa 27.11.2013 15:05

Цитата:

Сообщение от YorikoSC
А по-прозрачней можно пожалуйста?

Смотри что ты написал...

var color='красный';
alert(color = !'зеленый');
alert(color);

YorikoSC 27.11.2013 15:08

Цитата:

Сообщение от ksa (Сообщение 283139)
Смотри что ты написал...

var color='красный';
alert(color = !'зеленый');
alert(color);

Поправил уже:

var color = prompt('Цвет','синий, красный или зеленый?');
  var size = prompt('Размер','большой или маленький?');
  var form = prompt('Форма','круглый или квадратный?');
 
	if ((color != "зеленый")&&(color != "красный")&&(size = "большой")&&(form = "круглый"))
		{
		alert('Что-то синее и большое');
		}
	else if ((color = "зеленый")&&(form = "квадратный"))
		{
		alert('Наверное вы подумали про яблоко, но почему квадратное?');
		}

Теперь все работает, как должно. Хотя и этот вариант маразматичен, в плане задания параметров.

ksa 27.11.2013 15:09

Цитата:

Сообщение от YorikoSC
Теперь все работает, как должно

Ты ошибаешся...

Цитата:

Сообщение от YorikoSC
size = "большой"
form = "круглый"

Не являются сравнениями... :nono:

YorikoSC 27.11.2013 15:15

Цитата:

Сообщение от ksa (Сообщение 283144)
Ты ошибаешся...


Не являются сравнениями... :nono:

Совсем поправил:
var color = prompt('Цвет: синий, красный или зеленый?','');
  var size = prompt('Размер: большой или маленький?','');
  var form = prompt('Форма: круглый или квадратный?','');
 
	if ((color != "зеленый")&&(color != "красный")&&(size = "большой")&&(form = "круглый"))
		{
		alert('Что-то синее и большое');
		}
	else if ((color = "зеленый")&&(form = "квадратный"))
		{
		alert('Наверное вы подумали про яблоко, но почему квадратное?');
		}

YorikoSC 27.11.2013 15:17

Цитата:

Сообщение от Rise (Сообщение 283145)
YorikoSC, про маленького то забыл...

Где именно?
Если для 2 alert то условию задачи не важен размер.

YorikoSC 27.11.2013 15:26

Цитата:

Сообщение от Rise (Сообщение 283151)
Пора уже понимать что ты пишешь...

Да, извини, я не верно донес условия задачи, в условии 2 alert вообще не нужно было указывать размеры.

ksa 27.11.2013 16:08

Цитата:

Сообщение от YorikoSC
if ((color != "зеленый")&&(color != "красный")&&(size = "большой")&&(form = "круглый"))

Не верно.
Нужно так

if ((color != "зеленый")&&(color != "красный")&&(size == "большой")&&(form == "круглый"))

В другом условии такоя же фигня.

YorikoSC 27.11.2013 16:19

Цитата:

Сообщение от ksa (Сообщение 283157)
Не верно.
Нужно так

if ((color != "зеленый")&&(color != "красный")&&(size == "большой")&&(form == "круглый"))

В другом условии такоя же фигня.

На самом деле я ещё раз поменял и дописал код:

var color = prompt('Цвет: синий, красный или зеленый?','');
  var size = prompt('Размер: большой или маленький?','');
  var form = prompt('Форма: круглый или квадратный?','');
 
	if ((color == 'синий')&&(color !== "зеленый")&&(color !== "красный")&&(size == "большой")&&(form == "круглый"))
		{
			alert('Что-то синее и большое');
		}
	else if ((color == "зеленый")&&(size == 'большой'||'маленький')&&(form == "квадратный"))
		{
			alert('Наверное вы подумали про яблоко, но почему квадратное?');
		}
		else
		{
			alert('Одно или несколько условий заданы неверно');
		}


Просто, если писать "=" то в 1 варианте при вводе даже желтого цвета, огромного размера, и плоской формы, он выдаст 1 alert.
Так же и для 2 alert.
Я конечно могу заблуждаться - мой опыт в JS всего неделя.

ksa 27.11.2013 16:25

Цитата:

Сообщение от YorikoSC
На самом деле я ещё раз поменял и дописал код

Ты хитрый! :D

YorikoSC 27.11.2013 16:26

Цитата:

Сообщение от ksa (Сообщение 283161)
Ты хитрый! :D

Я не хитрый:) я просто учусь:)

lord2kim 29.11.2013 14:14

Цитата:

Сообщение от YorikoSC (Сообщение 283159)
...&&(size == 'большой'||'маленький')&&...

учти что так работать будет не совсем корректно...попробуй ввести любое другое значение вместо "большой"/"маленький"...
нужно каждый вариант обрабатывать отдельно:
...&&(size == 'большой' || size == 'маленький')&&...

YorikoSC 29.11.2013 18:06

Цитата:

Сообщение от lord2kim (Сообщение 283504)
учти что так работать будет не совсем корректно...попробуй ввести любое другое значение вместо "большой"/"маленький"...
нужно каждый вариант обрабатывать отдельно:
...&&(size == 'большой' || size == 'маленький')&&...

Спасибо, поправлю.

YorikoSC 01.12.2013 15:07

Народ, прошу помощи ещё раз - я не от себя лично а от всей нашей группы:)
В общем мы не можем понять, что от нас хотят:
var i = 1;
var j;
var person = {
firstname: "John",
lastname: "Doe",
id: 5566
};
var carname = new String;
var x = new Number;
var y = new Boolean;
var cars = new Array;
var anything = new Object;


После объявления
переменных по очереди напишите название переменной и поставьте точку,
познакомьтесь в появившейся контекстной справке со свойствами и методами
доступными при работе с переменными. Обратите внимание, что при выборе метода
надо потом еще ставить скобки, например: x.toString(). Если метод принимает аргументы,
то они указываются в скобках, например: carname.replace("ку","ре") – заменить «ку» на
«ре» в текущем значении переменной carname.

Буду весьма признателен всем откликнувшимся:)

lord2kim 01.12.2013 16:03

YorikoSC, вам предлагается ознакомится какие имеются свойства и методы у каждого типа переменных в JavaScript...

YorikoSC 01.12.2013 18:02

Все равно не очень понятно, но это ладно головняком стало другое задание:
<!DOCTYPE html>
<html>
<body>
<p>Задание 1 вариант 4: Написать скрипт, в котором будет предлагаться ввести текст размером не
менее случайного сгенерированного программно числа (генерировать в диапазоне от 1
до 45) символов. Все четные символы перевести в верхний регистр, все нечетные в
нижний регистр. Вывести в сообщении полученный результат.</p>
<p id="условие">Нажмите на кнопку, чтобы сгенерировать число.</p>
<p id="текст"></p>
<button onclick=Generate()>ГСЧ</button>
<button onclick=Text()>Нажмите для ввода.</button>
<script>
function Generate(){
document.getElementById("условие").innerHTML = Math.floor(Math.random() * 44)+1;
document.getElementById("текст").innerHTML = "Введите текст длинной в число."
}
function Text(){
var x = prompt("Введите текст:", "");
if (x = Generate()){
alert("Ура,правильно!")
}
}
</script>
</body>
</html>


Естественно, что при вводе текстка происходит не проверка а генерация нового числа:(
А как ещё и символы разбить на ToUpperCase, ToLowerCase я вообще понять не могу, хотя гугл уже ничего нового мне не говорит:(
Минусы вечерней формы обучения - нам ни фига не объясняют((.

lord2kim 01.12.2013 18:37

YorikoSC, предыдущее задание нельзя назвать заданием...чисто ознакомление...

с текущим...делайте все действия в одной функции
сгенерируйте случайно число; предлагайте вводить текст пока его длина не будет достигнута величины "random-но" сгенерированного числа; как только длина текста достигнута с помощью метода charAt() в цикле получайте i-ый символ строки -> если это четный символ, т.е. остаток от деления на 2 = 0 (number % 2) - значит число четное, иначе не четное; требуемый результат собирайте в новую переменную (строку) и выводите результат на экран...

YorikoSC 01.12.2013 19:35

function Generate(){
		document.getElementById("условие").innerHTML = Math.floor(Math.random() * 44)+1;
		document.getElementById("текст").innerHTML = "Введите текст длинной в число.";
	
		var x = prompt("Введите текст длинной в сгенерированное число","");
		
		while ("x".lenght = "условие")
		{
		x = prompt("Введите текст длинной в сгенерированное число","");
		}
		
}

Как приравнять к рандомному числу корректно? Из того что я написал он не проверяет:(

lord2kim 01.12.2013 20:06

Цитата:

Сообщение от YorikoSC (Сообщение 283800)
function Generate(){
		document.getElementById("условие").innerHTML = Math.floor(Math.random() * 44)+1;
		document.getElementById("текст").innerHTML = "Введите текст длинной в число.";
	
		var x = prompt("Введите текст длинной в сгенерированное число","");
		
		while ("x".lenght = "условие")
		{
		x = prompt("Введите текст длинной в сгенерированное число","");
		}
		
}

Как приравнять к рандомному числу корректно? Из того что я написал он не проверяет:(

во-первых, свойство называется не lenght, а length; во-вторых, рандомное сгенеренное число записывайте в переменную, иначе вы никогда не проверите длину вводимой строки на равенство числу
function Generate() {
	var random = Math.floor(Math.random() * 44)+1, x;
	
	document.getElementById("условие").innerHTML = random;
	document.getElementById("текст").innerHTML = "Введите текст длинной не менее чем "+random+" символов.";
	
	//alert(random);
	
	do {
		x = prompt("Введите текст длинной в сгенерированное число ("+random+")","");
	}
	while (x.length < random)
}
Generate();

YorikoSC 01.12.2013 20:07

Огромное вам спасибо:)

YorikoSC 01.12.2013 22:25

function Generate(){
		var random = Math.floor(Math.random() * 44)+1, x;
	
		document.getElementById("условие").innerHTML = random;
		document.getElementById("текст").innerHTML = "Введите текст длинной в "+random+" символов.";
	
	do
		{
			x = prompt("Введите текст длинной в сгенерированное число","");
		}
	while
		(x.length != random);
		var answer = x;
		{
		alert(x.charAt(i%2=0).toUpperCase());
		}
}
		
	Generate();


Ну не работает оно:(
Не понимаю я как правильно применить((

Попробовал переписать:(
function Generate(){
		var random = Math.floor(Math.random() * 44)+1, x;
	
		document.getElementById("условие").innerHTML = random;
		document.getElementById("текст").innerHTML = "Введите текст длинной в "+random+" символов.";
	
	do
		{
			x = prompt("Введите текст длинной в сгенерированное число","");
		}
	while
		(x.length != random);
		var answer = x.charAt();
		if (charAt(i%2=0))
		{
		return toUpperCase;
		}
		else
		{
		return toLowerCase;
		{
		alert("answer");
		}
}
		
	Generate();


Результат тот же:(

lord2kim 01.12.2013 22:41

YorikoSC, откуда взялись скобки?
{
        alert(x.charAt(i%2=0).toUpperCase());
        }


и естественно нужно обрабатывать (не)четность символов в отдельно цикле...

function Generate() {
	var random = Math.floor(Math.random() * 44)+1, x, final_str = "";
	
	document.getElementById("условие").innerHTML = random;
	document.getElementById("текст").innerHTML = "Введите текст длинной не менее чем "+random+" символов.";
	
	//alert(random);
	
	do {
		x = prompt("Введите текст длинной в сгенерированное число ("+random+")","");
	}
	while (x.length < random)
	
	for (i=0; i < x.length; i++) { // в цикле перебираем всю полученную строку и собираем новую на основе поставленной задачи
		if (i%2) { // если номер очередного символа строки делится на 2 с остатком - нечетный
			final_str += x.charAt(i).toUpperCase();
		} else { // иначе четный
			final_str += x.charAt(i).toLowerCase();
		}
	}
	
	alert(final_str);
}
Generate();

YorikoSC 01.12.2013 22:59

Цитата:

Сообщение от lord2kim (Сообщение 283840)
YorikoSC, откуда взялись скобки?
{
        alert(x.charAt(i%2=0).toUpperCase());
        }


и естественно нужно обрабатывать (не)четность символов в отдельно цикле...

function Generate() {
	var random = Math.floor(Math.random() * 44)+1, x, final_str = "";
	
	document.getElementById("условие").innerHTML = random;
	document.getElementById("текст").innerHTML = "Введите текст длинной не менее чем "+random+" символов.";
	
	//alert(random);
	
	do {
		x = prompt("Введите текст длинной в сгенерированное число ("+random+")","");
	}
	while (x.length < random)
	
	for (i=0; i < x.length; i++) { // в цикле перебираем всю полученную строку и собираем новую на основе поставленной задачи
		if (i%2) { // если номер очередного символа строки делится на 2 с остатком - нечетный
			final_str += x.charAt(i).toUpperCase();
		} else { // иначе четный
			final_str += x.charAt(i).toLowerCase();
		}
	}
	
	alert(final_str);
}
Generate();

Исправил чуток ваш код:

function Generate(){
		var random = Math.floor(Math.random() * 44)+1, x;
		var answer = new String()//добавил новое значение - без него ругалось.
		document.getElementById("условие").innerHTML = random;
		document.getElementById("текст").innerHTML = "Введите текст длинной в "+random+" символов.";
	
	do
		{
			x = prompt("Введите текст длинной в сгенерированное число","");
			//отсюда убрал alert - он стопорил процесс, в любом случае.
		}
	while
		(x.length != random);//поставил != т.к. при < большее кол-во символов пропускалось, как верное
		
		for (i=0; i< x.length; i++)
			{//перебор полученой строки.
				if (i%2) //проверка четности, если делится на 2 без остатка.
				{
					answer +=x.charAt(i).toUpperCase();
				}
				else //если не делится.
				{
					answer +=x.charAt(i).toLowerCase();
				}
		}
		
		alert(answer);
}
		
	Generate();


В общем большое спасибо:) без вас бы кумекал половину ночи:)

lord2kim 01.12.2013 23:19

YorikoSC,
Цитата:

Сообщение от YorikoSC (Сообщение 283846)
while
		(x.length != random);//поставил != т.к. при < большее кол-во символов пропускалось, как верное

так у вас в задании написано...

Цитата:

Сообщение от YorikoSC (Сообщение 283789)
<p>Задание 1 вариант 4: Написать скрипт, в котором будет предлагаться ввести текст размером не
менее случайного сгенерированного программно числа (генерировать в диапазоне от 1 до 45) символов...

Цитата:

Сообщение от YorikoSC (Сообщение 283789)
if (i%2) //проверка четности, если делится на 2 без остатка.

"если делится на 2 с остатком..."

Цитата:

Сообщение от YorikoSC (Сообщение 283789)
var answer = new String()//добавил новое значение - без него ругалось.
		document.getElementById("условие").innerHTML = random;
		document.getElementById("текст").innerHTML = "Введите текст длинной в "+random+" символов.";

; не забывайте в конце строки и не давайте элементам значения id и name атрибутов кирилицей...


Часовой пояс GMT +3, время: 04:38.