Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - alex030293

#1
Cita de: ~xassiz en  4 Mayo 2011, 16:01 PM
Me temo que no podrás leer una expresión así si no tienes conocimientos sobre arrays por lo menos ;D

0k, ahora tengo dos semanas de exámenes en el instituto. Cuando acabe retomo esto, pillo lo básico de los arrays y a ver si sale algo.

Gracias por contestar.
#2
Cita de: Acermax en 30 Abril 2011, 20:03 PM
Aún así un par de cosas.

El valor de 'd', 'e' y 'f' hay que tener cuidao al calcularlos. En este caso si 'value', value2' o 'a|b' son negativos, estarías intentando hacer la raíz cuadrada de un número negativo. Te recomiendo que lo calcules dentro de las comprobaciones, o le pongas una comprobación adicional.

También a la hora de programar te recomiendo tabular las cosas, porque da un poco de cosa ponerse a mirar ese tocho de código seguido. Lo mejor es que lo que esté dentro de un if lo tabules a la derecha, y así queda de forma escalonada y mucho más legible.

Y por último, intenta no utilizar la librería conio.h xD

Varias cosas:

1- Gracias por contestar, lo primero.
2- Utilizo conio.h, a pesar de que ya me dijeron que mejor no, que esta obsoleta, que no es estándar, etc etc, si no uso getch() no consigo que se quede la ventana. Ni con system pause ni na.
3- creo que esos valores negativos que dices ya están contemplados en el código.
4- Código actualizado con tabs.
#3
Bingo!!
El código esta correcto, sólo que yo lo probaba con a=1 b=3 y c=0.
Con esos valores se quedaba parado, porque para c=0, el término independiente es 0, y hay que sacar factor común. (ax^4-bx^2=0) Y x vale 0 y sqrt(a/b).

Así que añadiendo esa parte, sin fallo.
A vosotros os parecerá una pequeñez, pero para mi supone un logro y estoy bastante orgulloso de esto, aunque parezca mentira.(Viva el autodidactismo)
Hoy ya duermo con una sonrisa.
Un saludo.


/*Ecuaciones bicuadradas*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main(void)
{
    /*Definir variables*/
    float a;
    float b;
    float c;
    float value;
    float value2;
    float d;
    float e;
    float f;
   
    /*Introducir coeficientes*/
    printf("Introduce el coeficiente del la x^4:");
    scanf("%f", &a);
    printf("Introduce el coeficiente del la x^2:");
    scanf("%f", &b);
    printf("Introduce el termino independiente:");
    scanf("%f", &c);
    value = ((-b)+sqrt(b*b-4*a*c))/(2*a);
    value2 = ((-b)-sqrt(b*b-4*a*c))/(2*a);
    d = sqrt(value);
    e = sqrt(value2);     
    f = sqrt(b/a);
   
    if((a == 0) && (b == 0) && (c == 0))
    {
    printf("Queda 0=0.");   
    }
     
    /*Para raíces 0 o negativas*/
    if((a != 0) && (b != 0) && (b*b-4*a*c) <= 0)
    {
    printf("No existe solucion");
    }
    /*Si no hay término independiente*/
    if((a != 0) && (b != 0) && (c == 0))
    {
    printf("La x vale 0 y +- %.3f", f);     
    }   
    /*Para raíces positivas*/
    if((b*b-4*a*c) > 0)
    {                   
         if((value > 0) && (value2 > 0))
         {       
         printf("La x vale: +- %.3f y +- %.3f", d, e);
         }
         if((value <= 0) && (value2 > 0))
         {       
         printf("La x vale: +- %.3f ", e);
         }
         if((value > 0) && (value2 <= 0))
         {       
         printf("La x vale: +- %.3f", d);
         }
         if((value < 0) && (value2 < 0))
         {       
         printf("No existe solucion");
         }
    }
   
    getch();
    return 0;
}

#4
Después de unos días con C, todo lo que me deja 2 de BAC, he pillado unas cosillas básicas y, después de hacer la de 2 grado, ahora quiero hacer un programa para ecuaciones bicuadradas.

He intentado un código para resolver bicuadradas metiendo los coeficientes, pero al meterlos no hace nada, creo que hay un lio de if().

A ver si alguien me puede ayudar a ver que le pasa.....


//*Ecuaciones bicuadradas*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main(void)
{
   /*Definir variables*/
   int a;
   int b;
   int c;
   float value;
   float value2;
   float d;
   float e;
   
   /*Introducir coeficientes*/
   printf("Introduce el coeficiente del la x^4:");
   scanf("%d", &a);
   printf("Introduce el coeficiente del la x^2:");
   scanf("%d", &b);
   printf("Introduce el termino independiente:");
   scanf("%d", &c);
   value = ((-b)+sqrt(b*b-4*a*c))/(2*a);
   value2 = ((-b)-sqrt(b*b-4*a*c))/(2*a);
   d = sqrt(value);
   e = sqrt(value2);      
   
   /*Para raíces 0 o negativas*/
   if((b*b-4*a*c) <= 0)
   {
   printf("No existe solucion");
   }
       
   /*Para raíces positivas*/
   if((b*b-4*a*c) > 0){                    
   if((value > 0) && (value2 > 0))
   {      
   printf("La x vale: +- %.3f y +- %.3f", d, e);
   }
   if((value < 0) && (value2 > 0))
   {      
   printf("La x vale: +- %.3f ", e);
   }
   if((value > 0) && (value2 < 0))
   {      
   printf("La x vale: +- %.3f", d);
   }
   if((value < 0) && (value2 < 0))
   {      
   printf("No existe solucion");
   }
   }
   
   getch();
   return 0;
}



#5
Cita de: Acermax en 29 Abril 2011, 19:10 PM
Bueno, por ejemplo, podrías leer la expresión, y luago tratarla caracter a caracter. Por ejemplo, se me ocurre  guardar la ecuación en un array de tamaño variable (podrías usar la clase vector de stl para esto, que es muy útil), en la que en la posición 0 del vector guardas el termino independiente, en la posición 1 el termino de grado 1 etc...
También piensa que en realidad no tienes que tratar de manera especial que sea una suma o una resta, simplemente puedes guardar en el array el vector cambiado de signo o no, y con el término o términos de la derecha de la igualdad lo mismo, solo tendrías que cambiarles el signo para luego operar fácilmente...

PD: Vale veo que solo pretendes hacerlo para ecuaciones de segundo grado, asi que lo tienes más fácil si quieres, no necesitas ni crear un "vector" de stl, puedes hacerlo con variables directamente o con un array fijo de 3 posiciones.

Me parece una buena idea. Pero me la apunto para más adelanto, porque llevo tres días con C/C++ y aún no llegue a los arrays. Cuando controle un poco eso pruebo.

Gracias de todos modos
#6
Bien, ahora que ya repasé algunos conceptos, y este programa va sin problema, voy a intentar algo diferente.

Alguien sabe la forma de hacer lo mismo, solo que en vez de introducir coeficiente por coeficiente, el usuario escriba la ecuación directamente (pej: 2x^2+4x-3=0)??

Gracias de antemano.
#7
vale, entonces meto siempre return 0; al final de todo como medida "formal".

Por otro lado, habia leido lo de getchar(); pero no me hace lo mismo que getch() por algun motivo, se cierra sola al acabar.
#8
Cita de: Bledniss 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???

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.
#9
Pues así queda finalmente:


#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();
}

#10
Cita de: El_Java 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.

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!