🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Data e Ora C++

Codegrind Team•Jul 22 2023

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

Esercizio 1

Scrivi un programma che stampi la data e l'ora correnti.
#include <iostream>
#include <ctime>
using namespace std;

int main() {
    // Ottieni il tempo corrente
    time_t tempoCorrente = time(0);

    // Converti il tempo corrente in una stringa
    char* dataOraStringa = ctime(&tempoCorrente);

    cout << "La data e l'ora correnti sono: " << dataOraStringa << endl;

    return 0;
}

Esercizio 2

Scrivi un programma che chieda all'utente di inserire una data nel formato "gg/mm/aaaa" e stampi il giorno, il mese e l'anno separatamente.
#include <iostream>
#include <string>
using namespace std;

int main() {
    string data;

    cout << "Inserisci una data nel formato gg/mm/aaaa: ";
    cin >> data;

    // Estrai giorno, mese e anno dalla stringa
    string giorno = data.substr(0, 2);
    string mese = data.substr(3, 2);
    string anno = data.substr(6, 4);

    cout << "Giorno: " << giorno << endl;
    cout << "Mese: " << mese << endl;
    cout << "Anno: " << anno << endl;

    return 0;
}

Esercizio 3

Scrivi un programma che calcoli il numero di giorni trascorsi tra due date inserite dall'utente nel formato "gg/mm/aaaa".
#include <iostream>
#include <string>
#include <ctime>
using namespace std;

int main() {
    string data1, data2;

    cout << "Inserisci la prima data nel formato gg/mm/aaaa: ";
    cin >> data1;

    cout << "Inserisci la seconda data nel formato gg/mm/aaaa: ";
    cin >> data2;

    // Converti le date in strutture tm
    struct tm tmData1 = {};
    struct tm tmData2 = {};
    strptime(data1.c_str(), "%d/%m/%Y", &tmData1);
    strptime(data2.c_str(), "%d/%m/%Y", &tmData2);

    // Converti le strutture tm in time_t
    time_t tempoData1 = mktime(&tmData1);
    time_t tempoData2 = mktime(&tmData2);

    // Calcola la differenza in secondi tra le due date
    double differenzaSecondi = difftime(tempoData2, tempoData1);

    // Calcola la differenza in giorni
    int differenzaGiorni = differenzaSecondi / (60 * 60 * 24);

    cout << "Numero di giorni trascorsi tra le due date: " << differenzaGiorni << endl;

    return 0;
}

Esercizio 4

Scrivi un programma che stampi il giorno della settimana corrente.
#include <iostream>
#include <ctime>
using namespace std;

int main() {
    // Ottieni il tempo corrente
    time_t tempoCorrente = time(0);

    // Converti il tempo corrente in una struttura tm
    struct tm* tmCorrente = localtime(&tempoCorrente);

    // Ottieni il giorno della settimana corrente (da 0 a 6, dove 0 = Domenica)
    int giornoSettimana = tmCorrente->tm_wday;

    // Array con i nomi dei giorni della settimana
    string giorniSettimana[] = {"Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"};

    cout << "Il giorno della settimana corrente è: " << giorniSettimana[giornoSettimana] << endl;

    return 0;
}

Esercizio 5

Scrivi un programma che verifichi se un anno inserito dall'utente è bisestile o meno.
#include <iostream>
using namespace std;

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

int main() {
    int anno;

    cout << "Inserisci un anno: ";
    cin >> anno;

    if (isBisestile(anno)) {
        cout << anno << " è un anno bisestile." << endl;
    } else {
        cout << anno << " non è un anno bisestile." << endl;
    }

    return 0;
}

Esercizio 6

Scrivi un programma che calcoli l'età di una persona a partire dalla sua data di nascita nel formato "gg/mm/aaaa".
#include <iostream>
#include <string>
#include <ctime>
using namespace std;

int main() {
    string dataNascita;

    cout << "Inserisci la data di nascita nel formato gg/mm/aaaa: ";
    cin >> dataNascita;

    // Ottieni il tempo corrente
    time_t tempoCorrente = time(0);

    // Converti la data di nascita in una struttura tm
    struct tm tmNascita = {};
    strptime(dataNascita.c_str(), "%d/%m/%Y", &tmNascita);

    // Converti la struttura tm in time_t
    time_t tempoNascita = mktime(&tmNascita);

    // Calcola la differenza in secondi tra la data di nascita e il tempo corrente
    double differenzaSecondi = difftime(tempoCorrente, tempoNascita);

    // Calcola l'età in anni
    int etaAnni = differenzaSecondi / (60 * 60 * 24 * 365.25);

    cout << "L'età è: " << etaAnni << " anni" << endl;

    return 0;
}

Esercizio 7

Scrivi un programma che calcoli la differenza in ore, minuti e secondi tra due orari inseriti dall'utente nel formato "hh:mm:ss".
#include <iostream>
#include <string>
#include <ctime>
using namespace std;

int main() {
    string orario1, orario2;

    cout << "Inserisci il primo orario nel formato hh:mm:ss: ";
    cin >> orario1;

    cout << "Inserisci il secondo orario nel formato hh:mm:ss: ";
    cin >> orario2;

    // Converti gli orari in strutture tm
    struct tm tmOrario1 = {};
    struct tm tmOrario2 = {};
    strptime(orario1.c_str(), "%H:%M:%S", &tmOrario1);
    strptime(orario2.c_str(), "%H:%M:%S", &tmOrario2);

    // Converti le strutture tm in time_t
    time_t tempoOrario1 = mktime(&tmOrario1);
    time_t tempoOrario2 = mktime(&tmOrario2);

    // Calcola la differenza in secondi tra i due orari
    double differenzaSecondi = difftime(tempoOrario2, tempoOrario1);

    // Calcola la differenza in ore, minuti e secondi
    int ore = differenzaSecondi / (60 * 60);
    int minuti = (differenzaSecondi / 60) % 60;
    int secondi = differenzaSecondi % 60;

    cout << "La differenza tra i due orari è di: " << ore << " ore, " << minuti << " minuti, " << secondi << " secondi" << endl;

    return 0;
}

Esercizio 8

Scrivi un programma che verifichi se un anno inserito dall'utente è un anno bisestile o meno, utilizzando la libreria Chrono di C++.
#include <iostream>
#include <chrono>
using namespace std;

bool isBisestile(int anno) {
    // Crea un oggetto `year` con l'anno specificato
    chrono::year year(anno);

    // Verifica se l'anno è bisestile
    return chrono::year::is_leap(year);
}

int main() {
    int anno;

    cout << "Inserisci un anno: ";
    cin >> anno;

    if (isBisestile(anno)) {
        cout << anno << " è un anno bisestile." << endl;
    } else {
        cout << anno << " non è un anno bisestile." << endl;
    }

    return 0;
}

Esercizio 9

Scrivi un programma che calcoli il tempo trascorso tra due istanti utilizzando la classe std::chrono::duration.
#include <iostream>
#include <chrono>
using namespace std;

int main() {
    // Definisci due istanti di tempo
    auto inizio = chrono::high_resolution_clock::now();
    // Esegui qualche operazione...
    auto fine = chrono::high_resolution_clock::now();

    // Calcola la durata tra i due istanti
    auto durata = chrono::duration_cast<chrono::microseconds>(fine - inizio).count();

    cout << "Tempo trascorso: " << durata << " microsecondi" << endl;

    return 0;
}

Esercizio 10

Scrivi un programma che stampi l'ora corrente in un formato personalizzato utilizzando la libreria iomanip.
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;

int main() {
    // Ottieni il tempo corrente
    time_t tempoCorrente = time(0);

    // Converti il tempo corrente in una struttura tm
    struct tm* tmCorrente = localtime(&tempoCorrente);

    // Stampa l'ora corrente in un formato personalizzato
    cout << "Ora corrente: " << setw(2) << setfill('0') << tmCorrente->tm_hour << ":"
         << setw(2) << setfill('0') << tmCorrente->tm_min << ":"
         << setw(2) << setfill('0') << tmCorrente->tm_sec << endl;

    return 0;
}