70 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
C - Strutture di controllo
while (<condizione>) {
<istruzioni>;
} Cicli iterativi
<Istruzione/i> sarà eseguito tante volte fintantoché <condizione> risulta vera
N.B. < condizione> è un’espressione di tipo intero (in C non esiste il tipo logico) ed essa è verificata se ha un valore diverso da zero
a condizione iniziale while (<condizione>)
<istruzione>;
71 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
main () {
int Num;
printf( "immetti un numero \n”);
scanf(“%d” , &Num);
while (Num<=100) Num=Num+10;
printf ( ”Numero= %d \n”, Num);
}
Esempio Ciclo while
72 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
C - Strutture di controllo
do {
<istruzioni>;
}
while <condizione>;
Cicli iterativi
<Istruzione/i> sarà eseguito tante volte fintantoché <condizione> risulta vera
N.B. < condizione> è un’espressione di tipo intero (in C non esiste il tipo logico) ed essa è verificata se ha un valore diverso da zero
a condizione finale do
<istruzione>;
while <condizione>;
#include <stdio.h>
main () {
int Num;
printf( "immetti un numero \n”);
scanf(“%d” , &Num);
do
Num=Num+10;
while (Num <=100);
printf ( ”Numero= %d \n”, Num);
}
Esempio Ciclo do … while
74 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
C - Strutture di controllo
Ciclo ripetitivo (a conteggio)
for (<espressione1>; <condizione>; <espressione2>) <istruzione>;
for (<espressione1>; <condizione>; <espressione2>) {
<istruzioni>;
}
<espressione1>: è l’espressione usata per inizializzare la variabile di controllo del ciclo
<condizione>: è l’espressione logica per verificare la terminazione del ciclo
<espressione2>: è l’espressione usata per determinare il passo di incremento della variabile di controllo
Es:
for (i=1; i<100; i++) printf(“%d “, i);
75 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
main () {
int Num;
printf( "immetti un numero \n”);
scanf(“%d” , &Num);
for (i=1;i<=10;i++)
printf ( “%d \n”, Num*i);
}
Esempio Ciclo for
Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio 76
Operatore di cast in C
Il linguaggio C permette di forzare una variabile di un tipo ad essere una variabile di un'altro tipo utilizzando l'operatore cast "( )".
Il costrutto cast ha la seguente sintassi:
(<nome tipo da forzare>) <espressione>
Esempio:
float numero_reale = 7.234;
int numero = 8;
float altro_reale;
numero=(int) numero_reale; /* forza il tipo di numero_reale ad essere int ed assegna il valore 7 (parte intera) a numero*/
altro_reale=(float ) numero /* assegna 7.0 (valore float) ad altro_reale */
Operatore di cast in C
Alcune operazioni di cast di tipo sono fatte automaticamente, principalmente in relazione alle capacità dei numeri interi.
E' opportuno eseguire esplicitamente operazioni di cast tutte le volte che si ha un dubbio sulla corrispondenza tra i tipi in operazioni di calcolo ed
assegnazione.
E’ il caso delle divisioni: se abbiamo la divisione tra due numeri interi e vogliamo che il risultato sia un numero reale, allora deve essere eseguito il cast sui due numeri interi.
Esempio:
int dividendo= 13, divisore = 4;
float risultato;
risultato = (float) dividendo / (float) divisore;
… sarà: risultato = 3.25
… e non risultato = 3.0 come risulterebbe dalla divisione intera:
78 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
Esempio Analisi e Specifica
Definizione del problema: data in input una sequenza di caratteri, terminante con il carattere ‘F’, dire quante volte nella sequenza è presente un certo carattere fornito in input
Definizione dei dati del problema:
I: un carattere della sequenza; il carattere da cercare Pi: il carattere ‘F’termina la sequenza; il carattere da cercare è diverso da ‘F’
U: il numero di volte per cui il carattere da cercare è nella sequenza
Pu: nessuna
79 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
Esempio
Nome variabile Descrizione Tipo
C carattere della sequenza CHAR Cerca carattere da cercare CHAR
Nome variabile Descrizione Tipo
Volte Il numero di presenze di Cerca INT nella sequenza
Tabella delle variabili di ingresso
Tabella delle variabili di uscita
80 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
Esempio Progettazione
Descrizione del metodo di elaborazione:
• è letto il valore del carattere da cercare nella sequenza fin quando è diverso da ‘F’;
• è letto un carattere della sequenza;
• si confronta il carattere letto con quello da cercare
• se essi sono ugualu si incrementa di una unità il contatore delle presenze del numero nella sequenza
• si continua dal secondo punto fino all’immissione di ‘F’
• si stampa il valore del contatore delle presenze del carattere nella sequenza
#include <stdio.h>
main () {
// trova e conta carattere in sequenza caratteri int Volte;
char C, Cerca;
do
{ printf("immetti il carattere da cercare \n");
scanf("%c", &Cerca);
}
while (Cerca=='F');
printf("carattere da cercare = %c \n", Cerca);
Volte=0;
do
{ printf ( "immetti un carattere della sequenza \n");
scanf("%c", &C);
if (C==Cerca) Volte=Volte+1;
}
while (C!='F');
printf ("Carattere %c presente %d volte \n", Cerca, Volte);
system("Pause");
Esempio
82 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
.... problema che può sorgere con l’uso di scanf (….) in un ciclo per leggere il valore di una variabile di tipo carattere, o comunque quando si effettuano più successive operazioni di lettura di valori di variabili di tipo carattere …
supponiamo di avere il seguente codice:
{ printf("immetti il carattere da cercare \n");
scanf("%c", &Cerca);
} …………
{
{printf ("immetti un carattere della sequenza \n");
scanf("%c", &C);
………
}
… possiamo avere qualche problema durante l’esecuzione….
…. Osservazioni ….
83 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
… In esecuzione …
immetti il carattere cercare B
carattere da cercare = B
immetti un carattere della sequenza immetti un carattere della sequenza
…. il problema è dovuto al trattamento del <return> ….
…. un modo per risolverlo ….
{ printf("immetti il carattere da cercare \n");
scanf("%c", &Cerca);
} { …………
{printf ("immetti un carattere della sequenza \n");
scanf(“\n%c", &C);
………
}
…. Osservazioni ….
84 Elementi di Informatica
Prof. G. A. Di Lucca - Univ. del Sannio
#include <stdio.h>
main () {
// trova e conta carattere in sequenza caratteri - BETTER int Volte;
char C, Cerca;
do
{ printf("immetti il carettere da cercare \n");
scanf(“\n%c", &Cerca);
}
while (Cerca=='F');
printf("carattere da cercare = %c \n", Cerca);
Volte=0;
do
{ printf ( "immetti un carattere della sequenza \n");
scanf("\n%c", &C);
if (C==Cerca) Volte=Volte+1;
}
while (C!='F');
printf ("Carattere %c presente %d volte \n", Cerca, Volte);
system("Pause");
}