07. Controllo dell'input
Esercizio
Acquisire due numeri interi positivi nelle variabili A, B con A<B.
Nel caso in cui i numeri inseriti non siano corretti richiedere nuovamente l'input.
Effettuare il conteggio e la somma dei numeri inclusi nell'intervallo ]A;B] che siano contemporaneamente dispari e multipli di 7.
(La parentesi quadre indicano che si tratta di un intervallo aperto a sinistra e chiuso a destra e pertanto nelle operazioni di conteggio e somma occorre escludere l'estremo A e includere l'estremo B.)
Esempio di esecuzione n. 1:
Inserire due numeri interi: 7 -6
Input errato. Ripetere l'inserimento: 1 7
Conteggio: 1
Somma: 7
Esempio di esecuzione n. 2:
Inserire due numeri interi: 7 14
Conteggio: 0
Somma: 0
Svolgimento
#include <stdio.h>
#include <stdlib.h>
int main()
{
int A, B, i, cont, somma;
printf("Inserire due numeri interi: ");
scanf("%d %d", &A, &B);
while (!( (A>0 && B>0) && (A<B) )){
printf("Input errato. Ripetere l'inserimento: ");
scanf("%d %d", &A, &B);
}
cont=0;
somma=0;
i=A+1;
while (i<=B){
if ( (i/2*2 != i) && (i/7*7 == i) ){
cont++;
somma+=i;
}
i++;
}
printf("Conteggio: %d\n", cont);
printf("Somma: %d\n", somma);
return 0;
}
Commento
La variabile utilizzata nel ciclo è detta indice. Per assonanza solitamente si utilizza la lettera i per richiamare questa variabile.
Per verificare l'input è conveniente inserire nel ciclo while di controllo le condizioni che devono essere soddisfatte riportate senza alterazioni
( (A>0 && B>0) && (A<B) )
e negarle successivamente con l'operatore NOT (!)
!( (A>0 && B>0) && (A<B) )
Fare attenzione alle parentesi (il NOT deve negare l'intera espressione e non una parte di essa).
Per effettuare la somma si è utilizzata la formula contratta
somma+=i;
che equivale a
somma=somma+i;
Prima di entrare nel ciclo è necessario inizializzare le variabili utilizzate nel ciclo stesso. E' buona norma, per leggibilità, effettuare le inizializzazioni subito prima di iniziare il ciclo.
────══════♦☆♦══════────
Esercizio
Acquisire due numeri interi positivi nelle variabili X, Y, verificando che sia rispettata la relazione |X+Y|<|X|+|Y|.
Nel caso in cui i numeri inseriti non rispettino la relazione richiedere nuovamente l'input.
Effettuare il conteggio e la somma dei numeri inclusi nell'intervallo ]X+Y;|X|+|Y|] che terminano con la cifra 3 o la cifra 4.
Con le barre verticali si è indicato il valore assoluto.
Esempio di esecuzione:
Inserire due numeri interi: 7 9
Input errato. Ripetere l'inserimento: -8 2
Conteggio: 4
Somma: 0
Svolgimento
#include <stdio.h>
#include <stdlib.h>
int main()
{
int X, Y, i, ii, cont, somma, XX, YY,XY, cifra;
printf("Inserire due numeri interi: ");
scanf("%d %d", &X, &Y);
if (X<0)
XX=-X;
else
XX=X;
if (Y<0)
YY=-Y;
else
YY=Y;
if (X+Y<0)
XY=-(X+Y);
else
XY=X+Y;
while (!(XY<XX+YY)){
printf("Input errato. Ripetere l'inserimento: ");
scanf("%d %d", &X, &Y);
if (X<0)
XX=-X;
else
XX=X;
if (Y<0)
YY=-Y;
else
YY=Y;
if (X+Y<0)
XY=-(X+Y);
else
XY=X+Y;
}
cont=0;
somma=0;
i=X+Y+1;
while (i<=XX+YY){
if (i<0)
ii=-i;
else
ii=i;
cifra=ii - (ii/10*10); // esempio i=-273 ii=273 cifra=273-270
if ( cifra==3 || cifra==4 ){
cont++;
somma+=i;
}
i++;
}
printf("Conteggio: %d\n", cont);
printf("Somma: %d\n", somma);
return 0;
}
Commento
La variabile utilizzata nel ciclo è detta indice. Per assonanza solitamente si utilizza la lettera i per richiamare questa variabile.
Per verificare l'input è conveniente inserire nel ciclo while di controllo le condizioni che devono essere soddisfatte riportate senza alterazioni
(XY<XX+YY)
e negarle successivamente con l'operatore NOT (!)
!(XY<XX+YY)
Fare attenzione alle parentesi (il NOT deve negare l'intera espressione e non una parte di essa).
Nel ciclo creato per il controllo dell'input sono acquisite nuovamente le variabili X e Y. Di conseguenza è necessario effettuare nuovamente il calcolo dei valori assoluti.
Prima di entrare nel ciclo è necessario inizializzare le variabili utilizzate nel ciclo stesso. E' buona norma, per leggibilità, effettuare le inizializzazioni subito prima di iniziare il ciclo.
Per scelta didattica il valore assoluto è calcolato mediante il costrutto if senza ricorrere alla funzione di libreria standard abs().
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 05. Esercizi svolti
Paragrafo: 07. Controllo dell'input
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. printf e scanf - 02. Swap di variabili - 03. if - 04. Numeri pari - 05. if/else - 06. while - 07. Controllo dell'input - 08. for - 09. Operatore % - 10. Funzioni - 11. Tipo float - 12. Tipo char - 13. Stringhe - 14. File