Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Калькулятор во flash

#11 Renovatio

Renovatio
    Topic Starter
  • Пользователь
  • 183 сообщений
  • Репутация: 4
0

Отправлено 11 Июль 2009 - 23:22

Это само собой вытекает.
Если ты не иницыализируешь Переменную numBer - то даже если она имеет чисовой тип, она не имеет начального значения. То есть undifened.

A разве я не присвоил ей значение 0???
tablo = 0;//переменная динамического поля
numBer = 0;

Я спросил это к тому, что использовать глобальные переменные это ужасный тон. Потому что не всегда увидишь, где меняются значения переменных. Что же нам нельзя возвращать значение во временную память?


Вы относите к глобальным те переменные, которые объявлены вне тела функци??? Потому что в ActionScript есть объект _global, который обладает глобальной видимостью и его видно на всех временных шкалах. В него можно запихнуть все что угодно.

А вообще, спасибо за комментирование, хоть у меня и возникает еще больше вопросов по ходу. :)
  • 0

#12 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Июль 2009 - 11:21

Renovatio, вот кстати что ещё интересного нашёл
Flash: isNaN( undifined ) в разных версиях плеера

A разве я не присвоил ей значение 0???

Присвоили, но это уже позже. Я отталкиваюсь от первоначального вопроса.

Вы относите к глобальным те переменные, которые объявлены вне тела функци???

Это частное выражение глобальных переменных. Естественно если они объявлены вне функций, то они глобальны во всей видимости программы. А то что в AS есть объект _global, так нам он не нужен по сути.

И теперь мой вопрос: Сообщение #5 ваше, код приведённый в нём рабочий? Просто я поглядел на действия кнопок 1 2 3 4 и т.д.
Там в теле функции(т.е. в локальной видимости) определяется переменнакя num, а затем вызывается функция MyAdd(). Получается, что переменная num видна во внутренней функции и её не надо передавать по параметру? Если да, то Flash это ужас...

Кстати вот что ещё нашёл по поводу приведения к числу(и всё таки оно есть)
Number(undefined)=NaN
Number(null)=0
Number(true)=1
Number(false)=0
Number(NaN)=NaN
Number("")= 0
Number("5")=5
Number("5a")=NaN

А вот что по функции isNaN()
isNaN()
isNaN(0/0)=true
isNaN(5/0)=false
isNaN(Math.sqrt(-1))=true
isNaN(Math.asin(2))=true
isNaN("5")=false
isNaN("5a")=true

Кстати у меня кроюстся смутные сомнения, что выдаст
trace(isNaN(0));
Возможно, что true, тогда все вопросы разом должны отпасть.
  • 0

#13 Renovatio

Renovatio
    Topic Starter
  • Пользователь
  • 183 сообщений
  • Репутация: 4

Отправлено 12 Июль 2009 - 11:44

Как я и говорил, код не совсем рабочий. В нем не обрабатывается умножение и деление, но это к моменту окончания написания кода было не столь существенно, потому что я нашел полностью рабочий калькулятор на flasher.ru. Вот его код:
// Объявляем переменные
var tablo = 0;
var num = 0;
var tochka = true;
var Numbers = 0;
var n = 1;
var Str = "";
var memory = null;
var operation = null;
// Отключаем кнопку "равно"
But_RAVNO.enabled = false;
// Код для кнопки очистки экрана
But_CLEAR.onPress = function() {
	tablo = 0;
	num = 0;
	tochka = true;
	Numbers = 0;
	n = 1;
	Str = "";
	But_RAVNO.enabled = false;
	block2(true);
	block(true);
	block3(true);
};
// Обработчики нажатия кнопок с цифрами
But_0.onPress = function() {
	num = 0;
	MyAdd();
};
But_1.onPress = function() {
	num = 1;
	MyAdd();
};
But_2.onPress = function() {
	num = 2;
	MyAdd();
};
But_3.onPress = function() {
	num = 3;
	MyAdd();
};
But_4.onPress = function() {
	num = 4;
	MyAdd();
};
But_5.onPress = function() {
	num = 5;
	MyAdd();
};
But_6.onPress = function() {
	num = 6;
	MyAdd();
};
But_7.onPress = function() {
	num = 7;
	MyAdd();
};
But_8.onPress = function() {
	num = 8;
	MyAdd();
};
But_9.onPress = function() {
	num = 9;
	MyAdd();
};
// Функция, отвечающая за добавление десятичной точки
But_TOCHKA.onPress = function() {
	if (tochka) {
		tochka = false;
		Str += ".";
	}
};
// Код для кнопки изменения знака
But_ZNAK.onPress = function() {
	if (Str != 0 && Str != "") {
		Numbers *= -1;
		if (Str.substring(0, 1) != "-") {
			Str = "-"+Str;
		} else {
			Str = Str.substring(1);
		}
		if (Str.length<17) {
			tablo = Str;
		} else {
			tablo = Numbers;
		}
	}
};
// Функция, формирующая по нажатиям кнопок операнды 
function MyAdd() {
	if (tochka) {
		Numbers = Numbers*10+num;
	} else {
		Numbers += num/Math.pow(10, n);
		n++;
	}
	if (Str != 0) {
		Str = Str+num;
	} else {
		Str = String(num);
	}
	if (Str.length<17) {
		tablo = Str;
	} else {
		tablo = Numbers;
	}
}
// Обработчики события нажатия кнопок арифметических операций
But_PLUS.onPress = function() {
	calc("plus");
};
But_MINUS.onPress = function() {
	calc("minus");
};
But_UMN.onPress = function() {
	calc("umn");
};
But_DEL.onPress = function() {
	calc("del");
};
But_STEPEN.onPress = function() {
	calc("stepen");
};
// Функция, вызываемая при нажатии кнопки арифметической операции
function calc(operat) {
	memory = Numbers;
	Numbers = 0;
	Str = "";
	operation = operat;
	block(false);
	But_RAVNO.enabled = true;
	block2(true);
	block3(false);
}
// Код, производящий вычисления при нажатии кнопки "равно"
But_RAVNO.onPress = function() {
	var result = null;
	if (operation == "plus") {
		result = memory+Numbers;
	}
	if (operation == "minus") {
		result = memory-Numbers;
	}
	if (operation == "umn") {
		result = memory*Numbers;
	}
	if (operation == "del") {
		result = memory/Numbers;
	}
	if (operation == "stepen") {
		result = Math.pow(memory, Numbers);
	}
	Numbers = result;
	Str = result;
	tablo = result;
	block(true);
	block2(false);
	block3(true);
	But_ravno.enabled = false;
};
// Функция, включающая или выключающая кнопки операций
function block(par) {
	But_PLUS.enabled = par;
	But_UMN.enabled = par;
	But_MINUS.enabled = par;
	But_DEL.enabled = par;
	But_STEPEN.enabled = par;
}
// Функция, отвечающая за активность кнопок с цифрами
function block2(par) {
	for (var i = 0; i<=9; i++) {
		eval("But_"+i).enabled = par;
	}
	But_TOCHKA.enabled = par;
	But_E.enabled = par;
	But_PI.enabled = par;
}
// Обработчики нажатия кнопок математических функций
But_SIN.onPress = function() {
	func("sin");
};
But_COS.onRelease = function() {
	func("cos");
};
But_TAN.onPress = function() {
	func("tan");
};
But_LN.onPress = function() {
	func("ln");
};
But_ASIN.onPress = function() {
	func("asin");
};
But_ACOS.onPress = function() {
	func("acos");
};
But_SQRT.onPress = function() {
	func("sqrt");
};
But_ROUN.onPress = function() {
	func("roun");
};
// Функция, отвечающая за вычисления при нажатии кнопки математической функции
function func(par) {
	var result = null;
	if (par == "sin") {
		result = Math.sin(Numbers/180*Math.PI);
	}
	if (par == "cos") {
		result = Math.cos(Numbers/180*Math.PI);
	}
	if (par == "tan") {
		result = Math.tan(Numbers/180*Math.PI);
	}
	if (par == "ln") {
		result = Math.log(Numbers);
	}
	if (par == "asin") {
		result = Math.asin(Numbers)/Math.PI*180;
	}
	if (par == "acos") {
		result = Math.acos(Numbers)/Math.PI*180;
	}
	if (par == "sqrt") {
		result = Math.sqrt(Numbers);
	}
	if (par == "roun") {
		result = Math.round(Numbers);
	}
	tablo = result;
	Numbers = result;
	Str = String(result);
}
// Функция, отвечающая за активность кнопок математических функций
function block3(par) {
	But_SIN.enabled = par;
	But_COS.enabled = par;
	But_TAN.enabled = par;
	But_LN.enabled = par;
	But_ASIN.enabled = par;
	But_ACOS.enabled = par;
	But_SQRT.enabled = par;
	But_ROUN.enabled = par;
}
// Обработчики нажатия кнопок математических констант
But_PI.onPress = function() {
	Numbers = Math.PI;
	Str = String(Math.PI);
	block2(false);
	tablo = Math.PI;
};
But_E.onPress = function() {
	Numbers = Math.E;
	Str = String(Math.E);
	block2(false);
	tablo = Math.E;
};

По вашему последнему вопросу:

Код
trace(isNaN(0));

Возможно, что true, тогда все вопросы разом должны отпасть.

В Output выводит false.
  • 0

#14 Sharap

Sharap
  • Пользователь
  • 1 сообщений
  • Репутация: 0

Отправлено 22 Апрель 2012 - 19:24

Помогите пожалуйста с кодом.....не могу догнать как сделать так, чтобы вместо цифры 10 выводилась А, вместо 11 - B, вместо 12 - C, 13 - D, 14 - E, 15 - F. За ранее благодарен.

var R;
var N = 4;
var Summ = 0;
//=======
for (R=1; R<=N; R++) {
if (R>1) {
TB1.duplicateMovieClip("TB"+R, 100+R, {_x:TB1._x-70*(R-1)});
NM1.duplicateMovieClip("NM"+R, 200+R, {_x:NM1._x-70*(R-1)});
}
this["TB"+R].Up._visible = false;
this["TB"+R].Down._visible = true;
this["TB"+R].Num = this["NM"+R].Num=Math.pow(2, R-1);
this["TB"+R].onPress = function() {
trace(this.Up._visible+" "+not (this.Up._visible));
this.Up._visible = not (this.Up._visible);
this.Down._visible = not (this.Down._visible);
SetSumm();
};
}
SetSumm();
//=============================
function SetSumm() {
Summ = 0;
for (R=1; R<=N; R++) {
if (this["TB"+R].Up._visible == true) {
Summ += this["TB"+R].Num;
}
}
}

  • 0


Оформление форума – IPBSkins.ru