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; } }