Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
COSTRUTTO SWITCH:
Raggruppa varie azioni a seconda delle scelte che si può fare. Consente di specificare un numero illimitato di
cammini di esecuzione in dipendenza dal valore di un’espressione.
switch(espressione){ case espressione-costante: comando;
….
default: comando;
}
Per evitare che una volta verifica l’espressione stampi tutto il resto del contenuto dello switch(compreso il
comando del default), devo inserire un ‘break’.
Con il ‘break’, una volta eseguito il comando, si esce dallo switch: si interrompe il flusso delle operazione
che stiamo vedendo.
switch(espressione) {
case espressione-costante: comando;
break;
case espressione-costante: comando;
break; 13
….
default: comando;
}
La semantica dell’istruzione switch impone che:
• venga valutata l’espressione intera: se corrisponde ad uno dei valori case, il flusso di esecuzione
viene trasferito alla prima istruzione successiva al case nel programma;
• se non c’è corrispondenza tra l’espressione switch ed alcun valore case, allora il flusso di esecuzione
viene trasferito all’istruzione del ramo default (non obbligatorio)
Non possono esistere, inoltre, case con valori uguali. Nell’istruzione switch, il flusso di esecuzione, a partire
dal case selezionato, prosegue fino alla successiva istruzione di controllo del flusso o alla fine dell’istruzione
switch. L’istruzione break forza l’uscita dal costrutto switch, trasferendo il controllo alla prima istruzione che
segue il costrutto.
L’uso dell’istruzione break all’interno dello switch evita che il controllo del programma passi da un case al
successivo.
CICLO WHILE:
La sintassi del while è la seguente:
while(espressione){
comando;
}
Dal punto di vista semantico quello che si fa è valutare l’espressione: se è diversa da zero (cioè vera) viene
eseguito il comando(ovvero il corpo del ciclo) ed il controllo ritorna all’inizio del ciclo. Questa operazione si
ripete fino al momento in cui l’espressione vale zero (cioè l’espressione è falsa): il programma supera il ciclo
while ed esegue le istruzioni successive.
ESEMPIO di uso del ciclo while: SOMMA DEI PRIMI N NUMERI,
#include <stdio.h> /* la uso per poter immettere dati da tastiera e per visualizzare a schermo i risultati*/
#include <stdlib.h> /* mi serve per "implementare la funzione system("pause") */
int somma (int); /* prototipo della funzione*/
int main (){
int n,totale;
printf("Inserisci un numero:\n");
scanf("%d",&n);
/* SOMMA DEI PRIMI N NUMERI */
totale=somma(n); /* richiamo della funzione */
printf("Il risultato e':%d\n", totale);
system("pause"); /* mi consente di bloccare a video tutto il programma*/
}
/* dichiarazione della funzione */
int somma (int a){
int i=1,tot=0; 14
while(i<=a){
tot=tot+i;
i+=1;
}
}
return tot; /* mi restituisce il valore della variabile intera tot*/
}
Cioè fino a che i è minore o al più uguale di a, esegui il comando tot=tot+i ed incrementa i. Quando i risulta
maggiore di a non far nulla. Questo è quello che mi dice il while in questo esercizio.
DO-WHILE:
La sintassi del do-while è la seguente:
do{
comando;
}while(espressione);
In questo costrutto il corpo del ciclo viene eseguito almeno una volta perché il controllo è in coda
(..while(espressione);). NOTA: Malgrado il controllo in coda, l’iterazione è “per vera” come nel caso del
ciclo while.
In questi costrutti, per comando intendiamo un solito comando o un blocco di codice.
Un esempio dell’uso del costrutto SWITCH è il seguente:
#include <stdio.h> /* la uso per poter immettere dati da tastiera e per visualizzare a schermo i risultati*/
#include <stdlib.h> /* mi serve per "implementare la funzione system("pause") */
int main (){
int a,b,i,somma,prod,diff,div;
do{
printf("Inserisci il primo numero:\n");
scanf("%d",&a);
printf("Inserisci il secondo numero:\n");
scanf("%d",&b);
if(a>=b){
printf("Inserisci 1 per sommare i due numeri.\n");
printf("Inserisci 2 per sottrarre i due numeri .\n");
printf("Inserisci 3 per moltiplicare i due numeri.\n");
printf("Inserisci 4 per dividere i due numeri.\n\n");
printf("La mia scelta e':");
scanf("%d",&i);
switch(i){
case 1:
somma=a+b;
printf("\nLa somma dei due numeri e':%d\n\n",somma);
break;
case 2: 15
diff=a-b;
printf("La differenza tra i due numeri e':%d\n\n",diff);
break;
case 3:
prod=a*b;
printf("Il prodotto tra i due numeri e':%d\n\n",prod);
break;
case 4:
div=a/b;
printf("Il rapporto tra i due numeri e':%d\n\n",div);
break;
default:
printf("DEVI INSERIRE UN NUMERO DA 1 a 4\n\n");
}
}
else
printf("Il primo numero deve essere maggiore del secondo\n");
}while(a>=b);
system("pause"); /* mi consente di bloccare a video tutto il programma*/
}
ESERCITAZIONE 18/03/2016
Il debug permette di vedere se e dove ci sono problemi nel programma.
La variabile è un contenitore all’interno del quale posso metterci dei dati e la &(e-commerciale) mi permette
di entrare nell’indirizzo di memoria della variabile.
ESERCIZIO: IL MINIMO TRA DUE NUMERI
#include <stdio.h>
#include <stdlib.h>
int main (){
int numero1,numero2; //dichiarazione primo e secondo numero
printf("INSERISCI IL PRIMO NUMERO:\n");
scanf("%d",&numero1);
printf("INSERISCI IL SECONDO NUMERO:\n");
scanf("%d",&numero2);
// confronto tra i due numeri
if(numero1<numero2){
printf("il minimo e':%d\n",numero1);
}
else if(numero2<numero1){
printf("il minimo e' %d\n",numero2);
}
else if(numero1==numero2){
printf("i due numeri sono uguali");
}
system("pause");
return 0;
}
LEZIONE 8 - 21/03/2016
CICLO FOR 16
Sappiamo in questo caso quante volte eseguire l’operazione, quante iterazione vogliamo. Il costrutto è il
seguente:
for(condizionale iniziale; condizione di uscita; condizione che va a modificare il parametro su cui stiamo
facendo il controllo){
comando;
}
Esempio:
for(i=0;i<=9;i++){
comando;
}
i=0 è un’assegnazione, mentre i++ vuol dire i=i+1(si utilizza prima il valore di i e poi si incrementa). ++i
significa prima incrementa e poi usa la variabile.
BREAK-CONTINUE:
Il break non fa altro che uscire da un loop o da uno switch, il continue invece salta un’iterazione del
loop. Si possono trovare in costrutti quali while, do-while e for.
Per questi costrutti:
- all’interno del comando può comparire l’istruzione BREAK che, se eseguita, termina il ciclo;
- può comparire la keyword CONTINUE che, una volta invocata, riavvia immediatamente un nuovo
ciclo.
Consideriamo un ciclo for:
for(inizio;condizione;passo){
comando;
}
Con un while avrei:
inizio;
while(condizione){
comando;
passo;
}
Per lo switch invece:
switch(espressione){
case v1: comando1;
break;
case v2: comando2;
break;
case v3: comando3;
break;
default: comandod;
break;
}
Con un if avrei:
int tmp=espressione;
if(tmp==v1)
comando1; 17
else if(tmp==v2)
comando2;
else if(tmp==v3)
comando3;
else comandod;
per raggruppare le condizioni è possibile usare l’operatore && che rappresenta una AND: le condizioni
devono essere verificate entrambe.
ESERCIZIO:
- Calcolare la circonferenza sapendo che l’utente deve inserire il valore del raggio da tastiera. Il
calcolo deve essere effettuato solo tra 0 e 32767. Qualora l’utente metta un numero sbagliato:
dobbiamo dire che l’utente ha sbagliato e fargli reinserire un altro valore.
POSSIBILE SOLUZIONE:
#include <stdio.h>
#include <stdlib.h>
int main (){
int raggio;
float circ;
do{ printf("Inserisci un raggio compreso tra 0 e 32767:\n");
scanf("%d",&raggio);
if(raggio>=0 && raggio<=32767){
circ=2*raggio*3.14;
printf("Il valore della circonferenza e' pari a
%f\n\n",circ);
}
else printf("Valore del raggio ERRATO!\n\n");
}while(raggio<0 || raggio>32767);
system("pause");
return 0;
}
- Progettare una calcolatrice in cui il divisore deve essere diverso da 0. Se non è diverso da zero dirlo
e far inserire un nuovo valore
POSSIBILE SOLUZIONE:
#include <stdio.h> /* la uso per poter immettere dati da tastiera e per
visualizzare a schermo i risultati*/
#include <stdlib.h> /* mi serve per "implementare la funzione system("pause")
*/
int main (){
int a,b,i,somma,prod,diff,div;
do{ printf("Inserisci il primo numero:\n");
scanf("%d",&a);
printf("Inserisci il secondo numero:\n");
scanf("%d",&b); 18
if(a>=b){
printf("Inserisci 1 per sommare i due numeri.\n");
printf("Inserisci 2 per sottrarre i due numeri .\n");
printf("Inserisci 3 per moltiplicare i due numeri.\n");
printf("Inserisci 4 per dividere i due numeri.\n\n");
printf("La mia scelta e':");
scanf("%d",&i);
switch(i){
case 1:
somma=a+b;
printf("\nLa somma dei due numeri e':%d\n\n",somma);
break;
case 2:
diff=a-b;
printf("La differenza tra i due numeri e':%d\n\n",diff);
break;
case 3:
prod=a*b;
printf("Il prodotto tra i due numeri e':%d\n\n",prod);
break;
case 4:
if(b!=0){
div=a/b;
printf("Il rapporto tra i due numeri e':%d\n\n",div);
}
else {
printf("inserisci il divisore:\n");
scanf("%d",&b);
div=a/b;
printf("Il rapporto tra i due numeri e':
%d\n\n",div); }
break;
default:
printf("DEVI INSERIRE UN NUMERO DA 1 a 4\n\n");
}
}
else
printf("Il primo numero deve essere maggiore del
secondo\n"); }while(a>=b);
system("pause"); /* mi consente di bloccare a video tutto il programma*/
return 0;
}
- Algoritmo per il calcolo dei numeri primi. Cioè dato un numero vedere se è primo o meno.