Buongiorno amici, e benvenuti alla seconda lezione del corso base di programmazione, ci tengo a precisare che, come voi, anche io sto imparando seguendo le mie stesse lezioni, sembra strano ma e così, oggi riepilogheremo il concetto di problema di algoritmo e di come esso possa essere rappresentato dal linguaggio naturale o pseudocodifica, ma andiamo per gradi, ricordiamo cosa è la soluzione di un problema? La soluzione di un problema la si ottiene dopo aver progettato un metodo risolutivo , è per tutte le istanze del problema, e l’istanza di un problema è un caso particolare di un dato problema detto problema generale, è necessario dunque sempre ricondursi al caso generale e mai fornire un metodo risolutivo per un caso particolare, si adatterebbe solo a quel caso e non sarebbe pertanto valida come soluzione.
Un semplice esempio lo possiamo vedere sotto:
devo risolvere 2 problemi, li chiameremo prob1 e prob2, sia nel primo problema che nel secondo problema devo calcolare il valore massimo di una serie di numeri, ma andiamo con ordine:
Prob1
- Consideriamo appunto i seguenti numeri interi
- 15 157 325 8 23
- Qual’è il valore massimo trà i 5 numeri interi?
Prob2
- Consideriamo altri numeri interi
- 87 34 56
- Qual’è il valore massimo trà i 3 numeri interi?
I 2 problemi prob1 e prob2 sono uguali o sono diversi? Possiamo dire che i 2 problemi sono uguali e ciascun problema rappresenta un istanza di un problema generale, ovvero quello di trovare il valore massimo frà una lista di interi, ma cosa varia allora frà i 2 problemi? Soltanto il numero degli elementi che appunto in prob1 sono 5 e prob2 sono 3 e che tra i quali troveremo il nostro numero massimo.
Nella specifica un algoritmo si può esprimere dunque in:
- Linguaggio naturale (pseudocodifica)
- diagrammi di flusso (descrizione grafica)
- linguaggio di programmazione (codifica)
e dunque possiamo dire che un algoritmo è descritto da frasi di un linguaggio naturale che può essere Italiano, Inglese, e le operazioni elementari sono definite tramite nomi, verbi ed espressioni, i nomi denotano i dati.
Selezione binaria:
Un altro esempio che voglio portare a conoscenza e quello della selezione binaria, dati 2 numeri interi, determiniamo il valore massimo, quindi, prima individiamo i dati di input che denotiamo con x e y ed il dato di output con z, per ciascun dato definiamo il dominio di definizione ( l’insieme dei valori che possono variare di input e output e dato appunto da numeri interi )
- i nostri 2 numeri interi dati per x e y sono i nostri dati di input
- z è il valore massimo corrisponde a output
input x, y e la coppia di numeri interi
output z è un numero intero
Bene, ora possiamo scrivere il nostro algoritmo:
- Se x e minore di y
allora z e uguale a y
altrimenti z è uguale a x
Fine
… volendo possiamo scriverlo anche cosi:
- Se x < y
allora z = y
altrimenti z = x
Fine
possiamo utilizzare o dei simboli matematici o anche la nostra lingua italiana.
Nel nostro algoritmo risulta molto importante che le istruzioni debbano essere eseguite sotto una condizione e devono essere scritte spostandosi verso destra rispetto alla posizione della riga in cui c’è il controllo, ciò viene definito identazione, il suo obbiettivo è solo quello di migliorare la leggibilità dell’algoritmo.
Quello che abbiamo visto oggi è sì un algoritmo ma lo abbiamo elaborato in un linguaggio naturale che risulta utile nella analisi del problema e nel progetto dell’algoritmo.
Per oggi è tutto, ciò che ho scritto finora altri non è che un riassunto di alcuni manuali presi in giro per la rete, spero tanto di aver fatto cosa gradita e, chi voglia, può commentare la news, alla prossima.
Complimenti per l’ottima iniziativa. Bravo
Continuo a supportare questa iniziativa anche se conoscevo questo argomento, ottima spiegazione!
Otiimo continua cosi