• Non ci sono risultati.

C -Strutture di controllo

N/A
N/A
Protected

Academic year: 2021

Condividi "C -Strutture di controllo"

Copied!
9
0
0

Testo completo

(1)

72 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>;

73 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

(2)

74 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>;

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);

do

Num=Num+10;

while (Num <=100);

printf ( ”Numero= %d \n”, Num);

}

Esempio Ciclo do … while

(3)

76 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);

77 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

(4)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 78

Operatore di cast in C

C permette di forzare una variabile di un tipo a ‘comportarsi’ come una variabile di un altro tipo usando l'operatore di cast.

Il costrutto cast ha la seguente sintassi:

(<nome tipo da forzare>) <espressione>

Es. : int X=10; (float) X ==> 10.00 Es.

int numero_intero = 7;

float num_reale;

num_reale = (float) numero_intero/2;

fa ‘vedere’ la variabile numero_intero come se fosse di tipo float

num_reale = 3.5000 Senza il cast:

num_reale = 3.0000

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 79

Operatore di cast in C

Esempio:

#include<stdio.h>

main ( )

/* programma esempio CAST */

{ int numero_intero = 7;

float num_reale;

printf("numero con formato decimale = %d\n", numero_intero);

printf("\nnumero intero con formato float = %f\n\n", numero_intero);

printf("numero intero con cast float = %f\n", (float) numero_intero );

num_reale = numero_intero/2;

printf("\n Risultato divisione senza cast : numero reale = %f \n", num_reale);

num_reale = (float) numero_intero/2;

printf("\n Risultato divisione applicando il cast : numero reale = %f \n", num_reale);

system("Pause");

}

(5)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 80

Operatore di cast in C

il numero è un intero, ma formato è float … Stampato come float, riportati i decimali dopo la virgola

… divisione tra numeri interi, parte decimale troncata …

… il cast fa ‘vedere’ il numero come se fosse un float …

… come se fosse divisione tra float …

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 81

Operatore di cast in C

Alcune operazioni di cast di tipo sono fatte automaticamente, principalmente in relazione alle capacità dei numeri interi, ad esempio assegnando un valore float ad una variabile di tipo int (è automaticamente troncata la parte decimale)

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:

risultato = dividendo / divisore;

(6)

82 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

83 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

(7)

84 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

85 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

#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

(8)

86 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 ….

87 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 ….

(9)

88 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

main () {

// trova e conta carattere in sequenza caratteri - versione migliore 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");

}

Esempio

Riferimenti

Documenti correlati

Manteniamo la regola che i numeri positivi iniziano con 0 e quelli negativi con 1 e proviamo ad usare il complemento a 1: ogni numero negativo si ottiene dal

Nel 12 d.C., alla morte di Ottaviano Augusto, gli succedette come imperatore. Quanti anni passarono tra i due eventi

Nelle attività introduttive abbiamo incontrato alcune situazioni nelle quali i numeri naturali non sono più sufficienti. Essi formano l’insieme dei numeri interi relativi

Le tre seguenti successioni di numeri interi sono state scritte seguendo un preciso procedimento

Sulla retta numerica l’addizione di un numero positivo si rappresenta con uno spostamento in senso positivo, cioè verso destra. L’addizione di un numero negativo si

caratteristica molto interessante: ogni sottrazione con numeri interi relativi può essere trasformata in un'addizione. Ogni sottrazione in Z può essere trasformata in un’addizione

Aggiungi una decina a tutti i numeri e scrivi nella casella sotto

PER ADDIZIONE ALGEBRICA ( O SOMMA ALGEBRICA) SI INTENDE L’OPERAZIONE CHE PRENDE IN CONSIDERAZIONE SIA LA SOMMA CHE LA DIFFERENZA. NB: OGNI NUMERO INTERO PUO’ ESSERE