# data[].attributes.body
Per poter illustrare il concetto di ALGORITMO, occorre partire dal definire che cosa si intende per problema.

Un problema è un quesito (ossia una domanda) che attende una risposta detta soluzione del problema. Quindi per giungere alla soluzione di un problema occorre individuarne il processo risolutivo.

Naturalmente deve esistere un modo di controllare l’esattezza della soluzione trovata al problema alla fine del processo risolutivo, ossia deve essere possibile effettuare la verifica (il test).

# data[].attributes.body
Un ALGORITMO contiene la descrizione del processo risolutivo di un certo problema assegnato.

Tale descrizione consiste in una sequenza , finita, ordinata, univocamente interpretabile e dettagliata di istruzioni o passi elementari che permettono di risolvere una determinata classe di problemi.

ATTENZIONE

Non tutti i problemi che si incontrano sono risolvibili tramite algoritmi!

# data[].attributes.body
Un algoritmo deve essere FINITO

Il processo risolutivo descritto dall’algoritmo deve terminare dopo un numero finito di passi o azioni elementari e deve essere caratterizzato da un punto iniziale e da un punto finale.

Un algoritmo deve essere ORDINATO

Il processo risolutivo descritto dall’algoritmo contiene una serie di istruzioni o passi che devono essere esattamente nell'ordine stabilito dal risolutore.

# data[].attributes.body
Un algoritmo deve essere NON AMBIGUO

Ogni passo o azione elementare di un algoritmo deve essere univocamente interpretabile dall’esecutore ossia deve avere per lui un unico significato.

Un algoritmo deve essere DETTAGLIATO

Ad ogni passo dell’algoritmo deve corrispondere un’azione elementare che l’esecutore è in grado di compiere.

# data[].attributes.body
Un algoritmo rappresenta la massima concretizzazione di una capacità dell’essere umano: il problem solving, ossia la capacità di risolvere problemi, conoscendo le condizioni della situazione di partenza e prevedendo/osservando la situazione o le situazioni finali.

Un algoritmo è importante per scrivere programmi funzionanti, sia che esso sia il programma che esegue ciclicamente la somma di più numeri inseriti sia che sia un grande software tipo Adobe Photoshop o Microsoft Flight Simulator, giusto per citarne qualcuno.

# data[].attributes.body
Determinare un algoritmo per poi trasformarlo in un programma eseguibile da un calcolatore, consente di sviluppare il cosiddetto "pensiero computazionale"  ossia quel procedimento mentale che consente di risolvere problemi di varia natura seguendo metodi e strumenti specifici scelti in base ad una strategia pianificata.

E' un processo logico creativo che utilizziamo nella vita quotidiana ed impararne a farne uso consapevole ci permette di affrontare le situazioni in maniera analitica, scomponendole nei vari aspetti caratterizzanti e scegliendo per ognuno le soluzioni più idonee.

# data[].attributes.body
Il RISOLUTORE è colui che definisce il processo risolutivo per risolvere il problema.

Al risolutore spetta l’attività creativa e deve possedere competenze tecnico-scientifiche specifiche.

Tuttavia il processo risolutivo non dipende solo da capacità tecniche ma anche dalla cultura generale, dall’intuizione e dall'esperienza del risolutore.

Il risolutore è un essere umano!

# data[].attributes.body
L’ ESECUTORE è colui il quale esegue il processo risolutivo individuato dall'esecutore.

All’esecutore spetta l’attività esecutiva del procedimento, ossia seguire il processo risolutivo descritto dal risolutore per giungere concretamente alla soluzione del problema.

Un buon esecutore deve possedere come qualità principali sia la precisione di calcolo, sia la velocità di esecuzione.

L’esecutore ideale è la macchina!

# data[].attributes.body
Per descrivere i passi o azioni elementari di un algoritmo bisogna necessariamente utilizzare un linguaggio ad hoc.

La cosa più ovvia sarebbe quella di utilizzare un linguaggio naturale come l’italiano ma, a causa delle possibili ambiguità che il suo utilizzo può comportare, si fa ricorso ai cosiddetti linguaggi formali.

Per  linguaggio formale si intende un linguaggio in cui i simboli e/o parole utilizzate hanno sempre un unico significato.

# data[].attributes.body
La PSEUDOCODIFICA o pseudocodice è una rappresentazione testuale delle operazioni da eseguire per l'esecuzione di un algoritmo.

Tale linguaggio di progettazione "intermedio" rappresenta il passo precedente alla scrittura vera e propria delle istruzioni in un linguaggio di programmazione (la cosiddetta codifica).

Con la pseudocodifica l’utente può esprimere le proprie istruzioni in una forma "naturale", utilizzando frasi ed espressioni elementari della lingua italiana che però sono univocamente interpretabili.

# data[].attributes.headline
Come rappresentarlo: il flowchart o diagramma a blocchi

# data[].attributes.subject
Come rappresentarlo: il flowchart o diagramma a blocchi

# data[].attributes.body
Il FLOWCHART o diagramma di flusso è una rappresentazione grafica delle operazioni da eseguire per l'esecuzione di un algoritmo.

Ogni singolo passo dell'algoritmo è visualizzato tramite una serie di simboli standard che hanno un unico significato.

Esso consente di descrivere sia:

•le operazioni da compiere, rappresentate mediante figure convenzionali (rettangoli, rombi, esagoni, parallelogrammi, rettangoli smussati...), ciascuna con un preciso significato logico e all'interno delle quali un'indicazione testuale descrive l'attività da svolgere;

•la sequenza nella quale devono essere compiute, rappresentata con frecce di collegamento.

# data[].attributes.headline
Dulcis in fundo: l'algoritmo più bello del mondo

# data[].attributes.subject
Dulcis in fundo: l'algoritmo più bello del mondo

# data[].attributes.attachment_link.title
L'algoritmo più bello del mondo - Mesmer in pillole 136