Appunti di informatica B
Introduzione
Informatica = scienza che si occupa della rappresentazione dell’informazione e della sua elaborazione e gestione; studio sistematico degli algoritmi che descrivono e trasformano l’informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione.
Programmare = Scrivere programmi in un linguaggio artificiale, rigoroso e comprensibile ad un esecutore, con i quali implementiamo gli algoritmi che riteniamo risolvano i problemi di cui abbiamo creato un modello.
Il calcolatore elettronico
Calcolatore = Strumenti in grado di eseguire operazioni non complesse.
Macchina di Turing (1936) Modello teorico legato alla logica matematica.
Macchina di Von Neumann Calcolatore reale dotato di capacità di scelta, di funzionalità programmata e digitale. Digitale, ma non binario bensì decimale. Di tipo sequenziale, ovvero che può elaborare una sola istruzione per volta.
- L’Unità Centrale (CPU)
- La Memoria Centrale (RAM)
- La Memoria di Massa (MM)
- Il Bus di Sistema (BUS)
- Le Unità Periferiche (UPi)
Architettura del calcolatore
- Componenti hardware
- Unità Centrale (CPU: Central Processing Unit, o processore)
- Memoria Centrale (spesso tecnologia RAM: Random Access Memory)
- Memoria di Massa (dischi, chiavette, nastri, …)
- Memorizza grandi quantità di dati e programmi
- Persistente
- Accesso molto più lento che della RAM
- Bus di Sistema (canale di comunicazione)
- Collega e consente lo scambio di dati
- Unità Periferiche (monitor, casse, tastiera, …)
- Comunicazione con l’ambiente esterno
- Software di sistema
- Il sistema operativo (Windows, MacOS, …)
- Gestione lavori
- Supporto per la programmazione
- Meccanismi di Ingresso / Uscita (I/O)
- Gestione archivi (file)
- I sistemi di gestione di basi di dati (BIOS)
- Il software di rete
- Gli ambienti di programmazione (editor, compilatori, assemblatori, traduttori, collegatori, debugger, strumenti CASE e IDE)
- Gli strumenti di produttività (Microsoft Office, …)
- Il sistema operativo (Windows, MacOS, …)
- Software applicativo
- Gestionale
- Applicazioni numeriche
- Telematico
- Automazione industriale
- Controllo di processi
- Realtà virtuale, interfacce utente, software multimediale
Unità centrale (CPU)
Elabora dati e coordina il trasferimento degli stessi, esegue i programmi.
Memoria centrale
Memorizza temporaneamente dati e programmi, contiene dati e programmi in attesa di essere elaborati dalla CPU, volatile e di rapido accesso all’informazione.
- RAM = Random Access Memory. Tempo di accesso indipendente dalla cella. Realizzata tramite circuiti a transistori.
- ROM = Read Only Memory. Memoria non volatile, contiene programmi protetti e definiti dal costruttore. Caricata al momento della costruzione del calcolatore. Contiene il bootstrap, le prime istruzioni che deve eseguire la CPU.
Reti di calcolatori
Classificazione per estensione:
- Reti locali (LAN, Local Area Network)
- Reti geografiche (WAN, Wide Area Network)
Algoritmi e programmi
Algoritmo = specifica di una successione di passi finita eseguibili senza ambiguità affinché la sequenza di passi sia automatizzabile (sequenza finita di operazioni elementari, comprensibili da un esecutore, che portano alla realizzazione di un compito).
Algoritmo sequenziale = operazioni da eseguire una alla volta.
Le informazioni sono utilizzate e trasformate attraverso gli algoritmi in modo funzionale agli obiettivi. Ogni algoritmo risolve una classe di problemi. Uomo trova la soluzione (crea l’algoritmo) → macchina la esegue.
Controllo del flusso
Condizioni:
- Se (condizione) … allora (condizione verificata)
- Se (condizione) … allora (condizione verificata) … altrimenti (condizione non verificata)
- Fintantoché …
Criteri di valutazione di un algoritmo
- Correttezza = capacità di pervenire alla soluzione in tutti i casi significativi possibili.
- Efficienza = proprietà strettamente legata al tempo di esecuzione e alla memoria impiegata.
Linguaggi per esprimere gli algoritmi
Linguaggi semi-formali Specifiche iniziali, ancora intelligibili solo all’essere umano.
- Pseudo codice (“se A>0 allora B=B+A altrimenti B=B-A”)
- Diagrammi di flusso
Linguaggi formali Programmi da eseguire, intelligibili anche alla macchina. Consentono di scrivere programmi eseguibili dal calcolatore.
- Alto livello (vicini al linguaggio naturale). Es. C (if (A>0) B=B+A; else B=B-A)
- Assembler (più vicini al codice macchina)
Componenti di un linguaggio
- Vocabolario = parole chiave che costituiscono un linguaggio
- Sintassi = regole per comporre i simboli del vocabolario
- Semantica = significato delle espressioni
Compilatori e interpreti
Compilatore = programma che traduce un programma scritto in codice di alto livello (es. C) in linguaggio macchina; genera un eseguibile (.exe) a partire da un file sorgente scritto in linguaggio di alto livello.
Interprete = programma che interpreta direttamente le operazioni, eseguendole di volta in volta che le incontra; perciò non genera alcun eseguibile.
La catena di programmazione
- Videoscrittura = scrittura del file sorgente del programma contenente testo in linguaggio di programmazione, da parte del programmatore. (genera .asm, .c, .cpp)
- Precompilazione = parte svolta dal preprocessore
- Traduzione (compilazione) = un programma compilatore si fa carico del tradurre il codice in linguaggio di programmazione in linguaggio macchina (binario). Si riconoscono costrutti, simboli e parole del linguaggio. Genera un file programma oggetto (.obj)
- Collegamento = un programma “collegatore” si occupa di collegare gli oggetti scritti nel programma sorgente ai sottoprogrammi nelle librerie (istruzioni semplici come “printf” o “scanf” sono sottoprogrammi costituiti da più istruzioni precreate e incluse nelle librerie). Genera un programma eseguibile (.exe)
- Caricamento = un programma carica il programma .exe appena creato nella memoria di lavoro (RAM)
- Esecuzione = l’operatore fornisce alla macchina i dati di input, poi elaborati, e la macchina restituisce i dati di output.
Il linguaggio C
I programmi in C sono costituiti da funzioni (i mattoncini del programma). Esse possono essere create dal programmatore o utilizzate quelle preesistenti, esse sono contenute nelle librerie.
Parti di programma
Commenti /*… commento …*/ oppure //commento sono commenti. Queste parti di testo servono a rendere il codice più facilmente comprensibile dal programmatore in un secondo momento. Parte ignorata dal compilatore.
Inclusioni #include è un comando al preprocessore (preceduto da #) che dice di includere nel programma una libreria di funzioni (es. stdio.h, stdlib.h,…) che saranno poi inserite nel programma tramite le shortcut (es. printf è in realtà una shortcut per un sottoprogramma di più istruzioni).
#define #define è un comando al preprocessore (fuori dalla main), che permette di definire delle macro, ovvero delle variabili costanti/funzioni che verranno poi richiamate nella main. Esse vengono scritte a lettere maiuscole.
#define PIGRECO 3.14//crei una costante che utilizzerai nella main richiamata con PIGRECO (es.10*PIGRECO=31.4)#define AREACERCHIO(x) (PIGRECO*(x)*(x))//definisco una funzione di nome AREACERCHIO che calcola il risultato fornendole in input il raggio…area = AREACERCHIO (4); //diventa (3.14*(4)*(4))…
La main int main () { … corpo della main … } è la funzione principale del programma, dentro alla quale staranno tutte le istruzioni del programma, e i rimandi ad eventuali funzioni esterne ad essa (void).