Calcolare l’età a partire dalla data di nascita in C

Calcolare l'età a partire dalla data di nascita è un'operazione comune in molti programmi e applicazioni, dalle anagrafi digitali ai social network. Implementare questa funzionalità in C può essere un esercizio utile per apprendere l'uso delle strutture dati, delle funzioni di libreria per la gestione delle date e delle operazioni aritmetiche di base. 

In questa pagina, esploreremo come calcolare l'età di una persona data la sua data di nascita e la data corrente, utilizzando il linguaggio di programmazione C.

Per calcolare l'età, dobbiamo conoscere la data di nascita della persona e la data corrente. La differenza tra questi due valori ci darà l'età della persona. Tuttavia, non è sufficiente considerare solo gli anni, poiché anche i mesi e i giorni possono influire sul calcolo.

Se la data di nascita è il 15 aprile 1990 e la data corrente è il 10 marzo 2024:

  • L'età in anni sarebbe 2024 - 1990 = 34 anni.

  • Ma dato che aprile è dopo marzo, la persona non ha ancora compiuto 34 anni completi. L'età effettiva è 33 anni.

Strutture dati e funzioni utili per calcolare l’età

In C, possiamo utilizzare la struttura struct per rappresentare una data (giorno, mese e anno). Inoltre, le funzioni di libreria per la gestione del tempo come time.h possono aiutarci a ottenere la data corrente.

#include <stdio.h> #include <time.h> // Definizione della struttura per rappresentare una data struct Date {     int day;     int month;     int year; };

Per ottenere la data corrente, possiamo utilizzare le funzioni della libreria time.h:

void getCurrentDate(struct Date *currentDate) {     time_t t = time(NULL);     struct tm tm = *localtime(&t);     currentDate->day = tm.tm_mday;     currentDate->month = tm.tm_mon + 1; // I mesi sono da 0 a 11     currentDate->year = tm.tm_year + 1900; // Gli anni sono dal 1900 }

La funzione principale per calcolare l'età sarà:

int calculateAge(struct Date birthDate, struct Date currentDate) {     int age = currentDate.year - birthDate.year;     // Verifica se il compleanno di quest'anno non è ancora passato     if (currentDate.month < birthDate.month ||          (currentDate.month == birthDate.month && currentDate.day < birthDate.day)) {         age--;     }     return age; }

Analisi del codice:

  1. Struttura Date: rappresenta una data con giorno, mese e anno.

  2. Funzione getCurrentDate: utilizza la libreria time.h per ottenere la data corrente e memorizzarla in una struttura Date.

  3. Funzione calculateAge:

    1. Calcola l'età sottraendo l'anno di nascita dall'anno corrente.

    2. Verifica se il compleanno di quest'anno è passato. Se non è passato, sottrae un anno dall'età.

  4. Funzione main:

    1. Richiede all'utente di inserire la data di nascita.

    2. Ottiene la data corrente.

    3. Calcola e stampa l'età.

Considerazioni aggiuntive

Nel codice fornito, non è stata implementata una validazione dell'input. In un'applicazione reale, sarebbe utile verificare che la data di nascita inserita dall'utente sia valida (ad esempio, il giorno e il mese devono essere nei range corretti).

Per applicazioni più avanzate, si possono usare funzioni di libreria che gestiscono direttamente le operazioni sulle date, come mktime e difftime di time.h, per semplificare ulteriormente il calcolo dell'età.

Calcolare l'età a partire dalla data di nascita è una comune operazione che combina l'uso di strutture dati, funzioni di libreria per la gestione del tempo e operazioni aritmetiche. La soluzione presentata in C è semplice e diretta, e può essere facilmente estesa o adattata per applicazioni più complesse.