elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Duda con bucle
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Duda con bucle  (Leído 3,473 veces)
n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
[C] Duda con bucle
« en: 1 Septiembre 2016, 22:39 pm »

Buenas, tengo una duda sencilla, la cosa es que dentro de un while tengo dos bucles.

Primer bucle si se cumple, cambia el "flag" del while por lo que debería terminar allí y no ejecutarse el segundo bucle. La cosa es que al cumplirse el primer bucle y cambia correctamente el flag, primero ejecuta el segundo bucle y luego termina el WHILE.

Ahora mi pregunta, ¿existe alguna manera de que se lea la condicion del WHILE dentro de este sin que sea con un IF?. Es más que nada una duda para ampliar conocimientos, y no meter IF's donde no sea necesario. Porque me parece ridículo tener un WHILE y salir de este mediante una condición.

Gracias!


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C] Duda con bucle
« Respuesta #1 en: 1 Septiembre 2016, 22:59 pm »

Un if es lo más rápido. No hay nada "especial".

Código
  1. while (...){
  2.    while(...){...}
  3.   if(...) break;
  4.   while(...){...}
  5. }

Hablas de ese if, no? Si es así, no hay ninguna forma más "rápida".


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] Duda con bucle
« Respuesta #2 en: 1 Septiembre 2016, 23:10 pm »

Te propongo lo siguiente:

Código
  1. bool entrar = true;
  2. do {
  3. while( ... && entrar) {
  4. ...
  5. entrar = false;
  6. }
  7. while(... && entrar){
  8. ..
  9. }
  10. }while(entrar);
En línea

n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: [C] Duda con bucle
« Respuesta #3 en: 1 Septiembre 2016, 23:13 pm »

Si exactamente eso, bueno veo que esa parte no podre modificarla, entonces expongo otra duda.

Mando una variable local de main, llamesmola vof en falso, a una funcion booleana que la cambia a verdadero. Todo esto surge dentro del WHILE, y que justamente es el flag de este.

Ahora al devolver la variable vof a main, deberia aplicarla al famoso, "if(vof)break;", pero me obvia la variable, como si seguiria en falso. Ya intente poniendola en global, algun consejo? Adjunto codigo.

Código:
while(!termina(ganador)){
printf("\nJuega jugador X\t");
fflush(stdout);
scanf("%c", &mov);
getchar();
movimientox(mov);
termina(ganador);
if(ganador)break;

printf("\nJuega jugador O\t");
fflush(stdout);
scanf("%c", &mov2);
getchar();
movimiento0(mov2);
termina(ganador);
}


bool termina(bool ganador){  //FUNCION
    int x, y;

    for(x=0;x<3;x++){
    y=0;
    if(tateti[x][y]==tateti[x][y+1] && tateti[x][y]==tateti[x][y+2]){
        if(tateti[x][y]=='X')printf("GANO EL JUGADOR X, FELICITACIONES!");
        if(tateti[x][y]=='O')printf("GANO EL JUGADOR O, FELICITACIONES!");
        ganador=true;
        }}

for(y=0;y<3;y++){
    x=0;
    if(tateti[x][y]==tateti[x+1][y] && tateti[x][y]==tateti[x+2][y]){
        if(tateti[x][y]=='X')printf("GANO EL JUGADOR X, FELICITACIONES!");
        if(tateti[x][y]=='O')printf("GANO EL JUGADOR O, FELICITACIONES!");
        ganador=true;
    }}

    return (ganador);

    }


Se que no es recomendable imprimir o leer en una funcion, pero es un programa sencillo y no quise explayarlo mucho mas.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] Duda con bucle
« Respuesta #4 en: 1 Septiembre 2016, 23:17 pm »

Código
  1. ganador = termina(ganador);

La variable cuando la pasas a la funcion, se pasa una copia del valor, y no la variable como tal. Entonces cuando el la funcion llamada se modifica el valor, en realidad estas modificando el valor de la copia, no el original.

La unica forma de hacer que se modifique el valor real es mandando un apuntador a la misma.

Saludos!

En línea

n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: [C] Duda con bucle
« Respuesta #5 en: 1 Septiembre 2016, 23:20 pm »

Cierto, me faltaba esa parte, pero seria lo mismo que poner asi if(termina(ganador)), no lo hago porque de esa manera entra nuevamente a la funcion, por lo que imprime nuevamente el printf.

El problema de porque imprimi dentro de la funcion es para diferenciar rapidamente el ganador. De ultima deberia cambiar eso.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] Duda con bucle
« Respuesta #6 en: 2 Septiembre 2016, 14:40 pm »

Hola si te sirve de algo hice una funcion para evaluar un tablero de tateti en base a tu post de hace dias.

Mira: http://foro.elhacker.net/programacion_cc/optimizar_evaluacion_de_juego_de_tateti-t456912.0.html

Saludos
En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: [C] Duda con bucle
« Respuesta #7 en: 2 Septiembre 2016, 18:03 pm »

No soy experto en C++, pero los que sí lo son me tienen dicho que no quieren ver break ni por asomo. Probablemente es mejor usar if como te dijo Alberto.
En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
dato000


Desconectado Desconectado

Mensajes: 3.034



Ver Perfil
Re: [C] Duda con bucle
« Respuesta #8 en: 2 Septiembre 2016, 21:28 pm »

No soy experto en C++, pero los que sí lo son me tienen dicho que no quieren ver break ni por asomo. Probablemente es mejor usar if como te dijo Alberto.

Eso es solo un tecnisismo, realmene un break es simplemente una opción para romper un ciclo y condición y seguir adelante con un procedimiento, no deberia representar mayor problema si se usa adecuadamente. En cualquier while casi que es vital su uso.
En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,579 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
duda con bucle for
Java
andaluz 1 2,424 Último mensaje 4 Mayo 2010, 22:35 pm
por Chuidiang
Duda bucle do...while
PHP
elkiy 2 2,126 Último mensaje 22 Febrero 2013, 15:17 pm
por elkiy
Duda bucle do while « 1 2 »
Programación C/C++
program_10 10 4,514 Último mensaje 11 Enero 2015, 17:11 pm
por Yoel Alejandro
Duda C# Bucle While.
.NET (C#, VB.NET, ASP)
FKT 5 2,526 Último mensaje 18 Agosto 2015, 16:05 pm
por FKT
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines