29
N ozioni base di pr ogr ammazione N ozioni base di pr ogr ammazione in linguaggio C in linguaggio C Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Informatica A - Cugola 2 Codifica degli algoritmi Codifica degli algoritmi Algoritmo formulato per essere eseguito automaticamente Preciso ed eseguibile Linguaggio macchina linguaggio di programmazione di alto livello Formulato per essere comunicato tra esseri umani Sintetico e intuitivo Linguaggio naturale

Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

  • Upload
    lehuong

  • View
    217

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Nozioni base di programmazione Nozioni base di programmazione in linguaggio Cin linguaggio C

Politecnico di MilanoSede di Cremona

Gianpaolo CugolaDipartimento di Elettronica e Informazione

[email protected]://www.elet.polimi.it/~cugola

Informatica A - Cugola 2

Codifica degli algoritmiCodifica degli algoritmi

• Algoritmo formulato per essere eseguito automaticamente– Preciso ed eseguibile

• Linguaggio macchina � �

linguaggio di programmazione di alto livello

• Formulato per essere comunicato tra esseri umani – Sintetico e intuitivo

• Linguaggio naturale

Page 2: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 3

C: differenze rispetto al linguaggio C: differenze rispetto al linguaggio macchinamacchina

• Elementi del programma (celle di memoria, istruzioni, valori costanti) denotati in modo simbolico– Usando un identificatore... più facile da ricordare

• Sequenza di esecuzione istruzioni espressa in modo più simile al linguaggio naturale e alla matematica

Informatica A - Cugola 4

La macchina astratta CLa macchina astratta C

Page 3: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 5

Standard I/OStandard I/O

• Un programma C ha due periferiche “ standard” di ingresso e uscita– Standard input (tastiera)– Standard output (video)

• Possiamo pensarle come “ sequenze” di celle elementari ognuna delle quali contiene un dato (da leggere o scritto)

Informatica A - Cugola 6

MemoriaMemoria

• Divisa in celle elementari: VARIABILI

• Ogni cella può contenere un dato

• I dati possono essere– Numeri– Caratteri– Stringhe (successioni finite di caratteri,

immagazzinati in celle consecutive)

• Semplificazioni/ idealizzazioni (astrazioni)– Nessun limite al numero delle celle e al valore

numerico contenuto

Page 4: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 7

VariabiliVariabili

• Denotate tramite identificatori simbolici• Regole per gli identificatori in C:

– Un identificatore è composto da una successione di lettere, cifre e simbolo _ , con al primo posto una lettera o il simbolo _

• Esempi di identificatori C• a, x, alfa, pippo, a1, xy23, Giuseppe, DopoDomani,

velocita_massima, _velocita• NB maiuscole distinte dalle minuscole: Var1, var1 e VAR1 sono tre

diversi identificatori

• Si noti che il concetto di variabile in un linguaggio di programmazione differisce dal concetto di variabile in matematica– I n un linguaggio di programmazione una variabile è

semplicemente il nome per una cella di memoria– x=x+1 è una tipica istruzione C, non ha molto senso in

matematica

Informatica A - Cugola 8

AttenzioneAttenzione

• Per evitare ambiguità è vietato usare:– Stesso identificatore per indicare diversi elementi

– Diversi identificatori per lo stesso elemento

• Esistono identificatori riservati– Associati a priori a qualche elemento del li nguaggio

– Non usabili dal programmatore con significati differenti da quello predefinito• Esempio: parole chiave

– scanf operazione di ingresso – printf operazione di uscita

Page 5: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 9

Struttura di un programma CStruttura di un programma C

• Intestazione costituita dall ’identificatore predefinito main sequito da una coppia di parentesi tonde ()

• Seguita da una sequenza di istruzioni, racchiuse tra { e }– Ogni istruzione termina con ;

• Esempio:main() {

x = 3;

myVar = 5;

}

Informatica A - Cugola 10

IstruzioniIstruzioni

• Assegnamenti

• Ingresso/ Uscita

• I struzioni composte

Page 6: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 11

AssegnamentoAssegnamento

• Sintassi:variabile = espressione;

• Esempio:lunghezza = 10;

altezza = 20;

alt = altezza;

peso = 10*altezza*(lunghezza +1);

• L’espressione può essere – Un valore costante – Una variabile – combinazione di espressioni mediante operatori (e.g. aritmetici

+, −−, * , / , %) e parentesi

Informatica A - Cugola 12

Esecuzione assegnamentoEsecuzione assegnamento

• L’esecuzione di una istruzione di assegnamento avviene secondo i seguenti due passi in sequenza– valutazione dell’espressione– memorizzazione del risultato nella variabile a sinistra del

simbolo =

• Esempio:x = y * (x + 3) * 2;

passo 1

passo 2

passo 3

passo 4

Page 7: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 13

AutoassegnamentiAutoassegnamenti e incrementie incrementi--decrementidecrementi

• E’ comunque avere istruzioni del tipo:x = x + 1;

dette “auto -assegnamenti”• Per questo esiste una sintassi abbreviata per

auto-assegnamenti e incrementi-decrementix = x + a →→ x += a

x = x – a →→ x - = a

x = x * a →→ x *= a

x = x / a →→ x /= a

x = x + 1 →→ x++

x = x – 1 →→ x--

Informatica A - Cugola 14

Istruzioni di I/OIstruzioni di I/Otrascurando qualche dettaglio!!!trascurando qualche dettaglio!!!

• scanf (variabi l e) � �

ingresso

• printf (espres sione )� �

uscita

• Esempioprintf (larghezza);

printf ((a –z)/10);

Page 8: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 15

Casi particolariCasi particolari

• Stampa di un carattere– Per evitare ambiguità con gli identificatori, i

caratteri vengono racchiusi tra apiciprintf ('a');

• In maniera analoga le stringhe vengono racchiuse tra doppi apici printf (" alfa ");

sta perprintf ('a');

printf ('l');

printf ('f');printf ('a');

Informatica A - Cugola 16

Istruzione compostaIstruzione composta((compoundcompound statement)statement)

• Si possono raggruppare più istruzioni in sequenza tra { e } a costituire un blocco del tutto equivalente a una singola istruzione

• Non è necessario il “;” dopo “}”, in quanto il blocco è già una istruzione (non necessita del terminatore per diventarla)

Page 9: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 17

CondizioniCondizioni

• Le condizioni sono espressioni che hanno valore vero o falso

• In C non esiste un tipo boolean vero e proprio ma si ricorre a una convenzione– vero � � qualunque valore intero ≠ 0– falso � � il valore 0

Informatica A - Cugola 18

CondizioniCondizioni

• Le condizioni si costruiscono usando operatori relazionali== != < > <= >=

• Oppure logici! (NOT)

|| (OR)

&& (AND)

Page 10: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 19

Esempi di condizioniEsempi di condizioni

X == 0

X>0 && A != 3

!((x+5)*10 >= (ALFA3/BETA_DUE))

NB esistono regole di precedenza ! a || b && c prima !, poi &&, poi | |

in caso di dubbio, usare le parentesi tonde

Informatica A - Cugola 20

DettagliDettagli

• Gli operatori && e | | si valutano da sinistra a destra

• La valutazione continua solo fino a quando si è raggiunta la certezza del valore di verità dell ’espressione, quindi si ferma (valutazione in corto circuito) – Esempio:(i==0) || ((a/i)>5)non genera un errore se i=0; genera 0 (falso)

Page 11: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 21

Istruzione composta condizionaleIstruzione composta condizionale

• E’ possibile modificare il flusso di controllo del programma in funzione del risultato della valutazione di una espressione condizionale usando l’istruzioneif...elseif ( xx < 0) xx = - xx ; else xx = xx + 10;

• Per maggior leggibilità, è bene usare regole di incolonnamento (indentazione)if ( xx < 0)

xx = - xx ;

else

xx = xx + 10;

Informatica A - Cugola 22

EsempioEsempio

if (a > b) {

max = a;

printf (“mass i mo: %d”, a);

}

else {

max = b;

printf (“mass i mo: %d”, b);

}

Notare

Notare

Page 12: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 23

if if “ semplice”“ semplice”

• E’ possibile omettere la parte elseif(x < 0) x = - x; /* calcola val. assoluto*/

• Nel caso di if nidificati possono esserci delle ambiguità:if(n > 0) if(a>b) z = a; else z = b;

• L’ambiguità è risolta dal C associando l’else all’if più vicino– L'i ndentazione lo rende evidente (ma l’indentazione non ha

significato per il compilatore)if(n > 0)

if(a > b) z = a;

else z = b;

– Se incerti, usare le parentesi (che invece hanno un significato ben preciso anche per il compilatore)if(n > 0) {

if(a > b) z = a;

else z = b;

}

Informatica A - Cugola 24

CommentiCommenti

• Racchiusi tra / * e */• L’intera stringa è ignorata dal compilatore

• Servono per migliorare la leggibili tà di un programma e la facilità di modifica

• Esempio:printf(“a = %d”,a); /*stampa il valore di a*/

Page 13: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 25

Il ciclo (Il ciclo (looploop) ) whilewhile

• Ripete una istruzione, o un blocco di istruzioni, fin tanto che una condizione è vera

• Sintassi:while (condizione) istruzio ne;

• Esempio:scanf (a);/* a è un natural e*/

scanf (b); /* b è un natural e*/

while (b > 0) {

a = a + a;

b-- ;

}

Informatica A - Cugola 26

Esempio: calcolo del MCD (1)Esempio: calcolo del MCD (1)

/*si scandiscono tutti i naturali da 1 al min tra x e y. L’ultimo div. comune trovato è il MCD*/

scanf (x); scanf (y); /*x, y naturali positivi*/

contatore = 1;

if (x<y)

min = x;

else

min = y;

while (contatore <= min ) {

if ((x % contatore)==0 && (y % contatore)==0) )

mcd = contatore;

contatore++;

}

Page 14: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 27

Esempio: MCD (2)Esempio: MCD (2)

/*si scandiscono i naturali dimin uendo a partire dal minimo tra x e y. Il primo divisore comune trovato è i l MCD*/

scanf (x); scanf (y); /*x, y natura l i positivi*/

if (x<y)

cand = x; else

cand = y;

while ((x % cand ) != 0 || (y % can d) != 0)

-- cand ;

mcd = cand ;

Informatica A - Cugola 28

Esempio: MCD (3)Esempio: MCD (3)

/*si codifica l’algoritmo d i Eucl i de*/

scanf (x); scanf (y); /*x, y natura l i positivi*/

while (x != y)

if (x > y)

x = x – y;

else

y = y – x;

mcd = x;

Page 15: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 29

AnalisiAnalisi criticacritica

• Siamo sicuri che il ciclo termini sempre?– Cruciale l'i potesi che x e y siano naturali positivi– I l programmatore serio immetterebbe un opportuno

controllo– Sotto questa ipotesi, ad ogni passo o x o y decresce,

ma resta positivo– Non esiste una sequenza di coppie <x, y> che

rispett i queste proprietà e che non sia finita

Informatica A - Cugola 30

EserciziEsercizi

• Si implementi un programma che chiede all ' utente di inserire un numero intero e verifica se sia primo

• Si scriva un programma che calcola il più piccolo numero primo successivo ad un intero dato

Page 16: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 31

I “dettagli” del CI “dettagli” del C

• I l programma deve essere definito come “ main”main ( ) {

...

}

• Per poter effettuare I / O deve “includere” le librerie opportune#include < stdio .h>

Informatica A - Cugola 32

Le dichiarazioniLe dichiarazioni

• Tutte le variabili devono essere dichiarate, specificandone il tipo

• TIPO: definisce l' insieme di valori assumibili e le operazioni applicabili

• Perché dichiarare?– Per poter controllare il programma in compilazione

int pippo ; int beppe ;

pippo = pipo+1; beppe =‘a’;

Page 17: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 33

Tipi predefiniti in CTipi predefiniti in C

• char , int , fl oat e doubleint i = 0; /* inizializzazio ne*/

char a;

const float pi = 3.14; /*pi non p uò più essere modificato*/

float zeta = 1.33;

• Consigli: – Inizializzare sempre esplicitamente. – Evitare le inizializzazioni implicite che C potrebbe

eseguire, al fine di migliorare la leggibilità

Informatica A - Cugola 34

printfprintf: maggiori dettagli: maggiori dettagli

• Richiede oltre agli elementi da stampare una stringa di controllo che specifica il tipo del dato da stampare

• Sintassi esatta:printf (stringa_controllo, elemen t i);

• Stringa di controllo:– %d intero decimale– %f floating point– %c carattere– %s stringa– \ n (new line) manda a capo

Page 18: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 35

EsempioEsempio

float t1, t2;/*temperatura in gradi celsius e fahrenheit*/

...

printf (“%s\n%s%f\n%s%f\n”, “temperatura”, “in gradi celsius=”, t1, “in fahrenheit=”, t2);

printf (“temperatura\nin gradicelsius=%f\nin fahrenheit=%f\n”, t1, t2);

Informatica A - Cugola 36

scanfscanf

• Anch’essa prevede una stringa di controllo che specifica come devono essere interpretati i caratteri letti in ingresso

• I nomi delle variabili di cui leggere il valore (per motivi che vedremo) debbono essere preceduti da &

• Esempio:int a, b; char c; float d;

scanf(“%d%d%c%f”, &a, &b, &c, &d);

Page 19: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 37

I tipi di datiI tipi di dati

• I l tipo rappresenta l’insieme dei possibili valori che una variabile può assumere...

• ... nonché le operazioni che possiamo effettuare su tale variabile

• Attraverso l’attribuzione di un tipo l’uso di una variabile diventa molto diverso dalla visione di un dato da parte del linguaggio macchina– Sequenza di bit, che posso interpretare come voglio

(sommarla come se fosse un numero intero, farla “scorrere” a destra o sinistra, ecc.)

Informatica A - Cugola 38

Vantaggi del concetto di tipoVantaggi del concetto di tipo

• Si conosce quanta memoria riservare a una variabile in funzione del suo tipo– int: di solito una parola– float: di solito due parole

• Si possono rilevare errori di uso della variabile in fase di compilazione (ma qui i l C è alquanto debole...)

Page 20: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 39

Conversioni di tipoConversioni di tipo

• Quando in C un operando non è del tipo atteso, anziché segnalare errore viene fatta di soli to una conversione automatica di tipo

• Esempioint i; float f, f1;

f1 = i + f;

/* la valutazione dell’espr ession e i+f effettua prima la conversio ne di i infloat e poi la somma */

Informatica A - Cugola 40

Altre conversioni di tipoAltre conversioni di tipo

int a, b; flo at c;

a=c; /*tronca mento*/

c=a; /*trasfo r mazione di int ero infloat */

a=a/b; /*ness una conve r sione , a/b è un valore int ero tronc ato*/

a=a/c; /*a tr asformato in fl oat , divisione ese guita, tr oncamento nell’assegnam ento*/

Si noti l’uso dello stesso simboloper operazioni diverse

Page 21: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 41

Il tipoIl tipo intint

• E` un’approssimazione sul concetto matematico di numero intero

• Normalmente utilizza 1 parola• Esistono anche short int e long int

– Tipicamente:long 32 bit, short 16 bit eint 16 o 32

– E’ richiesto che • spazio per short <= spazio per int <= spazio per long

– Si può usare il tipo char per interi tra –127 e 127– Si può anche specificaresigned/unsigned

• signed è ridondante per i tipi numerici• Posso avereunsigned int, signed char, ...

Informatica A - Cugola 42

I tipiI tipi floatfloat ee doubledouble

• Sono un’approssimazione sul concetto matematico di numero razionale

• Le costanti si possono scrivere in vario modo:– 315.779

– 3.73E-5

• double di solito occupa più memoria difloat– Tipicamente 4 byte per float e 8 byte per double

(...esistono anche i long double, che devono occupare almeno tanto spazio quanto i double)

Page 22: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 43

long double

double

float

unsigned longunsigned long int

unsignedunsigned int

unsigned shortunsigned short int

long int, signed long, long

signed long int

signed, intsigned int

signed short, shortsigned short int

unsigned char

signed char

char

Denominazioni alternative

Tipo predefinito

Informatica A - Cugola 44

Ancora sulle conversioni automatiche Ancora sulle conversioni automatiche di tipodi tipo

• Si consideri un operatore aritmetico binario– Se uno dei due operandi è long double, converti

l’altro a long double, altrimenti– Se uno dei due è double, converti l’altro a double,

altrimenti– Se uno dei due è float, converti l’altro a float,

altrimenti– Converti char e short a int– Quindi, se un operando è long, converti l’altro a long

Page 23: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 45

Ancora sulle conversioni automatiche Ancora sulle conversioni automatiche di tipodi tipo

• Si consideri un assegnamento– I l valore dell ’espressione della parte destra viene

convertito al tipo che sta a sinistra di “=“• Un char è convertito a int• I nteri lunghi (p.es. int) sono convertiti in interi più corti

(p. es. char) troncando bit• float x; int i;

– sia x=i che i=x causano conversioni

• Quando double viene convertito in float dipende dall ’implementazione se troncamento o arrotondamento

Informatica A - Cugola 46

CauteleCautele

• Attenzione ai confronti tra floatif (a == b) ...

• potrebbe non avere senso a causa delle approssimazioni nella memorizzazione!!!

Page 24: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 47

Il tipoIl tipo charchar

• Di soli to rappresentato mediante un byte di 8 bit– pertanto consente di rappresentare i caratteri ASCII

• I caratteri sono rappresentati da numeri interi e quindi tra essi è definito un ordinamento– Per esempio il carattere ASCI I ‘0’ è rappresentato

dall ’intero 48 “più grande” del carattere ASCI I ‘1’ rappresentato dall ’intero 49

Informatica A - Cugola 48

Un esempioUn esempio

• I l prossimo esempio illustra:– La somiglianza trachar eint

– Come progettare il dialogo di I / O • Facendo precedere sempre un input da un output di

richiesta (" prompt" )

Page 25: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 49

#i ncl ude <st dio . h>mai n( ) {/ * l egge un c ara t t ere e ne st ampa i l va l or e ASCI I se è l et te r a mi nusco l a; s e no t er mi na* /

char c; in t i ;pr i nt f ( “ sc r i v i un ca r at t er e mi nuscol o ( maiu scol o

per t er min ar e) \ n” ) ;scanf ( ” %c” , &c );whi le ( c>=’ a’ && c <=’ z’ ) {

i =c;pr i nt f ( “ va l or e ASCII pe r % c r i sul t a %d” , c, i );pr i nt f ( “ sc r i v i un ca r at t er e mi nuscol o ( maiu scol oper t er min ar e) \ n” ) ;scanf ( ” %c” , &c );

}}

Informatica A - Cugola 50

EserciziEsercizi

• Si scriva un programma che legge da standard input un numero e una sequenza di caratteri (terminata dal carattere ‘x’) e via via che legge crittografa i caratteri usando la tecnica di shiftdi tante cifre quanto vale il numero letto– Nota: i caratteri leggibili vanno da 32 a 127 (ascii)

• Moltiplicare 2 numeri razionali (definiti da numeratore e denominatore) semplificando il risultato

Page 26: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 51

Tipi Tipi integralintegral

unsigned longunsignedunsigned short

longintshort

unsigned charsigned charchar

Informatica A - Cugola 52

Studio Studio deidei ciclicicli

• Caso con numero di iterazioni predeterminato(p. es., n)

• vedremo l' esistenzadi un ulteriore forma diciclo per questo caso

i nt cont at or e = 1 ;whi le ( cont at or e <= n) {

…;conta t or e++;

}

i nt cont at or e = 0 ;whi le ( cont at or e < n) {

…;conta t or e++;

}

oppure

Page 27: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 53

Studio dei cicliStudio dei cicli

• I terazione controllata da " sentinella"

• Esempio: calcolare la media di una serie di numeri naturali da leggere. I l valore –1 indica la fine del flusso

• NB: scegliere la sentinella in modo che non faccia parte dell'i nsieme dei valori da elaborare!!!

Informatica A - Cugola 54

printf("fornisci valore da elaborare;se hai finito, fornisci %…", sentinella);

scanf("%…", valore);while (valore != sentinella) {

elabora valore;printf("fornisci valore da elaborare;

se hai finito, fornisci %…", sentinella);scanf("%…", valore);

}

Page 28: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 55

La costruzione incrementale (top La costruzione incrementale (top down) dei programmidown) dei programmi

• Si leggono sequenze di gruppi di naturali; ciascun gruppo è separato dal successivo dal numero 0

• L’ultimo gruppo è terminato da “ -1”

• Si stampano in uscita sequenze di naturali che rappresentano le somme dei valori dei singoli gruppi

Informatica A - Cugola 56

cerca gruppo;while (esiste un gruppo) {

calcola sommatoria;stampa sommatoria;passa a prossimo gruppo;

}

passo 1

int i;scanf(“%d”, &i);while (i != -1) {

calcola sommatoria;stampa sommatoria;passa a prox. gruppo;

}

passo 2

int i; int sum;scanf(“%d”, &i);while (i != -1) {

sum=0;accumula sommatoria;printf (“%d \n”, sum);passa al prossimo gruppo;

}

passo 3

Page 29: Nozioni base di programmazione in linguaggio Chome.deib.polimi.it/cugola/pub/infoA04-4-2x.pdf · Nozioni base di programmazione in linguaggio C Politecnico di Milano Sede di Cremona

Informatica A - Cugola 57

int i; int sum;scanf(“%d”, &i);while (i != -1) {

sum=0;while (gruppo non finito) {

sum += i;scanf (“%d”, &i);

}printf (“%d \n”, sum);if (i!= -1) scanf (“%d”, &i);

}

passo 4

gruppo non finito � i!=0 && i != -1

Informatica A - Cugola 58

Che cosa abbiamo fattoChe cosa abbiamo fatto

• I l programma viene derivato per passi successivi di raff inamenti

• Viene scritto ad ogni passo in un misto di C e linguaggio naturale (pseudo-codice)

• Alla fine del processo di raff inamenti risulta scritto in C ed è eseguibile

• I passi scritt i in linguaggio naturale e raff inati al passo successivo possono diventare commenti