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