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().