PROGRAMMAZIONE: ESERCITAZIONE N. 6

Похожие документы
Esercitazione 4. Comandi iterativi for, while, do-while

1 Multipli di un numero

PROGRAMMAZIONE STRUTTURATA

Linguaggio C: introduzione

TEOREMA DEL RESTO E REGOLA DI RUFFINI

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

1 L estrazione di radice

1 Multipli e sottomultipli. Divisibilità

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

= < < < < < Matematica 1

DIVISIBILITA, DIVISORI E MULTIPLI. Conoscenze

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Metodo alternativo per il calcolo delle divisioni.

Il calcolatore. Architettura di un calcolatore (Hardware)

La codifica. dell informazione

PROGRAMMAZIONE DIDATTICA DI MATEMATICA

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

SCOMPOSIZIONE IN FATTORI PRIMI:

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Istruzioni iterative. Istruzioni iterative

DIVISIBILITA, DIVISORI E MULTIPLI. Conoscenze

COSA SONO I FLOW CHART

ESERCIZI SU IF/WHILE. Esercizio 1) Legge due numeri e controlla se il primo è multiplo del secondo.

Input/output in C e in C++

B7. Problemi di primo grado

Esame Informatica Generale 13/04/2016 Tema A

Liceo scientifico Pascal Manerbio Esercizi di matematica per le vacanze estive

Risoluzione di problemi ingegneristici con Excel

Introduzione al Linguaggio C ed all IDE DEV-C++

Stringhe di caratteri

radice quadrata.notebook January 19, 2016 La radice quadrata nov

Numeri frazionari. sistema posizionale. due modi: virgola fissa virgola mobile. posizionale, decimale

Codice binario. Codice. Codifica - numeri naturali. Codifica - numeri naturali. Alfabeto binario: costituito da due simboli

Problema: calcolare il massimo tra K numeri

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi

AE RZT QSO RKPT SQZC

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

PROPORZIONI 6 : 3 10 : 5 8 : 4 42 : 21...

FILIPPO GIOVANOLLA CLASSE IV A MERCURIO PROGRAMMA PASCAL E C++ DISEQUAZIONI DI PRIMO E SECONDO GRADO

LEZIONE 1. del 10 ottobre 2011

Il concetto di calcolatore e di algoritmo

La gestione dei caratteri in C

ARITMETICA. Scomposizione dei numeri in relazione al calcolo. Possibili agganci calcolo mentale. Ciclo. Titolo e data Contenuto Scopo N.o pag.

ANAGRAFE NAZIONALE CREDITI FORMATIVI. Manuale utente

La divisione esatta fra a e b è l operazione che dati i numeri a e b (con a multiplo di b) permette di trovare un terzo numero c tale che c b = a.

Lezioni di Informatica di Base per la Facoltà di Lettere e Filosofia. Algoritmi

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

ALLEGATO: ISTRUZIONI PER L OPERATORE DI SEDE PER ACQUISIRE LE DOMANDE TELEMATICHE DI RICONGIUNZIONE

DISPENSA NUMERI MULTIPLI, DIVISORI, PRIMI, MCD E mcm DEFINIZIONI. Multiplo di un numero

Si dice multiplo di un numero a diverso da zero, ogni numero naturale che si ottiene moltiplicando a per ciascun elemento di N.

Espressioni aritmetiche e ordine delle operazioni

Richiami di aritmetica

Le frazioni algebriche

Sommario. Calcolo della radice quadrata. Calcolo della radice quadrata. y0 a rappresenta un approssimazione per eccesso dll della radice. y 1 a.

algebra: insiemi numerici N e Q +, proprietà operazioni e calcolo linguaggio degli insiemi

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

4 0 = 4 2 = 4 4 = 4 6 = 0.

Anno 2. Radicali algebrici e aritmetici: condizioni di esistenza

Individuazione di sottoproblemi

ISTITUTO COMPRENSIVO ALLENDE SCUOLA SECONDARIA DI PRIMO GRADO ALLENDE Paderno Dugnano

Anno 3. Funzioni esponenziali e logaritmi: le 4 operazioni

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

Algoritmi. Un tema centrale dell informatica è lo studio degli algoritmi.

Procedura operativa per la gestione della funzione di formazione classi prime

SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n

Congruenze. Trovare la cifra dell unità dei seguenti numeri [3] [6] [5]

Alberi binari di ricerca

Introduzione alle macchine a stati (non definitivo)

SCUOLA PRIMARIA MATEMATICA (Classe 1ª)

Sistemi Web per il turismo - lezione 3 -

Mini-Corso di Informatica

Strutture di controllo in C++

CURRICOLO di MATEMATICA classe terza

m = a k n k + + a 1 n + a 0 Tale scrittura si chiama rappresentazione del numero m in base n e si indica

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Guida alla gestione delle domande di Dote Scuola per l A.S Scuole Paritarie

Equazioni Polinomiali II Parabola

Monomi e Polinomi. Monomio Si dice monomio un espressione letterale in cui figurano solo operazioni di moltiplicazione.

METODI E TECNOLOGIE PER L INSEGNAMENTO DELLA MATEMATICA. Lezione n

Strutture di accesso ai dati: B + -tree

STIMA PIU CHE PUOI Un gioco per diventare abili stimatori

AUTOAGGIORNAMENTO GIUGNO 2006 REVISIONE PROGRAMMAZIONE DI CIRCOLO INDIVIDUAZIONE PUNTI NODALI COSTRUZIONE MAPPE CONCETTUALI PUNTI NODALI

LA CALCOLATRICE. come non farsi prendere la mano nell'uso dello strumento e non cadere in panico se per caso ci accorgessimo che ha le pile scariche!

Транскрипт:

PROGRAMMAZIONE: ESERCITAZIONE N. 6 Esercizi su stru+ure condizionali e itera1ve Conoscenze richieste: LC1+LC2+LC3+LC4+LC5+LC6

Esercizio 1 Acquisire un numero positivo N e calcolarne la radice quadrata intera (ovvero il massimo intero x tale che x 2 N). NB: in caso di difficoltà rivedere i lucidi di teoria dove si descrive Esercizio 2 un algoritmo mediante diagrammi di flusso. Scrivere un programma che riceva in ingresso un numero positivo N e determini il massimo intero K tale che la somma dei primi K interi sia minore o uguale a N. Ad esempio, se N=20 allora K risulta 5, infatti 1 + 2 + 3 + 4 + 5 = 15 mentre 1 + 2 + 3 + 4 + 5 + 6 = 21 Elementi di Informatica e Programmazione Università di Brescia 2

Esercizio 3 Acquisire una serie di numeri da tastiera finché viene inserito lo zero e stampare la somma degli ultimi tre numeri inseriti (0 escluso). NB: in caso di difficoltà rivedere nei lucidi l esempio sulla serie di Fibonacci. Esercizio 4 Scrivere un programma C che, ricevendo in ingresso una sequenza di lunghezza arbitraria di numeri interi terminata da uno zero, produca in uscita la sequenza di tre elementi contigui la cui somma è massima (se sono presenti più sequenze con somma massima, è sufficiente stampare la prima). Per semplicità, si assuma che la sequenza inserita comprenda almeno tre numeri interi oltre lo zero. Ad esempio, se l'utente inserisce la sequenza 7, 2, 19, 4, 45, 3, 7, 9, 3, 0 il programma termina e stampa 19, 4, 45. Elementi di Informatica e Programmazione Università di Brescia 3

Esercizio 5 Acquisire un intero N>0, ripetendo l acquisizione se l utente non inserisce un valore strettamente positivo. Stampare quindi il numero di cifre che costituiscono il numero. Ad esempio, se l utente inserisce 123 il programma stampa 3, se l utente inserisce 10500 il programma stampa 5. Esercizio 6 Acquisire un intero N>0, ripetendo l acquisizione se l utente non inserisce un valore strettamente positivo. Stampare quindi la cifra di valore minimo e la cifra di valore massimo tra quelle che costituiscono il numero. Ad esempio, se l utente inserisce 123 il programma stampa 1 e 3, se l utente inserisce 10500 il programma stampa 0 e 5. Elementi di Informatica e Programmazione Università di Brescia 4

NOTA: gli esercizi seguenti richiedono la conoscenza degli operatori logici &&, ecc. Elementi di Informatica e Programmazione Università di Brescia 5

Esercizio 7: dal tema d esame ING-INF del 28 gennaio 2009 Si sviluppi un programma in linguaggio C che, come nel caso di una macchina distributrice di caffè, riceve in ingresso un numero intero positivo N (corrispondente ad un importo da pagare in centesimi) e, successivamente, una sequenza di numeri interi corrispondenti alle monete inserite, che possono essere da 1, 5, 10, 20 e 50 centesimi. Il programma deve ripetere l acquisizione di ciascun numero se non corrisponde ad una moneta tra quelle indicate. Appena l importo richiesto N viene raggiunto o superato, il programma interrompe l acquisizione della sequenza e restituisce una serie di numeri interi corrispondenti al resto in monete da 1 e 5 centesimi. Ad esempio, se il programma riceve N=101 e la sequenza 50, 20, 20, 20, produce in uscita 5, 1, 1, 1, 1 Elementi di Informatica e Programmazione Università di Brescia 6

Esercizio 8 Calcolare il massimo comun divisore e il minimo comune multiplo di due numeri interi forniti dall utente. NB: in caso di difficoltà rivedere nei lucidi l esempio sulla verifica di numero primo. Esercizio 9 Scrivere un programma che acquisisca da tastiera un numero intero assicurandosi che sia positivo e, successivamente, stampi a video i 5 anni bisestili strettamente superiori al numero acquisito. NB: la regola per riconoscere un anno bisestile è stata spiegata in aula (ovviamente si supponga di averla a disposizione!). Elementi di Informatica e Programmazione Università di Brescia 7

Esercizio 10 Tema d esame 17 febbraio 2011, esercizio 2 (scaricabile dal sito) Elementi di Informatica e Programmazione Università di Brescia 8

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. Elementi di Informatica e Programmazione Università di Brescia 9

SOLUZIONE ESERCIZIO 2 Scrivere un programma che riceva in ingresso un numero positivo N e determini il massimo intero K tale che la somma dei primi K interi sia minore o uguale a N. Ad esempio, se N=20 allora K risulta 5, infatti 1 + 2 + 3 + 4 + 5 = 15 mentre 1 + 2 + 3 + 4 + 5 + 6 = 21 Primo passo (se si è in difficoltà): provare a risolvere a mano qualche istanza del problema P. es. N=6 1 + 2 + 3 = 6 6 1 + 2 + 3 + 4 = 10 > 6 Risultato: 3 Elementi di Informatica e Programmazione Università di Brescia 10

Secondo passo: individuare un metodo risolutivo Dato N - una variabile i scandisce i numeri 1, 2, 3, (userò un ciclo) - una variabile somma tiene conto della somma parziale SOMMA = SOMMA + i FERMATI QUANDO 1 + 2 + 3 + 4 + 5 +... + (i 1) + i > N RISULTATO Elementi di Informatica e Programmazione Università di Brescia 11

Terzo passo: sviluppare l algoritmo: è importante dare un significato preciso alle variabili! int i, somma, N, K; printf( Inserire il numero positivo N\n ); scanf( %d, &N); i=1; // ultimo indice già sommato somma=1; // somma corrente (avendo già sommato i) while(somma<=n){ // esci quando somma supera strettamente N i=i+1; somma=somma+i; } K = i-1; Elementi di Informatica e Programmazione Università di Brescia 12

SOLUZIONE ESERCIZIO 7 Si sviluppi un programma in linguaggio C che, come nel caso di una macchina distributrice di caffè, riceve in ingresso un numero intero positivo N (corrispondente ad un importo da pagare in centesimi) e, successivamente, una sequenza di numeri interi corrispondenti alle monete inserite, che possono essere da 1, 5, 10, 20 e 50 centesimi. Il programma deve ripetere l acquisizione di ciascun numero se non corrisponde ad una moneta tra quelle indicate. Appena l importo richiesto N viene raggiunto o superato, il programma interrompe l acquisizione della sequenza e restituisce una serie di numeri interi corrispondenti al resto in monete da 1 e 5 centesimi. Ad esempio, se il programma riceve N=101 e la sequenza 50, 20, 20, 20, produce in uscita 5, 1, 1, 1, 1 Elementi di Informatica e Programmazione Università di Brescia 13

NOTA: a scopo didattico si risolverà il problema senza utilizzare le operazioni di divisione intera e di resto, che semplificano il problema (gli studenti invece erano autorizzati ad usarle) Elementi di Informatica e Programmazione Università di Brescia 14

Primo passo (se si è in difficoltà): provare a risolvere a mano qualche istanza del problema ES: N=96 e inserisco 50, 20, 20, 50 continua continua SI FERMA: la somma 50+20+20+50=140 >= 96 continua Poi devo restituire un resto di 140-96 = 44 in monete da 5 e 1 conto 5-5-5-5 fino ad arrivare a 40 poi conto 1-1-1-1 fino ad arrivare a 44 Si è già individuato un metodo risolutivo! Elementi di Informatica e Programmazione Università di Brescia 15

Secondo passo: una prima scomposizione (tipicamente a mente) Acquisisci N e una successione di monete dall utente, calcolando l importo pagato A questo punto resto= pagato-n Ciclo per calcolare le monete da 5 (sommo 5 fino a resto + o ) Ciclo per calcolare le monete da 1 (sul resto mancante) Elementi di Informatica e Programmazione Università di Brescia 16

Terzo passo: individuare un metodo risolutivo per il primo punto Dato N importo da pagare: - devo fare un ciclo che continua ad acquisire una moneta - scopo del ciclo: calcolare la somma pagata, immagazzinata in una variabile che chiamo pagato - la variabile pagato tiene conto della somma parziale pagato = pagato + moneta FERMATI QUANDO 5 + 1 + 5 + 10 + 20 +... + 50 >= N Elementi di Informatica e Programmazione Università di Brescia 17

Ultimo passo: sviluppare l algoritmo: è importante dare un significato preciso alle variabili! int N, pagato, moneta, resto; printf( Inserisci l importo\n ); scanf( %d, &N); printf( Inserisci sequenza monete\n ); pagato=0; // somma corrente (già sommata ultima moneta) while(pagato<n) { // esci quando somma è maggiore o uguale a N <Acquisisci moneta controllandola>; } pagato=pagato+moneta; resto=pagato-n; //somma da restituire! while(resto>=5){ //esci quando somma da restituire <5 printf( 5 ); resto=resto-5; } Elementi di Informatica e Programmazione Università di Brescia 18

//resto contiene ancora la somma da restituire while(resto>0){ printf( 1 ); resto=resto-1; } //continua se c è ancora qualcosa da restituire A questo punto bisogna solo esplodere la pseudoistruzione <Acquisisci moneta controllandola>; Ecco come: do scanf( %d, &moneta); while(moneta!=1 && moneta!=5 && moneta!=10 && moneta!=20 && moneta!=50); Elementi di Informatica e Programmazione Università di Brescia 19

Programma completo #include <stdio.h> #include <stdlib.h> int main() { int N, pagato, moneta, resto; printf("inserisci l'importo\n"); scanf("%d", &N); printf("inserisci sequenza monete\n"); pagato=0; // somma corrente (già sommata ultima moneta) while(pagato<n){ // esci quando somma è maggiore o uguale a N do scanf("%d", &moneta); while(moneta!=1 && moneta!=5 && moneta!=10 && moneta!=20 && moneta!=50); pagato=pagato+moneta; } while(resto>=5){ //esci quando somma da restituire <5 printf("5 "); resto=resto-5; } while(resto>0){ //continua se c è ancora qualcosa da restituire printf("1 "); resto=resto-1; } printf("\n"); system("pause"); return 0; } resto=pagato-n; //somma da restituire! Elementi di Informatica e Programmazione Università di Brescia 20

SOLUZIONE (PARZIALE) ESERCIZIO 9 Scrivere un programma che acquisisca da tastiera un numero intero assicurandosi che sia positivo e, successivamente, stampi a video i 5 anni bisestili strettamente superiori al numero acquisito. Sul problema c è poco da capire: la difficoltà sta nell algoritmo acquisisci N; numbisestili=0; ultbisestile=n; // numero di anni trovati (e stampati) // ultimo anno bisestile trovato (quasi) while(numbisestili<5){ // esci quando sono già stati trovati 5 anni } calcola e stampa il primo anno bisestile superiore a ultbisestile; aggiorna ultbisestile con l anno trovato; numbisestili++; VEDIAMO LA PARTE CENTRALE DEL CODICE Elementi di Informatica e Programmazione Università di Brescia 21

numbisestili=0; ultbisestile=n; // numero di anni trovati e stampati // (serve trovare il successivo bisestile) while(numbisestili<5){ Trova bisestile successivo } ultbisestile++; while(!( ((ultbisestile % 100!= 0) && (ultbisestile % 4 ==0)) (ultbisestile % 400 ==0)) ) ultbisestile++; numbisestili++; printf("anno bisestile successivo numero %d = %d\n", numbisestili, ultbisestile); Elementi di Informatica e Programmazione Università di Brescia 22