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)
| | |-+  [RESUELTO, AHORA VARIANTES]Hola, tengo un ligero problema
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: [RESUELTO, AHORA VARIANTES]Hola, tengo un ligero problema  (Leído 7,718 veces)
alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
[RESUELTO, AHORA VARIANTES]Hola, tengo un ligero problema
« en: 27 Abril 2011, 16:40 pm »

Pues eso, estos días he decidido comenzar a aprender C, un poco por mi cuenta, todo un reto.

Después de leer algunos artículos, hice el típico "Hello world", un programa para sumar, multiplicar etc etc, un comparador de números, y demás chorradas.

Intentando ir un poco por mi cuenta, me dio por hacer un pequeño programilla que resuelva ecuaciones de 2º grado, pero el fallo es que los valores que devuelve están redondeados a enteros, este es mi código:


Código:
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main(void)
{

    /*Definir variables*/
    int a;
    int b;
    int c;
    int value1;
    int value2;

    /*Introducir coeficientes*/
    printf("Introduce el coeficiente del la x^2:");
    scanf("%d", &a);
    printf("Introduce el coeficiente del la x:");
    scanf("%d", &b);
    printf("Introduce el termino independiente:");
    scanf("%d", &c);

    /*Para raíces positivas*/
    if((b*b-4*a*c) > 0){                      
    value1 = ((-b)+sqrt(b*b-4*a*c))/(2*a);
    value2 = ((-b)-sqrt(b*b-4*a*c))/(2*a);
    printf("La x vale: %d y %d", value1, value2);
    }

    /*Para raíces 0 o negativas*/
    if((b*b-4*a*c) <= 0){
    printf("No existe solucion");
    }
    
    getch();
}

Creo que el fallo es algún %d, pero no estoy seguro, también creo que debería meter algun float por ahí, pero tras intentarlo no me ha salido gran cosa.

Me encomiendo a vosotros, gracias de antemano.


« Última modificación: 29 Abril 2011, 15:40 pm por alex030293 » En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
Bledniss

Desconectado Desconectado

Mensajes: 56


<a href="http://www.userbars.be"><img src="http://


Ver Perfil
Re: Hola, tengo un ligero problema
« Respuesta #1 en: 27 Abril 2011, 17:36 pm »

Tampoco se mucho, tambien estoy empezando en C pero n error que he visto es que utilizas un signo que no debes  printf("%d", &a)
Porque ese singo es el que lee la informacion de dicha variable scanf()


En línea

<a href="http://www.userbars.be"><img src="http://img857.imageshack.us/img857/6337/44984.gif" alt="Free userbars" border="0"></a>
alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
Re: Hola, tengo un ligero problema
« Respuesta #2 en: 27 Abril 2011, 17:41 pm »

Tampoco se mucho, tambien estoy empezando en C pero n error que he visto es que utilizas un signo que no debes  printf("%d", &a)
Porque ese singo es el que lee la informacion de dicha variable scanf()

Estás seguro?, porque yo no veo eso.....
En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: Hola, tengo un ligero problema
« Respuesta #3 en: 27 Abril 2011, 17:44 pm »

Tu problema esta en que usas variables de tipo int y no tienen decimales, por lo que se redondea. Si lo que quieres es la mayor precisión posible usa otras variables con bits de precisión como float.
En línea

alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
Re: Hola, tengo un ligero problema
« Respuesta #4 en: 27 Abril 2011, 17:46 pm »

Tu problema esta en que usas variables de tipo int y no tienen decimales, por lo que se redondea. Si lo que quieres es la mayor precisión posible usa otras variables con bits de precisión como float.

Entonces todos los sitios que pone int meto float, y donde dice %d pongo %f, no?

Gracias por la ayuda, me temia algo parecido...

[EDITO]
Perfecto, probado y funcionando. Ya lo había intentado antes, pero no se porque no iba... será que de esta vez te cogio miedo, jeje.

Una vez más gracias, he añadido en %.3f para redondear a 3 decimales.
Llevo sólo dos días, y reconozco que tengo fallos algo tontos.

Un saludo

P.D: Una comunidad más grande de lo que esperaba, una hora y ya solucionado, gracias!
« Última modificación: 27 Abril 2011, 17:54 pm por alex030293 » En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
Re: Hola, tengo un ligero problema
« Respuesta #5 en: 27 Abril 2011, 17:51 pm »

Pues así queda finalmente:


Código:
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main(void)
{

    /*Definir variables*/
    int a;
    int b;
    int c;
    float value1;
    float value2;

    /*Introducir coeficientes*/
    printf("Introduce el coeficiente del la x^2:");
    scanf("%d", &a);
    printf("Introduce el coeficiente del la x:");
    scanf("%d", &b);
    printf("Introduce el termino independiente:");
    scanf("%d", &c);

    /*Para raíces positivas*/
    if((b*b-4*a*c) > 0){                      
    value1 = ((-b)+sqrt(b*b-4*a*c))/(2*a);
    value2 = ((-b)-sqrt(b*b-4*a*c))/(2*a);
    printf("La x vale: %.3f y %.3f", value1, value2);
    }

    /*Para raíces 0 o negativas*/
    if((b*b-4*a*c) <= 0){
    printf("No existe solucion");
    }
    
    getch();
}
En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Hola, tengo un ligero problema
« Respuesta #6 en: 27 Abril 2011, 18:40 pm »

Te faltó el return de la función main() y deberías hacerlo totalmente estandard, no necesitas el getch() de la librería conio.h.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Bledniss

Desconectado Desconectado

Mensajes: 56


<a href="http://www.userbars.be"><img src="http://


Ver Perfil
Re: Hola, tengo un ligero problema
« Respuesta #7 en: 27 Abril 2011, 19:26 pm »

Perdon, error mio, me habre fiajdo mal :o
Y ahora que lo deciis que diferencia hay entre return y getch???
En línea

<a href="http://www.userbars.be"><img src="http://img857.imageshack.us/img857/6337/44984.gif" alt="Free userbars" border="0"></a>
alex030293

Desconectado Desconectado

Mensajes: 12


Aprendiendo a programar en C a pocos...


Ver Perfil
Re: Hola, tengo un ligero problema
« Respuesta #8 en: 27 Abril 2011, 19:45 pm »

Perdon, error mio, me habre fiajdo mal :o
Y ahora que lo deciis que diferencia hay entre return y getch???

Por lo que fui pillando entre ayer y hoy, getch() corresponde a la librería conio.h y no es estándar, por eso hay quien dice que no se debe usar. Permite mantener la ventana visible hasta que presiones una tecla una vez finaliza el programa. Es decir, acabas el programa y pulsas una tecla, y se cierra.

Y return, es parte de main, y dice que debe devolver la función. Así que pones return 0; y no hace nada y teoricament e se queda parada la ventana.

Sin embargo yo uso el getch() porque el return no me va o algo, y la ventada solo me dura un parpadeo.
En línea

www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.
Acermax

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Hola, tengo un ligero problema
« Respuesta #9 en: 27 Abril 2011, 19:49 pm »

La función "main" debe declararse como "int", esto significa que al finalizar la función main, esperará un valor de retorno, en este caso un return 0, para indicarle al sistema operativo que todo fue bien.

Por otro lado getch pertenece a la libreria conio.h, que es una libreria muy anticuada y no estandar. Si ese mismo programa lo intentas compilar en un sistema UNIX es muy probable que no funcione por el uso de esa libreria, aparte de otros problemas más que puede dar.

Te recomiendo que leas el post que está arriba sobre las cosas que no se deben hacer en c/c++, es un post muy útil que a mi me gustó bastante.

Un saludo.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema anterior resulto,tengo otro ahora
Software
bob76 1 1,540 Último mensaje 13 Julio 2003, 12:08 pm
por Songoku
Desactive mi foro y Ahora tengo un problema muy grande « 1 2 3 »
PHP
Shalashaska 21 6,793 Último mensaje 24 Junio 2007, 22:25 pm
por Shalashaska
[Resuelto] Como hago para que HOLA = hola?
Programación Visual Basic
agus0 4 3,356 Último mensaje 12 Febrero 2010, 11:48 am
por egrimm
[Resuelto] Estoy creaando un bat y tengo algunas fallas que no se como arreglar
Scripting
miguel0542 1 2,229 Último mensaje 3 Septiembre 2012, 10:21 am
por Eleкtro
[Resuelto] Tengo un problema descargando un .txt de un fuente. « 1 2 »
PHP
@XSStringManolo 10 4,218 Último mensaje 8 Septiembre 2019, 22:03 pm
por @XSStringManolo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines