Che giorno è? - parte prima

Benvenuti!
La richiesta di aiuto di un utente in uno dei gruppi che seguo mi ha fatto avvicinare ad alcuni argomenti che orbitano intorno alla questione durata  dell'anno, calendario, giorno della settimana e così via.
Dopo alcune ricerche ho fatto un primo progetto, che trovi QUI seguendo le informazioni trovate in questo sito QUI per poter calcolare il giorno della settimana di un anno non bisestile partendo dal numero del giorno all'interno dell'anno (es. il 124esimo giorno). L'errore è possibile visto che spesso lavoro di notte 😂 (segnalatemeli) mentre sulla correttezza della formula mi rimetto alla fonte (se hai informazioni più precise segnalale grazie).
Visto che non potevo lasciare il progetto così limitato e anche perché non sono razzista 😂😂 ho pensato di estenderlo anche ai mesi bisestili e poter dare la possibilità di scegliere l'anno in cui effettuare il controllo. Progetto qui sotto 👇
Link al progetto 👉 QUI 👈




In entrambi i progetti la formula utilizzata per identificare il mese e il giorno del mese sono frutto della mia fantasia , mentre la formula usata per il giorno della settimana l'ho trovata QUI ; per le informazioni storiche invece ho sbirciato QUI quindi la colpa di eventuali errori è loro 🙈
Andiamo a vedere quindi come ho organizzato il progetto.



Ho impostato qualche comando iniziale per ricevere le informazioni che poi mi serviranno per i vari calcoli, dopo aver avvisato di cliccare sul gattino per iniziare parto con la spiegazione del progetto e poi chiedo l'anno in cui effettuare il controllo.
Per la prima operazione introduco prima un blocco dire senza il tempo per poterlo sincronizzare con il blocco pronuncia che quindi oltre a far parlare il mio gattino va a sostituire il tempo omesso nel blocco dire, in questo modo riesco a pronunciare e mostrare a video il messaggio contemporaneamente. Il blocco chiedi mi permette poi di interagire con chi sta usando l'app per chiedere e dopo poter salvare l'anno all'interno di una variabile, un blocco pronuncia di abbellimento e faccio partire una procedura personalizzata.

  
La procedura utilizzata è particolare poiché come possiamo notare dal blocco definisci bisestile? porta al suo interno un termine aggiuntivo , in questo caso il valore dell'anno che avevamo precedentemente chiesto nel codice precedente tramite il blocco rosa bisestile? in cui ho inserito la risposta alla domanda ( in questo caso avrei potuto usare anche la variabile ANNO, invece di risposta, visto che avevo già aggiornato il suo valore ). Questo valore in realtà è già salvato all'interno di una variabile ma volevo anche far vedere come passare un valore o più valori ad una procedura per effettuare magari dei calcoli veloci, anche perché durante la creazione di questo blocco ho spuntato l'opzione esegui senza aggiornare lo schermo che permette di effettuare l'operazione istantaneamente . In caso contrario scratch è settato per aggiornare lo schermo e quindi ridisegnare tutto ciò che c'è al suo interno ad ogni comando inserito nel codice, quindi un bel guadagno di tempo.


Questa procedura serve per verificare se l'anno è bisestile o meno visto che nei calcoli seguenti sarà necessario differenziare se usare 28 o 29 giorni per febbraio e vediamo come fare.
L'operazione è molto semplice perché basta prendere le ultime due cifre dell'anno (es. 17 per il 2017) e dividere questo numero per 4, se il resto è zero l'anno è bisestile altrimenti no, ma cosa succede se l'anno finisce per 00 come il 2000? 
Ecco il motivo del primo se allora altrimenti che va a discriminare i due casi, gli anni che finiscono per 00 e tutti gli altri, per fare questo utilizzo lettera di che all'interno di una parola o numero o frase va a prendere elemento nella posizione richiesta tramite un numero inserito nel primo box bianco.
Visto che il mio anno potrebbe essere anche inferiore a 4 cifre , per esempio 900 , utilizzo il numero stesso per identificare quale cifra prelevare , altrimenti la posizione 4 funzionerebbe bene solo per i numeri da mille in poi . Usando il blocco lunghezza di tutto questo viene automatizzato poiché mi darà come valore 4 per numeri a quattro cifre andando a prelevare l'ultima cifra dell'anno e 3 per numeri a tre cifre; usando lo stesso metodo vado a prelevare la cifra n-1 quindi una in meno della lunghezza totale per comporre il numero da dividere per 4 ed effettuare la verifica. 
Una volta capito in quale dei due casi mi trovo devo effettuare la divisione e controllare il resto per identificare se l'anno è bisestile o meno.
Ho inserito quindi un se allora altrimenti nel primo se (quindi quando il mio mese finisce per 00) dove vado a verificare se il resto della divisione dell'anno per 400 è uguale a zero (sarebbe l'operazione a mod b che ci ritorna il resto della divisione a:b , quindi 7 mod 2 = 1 ⇒ 7:2= 3 con resto 1 ) , se è uguale a zero porto la variabile BISESTILE a 1 altrimenti a 0, questi valori mi serviranno per gestire facilmente le prossime operazioni.
Nella seconda parte, quella relativa all' altrimenti, quindi tutti gli altri casi che non vedono il doppio zero alla fine dell'anno, ho inserito un secondo se allora altrimenti ; in questo modo andiamo a controllare se il resto della divisione,  per 4 questa volta, è uguale zero andando a modificare il valore di BISESTILE in 1 se il resto è zero o in alternativa in 0 se il resto è diverso da zero.
Controlliamo un attimo cosa abbiamo utilizzato come dividendo della nostra divisione, in questo caso abbiamo dovuto selezionare e poi unire insieme gli ultimi due numeri del nostro anno, utilizzando lo stesso metodo di prima per selezionare le cifre (lettere (4-1) di anno e lettera (4) di anno) uniti insieme da un blocco unione di. Vi ricordo che i parametri (4-1) e (4) sono stati automatizzati utilizzando i blocchi lunghezza di anno in questo modo se l'anno sarà 1942 avremo (4-1) e (4) mentre se l'anno fosse il 750 avremo (3-1) e (3) .
Cosa succede quando scratch arriva alla fine del blocco personalizzato? Torna direttamente al blocco che lo ha attivato, quindi nel nostro caso al codice iniziale subito dopo il blocchetto rosa bisestile? continuando così la lettura dei codici seguenti.
Nel prossimo articolo vedremo come gestire e differenziare il codice sia nel caso di anno bisestile che non bisestile introducendo una piccola modifica e qui lancerò anche una sfida per vedere chi riuscirà ad ottimizzare il codice.
Alla prossima.
         

Commenti

Ciao, spero ti piaccia il blog. Se ti fa piacere qui puoi offrirmi un caffè!

Post popolari in questo blog

GOOGLE SCRIPT & KODULAR READ, WRITE, UPDATE, DELETE

Tu lo conosci THUNKABLE?