Gruppo 2 Laboratorio 1 e 2 edoardo.vannutelli@cremona.polimi.it
Mappa dell'incontro Introduzione alle finalità del laboratorio Introduzione al software utilizzati Linux (Knoppix) kate GCC (GNU Compiler Collection) Ripasso delle procedure di compilazione RAGIONARE E PROGRAMMARE!!!!! 2
Finalità del laboratorio Lo scopo del laboratorio è acquistare pratica nella programmazione. Al termine del laboratorio si devono possedere: Capacità di tradurre un algoritmo dalla mente al sistema operativo. Padronanza degli strumenti base quali il compilatore. Ovviamente per acquisire tutto ciò è richiesta la conoscenza del linguaggio C. :-) 3
Introduzione a linux Linux (o GNU/Linux) è un sistema operativo libero di tipo Unix (o unix-like) costituito dall'integrazione del kernel Linux con elementi del sistema GNU e di altro software sviluppato e distribuito con licenza GNU GPL o con altre licenze libere. http://it.wikipedia.org/wiki/linux 4
Introduzione a linux Osserviamo gli elementi base: Come avvio la shell di linux Siamo in un ambiente grafico: KDE utilizziamo quindi il programma Konsole che riproduce in ambiente grafico la classica console Linux Osserviamo la console più da vicino 5
file:///media/lexar/da knoppix/screenshoot/snapshot1.png Konsole: 6
Cerchiamo di capire: All'avvio si presenta la seguente scritta: knoppix@knoppix:~$ Il primo elemento è l'utente che è attualmente loggato nel sistema, per default Knoppix si avvia loggando questo utente Il secondo elemento (dopo il simbolo @) è il nome della macchina Controllate i vostri pc: ciascuno di voi ha sulla propria macchina in laboratorio un nome differente 7
Cerchiamo di capire: All'avvio si presenta la seguente scritta: knoppix@knoppix:~$ Il terzo elemento (dopo il simbolo : ) è la cartella in cui ci si trova in questo momento. => ~ N.B. Il simbolo ~ rappresenta la HOME dell'utente, in questo caso Knoppix. N.B.B. La home di un utente è la cartella principale dell'utente nella quale risiedono tutti i propri settaggi e file. 8
Struttura del file system La struttura dei file e delle cartelle è vista in linux come albero: In informatica, un albero o struttura ad albero (tree in inglese) è la struttura dati [...].... saltiamo la definizione formale che riprenderemo e passiamo ad una visiva... 9
File system Si legge nella direzione della freccia 10
Facciamo un po' di chiarezza sui termini In una struttura ad albero: Tutti i punti del mio albero sono detti Nodi. Tutte le linee sono dette Archi I nodi da cui non partono ulteriori rami sono detti nodi Foglia Il nodo a cui non arriva nessun arco ma da cui partono solamente è detto ROOT (letteralmente radice ) 11
Con qualche approssimazione... Al concetto di arco, propriamente in astratto indica una relazione che lega due nodi, in questo contesto associamo l'idea del contenimento: possiamo quindi leggere il nodo root come la cartella che contiene la cartella home, che contiene la cartella associata ad ogni singolo utente (nel nostro caso la cartella Knoppix dell'utente Knoppix). 12
File System Nel file sistem linux molte cartelle svolgono una precisa funzione, vediamo brevemente queste cartelle e cosa contengono... 13
File System /sbin contiene tutti gli strumenti essenziali per la gestione del sistema. /tmp contiene tutti i file temporanei. /usr contiene gli strumenti e le applicazioni dell'utente. 14
File System /usr/ doc la documentazione del sistema, molti dei programmi installati dall'utente salvano qui la loro documentazione. /usr/games giochi e rompicapi vari, installati dall'utente. /usr/lib le librerie usate dai programmi in /usr/bin 15
File System /usr/local sono i file dei singoli sistemi presenti, essi hanno la loro sotto directory per la documentazione./share e quella per i loro binari./bin /usr/man le man-pages, i file letti quando si digita il comando man (visto in laboratorio) /usr/share i dati per le applicazioni indipendenti dalla macchina che quindi possono essere condivise con altri sistemi 16
File System /usr/local sono i file dei singoli sistemi presenti, essi hanno la loro sotto directory per la documentazione./share e quella per i loro binari./bin /usr/man le man-pages, i file letti quando si digita il comando man (visto in laboratorio) /usr/share i dati per le applicazioni indipendenti dalla macchina che quindi possono essere condivise con altri sistemi 17
Comandi utili Osserviamo un po' di comandi utili per iniziare a lavorare: Come capisco in che directory sono? Il comando utile in questo caso è pwd Stampa a video il percorso completo della directory corrente Ma sappiamo leggere ciò che vediamo?? 18
Comandi utili Osserviamo un po' di comandi utili per iniziare a lavorare: Come capisco che file sono presenti nella directory corrente??? Il comando utile in questo caso è ls <nome della directory da osservare> Stampa a video il contenuto directory passata come parametro. N.B. Se non specifico nessuna directory mostra a video il contenuto della directory in cui sono. 19
Comandi utili Giusto per allargare un po' le nostre conoscenze: Ma se specifico qualche opzione : Proviamo a scrivere ls -la Cosa ho ottenuto di nuovo??? Cosa è cambiato rispetto al comando precedente??? 20
Nel concreto Cosa ho ottenuto in più???? 21
Giusto per non sembrare marziani.. Ora è un po' più comprensibile. Come posso scoprire l'opzione -h del comando ls?? 22
Comadi Utili Come mi posso spostare da una directory all'altra?? Il comando è cd: Acronimo di change directory Senza parametri mi riporta alla mia home Altrimenti cd <nome_cartella> mi porta alla cartella desiderata 23
Facciamo qualche prova 24
Comandi utili Come creo una cartella?? : mkdir <directory_da_creare> crea la directory passata come parametro 25
Comandi utili Come posso rimuovere una cartella??: rmdir <nome_directory_da_eliminare> rimuove la directory indicata E per rimuovere un file??: rm <nome_file_eliminare> 26
Altri comandi utili mv <nome_file> <destinazione> sposta il file cp <origine> <destinazione> copia l'origine nella destinazione 27
Un comando su tutti : MAN In linux ogni programma ha una propria manualistica on line che può essere richiamata e utilizzata in modo immediato : man <comando_da_scoprire> Proviamo a scrivere man ls cosa possiamo dedurre??? 28
Introduzione a Kate Come avviare kate?? Due opzioni comode: Syntax highlight Righe numerate (F11) Altre avvertenze... 29
Come compilare La compilazione in linux avviene tramite riga di comando: Il compilatore è gcc Gnu Compiler Collection 30
Iniziamo a compilare Il comando effettivo : gcc <file_sorgente.c> -o <nome_da_dare_all'eseguile> Proviamo dal vivo... 31
Vediamo in realtà 32
Vediamo in realtà 33
Osservando un po' oltre Supponiamo di voler scrivere questo esercizio: Dati due cateti in ingresso calcolare l'ipotenusa del triangolo rettangolo costruito sui cateti dati. 34
Per compialare Per compilare devo avvertire il copilareo che intedo usare la libreria math, nella quale è presente del codice già scritto che intendo utilizzare per fare ciò gcc -lm triangolo.c -o triangolo in questo modo il linker aggiunge al codice oggetto del mio codice anche quello della libreria prima di creare effettivamente l'eseguibile 35
Per scoprire math.h Una volta nota la libreria dalla quale si vuole attingere è sufficiente il comando man <nome_headerfile> per visionare quanto è disponibile in esso. Proviamo: man stdio.h man math.h elenco delle maggiori librerie ANSI C disponibili: http://it.wikipedia.org/wiki/libreria_standard_del_c#librer ia_degli_header_file_del_c_ansi 36
Gli esercizi del 7/10/2008 Esercizio 1 : Hello world Per non anglofoni questo è il mio primo programma in c Esercizio 2: Somma e differenza tra due numeri Esercizio 3: A. Calcolare il massimo ed il minimo tra 2 numeri B. Calcolare il massimo ed il minimo tra 5 numeri C. e se fossero 10 i numeri????? 37
Gli esercizi del 7/10/2008 Esercizio 4 : Dati i numeratori e i denominatori di due frazioni calcolarne somma, prodotto e divisione. Esercizio 5: Volendo si potrebbero anche effettuare le semplificazioni. Dato in input minuti, ore e secondi dare in output il totale dei secondi Esercizio 6: Dati due numeri calcolare il MCD ed il mcm. 38
Esercizi facoltativi del 7/10/2008 Quali migliorie possiamo apportare ai programmi visti ad esercitazione??? Implementare la variante all'esercizio 3 visto ad esercitazione. 39
Richiamo Utilizzo array La sintassi è: <tipo_singlo_dato> <identificatore>[<num_max_elementi>]; int pippo[100]; n.b. La prima cella sarà pippo[0]; L'ultima cella sarà pippo[99]; 40
Esercizi del 14/10/2008 Esercizio 0: data una sequenza di caratteri stampare a video il minore. n.b. Non occorrono gli array ma lo facciamo in entrambi i modi ;-) Esercizio 1: data una sequenza di caratteri stampare a video il minore ed il maggiore. n.b. Non occorrono gli array ma lo facciamo in entrambi i modi ;-) 41
Esercizi del 14/10/2008 Esercizio 3: Inseriti alcuni numeri interi il programma calcola la somma. La quantità di numeri deve essere precisata dall'utilizzatore del programma (NON IL PROGRAMMATORE) entro un limite ragionevole (deciso dal programmatore). Il programmatore deve controllare che il numero immesso dall'utente sia accettabile. 42
Esercizi del 14/10/2008 Esercizio 4: Inserita una stringa di caratteri calcolarne la lunghezza. Esercizio 5: Prese in input due stringhe verificare che siano uguali, e stampare a video un opportuno messaggio. Il messaggio deve contenere se sono perfettamente uguali o fino a che carattere sono uguali. 43
Esercizi facoltativi del 14/10/2008 Con riferimento all'esercizio presentato ad esercitazione (cfr slide 40/44 Esercitazione_3 2008-2009.pdf) ampliare la soluzione proposta evitando l'inserimento di doppioni all'interno dell'insieme intersezione. 44
Esercizi facoltativi del 14/10/2008 Con riferimento all'esercizio presentato ad esercitazione (cfr slide 47/50 Esercitazione_3 2008-2009.pdf) ampliare la soluzione proposta scrivendo la parte di codice che consente l'inserimento da parte dell'utente delle proprie navi. 45
Utili risorse per lo studio personale Linux http://www.cremona.polimi.it/todeschini/?q=node/35 http://a2.pluto.it/a226.htm#almltitle66 Sezione 19 in particolare Linguaggio C http://homepage.mac.com/marco_coisson/tutorial/intr oallinguaggioc/versione_html/indice.html 46