Laboratorio di Programmazione Strutturata Facoltà di Scienze e Tecnologie per i Media Anno 2008/2009
Dati Generali Docente del corso : Dott. Tulimiero Davide Materiale del corso : Corso completo di programmazione C - Deitel Deitel - Apogeo Algoritmi e strutture dati - Demetrescy Finocchi Italiano - McGraw-Hill Slides docente, reperibili sul sito Esempi e esercizi di programmazione del docente Contatti Mail del docente : tulimiero@gmail.com tulimiero.altervista.org/corsoc/index.html
Obiettivi del corso Conoscere le basi della programmazione Saper realizzare diagrammi di flusso Saper realizzare programmi in linguaggio C Migliorare la capacità di ragionamento e risoluzioni di problemi di diversa complessità
Programma del corso - Introduzione e richiami Il linguaggio di programmazione Nozioni di architettura del calcolatore Il compilatore Compilare su Windows, Linux, Mac Tipi di dati Gli operatori in C I diversi costrutti Prendere dati da tastiera Diagrammi di flusso Definizione e strutture di un diagramma Esempi di diagrammi di flusso
Array ( Vettori ) Stringhe Matrici Funzioni Passaggio dei parametri Introduzione agli Algoritmi Algoritmi di ordinamento La ricorsione - Algoritmi ricorsivi Fibonacci, Fattoriale Puntatori Stringhe con puntatori Le strutture DIchiarazione ed utilizzo delle strutture in C
Modalità d esame 2 prove in itinere Occorre risultare almeno sufficiente alla prima prova per potere accedere alla seconda Appello finale a fine corso Appello a settembre Orale a discrezione del docente
Cos è un linguaggio di Programmazione In informatica, un linguaggio di programmazione è un linguaggio formale dotato di una sintassi ben definita per scrivere programmi per calcolatori, in una forma più vicina al linguaggio umano scritto: l'alternativa sarebbe scrivere direttamente le istruzioni nel codice macchina del particolare processore, un compito improponibile per programmi meno che semplicissimi. (Wikipedia) Un linguaggio di programmazione è una Semantica di comunicazione ad alto livello Permette l interazione tra l utente (programmatore) e la macchina in modo semplificato Permette di poter programmare un calcolatore senza dover conoscere il linguaggio macchina.
Il linguaggio C (1) Il linguaggio C viene spesso definito un linguaggio di programmazione di "medio livello". Questo non indica che il linguaggio ha delle capacità limitate, ma riflette la sua capacità di accedere alle funzioni di basso livello del sistema Sistemi operativi come Linux e MacOs si basano sul linguaggio C Utilizzato molto nella programmazione dei Server e applicazioni di calcolo prestazionale
Il linguaggio C (2) La maggior parte dei linguaggi di alto livello, come ad esempio Java, fornisce tutto ciò di cui un programmatore può aver bisogno direttamente nel linguaggio. Un linguaggio di basso livello (ad esempio l'assemby) fornisce esclusivamente l'accesso all'insieme delle istruzioni del calcolatore, il linguaggio macchina. Il C non mette a disposizione tutti i costrutti che è possibile trovare nei linguaggi di alto livello ma dispone dei blocchi base per poterli costruire.
Un po di storia del C (1) Il C nasce come evoluzione dei linguaggi BCPL e B, per opera di Dennis Ritchie, negli AT&T Bell Laboratories nel 1972 Poiché molto adatto allo sviluppo di sistemi operativi, questo linguaggio non fu scritto per un particolare sistema operativo, ma può essere utilizzato su diversi sistemi operativi come Windows, Unix, MacOs, ecc. Un sistema operativo è un programma che svolge operazioni fondamentali di controllo, interpretando i comandi dell utente che richiede diversi servizi: stampa, visualizzazione, copia di file, raggruppamento in cartelle, esecuzione di programmi
Un po di storia del C (2) Il SO (sistema operativo) gestisce tutte le periferiche del computer, tutti processi (attivati dall esecuzione di applicazioni) e i dati di input e output. Verso la fine degli anni 70, Kerninghan e Ritchie pubblicano The C Programming Language, portando ad una rapida espansione del C nei diversi SO. Le molte versioni del C, spesso incompatibili tra loro, portarono alla necessaria definizione di una versione standard del C. La seconda edizione del libro di Kerninghan e Ritchie, del 1988, riflette questa versione del C, chiamata ANSI C (Istituto Nazionale Americano per gli Standard), approvata come standard nel 1989 dal documento ANSI/ISO 9899:1990.
La libreria standard C Come vedremo in seguito, in C si fa uso di funzioni La maggior parte dei programmatori trae vantaggio da una ricca collezione di funzioni già esistenti,chiamata libreria standard del C Vantaggi uso librerie : maggiore riusabilità Vantaggi anche nel creare le proprie funzioni : maggiore conoscenza del codice
Gli altri linguaggi C++ estensione del C, nato per arricchire il linguaggio di nuove funzionalità e per usufruire dell utilizzo del concetto di classi e oggetti Java Linguaggio Object Oriented. Basa tutta la sua struttura sulle Classi e sul concetto di Oggetto FORTRAN sviluppato dall IBM, utilizzato nelle applicazioni scientifiche e di ingegneria di calcolo COBOL per applicazioni commerciali con grandi quantità di dati
Nozioni di architettura del calcolatore Per un buon programmatore in linguaggio C è necessario conoscere come funziona la macchina su cui lavora Nozioni di base da conoscere : Memoria fisica Processore Gestione della memoria da parte del sistema operativo Gestione della memoria da parte del processo
Organizzazione del computer Unità di input : ottiene informazioni dai vari dispositivi di input e mette queste informazioni a disposizione di altre unità ( tastiera, mouse ) Unità di output : il computer invia i dati elaborati verso i dispositivi di output del sistema, per un facile utilizzo esterno ( video ) Unità di memoria : memorizzazione rapida dei dati ( ram ) Unità aritmetica e logica (ALU): elaborazione dei dati e operazioni su registri Unità di elaborazione centrale (CPU) : coordinatore del computer, di tutti i dispositivi presenti Unità di memoria secondaria : dispositivi di memorizzazione permanente dei dati ( hard disk)
Evoluzione dei linguaggi Linguaggi macchina ( non adatto per gli esseri umani ) 1110100110 10111001001 Linguaggi assembly ( abbreviazioni in inglese delle istruzioni ) push %eax push %ebx mov $1, %eax cmp %eax, %ebx Linguaggi di alto livello Linguaggio C, Java, php
I vari passi Codice ad alto livello compilatore Codice assembly assemblatore Codice macchina
Cos è un compilatore Per generare un programma eseguibile partendo dal codice C occorre un compilatore Un compilatore è un programma che traduce il codice ad alto livello in Assembly per poi essere trasformato in codice binario Crea il file oggetto ed il file eseguibile
Compilare su Windows Per la programmazione su sistemi Windows si usano programmi visuali come Dev-C++, che contiene un editor appropriato e un compilatore Gratuitamente scaricabili dal WEB Attenzione!! I programmi che girano su un sistema operativo possono non essere validi per altri (Es : MacOs o Linux) Si può scaricare il compilatore gcc ed eseguire il comando gcc o nomeesguibile.exe nomefile.c Occorre prima modificare le varibili di ambiente
Compilare su Linux e Mac (1) Linux fornisce anche il codice C del Kernel Possiede di default il compilatore gcc per la compilazione del codice Passi per la compilazione : Apri un qualsiasi editor Scrivi il codice C Salva il file nel formato *.c Apri una console Entra nella directory del file e scrivi il comando gcc o nomeseguibile nomefile.c Per eseguire il programma digitare da console il comando./nomeseguibile I sistemi Mac si basano su Unix e usano gli stessi comandi di un sistema operativo Linux
Ambiente C (1) Fase1 Editor DISK Il programma è stato creato con l editor l ed immagazzinato nell hard disk Fase2 Preprocessore DISK Il programma preprocessore esegue il codice Fase3 Compilatore DISK Il programma compilatore crea il codice oggetto e lo immagazzina nell hard disk
Fase4 Linker Ambiente C (2) DISK Il linker collega il codice oggetto con le librerie, crea l eseguibile e lo memorizza nell hard disk Fase5 Loader Memoria Fisica Il loader carica in memoria il programma Fase6 CPU Memoria Fisica La CPU esegue un istruzione per volta immagazzinando i nuovi dati ottenuti dall esecuzione del programma
La via del programmatore La figura del programmatore per questo corso è duplice: una parte risolve il problema (problem solver) e l altra traduce la soluzione in un linguaggio (programmer). Sviluppo dell algoritmo Indipendente dal linguaggio di programmazione utilizzato (creazione diagramma di flusso) Scrittura del programma (creazione del file sorgente) Compilazione Esecuzione
Cos è un programma Un programma è una serie di istruzioni eseguibili dal computer e l implementazione di un programma è associata alla necessità di risolvere in maniera efficiente uno o più problemi Per fare questo abbiamo bisogno di definire un algoritmo adatto, e implementarlo in un linguaggio di programmazione traducibile in codice macchina
Cos è un Algoritmo Un algoritmo può essere definito come un insieme finito non ambiguo di istruzioni che servono per risolvere un problema Un esempio di algoritmo può essere usato anche per risolvere il semplice problema : Essere promossi all esame di Laboratorio di Programmazione Strutturata
Algoritmo Essere promossi (START) FARE IL PRIMO TEST FARE IL SECONDO TEST > 18 < 18 > 18 < 18 VERBALIZZAZIONE (END) > 18 > 18 SOSTENERE L APPELLOL < 18 SOSTENERE L APPELLO L DI SETTEMBRE
Utilizzo della console ( MacOs & Linux ) Aprire il terminale in Applicazioni/Utility (solo MacOS) Con il comando pwd posso sapere in che directory mi trovo Con il comando ls posso farmi stampare tutti i file e le cartelle della directory in cui mi trovo Uso il comando cd per cambiare directory Es: cd Desktop/ Uso il comando cd.. per tornare alla directory superiore
Altri comandi chmod 777 nomefile :per cambiare i permessi di accesso al file ctrl + C : per mandare un segnale di interruzione al processore, in modo da fermare qualsiasi operazione in corso sulla console find. -name nomefile : per cercare un file a partire dalla directory corrente vim nomefile : editor da console con molte funzionalità man nomecomando : per visualizzare il manuale del comando
Utilizzo base dell editor vim Creare un nuovo file : Digitare il comando vim nella console Entrati in vim, digitare il tasto i (insert) per poter scrivere Scrivere il contenuto del file Digitare ESC per uscire dal comando insert Digitare :x nomefile.c per salvare il file con il nome nomefile.c Aprire un file esistente Posizionarsi (da console) nella directory contenente il file da aprire Digitare il comando vim nomefile Digiatare i se si vuole scrivere nel file Digitare :x per salvare il file ed uscire Digitare :q se si vuole uscire dal file non modificato Digitare :q! se si vuole uscire dal file senza salvare