una matta

Mi sono studiata il linguaggio C per collaudare l’algoritmo di alcuni giorni fa qui appiccicato.
Questo è il listato.
Naturalmente, per chi matto come me volesse provarlo, va compilato secondo il sistema operativo del proprio pc, per ottenere il file eseguibile.
Il sistema operativo del mio pc è Ubunto 19.10 e, quindi, il mio eseguibile è utilizzabile su sistemi Linux.
Alle soglie degli 80 anni come sono, è un buon esercizio per rallentare il decadimento mentale, che non mi molla.

#include <stdio.h>
#include <string.h>

char data[10];
char uscita[6]=”uscire”;
char carat;
char messaggio[200];
int carat0;
int carat1;
int carat2;
int carat3;
int giorno;
int mese;
int anno;
int err;
int bisest;
int ret;
int sommgiorn;
int sommann;
int divsommann;
int giorsett;
int bisestile;

void estrae_data(char data[10]);
void controlla_data();
void err_messag();
void giorno_settimana();

int main () {
ret=1;
while(ret!=0){
printf(“Inserisci una data nel formato gg/mm/aaaa o digita uscire \n “);
scanf(“%s”,data);
ret=strcmp(data,uscita);
if(ret==0) break;
printf(“La data digitata è %s \n”,data);
estrae_data(data);
controlla_data();
err_messag();
}
return 0;
}

void estrae_data(char data[10]){
carat0=data[0]-48;
carat1=data[1]-48;
giorno=carat0*10+carat1;
carat0=data[3]-48;
carat1=data[4]-48;
mese=carat0*10+carat1;
carat0=data[6]-48;
carat1=data[7]-48;
carat2=data[8]-48;
carat3=data[9]-48;
anno=carat0*1000+carat1*100+carat2*10+carat3;
}

void controlla_data(){
err=0;
if(giorno<1) err=1;
if(giorno>31) err=err*10+2;
if(mese<1) err=err*10+3;
if(mese>12) err=err*10+4;
if(anno<1) err=err*10+5;
if(mese==2){
if(giorno>29) err=err*10+6;
else{
bisest=anno/4;
if(bisest4!=anno) err=err*10+7;
}
}
if(giorno==31){
switch(mese){
case 4:
err=err/10+8;
break;
case 6:
err=err*10+8;
break;
case 9:
err=err*10+8;
break;
case 11:
err=err*10+8;
break;
}
}
}

void err_messag(){
if(err==0) {
printf(“La data digitata %s è corretta \n”,data);
if(anno>1582) giorno_settimana();
}
else{
printf(“Codice errore %d \n”,err);
switch(err){
case 1:
printf(“Codice errore %d: giorno minore di 1 \n”,err);
break;
case 2:
printf(“Codice errore %d: giorno maggiore di 31 \n”,err);
break;
case 3:
printf(“Codice errore %d: mese minore di 1 \n”,err);
break;
case 4:
printf(“Codice errore %d: mese maggiore di 12 \n”,err);
break;
case 5:
printf(“Codice errore %d: anno minore di 1 \n”,err);
break;
case 6:
printf(“Codice errore %d: giorno di febbraio maggiore di 29 \n”,err);
break;
case 7:
printf(“Codice errore %d: giorno di febbraio non bisestile \n”,err);
break;
case 8:
printf(“Codice errore %d: mese non di 31 giorni \n”,err);
break;
case 24:
printf(“Codice errore %d: giorno e mese maggiori di 31 e 12 \n”,err);
break;
case 135:
printf(“Codice errore %d: giorno, mese ed anno minori di 1 \n”,err);
break;
case 145:
printf(“Codice errore %d: giorno minore di 1, mese maggiore di 12, anno minore di 1 \n”,err);
break;
case 245:
printf(“Codice errore %d: giorno e mese maggiori di 31 e 12, anno minore di 1 \n”,err);
break;
}
}
}

void giorno_settimana(){
bisestile=0;
bisest=anno/4;
if(bisest4==anno) bisestile=1;
switch(bisestile){
case 0:
printf(“Anno non bisestile \n”);
break;
case 1:
printf(“Anno bisestile \n”);
break;
}
switch(mese){
case 1:
sommgiorn=giorno;
break;
case 2:
sommgiorn=31+giorno;
break;
case 3:
sommgiorn=31+28+bisestile+giorno;
break;
case 4:
sommgiorn=31+28+bisestile+31+giorno;
break;
case 5:
sommgiorn=31+28+bisestile+31+30+giorno;
break;
case 6:
sommgiorn=31+28+bisestile+31+30+31+giorno;
break;
case 7:
sommgiorn=31+28+bisestile+31+30+31+30+giorno;
break;
case 8:
sommgiorn=31+28+bisestile+31+30+31+30+31+giorno;
break;
case 9:
sommgiorn=31+28+bisestile+31+30+31+30+31+31+giorno;
break;
case 10:
sommgiorn=31+28+bisestile+31+30+31+30+31+31+30+giorno;
break;
case 11:
sommgiorn=31+28+bisestile+31+30+31+30+31+31+30+31+giorno;
break;
case 12: sommgiorn=31+28+bisestile+31+30+31+30+31+31+30+31+30+giorno;
break;
}
sommann=anno+(int)(anno-1)/4-(int)(anno-1)/100+(int)(anno-1)/400+sommgiorn;
divsommann=(int)sommann/7;
giorsett=sommann-divsommann*7;
switch(giorsett){
case 0:
printf(“Ed è un sabato\n”);
break;
case 1:
printf(“Ed è una domenica\n”);
break;
case 2:
printf(“Ed è un lunedì\n”);
break;
case 3:
printf(“Ed è un martedì\n”);
break;
case 4:
printf(“Ed è un mercoledì\n”);
break;
case 5:
printf(“Ed è un giovedì\n”);
break;
case 6:
printf(“Ed è un venerdì\n”);
break;
}
}

Il collaudo alla data del 25/09/2020

il listato incollato qui manca di eleganza ma copiato e incollato su un editor come solo testo e salvato con estensione .c acquista l’eleganza dei colori che contraddistinguono le varie parti del linguaggio C. Se poi si ha la pazienza di sistemare ciascuna riga con le giuste rientranze, l’eleganza esplode.

Così l’eleganza dell’inizio del listato salvato con estensione .c in un file per solo testo

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...