Esercizi svolti diagrammi di flusso

Esercizi svolti diagrammi di flusso

Proponiamo due semplici esercizi svolti con i diagrammi di flusso.

Primo esercizio svolto diagrammi di flusso

Proponiamo un primo esercizio con i diagrammi di flusso.

Dati due numeri A e B verificare se A è il quadrato di B.

Prendiamo in input A e B utilizzando il parallelogramma.

Dopo utilizzare il rombo per verificare se A è uguale al quadrato di B. Cioè poniamo come test: A==B*B.

Se la condizione è vera visualizziamo semplicemente in output, utilizzando il parallelogramma, il messaggio ‘A è il quadrato di B‘.

Altrimenti se la condizione è falsa visualizziamo in output il messaggio: ‘A non è il quadrato di B‘.

Ecco dunque il diagramma a blocchi:

esercizio svolto diagrammi di flusso

Secondo esercizio

Date le dimensioni di due rettangoli calcolarne l’area e determinare quale dei due ha la superficie maggiore.

Per risolvere questo algoritmo dobbiamo prendere in input i dati necessari per calcolare l’area dei due rettangoli.

Quindi prendiamo in input:

b1 – indica la base del primo rettangolo

h1 – indica l’altezza del primo rettangolo

b2 – indica la base del secondo rettangolo

h2 – indica l’altezza del secondo rettangolo

Dopo calcoliamo l’area dei due rettangoli utilizzando due variabili A1 e A2.

Infine confrontiamo le due aree così ottenute per vedere quale delle due è maggiore. Quindi se A1 è maggiore di A2 scriviamo che A1 è maggiore. Altrimenti non possiamo ancora dire che A2 è maggiore di A1 in quanto dobbiamo verificare se sono uguali.

Ecco quindi il diagramma di flusso che rappresenta l’algoritmo proposto.

Notate che abbiamo messo le 4 variabili b1, h1, b2 e h2 per comodità nello stesso input.

esercizio diagramma di flusso

Ho presentato alcuni esercizi svolti sui diagrammi di flusso, nelle prossime lezioni ne presenterò degli altri.

Alcuni link utili

Indice tutorial diagrammi a blocchi

1 – Diagramma a blocchi

2 – Primi esercizi con i diagrammi di flusso (perimetro triangolo; area di un trapezio)

3 – Altro semplice esercizio sui flow chart (calcolare uno sconto)

4 – Area del cerchio

5 – Precedente e successivo di un numero

6 – Introduzione agli algoritmi di selezione

7 – Minore tra due numeri

8 – Maggiore fra tre numeri

9 – Algoritmo di selezione sugli angoli

Esercizi diagrammi di flusso

Esercizi diagrammi di flusso

Esercizi diagrammi di flusso – In questa lezione propongo alcuni esercizi sui diagrammi di flusso utilizzando l’istruzione di selezione, cioè l’istruzione se (if).

Esercizi diagrammi di flusso – Primo algoritmo

Il biglietto di ingresso ad un museo ha le seguenti tariffe. Per i bambini di età inferiore a 6 anni l’ingresso è gratuito (opzione 1), per gli studenti 8 euro (opzione 2), per i pensionati 10 euro (opzione 3), per tutti gli altri 15 euro (opzione 4). Creare un programma in cui l’utente inserisce un numero tra 1 e 4 e viene comunicato il prezzo relativo all’opzione scelta. Se il numero non è un’opzione valida viene mostrato un messaggio di errore (tipo il numero non corrisponde a nulla!).

Quindi in questo caso l’unico input da prendere è la variabile opzione che può avere il valore 1, 2, 3 oppure 4. Se si inserisce qualsiasi altro numero si visualizza un messaggio di errore.

Allora saranno necessari quattro if annidati in quanto dobbiamo considerare anche il caso in cui il numero non è tra 1 e 4.

Schematizziamo dunque la soluzione:

– se opzione vale 1 allora il biglietto è gratis.

– se opzione vale 2 allora il biglietto costa 8 euro.

– se opzione vale 3 allora il biglietto costa 10 euro.

– se opzione vale 4 allora il biglietto costa 12 euro.

– altrimenti si visualizza opzione non valida.

Per chi volesse consultarla, allego anche la pseudo-codifica:

PROG main
    IN op
    IF op==1
        OUT "Gratis"
    ELSE //if op==1
        IF op==2
            OUT "Paghi 8 euro"
        ELSE //if op==2
            IF op==3
                OUT "Paghi 10 euro"
            ELSE //if op==3
                IF op==4
                    OUT "Paghi 15 euro"
                ELSE //if op==4
                    OUT "Opzione non valida"
                END IF //op==4
            END IF //op==3
        END IF //op==2
    END IF //op==1
END PROG //main

Secondo algoritmo

Un insegnante decide di valutare il test di uno studente attribuendo un punteggio a ogni risposta esatta e assegnando un giudizio in base al punteggio totale ottenuto, secondo il seguente prospetto: da 0 a 30 insufficiente, da 31 a 60 sufficiente, da 61 a 90 buono e da 91 a 100 ottimo.
Dopo aver acquisito il punteggio ottenuto dallo studente nel test, si visualizzi in output il giudizio secondo le fasce di punteggio stabilite nella tabella sopra.

Quindi prendiamo in input la variabile p che sta per punteggio e controlliamo se:

– p è minore di 0 – Dato non valido

– p è minore o uguale a 30 – Insufficiente (N.B Facciamo senza a controllare se p è maggiore di 0 perché è scontato).

– p è minore o uguale a 60 – Sufficiente (N.B Facciamo senza a controllare se p è maggiore di 30 perché è scontato).

– p è minore o uguale a 90 – Buono (N.B Facciamo senza a controllare se p è maggiore di 60 perché è scontato).

– p è minore o uguale a 100 – Ottimo (N.B Facciamo senza a controllare se p è maggiore di 90 perché è scontato).

– altrimenti (se p è maggiore di 100) il dato non è valido.

Per risolvere l’algoritmo in questo modo sono necessari 5 if annidati.

Presento anche la pseudo – codifica per chi la volesse consultare:

PROG main
    IN p
    IF p<0
        OUT "dato non valido"
    ELSE //if p<0
        IF p<=30
            OUT "insufficiente"
        ELSE //if p<=30
            IF p<=60
                OUT "sufficiente"
            ELSE //if p<=60
                IF p<=90
                    OUT "buono"
                ELSE //if p<=90
                    IF p<=100
                        OUT "ottimo"
                    ELSE //if p<=100
                        OUT "Dato non valido"
                    END IF //p<=100
                END IF //p<=90
            END IF //p<=60
        END IF //p<=30
    END IF //p<0
END PROG //main

Più avanti svilupperemo tanti altri esercizi sui diagrammi di flusso.

Alcuni link utili

Indice tutorial diagrammi a blocchi

1 – Diagramma a blocchi

2 – Primi esercizi con i diagrammi di flusso (perimetro triangolo; area di un trapezio)

3 – Altro semplice esercizio sui flow chart (calcolare uno sconto)

4 – Area del cerchio

5 – Precedente e successivo di un numero

6 – Introduzione agli algoritmi di selezione

7 – Minore tra due numeri

8 – Maggiore fra tre numeri

9 – Algoritmo di selezione sugli angoli

Esempi Python

Esempi Python

Esempi Python – In questa lezione faremo altri esempi in Python utilizzando il ciclo for, al fine di acquisire una comprensione più approfondita di come questo costrutto può essere utilizzato per iterare attraverso dati, eseguire operazioni ripetute e risolvere una vasta gamma di problemi di programmazione.

Proponiamo quindi alcuni algoritmi di esempio.

Esempi Python – Primo esempio in Python

Scrivere i numeri da 1 a N saltando i multipli di 3.

Quindi chiediamo di prendere in input un numero N, dopo utilizziamo un ciclo for con range da 1 fino ad N + 1.

All’interno del ciclo se l’indice i non è divisibile per 3 stampiamo il numero, altrimenti non facciamo nulla.

Ecco dunque una possibile risoluzione.

N = int(input('Inserire N: '))

for i in range(N+1):
    if i % 3 != 0:
        print(i)

Esempi Python – Secondo esempio

Dato un numero n scrivere i primi ‘n’ quadrati dei numeri interi.

Ad esempio se n = 5 i primi 5 quadrati sono 1, 4, 9, 16, 25.

Al solito chiediamo all’utente di inserire un numero interno N. Dopo con un ciclo for con indice i nel range tra 1 ed N+1, calcoliamo le potenze e le visualizziamo.

N = int(input('Inserire N: '))

for i in range(1, N+1):
    i **= 2
    print(i)

Migliora le tue capacità di programmazione Python seguendo i nostri corsi in diretta!

corsi Python

Esempi Python – Terzo esempio

Dati due numeri m ed n, scrivere, contare e sommare i numeri che sono divisori di entrambi.

Esempio con m = 20, n = 30    1 2 5 10 conteggio 4, somma 18

Quindi prendiamo in input m ed n e inizializziamo le variabili c ed s a 0.

La variabile c rappresenta il contatore dei divisori, mentre s rappresenta la somma dei divisori.

Dopo con un ciclo for con i nel range 1 ed m+1, dividiamo m ed n per i e, solo se entrambi verificano il criterio di divisibilità impostato, stampiamo i valori di i, incrementiamo c e sommiamo il divisore alla variabile s.

Infine visualizziamo i valori di c e di s.

Ecco dunque il codice completo:

m = int(input('Inserire m: '))
n = int(input('Inserire n: '))

c = s = 0

for i in range(1, m+1):
    if m % i == 0 and n % i == 0:
        print(i)
        c += 1
        s += i
        
print('I divisori in comune sono in totale: ', c)
print('La somma dei divisori in comune è: ', s)

Così facendo però se ad esempio m = 30 e n = 20 allora divideremo 20 per 30 e ciò non ha senso allora potrei fermarmi fissando un range al valore minimo tra i due. Ad esempio:

m = int(input('Inserire m: '))
n = int(input('Inserire n: '))

c = s = 0

for i in range(1, min(m,n)+1):
    if m % i == 0 and n % i == 0:
        print(i)
        c += 1
        s += i
        
print('I divisori in comune sono in totale: ', c)
print('La somma dei divisori in comune è: ', s)

Potrei anche calcolare prima del for il minimo tra i dei due numeri senza usare la funzione minimo.

Conclusioni

Gli esempi proposti illustrano in modo chiaro e pratico come utilizzare il ciclo for in Python per risolvere una varietà di problemi di programmazione. Il primo esempio dimostra come iterare attraverso una sequenza di numeri, saltando i multipli di 3, utilizzando l’operatore modulo per controllare la divisibilità. Il secondo esempio mostra come generare i primi quadrati dei numeri interi utilizzando un ciclo for e calcolando le potenze. Infine, il terzo esempio illustra come trovare, contare e sommare i divisori comuni di due numeri utilizzando un ciclo for e la logica dei divisori.

Questi esempi forniscono un’ottima base per comprendere le capacità del ciclo for e come può essere utilizzato per risolvere problemi reali.

Che l’esplorazione e l’apprendimento continuino, portando ad una maggiore padronanza della programmazione e alla risoluzione di sfide sempre più complesse! E non mancate di leggere il libro “50 Algortimi per imparare Python” disponibile su Amazon:

Questi erano solo alcuni esempi in Python, nelle prossime lezioni vedremo altre applicazioni.

Alcuni link utili

Corso in diretta su Python

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili

11 – Modulo math

Fattoriale

Fattoriale

In questa lezione calcoleremo il fattoriale di un numero in Python utilizzando vari metodi.

Innanzitutto diamo la definizione.

In matematica il fattoriale di un numero naturale n, è il prodotto dei numeri interi positivi minori o uguali a tale numero e si indica con n!

Quindi ad esempio 5!=5*4*3*2*1=120

mentre per convenzione 0!=1


Il fattoriale in Python

Realizziamo adesso un programma per il calcolo del fattoriale in Python.

Prendiamo in input n e poniamo la variabile f uguale ad 1, cioè all’elemento neutro della moltiplicazione.

Dopo, con un ciclo for che ha l’indice i che varia da un range di 1 ad n+1, calcoliamo il fattoriale eseguendo questa operazione f = f * i.

Quindi se ad esempio n è uguale a 5 avremo questi passaggi:

f=1*1, f=1*2, f=2*3, f=6*4, f=24*5

In output stamperemo dunque 120.

Una possibile implementazione dell’algoritmo può essere dunque questa:


n=int(input('Inserire il numero: '))
f=1

for i in range(1,n+1):
    f*=i
    
print(n)

Soluzione ricorsiva al fattoriale

Possiamo anche trovare una soluzione ricorsiva. Diamone innanzitutto la definizione.

Si definisce ricorsiva una funzione che invoca se stessa.

La tecnica ricorsiva consente di scrivere algoritmi eleganti, ma non sempre rappresenta la soluzione più efficiente. Ciò è dovuto al fatto che la ricorsione viene implementata con le funzioni e l’invocazione di una funzione ha chiaramente un costo rilevante.

Definiamo quindi una funzione ed all’interno controlliamo innanzitutto se n è uguale a 0, ritornando il valore 1. Altrimenti moltiplichiamo n per il fattoriale di n-1.

Proponiamo dunque la seconda soluzione al calcolo del fattoriale in Python che fa uso della ricorsione.


n = int(input('Inserire il numero: '))

def fattoriale(n):
    if n = =0:
        return 1
    else:
        return n*fattoriale(n-1)

print ('Il fattoriale è', fattoriale(n))

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili

11 – Modulo math

Lo slicing in Python

Lo slicing in Python

Lo slicing in Python permette di creare delle sotto – sequenze, quindi è un modo per ottenere più elementi contemporaneamente da una lista.

Abbiamo già utilizzato lo slicing nelle stringhe nel seguente tutorial: stringhe in python.

Lo slicing in Python – creare sottoliste

Facciamo subito un esempio per capire come funziona lo slicing.

anni = [2019,2018,2017,2016,2015,2014]

p = anni[2:] #parte dall'indice 2 fino alla fine della lista
q = anni[:2]
m = anni[2:4]
e = anni[3]
n = anni[-1]

print(p) 
print(q)
print(m)
print(e)
print(n)

Esaminiamo l’esempio proposto.

Con anni[2:] si crea una sottolista che parte dall’indice 2 e va fino alla fine della lista. Se non si specifica il secondo elemento infatti si intende fino alla fine.

Invece con anni[:2] si indicano solo i primi due elementi della lista. Se non specifico il primo elemento si intende dall’inizio.

Migliora le tue capacità di programmazione Python seguendo i nostri corsi in diretta!

corsi Python

Dopo con anni[2:4] creiamo una sottolista che parte dall’indice 2 e arriva fino all’indice 4-1. Stamperà dunque solo 2 elementi.

Poi con anni[3] indichiamo solo l’elemento con indice 3 e cioè l’anno 2016.

Infine con anni[-1] si parte da destra e quindi si stampa solo l’anno 2014.

Dunque riepilogando avremo il seguente output:

[2017, 2016, 2015, 2014]
[2019, 2018]
[2017, 2016]
2016
2014

Attenzione se indichiamo ad esempio anni[6] si avrà il seguente errore IndexError: list index out of range, in quanto l’indice esce fuori dal range della lista.

Specificare un passo

Negli slice è possibile inoltre specificare un passo, ad esempio:

anni = [1,2,3,4,5,6,7,8,9,10]

p = anni[1:10:2]

print(p) 

Si stamperanno gli elementi dall’indice 1, quindi dal numero 2, fino all’indice 9 a passi di 2. Si avrà cioè il seguente output [2, 4, 6, 8, 10].

Per ottenere un ordine inverso posso indicare semplicemente lo step di -1, come da esempio sotto:

anni = [1,2,3,4,5,6,7,8,9,10]

p = anni[::-1]

print(p) 

Stamperà quindi [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]. Posso indicare anche lo step di -2 per stampare i numeri [10, 8, 6, 4, 2].

Questi sono solo alcuni esempi con l’uso dello slicing in Python, più avanti realizzeremo altre applicazioni.

Alcuni link utili

Corso in diretta su Python

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili

11 – Modulo math

12 – Operatori di confronto e booleani