Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: barnix456 en 15 Noviembre 2012, 19:39 pm



Título: Ayuda con un cliclo while[C]
Publicado por: barnix456 en 15 Noviembre 2012, 19:39 pm
HOLA!! Miren tengo un problema en esta función que estoy haciendo, el man, si entra a la función, la primer opción del menú lo ejecuta con normalidad, el problema esta en la 2 y la 3, que si las ejecuta en primea instancia, pero si la vuelvo a ejecutar, no me hace el calculo, me da el mismo resultado que me dio en el calculo anterior... eso pasa con la 2 y la 3, en que esta mal...
 
Ha y otra duda que tengo, como regreso desde una funcion al main, yo le puse return main(), mi IDE me marca error, aunque si lo hace, cual es la forma correcta de hacerlo??

PD. Se que muchos dirán que es código muy grande, para algo tan simple, pero así me lo piden.
PD2: No se como ponerlo así en color-sito y todo, por eso lo pongo de esta manera

aquí esta el código:
Código:
void whiile(void)
{
    int x,ba,po,cont=1,x1,q,qw,suma=0,pro,z,sumaa=0,qwe,cont2=1;
b:
printf("\t\t QUE EJEMPLO DESEA USAR:\n\n");
printf("\t*************************************************\n");
printf("\t*\t EJEMPLOS EN WHILE\t\t\t*\n");
printf("\t*\t\t\t\t\t\t*\n");
printf("\t*\t [1] POTENCIA DE UN NUMERO\t\t*\n");
printf("\t*\t\t\t\t\t\t*\n");
printf("\t*\t [2] LA MEDIA DE UNA LISTA DE X NUM \t*\n");
printf("\t*\t\t\t\t\t\t*\n");
printf("\t*\t [3] LA SUMA DE X NUMEROS\t\t*\n");
printf("\t*\t\t\t\t\t\t*\n");
printf("\t*\t [4] REGRESAR AL MEMU PRINCIPAL\t\t*\n");
printf("\t*\t\t\t\t\t\t*\n");
printf("\t*\t [5] SALIR\t\t\t\t*\n");
printf("\t*************************************************\n\n");
scanf("%d",&x);

if(x>5 || x<1){
printf("Es una opcion inconrrecta (Precione ENTER para volver a seleccionar)\n");
getchar();
getchar();
goto b;
}

if(x==1){
    system("clear");
printf("Este ejemplo funciona de esta manera:\n");
printf("\n");
printf("Para sacar la potencia es de esta manera 2^3=2x2x2\n");
printf("Basandonos en esta forma, el ciclo while, nos ayuda a mantener un limite\n");
printf("por lo cual al usuario solo se le pide la base y la potencia\n");
printf("\n");
printf("El ciclo while queda de esta manera:\n");
printf("\n");
printf("Se pide la base y la potencia\n");
printf("Se inicializa x=base\n");
printf("while(contador<potencia)\n");
printf("x=x*base\n");
printf("Mientras el ciclo sea verdadero, se seguira ejecutando\n");
printf("\n");
printf("VAMOS AL CALCULO(precione ENTER)\n");
getchar();
getchar();
system("clear");

    printf("Dame la base y la potencia a calcular\n");
scanf("%d %d", &ba, &po);
system("clear");
x1=ba;
while (cont<po)
{
x1=x1*ba;
cont++;
}
printf("El resultado es: %d\n",x1);
printf("\n");
printf("Regresar al menu while (precione ENTER)\n");
getchar();
getchar();
goto b;
}

if (x==2){
    system("clear");
printf("Este ejemplo funciona de esta manera:\n");
printf("\n");
printf("Para sacar la media de x numeros primero se suman los numeros y se dividen entre el total de nuemeros\n");
printf("Basandonos en esta forma, el ciclo while, se repetira hasta que se llege al tope\n");
printf("El usuario solo tendra que incertar cuantos numeros a calcular y los numeros\n");
printf("\n");
printf("El ciclo while queda de esta manera:\n");
printf("\n");
printf("Se piden cuantos numeros seran y  lo numeros\n");
printf("Se inicializa: contador=1\n");
printf("while(contador<=total_de_numeros)\n");
printf("se piden los numeros y se suman, despues se dividen entre el total de numeros\n");
printf("El contador se va incrementado de esta manera: contador++\n");
printf("Mientras el ciclo sea verdadero, se seguira ejecutando\n");
printf("\n");
printf("VAMOS AL CALCULO(precione ENTER)\n");
getchar();
getchar();
system("clear");
while(getchar() != '\n');
printf("Cuantos numeros desea calcular?\n");
scanf("%d",&q);
system("clear");
while(cont<=q)
{
printf("Escriba el primer numero: \n");
scanf("%d",&qw);
suma+=qw;
pro=suma/q;
cont++;
}
system("clear");
printf("La media de los numeros es: %d\n",pro);
printf("\n");
printf("Regresar al menu while (precione ENTER)\n");
getchar();
getchar();
goto b;
}

    if(x==3){
    system("clear");
printf("Este ejemplo funciona de esta manera:\n");
printf("\n");
printf("Para hacer la suma de x numeros, se emplea un metodo como el anterior\n");
printf("Tomamos la cantidad de numeros y ejecutamos nuestro ciclo de control\n");
printf("El usuario solo tendra que incertar cuantos numeros a calcular y los numeros\n");
printf("\n");
printf("El ciclo while queda de esta manera:\n");
printf("\n");
printf("Se piden cuantos numeros se van a sumar\n");
printf("Se inicializa: contador=1\n");
printf("while(contador<=total_de_numeros)\n");
printf("se piden los numeros y se suman\n");
printf("El contador se va incrementado de esta manera: contador++\n");
printf("Mientras el ciclo sea verdadero, se seguira ejecutando\n");
printf("\n");
printf("VAMOS AL CALCULO(precione ENTER)\n");
getchar();
getchar();
system("clear");
    while(getchar() != '\n');
printf("Cuantos numeros desea sumar?\n");
scanf("%d",&z);
system("clear");
while(cont2<=z)
{
printf("Escriba el primer numero: \n");
scanf("%d",&qwe);
sumaa+=qwe;
cont2++;
}
system("clear");
printf("La suma de los numeros es: %d\n",sumaa);
printf("\n");
printf("Regresar al menu while (precione ENTER)\n");
getchar();
getchar();
goto b;
    }

    if(x==4)
    return main();  //con esta opccion quiero regresar al menu pero me marca error aunque si lo hace

    if(x==5)
    exit(0);
}

GRACIAS POR PASAR...!!


Título: Re: Ayuda con un cliclo while[C]
Publicado por: rir3760 en 16 Noviembre 2012, 04:16 am
Ha y otra duda que tengo, como regreso desde una funcion al main
Mediante una sentencia "return;" si el tipo de retorno de la función es "void", en cualquier otro caso debe ser "return N;" donde "N" es un valor del tipo apropiado.

yo le puse return main(), mi IDE me marca error, aunque si lo hace, cual es la forma correcta de hacerlo??
No. Debes utilizar:
Código
  1. return;
Así la función finaliza y el control retorna a quien llamo a la función.

Un saludo


Título: Re: Ayuda con un cliclo while[C]
Publicado por: barnix456 en 18 Noviembre 2012, 14:18 pm
Hola rir3760 gracias por contestar, aunque la verdad aun no se que pasa con el while, por que a la hora de hacer otro calculo me da el resultado del calculo anterior.... gracias por contestar..!!!


Título: Re: Ayuda con un cliclo while[C]
Publicado por: Perrito08 en 18 Noviembre 2012, 16:21 pm
Ay ay... ¿Quién te pide que hagas ese código tan largo y enrevesado?
Código
  1. #include <stdio.h>
  2.  
  3. float potencia ()
  4. { float a, c; int b;
  5. printf ("Base: "); scanf ("%f", &a); printf ("Exponente: "); scanf ("%d", &b);
  6. if (b>0) { c=a; while (b>1) {c*=a; b--;} return c; }
  7. if (b<0) { b=-b; c=a; while (b>1) {c*=a; b--;} return 1/c; }
  8. if (b==0) return 1;
  9. }
  10.  
  11. float media ()
  12. { int num; printf ("Cuantos numeros? "); scanf ("%d", &num); float a=0, c; int b;
  13. for (b=0; b<num; b++) { printf ("Numero %d: ", b+1); scanf ("%f", &c); a+=c; }
  14. return a/num;
  15. }
  16.  
  17. float suma ()
  18. { int num; printf ("Cuantos numeros? "); scanf ("%d", &num); float a=0, c; int b;
  19. for (b=0; b<num; b++) { printf ("Numero %d: ", b+1); scanf ("%f", &c); a+=c; }
  20. return a;
  21. }
  22.  
  23. int main () { int opt; printf ("EJEMPLO CON WHILE\n 1. Potencia de un numero\n 2. Media de X numeros\n 3. Suma de X numeros\n 4. Salir\n Opcion: "); scanf ("%d", &opt);
  24. switch (opt)
  25. { case 1: printf ("Resultado: %f\n", potencia ()); break;
  26. case 2: printf ("Resultado: %f\n", media ()); break;
  27. case 3: printf ("Resultado: %f\n", suma ()); break;
  28. case 4: break;
  29. default: return -1;
  30. }
  31. return 0;
  32. }
  33.  


Título: Re: Ayuda con un cliclo while[C]
Publicado por: barnix456 en 19 Noviembre 2012, 21:07 pm
HOLA Perrito08

Gracias por responder...!! muy buen codigo