Libro 1 – Capitolo 4 – Introduzione agli algoritmi e alla programmazione

Capitolo 4- Introduzione agli algoritmi e alla programmazione

Indice degli argomenti

Introduzione

Nell’informatica per la creazione di programmi per svolgere dei compiti precisi e personalizzati o per risolvere in modo automatico un problema è necessario introdurre una metodologia di risoluzione ben precisa che fa uso del linguaggio naturale e degli algoritmi.

Risoluzione di problemi

Una delle questioni fondamentali della programmazione in informatica è il metodo di risoluzione dei problemi. Infatti solo attraverso una attenta formulazione è possibile risolvere il problema in modo adeguato. Ad esempio si consideri il seguente problema:

“Assegnata la base e l’altezza di un triangolo rettangolo calcolare l’area e il perimetro”

Il primo passo da compiere è l’individuazione dei dati noti e dei dati incogniti. In altri termini è necessario definire quali sono i risultati richiesti dal problema e quale i dati conosciuti. Successivamente si esplicitano i passi da compiere per determinare il risultato. Questa ultima fase espressa anche mediante un linguaggio naturale prende il nome di procedimento risolutivo. Nel problema citato prima si può procedere come segue:

Dati da determinare (risultati): perimetro e area

Dati conosciuti: base, altezza

Indicheremo con A e 2p l’area e il perimetro e con b e h la base e l’altezza del triangolo mentre con i l’ipotenusa (in quanto il triangolo è rettangolo).

Il procedimento risolutivo si può così strutturare:

Inizio

Leggi b e h

Calcola l’ipotenusa i=Radice quadrata(quadrato di h+qudrato di b)

Calcola il perimetro 2p=i+h+b

Calcola l’area A=(b*h)/2

Scrivi A e 2p

Fine

Come si nota la descrizione del procedimento risolutivo soluzione è espressa attraverso le parole di uso corrente come leggi, scrivi, calcola con l’aggiunta delle formule (non sempre presenti se non si tratta di un problema di matematica o di calcolo). Nella risoluzione dei problemi spesso si usa identificare i dati e i risultati con dei nomi informatici che sono: dati in ingresso, dati di uscita, e dati di lavoro.
Con dati di ingresso (Input) si intendono i dati conosciuti (quelli forniti dall’utente), i dati di uscita (Output) sono i risultati, mentre i dati di lavoro o interni sono delle grandezze necessarie alla risoluzione del problema ma che non sono richiesti ne in Input e non sono forniti in Output. Nell’esempio precedente l’ipotenusa del triangolo rappresenta un dato di lavoro in quanto non è possibile calcolare il perimetro se prima non determino l’ipotenusa. Nella risoluzione di problemi da affidare ad un calcolatore l’utente deve sempre esplicitare all’inizio le tre classi di dati di Input, Lavoro, Output.
Nella soluzione del problema sono state svolte le seguenti fasi:

Pseudo-codifica e Flow Chart

Nel paragrafo precedente, abbiamo visto la risoluzione di un semplice problema, secondo il modo di pensare e di ragionare delle persone. Tutto questo all’apparenza, potrebbe sembrare non applicabile quando, occorre poi come accade realizzare un programma informatico che siano eseguite da un calcolatore che chiameremo anche “esecutore”.


In realtà, le persone quando tentano di risolvere problemi, utilizzano in modo più meno consapevoli, dei processi mentali di astrazione e modellazione del problema, da risolvere che prende sempre spunto da una situazione reale. I processi mentali di astrazione e modellazione fanno parte del pensiero computazionale che può sintetizzare le fasi di modellizzazione di un problema e la sua soluzione. Il pensiero computazionale però assume un significato molto più ampio quando viene applicato a processi reali ben più complessi come le previsioni meteorologiche, la strategia di gioco degli scacchi ecc.
Prendendo spunto, da quanto appreso finora, introduciamo una metodologia rigorosa per la soluzione dei problemi, definendo anche gli strumenti per la rappresentazione della loro soluzione.
Il modo immediato per rappresentare la soluzione di un problema è scriverla nella lingua italiana con l’uso di termini semplici come inizia, leggi, scrivi, calcola, fine, e altri che si possono aggiungere man mano che la soluzione del problema è più articolata. Ad esempio se per arrivare alla soluzione occorre prendere delle decisioni o ripetere una serie di operazioni.
I linguaggi naturali, quindi descrivono la soluzione del problema con le parole e le frasi della lingua scritta, restringendo le parole strettamente a quelle necessarie.
In informatica, nel campo della programmazione, si parla invece di linguaggi artificiali che in modo chiaro ed esaustivo fanno corrispondere ad ogni frase un’azione che il calcolatore deve poi eseguire.
I linguaggi artificiali si distinguono in due grosse categorie: linguaggi ad alto livello astratti e orientati al problema e linguaggi a basso livello orientati alla particolare architettura hardware del sistema.
Nel primo caso, il programma scritto con un linguaggio ad alto livello è eseguibile su più sistemi con architetture non sempre identiche, mentre un programma scritto in in linguaggio a basso livello è eseguibile solo su quella particolare architettura hardware.
Tutto questo è da imputare alla componente hardware che esegui i programmi ovvero il microprocessore o CPU, discusso nel primo capitolo.
In altre parole un programma scritto in un linguaggio ad alto livello per architettura Windows 32 bit può essere eseguito in tutte le macchine con sistemi Windows a 64 bit (è retro-compatibile) e a 32 bit. Non è vero il contrario perché cambia proprio il software di base oltre che l’architettura della CPU.

Leggi tutto: Libro 1 – Capitolo 4 – Introduzione agli algoritmi e alla programmazione

Tipi di Linguaggio ad alto livello

Ai giorni nostri i linguaggi ad alto livello che sono stati sviluppati nel corso dei decenni sono innumerevoli alcuni con ambiti specifici di utilizzo.
Negli anni ‘60 sono stati ideati prima il Fortran (1954 è stato il primo linguaggio di programmazione implementato su IBM 704) e il Cobol, il primo utilizzato in ambito universitario per la sua enorme potenza nel campo numerico. Il Fortran ha poi evoluto verso nuove versioni come Fortran 77, 90, 95 e 2003, anche perché una delle sue caratteristiche principali è la velocità di esecuzione dei suoi eseguibili. Il secondo per l’elaborazione di grandi quantità di informazioni, e utilizzato fino al 2013 per il software di gestione dei bancomat per la sua enorme stabilità. Negli anni ’70 grazie all’introduzione sul mercato del sistema operativo Unix, viene introdotto il linguaggio C procedurale (ovvero orientato alla soluzione del problema) che nel corso degli anni è utilizzato per lo sviluppo di programmi e moduli di sistema operativo, giochi, e applicazione anche per la grande disponibilità di tipi di dati anche molto complessi.
Un primo esempio di codice C è:

#include <stdio.h>

int main()

{

printf(“Hello world!\n”);

return 0;

}

Questo programma visualizza a video nella finestra CLI (interfaccia a linea di comando del sistema operativo) una scritta “Hello World”. Tutti i programmi scritti in C e C++ hanno la caratteristica come vedremo nei prossimi capitoli di essere strutturati in tre blocchi distinti: Intestazione, Dichiarazione e Programma.
Nel 1983, viene introdotto anche il linguaggio C++ orientato agli oggetti e non solo procedurale, la sintassi è la stessa del linguaggio C ma con nuove funzionalità.
Tutti i linguaggi di programmazione insieme ad altri non citati come il Basic, il Pascal, ecc. sono orientati alla piattaforma software ove sono utilizzati. In altri termini se lo sviluppatore scrive un programma in C nel sistema Linux, questo non sarà eseguibile in ambiente Windows a meno che non si facciano delle modifiche, in quanto esso introduce una dipendenza stretta fra il software di base e il linguaggio stesso.
Verso la fine degli anni 90 la Sun introduce il linguaggio Java che risolve in modo elegante tutti problemi legati alla portabilità del codice introducendo il concetto di Java Virtual Machine. La JVM così come viene definita dai tecnici, consente di scrivere programmi in java che sono multipiattaforma poiché sarà la macchina virtuale che si interpone fra Hardware e S.O. a gestire secondo la specifica piattaforma l’esecuzione del codice.
Il programmatore scrive il programma in linguaggio Java poi con un procedimento produce un meta-codice che viene eseguito nella Java Virtual Machine che invia poi le azioni da far eseguire al sistema operativo e all’hardware. In questo modo il calcolatore che deve eseguire il programma java deve avere installata la JVM. La JVM è disponibile in tutte le piattaforme hardware software da Linux a Windows, passando per altri sistemi operativi.

I Linguaggi a basso livello

Il linguaggio a basso livello è orientato all’hardware della macchina, nello specifico alla CPU. Ogni CPU possiede un set di istruzioni denominato ISA.
Il programmatore per scrivere i programmi in linguaggio macchina utilizza il linguaggio Assembler, che altro non è che una rappresentazione simbolica delle istruzioni nel linguaggio macchina. Le istruzioni macchina sono codificate in codice menmonico di più facile gestione da parte del programmatore.
Il linguaggio macchina non garantisce la portabilità, anche se il suo vantaggio principale è l’enorme velocità di esecuzione, comparata rispetto ad un programma in codice macchina ma derivato dalla compilazione di un programma sorgente ad alto livello scritto in C/C++ ecc.

Per continuare a leggere questo articolo devi sottoscrivere un abbonamento
Puoi abbonarti al link al menù principale o cliccando sul link Abbonati Ora!