C/Visual C - Ayuda con un calendario

 
Vista:

Ayuda con un calendario

Publicado por john_mvf (5 intervenciones) el 31/10/2002 06:29:16
estoy aprendiendo a programar y tengo mas de dos semanas dandole la vuelta a estos programas y no encuentro como hacerlos solo he podido hacer el primero osea el a) y los demas no encuentro como, les agradeceria mucho si me ayudaran.

Poblemas del calendario. Un año es bisiesto (año de 366 dias, en el cual febrero tiene 29 en vez de 28 dias) siempre que sea un multiplo de 4,excepto los años que sean multiplos de 100, los cuales seran bisiestos solamente si son tambien multiplos de 400. Sabiendo que en enero 1 de 1800 fue miercoles:

a)haga una funcion bisiesto(a), la cual retorne 1 si a corresponde al numero de un año bisiesto, de lo contrario retorna 0.

b)Haga un programa que lea cualquier fecha (dia/mes/año) e imprima el dia de la semana correspondiente.

c)Escriba un programa que imprima en los proximos 10 los años en los cuales habra "fin de semana largo" debido al dia de la independencia nacional (27 de febrero en la Republica Dominicana)".
esto quiere decir si el 27 de febrero cae en viernes o lunes, entoces seria un fin de semana largo

d)Haga una funcion void princal(a), la cual imprima por pantalla un calendario correspondiente al año a.

Le agradeceria mucho a quien me pueda ayudar, o por lo menos me de una opinion, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problemas de calendario en C

Publicado por Alejandro (913 intervenciones) el 31/03/2025 18:03:23
Aquí tienes una guía para resolver cada uno de los problemas del calendario que mencionaste. Te proporcionaré ejemplos de código en C para cada uno de los puntos.

a) Función `bisiesto(a)`



Esta función verifica si un año es bisiesto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int bisiesto(int a) {
    if ((a % 4 == 0 && a % 100 != 0) || (a % 400 == 0)) {
        return 1; // Es bisiesto
    }
    return 0; // No es bisiesto
}
 
int main() {
    int año;
    printf("Ingrese un año: ");
    scanf("%d", &año);
    if (bisiesto(año)) {
        printf("%d es un año bisiesto.\n", año);
    } else {
        printf("%d no es un año bisiesto.\n", año);
    }
    return 0;
}

b) Programa que imprime el día de la semana correspondiente



Para calcular el día de la semana, puedes usar el algoritmo de Zeller.

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
32
33
34
#include <stdio.h>
 
int diaSemana(int dia, int mes, int año) {
    if (mes < 3) {
        mes += 12;
        año--;
    }
    int k = año % 100;
    int j = año / 100;
    int f = dia + (13 * (mes + 1)) / 5 + k + (k / 4) + (j / 4) - (2 * j);
    return (f % 7 + 7) % 7; // Ajustar para que sea positivo
}
 
const char* nombreDia(int dia) {
    switch (dia) {
        case 0: return "Sábado";
        case 1: return "Domingo";
        case 2: return "Lunes";
        case 3: return "Martes";
        case 4: return "Miércoles";
        case 5: return "Jueves";
        case 6: return "Viernes";
        default: return "";
    }
}
 
int main() {
    int dia, mes, año;
    printf("Ingrese una fecha (dia/mes/año): ");
    scanf("%d/%d/%d", &dia, &mes, &año);
    int diaSemanaResultado = diaSemana(dia, mes, año);
    printf("El día de la semana es: %s\n", nombreDia(diaSemanaResultado));
    return 0;
}

c) Programa que imprime los años con "fin de semana largo"



Este programa verifica si el 27 de febrero cae en viernes o lunes.

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
#include <stdio.h>
 
int diaSemana(int dia, int mes, int año) {
    if (mes < 3) {
        mes += 12;
        año--;
    }
    int k = año % 100;
    int j = año / 100;
    int f = dia + (13 * (mes + 1)) / 5 + k + (k / 4) + (j / 4) - (2 * j);
    return (f % 7 + 7) % 7; // Ajustar para que sea positivo
}
 
int main() {
    int añoActual = 2025; // Cambia esto al año actual
    printf("Años con fin de semana largo (27 de febrero):\n");
    for (int i = 0; i < 10; i++) {
        int año = añoActual + i;
        int diaSemana27Febrero = diaSemana(27, 2, año);
        if (diaSemana27Febrero == 1 || diaSemana27Febrero == 6) { // 1 = Domingo, 6 = Viernes
            printf("%d\n", año);
        }
    }
    return 0;
}

d) Función `princal(a)` para imprimir un calendario



Aquí tienes una función básica que imprime un calendario para un año dado. Este es un ejemplo simple que no incluye todos los detalles, pero te dará una idea de cómo comenzar.

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
32
33
34
35
36
37
#include <stdio.h>
 
void imprimirMes(int mes, int año) {
    const char* nombresMeses[] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
                                   "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
    printf("\n%s %d\n", nombresMeses[mes - 1], año);
    printf("Dom Lun Mar Mie Jue Vie Sab\n");
 
    int diasEnMes[] = {31, bisiesto(año) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int diaInicio = diaSemana(1, mes, año); // Día de la semana del primer día del mes
 
    for (int i = 0; i < diaInicio; i++) {
        printf("    "); // Espacios en blanco para los días anteriores
    }
 
    for (int dia = 1; dia <= diasEnMes[mes - 1]; dia++) {
        printf("%2d ", dia);
        if ((dia + diaInicio) % 7 == 0) {
            printf("\n"); // Nueva línea cada semana
        }
    }
    printf("\n");
}
 
void princal(int año) {
    for (int mes = 1; mes <= 12; mes++) {
        imprimirMes(mes, año);
    }
}
 
int main() {
    int año;
    printf("Ingrese un año para imprimir el calendario: ");
    scanf("%d", &año);
    princal(año);
    return 0;
}

Resumen



- a) La función `bisiesto(a)` verifica si un año es bisiesto.
- b) El programa calcula el día de la semana para una fecha dada.
- c) El programa imprime los próximos 10 años en los que el 27 de febrero será un fin de semana largo.
- d) La función `princal(a)` imprime un calendario para un año dado.

Espero que estos ejemplos te ayuden a avanzar en tu aprendizaje de programación. ¡Buena suerte, John!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar