Programmare. La programmazione. Linguaggi. Algoritmo

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmare. La programmazione. Linguaggi. Algoritmo"

Transcript

1 Programmare 2 La programmazione Ver. 2.2 Il calcolatore sa eseguire molte operazioni di base: somma, sottrazione, AND, etc. Per risolvere un determinato problema si combinano queste operazioni in modo opportuno Programmare significa determinare quali operazioni eseguire e in quale sequenza Claudio Fornaro - Corso di programmazione in C Algoritmo 3 Linguaggi 4 Sequenza di operazioni necessarie per risolvere un problema Esempio: una ricetta di cucina Ci possono essere più algoritmi in grado di risolvere lo stesso problema Il calcolatore comprende solo sequenze di zeri e uno (es significa per esso fai la somma ): linguaggio macchina Il programmatore comprende le parole fai la somma (mentre non significa nulla per lui): linguaggio umano Problema: serve un linguaggio noto sia al calcolatore sia al programmatore

2 Linguaggio di programmazione Soluzione 1 Il programmatore impara il linguaggio macchina, ma questo: ha un basso livello di astrazione è difficile da ricordare è diverso per ogni piattaforma hardware 5 Linguaggio di programmazione Soluzione 2 Il programmatore impara un linguaggio simile al linguaggio macchina detto assembly Questo è più mnemonico (es. ADD è l istruzione per calcolare una somma) Il programma in linguaggio assembly viene tradotto in linguaggio macchina da un semplice programma (assembler). Il linguaggio: ha un basso livello di astrazione è più facile da ricordare (es. invece di scrivere scrive ADD) è diverso per ogni piattaforma hardware 6 Linguaggio di programmazione 7 Linguaggi ad alto livello 8 Soluzione 3 Il programmatore impara un linguaggio di programmazione ad alto livello e usa un traduttore complesso ed efficiente per tradurlo in linguaggio macchina o in assembly Caratteristiche del linguaggio: ha un alto livello di astrazione (esprime le operazioni da svolgere senza entrare nei dettagli di funzionamento del processore, es. A+B calcola la somma di due valori) è più simile al linguaggio umano e quindi più facile da ricordare (es. print X potrebbe essere l istruzione per visualizzare il valore di X) è (quasi) indipendente dalla piattaforma hardware e dal sistema operativo (PC, McIntosh, Windows, Linux, etc.), ci pensa il traduttore a convertirlo per il sistema in uso

3 Programma sorgente Il programmatore sviluppa un programma scrivendo in un linguaggio di programmazione (di alto o basso livello) le operazioni da far eseguire e le memorizza in un file detto: programma programma sorgente codice sorgente sorgente 9 Traduttore: interprete Le istruzioni del codice sorgente vengono ad una ad una tradotte in linguaggio macchina e subito eseguite dalla CPU Sorgente somma stampa leggi calcola Traduttore: compilatore Tutto il codice sorgente viene tradotto in linguaggio macchina e memorizzato in un file detto programma (o file o codice) eseguibile Sorgente somma stampa leggi calcola... Eseguibile Differenze Ogni volta che l interprete esegue un programma, deve attuare la traduzione delle istruzioni in linguaggio macchina: lento Il programma compilato è già tradotto e ha quindi una velocità di esecuzione molto superiore Il compilatore è in genere in grado di produrre una traduzione più efficiente dal punto di vista della velocità di esecuzione del codice prodotto 12

4 Differenze Eseguire un programma interpretato richiede l acquisto e la competenza d uso del programma interprete da parte dell utente finale Eseguire un programma compilato non richiede che un (doppio) click Il compilatore viene acquistato solo dal programmatore e solo questi ha la necessità di avere la competenza necessaria per utilizzarlo 13 Differenze L interprete richiede il codice sorgente che quindi risulta visibile a chiunque Il programma eseguibile non necessita del sorgente: protezione del copyright La procedura di compilazione permette di suddividere un programma complesso in più parti, ma è più complessa da gestire 14 Librerie 15 Compilazione e linking 16 In un linguaggio ad alto livello, molti dettagli non vengono risolti dal programmatore, ma vengono forniti pre-risolti dal compilatore: funzioni di I/O funzioni matematiche... I codici eseguibili (quindi già tradotti in linguaggio macchina) che risolvono questi dettagli (anche molto complessi) vengono raggruppati in file detti librerie Il processo di compilazione è composto da 2 fasi: compilazione vera e propria: il sorgente viene compilato, ma alcune parti (i dettagli ) sono lasciate in sospeso; viene generato un file detto file oggetto linking: il file oggetto e le librerie vengono unite (collegate) per costituire un unico file eseguibile

5 17 18 Librerie statiche Librerie statiche Nella compilazione il codice delle funzioni di libreria viene inserito nel file eseguibile Spesso le stesse identiche librerie sono usate da più programmi: spreco di memoria File eseguibile File oggetto Eseguibile A Oggetto A Eseguibile B Oggetto B Eseguibile C Oggetto C File libreria Libreria Libreria Libreria RAM Librerie dinamiche Librerie dinamiche Dynamic Link Libraries (DLL) Shared Libraries, Shared Objects Nella compilazione il codice delle funzioni di libreria NON è inserito nel file eseguibile, viene invece indicato il nome del file che lo contiene Quando viene eseguito un programma che usa quella libreria, questa viene caricata in memoria, ma è utilizzabile anche dagli altri programmi Eseguibile A Eseguibile B Eseguibile C File eseguibile Oggetto A Oggetto B Oggetto C File oggetto File libreria RAM Libreria

6 Librerie dinamiche 21 Interfacce utente 22 Quando viene eseguito un altro programma che necessita di quella libreria, questa è già caricata in memoria e pronta all uso: il programma impiega meno tempo a partire Se una delle funzioni della libreria deve essere aggiornata (es. nuova versione), è sufficiente sostituire la DLL mentre il programma in sé non viene toccato Se la DLL viene sostituita da una con codice contenente virus, il lancio del programma esegue il virus! L interazione tra utente e programma può avvenire tramite: Interfacce a carattere (console mode): vengono visualizzate e immesse solo righe di testo Interfacce grafiche (GUI Graphic User Interface): vengono visualizzati pannelli, bottoni, caselle di testo, immagini, etc. Molti linguaggi offrono entrambe le interfacce, o nativamente (Visual Basic, Java, ) o mediante librerie (C, C++, )

7 Lo scopo 2 Il primo esperimento Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video Ver Claudio Fornaro - Corso di programmazione in C Soluzione informale 3 Le variabili 4 Le operazioni da svolgere saranno le seguenti, nell ordine indicato: 1. Chiedere il primo numero 2. Chiedere il secondo numero 3. Calcolare la somma del primo numero e del secondo numero 4. Visualizzare il risultato I numeri richiesti vengono immagazzinati nella memoria del calcolatore (RAM) Ciascun numero sarà immagazzinato in una piccola porzione di memoria detta variabile costituita da un certo numero di byte A ogni variabile il programmatore dà un nome per potersi riferire ad essa

8 Le variabili Allora la sequenza delle operazioni da svolgere può essere descritta più dettagliatamente come segue: 1. Chiedere il primo numero e metterlo in una variabile di nome A 2. Chiedere il secondo numero e metterlo in una variabile di nome B 3. Calcolare la somma di A e B 4. Visualizzare il risultato 5 Le variabili Anche il risultato della somma dovrà essere immagazzinato nella memoria del calcolatore in una variabile, quindi avremo: 1. Chiedere il primo numero e metterlo in una variabile di nome A 2. Chiedere il secondo numero e metterlo in una variabile di nome B 3. Calcolare la somma di A e B e mettere il risultato in una variabile di nome S 4. Visualizzare il contenuto della variabile S 6 Riduzione all essenziale Riducendo al minimo indispensabile quanto scritto senza perdere alcuna informazione, si ha la seguente sequenza di operazioni: Chiedere A Chiedere B A + B S Visualizzare S Input Input Elaborazione Output 7 Input da tastiera Input significa mettere dentro Le operazioni di input sono quelle tramite le quali il calcolatore riceve dei dati dall esterno Per leggere un numero dalla tastiera e memorizzarlo in una variabile si può ad esempio utilizzare la funzione scanf: scanf("%d", &A) Notare che la variabile A è preceduta dal carattere & La funzione precedente assegna ad A un valore intero (i dettagli in seguito) 8

9 Output su video 9 Assegnazioni di variabili 10 Output significa mettere fuori Le operazioni di output sono quelle tramite le quali il calcolatore mostra i risultati Per visualizzare il valore di una variabile si può utilizzare ad esempio la funzione printf: printf("%d", S) Notare che la variabile S non è preceduta dal carattere & La funzione precedente visualizza un numero intero: quello contenuto nella variabile A (i dettagli in seguito) Assegnare un valore ad una variabile significa memorizzare in essa un valore Per assegnare un valore si usa il simbolo = : X = 12 Il valore può essere il risultato di un calcolo: S = A+B questo indica che in S viene memorizzato il valore risultante dal calcolo A+B Il segno = significa prende il valore di : S prende il valore del risultato di A+B Ogni volta che si assegna un valore ad una variabile, il contenuto precedente viene perso Bozza di soluzione 11 Punto e virgola 12 La sequenza di operazioni viste precedentemente diventa: scanf("%d", &A) scanf("%d", &B) S = A + B printf("%d", S) Le istruzioni devono terminare sempre con un punto e virgola: scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); Mancano ancora alcune parti per essere un programma C completo

10 Definizione delle variabili Tutte le variabili utilizzate nel programma devono essere definite Le definizioni vanno collocate tutte insieme prima delle istruzioni eseguibili: int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); int indica che A, B ed S sono variabili adeguate a contenere valori interi 13 Il programma principale Le istruzioni che costituiscono il programma devono essere racchiuse tra parentesi graffe per formare un blocco. Se questo è l unico presente, deve essere chiamato main: main() { int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); } 14 Il programma principale Per far terminare il programma, si usa l istruzione return (seguita da un numero, ad es. 0) collocata nel blocco del main: main() { int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); return 0; } 15 I file di intestazione L utilizzo delle funzioni di I/O richiede che all inizio del file C sia indicato il nome del file di intestazione che le descrive: stdio.h #include <stdio.h> main() { int A, B, S; scanf("%d", &A); scanf("%d", &B); S = A + B; printf("%d", S); return 0; } 16

11 Compilazione Ora il programma può essere compilato ottenendo il corrispondente file eseguibile Mandando in esecuzione l eseguibile il programma chiederà due numeri e darà come risultato il valore della somma x C:\>primo.exe Attende l input (di A) 35 Attende l input (di B) Visualizza S 17 Miglioramento input Quando il programma parte, non informa l utente di essere in attesa che egli introduca due valori da sommare Bisogna far precedere ciascuna scanf da un istruzione printf che informi l utente su che cosa egli debba fare: printf("introduci 1o valore: "); scanf("%d", &A); printf("introduci 2o valore: "); scanf("%d", &B); 18 Miglioramento input Dopo i miglioramenti indicati, all esecuzione si ottiene la seguente schermata: C:\>primo.exe Introduci 1o valore: 12 Introduci 2o valore: x 19 Miglioramento output Il risultato del calcolo viene mostrato a video come semplice numero, ma è preferibile aggiungere una scritta che ne specifichi il significato Si può aggiungere tale scritta tra le virgolette della stessa printf che visualizza S: printf("la somma vale: %d", S); 20

12 Risultato finale Dopo i miglioramenti indicati, si ottiene la seguente schermata: C:\>primo.exe Primo valore: 12 Secondo valore: 23 La somma vale: 35 x 21 Soluzione finale #include <stdio.h> main() { int A, B, S; printf("primo valore? "); scanf("%d", &A); printf("secondo valore? "); scanf("%d", &B); S = A + B; printf("la somma vale: %d", S); return 0; } 22 Esercizi 1. Scrivere un programma che chieda di introdurre 3 numeri A, B e C dalla tastiera e successivamente visualizzi il risultato dei seguenti calcoli: 1) A B 2) A B+C 3) A B C 2. Scrivere un programma che chieda due numeri e li memorizzi nelle variabili A e B. Il programma deve ora scambiare il contenuto di A e di B (es. se inizialmente A contiene 12 e B 27, dopo lo scambio A contiene 27 e B 12). Suggerimento: si abbiano 2 bicchieri, uno rosso che contiene acqua e uno blu che contiene aranciata, travasando opportunamente, si vuole che quello rosso contenga aranciata e quello blu acqua. 23 Soluzione esercizio 1 1. Prima soluzione: #include <stdio.h> main() { int A, B, C, X, Y, Z; printf("primo valore? "); scanf("%d", &A); printf("secondo valore? "); scanf("%d", &B); printf("terzo valore? "); scanf("%d", &C); continua... 24

13 Soluzione esercizio 1 25 Soluzione esercizio 1 26 (Continuazione) X = A-B; printf("risultato 1 = %d\n", X); Y = A B+C; printf("risultato 2 = %d\n", Y); Z = A B-C; printf("risultato 3 = %d\n", Z); return 0; } Nota: \n serve per andare a capo La schermata risultante dall esecuzione: C:\>primo.exe Primo valore? 44 Secondo valore? 23 Terzo valore? 4 Risultato 1 = 21 Risultato 2 = 25 Risultato 3 = 17 C:\>_ x Variazioni esercizio 1 27 Variazioni esercizio 1 28 Poiché i risultati dei calcoli sono memorizzati in variabili diverse, si possono eseguire prima i 3 calcoli e poi visualizzare i 3 risultati: X = A B; Y = A B+C; Z = A B C; printf("risultato 1 = %d\n", X); printf("risultato 2 = %d\n", Y); printf("risultato 3 = %d\n", Z); In questo esempio le variabili X, Y e Z dopo essere state visualizzate non vengono più utilizzate, si può allora risparmiare memoria definendo e utilizzando solo la X (ma non si possono fare prima i 3 calcoli): X = A B; printf("risultato 1 = %d\n", X); X = A B+C; printf("risultato 2 = %d\n", X); X = A B C; printf("risultato 3 = %d\n", X);

14 Variazioni esercizio 1 29 Variazioni esercizio 1 30 Si possono utilizzare i valori intermedi: X = A B; printf("risultato 1 = %d\n", X); X = X+C; qui X vale A B printf("risultato 2 = %d\n", X); Si possono indicare i calcoli anche nella funzione printf(): printf("ris 1 = %d\n", A B); printf("ris 2 = %d\n", A B+C); printf("ris 3 = %d\n", A B C); X = X C C; qui X vale A B+C printf("risultato 3 = %d\n", X); Soluzione esercizio 2 Non si può scrivere: A = B; B = A; Eseguendo l istruzione A=B: il (vecchio) valore di A viene perso e A assume il (vecchio) valore di B Nella successiva istruzione B=A: B assume il nuovo valore di A (cioè il vecchio B); Quindi alla fine entrambe le variabili contengono il vecchio valore di B 31 Soluzione esercizio 2 Serve una variabile temporanea di scambio: Temp = A; salva il vecchio A in Temp A = B; copia in A il vecchio B B = Temp; copia in B il vecchio A salvato in Temp 1 A Temp 2 3 B 32

15 Soluzione esercizio 2 La soluzione con 2 variabili temporanee è meno efficiente (usa una variabile in più ed esegue un operazione di assegnamento in più) e non è quindi preferibile: TempA = A; TempB = B; A = TempB; B = TempA; 33

16 Storia e versioni 2 Il linguaggio C Ver Claudio Fornaro - Corso di programmazione in C Sviluppato da Dennis Ritchie ai Bell Labs nel 1972 per realizzare il sistema operativo UNIX K&R C: 1978 (prima versione, K&R dal nome degli autori del libro che lo ha divulgato: Kernighan e Ritchie) ANSI C: 1989 (alias: Standard C, C89) ISO C: 1990 (quasi identico al C89, alias: C90) C99: 1999 (Nuovo standard ISO, non ne esiste un implementazione completa) Standard ANSI Bibliografia e approfondimenti 4 In questo corso ci si attiene strettamente alla versione ANSI 1989 (ancora il più utilizzato) Queste slide coprono la maggior parte del linguaggio, salvo alcuni dettagli, per i quali si rimanda al testo di riferimento: Il linguaggio C, B. Kernighan, D. Ritchie, 2 a ed., 2004, Pearson/Prentice-Hall (2 a ed. originale: 1988) Testo sacro per generazioni di programmatori, la versione italiana è aggiornata secondo l errata corrige dagli autori per aderire allo standard ANSI 89 Il linguaggio C, B. Kernighan, D. Ritchie, 2 a ed., 2004, Pearson/Prentice-Hall ANSI C - A Lexical Guide, Mark Williams Company, 1988, Prentice Hall C-FAQ-list, S. Summit, 2004, URL: C - Corso completo di programmazione, H. Deitel, P. Deitel, 3 a ed Newsgroup: comp.lang.c

17 Caratteristiche del linguaggio Un compilatore C è disponibile su tutti sistemi Codice molto efficiente (veloce) Ha caratteristiche di alto livello: adatto per programmi anche complessi Ha caratteristiche di basso livello (accesso ai bit): permette di sfruttare le peculiarità proprie di una macchina o architettura (efficienza) Tantissime librerie per aggiungere funzionalità Tra i linguaggi più diffusi, il più usato per software di sistema Interfaccia utente testuale Non a oggetti, gestione manuale della memoria dinamica (nessun garbage collector) 5 Fasi di compilazione 1. Il preprocessore elabora le direttive #include, #define,... modificando il sorgente 2. Il compilatore traduce il codice C in linguaggio macchina: 1. con ottimizzazione (della velocità di esecuzione o della dimensione dell eseguibile) 2. senza ottimizzazione (per il debug) 3. Il linker assembla in un unico file eseguibile: i file oggetto prodotti da diversi file sorgente (anche compilati da sorgenti scritti in linguaggi diversi) le librerie (I/O, matematiche, network, etc.) 6 Errori e warning Il compilatore verifica la correttezza sintattica del codice C e produce due tipi di errori: Error: errori sintattici, impediscono la generazione del codice eseguibile Warning: errori non sintattici che non impediscono la generazione del codice eseguibile; i warning segnalano un possibile (e altamente probabile) problema che il compilatore risolve in base a regole generiche (ma attenzione: la soluzione generica potrebbe non essere quella corretta) Un codice pulito non deve produrre né errori né warning 7 La sintassi I caratteri maiuscoli sono considerati diversi dai corrispondenti minuscoli (il linguaggio C è case sensitive ) Le istruzioni sono una sequenza di caratteri terminate dal carattere ; Quando l istruzione contiene solo il carattere ; essa è detta istruzione nulla e non produce alcuna azione I commenti sono annotazioni sul codice fatte dal programmatore, iniziano con la coppia di caratteri /* e terminano con la coppia */, vengono ignorati dal compilatore che li considera come un unico carattere spazio 8

18 La sintassi Le istruzioni possono continuare su più righe Si può andare a capo in ogni punto dove si può mettere uno spazio (tranne che all interno delle stringhe) Una sequenza (anche mista) di uno o più: spazi caratteri Tab ritorni a capo commenti è considerata dal compilatore equivalente ad un unico spazio (tranne che all interno delle stringhe) 9 La sintassi Un blocco di codice è un insieme di istruzioni racchiuso tra parentesi graffe e costituito, nell ordine, da due parti: una sezione opzionale con la definizione di tutte le variabili ad uso esclusivo di quel blocco una sezione con le istruzioni eseguibili (costituita da tutte le righe di codice successive alle eventuali definizioni) Le parentesi graffe sono opzionali e normalmente omesse se il blocco di codice è costituito da una sola istruzione (salvo il blocco che costituisce il corpo di una funzione, in particolare il main) 10 La sintassi Le istruzioni di un blocco (non le eventuali parentesi graffe) si scrivono tutte indentate di un numero fisso di spazi (es. 3) { a = 12; } b = 23; c = a + b; L indentazione viene ignorata dal compilatore ma aiuta il programmatore a comprendere meglio il flusso del programma per cui va fatta mentre si programma e non dopo 11

19 Variabili 2 Tipi di dati primitivi Ver Claudio Fornaro - Corso di programmazione in C Porzioni di memoria RAM usate per mantenere dati variabili nel tempo La definizione di una variabile riserva una porzione di memoria adeguata a contenere un valore del tipo di dato indicato (intero, floating point, etc.) Definizione tipodato nomevar [, nomevar]... ; Esempi int x; float y, k, t; Variabili Tutte le definizioni delle variabili sono collocate all inizio del blocco, prima di tutte le istruzioni eseguibili Le variabili vengono create quando si entra nel blocco dove sono definite e vengono eliminate quando si esce dal blocco stesso, si dice che sono automatiche La visibilità (scope) di una variabile si estende dal punto dove viene definita fino al termine del blocco che la contiene (parentesi graffa di chiusura): scope locale Il termine dichiarazione in C ha un altro significato (e non alloca memoria) 3 Variabili I nomi delle variabili sono identificatori composti da: Lettere Cifre Il carattere underscore _ Il primo carattere deve essere una lettera Non può contenere spazi Minima lunghezza: 1 carattere Massima lunghezza: almeno 31 Meglio non usare il carattere _ come primo carattere (tipicamente usato dal compilatore) 4

20 Variabili Lettere maiuscole e minuscole sono considerate diverse (Var e var sono due variabili diverse e indipendenti) Non si possono usare nomi riservati (come int, main, include, if, for,...) Si usino nomi significativi del contenuto Sono convenzionalmente scritte in minuscolo salvo eventualmente il primo carattere o i primi caratteri di ciascuna parola somma Somma2 somma_2 SommaAlQuadrato Somma_al_quadrato 5 Tipi di dati Determinano la rappresentazione interna (complemento a 2, floating point, etc.) di un valore (variabile o costante) Tipi primitivi: Interi: char un intero su un byte, è in grado di contenere un carattere int un intero con segno, è di solito pari alla word macchina In floating point (virgola mobile): float singola precisione double doppia precisione 6 Scelta del tipo di dato Si decide sapendo che: I tipi interi sono elaborati molto più velocemente dei tipi floating point Più bit ci sono, più lento è il calcolo Più bit ci sono, maggiore è l occupazione di memoria complessiva Esempio Si vogliono memorizzare 2 milioni di valori interi compresi tra 0 e 100, soluzioni: Si usa il tipo char: si occupano 2 MB e i calcoli sono veloci Si usa il tipo double: si occupano 16 MB e i calcoli sono molto più lenti (senza alcun vantaggio rispetto al caso precedente) 7 int, short, long Il tipo int può essere preceduto da: short long Questi tipi di interi occupano rispettivamente meno e più bit rispetto al semplice int: short int x; long int y; In questi casi, int viene spesso omesso Dimensioni: short: almeno 16 bit int: almeno 16 bit e non meno di uno short long: almeno 32 bit e non meno di un int 8

21 signed, unsigned 9 signed, unsigned 10 I valori di tipo intero (char, int, short e long) possono essere memorizzati come numeri con segno (in genere in Complemento a 2) o senza segno (in binario puro) Per specificare che una variabile deve contenere un valore con o senza segno, la sua definizione deve essere preceduta dalla keyword signed o unsigned: unsigned short int z; Per i tipi int, short e long il default è signed (ossia non serve specificarlo) Per il tipo char, dipende dalla macchina e dal compilatore (e dalle sue impostazioni) se i valori sono normalmente signed o unsigned, lo standard dice solo che i caratteri stampabili hanno valori positivi I calcoli con valori interi senza segno non producono overflow (es. su 8 bit: 255+1=0) Limiti interi del compilatore I range e altre caratteristiche dei tipi interi dipendono dal compilatore L header file <limits.h> contiene la definizione di costanti numeriche relative all implementazione dei tipi di dati interi del compilatore in uso: CHAR_MAX CHAR_MIN SHRT_MAX (almeno ) SHRT_MIN (almeno 32767) INT_MAX (almeno ) INT_MIN (almeno 32767) LONG_MAX (almeno ) LONG_MIN (almeno ) 11 float, double, long double float: floating point singola precisione double: floating point in doppia precisione long double: floating point in precisione multipla Il tipo float deve avere almeno lo stesso numero di bit del tipo double Il tipo long double deve avere almeno lo stesso numero di bit del tipo double 12

22 Limiti float del compilatore 13 Limiti float tipici (IEEE P754) 14 I range e altre caratteristiche dei tipi floating point dipendono dal compilatore L header file <float.h> contiene la definizione di costanti numeriche relative all implementazione dei tipi di dati floating point del compilatore in uso: FLT_MAX (almeno 1E+37) FLT_MIN (almeno 1E 37) FLT_EPSILON (almeno 1E 5) è il minimo valore float x tale che x 1.0 DBL_MAX DBL_MIN DBL_EPSILON float occupazione: 32 bit di memoria minimo: (circa) massimo: (circa) precisione: circa 7 cifre (in base 10) (ad esempio ) double occupazione: 64 bit di memoria minimo: (circa) e massimo: (circa) precisione: circa 15 cifre (in base 10) (ad esempio ) Costanti intere decimali 15 Costanti intere ottali ed hex 16 Sequenza di cifre decimali eventualmente preceduta da + o E di tipo int se è nel range degli int E di tipo long se esce dal range degli int ma è in quello dei long E un errore se esce dal range dei long E di tipo long se è seguita dalla lettera L E unsigned se è seguita dalla lettera U 123 int long int (es. se int su 16 bit) 123L long int 123UL unsigned long int Una costante intera è espressa in base 8 se è preceduta da uno ATTENZIONE: vale (dodici!) Una costante intera è espressa in base 16 se è preceduta da 0x oppure da 0X 0X2C vale Possono essere seguite da: Il carattere L o l per renderle long Il carattere U o u per renderle unsigned 014ul 12 unsigned long int 0xbabau unsigned long int 0xblu 11 unsigned long int

23 Costanti floating point Contengono un punto (non la virgola) decimale e/o un esponente intero positivo o negativo L esponente è preceduto da una e o E che ha il significato di per 10 elevato a : 4e Sono di tipo double salvo indicazione diversa: sono di tipo float se sono seguite da F o f sono di tipo long double se seguite da L o l e5 12.3e+5 65e F 14.2e-3F 43e+4F 43e4F 56.3L e-5L 87e8L 87e+8L Attenzione! 12F (errore) 12L (è un long int) 17 Inizializzazione delle variabili La definizione di una variabile (tranne le variabili di classe static ed extern) non le assegna un valore iniziale (contenuto casuale) L assegnazione esplicita del valore iniziale alle variabili contestualmente alla definizione è detta inizializzazione I valori usati per inizializzare possono anche essere espressioni (si riveda dopo aver visto le espressioni e le funzioni) che coinvolgono variabili già inizializzate Esempi int x = 12, y = 27*3*x; double pigreco = 4.0*atan(1.0); 18 const Il modificatore const nella definizione delle variabili informa il compilatore che queste non dovranno essere modificate Il valore della variabile const deve essere specificato nell inizializzazione, anche mediante il risultato di un espressione const double Pi = ; const double Pi = 4.0*atan(1.0); const può essere messo prima o dopo il nome di tipo a cui si riferisce. Nei casi dubbi si metta dopo. Le seguenti definizioni sono equivalenti: const int x = 12; int const x = 12; 19 Costanti enumerative Lista di identificatori aventi valori costanti di tipo int Sintassi: enum [nome] {cost1, cost2,...}; I nomi delle costanti vengono in genere scritti in maiuscolo Al primo identificatore viene assegnato 0, al secondo identificatore 1, e così via enum boolean {FALSE, TRUE}; definisce le due costanti FALSE (con valore 0) e TRUE (con valore 1) 20

24 Costanti enumerative I singoli valori possono essere inizializzati, i successivi proseguono la numerazione enum mesi {GEN=1, FEB, MAR, etc.}; enum lettere {A=1, B, C=9, D, etc.}; quindi qui B vale 2 e D vale 10 I nomi delle costanti devono essere unici, anche in enum diverse, è un errore scrivere: enum unodue {UNO, DUE}; enum unotre {UNO, TRE}; I valori delle costanti possono ripetersi anche nella stessa numerazione enum a {A=1, B=1, C=2, D=2, etc.}; 21 Costanti enumerative Si possono definire variabili del tipo enumerativo, ma il compilatore non è tenuto a verificare i valori nelle assegnazioni enum bool {FALSE, TRUE} pippo; pippo = 12; Il nome dell enumerazione può essere omesso enum {FALSE, TRUE}; 22 Costanti simboliche Sono sostituzioni di simboli (identificatori) #define nome sequenza_di_caratteri #define TRUE 1 #define FALSE 0 Prima della compilazione, il preprocessore sostituisce ogni nome (per convenzione scritto in maiuscolo) con la corrispondente sequenza_di_caratteri La sostituzione inizia dove è indicata la #define e continua fino a fine file Non ci vuole il carattere = né il ; finale La sequenza_di_caratteri può contenere spazi e termina a fine riga 23 define, const ed enum I valori enum e const riservano memoria come le variabili e vengono utilizzati dal debugger, una #define no I valori enum sono solo int I valori enum sono inizializzati automaticamente La visibilità dei valori enum e const è confinata alla funzione dove sono definiti 24

25 Funzioni di I/O per numeri Per utilizzare le funzioni di Input/Output bisogna includere l header file <stdio.h> che ne contiene la descrizione (in modo che il compilatore possa controllare che l utilizzo della funzione sia corretto) <stdio.h> contiene anche la definizione di alcune costanti simboliche come quella usata da alcune funzioni per segnalare la fine del file: EOF (End Of File) 25 Stream preesistenti Quando il programma viene mandato in esecuzione, il sistema operativo gli fornisce 3 stream (flussi di dati) già aperti: stdin collegato alla tastiera stdout collegato al video per l output normale (i dati risultato dell elaborazione) stderr collegato al video per la diagnostica (informazioni relative al funzionamento del programma, ad esempio per segnalare errori, non sono i dati risultato dell elaborazione) 26 Input formattato scanf Funzione per leggere dati dalla tastiera scanf(stringa di formato, lista di variabili) La lista di variabili è un elenco di variabili da assegnare con i dati letti dalla tastiera assegnate nell ordine in cui sono elencate separate da virgole precedute (ciascuna) dal carattere & (per ricavarne il puntatore) La stringa di formato contiene un elenco di specifiche di conversione specificano il tipo di dato atteso per ciascuna delle variabili della lista di variabili sono lettere precedute da un carattere % 27 Input formattato scanf Esempi scanf("%d", &a); legge 1 valore di tipo int (come richiesto dalla specifica %d) e lo assegna alla var a (di tipo int) scanf("%d%d%d", &a, &b, &c); legge 3 valori di tipo int (come richiesto dalla specifica %d) e li assegna ad a, b e c Quest ultima equivale a: scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); Negli ultimi 2 casi, i 3 valori in input possono essere immessi dall utente o di seguito o andando a capo ogni volta 28

26 Input formattato scanf La stringa di formato può contenere al suo interno combinazioni di: Specifiche di conversione: %carattere, es. %d Caratteri ordinari: indicano che a quel punto ci si aspetta l introduzione di proprio quei caratteri in quella sequenza, se non ci sono la scanf termina. I caratteri vengono semplicemente scartati (per includere il carattere %, questo deve essere raddoppiato: %% altrimenti ha il significato di specifica di conversione): "%d%%" legge un intero e scarta il simbolo % White space (ossia spazi, Tab e \n ): richiedono che tutti i white space (di qualunque tipo) consecutivi in quel punto dell input vengano saltati 29 Input formattato scanf Tipicamente la stringa di formato contiene solo specifiche di conversione, senza altri caratteri in mezzo (neppure spazi): "%d%d%d" Errore comune è pensare che indicando il carattere \n in una stringa di formato si richieda alla scanf di aspettasi in quel momento l introduzione di un semplice ritorno a capo e di scartarlo La scanf può essere fonte di problemi se l input non è conforme a quanto richiesto dalla stringa di formato, per questo molti consigliano di usare una gets seguita da una sscanf (trattate più avanti) 30 Input formattato scanf Principali specifiche di conversione per valori numerici: %d int %u unsigned int %x unsigned int in esadecimale %f, %e, %g float (equivalenti) Per gli interi, dopo il % : l indica un long es. %ld h indica uno short es. %hd Per i floating point, dopo il % : l indica un double es. %lf L indica un long double es. %Lf 31 Input formattato scanf La funzione scanf restituisce un valore di tipo int che può essere: un numero 0: indica quante variabili della lista sono assegnate con valori prelevati dalla tastiera il numero rappresentato dalla costante EOF: segnala che si è verificato un errore o che in input non c è nulla da leggere Per indicare alla scanf (e alle altre funzioni di input) che l inserimento dei dati è terminato, si può inserire da tastiera il carattere di Fine File (che non è il valore di EOF) premendo i tasti: Control-Z su sistemi DOS/Windows Control-D su sistemi Unix/Linux 32

27 Input formattato scanf Esempio n = scanf("%d%d", &a, &b); se n vale 2: la scanf ha letto 2 valori e li ha assegnati ad a e b se n vale 1: la scanf ha letto un solo valore (assegnato ad a), mentre b non è stata modificata (ha il vecchio valore) se n vale 0: nessun valore è stato letto, né a né b sono stati modificati, ma ci sono altri caratteri pronti per essere letti dalla prossima istruzione di input se n vale EOF: nessun valore è stato letto, né a né b sono stati modificati e non ci sono altri caratteri pronti per essere letti dalla prossima istruzione di input 33 Input formattato scanf La scanf legge da tastiera dei caratteri e in base alla specifica di conversione % li trasforma in valori del tipo appropriato per essere memorizzati nelle corrispond. variabili Ad esempio, con la specifica %d la scanf legge i caratteri 1 e 2 e li trasforma nel numero 12 (int) Il gruppo di caratteri letti di volta in volta dalla scanf per essere trasformati in un unico valore viene detto campo (field ) o token I campi numerici non contengono spazi La scanf salta i white space iniziali del campo che legge (è per questo che i valori possono essere immessi su una o più righe) 34 Input formattato scanf Il numero di caratteri utilizzati per costituire un campo dipende dalla specifica di conversione %: viene prelevato il massimo numero di caratteri compatibili con il tipo richiesto dalla specifica Ad esempio, con la specifica %d la scanf legge tutti i caratteri cifra che trova, fino al primo carattere non-cifra (ad esempio uno spazio) i caratteri non letti sono utilizzati dalle successive input) 35 Input formattato scanf Esempi Se in input (da tastiera) la funzione n=scanf("%d", &a) legge i caratteri: 12 questi producono per a = 12, n = a = 12, n = 1, i caratteri 23 restano a disposizione della successiva operazione di input 12abc a = 12, n = 1, i caratteri abc restano a disposizione della successiva operazione di input abc non producono nulla per a (che mantiene il vecchio valore), n = 0, i caratteri abc restano a disposizione della successiva operazione di input abc12 non producono nulla per a (mantiene il vecchio valore), n = 0, i caratteri abc12 restano a disposizione della successiva operazione di input 36

28 Input formattato scanf 37 Input formattato scanf 38 Una specifica contenente un * (tra il % e la lettera) indica che il corrispondente campo deve essere letto, ma il valore corrispondente non deve essere assegnato ad alcuna variabile (soppressione dell input) Esempio n = scanf("%d%*d%d", &a, &b); Se si dà in input: si ottiene: a=12, b=34, n=2 mentre il valore 23 viene letto e scartato Una specifica contenente un numero intero (tra il % e la lettera) specifica la quantità massima di caratteri da leggere per identificare il campo corrispondente (e trasformarli in numero): se il numero di caratteri in input che possono fare parte del campo è inferiore alla quantità massima specificata, vengono letti solo quei caratteri altrimenti si considerano solo tanti caratteri quanti sono quelli indicati dalla quantità massima specificata (gli altri restano per le letture successive) Input formattato scanf 39 Output formattato printf 40 Esempi La specifica %4d indica che il campo da leggere per essere convertito in int può essere costituito da al massimo 4 caratteri Se in input (da tastiera) la funzione scanf("%4d%d",&a,&b) legge i caratteri: a=12, b=23 (lo spazio delimita il primo campo prima di arrivare al 4 o carattere) a=1234, b=56 Funzione per scrivere dati sul terminale printf(stringa di formato, lista di espressioni) La stringa di formato contiene: caratteri ordinari, vengono visualizzati (per visualizzare il carattere %, lo si deve indicare raddoppiato: %%) specifiche di conversione La lista di espressioni è l elenco delle espressioni di cui visualizzare il risultato ciascun risultato viene visualizzato al posto della corrispondente specifica di conversione (devono corrispondere per numero e tipo) sono separate da virgole printf("somma = %d\n", a);

29 Output formattato printf 41 Output formattato printf 42 Restituisce un valore int che può essere: se 0: il numero di caratteri scritti a video se < 0: la segnalazione di un errore n = printf("somma = %d", a); Con a=5, n vale 9 Le sequenze di escape sono caratteri ordinari: \n inserisce un ritorno a capo (si mette in fondo alla stringa di formato, di solito) \t inserisce un carattere Tab \" inserisce un carattere doppie virgolette " \ inserisce un carattere apice \\ inserisce un carattere backslash \ Specifiche di conversione per valori numerici %d int %u unsigned int %x unsigned int in esadecimale %f, %e, %g double (e float) in formato decimale, esponenziale o misto Per gli interi, dopo il % : l indica un long es. %ld h indica uno short es. %hd Per i floating point, dopo il % : L indica un long double es. %Lf Output formattato printf Tra il carattere % e la specifica di conversione possono esserci, nell ordine: Opzioni di allineamento (es. un allinea a sinistra) Un numero che specifica l ampiezza minima del campo (in caratteri) Un punto se si vuole specificare la precisione Un numero che specifica la precisione: per i floating point: numero di cifre da visualizzare dopo il punto decimale (default: 6), i valori comunque hanno il numero di cifre proprio del tipo a cui appartengono, es. i double 14 per gli interi: numero minimo di caratteri da visualizzare Un modificatore di tipo (h,l,l) 43 Output formattato printf Esempi %8d int su almeno 8 caratteri n=printf("x%8dx", 12); visualizza X 12X, n vale 10 %12f float/double su almeno 12 char n=printf("x%12fx", 12.4); visualizza X X, n vale 14 %.2f float/double con 2 caratteri decimali n=printf("x%.2fx", 12.4); visualizza X12.40X, n vale 7 %8.2f float/double su almeno 8 caratteri e con 2 caratteri dopo la virgola n=printf("x%8.2fx", 12.4); visualizza X 12.40X, n vale 10 n=printf("x%8.2fx", ); visualizza X X, n vale 11 44

30 Esercizi Scrivere un programma che chieda 4 numeri double e ne calcoli la media (double) con 2 decimali. 2. Scrivere un programma che chieda un valore double e lo visualizzi con le 3 specifiche di conversione %f, %e e %g.

31 2 Espressioni numeriche Espressioni e funzioni matematiche Ver Claudio Fornaro - Corso di programmazione in C 1 Composte da operatori, variabili, costanti e funzioni, producono un valore Delta = b*b-4*a*c; Gli operatori matematici sono: + somma - sottrazione * moltiplicazione / divisione % resto della divisione intera La divisione tra interi produce risultato intero con troncamento della parte frazionaria Il resto può essere calcolato solo con operandi di tipo intero (non floating point) Precedenza degli operatori 3 Associatività degli operatori 4 Specifica in quale ordine vengono eseguiti i calcoli Raggruppati in livelli di priorità decrescente: 1. + segno 2. () 3. * / % 4. + somma e sottrazione Esempi x = a+b*c; prima la moltiplicazione x = (a+b)*c; prima la somma x = a + -b; a + (-b) Specifica in quale ordine vengono eseguiti i calcoli contenenti operatori con lo stesso livello di precedenza Per gli operatori matematici l associatività è sempre da sinistra a destra x=a+b+c; x=(a+b)+c; x=a+b-c+d; x=(((a+b)-c)+d); x=a*b/c; x=(a*b)/c; x=a+b+c*d; x=((a+b)+(c*d));

32 Espressioni numeriche Operandi dello stesso tipo 5 Espressioni numeriche Operandi dello stesso tipo 6 Le operazioni matematiche possono essere eseguite solo tra due operandi dello stesso tipo (int con int, long con long, float con float, etc.) I risultati intermedi dei calcoli vengono memorizzati in variabili temporanee (senza nome) dello stesso tipo degli operandi Le variabili temporanee vengono rimosse automaticamente dalla memoria dopo essere state utilizzate X = A + B * C α β α e β sono le variabili temporanee Espressioni numeriche Operandi di tipo diverso 7 Espressioni numeriche Operandi di tipo diverso 8 Le operazioni tra operandi di tipo diverso non possono essere calcolate direttamente Tra i due operandi, uno ha un tipo più capiente dell altro (ad es. il tipo double può contenere qualsiasi valore di tipo float, long, int, etc.) Il valore del tipo meno capiente può essere convertito nell altro tipo senza perdita di dati Questa conversione si chiama promozione e viene effettuata automaticamente sull operando del tipo meno capiente La promozione crea una variabile temporanea del tipo più capiente contenente il valore promosso (es. un 3 di tipo int viene convertito in un 3.0 di tipo double) La promozione avviene solo nel momento in cui è necessaria per proseguire il calcolo

33 Espressioni numeriche Operandi di tipo diverso 9 Espressioni numeriche Operandi di tipo diverso 10 X = A d + B d * C i Promozione X = A d + B i * C i α d α i Promozione β d β d γ d La lettera d indica il tipo double, i il tipo int γ d Il calcolo tra B e C non richiede alcuna promozione, a differenza di quello tra A ed α Espressioni numeriche Operandi di tipo diverso 11 Espressioni numeriche Operandi di tipo diverso 12 Attenzione Supponiamo gli int siano su 16 bit (max 32767) e i long su 32 bit (max 2 miliardi) Il codice seguente dà overflow nel prodotto. int a, b; long c; a = 30000; b = 2; c = a * b; Perché? Risposta: perché la variabile intermedia α è di tipo int e un int su 16 bit non può contenere Per risolvere il problema si deve far in modo di avere una variabile intermedia di tipo long: definendo almeno una delle variabili di tipo long oppure richiedendo esplicitamente la promozione a long di almeno una delle variabili La seconda soluzione è migliore: non richiede di cambiare il tipo delle variabili (è il risultato a non essere rappresentabile, non gli operandi)

34 Conversione di tipo - cast 13 Promozioni integrali 14 L operatore di cast produce una variabile temporanea del tipo richiesto e contenente il valore originale convertito E simile ad una promozione, ma mentre la promozione è automatica, il cast è una richiesta esplicita di conversione di tipo Ha priorità maggiore degli operatori matem. Sintassi: (tipo)espressione Esempio (e soluzioni dell overflow in c=a*b): c = (long)a * b; cast applicato ad a c = a * (long)b; cast applicato ad b c = (long)a * (long)b; c = (long)(a*b); INUTILE! Nelle espressioni matematiche, i valori dei tipi char e short int, i campi di bit e gli elementi delle enum vengono automaticamente convertiti: in int se questo tipo può rappresentare i valori originali in unsigned int altrimenti Conversioni nelle assegnazioni Quando un valore di un tipo viene assegnato ad una variabile di un altro tipo, vi è una conversione automatica del valore al tipo della variabile assegnata Se la variabile assegnata ha il tipo più capiente dei due, non ci sono problemi Altrimenti ci possono essere problemi (ci sono meno bit) per cui il compilatore attua la conversione ma in genere (non tutti) segnala il problema con un warning Se l assegnazione è comunque voluta, per eliminare l eventuale warning si usi un cast 15 Conversioni nelle assegnazioni La conversione di un valore floating-point ad un intero avviene con troncamento della parte frazionaria Esempi int a, b=12; long l= ; double e, f=3.0, g=9.275; a = f; warning (a vale 3) a = (int)f; No warning (a vale 3) a = (int)g; No warning (a vale 9) e = b; No warning (e vale 12.0) a = l; warning (a vale???) a = (int)l; No warning (a vale???) 16

35 Operatori ++ e 17 Operatori ++ e 18 Incrementano/decrementano di 1 una variabile: ++a; ++a incrementa a di 1 prima che a venga utilizzata nel calcolo (incremento prefisso) a++ incrementa a di 1 dopo che a è stata utilizzata nel calcolo (incremento postfisso) a e a decrementano a di 1 Priorità maggiore degli operatori matematici Utilizzabili solo con modifiable L-value (ossia un qualcosa che si può mettere a sinistra di un segno di assegnazione): non si possono applicare al risultato di un calcolo (a+1)++; ERRORE Esempi: a = 5; x = ++a; ora a vale 6 e x vale 6 a = 5; x = a++; ora a vale 6 e x vale 5 Attenzione Le variabili usate con un operatore ++ o non possono apparire più di una volta nella stessa espressione (fino al ; finale) x = i * i++; Errore Operatori di assegnamento 19 Operatori di assegnamento 20 In C l assegnazione è un espressione e dunque produce un risultato: il valore dell espressione a destra del segno = Questo e l avere associatività da destra a sinistra permette di assegnare lo stesso valore a più variabili con la scrittura seguente: a = b = c = 2; che equivale a: a = (b = (c = 2)); La forma di assegnamento: variabile op= espressione essendo op un operatore del C, equivale a: variabile = variabile op espressione x += 5; equivale a x = x + 5; Esiste per tutti gli operatori aritmetici e bitwise: += = *= /= %= &= ^= = <<= >>= Dopo aver visto i vettori: vett[y%(x+2)] += 5; in questo esempio è evidente il vantaggio (di digitazione e di computazione) di non dover scrivere due volte la quantità da incrementare

36 Funzioni matematiche Sono contenute in una libreria esterna al compilatore, collegata all eseguibile dal linker Richiedono che venga indicato il file di intestazione (header file) <math.h> che le descrive Richiedono valori double e producono risultati double Le funzioni trigonometriche usano i radianti (180 o = π rad) 21 Funzioni matematiche sin(x) seno cos(x) coseno tan(x) tangente asin(x) arcoseno acos(x) arcocoseno atan(x) arcotangente atan2(y,x) arcotangente di y/x, migliore della precedente per x piccoli exp(x) esponenziale e x log(x) logaritmo naturale log10(x) logaritmo in base Funzioni matematiche pow(x,y) x y (se y<0, x deve essere intero) sqrt(x) radice quadrata (x 0) fabs(x) valore assoluto ceil(x) minimo intero x floor(x) massimo intero x 23 Funzioni matematiche Alcune altre funzioni matematiche sono descritte nell header file <stdlib.h>: abs(x) calcola il valore assoluto di un valore int e produce un risultato di tipo int labs(x) calcola il valore assoluto di un valore long e produce un risultato di tipo long 24

37 Funzioni matematiche 25 Funzioni matematiche 26 Come arrotondare un numero all intero più vicino? Non esiste alcuna funzione della libreria standard che lo faccia, per valori positivi si può ad esempio usare una delle seguenti espressioni (non sono statisticamente corrette ma in genere sono sufficienti allo scopo): (int)(valore+0.5) per valori x.5 arrotonda sempre all intero successivo (int)(valore+(0.5-dbl_epsilon)) per valori x.5 arrotonda sempre all intero precedente Per valori negativi bisogna invece usare le seguenti variazioni: (int)(valore-0.5) (int)(valore-(0.5-dbl_epsilon)) Una soluzione statisticamente corretta richiede che i valori x.5 siano approssimati: per eccesso (all intero successivo) se x è dispari per difetto (all intero precedente) se x è pari Valori casuali 27 Valori casuali 28 La funzione rand ogni volta che viene chiamata produce un diverso valore intero compreso tra 0 e RAND_MAX (estremi inclusi) con distribuzione uniforme x=rand(); RAND_MAX vale almeno (il valore effettivo dipende dal compilatore) Le funzioni e le definizioni sono contenute in <stdlib.h> Per rendere effettivamente casuali i valori generati, all inizio del programma si aggiunga (una sola volta) l istruzione: srand(time(null)); (bisogna includere <time.h>) Per avere un valore intero tra 0 e N: x = rand() % N; In alcuni sistemi il generatore di numeri pseudocasuali produce valori la cui parte bassa ha distribuzione poco uniforme, per cui può essere preferibile la formula : x = rand() / (RAND_MAX / N + 1); Per un esempio di funzione casuale con distribuzione gaussiana si veda la citata FAQ di Steve Summit (13.20)

38 Esercizi 1. Scrivere un programma che chieda 4 numeri int, ne calcoli la media, la memorizzi in una variabile float e la visualizzi con 2 decimali. 2. Scrivere un programma che chieda un valore double di temperatura in gradi Fahrenheit e calcoli i valori delle corrispondenti temperature in gradi Celsius e Kelvin (entrambi con parte frazionaria). 5 C = ( F 32) 9 K = C Esercizi 3. Un oggetto che si muove ad una velocità v confrontabile con quella della luce c ( m/s) si accorcia (nel senso della direzione) e aumenta di massa di un fattore γ (minore di 1) pari a: v 1 c Si scriva un programma che chieda la lunghezza e la massa di un oggetto fermo e calcoli la variazione delle due grandezze a quella velocità (richiesta in input in km/sec) Esercizi 4. Si scriva un programma per calcolare la distanza in linea d aria tra due punti della superficie terrestre, note le coordinate geografiche. Il programma chiede i valori di latitudine (N-S) e di longitudine (E-O) in gradi dei due punti. Per calcolare la distanza si usi la seguente formula (le coordinate Nord e Est sono positive, Sud e Ovest negative). Si ricordi che le funzioni trigonometriche utilizzano i radianti. distanza = arccos( p1+p2+p3 ) * r 31 Esercizi (Continuazione) dove: r è il raggio medio della Terra: km p1 = cos(lat1 )*cos(lon1 )*cos(lat2 )*cos(lon2 ) p2 = cos(lat1 )*sin(lon1 )*cos(lat2 )*sin(lon2 ) p3 = sin(lat1 )*sin(lat2 ) essendo: lat1 lon1 lat2 lon2 latitudine in gradi del primo punto longitudine in gradi del primo punto latitudine in gradi del secondo punto longitudine in gradi del secondo punto N.B. La formula considera la terra sferica con raggio medio r : non essendolo, la formula dà un risultato con un errore massimo dello 0.5%. 32

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Informatica. Rappresentazione dei numeri Numerazione binaria

Informatica. Rappresentazione dei numeri Numerazione binaria Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Alcune regole di base per scrivere un programma in linguaggio C

Alcune regole di base per scrivere un programma in linguaggio C Alcune regole di base per scrivere un programma in linguaggio C Un programma il linguaggio C (listato) viene scritto in formato testo ed archiviato in un file: *.c Per scrivere un listato C si utilizza

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere Tipi elementari, costanti 1 Tipi di dati VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori Tipi Semplici intero reale carattere Strutturati 2 1 Tipo intero Gli interi servono

Dettagli

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Elettrica, e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

Esercizi di programmazione in C

Esercizi di programmazione in C Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal

Dettagli

Obiettivi dell Analisi Numerica. Avviso. Risoluzione numerica di un modello. Analisi Numerica e Calcolo Scientifico

Obiettivi dell Analisi Numerica. Avviso. Risoluzione numerica di un modello. Analisi Numerica e Calcolo Scientifico M. Annunziato, DIPMAT Università di Salerno - Queste note non sono esaustive ai fini del corso p. 3/43 M. Annunziato, DIPMAT Università di Salerno - Queste note non sono esaustive ai fini del corso p.

Dettagli

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Codifica: dal diagramma a blocchi al linguaggio C++

Codifica: dal diagramma a blocchi al linguaggio C++ Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Sistemi di Numerazione Binaria NB.1

Sistemi di Numerazione Binaria NB.1 Sistemi di Numerazione Binaria NB.1 Numeri e numerali Numero: entità astratta Numerale : stringa di caratteri che rappresenta un numero in un dato sistema di numerazione Lo stesso numero è rappresentato

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Tipi di dato-prima parte

Tipi di dato-prima parte Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Meccanica (A-K) Tipi di dato-prima parte Ing. Agnese Pinto 1 di 15 Tipi di dato Sommario Tipi di dato Classificazione dei tipi di dato Tipi

Dettagli

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009 Lab 02 Tipi semplici in C Obiettivo dell esercitazione Acquistare familiarità con i tipi di dato semplici supportati

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

SISTEMI DI NUMERAZIONE E CODICI

SISTEMI DI NUMERAZIONE E CODICI SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari Felice Iavernaro Dipartimento di Matematica Università di Bari http://dm.uniba.it/ iavernaro 6 Giugno 2007 Felice Iavernaro (Univ.

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno Parte II Indice Operazioni aritmetiche tra valori rappresentati in binario puro somma sottrazione Rappresentazione di numeri con segno modulo e segno complemento a 2 esercizi Operazioni aritmetiche tra

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Linguaggi e Paradigmi di Programmazione

Linguaggi e Paradigmi di Programmazione Linguaggi e Paradigmi di Programmazione Cos è un linguaggio Definizione 1 Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e compresi da una comunità di persone. È una

Dettagli

ESEMPIO 1: eseguire il complemento a 10 di 765

ESEMPIO 1: eseguire il complemento a 10 di 765 COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Esercitazione Informatica I AA 2012-2013. Nicola Paoletti

Esercitazione Informatica I AA 2012-2013. Nicola Paoletti Esercitazione Informatica I AA 2012-2013 Nicola Paoletti 4 Gigno 2013 2 Conversioni Effettuare le seguenti conversioni, tenendo conto del numero di bit con cui si rappresenta il numero da convertire/convertito.

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B 23.XI.2012 VINCENZO MARRA Indice Esercizio 1 1 Menu 1 Tempo: 35 min. 2 Commento 1 2 Esercizio 2 2 Ordinamento e ricerca binaria con la classe

Dettagli

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri 1 Da base 2 a base 10 I seguenti esercizi richiedono di convertire in base 10 la medesima stringa binaria codificata rispettivamente

Dettagli

Alessandro Pellegrini

Alessandro Pellegrini Esercitazione sulle Rappresentazioni Numeriche Esistono 1 tipi di persone al mondo: quelli che conoscono il codice binario e quelli che non lo conoscono Alessandro Pellegrini Cosa studiare prima Conversione

Dettagli

Logica e codifica binaria dell informazione

Logica e codifica binaria dell informazione Politecnico di Milano Corsi di Laurea in Ingegneria Matematica e Ingegneria Fisica Dipartimento di Elettronica ed Informazione Logica e codifica binaria dell informazione Anno Accademico 2002 2003 L. Muttoni

Dettagli

Programmare in Java. Olga Scotti

Programmare in Java. Olga Scotti Programmare in Java Olga Scotti Linguaggi di programmazione linguaggio macchina assembler linguaggi ad alto livello Linguaggi ad alto livello istruzioni comprensibili linguaggio simile a quello naturale

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Convertitori numerici in Excel

Convertitori numerici in Excel ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Introduzione. Informatica B. Daniele Loiacono

Introduzione. Informatica B. Daniele Loiacono Introduzione Informatica B Perchè studiare l informatica? Perchè ha a che fare con quasi tutto quello con cui abbiamo a che fare ogni giorno Perché è uno strumento fondamentale per progettare l innovazione

Dettagli

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Architettura del Calcolatore Macchina di von Neumann Il calcolatore moderno è basato su un architettura

Dettagli

Codifica binaria dei numeri

Codifica binaria dei numeri Codifica binaria dei numeri Caso più semplice: in modo posizionale (spesso detto codifica binaria tout court) Esempio con numero naturale: con 8 bit 39 = Codifica in virgola fissa dei numeri float: si

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi

Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via B. Castiglione 59-00142 Roma Docente Raffaele Nicolussi rnicolussi@fub.it Lezioni

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro, EXCEL PER WINDOWS95 1.Introduzione ai fogli elettronici I fogli elettronici sono delle applicazioni che permettono di sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE IL SISTEMA OPERATIVO Insieme di programmi che opera al di sopra della macchina fisica, mascherandone le caratteristiche e fornendo agli utenti funzionalità di alto livello. PROGRAMMI UTENTE INTERPRETE

Dettagli

Il Software e Il Sistema Operativo. Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10

Il Software e Il Sistema Operativo. Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10 Il Software e Il Sistema Operativo Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10 Cosa Impareremo Programmi e Processi Struttura del Sistema Operativo Sviluppo di Programmi I files e la loro

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Funzioni: Dichiarazione e Definizione La dichiarazione di una funzione serve a comunicare al compilatore quali sono

Dettagli

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA BOZZA 23/07/2008 INDICE 1. PERCHÉ UNA NUOVA VERSIONE DEI MODULI DI RACCOLTA DATI... 3 2. INDICAZIONI GENERALI... 4 2.1. Non modificare la struttura dei fogli di lavoro... 4 2.2. Cosa significano

Dettagli

Cosa è un foglio elettronico

Cosa è un foglio elettronico Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

Dettagli

Fogli Elettronici: MS Excel

Fogli Elettronici: MS Excel Fogli Elettronici: MS Excel Informatica - A.A. 2010/2011 - Excel 7.0 Foglio Elettronico Un foglio elettronico (o spreadsheet) è un software applicativo nato dall esigenza di: organizzare insiemi di dati

Dettagli

Informazione analogica e digitale

Informazione analogica e digitale L informazione L informazione si può: rappresentare elaborare gestire trasmettere reperire L informatica offre la possibilità di effettuare queste operazioni in modo automatico. Informazione analogica

Dettagli

NOZIONI BASE PER ESERCITAZIONI

NOZIONI BASE PER ESERCITAZIONI NOZIONI BASE PER ESERCITAZIONI Shahram Rahatlou Laboratorio di Calcolo, Anno Accademico 2015-16 http://www.roma1.infn.it/people/rahatlou/labcalc/ Sistema Operativo Hardware Software n Routine e programmi

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, 7155 2 = 1, 431 0, 431 2 = 0, 862 0, 896 2 = 1, 792 0, 724 2 = 1, 448 0, 448 2 = 0, 896

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, 7155 2 = 1, 431 0, 431 2 = 0, 862 0, 896 2 = 1, 792 0, 724 2 = 1, 448 0, 448 2 = 0, 896 2 Esercizio 2.2 La rappresentazione esadecimale prevede 16 configurazioni corrispondenti a 4 bit. Il contenuto di una parola di 16 bit può essere rappresentato direttamente con 4 digit esadecimali, sostituendo

Dettagli

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

PROVA INTRACORSO TRACCIA A Pagina 1 di 6 PROVA INTRACORSO DI ELEMENTI DI INFORMATICA MATRICOLA COGNOME E NOME TRACCIA A DOMANDA 1 Calcolare il risultato delle seguenti operazioni binarie tra numeri interi con segno rappresentati in complemento

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

5.3 TABELLE 5.3.1 RECORD 5.3.1.1 Inserire, eliminare record in una tabella Aggiungere record Eliminare record

5.3 TABELLE 5.3.1 RECORD 5.3.1.1 Inserire, eliminare record in una tabella Aggiungere record Eliminare record 5.3 TABELLE In un sistema di database relazionali le tabelle rappresentano la struttura di partenza, che resta poi fondamentale per tutte le fasi del lavoro di creazione e di gestione del database. 5.3.1

Dettagli

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

---------------------------------------------------------------- ---------------------------------------------------------------- utilizzo frequente di chiamate a.. A differenza del Pascal, il C permette di operare con assegnamenti e confronti su dati di tipo diverso,

Dettagli

Nozione di algoritmo. Gabriella Trucco

Nozione di algoritmo. Gabriella Trucco Nozione di algoritmo Gabriella Trucco Programmazione Attività con cui si predispone l'elaboratore ad eseguire un particolare insieme di azioni su particolari informazioni (dati), allo scopo di risolvere

Dettagli

La selezione binaria

La selezione binaria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per

Dettagli

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H Architettura dei calcolatori e sistemi operativi Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H Sommario Il processo di assemblaggio Il collegatore (linker) 2 Assemblatore: traduzione

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

MODULO 4: FOGLIO ELETTRONICO (EXCEL)

MODULO 4: FOGLIO ELETTRONICO (EXCEL) MODULO 4: FOGLIO ELETTRONICO (EXCEL) 1. Introduzione ai fogli elettronici I fogli elettronici sono delle applicazioni che permettono di sfruttare le potenzialità di calcolo dei Personal computer. Essi

Dettagli

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c Caratteristiche MATLAB Linguaggio di programmazione orientato all elaborazione di matrici (MATLAB=MATrix LABoratory) Le variabili sono matrici (una variabile scalare equivale ad una matrice di dimensione

Dettagli

Esame di Informatica CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO. Facoltà di Scienze Motorie

Esame di Informatica CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO CHE COS È UN FOGLIO ELETTRONICO. Facoltà di Scienze Motorie Facoltà di Scienze Motorie CHE COS È UN FOGLIO ELETTRONICO Una tabella che contiene parole e numeri che possono essere elaborati applicando formule matematiche e funzioni statistiche. Esame di Informatica

Dettagli

Alfabeto ed elementi lessicali del linguaggio C

Alfabeto ed elementi lessicali del linguaggio C Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2015-2016 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n

Dettagli

Corso di Calcolo Numerico

Corso di Calcolo Numerico Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Sistemi di Numerazione Sistema decimale La

Dettagli

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico 1996-1997

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico 1996-1997 1 RAPPRESENTAZIONE BINARIA DEI NUMERI Andrea Bobbio Anno Accademico 1996-1997 Numeri Binari 2 Sistemi di Numerazione Il valore di un numero può essere espresso con diverse rappresentazioni. non posizionali:

Dettagli

Informatica Generale 02 - Rappresentazione numeri razionali

Informatica Generale 02 - Rappresentazione numeri razionali Informatica Generale 02 - Rappresentazione numeri razionali Cosa vedremo: Rappresentazione binaria dei numeri razionali Rappresentazione in virgola fissa Rappresentazione in virgola mobile La rappresentazione

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO 1 Domanda [1 punto] Dato il formato in virgola mobile su 32 bit così definito (precisione singola): o 1

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica I tipi strutturati: gli array e le strutture Claudio De Stefano - Corso di Fondamenti di Informatica 1 arrays un array (o vettore) è una sequenza di oggetti dello stesso

Dettagli

FORMULE: Operatori matematici

FORMULE: Operatori matematici Formule e funzioni FORMULE Le formule sono necessarie per eseguire calcoli utilizzando i valori presenti nelle celle di un foglio di lavoro. Una formula inizia col segno uguale (=). La formula deve essere

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Introduzione al Foglio Elettronico

Introduzione al Foglio Elettronico Microsoft Excel Introduzione al Foglio Elettronico Il Foglio Elettronico Si presenta come una grande tabella su un foglio di carta Le celle contengono differenti dati Numeri Testo Date Ecc I dati possono

Dettagli

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello): Architettura (10/9003) Pag. 1/6 Esame di Architettura (matr.0-1) del 10/9003 Per Fondamenti di Architettura NON rispondere Per le domande a risposta multipla cerchiare la risposta scelta. Non alle domande

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

Il memory manager. Gestione della memoria centrale

Il memory manager. Gestione della memoria centrale Il memory manager Gestione della memoria centrale La memoria La memoria RAM è un vettore molto grande di WORD cioè celle elementari a 16bit, 32bit, 64bit (2Byte, 4Byte, 8Byte) o altre misure a seconda

Dettagli

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Lezione 1 Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Definizione di utente e di programmatore L utente è qualsiasi persona che usa il computer anche se non è in grado di programmarlo

Dettagli