Esercitazione n. 3. Linguaggio C base Tipi di dati

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esercitazione n. 3. Linguaggio C base Tipi di dati"

Transcript

1 Esercitazione n. 3 Linguaggio C base Tipi di dati Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.5 Italia

2 Linguaggio C: Ripasso... Fare riferimento alle dispense del docente... Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 2

3 C/1: Resto divisione tra interi Codice sorgente/1 /* Il programma calcola il resto di una divisione fra numeri interi. Input: dividendo e divisore Output: valore del resto Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 3

4 C/1: Resto divisione tra interi Codice sorgente/2 #include <stdio.h> main() { int dividendo, divisore, resto; printf ("Dividendo: "); scanf ("%d", &dividendo); printf ("Divisore: "); scanf ("%d", &divisore); resto = dividendo - (dividendo / divisore) * divisore; /* il simbolo '/', nel caso di divisione tra variabili di tipo 'int', rappresenta la divisione INTERA (per cui, per esempio, se 'dividendo' contiene il valore 9, e 'divisore' il valore 2, il risultato della divisione intera è 4. Vedremo che nel caso di variabili 'float' il simbolo '/' rappresenta la divisione tra reali. printf ("Resto: %d\n", resto); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 4

5 C/1: Resto divisione tra interi Codice eseguibile Come si rende eseguibile un programma C a partire dal codice sorgente? 1. Stesura del codice sorgente 2. Compilazione 3. Esecuzione Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 5

6 C/2: Verifica terna pitagorica Codice sorgente/1 /* Verifica se una terna di numeri è pitagorica (o, meglio, se i tre numeri in input corrispondono ai cateti e all'ipotenusa di un triangolo rettangolo). Input: valori dei cateti e dell'ipotenusa Output: messaggio che indica se la terna è pitagorica o no Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 6

7 C/2: Verifica terna pitagorica Codice sorgente/2 #include <stdio.h> main() { int c1, c2, ip; printf ("Misura del primo cateto: "); scanf ("%d", &c1); printf ("Misura del secondo cateto: "); scanf ("%d", &c2); printf ("Misura dell'ipotenusa: "); scanf ("%d", &ip); if (c1*c1+c2*c2 == ip*ip) { printf ("Il triangolo è rettangolo\n"); else { printf ("I valori inseriti non corrispondono a un triangolo rettangolo\n"); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 7

8 C/3: Verifica equidistanza Codice sorgente/1 /* Date le coordinate x e y di 3 punti, verificare se i punti 2 e 3 sono equidistanti dal punto 1 (quindi se i punti 2 e 3 si trovano su una circonferenza con centro nel punto 1). La verifica viene fatta controllando se i quadrati delle distanze 1-2 e 1-3 sono uguali. Input: coordinate x ed y dei 3 punti Output: messaggio che indica se i punti sono equidistanti oppure no Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 8

9 C/3: Verifica equidistanza Codice sorgente/2 #include <stdio.h> main() { float x1, y1, x2, y2, x3, y3; float distq12, distq13; c'è l'esigenza di gestire numeri reali printf ("Coordinata x del punto 1: "); scanf ("%f", &x1); printf ("Coordinata y del punto 1: "); scanf ("%f", &y1); printf ("Coordinata x del punto 2: "); scanf ("%f", &x2); printf ("Coordinata y del punto 2: "); scanf ("%f", &y2); printf ("Coordinata x del punto 3: "); scanf ("%f", &x3); printf ("Coordinata y del punto 3: "); scanf ("%f", &y3); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 9

10 C/3: Verifica equidistanza Codice sorgente/3 distq12 = (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); distq13 = (x1-x3)*(x1-x3)+(y1-y3)*(y1-y3); if (distq12 == distq13){ printf ("I punti 2 e 3 sono equidistanti da 1\n"); else { printf ("I punti 2 e 3 NON sono equidistanti da 1\n"); /* In realtà con il problema che i float sono comunque approssimazioni finite dei numeri reali, è meglio usare, nella condizione dell'if, una verifica di appartenenza a un intervallo, invece che l'uguaglianza semplice. Una condizione migliore quindi è if (distq12-distq13<tol && distq12-distq13>-tol) dove TOL sarà una costante definita all'inizio del file come, per esempio #define TOL Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 10

11 C/4: Calcolo circonferenza Codice sorgente/1 /* Dato il raggio di una circonferenza, calcolare il valore di circonferenza ed area. Input: raggio Output: circonferenza ed area Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 11

12 C/4: Calcolo circonferenza Codice sorgente/2 #include <stdio.h> main() { const double pi = ; c'è l'esigenza di gestire numeri reali in doppia precisione /* La costante potrebbe anche essere dichiarata con una define: #define PI però le due cose sono diverse. Da una parte ho una cella di memoria (pi) che contiene un valore, che però è costante, per cui se tento di fare pi = 4; a runtime (NON ALLA COMPILAZIONE) ho un errore. Dall'altra invece viene semplicemente effettuata, IN FASE DI COMPILAZIONE, una sostituzione tra l'identificatore PI ed il valore PI NON corrisponde a una cella di memoria, per cui se tento di fare PI = 4 ho un errore IN FASE DI COMPILAZIONE. (Nota: il fatto che abbia chiamato la cella di memoria costante con lettere minuscole (pi) ed invece l'identificatore usato nella define con lettere maiuscole è PURA CONVENZIONE, potevo fare l'inverso, o chiamarli entrambi alla stessa modo.) Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 12

13 C/4: Calcolo circonferenza Codice sorgente/3 double raggio, area, circonf; printf ("Raggio della circonferenza: "); scanf ("%lf", &raggio); circonf = 2*pi*raggio; area = pi*raggio*raggio; printf ("Circonferenza: %lf\narea: %lf\n", circonf, area); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 13

14 C/5: Calcolo potenza Codice sorgente/1 /* Data una base ed un esponente, calcolare base elevato ad esponente. Sia la base che l'esponente sono valori interi. Input: base, esponente (deve essere >0) Output: base elevato ad esponente Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 14

15 C/5: Calcolo potenza Codice sorgente/2 #include <stdio.h> main() { int base, esp, i, ris; printf ("Base: "); scanf ("%d", &base); printf ("Esponente (>0): "); scanf ("%d", &esp); if (esp < 0) { printf ("Errore: l'esponente deve essere > 0\n"); else { ris = 1; i = 0; while (i < esp) { ris = ris * base; i = i+1; printf ("Risultato base^esponente = %d\n", ris); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 15

16 C/5.1: Calcolo potenza (con for) Codice sorgente/1 /* data una base ed un esponente, calcolare base elevato ad esponente. Sia la base che l'esponente sono valori interi. Utilizzare la struttura di controllo for Input: base, esponente (deve essere >0) Output: base elevato ad esponente Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 16

17 C/5.1: Calcolo potenza (con for) Codice sorgente/2 /* A livello sintattico, il costrutto for è costituito da: - la parola chiave for seguita da - un coppia di () comprendente tre espressioni separate dal carattere ; (valore iniziale della variabile di conteggio, espressione booleana sulla variabile di conteggio, incremento della variabile di conteggio). Queste sono seguite da - una qualsiasi istruzione oppure una sequenza di istruzioni racchiuse tra { Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 17

18 C/5.1: Calcolo potenza (con for) Codice sorgente/3 #include <stdio.h> main() { int base, esp, i, ris; printf ("Base: "); scanf ("%d", &base); printf ("Esponente (>0): "); scanf ("%d", &esp); if (esp < 0){ printf ("Errore: l'esponente deve essere > 0\n"); else { ris = 1; /* Con l'uso del ciclo for invece del ciclo while for (i=0; i<esp ; i=i+1){ ris = ris * base; Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 18

19 C/5.1: Calcolo potenza (con for) Codice sorgente/4 /* Altri modi per scrivere i=i+1: i+=1 i++ (il valore viene prima utilizzato e poi incrementato) ++i (il valore viene prima incrementato e poi utilizzato) Quindi attenzione perchè i++ e ++i NON SONO la stessa cosa! In questo caso avrebbero lo stesso effetto, ma in altri no! Per esempio, potrei scrivere la condizione del while (e quindi lo statement di mezzo del for) come i++<esp questo è corretto, mentre la scrittura ++i<esp non lo è, crea confusione! Notate come scrivere while(i++<esp){ ris*=base; sia in effetti molto più compatto di quanto scritto prima, ma, in compenso, sia già meno leggibile. Altro modo per scrivere ris = ris * base: ris*=base Notare come il C può essere compatto (e quindi illeggibile!) Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 19

20 C/5.1: Calcolo potenza (con for) Codice sorgente/5 /* Forma classica per scrivere quel ciclo for: for (i=0 ; i<esp ; i++){... Domanda: cosa fa il ciclo while ();?????? E il ciclo for (;;);?????? printf ("Risultato base^esponente = %d\n", ris); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 20

21 C/6: Calcolo MCD con Euclide Codice sorgente/1 /* Il programma calcola il massimo comun divisore tra due numeri n1 e n2, usando l'algoritmo di Euclide. Il principio di funzionamento dell'algoritmo è il seguente: MCD(n1, n2) = n1 (o n2) se n1 = n2 MCD(n1, n2) = MCD(n1-n2, n2) se n1>n2 Nota: risolvere in autonomia la seconda proprietà discende da ciò: 1) se n1 > n2 e k è un divisore comune a n1 ed n2, allora k è anche un divisore di n1-n2. Infatti esistono degli interi positivi d ed r per cui n1=k*d e n2=k*r. Dunque n1-n2=k(d-r) con d-r>0 2) si può dimostrare che se k è divisore comune a n1-n2 e n2, k è anche divisore di n1 3) dunque tutti i divisori comuni di n1 e n2 coincidono con i divisori comuni di n1-n2 e n2; quindi anche i massimi divisori comuni tra le due coppie di numeri coincidono Input: numeri di cui calcolare il MCD Output: MCD dei numeri Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 21

22 C/6: Calcolo MCD con Euclide Codice sorgente/2 #include <stdio.h> main() { unsigned int n1, n2; printf ("Inserire il primo numero positivo: "); scanf ("%u", &n1); printf ("Inserire il secondo numero positivo: "); scanf ("%u", &n2); while (n1!= n2){ if (n1>n2){ n1 = n1 - n2; else { n2 = n2 - n1; printf ("Il massimo comun divisore e': %u\n", n1); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 22

23 C/7: Calcolo massimo di una sequenza Codice sorgente/1 Nota: risolvere in autonomia /* Data una sequenza di interi positivi, terminata dal valore 0, calcolare il massimo della sequenza. Input: sequenza di interi positivi Output: massimo della sequenza Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 23

24 C/7: Calcolo massimo di una sequenza Codice sorgente/2 #include <stdio.h> main() { unsigned int curr, max = 0; printf ("Inserire il prossimo numero positivo (0 per terminare): "); scanf ("%u", &curr); while (curr!= 0) { if (curr > max){ max = curr; printf ("Inserire il prossimo numero positivo (0 per terminare): "); scanf ("%u", &curr); printf ("Il numero massimo inserito e': %u\n", max); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 24

25 C/7.1: Calcolo massimo di una sequenza (do... while) Codice sorgente/1 Nota: risolvere in autonomia /* Data una sequenza di interi positivi, terminata dal valore 0, calcolare il massimo della sequenza. Utilizzare la struttura di controllo do... while Input: sequenza di interi positivi Output: massimo della sequenza Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 25

26 C/7.1: Calcolo massimo di una sequenza (do... while) Codice sorgente/2 /* La sintassi della struttura di controllo do... while è la seguente: - la parola chiave do, seguita da - una qualsiasi istruzione oppure una sequenza di istruzioni racchiuse tra {, seguita da - la parola chiave while seguita dall'espressione di verifica della condizione di uscita dal ciclo, racchiusa tra () Nota: a differenza di while e for, il ciclo interno viene eseguito almeno una volta Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 26

27 C/7.1: Calcolo massimo di una sequenza (do... while) Codice sorgente/3 #include <stdio.h> main() { unsigned int curr, max = 0; /* Questa è una versione più compatta del programma precedente. Poiché il ciclo di lettura DEVE essere eseguito almeno una volta, si può usare, invece del ciclo 'while' classico, la versione seguente: do... while do { printf ("Inserire il prossimo numero positivo (0 per terminare): "); scanf ("%u", &curr); if (curr > max){ max = curr; while (curr!= 0); printf ("Il numero massimo inserito e': %u\n", max); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 27

28 C/7.2: Calcolo massimo di una sequenza (anche numeri negativi) Codice sorgente/1 Nota: risolvere in autonomia /* Data una sequenza di interi (anche negativi), terminata dal valore 0, calcola il massimo della sequenza. Input: sequenza di interi (anche negativi) Output: massimo della sequenza Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 28

29 C/7.2: Calcolo massimo di una sequenza (anche numeri negativi) Codice sorgente/2 #include <stdio.h> #include <limits.h> main() { int curr, max = INT_MIN; /* In questo caso si sfrutta il fatto che gli int abbiano un limite inferiore per inizializzare la variabile 'max', quindi si possono utilizzare gli interi invece degli unsigned. Notare che se il primo numero che viene inserito è lo 0 allora viene stampato il valore di INT_MIN. printf ("Inserire il prossimo numero (0 per terminare): "); scanf ("%d", &curr); while (curr!= 0) { if (curr > max) { max = curr; printf ("Inserire il prossimo numero (0 per terminare): "); scanf ("%d", &curr); printf ("Il numero massimo inserito è: %d\n", max); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 29

30 C (e altri linguaggi): Sicurezza /1 Se occorre costruire una recinzione di 100 metri con paletti di sostegno distanziati di 10 metri, quanti paletti sono necessari? 10? 11! Tipico errore off-by-one Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 30

31 C (e altri linguaggi): Sicurezza /2 Nel marzo del 2002 il cosiddetto OpenSSH Channel Code Off by One Privilege Escalation mette in serio pericolo i server connessi in rete che utilizzano OpenSSH (dalla versione 2.0 alla versione 3.0.2) permettendo a qualsiasi utente remoto di essere autenticato come amministratore. Il codice includeva la seguente istruzione: if (id < 0 id > channels_alloc) che avrebbe dovuto essere: if (id < 0 id >= channels_alloc) Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 31

32 Tipi di dati del linguaggio C: Ripasso... Sono già stati utilizzati alcuni tipi di dati del linguaggio C int (unsigned int): per rappresentare numeri interi float: per rappresentare numeri reali double: per rappresentare numeri reali in precisione doppia Introduciamo un nuovo tipo di dato semplice: char: per rappresentare i caratteri alfanumerici (lettere, numeri e una serie di simboli) Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 32

33 Nota: il codice ASCII 032 0x x x50 P 104 0x68 h 033 0x21! 057 0x x51 Q 105 0x69 i 034 0x22 " 058 0x3a : 082 0x52 R 106 0x6a j 035 0x23 # 059 0x3b ; 083 0x53 S 107 0x6b k 036 0x24 $ 060 0x3c < 084 0x54 T 108 0x6c l 037 0x25 % 061 0x3d = 085 0x55 U 109 0x6d m 038 0x26 & 062 0x3e > 086 0x56 V 110 0x6e n 039 0x27 ' 063 0x3f? 087 0x57 W 111 0x6f o 040 0x28 ( x58 X 112 0x70 p 041 0x29 ) 065 0x41 A 089 0x59 Y 113 0x71 q 042 0x2a * 066 0x42 B 090 0x5a Z 114 0x72 r 043 0x2b x43 C 091 0x5b [ 115 0x73 s 044 0x2c, 068 0x44 D 092 0x5c \ 116 0x74 t 045 0x2d x45 E 093 0x5d ] 117 0x75 u 046 0x2e x46 F 094 0x5e ^ 118 0x76 v 047 0x2f / 071 0x47 G 095 0x5f _ 119 0x77 w 048 0x x48 H 096 0x60 ` 120 0x78 x 049 0x x49 I 097 0x61 a 121 0x79 y 050 0x x4a J 098 0x62 b 122 0x7a z 051 0x x4b K 099 0x63 c 123 0x7b { 052 0x x4c L 100 0x64 d 124 0x7c 053 0x x4d M 101 0x65 e 125 0x7d 054 0x x4e N 102 0x66 f 126 0x7e ~ 055 0x x4f O 103 0x67 g Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 33

34 C/8: crittografia - Problema Si vuole realizzare un programma che dato un carattere in ingresso, lo trasforma in un altro carattere, che si trova OFFSET posizioni più avanti nell'alfabeto (per esempio con OFFSET = 4, il carattere 'a' diventa 'e'). E' il cifrario di Cesare Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 34

35 C/8: crittografia Codice sorgente/1 /* Dato un carattere in ingresso, lo trasforma in un altro carattere, che si trova OFFSET posizioni più avanti nell'alfabeto (per esempio con OFFSET = 4, il carattere 'a' diventa 'e'). L'alfabeto considerato è: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz Per esempio, con OFFSET = 4, la lettera 'X' diventa 'b'. La complessità del programma sta nel fatto che nella codifica ASCII le sequenze 'A'..'Z' e 'a'..'z' (viene prima la sequenza di caratteri maiuscoli) non sono consecutive, ma tra loro c'è un altro insieme di caratteri, per cui occorre spezzare il programma in 2 if. Input: un carattere da convertire Output: il carattere convertito Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 35

36 C/8: crittografia Codice sorgente/2 #include <stdio.h> #define OFFSET 4 main() { char curr, new; printf ("Inserisci il carattere alfabetico da convertire: "); scanf ("%c", &curr); if (curr >= 'A' && curr <= 'Z') { new = curr + OFFSET; if (new > 'Z') { new = 'a' + (new - 'Z'-1); printf ("Il nuovo carattere dopo la conversione è: %c\n", new); else if (curr >= 'a' && curr <= 'z') { new = curr + OFFSET; if (new > 'z') { new = 'A' + (new - 'z'-1); printf ("Il nuovo carattere dopo la conversione è: %c\n", new); else { printf ("Non è stato immesso un carattere valido\n"); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 36

37 C/8.1: crittografia (do... while) - Problema Si vuole realizzare una variante al programma precedente in grado di continuare l'esecuzione dell'algoritmo finché vengono inseriti caratteri (la conversione viene comunque fatta un carattere alla volta). L'uscita dal programma è prevista nel caso venga inserito un carattere al di fuori dell'alfabeto dei caratteri consentiti per la conversione. Utilizzare la struttura di controllo do... while. Nota: esercizio da svolgere in aula Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 37

38 C/8.1: crittografia (do... while) Codice sorgente/1 /* Dato un carattere in ingresso, lo trasforma in un altro carattere, che si trova OFFSET posizioni più avanti nell'alfabeto (per esempio con OFFSET = 4, il carattere 'a' diventa 'e'). A differenza del precedente, questa versione del programma si basa su un ciclo do..while, per cui è possibile inserire (uno alla volta) più caratteri da convertire. Per uscire dal ciclo è sufficiente digitare un carattere non alfabetico (per esempio '1', o '%', o anche lo spazio). L'alfabeto considerato e': ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz Per esempio, con OFFSET = 4, la lettera 'X' diventa 'b'. La complessità del programma sta nel fatto che nella codifica ASCII le sequenze 'A'..'Z' e 'a'..'z' (viene prima la sequenza di caratteri maiuscoli) non sono consecutive, ma tra loro c'è un altro insieme di caratteri, per cui occorre spezzare il programma in 2 if. Input: un sequenza di caratteri da convertire Output: i caratteri convertiti Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 38

39 C/8.1: crittografia (do... while) Codice sorgente/2 #include <stdio.h> #define OFFSET 4 main() { char curr, new; do { printf ("Inserisci il carattere alfabetico da convertire: "); scanf ("%c%*c", &curr); /* Perché il programma funzioni correttamente è cruciale il codice '%*c' nella stringa della scanf. La combinazione "%c%*c" obbliga la scanf a leggere 2 caratteri in input, di cui però solo il primo viene memorizzato (in questo caso nella variabile 'curr'), mentre il secondo (il carattere di 'a capo') viene eliminato. Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 39

40 C/8.1: crittografia (do... while) Codice sorgente/3 if (curr >= 'A' && curr <= 'Z') { new = curr + OFFSET; if (new > 'Z') { new = 'a' + (new - 'Z'-1); printf ("Il nuovo carattere dopo la conversione è: %c\n", new); else if (curr >= 'a' && curr <= 'z') { new = curr + OFFSET; if (new > 'z') { new = 'A' + (new - 'z'-1); printf ("Il nuovo carattere dopo la conversione è: %c\n", new); while ((curr >= 'A' && curr <= 'Z') (curr >= 'a' && curr <= 'z')); Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 40

41 C linguaggi in generale: considerazioni La codifica dei caratteri riveste un ruolo fondamentale nelle applicazioni dell'informatica, soprattutto ora che Internet collega buona parte dei PC presenti nel mondo! Es: Approfondimento: codifica UNICODE Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini 41

42 C linguaggi in generale: buona formattazione? #include <ncurses.h>/**************************************************** int m[256 ] [ 256 ],a,b ;;; ;;; WINDOW*w; char*l="" "\176qxl" "q" "q" "k" "w\ xm" "x" "t" "j" "v" "u" "n",q[ ]= "Z" "pt!ftd`" "qdc!`eu" "dq!$c!nnwf"/** *** "t\040\t";c( int u, int v){ v?m [u] [v- 1] =2,m[u][v-1] & 48?W][v-1 ] & 15]]):0:0;u?m[u -1][v] =1,m[ u- 1][ v]& 48? W-1 ][v ]& 15] ]):0:0;v< 255?m[ u][v+1] =8,m[u][v+1]& 48? W][ v+1]&15]] ):0 :0; u < 255?m[ u+1 ][v ] = 4,m[u+1][ v]&48?w+1][v]&15]]):0:0;w][ v]& 15] ]);cu(char*q){ return *q?cu (q+ 1)& 1?q [0] ++: q[0 ]-- :1; d( int u, int/*v, int/*x, int y){ int Y=y -v, X=x -u; int S,s ;Y< 0?Y =-Y,s, s=- 1:( s=1);x<0?x=-x,s =-1 :(S= 1); Y<<= 1;X<<=1; if(x>y){ int f=y -(X >>1 );; while(u!= x){ f>= 0?v+=s,f-=X:0;u +=S ;f+= Y;m[u][v] =32;mvwaddch(w,v,u, m[u ][ v]& 64? 60: 46) ;if (m[ u][ v]&16){c(u,v);; ;;; ;;; return; else{int f=x -(Y>>1);; while (v!=y ){f >=0?u +=S, f-= Y:0 ;v +=s ;f+=x;m[u][v] = 32;mvwaddch(w,v,u,m[u][v]&64?60:46);if(m[u ][ v]& 16) {c( u,v ); ; return;;;z( int/*a, int b){ e( int/*y,int/* x){ int i ; for (i= a;i <=a +S;i++)d(y,x,i,b),d(y,x,i,b+L);for(i=b;i<=b+L;i++)d(y,x,a,i),d(y,x,a+ S,i ); ;;; ;;; ;;; ;;; ; mvwaddch(w,x,y,64); ;;; ;;; ;;; prefresh( w,b,a,0,0,l- 1,S-1 ); main( int V, char *C[ ] ){FILE*f= fopen(v==1?"arachnid.c"/* :C[ 1],"r");int/*x,y,c, v=0 ;;; initscr (); Z(Z (raw (),Z( curs_set(0),z(1,noecho()))),keypad( stdscr,true));w =newpad ( 300, 300 ) ; for (x= 255 ; x >=0 ;x-- ) for (y= 255 ;y>=0;y-- )m[ x][ y]= 0;x=y=0;refresh( );while ( (c= fgetc (f) )+1) {if( 0 c==10 x== 256){x=0;y++;if(y==256 )break;; else{m[x][y]=(c == '~'?64 : c ==32?0: 16) ;;x ++; for(x=0 ;x< 256;x++)m [x][0]=16,m[ x][ 255]=16;for(y=0 ;y< 256 ; y ++) m[0 ][y ] = 16, m[255][y] =16 ;a=b=c=0; x=y =1; do{v++;mvwaddch (w, y,x,m[ x][ y]& 32? m[x ][y ] & 16? 0 acs_map[l[m[x][y]&15]]:46 : 32);c==0163&&!(m[x][y+1]&16)?y++: 0;c == 119 &&! (m[ x][ y- 1]& 16)?y--:0;;c ==97 &&!(m[x-1][y]&16)?x--:0;c==100&&!(m[x+1 ][ y]& 16)? x ++:0 ;if( c== ){endwin( );; return(0) ;x -a<5?a>s- 5?a-=S-5:(a=0): 0;x -a> S-5?a<255 -S* 2?a +=S -5:(a=256-S):0; y-b<5?b>l-5?b-=l-5:(b =0) :0; y-b>l-5?b<255-l *2? b+= L-5 :(b =256 -L) :0;e(x,y);if(m[x][y]&64)break;while((c=getch())!=-1);endwin();cu(Q); printf(q,v); Che cosa è? arachnid The International Obfuscated C Code Contest Esercitazioni di Fondamenti di Informatica Politecnico di Milano sede di Cremona A.A. 2010/2011 Carlo Todeschini tode@cremona.polimi.it 42

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente. HOMEWORKS Questi esercizi saranno proposti di tanto in tanto e forniti sempre SENZA soluzioni. Come materiale complementare ai libri di testo e alle lezioni frontali e di esercitazione, si consiglia di

Dettagli

a.a Codice corso: 21012, HOMEWORKS

a.a Codice corso: 21012, HOMEWORKS HOMEWORKS Questi esercizi saranno proposti ogni 2 settimane e forniti sempre SENZA soluzioni. Come materiale complementare ai libri di testo e alle lezioni frontali e di esercitazione, si consiglia di

Dettagli

Dichiarazioni e tipi predefiniti nel linguaggio C

Dichiarazioni e tipi predefiniti nel linguaggio C Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo. Premessa Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori:

Dettagli

Tipi di dato semplici

Tipi di dato semplici Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma

Dettagli

Struttura dei programmi C

Struttura dei programmi C Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte

Dettagli

Introduzione alla programmazione in linguaggio C

Introduzione alla programmazione in linguaggio C Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008

Dettagli

Lab 04 Programmazione Strutturata"

Lab 04 Programmazione Strutturata Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 04 Programmazione Strutturata" Lab04 1 Valutazione in cortocircuito (1)" In C, le espressioni booleane sono valutate

Dettagli

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1 Fondamenti di Informatica T1 Lab 03 Istruzioni Lab03 1 Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Lab03 2 #include main()

Dettagli

Esercizi. La funzione swapint() primo tentativo

Esercizi. La funzione swapint() primo tentativo Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include

Dettagli

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. #include Esercizio 1 - Soluzione int main() int num1, num2, num3, somma; float

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch Esercitazione 5 Procedure e Funzioni Il comando condizionale: switch Comando: switch-case switch (espressione) { /* espressione deve essere case costante1: istruzione1 di tipo int o char */ [break]; case

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

Esercizio 1" input tre numeri interi e stampi a video la loro somma e la media. n Realizzare un programma che legga da. Lab03 2

Esercizio 1 input tre numeri interi e stampi a video la loro somma e la media. n Realizzare un programma che legga da. Lab03 2 Fondamenti di Informatica e Laboratorio T-AB e Fondamenti di Informatica T1 Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2011/2012 Lab 03 Istruzioni" Lab03 1 Esercizio

Dettagli

Tipi di dato semplici

Tipi di dato semplici Tipi di dato semplici Informatica B Tipi di dati q In C esistono diversi tipi di dato built-in, tra cui int: numeri interi float: numeri con virgola (singola precisione) double : numeri con virgola (doppia

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del

Dettagli

Fondamenti di Informatica. Ingegneria elettronica

Fondamenti di Informatica. Ingegneria elettronica Fondamenti di Informatica Ingegneria elettronica Prima esercitazione Cecilia Catalano Sistema Operativo Il S.O. è costituito da un insieme di programmi che permettono di utilizzare e gestire tutte le risorse

Dettagli

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C e diagrammi a blocchi. Preparazione prima prova intermedia

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C e diagrammi a blocchi. Preparazione prima prova intermedia Informatica A (per gestionali) A.A. 2004/2005 Esercizi C e diagrammi a blocchi Preparazione prima prova intermedia Indice 1 Array... 3 1.1 Filtraggio...3 1.2 Trasformazione...3 2 Struct e array... 5 2.1

Dettagli

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1 Fondamenti di Informatica T1 Lab 03 Istruzioni Lab03 1 Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Lab03 2 scanf: STRINGA DI FORMATO

Dettagli

Lab 03 Istruzioni Prima Parte"

Lab 03 Istruzioni Prima Parte Fondamenti di Informatica e Laboratorio T-AB e Fondamenti di Informatica T1 Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione Lab 03 Istruzioni Prima Parte" Lab03 1 Esercizio 1"

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione al C. Lez. 1 Elementi. Rossano Venturini Introduzione al C Lez. 1 Elementi Rossano Venturini rossano@di.unipi.it Pagine del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start http://algoritmica.spox.spoj.pl/alglab2013 Lezioni

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 Obiettivi di questa lezione 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Valutazione in cortocircuito In C, le espressioni booleane sono

Dettagli

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

I cicli. Iterazioni Calcolo della media Istruzioni break e continue I cicli Iterazioni Calcolo della media Istruzioni break e continue Ciclo while p Vero A while() ; Falso Esegue una istruzione mentre una condizione è verificata Programmazione

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi

Dettagli

Lab 04 (parte A) Programmazione Strutturata

Lab 04 (parte A) Programmazione Strutturata Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 04 (parte A) Programmazione Strutturata Lab04 1 Valutazione in cortocircuito (1) In C, le espressioni booleane

Dettagli

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,

Dettagli

Esempi comparati while, do...while

Esempi comparati while, do...while Esempi comparati while, do...while Algoritmo. - inizializza Somma a zero - finchè la risposta è "continuazione" - visualizza messaggio - acquisisci un numero I - aggiungi I a Somma - domanda se continuare

Dettagli

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi MASTER Information Technology Excellence Road (I.T.E.R.) Programmare in C Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di Dati Valori Un insieme

Dettagli

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso Introduzione al C Lezione 1 Elementi Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso C Mercoledì 19 Giovedì

Dettagli

L AMBIENTE CODE BLOCKS E L IO

L AMBIENTE CODE BLOCKS E L IO L AMBIENTE CODE BLOCKS E L IO Il primo programma #include main() { printf("ciao Mondo!"); } Il file deve essere salvato con estensione.c Il primo programma in C++ #include using

Dettagli

Introduzione al linguaggio C Primi programmi

Introduzione al linguaggio C Primi programmi Introduzione al linguaggio C Primi programmi Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio I/O da tastiera + costrutti while e if Alessandra Giordani agiordani@disi.unitn.it Lunedì 2 maggio 2011 http://disi.unitn.it/~agiordani/ Ripasso funzione printf() Usata per stampare il contenuto di una

Dettagli

Programmazione C Massimo Callisto De Donato

Programmazione C Massimo Callisto De Donato 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

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2018 2019 20.III.2019 VINCENZO MARRA Indice Parte 1. L algoritmo euclideo 3 Esercizio 1 3 L algoritmo euclideo

Dettagli

del Linguaggio C Istruzioni di iterazione

del Linguaggio C Istruzioni di iterazione Istruzioni i Iterative ti del Linguaggio C Istruzioni di iterazione Le istruzioni di iterazione forniscono strutture di controllo che esprimono la necessità di ripetere una certa istruzione durante il

Dettagli

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Dettagli

Tutorato Elementi di Informatica 2018

Tutorato Elementi di Informatica 2018 Università degli Studi di Cagliari Pattern Recognition & Application Lab Dipartimento di Ingegneria Elettrica ed Elettronica Tutorato Elementi di Informatica 2018 Esercitazione 2 Introduzione e Tipi di

Dettagli

Struttura di un. Struttura dei programmi C

Struttura di un. Struttura dei programmi C Parte 4 Struttura di un Programma Struttura dei programmi C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume in un file): 1. Una parte contenente direttive

Dettagli

Strutture di Controllo Iterative: Istruzione FOR

Strutture di Controllo Iterative: Istruzione FOR Linguaggio C Strutture di Controllo Iterative: Istruzione FOR 1 Istruzioni iterative n Anche dette cicli n Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo) n Ad ogni iterazione del

Dettagli

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione Primi esempi di programmi Il tipo int Le variabili Altri tipi interi Operatori di assegnazione Il tipo int Un int permette di trattare numeri interi 4 byte (32 bit) con la tecnica del complemento a 2 (ma

Dettagli

Corso sul linguaggio C

Corso sul linguaggio C Corso sul linguaggio C Modulo 1 1.1 Istruzioni semplici 1 Prerequisiti Saper progettare algoritmi Saper descrivere algoritmi (NLS, ddf) Conoscere il concetto di espressione 2 1 Introduzione In questa lezione

Dettagli

Strutture di Controllo Iterative: Istruzione FOR

Strutture di Controllo Iterative: Istruzione FOR Linguaggio C Strutture di Controllo Iterative: Istruzione FOR 1 Istruzioni iterative! Anche dette cicli! Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo)! Ad ogni iterazione del

Dettagli

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice:

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice: Corso di Ingegneria Biomedica Corso di Ingegneria Elettronica Insegnamento di Informatica I a.a. 2007-08 Laboratorio 1 Durante le esercitazioni verra utilizzato il compilatore a riga di comando DJGPP,,

Dettagli

Lezione 22: Input/Output e Files

Lezione 22: Input/Output e Files Lezione 22: Input/Output e Files Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università di Salerno Struttura della lezione Esami: date e modalità Funzioni di libreria standard

Dettagli

Corso sul linguaggio C Modulo Tipi di dato

Corso sul linguaggio C Modulo Tipi di dato Corso sul linguaggio C Modulo 1 1.3 - Tipi di dato 1 Prerequisiti Concetto di espressione Cenni sulla struttura del calcolatore 2 1 Introduzione In questa lezione si esaminano i tipi di dato. I tipi di

Dettagli

Esercizi. Filtraggio

Esercizi. Filtraggio Politecnico di Milano Esercizi Preparazione alla prima prova intermedia Filtraggio L utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)

Dettagli

Fondamenti di Informatica L-A. Esercitazione 2

Fondamenti di Informatica L-A. Esercitazione 2 Fondamenti di Informatica L-A Esercitazione 2 Variabili ed Espressioni: Dichiarazione, Coercizione, Overloading, Overflow, Underflow, Divide by Zero e Casting. Input-Output: printf e scanf. Paolo Torroni

Dettagli

1

1 Manuali di C Linguaggio C B. W. Kernigan, D. M. Ritchie Jackson La guida completa al C H. Schildt McGraw-Hill Fondamenti di Informatica 1 Linguaggio C Creato nei primi anni 70 per sviluppare il S.O. Unix

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione al C. Lez. 1 Elementi. Rossano Venturini Introduzione al C Lez. 1 Elementi Rossano Venturini rossano.venturini@isti.cnr.it URL del corso http://www.cli.di.unipi.it/doku/doku.php/informatica/all-b/start Lezioni - Lunedì 16-18 Aula M - Martedì

Dettagli

Introduzione alla programmazione. Alice Pavarani

Introduzione alla programmazione. Alice Pavarani Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello

Dettagli

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C. Strutture di controllo

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C. Strutture di controllo Informatica A (per gestionali) A.A. 2004/2005 Esercizi C Strutture di controllo 1 Indice 1 Strutture di controllo...3 1.1 Multiplo...3 1.2 Massimo Comun Divisore...3 1.3 Valutazione triangolo...4 1.4 Calcolatrice...5

Dettagli

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Aspetti fondamentali della programmazione (con riferimento al linguaggio C e C++)

Aspetti fondamentali della programmazione (con riferimento al linguaggio C e C++) Aspetti fondamentali della programmazione (con riferimento al linguaggio C e C++) 1 Codifica degli algoritmi algoritmo formulato per essere eseguito automaticamente preciso ed eseguibile linguaggio macchina

Dettagli

Nuovi tipi di dato e. Alessandra Giordani Lunedì 26 marzo

Nuovi tipi di dato e. Alessandra Giordani Lunedì 26 marzo Nuovi tipi di dato e costrutto condizionale Alessandra Giordani agiordani@disi.unitn.it Lunedì 26 marzo 2012 http://disi.unitn.it/~agiordani/ Tipi di dato fondamentali int e il tipo di dato che consente

Dettagli

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010 Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol. Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione prof. Lorenzo Porcelli e mail: genna18@iol.it sito: users.iol.it/genna18 Risoluzione di un problema Dato

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 5 31/10/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University

Dettagli

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 18.III.2015 VINCENZO MARRA Indice Parte 1. L algoritmo euclideo 3 Esercizio 1 3 L algoritmo euclideo

Dettagli

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 Obiettivi di questa lezione 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Valutazione in cortocircuito In C, le espressioni booleane sono

Dettagli

ciclo di vita della soluzione (informatica) di un problema

ciclo di vita della soluzione (informatica) di un problema Università di Roma Tor Vergata L2-1 ciclo di vita della soluzione (informatica) di un problema errori run-time errori sintattici codice editor codice C++ compilatore esegui eseguibile OK risultati scorretti

Dettagli

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin Linguaggio C Tipi predefiniti Università degli Studi di Brescia Prof. Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Il concetto di tipo (reprise) Nome che indica

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147-00161 Roma Università degli Studi La Sapienza Fondamenti di

Dettagli

Qualsiasi programma in C++ segue lo schema:

Qualsiasi programma in C++ segue lo schema: Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni

Dettagli

Parte Input e output in linguaggio i C. 3. Programmazione strutturata 1 (if, switch, comunque segnalare dei warning

Parte Input e output in linguaggio i C. 3. Programmazione strutturata 1 (if, switch, comunque segnalare dei warning Obiettivi di questa esercitazione Fondamenti di Informatica T-1 Parte 2 Laboratorio 01 1. Input e output in linguaggio i C 2. Espressioni 3. Programmazione strutturata 1 (if, switch, do while) 1 2 Warning

Dettagli

Codifica dell informazione

Codifica dell informazione Codifica dell informazione Informatica B Come memorizzo l informazione nel calcolatore? 1 bit di informazione 1 bit di informazione La memoria del calcolatore L informazione nel calcolatore q Il calcolatore

Dettagli

Ingresso ed Uscita in C. Informatica 1 / 15

Ingresso ed Uscita in C. Informatica 1 / 15 Ingresso ed Uscita in C Informatica 1 / 15 Input e Output in C Linguaggio C: progettato per essere semplice e con poche istruzioni Non esistono istruzioni di ingresso / uscita (I/O)!!! Ingresso ed uscita

Dettagli

Strutture di Controllo Iterative: Istruzioni While e Do

Strutture di Controllo Iterative: Istruzioni While e Do Linguaggio C Strutture di Controllo Iterative: Istruzioni While e Do 1 Istruzioni iterative! Anche dette cicli! Prevedono l esecuzione ripetitiva di altre istruzioni (corpo del ciclo)! Ad ogni iterazione

Dettagli

La Programmazione. Cos è la programmazione? Concetti preliminari

La Programmazione. Cos è la programmazione? Concetti preliminari La Programmazione Cos è la programmazione? Concetti preliminari 1 Sommario La programmazione, questa sconosciuta Programmiamo Macchine Astratte Linguaggi di basso e alto livello e loro implementazione

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione 1 C-Introduzione.tex: Versione 1.0, aa 2005-2006 Linguaggi di programmazione (1) Sono linguaggi che permettono la codifica di algoritmi in modo da renderli eseguibili, direttamente

Dettagli

Esercitazione n. 7. Gestione dei file (seconda parte)

Esercitazione n. 7. Gestione dei file (seconda parte) Esercitazione n. 7 Gestione dei file (seconda parte) dott. Carlo Todeschini tode@cremona.polimi.it Politecnico di Milano A.A. 2010/2011 Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non

Dettagli

Introduzione al C. Lez. 1 Elementi

Introduzione al C. Lez. 1 Elementi Introduzione al C Lez. 1 Elementi Introduzione al C Strumento che adotteremo in queste esercitazioni per implementare e testare gli algoritmi visti a lezione Configurazione minimale suggerita: Editing

Dettagli

Esercizi Programmazione I

Esercizi Programmazione I Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Ingegneria Meccanica Esercitazione 3, 23 ottobre 2007 versione 3 novembre 2007 Limiti per tipi int #include rende visibili le costanti simboliche SHRT_MIN, SHRT_MAX,

Dettagli

Programmazione in C. La struttura del programma Variabili, espressioni, operazioni

Programmazione in C. La struttura del programma Variabili, espressioni, operazioni Programmazione in C La struttura del programma Variabili, espressioni, operazioni Struttura del programma // Area quadrato circoscritto // circonferenza /* Author: Lorenzo Course: info */ #include

Dettagli

Laboratorio di informatica Ingegneria meccanica

Laboratorio di informatica Ingegneria meccanica Laboratorio di informatica Ingegneria meccanica Esercitazione 8 21 Novembre 2007 Funzioni in C Un programma C si compone di funzioni E' disponibile una collezione predefinita di funzioni che possono essere

Dettagli

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt); Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i

Dettagli

Fondamenti di Informatica L-A

Fondamenti di Informatica L-A Fondamenti di Informatica L-A Esercitazione del 30/10/07 Ing. Giorgio Villani Ripasso Teoria Ciclo do while do {istruzioni while(espressione); int i; do { printf( Scegli un numero tra 1 e 3 ); scanf( %d,

Dettagli

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono l algoritmo Cominciamo ad analizzare la

Dettagli

Informatica 2 modulo C Massimo Callisto De Donato

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

Dettagli

7. Strutture di controllo

7. Strutture di controllo Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Gestionale (L-Z) 7. Ing. Michele Ruta 1 di 17 Indice Istruzioni di selezione Mappate dal costrutto switch Istruzioni cicliche (di iterazione)

Dettagli

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010 Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Alcuni esercizi 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Stampa di voti Esempio 1 (switch) Realizzare un programma che legge da input un voto (carattere tra A ed E ) e ne

Dettagli

Tipi strutturati in C. Stringhe

Tipi strutturati in C. Stringhe Tipi strutturati in C Stringhe Stringhe Una stringa di caratteri in C è un array di caratteri terminato dal carattere \0 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1 caratteri,

Dettagli

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione. Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 13 Novembre 2012 COGNOME E NOME RIGA COLONNA MATRICOLA Spazio riservato ai docenti Il presente plico contiene

Dettagli

Esercitazione 4. Comandi iterativi for, while, do-while

Esercitazione 4. Comandi iterativi for, while, do-while Esercitazione 4 Comandi iterativi for, while, do-while Comando for for (istr1; cond; istr2) istr3; Le istruzioni vengono eseguite nel seguente ordine: 1) esegui istr1 2) se cond è vera vai al passo 3 altrimenti

Dettagli

Primi programmi in C

Primi programmi in C Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Uso del compilatore gcc Struttura di un programma

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica CdL in Matematica e CdL in Matematica per le Applicazioni Prof. G. Nicosia Dipartimento di Matematica e Informatica Facoltà di Scienze MM.FF.NN. Università degli Studi di Catania A.

Dettagli

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione. Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 13 Novembre 2012 COGNOME E NOME RIGA COLONNA MATRICOLA Spazio riservato ai docenti Il presente plico contiene

Dettagli

Corso Programmazione

Corso Programmazione Corso Programmazione 2009-2010 (docente) E-mail: aiolli@math.unipd.it Web: www.math.unipd.it/~aiolli Dipartimento di Matematica Pura ed Applicata Torre Archimede, Via Trieste 63 PARTE 3 2 Variabili Le

Dettagli

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17 Introduzione al C Informatica Generale - Introduzione al C Versione 1.0, aa 2005-2006 p.1/17 Linguaggi di programmazione Sono linguaggi che permettono la codifica di algoritmi in modo da renderli eseguibili,

Dettagli

Sistemi di sviluppo integrati

Sistemi di sviluppo integrati Elementi di Informatica e Programmazione Ingegneria Informatica Ingegneria dell'automazione Industriale Ingegneria Elettronica e delle Telecomunicazioni Alessandro Saetti (email: alessandro.saetti@unibs.it)

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 3: Istruzioni ed operatori booleani. Vittorio Scarano Corso di Laurea in Informatica Università di Salerno Soluzioni agli esercizi Istruzioni (statement) semplici e di controllo

Dettagli