• Non ci sono risultati.

Procedimento di risoluzione di un problema

N/A
N/A
Protected

Academic year: 2021

Condividi "Procedimento di risoluzione di un problema"

Copied!
6
0
0

Testo completo

(1)

La programmazione

Ver. 2.4

© 2010 - Claudio Fornaro - Corso di programmazione in C

Algoritmo

Procedimento di risoluzione di un problema

Permette di ottenere un risultato eseguendo una sequenza finita di operazioni elementari

Esempi:

Una ricetta di cucina

Il metodo per calcolare le radici di un’equazione di secondo grado

Le istruzioni per utilizzare il microonde

Ci possono essere più algoritmi in grado di risolvere lo stesso problema

3

Algoritmo

Proprietà fondamentali dell'algoritmo:

la sequenza di istruzioni deve essere finita (finitezza);

la sequenza di istruzioni deve portare ad un risultato (efficacia);

le istruzioni devono essere eseguibili materialmente (realizzabilità);

le istruzioni devono essere espresse in modo non ambiguo (non ambiguità).

È importante valutare le risorse utilizzate (tempo, memoria, …) perché un consumo eccessivo delle stesse può pregiudicare la possibilità stessa di utilizzo di un algoritmo

4

Programmare

Se esiste un procedimento che:

può essere descritto in modo non ambiguo fino ai dettagli

conduce sempre all'obiettivo desiderato in un tempo finito

allora esistono le condizioni per affidare questo compito a un calcolatore

Si descrive l'algoritmo in questione in un

programma scritto in un opportuno linguaggio

comprensibile alla macchina.

(2)

Programmare

Il calcolatore sa eseguire molte operazioni di base: somma, sottrazione, AND, ecc.

Per risolvere un determinato problema si combinano queste operazioni in modo opportuno

Programmare significa determinare quali operazioni eseguire e in quale sequenza per raggiungere la soluzione

Linguaggi

Perché il programmatore possa istruire il calcolatore sulle operazioni da fare, serve un linguaggio noto ad entrambi

Problema:

Il calcolatore comprende solo sequenze di zeri e uno (ad es. la sequenza 1001001 potrebbe significare, per un ipotetico calcolatore, “fai la somma”): linguaggio macchina

Il programmatore comprende le parole “fai la somma” (mentre 1001001 non significa nulla per lui): linguaggio umano

7

Linguaggio di programmazione

Soluzione 1

Il programmatore impara il linguaggio macchina , ma questo:

ha un basso livello di astrazione (scende molto nei dettagli realizzativi e perde la visione di insieme del problema da risolvere)

è difficile da ricordare (le istruzioni possono essere diverse centinaia)

è diverso per ogni piattaforma hardware (ogni tipo di microprocessore ha il suo set di istruzioni)

8

Linguaggio di programmazione

Soluzione 2

Il programmatore impara un linguaggio simile al linguaggio macchina detto assembly

Ogni istruzione del linguaggio assembly

corrisponde ad un’istruzione in linguaggio

macchina, ma ha il vantaggio di essere

mnemonico (es. ADD è l’istruzione per

calcolare una somma)

(3)

Linguaggio di programmazione

Soluzione 2 (Continuazione)

Il linguaggio assembly:

ha un basso livello di astrazione

è più facile da ricordare (ad es. per avere una somma invece di scrivere 1001001 si scrive ADD)

viene tradotto in linguaggio macchina da un programma relativamente semplice (assembler ) che, in linea di massima, sostituisce le istruzioni assembly con le corrispondenti istruzioni macchina

è diverso per ogni piattaforma hardware (sebbene possano essere simili)

Linguaggio di programmazione

Soluzione 3

Il programmatore impara un linguaggio di programmazione ad alto livello (HLL)

un traduttore complesso ed efficiente lo traduce in linguaggio macchina o in assembly

ha un alto livello di astrazione (esprime le

operazioni da svolgere senza entrare nei dettagli, es. A+B calcola la somma di due valori)

è più simile al linguaggio umano e quindi più facile da ricordare (es. “print X” potrebbe essere

l’istruzione per visualizzare il valore di X)

è (quasi) indipendente da piattaforma hardware e sistema operativo (PC, Mac, Windows, Linux, ecc.), è il traduttore che lo converte per il sistema in uso

11

Programma sorgente

Il programmatore sviluppa un programma scrivendo in un linguaggio di programmazione (di alto o basso livello) le operazioni da far eseguire al calcolatore e le memorizza in un file detto:

programma

programma sorgente

codice sorgente

sorgente

12

Traduttore di tipo interprete

Le istruzioni del codice sorgente vengono ad una ad una tradotte in linguaggio macchina e subito eseguite dalla CPU

somma stampa leggi calcola ...

somma stampa leggi calcola ...

Sorgente

(4)

Traduttore di tipo compilatore

Tutto il codice sorgente viene tradotto in linguaggio macchina e memorizzato in un file detto programma (o file o codice ) eseguibile

somma stampa leggi calcola ...

somma stampa leggi calcola ...

Sorgente

1001001010101 0010100101010 1001001010010 1010010100101 0101010101011 0101001010100 1001001010010 1001001010101 0010100101010 1001001010010 1010010100101 0101010101011 0101001010100 1001001010010 Eseguibile

Differenze

Velocità di esecuzione

Ogni volta che l’interprete esegue un

programma, deve attuare la traduzione delle istruzioni in linguaggio macchina: lento

Il programma compilato è già tradotto e ha quindi una velocità di esecuzione molto superiore

Il compilatore è in genere in grado di produrre una traduzione più efficiente dal punto di vista della velocità di esecuzione del codice

prodotto (oppure della dimensione del codice)

15

Differenze

Competenze per l’uso

Eseguire un programma interpretato richiede l’acquisto e del programma interprete da parte dell’utente finale e l’acquisizione dello stesso delle competenze necessarie al suo uso

Eseguire un programma compilato non richiede che un (doppio) click

Il compilatore viene acquistato solo dal programmatore e solo questi ha la necessità di avere la competenza necessaria per

utilizzarlo

16

Differenze

Copyright e gestione della complessità

L’interprete richiede il codice sorgente che quindi risulta visibile a chiunque

Il programma eseguibile non necessita del sorgente: protezione del copyright

La procedura di compilazione permette di

suddividere un programma complesso in più

parti, ma è più complessa da gestire

(5)

Librerie

In un HLL il programmatore non ha necessità di programmare le operazioni di base (ad es.

leggere un numero dalla tastiera, calcolare la radice quadrata, visualizzare una parola, ecc.)

Queste operazioni sono state programmate e compilate dal produttore del traduttore e sono a disposizione del programmatore sotto forma di funzioni

I codici eseguibili (quindi già tradotti in linguaggio macchina) che realizzano queste operazioni vengono raggruppati in file detti librerie (collezioni di funzioni di base)

Creazione di un eseguibile

Il processo di creazione di un eseguibile a partire dai sorgenti (build) è composto da 2 fasi:

compilazione: il sorgente viene compilato, ma alcune parti (le “operazioni di base”) sono ancora mancanti; viene generato un file intermedio detto file oggetto

linking: il file oggetto e le librerie vengono unite (collegate – link) così da aggiungere al file oggetto le parti mancanti e costituire un unico

file eseguibile

La fase di link può creare un eseguibile collegando più file oggetto e più librerie

19

Librerie statiche

Nella compilazione il codice delle funzioni di libreria viene inserito nel file eseguibile

File eseguibile File oggetto

File libreria

20

RAMRAM

Librerie statiche

Spesso le stesse librerie sono usate da più programmi (es. le operazioni di input/output):

spreco di memoria

Eseguibile A Oggetto A

Libreria

Eseguibile C Oggetto C

Libreria Eseguibile B

Oggetto B

Libreria

(6)

Librerie dinamiche

Dynamic Link Libraries (DLL)

Shared Libraries, Shared Objects

Nella compilazione il codice delle funzioni di libreria NON è inserito nel file eseguibile, viene invece indicato il nome del file che lo contiene

File eseguibile

File oggetto File libreria

RAMRAM

Eseguibile A Oggetto A

Eseguibile C Oggetto C Eseguibile B

Oggetto B

Libreria

Librerie dinamiche

Quando viene eseguito un programma che usa quella libreria, questa viene caricata in memoria, ma è utilizzabile anche dagli altri programmi

23

Librerie dinamiche

Quando viene eseguito un altro programma che necessita di quella libreria, questa è già caricata in memoria e pronta all’uso: il programma impiega meno tempo a partire

Se una delle funzioni della libreria deve essere aggiornata (es. nuova versione), è sufficiente sostituire la DLL mentre il programma in sé non viene modificato

Se la DLL viene sostituita da un’altra con codice contenente ad esempio un virus, il lancio del programma esegue il virus!

24

Interfacce utente

L’interazione tra utente e programma può avvenire tramite:

Interfacce a carattere (console mode): vengono visualizzate e immesse solo righe di testo

Interfacce grafiche (GUI – Graphic User Interface):

vengono visualizzati pannelli, bottoni, caselle di testo, immagini, ecc.

Molti linguaggi dispongono di entrambe le

interfacce

Riferimenti

Documenti correlati

FILE DI INPUT PER IL CODICE RELAP 5/MOD3.3 VESSEL CON CLADDING...

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione.. Essa è fornita per scopi meramente didattici e non per essere utilizzata in

• Il C è un linguaggio compilato: un programma, detto compilatore, traduce uno o più file ASCII contenenti i comandi in C in un unico file con la sequenza di.. istruzioni in

• Prima di accedere ad un file e` necessario aprirlo : l’operazione di apertura compie le azioni preliminari necessarie affinche` il file possa essere acceduto (in lettura o

Il Preprocessore in realtà copia i file di intestazione nel codice sorgente che nel caso di programma scritto in linguaggio C++ ha estensione .cpp e quindi il file