Strutture di controllo in C++ Fondamenti di Informatica R. Basili a.a. 2006-2007
Il controllo: selezione Spesso la sequenza delle istruzioni non e prevedibile a priori ma dipende strettamente dalle configurazioni dei dati di un problema: Se A<B Allora Max B Altrimenti Max A Somma 0 Leggi N Per N volte Leggi X Somma Somma + X Stampa Somma
Il controllo: selezione (2) Controllare le sequenze di istruzioni significa modificare il loro ordinamento totale Se A<B Allora Max B Altrimenti Max A
Il controllo: selezione (2) Controllare le sequenze di istruzioni significa modificare il loro ordinamento totale Se A<B Allora Max B Altrimenti Max A Confronta A e B Max A Max B
Il controllo: selezione (2) Controllare le sequenze di istruzioni significa modificare il loro ordinamento totale Se A<B Allora Max B Altrimenti Max A A B Max A Confronta A e B A < B Max B
Il controllo: selezione (2) Controllare le sequenze di istruzioni significa modificare il loro ordinamento totale Confronta A e B Se A<B Allora Max B Altrimenti Max A A B Max A Confronta A e B A < B Max B Max A Max B
Il controllo: selezione (2) Controllare le sequenze di istruzioni significa modificare il loro ordinamento totale Confronta A e B Se A<B Allora Max B Altrimenti Max A A B Max A Confronta A e B A < B Max B Se A<B Max A sempre Max B
Il controllo: selezione (2) Controllare le sequenze di istruzioni significa modificare il loro ordinamento totale Confronta A e B Se A<B Allora Max B Altrimenti Max A A B Max A Confronta A e B A < B Max B Se A<B Max A sempre Max B
Il controllo: selezione (2) Controllare le sequenze di istruzioni significa modificare il loro ordinamento totale Confronta A e B Se A<B Allora Max B Altrimenti Max A A B Max A Confronta A e B A < B Max B Se A<B Max A sempre Max B
Il controllo: selezione (3) Se A<B Allora Max B Altrimenti Max A Confronta A e B Se A<B Max A sempre Max B Confronta A e B A B A < B Max A Max B
Il controllo: selezione (3) Se A<B Allora Max B Altrimenti Max A Confronta A e B Confronta A e B A B A < B Max A Max B Se A<B Max A falso A<B vero sempre Max B Max A Max B
Il controllo condizionale in C++ int a, b, max; if( a < b ) max = b; else max = a;
Il controllo condizionale in C++ int a, b, max; if( a < b ) max = b; else max = a; MOV BX B MOV AX A CMP AX B JL TRUE MOV MAX AX JMP ENDIF TRUE MOV MAX BX ENDIF...
Uso dell istruzione IF vedi esempio programma UsoIf.cpp Domande: Elencare variabili, espressioni letterali e costanti nel programma Determinare il numero di operazioni nel caso di un input stream di N caratteri
Il controllo condizionale in C++ int a = 1, b = 2, c = 23, d = 34, max; if( a < b c == d ) { b = c + d; cout << b; } else { max = a; cout << max + 1; }
Il controllo condizionale in C++ int a = 2, b = 2, c = 23, d = 34, max; if( a < b c == d ) { b = c + d; cout << b; } else { max = a; cout << max + 1;}
Il controllo condizionale in C++ int a = 10, b = 2, c = 34, d = 34, max; if( a < b c == d ) { b = c + d; cout << b; } else { max = a; cout << max + 1;}
Il controllo condizionale in C++ int a = 10, b = 2, c = 34, d = 34, max; if( a < b c == d ) { b = c + d; cout << b; } else { max = a; cout << max + 1;}
Il controllo condizionale in C++ int a = 10, b = 2, c = 34, d = 34, max; if( a < b && c == d ) { b = c + d; cout << b; } else { max = a; cout << max + 1;}
Il controllo: iterazione Somma 0 Leggi N Per N volte Leggi X Somma Somma + X Stampa Somma Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma
Il controllo: iterazione Somma 0 Leggi N Per N volte Leggi X Somma Somma + X Stampa Somma Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma
Il controllo: iterazione (2) Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma
Il controllo: iterazione (2) Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma
Il controllo: iterazione (2) Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma MOV SM 0 MV AX SM Leggi N MOV CX 0 CICLO CMP CX N JGE ENDCL Leggi X ADD AX X INC CX JMP CICLO ENDCL MOV SM AX
Il controllo: iterazione (2) Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma MOV SM 0 MV AX SM Leggi N MOV CX 0 CICLO CMP CX N JGE ENDCL Leggi X ADD AX X INC CX JMP CICLO ENDCL MOV SM AX
Il controllo: iterazione (2) Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma MOV SM 0 MV AX SM Leggi N MOV CX 0 CICLO CMP CX N JGE ENDCL Leggi X ADD AX X INC CX JMP CICLO ENDCL MOV SM AX
Il controllo: iterazione (2) Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma MOV SM 0 MV AX SM Leggi N MOV CX 0 CICLO CMP CX N JGE ENDCL Leggi X ADD AX X INC CX JMP CICLO ENDCL MOV SM AX
Il controllo: iterazione (2) Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma + X I I+1 Stampa Somma MOV SM 0 MV AX SM Leggi N MOV CX 0 CICLO CMP CX N JGE ENDCL Leggi X ADD AX X INC CX JMP CICLO ENDCL MOV SM AX
L Iterazione in C++ Somma 0 Leggi N I 0 Finche (I < N) Leggi X Somma Somma+X I I+1 Stampa Somma int Somma=0,I=0, N, X; cin >> N; while ( I < N ) { cin >> X; Somma = Somma + X; I = I + 1; } cout << Somma;
L Iterazione in C++ (2) int Somma=0,I=0, N, X; cin >> N; while ( I < N ) { cin >> X; Somma = Somma+X; I = I + 1; } cout << Somma; int Somma=0,I=0, N, X; cin >> N; while ( I < N ) { cin >> X; Somma += X; I++; } cout << Somma;
Sentinelle Le variabili che controllano un ciclo iterativo sono variabili di controllo spesso dette sentinelle int i, a, N; // lettura di N i=2; a=1; while( i<=n ) { a=a*i; i++; }
Sentinelle (2) Un errato uso delle sentinelle e tra i maggiori responsabili di errori nella programmazione di cicli iterativi int i, a; // lettura di N i=0; a=1; while( i<=n ) { a=a*i; i+=n; } Se N in input e pari a 0?
L Iterazione in C++: Uso del for int Somma=0,I=0, N, X; cin >> N while (I<N) { cin >> X; Somma += X; I++; } cout << Somma; int Somma=0, I, N, X; cin >> N for ( I=0; I<N; I++) { cin >> X; Somma += X; } cout << Somma;
L Iterazione: Uso del do while int Somma=0,I=0, N, X; cin >> N while (I<N) { cin >> X; Somma += X; I++; } cout << Somma; int Somma=0, I=0, N, X; cin >> N do { cin >> X; Somma += X; I++; } while(i<n); cout << Somma;
L Iterazione: Uso del do while
L Iterazione: Uso del do while Somma = N i= 1 x i
L Iterazione: Uso del do while Somma = N i= 1 Se (N==0) => Somma=0 x i
L Iterazione: Uso del do while Somma = N i= 1 x i Se (N==0) => Somma=0 OSS: do while È inapplicabile!!
L Iterazione: Uso del do while Somma = N i= 1 x i Se (N==0) => Somma=0 OSS: do while È inapplicabile!! int Somma=0,I=0, N, X; cin >> N while (I<N) { cin >> X; Somma += X; I++; } cout << Somma;
L Iterazione: Uso del do while Somma = N i= 1 x i Se (N==0) => Somma=0 OSS: do while È inapplicabile!! int Somma=0,I=0, N, X; cin >> N while (I<N) { cin >> X; Somma += X; I++; } cout << Somma; int Somma=0, I=0, N, X; cin >> N do { cin >> X; Somma += X; I++; } while(i<n); cout << Somma;
L Iterazione: Uso del do while Somma = N i= 1 x i Se (N==0) => Somma=0 OSS: do while È inapplicabile!! int Somma=0,I=0, N, X; cin >> N while (I<N) { cin >> X; Somma += X; I++; } cout << Somma; int Somma=0, I=0, N, X; cin >> N do { cin >> X; Somma += X; I++; } while(i<n); cout << Somma;
L Iterazione: Uso del do while Somma = N i= 1 x i Se (N==0) => Somma=0 OSS: do while È inapplicabile!! int Somma=0,I=0, N, X; cin >> N while (I<N) { cin >> X; Somma += X; I++; } cout << Somma; int Somma=0, I=0, N, X; cin >> N do { cin >> X; Somma += X; I++; } while(i<n); cout << Somma;
Esercizi Proposti Scrivere un programma C++ che legga in ingresso N numeri interi (con N fornito dall utente) e ne calcoli: il massimo valore, il minimo valore, la somma, il prodotto (operatore ) e il valor medio
Esercizi proposti (2) Scrivere un programma C++ che calcoli lo sviluppo in serie di Taylor della funzione sen(x) nell intorno dello 0. Scrivere un programma che calcoli il fattoriale n! di un numero intero non negativo n Scrivere un programma C++ che dati due punti del piano cartesiano (x 0,y 0 )(x 1,y 1 ) calcoli la lunghezza del segmento che li unisce
Esercizi proposti (3) Scrivere un programma che utilizzi la formula di Hoerner per il calcolo di un polinomio di grado N Scrivere un programma che calcoli il valore di un polinomio, p(x), e della sua derivata prima, p (x), per un certo valore della x. Scrivere un programma che dato un polinomio p(x) e due estremi di un intervallo [a,b] ne calcoli l integrale definito.