#include <stdio.h>

int main()
{
int day[30],
    month[11],
    year[2] = { 2000, 2001 };
int combinations[743];

printf("Days:\n");

for (int i = 1; i <= 31; i++)
{
    day[i - 1] = i;
    printf("%d ", day[i-1]);
}

printf("\n\nMonth:\n");

for (int j = 1; j <= 12; j++)
{
    month[j - 1] = j;
    printf("%d ", day[j - 1]);
}

printf("\n\nYear:\n%d %d\n\n", year[0], year[1]);

for (int x = 0, y = 0, z = 0, k = 0;
    x <= 30, y <= 11, z <= 1, k <= 743;
    x++, y++, z++, k++)
{
    if (x == 31)
    {
        x = 0;
    }

    if (y == 11)
    {
        y = 0;
    }

    combinations[k] = day[x],".",month[y],".",year[0];
}

for (int a = 0; a <= 20; a++)
{
    printf("Combination: %d \n", combinations[a]);
}

getch();}

Quiero hacer un programa que imprima todas las combinaciones para los cumpleaños de 2000,2001 personas, pero obtengo algo extraño en el resultado.

Se ve así:

Días: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Mes: 1 2 3 4 5 6 7 8 9 10 11 12

Año: 2000 2001

Combinación: 1 Combinación: 2 Combinación: 3 Combinación: 4 Combinación: 5 Combinación: 6 Combinación: 7 Combinación: 8 Combinación: 9 Combinación: 10 Combinación: 11 Combinación: 12 Combinación: 13 Combinación: 14 Combinación: 15 Combinación: 16 Combinación: 17 Combinación: 18 Combinación: 19 Combinación: 20 Combinación: 21

c
-2
Yuriy 16 oct. 2018 a las 18:30

2 respuestas

La mejor respuesta
#include <stdio.h>

int main()
{

//changed days to 31 and months to 12

int day[31],
    month[12],
    year[2] = { 2000, 2001 };

//made three arrays one for days,one for months,one for year storage, or you can use structure array, structure should have three fields
int combinations1[744];
int combinations2[744];
int combinations3[744];

printf("Days:\n");


for (int i = 1; i <= 31; i++)
{
    day[i - 1] = i;
    printf("%d ", day[i-1]);
}

printf("\n\nMonth:\n");

for (int j = 1; j <= 12; j++)
{
    month[j - 1] = j;
    printf("%d ", day[j - 1]);
}

printf("\n\nYear:\n%d %d\n\n", year[0], year[1]);

int x,y,z,k=0;

//this will be code for storing all combination of days, looping through all days of a month of a year, then to next month and finally to next year

for(x = 0; x < 2 ; x ++)
{
    for(y = 0; y < 12; y ++)
    {
        for(z = 0; z < 31; z++)
    {   
    combinations1[k]=z+1;
    combinations2[k]=y+1;
    combinations3[k]=year[x];   
k++;
}
}
}

// printing all combinations

for (int a = 0; a < 744; a++)
{
    printf("Combination: %d.%d.%d\n", combinations1[a],combinations2[a],combinations3[a]);
}

//getch();
}

He explicado el código en los comentarios. Lea los comentarios para comprender

0
anupam691997 16 oct. 2018 a las 16:38

En primer lugar, errores rápidos allí:

  • En el segundo ciclo, está imprimiendo la matriz de días, la única razón por la que la salida es correcta es porque los números son los mismos y el ciclo se detiene en 12. De todos modos, debería arreglar eso, por el bien de una buena programación.
  • El último ciclo no debería hacerse así, literalmente estás pidiendo errores. Divida ese ciclo en 3 diferentes. El ciclo externo es el año, se ejecutará dos veces (2000, 2001), el ciclo interno iterará 12 veces (ese será el mes) y el último iterará 31 veces (esos serán los días)

Hacerlo así, hace que sea mucho más fácil de leer y hacerlo bien, ya que en tu código ese ciclo solo se ejecutará dos veces, ya que Z se detiene en 2 y lo aumentas en cada iteración.

for(year = 0; year < 2 ; year ++)
    for(month = 0; month < 12; month ++)
        for(day = 0; day < 31; day++)
            //combination code goes here

Por último, si desea guardar la fecha, no puede hacerlo como un int, a menos que sume los días y lo use como referencia, si desea algo como "11-05-2000", cree una estructura para eso o guárdelo como una cadena. En segundo lugar, está asumiendo 31 por cada mes ...

Si tienes más preguntas, no dudes en preguntar :)

1
Pedro Lima 16 oct. 2018 a las 16:06