• Non ci sono risultati.

Introduzione alla Programmazione

N/A
N/A
Protected

Academic year: 2021

Condividi "Introduzione alla Programmazione"

Copied!
12
0
0

Testo completo

(1)

1

Introduzione alla Programmazione

… prima qualche “richiamo” …

… algoritmo ….

… programma …

… linguaggio di programmazione

… esecutore …

… elaboratore …

… linguaggio macchina …

Linguaggio macchina

La CPU interpreta solo programmi in linguaggio macchina

… programmare in linguaggio macchina implica:

• conoscenza dell’architettura del calcolatore

• pianificazione dell’impiego della memoria

• uso di un numero notevole di istruzioni elementari, anche per semplici operazioni

…. attività di programmazione ardua e complessa …

… necessità di linguaggi più vicini a quello naturale …

… linguaggio naturale non usato perché ambiguo (non deterministico) …

(2)

3

Linguaggi simbolici

Linguaggi di programmazione più vicini al linguaggio naturale ma con una struttura che elimina ambiguità rendendoli più adatti alla definizione di un algoritmo

… rispetto al linguaggio macchina:

consentono di esprimere un programma sempre secondo rigide regole formali

ma con istruzioni più sintetiche e vicine alla logica del pensiero umano

Linguaggi simbolici

Diversi linguaggi di programmazione

…. alcuni dei più noti e diffusi:

FORTRAN ( FOR mula TRAN slator):

anno progettazione 1959, problemi tecnico-scientifici

• COBOL ( CO mmon B usiness-O riented L anguage):

1959, problemi amministrativi-gestionali

BASIC (Beginners All-purpose Symbolic Instruction Code) 1965, programmazione per i principianti

• Pascal (dal nome del matematico francese Blaise Pascal) : 1969, strumento didattico

(3)

5

Linguaggi simbolici

C (evoluzione del BCPL dal quale derivarono B e poi C)

1972, scrittura software di base (il S.O. UNIX è sviluppato in C) C++ (evoluzione di C)

1980, programmazione orientata agli oggetti (Object Oriented) JAVA

prima metà anni 1990, programmazione orientata agli oggetti, indipendenza dalla piattaforma

PROLOG ( PRO gramming in LOG ic)

1970, programmazione di tipo logico (non imperativa)

Linguaggi simbolici

Ciascun linguaggio di programmazione è caratterizzato da

• lessico

insieme delle parole che formano il linguaggio (vocabolario)

• sintassi

insieme delle regole per la formazione delle frasi (istruzioni)

• semantica

significato da associare ad ogni parola ed istruzione

… esistenza di standard ….

… esistenza di dialetti …

(4)

7

Dal programma sorgente al programma eseguibile

Traduttore

Collegatore/

Caricatore

00100101 10101010 00101001 10101010

--- --- --- ---

00100101 10101010 00101001 10101010

--- --- --- ---

Programma in linguaggio simbolico (Programma Sorgente)

Programma in linguaggio macchina (Programma Oggetto)

Moduli di Libreria

Programma eseguibile

... i programmi in linguaggio simbolico devono essere tradotti in programmi in linguaggio macchina ...

Dal programma sorgente al programma eseguibile

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina

compilatore: la traduzione è effettuata una sola volta e tutta in una volta

inteprete: ciascuna istruzione viene tradotta ed eseguita, ogni volta che si vuole eseguire il programma

linguaggi compilati

FORTRAN, COBOL, PASCAL, C, C++, … linguaggi INTERPRETATI

BASIC, PROLOG, ...

(5)

9

Dal programma sorgente al programma eseguibile

collegatore: genera il programma eseguibile mediante il collegamento del programma oggetto a componenti di librerie caricatore: provvede a caricare il programma eseguibile in memoria per poterne effettuare l’esecuzione

il programma sorgente è, tipicamente, generato con un text editor

Struttura di un programma

Un programma è tipicamente strutturato nel seguente modo:

Intestazione

Sezione dichiarativa

Corpo del programma

Intestazione: nome del programma

Sezione dichiarativa: riporta tutte le informazioni, nomi e relativi tipi, che saranno usate nel programma

Corpo del programma: sequenza di istruzioni formanti il programma

(6)

11

Struttura di un programma

… con riferimento ad un ipotetico linguaggio generalizzato ...

Program <nome programma>;

sezione dichiarativa

<nomi_variabili: tipo>

begin

<corpo del programma>

end.

Tipi di informazione

• Tipi semplici (atomici)

l’informazione non può essere ulteriormente decomposta Es:

numero intero carattere alfabetico

• Tipi strutturati

l’informazione può essere decomposta in tipi più semplici Es:

data (composta da: giorno, mese, anno)

numero complesso (parte reale, coefficiente immaginario) generalità anagrafiche (cognome, nome, data nascita, indirizzo)

(7)

13

Tipi strutturati

Numero Complesso

Parte reale coefficiente immaginario

(3.2 , 5.4)

3.2 5.4

Data di nascita

giorno mese anno

16/11/1978

16 11 1978

Struttura

Esemplare

Tipi semplici

• Un tipo è definito tramite

• enumerazione

• proprietà caratteristiche

• operazioni

i vari linguaggi di programmazione hanno tipi predefiniti (primitivi)

(8)

15

Il tipo Intero

tipo intero = {i | i è un numero intero, m< i < M}

non coincide con l’insieme dei numeri interi: m≠−∞ , Μ≠+∞

m ed M variano col linguaggio di programmazione Esempi di m e M:

-32768 (-2 15), +32767 (+2 15-1) tipo intero short

-2147483648 (-2 31), +2147483647 (+2 31-1) tipo intero long

Il tipo Intero

Operazioni:

+ somma − sottrazione

* moltiplicazione / divisione

% modulo

Sono operazioni interne al tipo cioè il risultato assume ancora un valore di tipo intero

L'operatore % denota il resto della divisione intera.

Esempio:

supposto che n1 = 12 e n2 = 10 n1 % n2 = 2

La divisione intera ha come risultato un intero: n1 / n2 = 1

(9)

17

Il tipo Intero

Per le operazioni aritmetiche le precedenze sono quelle definite in matematica:

le operazioni *, /, e % hanno precedenza sulle operazioni + e −

L’uso delle parentesi può cambiare l’ordine di valutazione Attenzione:

proprietà valide per i numeri interi non lo sono (sempre) per i tipi interi

Esempio:

l’uguaglianza tra le due espressioni A+ (B - C) e (A+B) - C è vera per i numeri interi, ma non è (sempre) vera per i tipi interi se il tipo intero è [-10, 10], A=8, B=7, C=6 in questo caso il primo termine vale 9, il secondo è indefinito

…. OVERFLOW ...

Il tipo Intero

Il tipo intero è un tipo ordinato, ovvero tra i suoi elementi esiste una relazione d’ordine (dato un suo elemento è possibile stabilirne il predecessore ed il successore)

Su un tipo ordinato sono definiti gli operatori di relazione:

= uguale <> diverso

< minore > maggiore

<= minore uguale >= maggiore uguale

Le operazioni di confronto tra elementi del tipo intero, ottenute usando gli operatori di relazioni, restituiscono un risultato esterno al tipo

(10)

19

Il tipo Reale

tipo reale =

{un sottoinsieme finito dell’intervallo di numeri reali [m, M], tale che detto rs un qualsiasi numero reale con m <= rs <= M, esiste un valore r del tipo che lo approssima con precisione assegnata

Abs[(rs-r)/r]<eps}

…. Ogni valore del tipo reale rappresenta tutti i componenti di un intervallo di numeri reali …

• è un tipo primitivo

• è un tipo ordinato

• m, M, eps variano col linguaggio e col processore

cardinalità del tipo e precisione sono fortemente variabili (… numero di bit e rappresentazione interna ...)

Il tipo Reale

in quasi tutti i linguaggi vengono messi a disposizione due tipi reali:

tipo reale semplice (float in C++)

tipo reale doppia precisione (double in C++)

cardinalità e precisione del secondo sono maggiori di quelle del primo

le operazioni base del tipo reale sono gli operatori aritmetici interne al tipo: +, −, *, /

… naturalmente definite a meno di overflow … operazioni di confronto, esterne al tipo

(11)

21

Il tipo Carattere

• Il tipo carattere contiene l’insieme dei simboli con cui un

elaboratore comunica verso il mondo esterno attraverso i dispositivi di input/output

• E’ l’insieme dei caratteri riproducibili su unità di ingresso ed uscita (ad esempio la tastiera)

• prevale come tipo primitivo dei linguaggi l’insieme dei caratteri occidentali

• è possibile considerarlo come l’unione di quattro “sotto-tipi”

Lettere Minuscole, Lettere Maiuscole, Cifre Decimali, Caratteri di Interpunzione e Speciali

Il tipo Carattere

Ordinamento:

• concettualmente, è un insieme parzialmente ordinato (non ha senso definire un ordine tra cifre e lettere), ma per motivi pratici si è imposto un ordine

a<b<c<...<z A<B<C<....<Z 0<1<2<...<9

• non esiste ordinamento sugli altri caratteri

! “ £ $ % & / ( ) = ? ^ * ° § ç ; : _ , . - > < @ #

• stabilito un ordinamento totale sulla base codice ASCII

(12)

23

Il tipo enumerativo

• Il tipo è definito enumerando gli elementi che lo compongono

… più corretto dire che si tratta di un costruttore di tipi di utente ...

• in particolare si possono definire tipi di utente semplici ed ordinali

• l’utente definisce il NOME del tipo che intende introdurre ed

“enumera” in ordine crescente i valori (costanti) del tipo

• è possibile applicare gli operatori relazionali a variabili e costanti di un tipo enumerativo (operazioni esterne al tipo)

• Es:

colore_semaforo {ROSSO, GIALLO, VERDE};

corso_univ {FIS, INF, MAT, ECO};

seme_carta {coppe, denari, bastoni, spade};

Il tipo Logico (Boolean)

L'insieme del tipo booleano è costituito dai due valori di verità, true (vero) e false (falso):

Tipo booleano = (false, true) E’ un tipo ordinato: false < true

Operazioni = {OR, AND, NOT), operazioni interne al tipo OR: disgiunzione logica o somma logica

risultato vero se almeno un operando è vero AND: congiunzione o prodotto logico

risultato vero se tutti gli operandi sono pari a vero NOT: negazione logica (operazione unaria)

risultato vero se l’operando è falso (e viceversa)

Riferimenti

Documenti correlati

‣ make verifica automaticamente se un file nell’elenco delle dipendenze è stato modificato dall’ultima applicazione della regola di compilazione. ‣ In caso positivo, riapplica

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

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright

automaticamente le funzioni della libreria standard di input/output stdio.h , come ad esempio la funzione di stampa su video.

• Compilatore: opera la traduzione di un programma sorgente scritto in un linguaggio ad alto livello in un programma oggetto scritto in un linguaggio direttamente eseguibile