🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi data e ora in C

Codegrind TeamJul 22 2023

Ecco degli esercizi semplici con soluzione per praticare le basi data e ora in C.

Esercizio 1

Stampare la data corrente:
#include <stdio.h>
#include <time.h>

int main() {
    time_t t = time(NULL);
    struct tm *data = localtime(&t);

    printf("Data corrente: %02d/%02d/%04d\n", data->tm_mday, data->tm_mon + 1, data->tm_year + 1900);

    return 0;
}

Esercizio 2

Ottenere l'ora corrente:
#include <stdio.h>
#include <time.h>

int main() {
    time_t t = time(NULL);
    struct tm *data = localtime(&t);

    printf("Ora corrente: %02d:%02d:%02d\n", data->tm_hour, data->tm_min, data->tm_sec);

    return 0;
}

Esercizio 3

Calcolare la differenza in giorni tra due date:
#include <stdio.h>
#include <time.h>

int main() {
    struct tm data1, data2;

    printf("Inserisci la prima data (gg/mm/aaaa): ");
    scanf("%d/%d/%d", &data1.tm_mday, &data1.tm_mon, &data1.tm_year);

    printf("Inserisci la seconda data (gg/mm/aaaa): ");
    scanf("%d/%d/%d", &data2.tm_mday, &data2.tm_mon, &data2.tm_year);

    time_t t1 = mktime(&data1);
    time_t t2 = mktime(&data2);

    double diff_in_sec = difftime(t2, t1);
    int diff_in_giorni = diff_in_sec / (60 * 60 * 24);

    printf("La differenza in giorni tra le due date è: %d\n", diff_in_giorni);

    return 0;
}

Esercizio 4

Aggiungere un numero di giorni a una data:
#include <stdio.h>
#include <time.h>

int main() {
    struct tm data;
    int giorni_da_aggiungere;

    printf("Inserisci una data (gg/mm/aaaa): ");
    scanf("%d/%d/%d", &data.tm_mday, &data.tm_mon, &data.tm_year);

    printf("Inserisci il numero di giorni da aggiungere: ");
    scanf("%d", &giorni_da_aggiungere);

    data.tm_mday += giorni_da_aggiungere;

    time_t t = mktime(&data);

    printf("La data risultante è: %02d/%02d/%04d\n", data.tm_mday, data.tm_mon + 1, data.tm_year + 1900);

    return 0;
}

Esercizio 5

Calcolare l'età a partire dalla data di nascita:
#include <stdio.h>
#include <time.h>

int main() {
    struct tm data_nascita;

    printf("Inserisci la data di nascita (gg/mm/aaaa): ");
    scanf("%d/%d/%d", &data_nascita.tm_mday, &data_nascita.tm_mon, &data_nascita.tm_year);

    time_t t = time(NULL);
    struct tm *data_corrente = localtime(&t);

    int anni = data_corrente->tm_year + 1900 - (data_nascita.tm_year + 1900);

    printf("Età attuale: %d anni\n", anni);

    return 0;
}

Esercizio 6

Verificare se un anno è bisestile:
#include <stdio.h>
#include <stdbool.h>

bool isBisestile(int anno) {
    if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
        return true;
    } else {
        return false;
    }
}

int main() {
    int anno;

    printf("Inserisci un anno: ");
    scanf("%d", &anno);

    if (isBisestile(anno)) {
        printf("%d è un anno bisestile.\n", anno);
    } else {
        printf("%d non è un anno bisestile.\n", anno);
    }

    return 0;
}

Esercizio 7

Calcolare il numero di giorni in un mese di un anno specifico:
#include <stdio.h>

int calcolaGiorniMese(int mese, int anno) {
    int giorni;

    switch (mese) {
        case 2:
            if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
                giorni = 29;
            } else {
                giorni = 28;
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            giorni = 30;
            break;
        default:
            giorni = 31;
    }

    return giorni;
}

int main() {
    int mese, anno;

    printf("Inserisci il numero del mese: ");
    scanf("%d", &mese);

    printf("Inserisci l'anno: ");
    scanf("%d", &anno);

    int giorni = calcolaGiorniMese(mese, anno);

    printf("Il mese %d dell'anno %d ha %d giorni.\n", mese, anno, giorni);

    return 0;
}

Esercizio 8

Verificare se un anno è un anno bisestile o un anno secolare:
#include <stdio.h>
#include <stdbool.h>

bool isBisestile(int anno) {
    if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
        return true;
    } else {
        return false;
    }
}

bool isAnnoSecolare(int anno) {
    if (anno % 100 == 0) {
        return true;
    } else {
        return false;
    }
}

int main() {
    int anno;

    printf("Inserisci un anno: ");
    scanf("%d", &anno);

    if (isBisestile(anno)) {
        printf("%d è un anno bisestile.\n", anno);
    } else {
        printf("%d non è un anno bisestile.\n", anno);
    }

    if (isAnnoSecolare(anno)) {
        printf("%d è un anno secolare.\n", anno);
    } else {
        printf("%d non è un anno secolare.\n", anno);
    }

    return 0;
}

Esercizio 9

Calcolare la data del giorno successivo:
#include <stdio.h>
#include <time.h>

int main() {
    struct tm data;

    printf("Inserisci una data (gg/mm/aaaa): ");
    scanf("%d/%d/%d", &data.tm_mday, &data.tm_mon, &data.tm_year);

    time_t t = mktime(&data);

    t += 86400; // Aggiungiamo 24 ore (60 secondi * 60 minuti * 24 ore)

    struct tm *data_successiva = localtime(&t);

    printf("La data successiva è: %02d/%02d/%04d\n", data_successiva->tm_mday, data_successiva->tm_mon + 1, data_successiva->tm_year + 1900);

    return 0;
}

Esercizio 10

Calcolare il numero di settimane in un anno:
#include <stdio.h>

int calcolaSettimaneAnno(int anno) {
    if ((anno % 4 == 0 && anno % 100 != 0) || anno % 400 == 0) {
        return 53;
    } else {
        return 52;
    }
}

int main() {
    int anno;

    printf("Inserisci un anno: ");
    scanf("%d", &anno);

    int settimane = calcolaSettimaneAnno(anno);

    printf("L'anno %d ha %d settimane.\n", anno, settimane);

    return 0;
}