Appunti di programmazione

Appunti per il corso universitario di programmazione, riferito al linguaggio ANSI C
Redatti all'università di Venezia

ARGOMENTI

STRUTTURA COMPUTER

DEFINIZIONI

TASTIERA E TIPI

AMBIENTE E MEMORIA

COMANDI

FUNZIONI E PROCEDURE

TIPI DERIVATI

PUNTATORI

STRINGHE

ARRAY DI PUNTATORI

STRUTTURE

TYPEDEF E ENUM

PUNTATORI A PROCEDURE

ALLOCAZIONE DINAMICA

LISTE

ALGORITMI

ERRORI

ELECTRONIC DIGITAL COMPUTER:

elabora e memorizza informazioni utilizzando segnali digitali (a due stati, acceso spento, chiuso aperto) che rappresentano cifre binarie; formato da:

  1. memoriaimmagazzina informazioni

  2. CPU (processore in grado di elaborare)


tutti i comandi sono codificabili come sequenze di 0 e 1 (sia istruzioni che dati)

es.


Codifica istruzioni:


Direzione



N. passi


N

00


1

0

S

10


2

1

E

01




W

11





Comando

Posizione

---

000000

101

010000

011

010010

100

011010

011

011100


linguaggio macchina (LM):

es.

001011101011010, ADD (linguaggio assembler = ragiono con “soprannomi”)


linguaggio di alto livello (HLL) = assegno un nome a una sequenza di istruzioni

es.

voto = (scritto + pratica) / 2


equivale a (in linguaggio macchina):

COPY scritto > A

ADD A, pratica > A

SHIFTRIGHT A, 1

COPY A > voto


per passare da alto livello a linguaggio macchina ci sono 2 possibilità:

  • interprete = esegue istruzione per istruzione i comandi corrispondenti (basic = linguaggio interpretato); non produce un nuovo file

  • compilatore = programma che da un listato in HLL genera un eseguibile in linguaggio macchina (nuovo file)

es. C è un linguaggio compilato:

  • esecuzione più veloce

  • può essere eseguito più volte senza bisogno del sorgente

Java è un misto:

  • listato → compilazione → bytecode (programma in linguaggio macchina ma generico) → interpretazione (in base alla specifica macchina)

  • non dipende dalla singola macchina (comodo per la rete = basta scaricare il bytecode)

come scegliere un linguaggio:

  • se un linguaggio mi permette di rappresentare l’iterazione indefinita (while) e la scelta (if then else) ha lo stesso potere espressivo degli altri linguaggi

  • ogni ambito ha il suo linguaggio più conveniente


TIPI DI LINGUAGGI DI PROGRAMMAZIONE:

dichiarativi = enfasi sulla logica, ossia enfatizzano il cosa fare piuttosto che il come farlo

ML, Prolog, Lisp

procedurali = enfasi su quali sono le istruzioni da eseguire

Pascal, C

orientati agli oggetti = enfasi sui dati (esempio dell’usciere, paragonato ad una appendice del programma, le funzioni vengono trasferite agli oggetti)

Java, C++, Visual Basic

legati al web

XML, PHP, Perl, Python

PROGRAMMA

un programma, scritto in un certo linguaggio di programmazione, specifica una computazione (ciò che deve essere eseguito) che a partire da un eventuale insieme di dati in ingresso modifica la memoria; se la computazione termina allora può fornire in risposta un risultato

= costrutto sintattico che può modificare la memoria

STRUTTURA COMPUTER

  1. CPU

  2. memoria

  3. disco

  4. bus


memoria = sequenza finita di locazioni (o celle) ognuna delle quali è un dispositivo che può assumere diversi stati discreti (= chiaramente distinti; es. interruttore = dispositivo 2 stati discreti)


  • le celle sono costituite da locazioni elementari ognuna delle quali ha 2 stati possibili (0 o 1)

  • se associamo agli n possibili stati di una cella un insieme di n elementi diciamo che lo stato che corrisponde a un certo elemento rappresenta quell’elemento

es.

se abbiamo la rappresentazione del colore dei capelli degli alunni di una classe, i concetti di rosso, biondo, nero, castano non sono in memoria, ma è in memoria un valore che li rappresenta (es. biondo potrebbe essere rappresentato da 01)


es. 1000000110000000000000000000000

se è un intero allora è 1086324736

se è un float allora è 6.0


una cella di memoria come dispositivo fisico può essere oggetto di due operazioni (non può essere soggetto di un’operazione):

  1. lettura = restituisce lo stato della cella

  2. scrittura = cancella vecchio contenuto (stato) + scrive nuovo stato (non sono operazioni sequenziali)


una locazione di memoria ha sempre un valore (gli stati sono fissi, interruttore a metà)

Ritorna sopra | Home page