Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Errores raros en codigo correcto

Estas en el tema de Errores raros en codigo correcto en el foro de C/C++ en Foros del Web. Saludos. Últimamente he estado creando un programa para evaluar unas funciones matemáticas basado en unas formulas. Soy algo novato, ya que empiezo en esto de ...
  #1 (permalink)  
Antiguo 20/04/2011, 00:16
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 2 meses
Puntos: 1
Exclamación Errores raros en codigo correcto

Saludos.
Últimamente he estado creando un programa para evaluar unas funciones matemáticas basado en unas formulas. Soy algo novato, ya que empiezo en esto de la programación en C y pues no he encontrado que es lo que estoy haciendo mal en mi código, el cual, compilando en Borland C++ me da los siguientes errores:

"funciomatico.c(104, 1) :Declaration is not alowed here"
"funciomatico.c(105, 18) :Declaration syntax error"
"funciomatico.c(138,1) :Declaration missing ;"
"funciomatico.c(138,1) :Compound statement missing }"
"funciomatico.c(138,1) :Function should return a value"

He revisado de arriba a abajo todo el código y no he encontrado donde está el error, así que no he podido continuar con el proyecto...


Código C:
Ver original
  1. /* -----------------Funciomático-----------------------
  2. -----Creador: Dtc Srni (Erick Renato Vega)-----------
  3. El programa evaluará funciones matemáticas, tanto funciones cuadráticas como cúbicas y lineales,
  4. ademas de guardar los resultados y datos en un archivo de texto.
  5. Caracteristicas:
  6. -Soporte para los 3 tipos de funciones soportadas (por el momento, en esta versión) con cualquier
  7. tipo de signo o valor.
  8. -Distinción de las variables, terminos independientes, coeficientes y exponentes.
  9. -El programa grabará dominios en variables, de uno en uno, en un máximo de 10, hasta que el usuario
  10. presione “n”
  11. http://www.dtcsrni.co.cc
  12. */
  13.  
  14.  
  15. /*Archivos de cabecera (prototipos de funciones de librería)*/
  16.  
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <math.h>
  21.  
  22.  
  23. /*Fin de archivos de cabecera (prototipos de funciones de librería)*/
  24.  
  25. /* Prototipos de Funciones */
  26. float funcion1 (float dominio1, float dominio2, float *dominio11, float *dominio22);
  27. float fsimple (float coeficiente1, float dominio1, float dominio2, float dominio3, float dominio4, float dominio5, float dominio6, float dominio7, float dominio8, float dominio9, float dominio10, float termino1, float *rango1, float *rango2, float *rango3, float *rango4, float *rango5, float *rango6, float *rango7, float *rango8, float *rango9, float *rango10);
  28. /* Fin de prototipos de Funciones */
  29. /* Declaracion de Variables */
  30.  
  31. float f1, f2, coef1c1, coef2c1, coef2c2c, coef3c1, coef3c2, coef3c3, term1, term2, term3, dominio1d1, dominio1d2, dominio1d3, dominio1d4, dominio1d5, dominio1d6, dominio1d7, dominio1d8, dominio1d9, dominio1d10, dominio2d1, dominio2d2, dominio2d3, dominio2d4, dominio2d5, dominio2d6, dominio2d7, dominio2d8, dominio2d9, dominio2d10, dominio3d1, dominio3d2, dominio3d4, dominio3d5, dominio3d6, dominio3d7, dominio3d8, dominio3d9, dominio3d10, rango1r1, rango1r2, rango1r3, rango1r4, rango1r5, rango1r6, rango1r7, rango1r8, rango1r9, rango1r10, rango2r1, rango2r2, rango2r3, rango2r4, rango2r5, rango2r6, rango2r7, rango2r8, rango2r9, rango2r10, rango3r1, rango3r2, rango3r3, rango3r4, rango3r5, rango3r6, rango3r7, rango3r8, rango3r9, rango3r10;
  32. int funcioneleg, funcioneleg2;
  33.  
  34. /* Fin de declaración de Variables */
  35.  
  36. /* Inicio del proceso principal del programa */
  37.  
  38.  
  39. int main()
  40.  
  41. {
  42. printf("-------------------Funciomático-----------------\n");
  43. printf("-Por Dtc Srni-\n");
  44.    /* Menú principal */
  45. printf(" Bienvenido al sistema\nEste es el Funciomático\nPara iniciar, elige y teclea el número de función a evaluar:\n");
  46.    printf("1.- F(X)= x+1/n");
  47.    printf("2.- F(X)= 2x2+2x+1/n");
  48.    printf("3.- F(X)= 2x3+2x2+5x+1/n");
  49.    printf("4.- F(X)= 1/4x+2/n");
  50.    printf("5.- F(X)= 1/4x2+1/4x+5/n");
  51.    printf("6.- F(X)=1/4x+1/1/4x+1");
  52. scanf("%i",&funcioneleg);
  53.  
  54.     switch(funcioneleg)
  55.     {
  56.         case 1:
  57.             printf("El tipo de funcion elegida es F(X)= x+1/n");
  58.          printf("Por favor, escribe el valor del término independiente (+-1):/n");
  59.          scanf("%f", &term1);
  60.          printf("Ahora, escriba el valor del coeficiente\n");
  61.          scanf("%f", &coef1c1);
  62.          printf("De cuantos dominios es la funcion a evaluar? (1.- 2 dominios\n, 2.- 3 dominios\n, 3.- 4 dominios\n, 4.- 5 dominios\n, 5.- 6 dominios\n, 6.- 7 dominios\n, 7.- 8 dominios\n, 8.- 9 dominios\n, 9.- 10 dominios\n");
  63.          switch(funcioneleg2)
  64.          {
  65.          case 1:
  66.            printf("Funcion de 2 dominios\n");
  67.            printf("Por favor, escribe el primer dominio y presiona enter: \n");
  68.            scanf("%f", &f1);
  69.            printf("Ahora, escribe el segundo dominio y presiona enter: \n");
  70.            funcion1(f1, f2, &dominio1d1, &dominio1d2);
  71.            fsimple(coef1c1, dominio1d1, dominio1d2, dominio1d3, dominio1d4, dominio1d5, dominio1d6, dominio1d7, dominio1d8, dominio1d9, dominio1d10, term1, &rango1r1, &rango1r2, &rango1r3, &rango1r4, &rango1r5, &rango1r6, &rango1r7, &rango1r8, &rango1r9, &rango1r10);
  72.            printf("El dominio de la función F(X)=(%f)x+(%f) es:\n\nD{%f, %f, %f, %f, %f, %f, $f, $f, $f, $f}\n\nEl rango de la función es:\n\n R{%f, %f, %f, %f, %f, %f, %f, %f, %f, %f}\n\n", coef1c1, term1, dominio1d1, dominio1d2, dominio1d3, dominio1d4, dominio1d5, dominio1d6, dominio1d7, dominio1d8, dominio1d9, dominio1d10, rango1r1, rango1r2, rango1r3, rango1r4, rango1r5, rango1r6, rango1r7, rango1r8, rango1r9, rango1r10);
  73.       system("pause");
  74.         break;
  75.         case 2:
  76.             printf("El tipo de funcion elegida es F(X)= 2x2+2x+1\n");
  77.             break;
  78.         case 3:
  79.             printf("El tipo de funcion elegida es F(X)= 2x3+2x2+5x+1\n");
  80.             break;
  81.         case 4:
  82.             printf("El tipo de funcion elegida es F(X)= 1/4x+2\n");
  83.             break;
  84.         case 5:
  85.             printf("El tipo de funcion elegida es F(X)= 1/4x2+1/4x+5\n");
  86.             break;
  87.         case 6:
  88.             printf("El tipo de funcion elegida es 1/4x+1/1/4x+1\n");
  89.             break;
  90.         default:
  91.             printf("Has ingresado un numero de opcion no valido, intentalo de nuevo\n");
  92.  
  93.  
  94.     }
  95.  
  96.    /* Fin de Menú principal */
  97.  
  98.  
  99.   return 0;
  100. }
  101.  
  102. /*Procesos de funciones para evaluar */
  103.  
  104.       float fsimple (float coeficiente1, float dominio1, float dominio2, float dominio3, float dominio4, float dominio5, float dominio6, float dominio7, float dominio8, float dominio9, float dominio10, float termino1, float *rango1, float *rango2, float *rango3, float *rango4, float *rango5, float *rango6, float *rango7, float *rango8, float *rango9, float *rango10)
  105.                 {
  106.  
  107.        *rango1 = (coeficiente1)(dominio1)+termino1;
  108.        *rango2 = (coeficiente1)(dominio2)+termino1;
  109.        *rango3 = (coeficiente1)(dominio3)+termino1;
  110.        *rango4 = (coeficiente1)(dominio4)+termino1;
  111.        *rango5 = (coeficiente1)(dominio5)+termino1;
  112.        *rango6 = (coeficiente1)(dominio6)+termino1;
  113.        *rango7 = (coeficiente1)(dominio7)+termino1;
  114.        *rango8 = (coeficiente1)(dominio8)+termino1;
  115.        *rango9 = (coeficiente1)(dominio9)+termino1;
  116.        *rango10 = (coeficiente1)(dominio10)+termino1;
  117.  
  118.         return 0;
  119.  
  120.                 }
  121.  
  122.      float funcion1 (float dominio1, float dominio2, float *dominio11, float *dominio22)
  123.                 {
  124.       printf("Escribe el nombre del primer dominio y pulsa enter: ";
  125.       scanf("%f", &dominio1);
  126.       printf("Escribe el nombre del segundo dominio y pulsa enter: ";
  127.       scanf("%f", &dominio2);
  128.  
  129.        dominio1 = *dominio11;
  130.  
  131.        dominio2 = *dominio22;
  132.  
  133.        return 0;
  134.                 }


De antemano, gracias
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk

Última edición por Dtc; 20/04/2011 a las 00:23
  #2 (permalink)  
Antiguo 20/04/2011, 03:25
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 24
Respuesta: Errores raros en codigo correcto

En C no puedes multiplicar simplemente con las paréntesis. Todas las lineas que siguen el patrón:
Código:
*rango1 = (coeficiente1)(dominio1)+termino1;
deberían ser
Código:
*rango1 = (coeficiente1*dominio1)+termino1;
Otra cosita es que tus funciones devuelven un float
Código:
 float fsimple
pero dentro de ellas simplemente devuelves 0, por lo que alomejor valdría la pena cambiar a void.


Tambien te saltas paréntesis
Código:
printf("Escribe el nombre del primer dominio y pulsa enter: "; <----- falta )
printf("Escribe el nombre del segundo dominio y pulsa enter: "; <----- falta )
Código:
float funcion1 (float dominio1, float dominio2, float *dominio11, float *dominio22)
{
      printf("Escribe el nombre del primer dominio y pulsa enter: ";
      scanf("%f", &dominio1);
      printf("Escribe el nombre del segundo dominio y pulsa enter: ";
      scanf("%f", &dominio2);

       dominio1 = *dominio11;
       dominio2 = *dominio22;

       return 0;
}
No se exactamente lo que pretendes exactamente aquí pero desde luego no lo que hace esta función. Si lo que pretendes es que pida 2 números y se los asigne a dominio1 y dominio 2 podrías hacer
Código:
void funcion1 (float &dominio1, float &dominio2)
{
      printf("Escribe el nombre del primer dominio y pulsa enter: ");
      scanf("%f", &dominio1);
      printf("Escribe el nombre del segundo dominio y pulsa enter: ");
      scanf("%f", &dominio2);
}
__________________
Foros Desarrollo de Juegos

Última edición por ssaammuu; 20/04/2011 a las 03:30
  #3 (permalink)  
Antiguo 23/04/2011, 18:57
Dtc
 
Fecha de Ingreso: marzo-2011
Ubicación: México
Mensajes: 39
Antigüedad: 13 años, 2 meses
Puntos: 1
De acuerdo Respuesta: Errores raros en codigo correcto

Gracias por responder. He decido mejor eliminar la función "funcion1", lo que pasa es que pensaba utilizarla mas adelante pero he pensado en otra cosa que aplicaré después.

He corregido varias cosas. Y revisando linea por linea (ya que antes solo le dí un "vistazo"), me dí cuenta de que faltaba cerrar con un } el switch que está dentro del switch principal. Una vez hecho eso, dejaron de salir errores. Mi código, quedó así, y por ahora compila y funciona bien:

Código C:
Ver original
  1. /* -----------------Funciomático-----------------------
  2. -----Creador: Dtc Srni (Erick Renato Vega)-----------
  3. El programa evaluará funciones matemáticas, tanto funciones cuadráticas como cúbicas y lineales,
  4. ademas de guardar los resultados y datos en un archivo de texto.
  5. Caracteristicas:
  6. -Soporte para los 3 tipos de funciones soportadas (por el momento, en esta versión) con cualquier
  7. tipo de signo o valor.
  8. -Distinción de las variables, terminos independientes, coeficientes y exponentes.
  9. -El programa grabará dominios en variables, de uno en uno, en un máximo de 10, hasta que el usuario
  10. presione “n”
  11. http://www.dtcsrni.co.cc
  12. */
  13.  
  14.  
  15. /*Archivos de cabecera (prototipos de funciones de librería)*/
  16.  
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <math.h>
  21.  
  22.  
  23. /*Fin de archivos de cabecera (prototipos de funciones de librería)*/
  24.  
  25. /* Prototipos de Funciones */
  26. void fsimple (float coeficiente1, float dominio1, float dominio2, float dominio3, float dominio4, float dominio5, float dominio6, float dominio7, float dominio8, float dominio9, float dominio10, float termino1, float *rango1, float *rango2, float *rango3, float *rango4, float *rango5, float *rango6, float *rango7, float *rango8, float *rango9, float *rango10);
  27. /* Fin de prototipos de Funciones */
  28. /* Declaracion de Variables */
  29.  
  30. float f1, f2, coef1c1, coef2c1, coef2c2c, coef3c1, coef3c2, coef3c3, term1, term2, term3, dominio1d1, dominio1d2, dominio1d3, dominio1d4, dominio1d5, dominio1d6, dominio1d7, dominio1d8, dominio1d9, dominio1d10, dominio2d1, dominio2d2, dominio2d3, dominio2d4, dominio2d5, dominio2d6, dominio2d7, dominio2d8, dominio2d9, dominio2d10, dominio3d1, dominio3d2, dominio3d4, dominio3d5, dominio3d6, dominio3d7, dominio3d8, dominio3d9, dominio3d10, rango1r1, rango1r2, rango1r3, rango1r4, rango1r5, rango1r6, rango1r7, rango1r8, rango1r9, rango1r10, rango2r1, rango2r2, rango2r3, rango2r4, rango2r5, rango2r6, rango2r7, rango2r8, rango2r9, rango2r10, rango3r1, rango3r2, rango3r3, rango3r4, rango3r5, rango3r6, rango3r7, rango3r8, rango3r9, rango3r10;
  31. int funcioneleg, funcioneleg2;
  32.  
  33. /* Fin de declaración de Variables */
  34.  
  35. /* Inicio del proceso principal del programa */
  36.  
  37.  
  38. int main()
  39.  
  40. {
  41. printf("-------------------Funciomatico-----------------\n\n");
  42. printf("-Por Dtc Srni-\n\n");
  43.    /* Menú principal */
  44. printf("Bienvenido al sistema\n\nEste es el Funciomatico\nPara iniciar, elige y teclea el numero de funcion a evaluar:\n");
  45.    printf("1.- F(X)= x+1\n");
  46.    printf("2.- F(X)= 2x2+2x+1\n");
  47.    printf("3.- F(X)= 2x3+2x2+5x+1\n");
  48.    printf("4.- F(X)= 1/4x+2\n");
  49.    printf("5.- F(X)= 1/4x2+1/4x+5\n");
  50.    printf("6.- F(X)=1/4x+1/1/4x+1\n");
  51. scanf("%i",&funcioneleg);
  52.  
  53.     switch(funcioneleg)
  54.     {
  55.         case 1:
  56.             printf("El tipo de funcion elegida es F(X)= x+1\n");
  57.          printf("Por favor, escribe el valor del termino independiente (+-1):\n");
  58.          scanf("%f", &term1);
  59.          printf("Ahora, escriba el valor del coeficiente\n");
  60.          scanf("%f", &coef1c1);
  61.          printf("De cuantos dominios es la funcion a evaluar? \n1.- 2 dominios \n2.- 3 dominios \n3.- 4 dominios \n4.- 5 dominios \n5.- 6 dominios \n6.- 7 dominios \n7.- 8 dominios \n8.- 9 dominios \n9.- 10 dominios\n");
  62.          scanf("%i", &funcioneleg2);
  63.          switch(funcioneleg2)
  64.          {
  65.          case 1:
  66.            printf("Funcion de 2 dominios\n");
  67.            printf("Por favor, escribe el primer dominio y presiona enter: \n");
  68.            scanf("%f", &dominio1d1);
  69.            printf("Ahora, escribe el segundo dominio y presiona enter: \n");
  70.            scanf("%f", &dominio1d2);
  71.            fsimple(coef1c1, dominio1d1, dominio1d2, dominio1d3, dominio1d4, dominio1d5, dominio1d6, dominio1d7, dominio1d8, dominio1d9, dominio1d10, term1, &rango1r1, &rango1r2, &rango1r3, &rango1r4, &rango1r5, &rango1r6, &rango1r7, &rango1r8, &rango1r9, &rango1r10);
  72.            printf("\nEl dominio de la funcion F(X)=%fx+%f es:\n\nD{%f, %f}\n\nEl rango de la funcion es:\n\n R{%f, %f,}\n\n", coef1c1, term1, dominio1d1, dominio1d2, rango1r1, rango1r2);
  73.       system("pause");
  74.         break;
  75.          }
  76.         case 2:
  77.             printf("El tipo de funcion elegida es F(X)= 2x2+2x+1\n");
  78.             break;
  79.         case 3:
  80.             printf("El tipo de funcion elegida es F(X)= 2x3+2x2+5x+1\n");
  81.             break;
  82.         case 4:
  83.             printf("El tipo de funcion elegida es F(X)= 1/4x+2\n");
  84.             break;
  85.         case 5:
  86.             printf("El tipo de funcion elegida es F(X)= 1/4x2+1/4x+5\n");
  87.             break;
  88.         case 6:
  89.             printf("El tipo de funcion elegida es 1/4x+1/1/4x+1\n");
  90.             break;
  91.         default:
  92.             printf("Has ingresado un numero de opcion no valido, intentalo de nuevo\n");
  93.  
  94.  
  95.     }
  96.  
  97.    /* Fin de Menú principal */
  98.  
  99.  
  100.   return 0;
  101. }
  102.  
  103. /*Procesos de funciones para evaluar */
  104.  
  105.       void fsimple(float coeficiente1, float dominio1, float dominio2, float dominio3, float dominio4, float dominio5, float dominio6, float dominio7, float dominio8, float dominio9, float dominio10, float termino1, float *rango1, float *rango2, float *rango3, float *rango4, float *rango5, float *rango6, float *rango7, float *rango8, float *rango9, float *rango10)
  106.                 {
  107.  
  108.        *rango1 = (coeficiente1*dominio1)+termino1;
  109.        *rango2 = (coeficiente1*dominio2)+termino1;
  110.        *rango3 = (coeficiente1*dominio3)+termino1;
  111.        *rango4 = (coeficiente1*dominio4)+termino1;
  112.        *rango5 = (coeficiente1*dominio5)+termino1;
  113.        *rango6 = (coeficiente1*dominio6)+termino1;
  114.        *rango7 = (coeficiente1*dominio7)+termino1;
  115.        *rango8 = (coeficiente1*dominio8)+termino1;
  116.        *rango9 = (coeficiente1*dominio9)+termino1;
  117.        *rango10 = (coeficiente1*dominio10)+termino1;
  118.  
  119.                 }

Muchas gracias de nuevo!! :D

Por cierto, se que para indicarle a float que debe de mostrar tal cantidad de decimales y enteros se usa algo así como "%1.2f" (por ejemplo, para indicar que se debe de imprimir 1 numero entero y 2 decimales), pero como puedo hacer que solo se muestren decimales cuando los haya?, por que mi programa indicándole algo como esto (ejemplo):


Código C:
Ver original
  1. printf("\nEl dominio de la funcion F(X)=%.2fx+%.2f es:\n\nD{%.2f, %.2f}", coef1c1, term1, dominio1d1, dominio1d2);

Me muestra: "El dominio de la funcion F(X)=1.00x+10.00 es D{15.00, 20.00}"

Y si no hay números decimales resultantes, no quiero que muestre los dos ceros
¿Alguna idea?
__________________
La Web del Dtc
http://www.dtcsrni.tk
DtcSrni Technologies
http://technologies.dtcsrni.tk

Última edición por Dtc; 23/04/2011 a las 19:39

Etiquetas: correcto, errores, raros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:01.