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

Problema en bucle for

Estas en el tema de Problema en bucle for en el foro de C/C++ en Foros del Web. Hola. He estado haciendo este ejercicio que venía propuesto en un manual que estoy leyendo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original /*Un programa que pida ...
  #1 (permalink)  
Antiguo 30/01/2012, 15:51
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Problema en bucle for

Hola.

He estado haciendo este ejercicio que venía propuesto en un manual que estoy leyendo:

Código C:
Ver original
  1. /*Un programa que pida datos de 8 personas: nombre, dia de nacimiento, mes de
  2. nacimiento, y año de nacimiento (que se deben almacenar en una tabla de structs).
  3. Después deberá repetir lo siguiente: preguntar un número de mes y mostrar en
  4. pantalla los datos de las personas que cumplan los años durante ese mes. Terminará
  5. de repetirse cuando se teclee 0 como número de mes.*/
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. int main()
  12. {
  13.     struct
  14.     {
  15.      char nombre[20];
  16.      int dia;
  17.      int mes;
  18.      int edad;
  19.      int ano;
  20.     }datos[8];
  21.    
  22.     int i,comprobar;
  23.    
  24.     for(i=0;i<=7;i++)
  25.     {
  26.      
  27.       printf("Introduce nombre\n");
  28.       scanf("%s",datos[i].nombre);
  29.      
  30.       printf("Introduce edad\n");
  31.       scanf("%d",&datos[i].edad);
  32.      
  33.       printf("Introduce mes de cumpleanos\n");
  34.       scanf("%d",&datos[i].mes);
  35.      
  36.       printf("Introduce ano de nacimiento\n");
  37.       scanf("%d",&datos[i].ano);
  38.       printf("\n\n");
  39.     }
  40.    
  41.     printf("Introduce el mes en el que quieres comprobar si alguna persona cumple anos\n");
  42.     scanf("%d",&comprobar);
  43.    
  44.     for(i=0;i<=7;i++)
  45.     {
  46.       if(comprobar==datos[i].mes)
  47.       {
  48.         printf("%s cumple %d anos este mes\n",datos[i].nombre,datos[i].edad+1);
  49.       }
  50.       if(comprobar!=datos[i].mes) printf("Nadie cumple anos este mes\n");
  51.     }
  52.    
  53.    
  54.     system("pause");
  55.     return 0;
  56.    
  57. }

El problema está en el bucle for del final.

Al ejecutar el programa, siempre sale "Nadie cumple años este mes" varias veces. He intentando poner "break", pero no sé si es correcto, o, en caso afirmativo, dónde colocarlo.

Muchas gracias.

Saludos.
  #2 (permalink)  
Antiguo 30/01/2012, 16:28
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: Problema en bucle for

podes crear una variable de tipo bool fuera del for con valor inicializado en true, dentro del for, si se cumple la condicion la cambias a false y para cuando termine de ejecutar el for, analizas si la variable que creste sigue valiendo true, si es asi imprimes que nadie cumple en ese mes

Código C:
Ver original
  1. bool nadie= true;
  2.  
  3. for(i=0;i<=7;i++)
  4.     {
  5.       if(comprobar==datos[i].mes)
  6.       {
  7.         printf("%s cumple %d anos este mes\n",datos[i].nombre,datos[i].edad+1);
  8.         nadie = false;
  9.       }
  10.     }
  11.  
  12. if (nadie) printf("Nadie cumple anos este mes\n");


espero que sea lo que buscar, saludos
  #3 (permalink)  
Antiguo 31/01/2012, 08:50
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema en bucle for

Muchas gracias por responder.

Me parece que su código no funciona bien, ya que no dice cuando "Nadie cumple años ese mes". Por otra parte, me gustaría hacerlo sin los valores bool, ya que aún no los he visto en el manual que estoy leyendo...

Gracias.

Saludos.
  #4 (permalink)  
Antiguo 31/01/2012, 09:37
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: Problema en bucle for

si funciona, pero lo podes cambiar como sigue:

Código C++:
Ver original
  1. int nadie= 1;
  2.  
  3. for(i=0;i<=7;i++)
  4.     {
  5.       if(comprobar==datos[i].mes)
  6.       {
  7.         printf("%s cumple %d anos este mes\n",datos[i].nombre,datos[i].edad+1);
  8.         nadie = 0;
  9.       }
  10.     }
  11. if (nadie == 1) printf("Nadie cumple anos este mes\n");

es lo mismo pero te cambie el tipo de variable a int, la idea es que la variable nadie te ayude a saber si alguien cumple años o no, si la variable vale 1 (valor por defecto) nadie cumple años y en caso de que dentro del for encontremos a alguien que cumpla años en el mes que se elige se la cambia a 0 para que la ultima condicion no se cumpla y no se imprima "nadie cumple anos este mes"
  #5 (permalink)  
Antiguo 31/01/2012, 09:53
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema en bucle for

Gracias de nuevo.

A lo que me refiero que no funciona bien, es que, por ejemplo, pones varios datos. Después, cuando te pide el dato de comprobar, pones un mes en el que sepas que no haya nadie que cumpla años, y, posteriormente, otro en el que sepas que sí hay alguien. A partir de ahí, todos los que meses que introduzcas y en ese no haya nadie que cumpla años, no te imprime ningún mensaje...

No sé si he explicado bien el problema...

Gracias.

Saludos.
  #6 (permalink)  
Antiguo 31/01/2012, 10:03
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: Problema en bucle for

pone el seguimiento que haces el programa, o sea, los datos que introducis linea por linea.... y si modificaste alguna parte del prgrama tambien porque no se donde esta el error, lo he probado y funciona
  #7 (permalink)  
Antiguo 31/01/2012, 10:09
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema en bucle for

Código C:
Ver original
  1. /*Un programa que pida datos de 8 personas: nombre, dia de nacimiento, mes de
  2. nacimiento, y año de nacimiento (que se deben almacenar en una tabla de structs).
  3. Después deberá repetir lo siguiente: preguntar un número de mes y mostrar en
  4. pantalla los datos de las personas que cumplan los años durante ese mes. Terminará
  5. de repetirse cuando se teclee 0 como número de mes.*/
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. int main()
  12. {
  13.     int nadie=1;
  14.     struct
  15.     {
  16.      char nombre[20];
  17.      int dia;
  18.      int mes;
  19.      int edad;
  20.      int ano;
  21.     }datos[8];
  22.    
  23.     int i,comprobar;
  24.    
  25.     for(i=0;i<=7;i++)
  26.     {
  27.      
  28.       printf("Introduce nombre\n");
  29.       scanf("%s",datos[i].nombre);
  30.      
  31.       printf("Introduce edad\n");
  32.       scanf("%d",&datos[i].edad);
  33.      
  34.       printf("Introduce mes de cumpleanos\n");
  35.       scanf("%d",&datos[i].mes);
  36.      
  37.       printf("Introduce ano de nacimiento\n");
  38.       scanf("%d",&datos[i].ano);
  39.       printf("\n\n");
  40.     }
  41.     do
  42.     {
  43.     printf("Introduce el mes en el que quieres comprobar si alguna persona cumple anos\n");
  44.     scanf("%d",&comprobar);
  45.    
  46.    for(i=0;i<=7;i++)
  47.     {
  48.       if(comprobar==datos[i].mes)
  49.       {
  50.         printf("%s cumple %d anos este mes\n",datos[i].nombre,datos[i].edad+1);
  51.         nadie = 0;
  52.       }
  53.     }
  54. if (nadie == 1) printf("Nadie cumple anos este mes\n");
  55.     }while(comprobar!=0);
  56.    
  57.    
  58.     system("pause");
  59.     return 0;
  60.    
  61. }
Si por ejemplo introduzco de datos:
1 2 2 2
2 2 2 2
3 2 2 2
4 2 2 2
5 2 2 2
6 2 2 2
7 2 2 2
8 2 2 2

Y, después, compruebo los meses 1 -> Sale que nadie cumple ese mes
2 -> Sale todos los que cumplen ese mes
3 -> Sale directamente que compruebe otro mes.

Gracias.
  #8 (permalink)  
Antiguo 31/01/2012, 11:01
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: Problema en bucle for

claro, cuando entra en el do..while si encuentra personas que cumplan años en ese mes te los imprime en pantalla, si no encuentra, la variable nadie recibe el valor 0, luego habria que volver a colocarla en 1 para que se pueda comprobar nuevamente, si no siempre valdra 0 en lo que queda del programa

Código C++:
Ver original
  1. do
  2.  
  3.     {
  4.      nadie= 1;
  5.     ....
  6.     }while(comprobar!=0)

si agregas esa linea dentro del do...while, cada vez que vuelva a empezar, la variable nadie vuelve a tomar el valor 1 para que se cumpla la ultima condicion en caso de que nadie cumpla años ese mes
  #9 (permalink)  
Antiguo 31/01/2012, 11:07
 
Fecha de Ingreso: enero-2012
Mensajes: 68
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Problema en bucle for

Ah, vale, muchísimas gracias.

Me ha quedado muy claro ^^

Gracias.

Saludos.

Etiquetas: bucle, programa, string, struct
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 07:17.