Utente:Sabato nunzia/Algoritmi

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Questa è la pagina di prova dove Nunzia Sabato, Maria Chiara Calviello, Francesca Rocco, Lucia Romaniello e Donatella D'Anzi approfondiranno il seguente argomento: problemi e algoritmi (introduzione generale e confronto tra Visual Basic e C++).

Il termine Algoritmo deriva dal nome di un matematico arabo del IX secolo: Abu Ja'far Mohammed ibn Musa al-Kowarizm (in arabo significa "padre di Ja'far, Maometto, figlio di Mosè"). Nell'anno 825 questo personaggio pubblicò due opere:una di aritmetica e una di algebra, quest'ultima intitolata Kitab Al-jabr Wal Muqabala. Proprio dal titolo di quest'ultima opera ebbe origine la parola inglese algebra (al-jabr). Il termine algoritmo deriva da modifiche e adattamenti del nome del matematico (al-Kowarizm).

Leonardo da Pisa, meglio conosciuto come il Fibonacci, grandissimo matematico vissuto agli inizi del XIII secolo. Per risolvere un problema pratico, individuò una serie di numeri in cui ogni numero è il risultato della somma dei due precedenti fino all'infinito. Si scoprì che può essere applicata, per esempio, nel calcolo delle probabilità, nella sezione aurea e nel triangolo aureo. Al matematico pisano si deve anche l’introduzione dei numeri arabi in Italia.

Riferendosi alle scoperte del matematico arabo era solito semplificarne il nome in "Algoritmo". Alla luce dell'opera di Abu Ja'far Mohammed ibn Musa al-Kowarizm, tutta rivolta allo studio dei procedimenti aritmetici di calcolo, necessari per risolvere i problemi, il termine algoritmo venne utilizzato per indicare questo tipo di procedimento.

Un procedimento risolutivo è un algoritmo quando, fissato l'insieme finito delle azioni elementari univocamente interpretabili e definite, è possibile descrivere passo per passo il procedimento che risolve un problema, costruendo una successione ordinata e finita di istruzioni, la cui esecuzione si arresta per fornire i risultati di un problema, a partire da ogni valore assunto dai dati iniziali.

Un algoritmo deve essere:

  • finito: la strategia risolutiva descritta dall'algoritmo deve essere composta da un numero finito di azioni elementari.L'algoritmo, inoltre, deve prevedere un solo inizio e una sola fine;
  • univoco o non ambiguo o preciso: ogni azione deve essere definita nei suoi effetti rigorosamente e senza ambiguità per l'esecutore;
  • generale: deve essere valido non solo per un particolare problema, ma per tutti i problemi di una stessa classe;
  • completo: deve considerare tutti i casi possibili che si possono verificare durante l'esecuzione e, per ogni caso, indicare la soluzione da seguire;
  • osservabile nei risultati: deve esserci riscontro oggettivo del risultato.
  • deterministico: a ogni unità finita di tempo l'esecutore deve scegliere e compiere una e una sola azione. Si dice anche che, partendo dagli stessi dati iniziali, l'esecuzione dell'algoritmo deve fornire sempre gli stessi risultati finali.

Un algoritmo si dice efficiente quando:

  • è corretto, cioè produce il risultato atteso;
  • è veloce in termini di tempo impiegato per produrre il risultato;
  • è parsimonioso in termini di risorse allocate per produrre il risultato.

Rappresentazione degli algoritmi

[modifica | modifica wikitesto]

Per rappresentare un algoritmo possiamo ricorrere:

  • al formalismo dei diagrammi a blocchi (detti anche DaB e flow-chart);
  • al formalismo dello pseudolinguaggio (detto anche linguaggio di progetto).

Un diagramma a blocchi è una descrizione grafica dell'algoritmo, realizzata mediante appositi simboli, che mette in evidenza il flusso di esecuzione delle istruzioni. I simboli utilizzabili nei diagrammi a blocchi sono:

  • Ovale: l'inizio e la fine dell'algoritmo;
  • Rettangolo: un'azione o un blocco di azione;
  • Freccia: ordine in cui eseguire i vari passi;
  • Rombo: una condizione che può essere vera o falsa;
  • Parallelogramma (i): la capacità di fornire informazioni (input) al computer, mediante la tastiera, durante l'esecuzione;
  • Parallelogramma (o): la possibilità di ricevere iformazioni (output) dal computer, sullo schermo, durante l'esecuzione;

Lo pseudolinguaggio Lo pseudolinguaggio è un linguaggio formale, ossia un linguaggio che utilizza simboli ai quali corrisponde uno e un solo significato in qualsiasi contesto. La descrizione formale dell'algoritmo in pseudolinguaggio si dice pseudocodice. L'attività di scrittura dello pseudocodie prende il nome il nome di pseudocodifica. Scopo principale della pseudocodifica è portare il risolutore a esprimere le proprie istruzioni in una forma naturale, utilizzando frasi ed espressioni elementari della lingua italiana. Ciò permette di concentrarsi sulla risoluzione logica del problema, invece che sulla forma e sui vincoli da rispettare nella sua enunciazione. Ogni pseudolinguaggio ha un proprio lessico, una propria sintassi e una propria semantica, ma la progettazione di questo tipo di formalismo è volta alla comprensibilità e alla leggibilità del codice; la sintassi sarà quindi meno rigorosa rispetto a un vero linguaggio e le parole chiave saranno evocative, in modo da rendere più intuitiva la sua interpretazione. Per usare correttamente lo pseudolinguaggio occorre rispettare le seguenti regole:

1. Le parole chiave, o parole riservate, sono scritte in maiuscolo (non possono essere usate come identificatori). Sono utilizzati verbi all'imperativo proprio per evidenziare l'ordine che il programmatore impone all'esecutore.

2. Le altre riserve usate nell'algoritmo sono scritte in maiuscolo se composte da una sola lettera (per esempio A,K), con l'iniziale maiuscola se composte da più caratteri (per esempio Somma, Totale, Contatore) e rigorosamente senza spazi.

3. Nell'istruzione della sintassi di un'istruzione:

  •Le parole racchiuse tra parentesi angolari <> rappresentano le categorie sintattiche,  
   ossia elementi generali del linguaggio che devono essere ulteriormente specificati.
  •Le parentesi quadre [] indicano l'opzionalità, ossia i blocchi in esse rachiusi
   possono anche non essere presenti
  •I blocchi separati dal simbolo | possono essere usati in alternativa. 
  •Le parentesi graffe indicano la ripetizione, ossia i blocchi in esse racchiuse 
   possono essere ripetuti più volte.
  •Il simbolo // è utilizzato per inserire i commenti per le varie istruzioni, che saranno 
   ignoratidall'esecutore.

Lo pseudolinguaggio, quindi, viene usato per esprimere con chiarezza e semplicità la soluzione loica di un problema di elaborazione dati. Di per sé non può essere immesso direttamente in un calcolatore per essere eseguito, dovrà essere tradotto in un codice scritto in un linguaggio di programmazione che possa essere interpretato dal computer. Una variabile è un insieme di dati modificabili situati in una porzione di memoria destinata a contenere dei dati, suscettibili di modifica nel corso dell'esecuzione di un programma. Una variabile è caratterizzata da un nome. Una costante è un insieme di dati non modificabili situati in una porzione di memoria destinata a contenere dei dati, che non possono essere appunto modificati nel corso dell'esecuzione di un programma.

  • P. Gallo - P. Sirsi, Cloud: informatica - secondo biennio, Milano, 2012, pp. 26-28.