algoritmo

//algoritmo per controllare la validità formale di una data
//e il corrispondente giorno settimanale per date successive al 15-10-1582

//definizione e inizializzazione variabili

stringa datastringa=”” //conterrà la data digitata nelle forma gg/mm/aaaa
stringa gg=”” //conterrà il giorno digitato
stringa mm=”” //conterrà il mese digitato
stringa aaaa=”” //conterrà l’anno digitato
stringa messaggio=”” //conterrà il messaggio relativo ai controlli effettuati
intero errore=0 //conterrà il codice dell’eventuale errore rilevato dai controlli
intero bisestile=0 //conterrà l’intero dell’anno digitato diviso 4
intero sommatoria=0 //per il calcolo del giorno settimanale
intero divisorio=0 //per il calcolo del giorno settimanale
intero giornosettimana=0 //conterrà il giorno della settimana della data digitata

//inizio algoritmo
//sequenza di ingresso per chiedere di digitare una data

inputsequenza

//inizializza la variabile messaggio ed errore per una data corretta

messaggio=”La data digitata è corretta ed è “
errore=0

//chiede che venga digitata una data o l’ordine di chiusura dell’algoritmo

datastringa=input(“digita una data nel formato: gg/mm/aaaa o digita chiudi per terminare”)

//controlla se è stato ricevuto l’ordine di chiusura

se datastringa=”chiudi” allora vai a chiudisequenza

//estrae da datastringa il giorno il mese e l’anno

gg=estrai(datastringa,0,1)
mm=estrai(datastringa,3,4)
aaaa=estrai(datastringa,6,9)

//controlla se le digitazioni rientrano negli intervalli corretti

se intero(gg)>31 allora errore=1 e vai a erroresequenza
se intero(gg)<1 allora errore=2 e vai a erroresequenza

se intero(mm)>12 allora errore=3 e vai a erroresequenza
se intero(mm)<1 allora errore=4 e vai a erroresequenza

se intero(aaaa)<1 allora errore=5 e vai a erroresequenza

//invia al controllo per anni bisestili e mesi di 31

se intero(mm)=2 e intero(gg)>28 allora vai a annobisestilesequenza
se intero(gg)=31 allora vai a mesidi31sequenza

//se si giunge qui la data è corretta e se ne dà informazione

vai a outputsequenzasettimana

//controllo per gli anni bisestili

annobisestilesequenza
se intero(gg)>29 allora errore=6 e vai a erroresequenza
bisestile=intero(aaaa)/4
se intero(aaaa)<>bisestile*4 allora errore=7 e vai a erroresequenza

//se si giunge qui la data è corretta e se ne dà informazione

vai a outputsequenzasettimana

//controllo per mesi di 31

mesidi31sequenza
se intero(mm)=4 o 6 o 9 o 11 allora errore=8 e vai a erroresequenza

//se si giunge qui la data è corretta e se ne dà informazione

vai a outputsequenzasettimana

//se si giunge qui la data non è corretta e se ne dà informazione

erroresequenza
se errore=1 allora messaggio=”Errore: gg maggiore di 31″ vai a outputsequenza
se errore=2 allora messaggio=”Errore: gg minore di 1″ vai a outputsequenza
se errore=3 allora messaggio=”Errore: mm maggiore di 12″ vai a outputsequenza
se errore=4 allora messaggio=”Errore: mm minore di 1″ vai a outputsequenza
se errore=5 allora messaggio=”Errore: aaaa minore di 1″ vai a outputsequenza
se errore=6 allora messaggio=”Errore: febbraio maggiore di 29″ vai a outputsequenza
se errore=7 allora messaggio=”Errore: anno non bisestile” vai a outputsequenza
se errore=8 allora messaggio=”Errore: mese non di 31″ vai a outputsequenza

//calcola il giorno della settimana
//la formula l’ho trovata in internet non so perché funziona ma funziona

outputsequenzasettimana
se datastringa>”15/10/1582″ allora
(
sommatoria=intero(aaaa)+quoziente(intero(aaaa)-1)/4)-quoziente(intero(aaaa)-1)/100)+quoziente(intero(aaaa)-1)/400)+giorni(da1/1 a gg/mm)
divisorio=sommatoria/7
giornosettimana=sommatoria-divisorio*7
se giornosettimana=0 allora messaggio= messeaggio+” un sabato” e vai a outputsequenza
se giornosettimana=1 allora messaggio= messeaggio+” una domenica” e vai a outputsequenza
se giornosettimana=2 allora messaggio= messeaggio+” un lunedì” e vai a outputsequenza
se giornosettimana=3 allora messaggio= messeaggio+” un martedì” e vai a outputsequenza
se giornosettimana=4 allora messaggio= messeaggio+” un mercoledì” e vai a outputsequenza
se giornosettimana=5 allora messaggio= messeaggio+” un giovedì” e vai a outputsequenza
se giornosettimana=6 allora messaggio= messeaggio+” un venerdì” e vai a outputsequenza
)

//se si è giunti qui la data è superiore al 15/10/1582

messaggio=messaggio+” impossibile calcolare il giorno settimanale” vai a outputsequenza

//si dà informazione sui controlli e si ripristina l’algoritmo

outputsequenza
output(messaggio) vai a inputsequenza

//fine algoritmo

chiudisequenza
chiudi()

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...