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.