Funciones !

Iniciado por ThronerAXE, 15 Abril 2013, 02:05 AM

0 Miembros y 1 Visitante están viendo este tema.

ThronerAXE

Buenas!
he comenzado con el tema de las funciones en lenguaje c, este es mi primer programa que hago, pero hay un error que no me deja que corra el programa. Debo crear un menu en el que el usuario pueda elejirlas siguientes opciones:
El calculo de una funcion racional.
El calculo del area y el perimetro de un triangulo acutangulo.
Finalizar.
Los errores me los da en la linea 55(Code has no effect) y en la linea 59(do statement must have while). Le he hechado bastante cabeza pero nada que doy con el error. Tambien tengo una duda, haciendo la funcion del triangulo, debo dar 2 salidas, y los pocos ejercicios que he hecho han sido con una sola salida, entonces en lo que pense fue en copiar la funcion y que cada una me retornara, por un lado el perimetro y por otro lado la altura.. entonces nose como sería la forma mas estetica de escribirlo para que me de las 2 salidas. este es el codigo.
//Programa 3 de Funciones
#include <stdio.h>
#include <conio.h>
#include <math.h>
//Prototipos
int menu(void);
float fun_met1(float);
float fun2_alt(float, float, float);
float fun2_per(float, float, float);

//Programa Principal
void main()
{ int opcion;
  float valorX,val_fun,angulo,ladoC,ladoA;

  do
  {
   switch(opcion)
   {
     case 1: clrscr();
             printf("\nIngrese el valor de h(x): ");
             scanf("%f",&valorX);
             val_fun=fun_met1(valorX);
             printf("\nEl valor de la funcion h(x) es de: ",val_fun);
             getch();
             break;
     case 2: clrscr();
             printf("\nIngrese el valor del angulo alfa en grados: ");
             scanf("%f",&angulo);
             printf("\nIngrese el valor del lado C: ");
             scanf("%f",&ladoC);
             printf("\nIngrese el valor del lado A: ");
             scanf("%f",&ladoA);
             printf("\nEL valor de la altura es de %f",fun2_alt(angulo,ladoC,ladoA));
             printf("\nEL valor del perimetro es de %f",fun2_per(angulo,ladoC,ladoA));
             getch();
             break;
   }
  }while((opcion=menu())!=3);
}
//Funciones
int menu(void)
{ int opc;

  printf("\t\t\tMENU");
  printf("\n\n1 para calculo de una funcion");
  printf("2 para calcular el area y perimetro de un triangulo");
  printf("3 para finalizar");
  do
  { printf("\nElija su opcion: ");
    scanf("%d",&opc);
    if(opc<1 || opc >3)
    { printf("Opcion incorrecta. Ingresela de nuevo: ");
      getch();
    }while(opc<1 || opc>3);
  return opc;
}

float fun_met1(float fun_x)
{
float h;
h=(pow(fun_x,3)+4)/sqrt(3+fun_x);
return h;
}

float fun2_alt(float falfa, float fc, float fa)
{
  fb=sqrt(pow(fc,2))-(pow(fa,2));
  fd=(fb*sin(90*M_PI/180))/sin(falfa*M_PI/180);
  fbeta=180-90-falfa;
  fe=(fb*sin(fbeta*M_PI/180))/sin(falfa*M_PI/180);
  ff=fe+fa;
  falt=(ff*fb)/2;
  return falt;
}

float fun2_per(float falfa, float fc, float fa)
{
  fb=sqrt(pow(fc,2))-(pow(fa,2));
  fd=(fb*sin(90*M_PI/180))/sin(falfa*M_PI/180);
  fbeta=180-90-falfa;
  fe=(fb*sin(fbeta*M_PI/180))/sin(falfa*M_PI/180);
  ff=fe+fa;
  fper=fd+fc+ff;
  return fper;
}
}


PD: muchos me han sugerido ya que no utilize la libreria conio.h por lo que no es standar, pero la profesora de la universidad lo evalua entonces debo utilizarla xD

rir3760

Los dos errores que mencionas se deben a que en esa función falta la llave de cierre del bucle do ... while:
int menu(void)
{
   int opc;

   printf("\t\t\tMENU");
   printf("\n\n1 para calculo de una funcion");
   printf("2 para calcular el area y perimetro de un triangulo");
   printf("3 para finalizar");
   
   do {
      printf("\nElija su opcion: ");
      scanf("%d",&opc);
     
      if (opc < 1 || opc > 3){
         printf("Opcion incorrecta. Ingresela de nuevo: ");
         getch();
      }
   /* } */ while(opc<1 || opc>3);
   
   return opc;
}


También hay otros errores, por ejemplo en la función principal:
void main()
{
   int opcion;
   float valorX,val_fun,angulo,ladoC,ladoA;
   
   do {
      switch(opcion) /* Proceso de la variable */
     
      /* ... */
         
   }while((opcion=menu())!=3); /* Lectura de la variable */
}

Primero procesas la opción mediante el switch y solo después lees el valor cuando debe ser al revés:
void main()
{
   int opcion;
   float valorX,val_fun,angulo,ladoC,ladoA;
   
   while ((opcion = menu()) != 3){ /* Lectura de la variable */
      switch(opcion) /* Proceso de la variable */
     
      /* ... */
         
   }
}


Cita de: ThronerAXE en 15 Abril 2013, 02:05 AMmuchos me han sugerido ya que no utilize la libreria conio.h por lo que no es standar, pero la profesora de la universidad lo evalua entonces debo utilizarla
Lo malo de esa biblioteca es que surgió con los compiladores Turbo C de Borland para MS-DOS. Como espero entenderás es algo ... viejo (o nostálgico, dependiendo de la perspectiva).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language