Esercizi di base su strutture di controllo iterative

Transcript

Esercizi di base su strutture di controllo iterative
PROGRAMMAZIONE: ESERCITAZIONE N. 3 Nota: esercizi di bassa/media difficoltà, per imparare a usare le istruzioni itera8ve (while, do-­‐while, for) e muovere i primi passi con il ragionamento “algoritmico”
Conoscenze richieste: LC1+LC2+LC3+LC4 1) Scrivere un programma che stampa a video un quadrato di 10 X 10 asterischi, mediante un ciclo while che ripete 10 volte il comando di stampa prinF(“**********\n”); Ripetere l’esercizio usando un ciclo for. > In caso di difficoltà, rivedere il lucido 22 + 51/54 2) Scrivere un programma che, usando un ciclo while, stampa a video i numeri interi pari da 10 a 2 (in ordine decrescente). Ripetere l’esercizio usando un ciclo for. > In caso di difficoltà, rivedere i lucidi 23-­‐28 + 54 3) Scrivere un programma che acquisisce dall’utente un intero posi8vo N, quindi usando un ciclo for stampa i mul8pli di 5 che siano minori o uguali a N, a par8re da 0 (ad esempio, se l’utente inserisce 27 stampa 0, 5, 10, 15, 20, 25). > In caso di difficoltà, rivedere i lucidi 23-­‐28 + 54 4) Scrivere un programma che acquisisce dall’utente due numeri, quindi chiede di inserire la somma. Fino a quando l’utente non inserisce la somma correUa, il programma stampa la frase “Errato: riprova” e ripete l’acquisizione; appena l’utente inserisce la somma correUa, il programma stampa la parola “Bravo” e termina. > In caso di difficoltà, rivedere i lucidi 13 e 14 ed eventualmente i lucidi 30-­‐-­‐31 5) Scrivere un programma che acquisisce da tas8era un numero intero n streUamente posi8vo (ripetendo l’acquisizione in caso in cui questa condizione non sia soddisfaUa), quindi calcola la sommatoria n
∑i
3
i=1
> In caso di difficoltà, rivedere i lucidi 32-­‐34. Si noA inoltre che i3=i*i*i > Scegliendo n sufficientemente grande, il programma darà risultaA molto strani. Vedremo in futuro perché… 6) Scrivere un programma che riceva in ingresso una sequenza arbitraria di interi posi8vi terminata dal numero zero e produca come risultato la media intera dei valori di ingresso (escludendo l’ul8mo valore pari a 0). Ogni volta che viene inserito un numero, il programma deve controllare che sia maggiore o uguale a zero e, nel caso non lo sia, avvisare l’utente dell’errore e riacquisire un nuovo numero. Se l’utente inserisce solo il valore nullo, il programma deve stampare al posto della media un messaggio di errore. 7) [DA UN TEMA D’ESAME DI FONDAMENTI DI INFORMATICA A – 5CFU] Scrivere un programma C che, ricevendo in ingresso una sequenza di lunghezza arbitraria di interi, terminata da uno zero, determini se la sequenza è composta da un solo numero ripetuto (zero escluso). Ad esempio, se l'utente inserisce la sequenza 1, 2, 1, 3, 0 il programma stampa il messaggio ``Ci sono numeri diversi tra loro'', se l'utente inserisce la sequenza 1, 1, 1, 1, 1, 0 il programma stampa il messaggio ``I numeri sono tug uguali''. > Suggerimento: in caso di difficoltà, rivedere i lucidi sulla verifica esistenziale e universale. 8) Scrivere un programma che acquisisce dall’utente un numero NUM e determina se NUM può essere il risultato della sommatoria dell’esercizio 5, con n opportuno. In altre parole, dato NUM il programma deve determinare se esiste n tale che n
NUM = i 3
i=1
In caso posi8vo il programma deve res8tuire n, in caso nega8vo deve stampare un opportuno messaggio. Ad esempio, se NUM=36 il programma stampa “Trovato n=3”, se NUM=40 il programma stampa “Impossibile trovare n”. ∑
SOLUZIONI
DISPONIBILI
Gli studenti sono fortemente incoraggiati a sperimentare le
proprie soluzioni al calcolatore. Nel correggere gli errori
che inevitabilmente saranno commessi, si suggerisce di non
procedere per tentativi bensì di identificare precisamente
la causa del comportamento inatteso del programma sviluppato.
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
7
6) Scrivere un programma che riceva in ingresso una sequenza arbitraria di interi positivi
terminata dal numero zero e produca come risultato la media intera dei valori di ingresso
(escludendo l’ultimo valore pari a 0).
Ogni volta che viene inserito un numero, il programma deve controllare che sia
maggiore o uguale a zero e, nel caso non lo sia, avvisare l’utente dell’errore e riacquisire
un nuovo numero.
Se l’utente inserisce solo il valore nullo, il programma deve stampare al posto della media
un messaggio di errore.
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
8
Primo passo: capire il problema
Se ho acquisito num1, num2, …, numn:
devo calcolare
num1+ num2+ …+ numn
media =
n
Secondo passo: l’idea
Ciclo per acquisire i numeri (esce quando acquisisce 0):
- durante il ciclo, tengo conto di:
somma , quanti numeri inseriti
Terzo passo: sviluppare l’algoritmo, eventualmente per “raffinamenti
successivi” (si può partire da “pseudocodice”)
Come sviluppo il ciclo? do-while o while?
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
9
do{
acquisisci num eventualmente ripetendo acquisizione;
if(num>0)
aggiorna somma e la quantità di numeri inseriti;}
while(num!=0);
calcola e stampa la media
scanf(“%d”, &num);
while(num<0){
printf(“Devi inserire un numero non negativo!\n”);
scanf(“%d”, &num);
}
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
10
int somma, i, num, media;
printf(“Inserire i numeri positivi, 0 per terminare\n”);
somma=0;
// somma parziale
i=0;
// quanti numeri già inseriti e sommati
do{
scanf(“%d”,&num);
// acquisisci num (con ripetizioni)
while(num<0){
printf(“Devi inserire un numero non negativo!\n”);
scanf(“%d”,&num);
}
if(num>0){
// aggiorna somma e i
somma=somma+num;
i=i+1; }
while(num!=0);
if(i!=0){
media=somma/i;
printf(“Media dei numeri inseriti=%d\n“, media);
}
else printf(“Devi inserire almeno un numero\n”);
Prof. M. Giacomin
Elementi di Informatica e Programmazione – Università di Brescia
11