Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2020-2021
Strutture di controllo
int choice = 3;
switch (choice)
{
case 1 : statement1 ; choice ==1 ….
break; /* optional */
case 2 : statement2 ;
break; /* optional */ choice ==2 ….
case 3 : statement3 ;
break; /* optional */
…
default : default statement;
} caso default
Fondamenti di Informatica
NB: significato del break 79
Università di Sassari - A.A. 2020-2021
Strutture di controllo
int x=0; no
int y = 2; x<4
while(x<4) {
si
x ++;
x++
y = y*y;
}
y=y*y
printf(“%d”,y);
Stampa y
Fondamenti di Informatica 80
Università di Sassari - A.A. 2020-2021
Strutture di controllo
int x=0; no
int y = 2; x<4
while(x<4) {
si
x ++;
x++
y = y*y;
}
y=y*y
printf(“%d”,y);
Stampa y
Fondamenti di Informatica 81
Università di Sassari - A.A. 2020-2021
Strutture di controllo
int x=0;
int y = 2;
do { x++
x ++;
y = y*y; y=y*y
} while(x<4);
printf(“%d”,y); x<4
si
no
Stampa y
Fondamenti di Informatica 82
Università di Sassari - A.A. 2020-2021
Strutture di controllo
si
NB: non è diverso da un while
Stampa I
I++
Fondamenti di Informatica 83
Università di Sassari - A.A. 2020-2021
Strutture di controllo
Classwork
si chiede all'utente di inserire numeri in sequenza e sommare i
numeri inseriti ma solo se sono numeri pari. Ad ogni ciclo il
programma deve restituire la somma parziale. Il programma
deve uscire quando l’utente inserisce il numero 0.
• Esempio:
➔
2 (inserimento utente)
➔
2 (risposta programma)
➔
1 (inserimento utente)
➔
2 (risposta programma)
➔
8 (inserimento utente)
➔
10 (risposta programma)
➔
0 (inserimento utente)
➔
(fine programma)
Fondamenti di Informatica 84
Università di Sassari - A.A. 2020-2021
Strutture di controllo
Classwork
si chiede all'utente di calcolare la seguente serie numerica
Fondamenti di Informatica 85
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h> //header file section
/***************main function****************/
int main()
{
int n;
float sommatoria=0;
float eps;
n=0;
do{
n++;
eps = (1.0 / (4 * n * n - 1));
sommatoria = sommatoria + eps;
} while (eps > 0.000001);
printf ("\n Valore della sommatoria: %f n= %d",sommatoria, n);
return 0;
}
Fondamenti di Informatica 86
Università di Sassari - A.A. 2020-2021
Strutture di controllo
Classwork
Il programma deve chiedere all'utente una stringa di ingresso.
Fondamenti di Informatica 87
Università di Sassari - A.A. 2020-2021
Strutture di controllo
int cont
char cx
START
Leggi cx
cont=0
si no
cx!= vocale?
no
cx !=NL
Fondamenti di Informatica 88
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h> //header file section
/***************main function****************/
int main()
{
char cx;
int delta='a'-'A';
int cont=0;
printf("Insert a string followed by ENTER\n");
do{
cx=getchar();
if(cx!=65 && cx!=69 && cx!=73 && cx!=79 && cx!=85 && cx!=(65+delta) &&
cx!=(69+delta) && cx!=(73+delta) && cx!=(79+delta) && cx!=(85+delta))
putchar(cx);
else cont++;
}while (cx != '\n');
printf("\n%d vowels deleted", cont);
return 0;
}
Fondamenti di Informatica 89
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h> //header file section
int main() {
char cx;
int cont=0;
printf("Insert a string followed by ENTER\n");
while((cx=getchar()) != '\n'){
switch(cx){
case 65: cont++;break;
case 69: cont++;break;
case 73: cont++;break;
case 79: cont++;break;
case 85: cont++;break;
case 97: cont++;break;
case 101: cont++;break;
case 105: cont++;break;
case 111: cont++;break;
case 117: cont++;break;
default: putchar(cx);
}
};
printf("\n%d vowels deleted", cont);
return 0;
}
Fondamenti di Informatica 90
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h> //header file section
int main() {
char cx;
int cont=0;
printf("Insert a string followed by ENTER\n");
while((cx=getchar()) != '\n'){
switch(cx){
case 65: cont++;break;
case 69: cont++;break;
case 73: cont++;break;
case 79: cont++;
case 85: cont++;
case 97: cont++;break;
case 101: cont++;break;
case 105: cont++;break;
case 111: cont++;break;
case 117: cont++;break;
default: putchar(cx);
}
};
printf("\n%d vowels deleted", cont);
return 0;
}
Fondamenti di Informatica 91
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h> //header file section
int main() {
char cx;
int cont=0;
printf("Insert a string followed by ENTER\n");
while((cx=getchar()) != '\n'){
switch(cx){
case 65:
case 69:
case 73:
case 79:
case 85:
case 97:
case 101:
case 105:
case 111:
case 117: cont++;break;
default: putchar(cx);
}
};
printf("\n%d vowels deleted", cont);
return 0;
}
Fondamenti di Informatica 92
Università di Sassari - A.A. 2020-2021
Strutture di controllo
Homework
Si chiede all'utente di inserire una frase. Il programma calcola
automaticamente il numero di parole della frase e il numero di
occorrenze di ogni vocale (senza distinzione tra maiuscola e
minuscola).
• Esempio:
➔
Ho fame e ho sonno (inserimento utente)
➔
La frase contiene 5 parole
➔
A: 1
➔
E: 2
➔
I: 0
➔
O: 4
➔
U: 0
➔
(fine programma)
Fondamenti di Informatica 93
Università di Sassari - A.A. 2020-2021
Strutture di controllo
Fondamenti di Informatica 94
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h> //header file section
int val; //global
/***************call function****************/
void printIfBetween()
{ int i;
for(i = 0; i <=100; ++i) {
if(i == val){
printf("The value %d is between 0 and 100\n", val);
break; // leave the for loop asap
}
}}
/***************main function****************/
int main()
{ int i;
for(i = 0; i < 3; ++i){
printf("Insert an integer\n");
scanf("%d",&val);
printIfBetween();
}}
Fondamenti di Informatica 95
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h> //header file section
int val; //global
/***************call function****************/
void printIfBetween()
{ int i;
for(i = 0; i <=100; ++i) {
if(i != val){
continue; //just skip the print
}
printf("The value %d is between 0 and 100\n", val);
}}
/***************main function****************/
int main()
{ int i;
for(i = 0; i < 3; ++i){
printf("Insert an integer\n");
scanf("%d",&val);
printIfBetween();
}}
Fondamenti di Informatica 96
Università di Sassari - A.A. 2020-2021
Strutture di controllo
• Cicli nidificati
#include <stdio.h>
#include <stdlib.h>
int main()
{ int a,b;
int f;
for(a=0;a<=1;a++){
for(b=0;b<=1;b++){
f=!((!a)||b) && a;
printf("A=%d B=%d : %d\n",a,b,f);
}
}
exit(0);
}
Fondamenti di Informatica 97
Università di Sassari - A.A. 2020-2021
Strutture di controllo
Classwork
Il programma deve calcolare in modo automatico tutti i numeri
primi tra 1 e 1000.
Fondamenti di Informatica 98
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h>
int main () {
Fondamenti di Informatica 99
Università di Sassari - A.A. 2020-2021
Strutture di controllo
#include <stdio.h>
int main () {
Tipi strutturati
i=0 i=0
i<10 i<10
SI SI
ISTR x ISTR x
BREAK CONT
TEST TEST
È un
ISTR y ISTR y
if-else!
i=i+1 i=i+1
Tipi strutturati
i=0
i=0 V=0
i<10
i<10
&& !V
SI SI
ISTR x ISTR x
BREAK BREAK
TEST TEST
V=1
ISTR y ISTR y
i=i-1
i=i+1
i=i+1
Tipi strutturati
• Array
La dichiarazione ha una forma semplice:
int my_list[50];
char my_string[100];
int my_matrix[50][50][50];
Tipi strutturati
Notare bene:
– le celle sono indicizzate a partire dal valore 0 fino a 99
– per inizializzare un array occorre utilizzare un ciclo iterativo:
#include <stdio.h>
int main ()
{
int index, my_array[10];
for (index = 0; index < ARRAY_SIZE; index++) {
my_array[index] = 0;
}
}
Tipi strutturati
Notare bene:
– Esiste un modo alternativo per inizializzare un array:
int my_array[3][3] =
{
{10, 23, 42},
{1, 654, 0},
{40652, 22, 0}
};
Tipi strutturati
Classwork:
Si chiede all'utente di inserire una frase. Il programma calcola
automaticamente il numero di parole della frase e il numero di
occorrenze di ogni lettera (con distinzione tra maiuscola e
minuscola).
Tipi strutturati
#include <stdio.h>
#include <ctype.h> //classificazione char
int main() {
char fr[101];
int cont[256];
int contaParole=0;
int i;
for(i=0;i<256; i++) cont[i]=0;
// lettura frase
i=0;
while( (fr[i++]=getchar()) != '\n' && i<100);
fr[i]= '\0';
Tipi strutturati
i=0;
while( isspace(fr[i])) i++;
while( fr[i] != '\0')
{
while( !isspace(fr[i])) {
cont[0xff&fr[i]]++;
i++;
}
contaParole++ ;
while( isspace(fr[i])) i++;
}
printf("Il numero di parole e' %d a:%d b:%d c:%d\n",
contaParole , cont['a'], cont['b'] , cont['c'] );
Tipi strutturati
Classwork:
Tipi strutturati
Soluzione
int i
float N [10] max=N[0]
float max imax=0
Stampa max
int imax START
Stampa imax
i=1
Stampa messaggio
END
i=0 max<N[i]
no si
max=N[i]
imax=i
i<10
SI
i=i+1
Leggi N[i]
i=i+1
i<10
Tipi strutturati
#include <stdio.h>
int main () {
int i, imax;
float N[10], max;
for (i=0;i<10;i++) {
printf(" inserire float\n");
scanf("%f",&N[i]);
}
max = N[0];
imax=0;
i = 1;
do {
if(max<N[i]) {
max = N[i];
imax=i;
}
i=i+1;
} while(i<10);
printf("Massimo: %f Posizione: %d ", max, imax);
return 0;
}
Fondamenti di Informatica 111
Università di Sassari - A.A. 2020-2021
Tipi strutturati
Homework:
Tipi strutturati
Homework:
•Implementare l’algoritmo del crivello di Eratostene per la
ricerca dei numeri primi.
• Verificare che il numero di operazioni elementari è inferiore a
quello dell’algoritmo semplice della trasparenza n. 100
ALGORITMO SU VETTORE DI DIMENSIONE n
Tentativamente, marca tutti i numeri 2,3,4,...,n come primi
i=2
Finché i <= ⌊sqrt(n)⌋
trova il primo numero j >= i marcato come primo
smarca i numeri 2*j, 3*j, ....,⌊n/j⌋ * j
i=i+1
Stampa i numeri ancora marcati