Skip to content

Esercizi Data e Ora C++

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;
}