Buongiorno a tutti ragazzi come state bentornati qui sul canale di infoghira youtube oggi parliamo con questo ambiente un po strano con lavagna e gessetto di strutture fondamentali della programmazione questo è un argomento che mi sta molto a cuore perché ci aiuta innanzitutto a capire le possibilità che abbiamo al giorno d'oggi per programmare inoltre ci aiuta a ragionare nel momento in cui noi dobbiamo pensare alla soluzione di un problema, cioè nel momento in cui noi dobbiamo pensare come scrivere il codice che risolve un determinato problema che ci siamo posti di risolvere o comunque un programma che dobbiamo fare. Questo argomento purtroppo non è ben trattato secondo me né alle scuole superiori ad indirizzo informatico o che comunque contengono un po'di informatica e neanche all'università. Ma purtroppo una cosa che...
sicuramente per mancanza di tempo viene buttata lì e poi sta al singolo riuscire ad approfondirla secondo me se la guardiamo un momentino tutti coloro che programmano o che devono pensare anche solo a uno pseudocodice cioè all'idea di sviluppo di un programma ne traggono beneficio come è successo anche a me d'altronde allora che cosa sono queste strutture fondamentali della programmazione sono degli approcci che i programmatori hanno a disposizione per risolvere un determinato problema. In particolare queste strutture ci consentono, come vedete scritto dallo slide, di controllare il flusso di esecuzione del programma. Capiremo a breve che cosa vuol dire.
Chiaramente queste strutture adesso le vediamo a livello teorico, però quando poi cominciamo nella pratica si traducono in un insieme di istruzioni per implementarle, per quello che ho scritto strumenti, perché ci saranno un insieme di istruzioni che tecnicamente parlando si chiamano costrutti programmativi, quando abbiamo un insieme di istruzioni che fa una determinata cosa e questo insieme di istruzioni ci consentono di poter implementare, diciamo così tra virgolette, un tipo di struttura piuttosto che un'altra. Se andiamo a guardare, le strutture fondamentali sono queste tre che vedete scritte in bianco cioè la struttura sequenziale che a breve vedremo cosa vuol dire perché è la prima che affronteremo la struttura iterativa e la struttura selettiva diciamo che con queste tre strutture di controllo del flusso di esecuzione del codice siamo in grado di sviluppare praticamente tutti i programmi che vogliamo poi ce n'è anche una quarta che di solito non viene quasi mai messa soprattutto a livello base che è la struttura ricorsiva che è una cosa un po particolare infatti qua vi ho scritto livello avanzato comunque noi alla fine che sarà in questo ma penso più nel prossimo video perché comunque è un discorso lungo ne vedremo comunque degli degli accenni capiremo almeno che cosa vuol dire la ricorsione capiremo almeno che cos'è visto che qui sul canale non ne ho proprio mai mai mai parlato mi faceva piacere parlare anche di questo argomento che fa paura a molti studenti di informatica e devo dire che agli inizi ha fatto paura anche al sottoscritto perché è una cosa innaturale e un po'difficile, ma comunque andiamo con ordine. Cominciamo con la struttura sequenziale.
In questa tipologia, in questo approccio di programmazione, come potete leggere, le istruzioni vengono eseguite in sequenza, quindi dalla prima all'ultima dall'alto verso il basso. Immaginiamo che questo qui sia il codice snorgente del nostro programma e il computer andrà a eseguire l'istruzione numero 1, poi subito dopo l'istruzione numero 2, subito dopo l'istruzione numero 3 e così via fino a arrivare all'ennesima che in questo caso come vedete è l'ultima istruzione di questo programma. Il flusso di esecuzione è lineare, cioè non c'è nessun salto, non c'è nulla che interrompe questa sequenza.
Qui abbiamo che eseguiamo la prima, la seconda, la terza e così via. proprio come indicato da questa freccia. Per capire meglio quello che stiamo dicendo vediamo subito un esempio pratico che utilizza questa tipologia di struttura, questo approccio di programmare. Eccolo qui.
In questo caso mi sono ispirato al linguaggio java che è un linguaggio che qui sul canale abbiamo già visto, abbiamo fatto qualche programmino in java così senza spiegare la sintassi però abbiamo fatto diversi esempi con java sul canale. Allora, in questo esempio ci potrebbe essere qui sopra dell'altro codice che non consideriamo e alla fine di queste istruzioni potrebbe esserci anche dell'altro codice che non ci interessa. La parte interessante sono queste tre istruzioni che vi ho riportato. Allora, vedete che qui abbiamo una dichiarazione di una variabile intera n e poi la inizializziamo subito a 4. Poi stampiamo n uguale al valore di n, quindi ci stamperà n uguale 4 sostanzialmente, e poi stampiamo la parola ciao. Allora, scritte così, queste tre istruzioni vengono eseguite una dopo l'altra.
cioè quando il computer esegue questo programma che cosa fa? beh chiaramente se qui sopra c'è dell'altro codice esegue prima questa parte qui poi va a eseguire prima int n uguale 4 poi eseguirà questa stampa del valore di n e poi subito dopo stamperà la parola ciao vedete esecuzione in maniera sequenziale è ovvio che se io avessi invertito la stampa della stringa ciao e la stampa di n lui me l'avrebbe stampata in maniera invertita questo per dire che un programma non deve essere fatto da una cozzaglia di istruzioni messe a caso dove e poi il computer sa che cosa fare no no noi dobbiamo essere sicuri delle cose che dobbiamo fare ci dobbiamo darci nella nostra testa quando sviluppiamo un ordine preciso perché è proprio questo che il computer andrà ad eseguire chiaramente se ve ne siete accorti non stiamo facendo nulla di strano cioè stiamo dando un nome alle varie possiamo dire modalità appunto approcci di programmazione che anche qui sul canale in alcuni scorsi video abbiamo già visto quei programmi che abbiamo fatto oppure se siete informatici o se vi piace programmare provate a scrivere un programma e poi a vedere se riconoscete qualcuna di queste strutture che vediamo qui. In questo caso appunto queste tre istruzioni vengono eseguite in maniera sequenziale, quindi fanno parte della struttura fondamentale sequenziale. La prossima struttura che vediamo è la struttura iterativa.
Questo approccio, questa modalità di programmare funziona così. All'interno del nostro codice ci sono una o più istruzioni che vengono ripetute ciclicamente. Qui per capire abbiamo proprio una parola chiave che è ciclicamente.
Allora, come funziona? Immaginiamo che questo qua sia il nostro programma di test e abbiamo che queste prime tre istruzioni vengono eseguite immaginiamo in maniera sequenziale quindi prima questa, poi questa qui sotto e poi la terza qui. Invece poi vedete che abbiamo questo blocco di istruzioni bordato di blu.
Cosa vuol dire questo? Vedete che qui sulla sinistra vi ho scritto che questo blocco, quindi tutte queste istruzioni che sono dentro il rettangolo blu, vengono eseguite n volte. Questo vuol dire che il computer arriva qui e esegue questa riga, questa riga, questa riga e questa riga.
Dopodiché, al posto di proseguire verso il basso come abbiamo visto prima, lui torna indietro, cioè risale e riesegue di nuovo questa riga. questa riga e questa riga e questa riga dopodiché risale di nuovo e lui riesegue di nuovo nell'ordine 1 2 3 e 4 per quante volte lo fa? esattamente n volte come abbiamo scritto qua immaginate che questo n potrebbe essere 1 2 3 4 5 10 o anche 100.000 o anche infinite volte addirittura poi Una volta che l'esecuzione di questo blocco è arrivata a n, cioè l'ha eseguita supponiamo quattro volte, finite queste quattro volte, lui torna qui sotto ed esegue queste ultime due istruzioni in maniera sequenziale. Prima di proseguire ragazzi, è importante precisare che questo valore n, che rappresenta il numero di volte che noi eseguiamo il ciclo, potrebbe essere anche 0. Cosa vuol dire?
che è uguale a zero, cioè che non eseguiamo nessuna volta il ciclo. Nel nostro programma noi siamo qui in alto, arriviamo a questa riga e in base a come si è comportato prima il programma, cioè a quello che è successo prima, vediamo che questo ciclo non è da eseguire, quindi in pratica non facciamo questo quadrato blu per nessuna volta e andiamo direttamente qui sotto. L'idea intuitiva diciamo è un po'questa, anche se ancora un po' po'alla lontana ma con gli esempi pratici cercheremo di capire che cosa significa. Vediamo quindi il nostro primo esempio pratico.
Allora questo non so se lo riconoscete comunque è un piccolo pezzo di codice ispirato diciamo al linguaggio C questi puntini stanno indicare che sopra e sotto questo codice potrebbe esserci dell'altro codice che a noi interessa vedete sia qui sopra sia qui sotto dopodiché in questo pezzo di codice che cosa facciamo stampiamo per dieci volte la stringa ciao e poi questo backslash n sta a dire Una volta che tu stampi la parola ciao vai a capo in maniera tale da poter stampare le parole una sotto l'altra e non tutte attaccate. Come funziona? Vedete che è un ciclo for e qui abbiamo un indice che è una variabile intera, vedete, i, che è inizializzata a 1. Questo ciclo va avanti fin quando la variabile i è minore o uguale di 10. E poi una volta che tu esegui l'istruzione di questo ciclo incrementa di 1 il valore della variabile questo vuol dire i++ quindi che cosa succederà succederà che questa variabile verrà incrementata da 1 a 10 e quindi la parola ciao verrà stampata 10 volte sostanzialmente il primo giro questa variabile vale 1 questa condizione è vera perché 1 è ancora minore uguale di 10 quindi stampo ciao o incremento i vale 2, 2 è ancora minore o uguale di 10 e quindi stamperò di nuovo la stringa ciao e avanti così. Alla fine avrò che 10 è ancora minore o uguale di 10 e quindi stamperò la stringa ciao, verrà incrementata ancora una volta, quindi i varrà 11, ma se noi andiamo a vedere, 11 che sarebbe il valore di i non è più minore o uguale di 10 e quindi ci esce da questo ciclo e non verrà più stampata la parola ciao e si salterà.
alle istruzioni qui sotto. Vedete come è cambiato il flusso di esecuzione rispetto alla programmazione sequenziale, rispetto alla struttura fondamentale sequenziale. E'cambiato di un bel po'direi.
Adesso vediamo anche un altro esempio di programma pratico che sfrutta in maniera un po'più interessante i cicli. In particolare abbiamo due parti di questo piccolo pezzo di codice. prima parte che vi sto evidenziando possiamo chiamarla parte dichiarativa, vedete? Noi dichiariamo una variabile n, la inizializziamo a 6, s la inizializziamo a 0 e p la inizializziamo a 1. E poi chiaramente qui sotto abbiamo il nostro cicloforo.
Quello che andiamo a fare è mettere in s la sommatoria per i che va da 1 a 6, vedete che è n uguale a 6, e in p Mettiamo la produttoria di nuovo per i che va da 1 a 6. Quindi in S andremo a mettere 1 più 2 più 3 più 4 più 5 più 6. Mentre in P andiamo a mettere 1 per 2 per 3 per 4 per 5 per 6. Chiaramente capite adesso perché P è inizializzata a 1. Se io inizializzassi a 0, Questa variabile è chiaramente 0 per 1 per 2 per 3 per 4 per n, fa sempre 0. Invece, inizializzando la 1, riesco a mettere in P la produttoria appunto per i che va da 1 a n. In questo caso n è uguale a 6, quindi in S avremo la sommatoria per i che va da 1 a 6 e in P avremo la produttoria per i che va da 1 a 6. Questo fa... questo codice.
Diciamo ancora due cose ragazzi sui cicli e poi ci salutiamo qui. Quindi le prossime strutture le analizzeremo nel prossimo video. Allora cerchiamo di ragionare sul perché questo n che sarebbe il numero di volte che io seguo il ciclo può anche essere uguale a zero e per farlo utilizziamo il programma, il primo esempio che abbiamo visto.
Allora immaginiamo che questa parte di ciclo non ci sia e quindi tiriamo una bella riga su questa istruzione. Questa istruzione che cosa faceva? Definiva, dichiarava, si direbbe più correttamente, la variabile i e la inizializziamo a 1. Supponiamo che questa parte non ci sia e che quindi il ciclo cominci proprio così, guardate, punto e virgola, condizione, i minore uguale di 10 e i più più.
Che cosa vuol dire questo? Che per funzionare il programma deve aver definito prima la variabile i. Quindi diciamo che nel nostro esempio la variabile i viene manipolata in questo punto cioè nella parte del codice che non vediamo supponiamo che facendo un po'di cose quando arriviamo qui cioè quando arriviamo al ciclo la variabile i valga 11 cioè prima di entrare nel ciclo la variabile i vale 11 allora che cosa succede?
il computer arriva qui e va a vedere i che vale 11 è minore o uguale di 10 no perché 11 è più grande di 10 quindi che cosa succede? non fare il ciclo e passa direttamente qui sotto dove ci sono i puntini e qui potrebbe esserci o altre istruzioni oppure potrebbe esserci niente quindi magari il programma potrebbe essere direttamente finito Vedete che in questo caso con la variabile che vale 11 o comunque un numero maggiore di 10 questo ciclo non viene eseguito. Questo ciclo è chiaramente tutte le istruzioni al suo interno che possono essere anche più di una.
Altre cose che dobbiamo conoscere sui cicli, chiaramente possiamo fare anche dei cicli invertiti, cioè che vanno da 50 a 0 per esempio, quindi un ciclo decrescente. Oppure posso anche usare numeri negativi, cioè posso fare un ciclo che vada da meno 5 a 10. oppure da 200 a meno 50 per dire, posso scegliere un po'io. Chiaramente ci sono dei limiti che non stiamo a vedere perché se no ci sarebbe, per poter parlare di questa cosa, un altro video di due ore solo per dire quello.
Un'altra cosa importante sui cicli è che a livello teorico, come vedete da questa slide, esistono due tipi di cicli. Questa cosa qua non mi chiedete perché. non viene mai detta, cioè ci sono scritte sui libri ed è molto utile ma a livello teorico con tutte le lezioni che ho fatto in tutte le lezioni che ho fatto non è mai stata detta e cioè esistono i cicli definiti e i cicli indefiniti. Nei cicli definiti noi possiamo sapere esattamente per quante volte verrà eseguito il ciclo per esempio se io come prima ho chiesto di stampare la parola ciao dieci volte io so che il corpo del ciclo quindi le istruzioni che ci sono all'interno per esempio di questo for verranno eseguite esattamente 10 volte perché l'ho stabilito io e quindi questo qua è un ciclo definito però c'è anche un'altra tipologia di ciclo cioè il ciclo indefinito in questa tipologia di cicli noi non sappiamo a priori o comunque non possiamo sapere noi programmatori sempre dico per quante volte verrà eseguito effettivamente il ciclo. Impossibile dite voi?
Facciamo questo esempio. Abbiamo sviluppato un programma che chiede all'utente di inserire un qualsiasi carattere da tastiera. Quindi ci viene fuori una stampa con scritto inserisci un carattere. L'utente lo inserisce. Noi però abbiamo sviluppato il programma in maniera tale che se e solo se il programma inserisce il carattere di, per esempio, allora viene fuori la parola ciao.
Se inserisce qualsiasi altro carattere non succede niente, quindi qui ci sarà un ciclo che dall'inglese a me verrebbe da farlo, da implementarlo con un ciclo while, cioè dico finché il carattere che l'utente inserisce da tastiera è diverso dal carattere di, allora continuo a fare questo ciclo, continuo a leggere il carattere che l'utente inserisce. E solo nel momento in cui l'utente inserisce il carattere di esci dal ciclo e stampami la parola ciao. Chiaramente questo qua è un ciclo indefinito perché? Perché noi non possiamo sapere quando finalmente l'utente si deciderà a premere il tasto D.
Magari l'utente può premere tutti i caratteri del mondo, lettere, numeri, virgolette, parentesi eccetera eccetera ma non schiaccerà mai la lettera D. Oppure che ne so magari lo preme al primo giro oppure lo preme dopo 20.000 volte che abbiamo eseguito il ciclo. Quindi vedete che in questa...
in questo ciclo particolare che rientra appunto nella categoria dei cicli indefiniti noi non possiamo sapere per quante volte questo ciclo viene effettivamente eseguito. Ok ok direi che ho parlato anche troppo il video sta diventando lungo quindi per il momento ci fermiamo qua. Comunque vi ho detto tutto quello che volevo dirvi sulla struttura sequenziale e sulla struttura iterativa quindi nel prossimo video vedremo quella selettiva e poi finalmente parleremo di questo mostro che è la ricorsione che fa un po'paura a tutti quanti ne parleremo la prossima volta la prossima puntata al cinema no vabbè sto scherzando vi ricordo che se volete potete iscrivervi al mio canale sempre gratuitamente e facendolo mi supportate mi permettete di continuare a portare contenuti video e spero mano a mano di aumentare sempre di più la qualità c'è anche il canale telegram dove vi faccio vedere foto magari mentre monto oppure vi racconto cose oppure magari faccio sondaggi su quale quale può essere il prossimo argomento da portare sul canale e poi c'è anche il canale discord io vi saluto vi ringrazio e to be continued come si dice ci vediamo alla prossima ciao ragazzi ciao ciao