Ayuda con un cliclo while[C]

Iniciado por barnix456, 15 Noviembre 2012, 19:39 PM

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

barnix456

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:
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...!!
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

rir3760

Cita de: barnix456 en 15 Noviembre 2012, 19:39 PMHa 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.

Cita de: barnix456 en 15 Noviembre 2012, 19:39 PMyo le puse return main(), mi IDE me marca error, aunque si lo hace, cual es la forma correcta de hacerlo??
No. Debes utilizar:
return;
Así la función finaliza y el control retorna a quien llamo a la función.

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

barnix456

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..!!!
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov

Perrito08

Ay ay... ¿Quién te pide que hagas ese código tan largo y enrevesado?

#include <stdio.h>

float potencia ()
{ float a, c; int b;
printf ("Base: "); scanf ("%f", &a); printf ("Exponente: "); scanf ("%d", &b);
if (b>0) { c=a; while (b>1) {c*=a; b--;} return c; }
if (b<0) { b=-b; c=a; while (b>1) {c*=a; b--;} return 1/c; }
if (b==0) return 1;
}

float media ()
{ int num; printf ("Cuantos numeros? "); scanf ("%d", &num); float a=0, c; int b;
for (b=0; b<num; b++) { printf ("Numero %d: ", b+1); scanf ("%f", &c); a+=c; }
return a/num;
}

float suma ()
{ int num; printf ("Cuantos numeros? "); scanf ("%d", &num); float a=0, c; int b;
for (b=0; b<num; b++) { printf ("Numero %d: ", b+1); scanf ("%f", &c); a+=c; }
return a;
}

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);
switch (opt)
{ case 1: printf ("Resultado: %f\n", potencia ()); break;
case 2: printf ("Resultado: %f\n", media ()); break;
case 3: printf ("Resultado: %f\n", suma ()); break;
case 4: break;
default: return -1;
}
return 0;
}

barnix456

HOLA Perrito08

Gracias por responder...!! muy buen codigo
"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov