Blue Flower

La ripetizione precondizionale

Nel linguaggio C la ripetizione precondizionale, cioè con controllo iniziale della condizione, si rappresenta con l’istruzione while:

while (condizione)
{

istruzioni;
}

Mentre la condizione si mantiene vera, viene eseguito il blocco di istruzioni racchiuso tra le parentesi graffe.
Per esempio se si vuole far entrare da tastiera un elenco di numeri, segnalando la fine dell’elenco con il numero 0, si può utilizzare il seguente frammento di programma C.

printf("inserire un numero (0=fine): ");
scanf("%d", &numero);
while (numero != 0)
{

..........;
..........;
printf("inserire un altro numero (0=fine): ");
scanf("%d", &numero);
}

Se, invece, si vuole inserire un elenco di nomi, usando il carattere * per segnalare la fine dell’elenco, si può scrivere:

char nome[20];
printf("Nome (*=fine): ");
scanf("%s", nome);
while (nome[0] != '*')
{

..........;
..........;
printf("Nome (*=fine): ");
scanf("%s", nome);
}

Si deve osservare che, poiché la variabile nome è una stringa di 20 caratteri, il confronto del carattere *, che segnala la fine dell’inserimento, deve essere fatto con il primo carattere della stringa (carattere della posizione 0 della stringa) indicato con nome[0].

ESEMPIO: Divisione tra interi usando le sottrazioni successive

Presi in considerazione due numeri interi, si tratta di sottrarre al primo numero il secondo e di controllare quando il primo numero diventa minore del secondo. Le sottrazioni ripetute vanno contate e il numero di queste fornisce il quoziente. La parte rimanente del primo numero dopo le sottrazioni ripetute è il resto.

Programma C

/* Divisione.c : divisione tra interi
con sottrazioni successive */
#include <stdio.h>
main()
{

/* input */
int a, b;
/* output */
int quoz; /* quoziente della divisione tra interi */
printf("Due numeri: ");
scanf("%d %d", &a, &b);
quoz = 0;
while (a >= b)
{

a=a-b;
quoz++;
}
printf("quoziente = %d \n",quoz);
printf("resto = %d \n",a);
}

ESEMPIO: Modificare il programma presentato nel paragrafo 9, per contare i maggiorenni presenti in un elenco di persone, controllando la ripetizione con una struttura di ripetizione precondizionale

Viene riproposto il problema del paragrafo 9 per mostrare come si presenta la soluzione quando si utilizza la struttura di ripetizione precondizionale.
Alla richiesta dei dati di ogni persona viene suggerito all’utente di segnalare la fine dell’elenco digitando un carattere speciale (per esempio un asterisco) al posto del nome. Il nome della prima persona viene richiesto all’esterno del ciclo e le operazioni di scansione dell’intero elenco sono eseguite mentre il nome è diverso dal carattere speciale (asterisco).

Programma C

/* Elenco2.c : elenco di persone */
#include <stdio.h>
main()
{

/* input */
char nome[20];
int eta;
/* output */
int conta = 0;
printf("Nome (* = fine): ");
scanf("%s", nome);
while (nome[0] != '*')
{

printf("Eta': ");
scanf("%d", &eta);
if (eta >= 18)
conta++;
printf("Nome (* = fine): ");
scanf("%s", nome);
}
printf("I maggiorenni sono = %d \n",conta);
}