elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  no tiene sentido este simple código.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: no tiene sentido este simple código.  (Leído 7,924 veces)
AprendiendoAProgramar

Desconectado Desconectado

Mensajes: 9


Ver Perfil
no tiene sentido este simple código.
« en: 25 Enero 2017, 23:35 pm »

Esto no tiene sentido, se supone que debería dar el cuadrado de el numero pero siempre bota el numero -1.
Ejemplo:
5^2 = 24.                         .____.
.-. Por favor, ¿qué pasó? D: Soy nuub en esto.
no sé si será mi pc o que pasará.
Código
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <cmath>
  4.  
  5.  
  6.  
  7. using namespace std;
  8.  
  9. int Cuadrado(int);
  10.  
  11.  
  12. int main(){
  13.  
  14.    int Numero;
  15.  
  16.  
  17.    cout<<" Ingrese Numero "<<endl;
  18.    cin>>Numero;
  19.  
  20.    cout<<"El cuadrado del numero es: "<<Cuadrado(Numero)<<endl;
  21.  
  22.  
  23.    system("pause");
  24.  return 0;
  25.  
  26. }
  27.  
  28.  
  29. int Cuadrado(int a){
  30.  
  31.  
  32.    a = pow(a,2);
  33.  
  34.    return a;
  35.  
  36.  
  37.  
  38. }



· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex


« Última modificación: 27 Enero 2017, 03:50 am por AprendiendoAProgramar » En línea

APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: NO TIENE SENTIDO ESTE SIMPLE CÓDIGO.
« Respuesta #1 en: 25 Enero 2017, 23:51 pm »

el código está bueno, a mi  (quetandole windows.h y system porque ando en linux) me funciona perfecto

como lo estás ejecutando?


En línea

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.
AprendiendoAProgramar

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #2 en: 26 Enero 2017, 00:30 am »

ESTO ES LO QUE SE EJECUTA. :-\ :-\ :-\ :-\ :-\ :-(




En línea

APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #3 en: 26 Enero 2017, 00:54 am »

ya... es un lio de precisión de coma flotante...
https://es.wikipedia.org/wiki/Coma_flotante

los nuevos no se deberían dar con estos problemas pero eres desafortunado

qué pasa?

pow retorna un valor tipo double, pero por el asunto de la precisión en números de coma flotante, cuando haces pow(5,2) retorna 24.999999999 que a efectos de incluso otras cuentas matemáticas es 25.... pero cuando lo conviertes a int, el solo toma la parte entera y descarta los decimales, quedando en 24

http://www.cplusplus.com/reference/cmath/pow/
En línea

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.
lgamerm

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #4 en: 26 Enero 2017, 01:02 am »

 
Esto no tiene sentido, se supone que debería dar el cuadrado de el numero pero siempre bota el numero -1.
Ejemplo:
5^2 = 24.                         .____.
.-. Por favor, ¿qué pasó? D: Soy nuub en esto.
no sé si será mi pc o que pasará.
Código
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <cmath>
  4.  
  5.  
  6.  
  7. using namespace std;
  8.  
  9. int Cuadrado(int);
  10.  
  11.  
  12. int main(){
  13.  
  14.    int Numero;
  15.  
  16.  
  17.    cout<<" INGRESE NUMERO "<<endl;
  18.    cin>>Numero;
  19.  
  20.    cout<<"El cuadrado del numero es: "<<Cuadrado(Numero)<<endl;
  21.  
  22.  
  23.    system("pause");
  24.  return 0;
  25.  
  26. }
  27.  
  28.  
  29. int Cuadrado(int a){
  30.  
  31.  
  32.    a = pow(a,2);
  33.  
  34.    return a;
  35.  
  36.  
  37.  
  38. }



· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex


cambia esto: a = pow(a,2); por esto: a *= a;
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #5 en: 26 Enero 2017, 09:33 am »

Es muy raro. Tanto 5 como 25 tiene una cantidad muy baja de bits como para que se pierda información.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #6 en: 26 Enero 2017, 12:31 pm »

Es muy raro. Tanto 5 como 25 tiene una cantidad muy baja de bits como para que se pierda información.
Nunca me he preocupado de los temas técnicos de los compiladores, pero puede que sea alguna particularidad del compilador que esté usando. Me acuerdo que cuando empecé a programar descubrí que distintos compiladores alineaban de forma distinta los campos de los structs (Borland y Mingw). Puede ser eso.
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #7 en: 26 Enero 2017, 15:24 pm »

Es muy raro. Tanto 5 como 25 tiene una cantidad muy baja de bits como para que se pierda información.

ellos la tendran... pero los float no... aquí un visualizador

https://float-visualizer.surge.sh/


5 = 01000000101000000000000000000000
25 = 01000001110010000000000000000000

mira la perdida de precisión tu mismo cuanto da 25?

en hecho, es más preciso 510423550381407695195061911147652317184 que 25 XD (por la mantissa)
En línea

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.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #8 en: 26 Enero 2017, 18:43 pm »

Prueba el siguiente programa:
Código
  1. #include <stdio.h>
  2.  
  3. void bits(double n) {
  4.    for(int b = sizeof(double) * 8 - 1; b >= 0 ; --b) {
  5.        printf("%lu", *(long unsigned*)&n >> b & 1);
  6.    }
  7. }
  8.  
  9. int main() {
  10.    printf("\n\n%.25lf\n", 0.1);
  11.    bits(0.1);
  12.  
  13.    printf("\n\n%.25lf\n", 5.);
  14.    bits(5);
  15.  
  16.    printf("\n\n%.25lf\n", 25.);
  17.    bits(25);
  18. }

Como puedes ver no hay pérdida de precisión. En cambio si la hay en 0.1, que pasado a binario IEEE754:

Código:
0011111110111001100110011001100110011001100110011001100110011010

Como se puede ver hay una periodicidad que tiende a infinito.

En línea

AprendiendoAProgramar

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: no tiene sentido este simple código.
« Respuesta #9 en: 26 Enero 2017, 20:52 pm »


Primero que todo muchas gracias por la ayuda. ;D ;-)


¿ Pero entonces el problema es mi compilador ? Y si es así.
¿ que tengo que hacer para que no suceda eso?

recién aprendo a programar y no quiero meterme en problemas tan técnicos como estos pero que al fin y al cabo influyen de manera importante al compilar un programa, si fuera un trabajo y me salieran estos errores no sabría corregirlos de manera correcta. Y no, no se vale sumarle la cantidad que le falte.  :xD :xD

GRACIAS.
En línea

APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayundeme con este simple codigo
Programación Visual Basic
fraktal 3 1,957 Último mensaje 13 Octubre 2006, 16:35 pm
por fraktal
Este codigo en C# no funciona (es simple)
.NET (C#, VB.NET, ASP)
& eDu & 1 2,757 Último mensaje 22 Junio 2008, 23:08 pm
por MANULOMM
Ayuda con este simple codigo !!
PHP
TrashAmbishion 7 3,611 Último mensaje 7 Mayo 2013, 02:42 am
por #!drvy
No funciona este simple codigo
Programación Visual Basic
luis456 6 5,428 Último mensaje 21 Septiembre 2013, 08:50 am
por luis456
Ayuda nuevamente con este simple codigo
Programación C/C++
spiderboot 9 4,031 Último mensaje 13 Mayo 2014, 15:39 pm
por spiderboot
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines