Miércoles 20 de Noviembre de 2024, 06:21
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Operacion con muchos digitos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Operacion con muchos digitos (Leído 4631 veces)
jokerm
Nuevo Miembro
Mensajes: 8
Operacion con muchos digitos
«
en:
Viernes 25 de Marzo de 2011, 03:14 »
0
Hola a todos, me da gusto tener este foro como apoyo en mi aprendizaje. Posteo un inconveniente que me surge y espero puedan ayudarme.
Lo que quiero hacer es una operacion en la que la computadora me de el numero total de segundos y que de su equivalencia en semanas, pero al realizar la operacion no es correcto el resultado.
Tengo el siguiente codigo
Código: C
#include <stdio.h>
#define seg 3600
void
main
(
)
{
double
prueba
,
semana
;
clrscr
(
)
;
printf
(
"Ingrese no de segundos para convertirlos"
)
;
scanf
(
"%f"
,&
segundo
)
;
prueba
=
24
*
12
*
seg
;
//Aqui hago una simple operacion para determinar los seg en 1 semana, pero el resultado que arroja no es el correcto
semana
=
segundo
/
(
24
*
12
*
seg
)
;
//Aqui hace la operacion mas aparte una division, tampoco es correcto el resultado mostrado
printf
(
"Son %g segundos en 1 semana n"
"Sond %g semanas"
,
prueba
,
semana
)
;
getch
(
)
;
}
Agradesco mucho señlen mi error.
Saludos
Tweet
Amilius
Miembro HIPER activo
Mensajes: 665
Re: Operacion con muchos digitos
«
Respuesta #1 en:
Viernes 25 de Marzo de 2011, 03:40 »
0
No veo por ningún lado la declaración de la variable segundo.
Y es mejor usar constantes con tipo, como "24.0f".
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: Operacion con muchos digitos
«
Respuesta #2 en:
Viernes 25 de Marzo de 2011, 09:03 »
0
No se entiende bien que es lo que quieres hacer.
1. ¿Dado "x" segundos, quieres saber el equivalente en semanas? o
2. ¿Dado "x" semanas quieres saber el equivalente en segundos?
En todo caso tu formula esta mal. ya que una semana no contiene 12 dias.
Las equivalencias son asi:
1 semana = 7 dias
1 dia = 24 horas
1 hora = 60 minutos,
1 minuto = 60 segundos.
Por lo tanto, las formulas quedarian:
1. semanas = segundos / (7.0*24.0*60.0*60.0)
o
2. segundos = semanas*7.0*24.0*60.0*60.0
ademas, para imprimir valores flotantes con printf, se utiliza %f y no %g
Bueno, esos son los errores que note, ojala te sirva.
Saludos
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
jokerm
Nuevo Miembro
Mensajes: 8
Re: Operacion con muchos digitos
«
Respuesta #3 en:
Sábado 26 de Marzo de 2011, 04:23 »
0
Si, perdon esta mal la operacion pero igual, lo que quiero es hacer esta operacion simplemente
float segundos;
segundos = 24*7*3600
printf(¨Tenemos %f¨,segundos);
Pero el valor que imprime no es el correcto, ese es el problema
cltomas
Nuevo Miembro
Mensajes: 20
Re: Operacion con muchos digitos
«
Respuesta #4 en:
Sábado 26 de Marzo de 2011, 20:22 »
0
¿Y en que momento declaraste la variable segundo?... No me entero muy bien, coloca el código que tienes... al primero le falt declarar segundo o segundos ....
jokerm
Nuevo Miembro
Mensajes: 8
Re: Operacion con muchos digitos
«
Respuesta #5 en:
Lunes 28 de Marzo de 2011, 03:51 »
0
HOla, mira este es mi codgio en concreto, lo corro y todo pero el valor que arroja no es correcto.
Uso windows y como compilador uso turbo c 3.5
Código: C
#include <stdio.h>
void
main
(
)
{
float
semana
;
clrscr
(
)
;
semana
=
(
24
*
7
*
3600
)
;
printf
(
"Son %f "
,
semana
)
;
getch
(
)
;
}
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Operacion con muchos digitos
«
Respuesta #6 en:
Lunes 28 de Marzo de 2011, 09:22 »
0
A mí me funciona correctamente bajo Linux.
Código: C
#include <stdio.h>
int
main
(
)
{
float
semana
;
//clrscr();
semana
=
(
24
*
7
*
3600
)
;
printf
(
"Son %f "
,
semana
)
;
//getch();
return
0
;
}
Código: Text
$ gcc -o prueba prueba.c
$ ./prueba
Son 604800.000000
$
Así que el problema no es tu código, sino muy probablemente el compilador. No sé para qué sigues usando un compilador tan obsoleto como Turbo C 3.5.
Fr33k K0mpu73r
cltomas
Nuevo Miembro
Mensajes: 20
Re: Operacion con muchos digitos
«
Respuesta #7 en:
Lunes 28 de Marzo de 2011, 16:43 »
0
A mí también me funciona bien y estoy en Debian Gnu/linux, te recomiendo que utilices gcc para windows, como dice m0skito debe ser problema del compilador... Saludos
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: Operacion con muchos digitos
«
Respuesta #8 en:
Lunes 28 de Marzo de 2011, 19:40 »
0
Bueno, yo agregare a lo que te contestaron una cosa, tu dices que el valor que obtienes no es el correcto, pero nunca mencionas cual es el resultado que obtienes, y cual resultado esperas obtener.
Porque como bien te dijeron antes, el resultado de esa multipilicacion es 604800.00, y ese es el mismo resultado que yo obtengo tambien, utilizando Visual C++ 2010, si ese resultado es el que obtienes, entonces es correcto, ya que nunca mencionas que resultado esperas obtener, ya en mi otro mensaje te pregunte si querias obtener semanas (dando los segundos) o segundos (dando las semanas), quizas esperabas otro resultado, en cuyo caso estas equivocado en cuanto a la manera de obtener el resultado que quieres, pero dado que nunca mencionas cual resultado esperas obtener, al final resulta que estamos adivinando el resultado que crees que deberias obtener
Ahora, si no obtienes como resultado 604800.00 (cosa que dudo, pero no puedo comprobarlo, pues ya no uso Turbo C++), entonces si, muy probablemente se deba a que tu compilador es obsoleto, pero como dije antes, dudo mucho que no te de 604800.00, ya que la manera en que los compiladores almacenna los valores de tipo float no ha cambiado mucho.
Mi codigo, modificado para Visual C++ 2010
Código: C++
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
int
main
(
)
{
float
semana
;
semana
=
(
24
*
7
*
3600
)
;
printf
(
"Son %f "
,semana
)
;
return
0
;
}
Saludos
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
jokerm
Nuevo Miembro
Mensajes: 8
Re: Operacion con muchos digitos
«
Respuesta #9 en:
Martes 29 de Marzo de 2011, 07:55 »
0
SI concluyo que es el compilador, en gnu/linux si me arroja el resultado correcto. Y respecto a porque uso este compilador es debido a que el programa escolar marca usar el dichoso turbo c, y nuestra lucida maestra no sabe usar otro que no sea este, si no corre en turbo c esta mal.
Miren una captura del codigo en turbo c
"img576.imageshack.us/i/dibujoglt.jpg/"
Y la captura de la pantalla al correr el codigo en turbo c
"img695.imageshack.us/i/dibujo2bre.jpg/"
No se porque el resultado no es 604,800
PD: Las imagenes las pongo en link porque no tengo privilegios para ponerlas como se debe
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Operacion con muchos digitos
«
Respuesta #10 en:
Martes 29 de Marzo de 2011, 09:48 »
0
Es problema del compilador, coméntaselo a tu profesora, que eso de compiladores corriendo en MS-DOS emulado pues como que ya no se lleva.
Y por cierto no es
void main()
sino
int main()
, también se lo puedes comentar a tu profesora, y que por favor se ciña a C estándar, que es lo que debe enseñar (díselo de mi parte). Que se compre este libro por favor:
http://cm.bell-labs.com/cm/cs/cbook/
Saludos
Fr33k K0mpu73r
cltomas
Nuevo Miembro
Mensajes: 20
Re: Operacion con muchos digitos
«
Respuesta #11 en:
Martes 29 de Marzo de 2011, 16:30 »
0
Yo te recomiendo este:
Código: C
Como Programar en C .
C
++
Deitel.
Prentice
-
Hall
Esta muy bueno para los principiantes, yo he tirado de muchos libros a la vez, para ir aprendiendo, pero este creo que es uno de los mejores que he leido... El que recomienda m0skito es el mejor sin lugar a dudas, ya que es de los creadores del lenguajes, pero si ya sabes algo de prograamación...... saludos
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Operacion con muchos digitos
«
Respuesta #12 en:
Martes 29 de Marzo de 2011, 16:46 »
0
Hombre su profesora de programación algo tiene que saber de programación, digo yo (aunque nunca se sabe...).
Fr33k K0mpu73r
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: Operacion con muchos digitos
«
Respuesta #13 en:
Martes 29 de Marzo de 2011, 21:13 »
0
Bueno, estuve investigando, y parece que encontre la razon por la cual no te da el resultado correcto, y se debe a la conversion de tipos y al rango de los int en los diferentes compiladores.
En C++, cuando multiplicas enteros, el resultado de la multiplicacion es entero, y cuando multiplicas flotantes, el resultado es flotante.
Entonces, en la linea:
Código: C++
semana
=
(
24
*
7
*
3600
)
;
todos los factores son
enteros
, entonces el resultado de la multiplicacion es entero, pero ademas, en Turbo C++, los enteros (int) son de 16 bits, y el valor de un entero de 16 bits va de − 32,768 a 32,767, y dado que 604800 es una cantidad mucho mayor que la que puede ser almacenada en un entero de 16 bits, ocurre un desborde aritmetico (Arithmetic overflow) y por eso da ese numero. Luego cuando asignas el resultado a semana se convierte de int a float, pero ya es tarde, pues el numero quedo desbordado.
En Visual C++ y los otros compiladores no ocurre esto, debido a que los int en estos compiladores son de 32 bits, y su rango va de − 2,147,483,648 a 2,147,483,647, entonces 604800 queda dentro del rango y no hay desborde aritmetico. Pero si el resultado de la multiplicacion quedara fuera de ese rango, incluso en Visual C++ habria desbordamiento aritmetico (recuarda lo que dije, si multiplicas enteros, el resultado es entero, y si multiplicas flotantes, el resultado es flotante), y tambien daria un resultado incorrecto.
La solucion a este problema es declarar los factores
explicitamente
como flotantes, agregando un punto decimal a cada numero, como en el siguiente ejemplo:
Código: C++
semana
=
(
24.0
*
7.0
*
3600.0
)
;
Si en lugar de usar constantes, usas variables enteras, debes convertirlas explicitamente a flotantes, multiplicando cada variable por 1.0, para que se convierta a flotante, ojo, solo si la variable es entera, si la variable es flotante no es necesario, ejemplo:
Código: C++
semana
=
(
horas
*
1.0
)
*
(
dias
*
1.0
)
*
(
segundos
*
1.0
)
;
Pruebalo asi, y me dices si ahora si te da el resultado correcto.
Saludos
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Operacion con muchos digitos
«
Respuesta #14 en:
Martes 29 de Marzo de 2011, 21:39 »
0
Muy buena explicación ProfesorX, gracias
Fr33k K0mpu73r
jokerm
Nuevo Miembro
Mensajes: 8
Re: Operacion con muchos digitos SOLUCIONADO
«
Respuesta #15 en:
Miércoles 30 de Marzo de 2011, 01:24 »
0
Omg, sorprendido con la explicacion, le pregunte a mi profesora y me dijo que lo iba a checar ("desde hace 4 dias").
Muchas gracias a todos por ayudarme, y si efectivamente poniendo el valor como 3600.0 es decir con punto decimal para que sea flotante, el resultado de la operacion es correcta.
Profesorx, gracias por excelente explicacion haciendo honeres a tu nick, moskito estoy empezando a leer ese libro. Gracias por todo.
Saludos
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Operacion con muchos digitos