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