| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
taskan
Registrado: 01 Feb 2009 Mensajes: 7
| Publicado: 01/02/2009 11:35 am | | | Título: Errores del Compilador |
| Hola a todos, este es mi primer mensaje en el foro. Mi asunto es el siguiente: he intentado hacer un programa para resolver ecuaciones de segundo grado en C, y cuando lo quiero compilar el compilador me saca unos errores que no entiendo. Me dice que la etiqueta del comando goto (ya se que no esta bien visto, pero de momento lo hago asi) no esta puesta, cuando si que lo esta... despues me tira algunos errores de printfs i scanfs... os dejo el codigo, para k lo compileis i mireis los errores k saca (lo compile con el dev-c++ 4.9.9.2) o directamente me digais si algo esta mal.
| Código: | #include<stdio.h> #include<string.h> #include<math.h>
int main() { int a; int b; int c; int x; int x2; char final[3]; printf("Bienvenido al programa"); iniciar: printf("Introduzca la variable a"); /*Pedimos las variables de la ecuacion*/ scanf("%d", &a); printf("Introduzca la variable b"); scanf("%d", &b); printf("Introduzca la variable c"); scanf("%d", &c); if ((a!=0) && (b!=0) && (c!=0)); { if (b*b-4*a*c==0) /*Si la ecuacion es completa, miramos el determinante*/ { x=(-b+sqrt(b*b-4*a*c))/2*a; printf("X equivale a %d", &x); printf("Desea realizar otra ecuacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; /*Aqui es donde me saca el error*/ } if (b*b-4*a*c>0) { x=(-b+sqrt(b*b-4*a*c))/2*a; x2=(-b-sqrt(b*b-4*a*c))/2*a; printf("Ecuación con doble solucion"); printf("X equivale a %d", &x);printf("Y X2 equivale a %d", &x2); printf("Desea realizar otra ecuacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; } if (b*b-4*a*c<0) { printf("Ecuación sin solucion"); printf("Desea realizar otra ecuacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; } } if((a!=0) && (b==0) && (c!=0)) /*Si la ecuacion es incompleta, aplicamos la formula*/ { if(sqrt(-(c/a))>0) { x=-sqrt(-(c/a)); x2=+sqrt(-(c/a)); printf("Ecuacion incompleta(b=0)"); printf("X equivale a %d", &x);printf("Y X2 equivale a %d", &x2); printf("Desea realizar otra ecuacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; } if(sqrt(-(c/a))<0) { printf("Ecuación sin solucion"); printf("Desea realizar otra ecuacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; } if ((a!=0) && (b!=0) && (c==0)) /*Si la ecuacion es incompleta, aplicamos la formula*/ { x=0; x2=-(b/a); printf("Ecuacion incompleta(c=0)"); printf("X equivale a %d", &x);printf("Y X2 equivale a %d", &x2); printf("Desea realizar otra ecuacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; } } if ((a!=0) && (b==0) && (c==0)) /*Si la ecuacion es incompleta, aplicamos la formula*/ { x=0; printf("Ecuacion incompleta(c=0 y b=0)"); printf("X equivale a %d", &x); printf("Desea realizar otra ecuacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; } }; if (a==0) /*Esta ecuacion no existe!*/ { printf("Ecuación sin solucion"); printf("Desea realizar otra operacion?"); scanf("%s", &final); if (final=="si") goto iniciar; else goto finalizar; } } finalizar: /*Pero la etiqueta esta aqui, no?*/ return 0 }
|
Muchas gracias por adelantado y salu2[/code] |
| | Volver arriba | |  | betopin
Registrado: 05 Ene 2009 Mensajes: 43
| Publicado: 01/02/2009 12:04 pm | | | Título: |
| Saludos
Son varios los errores...primero el tipo de datos. Si vas a sacar raices deberia ser como minimo float y no int
Si vas a capturar cadenas vasta poner %s,nombre del arreglo
Los puntos y comas tras los if sobran
Tras ver las llaves habian varias llaves que sobraban...dos exactamente
Al return 0 le falta un ;
Tras hacer estas correciones no se me generaron mas errores, aunque te aconsejo que condiciones como estas if (final=="si")
las modifiques mejor por un if (strcmp("si",final)==0)
Saludos |
| | Volver arriba | |  | taskan
Registrado: 01 Feb 2009 Mensajes: 7
| Publicado: 02/02/2009 12:09 pm | | | Título: |
| Muchas Gracias! XD la verdad es que debería haber posteado esto en principiantes, pero creí que se trataban de errores de compilacion... Ya lo he probado y funciona, aunque no como debería, me tocara revisarlo Y, por cierto, por que es mejor poner un strcmp que un if("si"==final)? Bueno, repito, muchas gracias por todo. Saludos |
| | Volver arriba | |  | | betopin
Registrado: 05 Ene 2009 Mensajes: 43
| Publicado: 02/02/2009 2:46 pm | | | Título: |
| | taskan escribió: | Muchas Gracias! XD la verdad es que debería haber posteado esto en principiantes, pero creí que se trataban de errores de compilacion... Ya lo he probado y funciona, aunque no como debería, me tocara revisarlo Y, por cierto, por que es mejor poner un strcmp que un if("si"==final)? Bueno, repito, muchas gracias por todo. Saludos |
Bueno, porque realmente es un error. Cuando corri el codigo sobre el dev c++, no me generaron warnings ni errores aunque al ir a un TC, se generaban warnings por el estilo
| Código: | Code has no effect in function main() |
Al ejecutar el codigo, este siempre hacia lo que estaba dentro del if...es como si este no estuviera
Por eso, te sugeri la opcion del strcmp _________________ Programas en C: Tutoriales y Software |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 4836 Ubicación: Mexico
| Publicado: 02/02/2009 3:50 pm | | | Título: |
| | taskan escribió: | | Y, por cierto, por que es mejor poner un strcmp que un if("si"==final)? |
Porque C no permite la comparacion de cadenas mediante el operador "==". Cuando se realiza la comparacion:
Lo que en realidad se compara son las direcciones de memoria donde se localizan la literal "si" y el array 'final', por supuesto esas dos direcciones son distintas.
Para comparar el contenido de dos cadenas la unica es opcion es utilizar una funcion ya sea propia o bien strcmp/strncmp (las dos ultimas parte de la biblioteca estandar de C, prototipos en <string.h>).
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | taskan
Registrado: 01 Feb 2009 Mensajes: 7
| Publicado: 06/02/2009 10:45 am | | | Título: |
| Ya seguí todos sus consejos. Ahora ya me compila, pero cuando intento que resuelva una ecuacion, o me dice que no existe (cuando sí existe, creo) o me devuelve dos resultados: 0 i 0. Que debería hacer? No se si es porque para hacer esto| Cita: | | x=(-b+sqrt(b*b-4*a*c))/2*a; | se hace de otra manera... los parentesis estan puestos para indicar el orden de las operaciones, pero quizás no es así... Haber si me pueden ayudar Saludos |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |