public void CompararValor(EscritorC escritor, string variable) { //(!this.EsDeSalidaOEntradaSalida); string diferencia = "AUX" + variable; string varPrecision = "PR" + variable; string iterador = "IT" + variable; switch (Definicion.Tipo) { case Tipo.UInt8: case Tipo.UInt16: case Tipo.UInt32: case Tipo.UInt64: case Tipo.Int8: case Tipo.Int16: case Tipo.Int32: case Tipo.Int64: escritor.If(variable + " != " + Valor); escritor.PrintfValorDistintoConDiferencia(variable, Valor); escritor.WriteLine("cantErrores++;"); escritor.FinIf(); break; case Tipo.Char: escritor.If(variable + " != " + "'" + Valor + "'"); escritor.PrintfValorDistintoChar(variable, Valor); escritor.WriteLine("cantErrores++;"); escritor.FinIf(); break; case Tipo.Booleano: escritor.If("(" + variable + " == " + "0 && " + Valor + "!=0)||(" + variable + " != " + "0 && " + Valor + "==0)"); escritor.PrintfValorDistinto(variable, Valor); escritor.WriteLine("cantErrores++;"); escritor.FinIf(); break; case Tipo.Float32: // Realiza la resta entre ambos operandos y si la misma dio un resultado menor que // 10^precision entonces los considera iguales MA.EliminarAsteriscos(ref diferencia); MA.EliminarCorchetes(ref diferencia); MA.EliminarAsteriscos(ref varPrecision); MA.EliminarCorchetes(ref varPrecision); escritor.WriteLine("float " + diferencia + " = (" + variable + ") - (" + Valor + ");"); escritor.WriteLine(diferencia + " = (" + diferencia + " >= 0) ? " + diferencia + " : -" + diferencia + ";"); escritor.WriteLine("float " + varPrecision + " = pow((float)10, -" + Definicion.Precision + ");"); escritor.If(diferencia + " >= " + varPrecision); escritor.PrintfValorDistintoFloatConDiferencia(variable, Valor, diferencia); escritor.WriteLine("cantErrores++;"); escritor.FinIf(); break; case Tipo.Float64: MA.EliminarAsteriscos(ref diferencia); MA.EliminarCorchetes(ref diferencia); MA.EliminarAsteriscos(ref varPrecision); MA.EliminarCorchetes(ref varPrecision); escritor.WriteLine("float " + diferencia + " = (" + variable + ") - (" + Valor + ");"); escritor.WriteLine(diferencia + " = (" + diferencia + " >= 0) ? " + diferencia + " : -" + diferencia + ";"); escritor.WriteLine("double " + varPrecision + " = pow((double)10, -" + Definicion.Precision + ");"); escritor.If(diferencia + " >= " + varPrecision); escritor.PrintfValorDistintoFloatConDiferencia(variable, Valor, diferencia); escritor.WriteLine("cantErrores++;"); escritor.FinIf(); break; case Tipo.CadenaC: escritor.WriteLine("char " + diferencia + "[] = \"" + Valor + "\";"); escritor.WriteLine("int " + iterador + ";"); escritor.For(iterador + "=0", diferencia + "[" + iterador + "]!=0 && " + variable + "[" + iterador + "]!=0", iterador + "++"); escritor.If(variable + "[" + iterador + "] != " + diferencia + "[" + iterador + "]"); escritor.PrintfValorDeStringDistintos(variable, iterador, diferencia); escritor.WriteLine("cantErrores++;"); escritor.FinIf(); escritor.FinFor(); break; case Tipo.CadenaPascal: break; } }