Ayuda en C++

Iniciado por INFERNOz, 26 Octubre 2014, 15:42 PM

0 Miembros y 1 Visitante están viendo este tema.

INFERNOz

Disculpen la molestia pero para redondear un número a entero por ejemplo
si es 2678 que me lo redondee a 2700 o si es 2648 que me lo redondee a 2600
que codigo se emplea? :(

Si me podrían ayudar con ese condigo les agradecería mucho
es para un examen 


Saludos ;D

engel lex

#1
con modulo (%) podrías hacer algo como

restas el modulo al numero (eso lo dejará en 1000, 2000, 3000... etc)

si el modulo de mil es mayor o igual a quinientos, entonces sumas mil (redondea al mil proximo)

algo como

NUMERO = 3456
RESULTADO = NUMERO - (NUMERO modulo de 1000)
si:  (NUMERO modulo de 1000) es mayor o igual a 500
    sumar 1000 a RESULTADO


has el código no es difícil ;)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

ShadowA7X

Sólo ve que parámetros quieres seguir (depende que tanto quieras redondear un número).

Si tu enfoque sólo va a los primeros 2 dígitos (de derecha a izquierda obviamente), enfocate en el tercer dígito (que es el que se terminará alterando o no por la aproximación).

algo como:

char num_en_caracteres[10];
int num=2437;
int cant_dig;

num_en_caracteres[10]=atoi(num) //Atoi transforma un numero a cadena.
cant_dig=strlen(num_en_caracteres); //Cuenta la cantidad de digitos que tiene el numero ingresado.

//Ya que la variable num tiene el numero 2437 que son 4 digitos, la variable cant_dig tendra el valor 4.

Ahora ocupas un for para mover bien los indices y dentro de él ocupas un if que tenga la condición (considerando sólo los dos primeros digitos de num) si el numero es mayor o menor a cincuenta) sume uno a al tercer digito y deje los primeros dos en 0 o simplemente que deje los primeros dos en cero (dependiendo de si era mayor o no a 50).

Eso, Te lo dejé muy detallado. Ahora sólo queda poner de tu parte para hacer el código y lo adaptes a lo que quieres.

Saludos.



rir3760

Cita de: ShadowA7X en 26 Octubre 2014, 21:47 PMalgo como:

char num_en_caracteres[10];
int num=2437;
int cant_dig;

num_en_caracteres[10]=atoi(num) //Atoi transforma un numero a cadena.
No funcionara porque los indices validos del array son [0, 9], el operador de asignación "=" no puede utilizarse con arrays y porque el valor de retorno de la función atoi es de tipo int.

Si lo que quieres es almacenar cada uno de los dígitos del numero en el array (como los caracteres '0' .. '9') puedes utilizar la función sprintf, de esta forma:
sprintf(num_en_caracteres, "%d", num);
Con el detalle de ser una forma mas propia de C que de C++, con este ultimo lo primero que se me ocurre es utilizar las clases string y stringstream.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language