Piccolo Esercizio in C sulle classi IP

In questo esercizio scritto in C.
Ecco il testo dell’esercizio:

Esercizio sulle classi IP

Inserito un indirizzo IP controllare se valido, a quale classe IP appartiene e visualizzare anche la sua maschera di rete.

Ecco lo svolgimento dell’esercizio con l’uso anche di funzioni.
Il controllo della validità dell’indirizzo IP è fatto in fase di Input con un ciclo do … while che consente di ripetere l’inserimento ogni volta che è inserito un valore non valido.
Ecco il codice C dell’esercizio risolto:

#include <stdio.h>
#include <string.h>
int x[4];
int flag=0;
int controlla_ottetto(int x)
{       int esito=0;
        if ((x<0) || (x>255))
        esito=1;
        return esito;
}
void classifica(int x)
{
        if ((x>0) && (x<=127)){
                printf("\n Indirizzo di classe A\n");
                printf("\n Maschera di rete 255.0.0.0");}
       if ((x>127) && (x<=191)){
                printf("\n Indirizzo di classe B\n");
                printf("\n Maschera di rete 255.255.0.0");}
       if ((x>191) && (x<=223)){
                printf("\n Indirizzo di classe C\n");
                printf("\n Maschera di rete 255.255.255.0");}
       if ((x>223) && (x<=239)){
                printf("\n Indirizzo di classe D\n");
                printf("\n Maschera di rete non definita tutti,");
                printf(" i bit indicano host");}
      if ((x>239) && (x<=255)){
                printf("\n Indirizzo di classe E\n");
                printf("\n Maschera di rete non definita tutti,");
                printf(" i bit indicano host");}
}
int main(int argc, char *args[])
{
        int k;
        for (k=0;k<4;k++)
        {
        do{
                printf("\n Inserisci %d° byte indirizzo ip\n",k+1);
                scanf("%d",&x[k]);
        flag=controlla_ottetto(x[k]);
        if (flag==1){
                printf("\n Byte errato\n");
                printf("\n Reinserire ottetto\n");}}
        while (flag==1);
        }
        classifica(x[0]);
        printf("\n Arrivederci\n");
        return 0;
}

Questo esercizio è articolato in due funzioni e un programma principale il “main”.
L’indirizzo IP è definito come array di interi di 4 elementi, il primo ottetto quello che determina la classe IP è posizionato nell’array nella posizione zero.
Le due funzioni di nome rispettivamente “controlla_ottetto” e “classifica” sono due funzioni con parametri.
La funzione “controlla_ottetto” riceve come parametro un numero intero che per essere un valore byte valido deve essere compreso, fra 0 e 255. La funzione ritorna al chiamante un valore “0” o “1” per indicare l’esito del controllo. Se esito vale zero, il controllo non è andato a buon fine e quindi vuol dire, nella sostanza, che l’ottetto inserito non è valido. Questa funzione attraverso un ciclo “for” è invocata quattro volte per controllare il corretto inserimento dell’indirizzo IP.
Solo dopo che i quattro ottetti sono stati inseriti correttamente allora, è possibile passare alla classificazione della classe IP e la stampa del risultato oltre che della maschera di rete “canonica”. La procedura “classifica” prevede come parametro intero che all’atto della chiamata, sarà sostituito dal primo ottetto IP. Questo perché è solo il primo a determinare la classe di indirizzamento. Nella procedura è eseguito il controllo e viene classificato l’indirizzo IP appartenente ad una classe e stampato, anche la relativa classe di indirizzamento.

Se sei interessato ad un ripasso sull’indirizzamento iP puoi vedere il seguente video.