Introduzione alla programmazione Esercizi risolti

Похожие документы
PROGRAMMAZIONE STRUTTURATA

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Esercizi di programmazione in linguaggio C - Costrutto iterazione

Diagrammi a blocchi 1

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

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Linguaggio C++ 8. Matrici

Costrutti condizionali e iterativi

Istruzioni iterative (o cicliche)

Strutture di iterazione

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico

Esercitazione 4. Comandi iterativi for, while, do-while

Corso di Informatica di Base

Problemi, algoritmi e oggetti

Esercitazione 3. Espressioni booleane I comandi if-else e while

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

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

Geometria BIAR Esercizi 2

1 Esercizi in pseudocodice

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Strutture di controllo in C++

6) Descrivere con un diagramma a blocchi un algoritmo che legga da input due numeri ne calcoli il prodotto in termini di somme ripetute.

Esercitazioni di Reti Logiche. Lezione 1 Rappresentazione dell'informazione. Zeynep KIZILTAN zkiziltan@deis.unibo.it

PROGRAMMAZIONE: Le strutture di controllo

Prontuario degli argomenti di Algebra

Algoritmi e soluzione di problemi

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara

Programmazione strutturata

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

= < < < < < Matematica 1

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi seconde

Laboratorio di programmazione

Esercizi svolti. risolvere, se possibile, l equazione xa + B = O, essendo x un incognita reale

Kangourou della Matematica 2006 finale nazionale italiana Mirabilandia, 8 maggio 2006

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

n deve essere maggiore di 0, altrimenti il metodo restituisce null.

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Istruzioni iterative. Istruzioni iterative

1 Esercizi di Matlab. L operatore : permette di estrarre sottomatrici da una matrice assegnata. Vediamo alcuni esempi.

La codifica digitale

Errori di misura Teoria

LESSICO E SINTASSI DEL PASCAL

Calcolo numerico e programmazione Rappresentazione dei numeri

ha come obiettivo quello di costruire a partire da A una matrice U, m n, che abbia il

2. Algoritmi e Programmi

Capitolo 4: Tabelle. y(x) = x 3 ì 2x. Capitolo 4: Tabelle 67. Nota: le tabelle non sono disponibili nel modo di rappresentazione grafica 3D.

LA METAFORA DELL UFFICIO

PROGRAMMA EFFETTIVAMENTE SVOLTO

Modulo 1 Concetti di base della Tecnologia dell Informazione

Esercizio 1. Esercizio 2

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Sistemi di numerazione

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

= elemento che compare nella seconda riga e quinta colonna = -4 In generale una matrice A di m righe e n colonne si denota con

Sviluppo di programmi

Architettura degli Elaboratori

Introduzione al Metodo del Simplesso. 1 Soluzioni di base e problemi in forma standard

Operations Management

L Allocazione Dinamica della Memoria

SISTEMI LINEARI: APPROFONDIMENTI ED ESEMPI

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Sistemi di equazioni lineari

CORSO ACCESS 2000 PARTE VI

Istituto d Istruzione Superiore A. Tilgher Ercolano (Na)

1 Fattorizzazione di polinomi

Tipi di linea. Tipi di Linea - R.Virili 1

Soluzioni Esercizi su rappresentazione binaria dell informazione

Rappresentazione generale del problema e fasi di progettazione

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Rappresentazione con i diagrammi di flusso (Flow - chart)

Argomenti della lezione. Criteri di divisibilità fattorizzazione m.c.m. e M.C.D. frazioni ed espressioni

1.4 PRODOTTI NOTEVOLI

1 Multipli e sottomultipli. Divisibilità

PROBLEMI ALGORITMI E PROGRAMMAZIONE

INDICE DEI GIOCHI. Giochi del 23 Aprile 2016

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

Come utilizzare i riferimenti assoluti e relativi in Microsoft Excel

EXCEL: FORMATTAZIONE E FORMULE

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Lezione 3. I numeri relativi

Moltiplicazione. Divisione. Multipli e divisori

Strutture di Controllo

I RADICALI QUADRATICI

Geometria Analitica Domande e Risposte

IL PRIMO PROGRAMMA IN C

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Транскрипт:

Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma di flusso è strutturato è necessario ricondurlo a essere rappresentato mediante una sequenza di blocchi elementari: operazioni costrutti condizionali if-then-else e if-then costrutti iterativi while (o for) e do-while. Durante il riconoscimento di tali blocchi è possibile procedere sostituendo a ogni blocco un blocco elementare semplice. In Figura 2 (a) si riconosce la sequenza di blocchi (A+B e D+E). In Figura 2 (b) si riconosce il costrutto iterativo while (costituito dai blocchi C e(d+e)). In Figura 2 (c) si riconosce la sequenza di blocchi (A+B), (C+D+E) ef. Il diagrammma di flusso finale, essendo costituito da un unico blocco, è sicuramente strutturato. c 2006 Politecnico di Torino 1

A+B (a) C F D+E A+B (b) C+D+E F (c) A+B+C+D+E+F Figura 2: Diagramma di flusso strutturato: soluzione. c 2006 Politecnico di Torino 2

2 Esercizio Si rappresenti mediante diagramma di flusso un algoritmo che: legga un numero intero n calcoli e visualizzi il valore della ridotta n-esima della serie logaritmica: H(n) = 1+ 1 2 + 1 3 + + 1 n Esempio Si supponga di introdurre il valore 3. L algoritmo deve calcolare la somma e visualizzare il valore risultante 1.833. Soluzione H(3) = 1 + 1 2 + 1 3 = 1.833 La soluzione di questo esercizio richiede la stesura di un ciclo per valutare il valore della somma del reciproco dei primi n numeri naturali. La soluzione rappresentata in Figura 3 utilizza un ciclo while definito con conteggio in salita (ciclo 1 n). La variabile di controllo del ciclo è i. H è il valore calcolato. Ad ogni iterazione il nuovo valore di H è uguale al vecchio valore di H incrementato del nuovo termine della successione. 3 Esercizio Si rappresenti mediante diagramma di flusso l algoritmo in grado di: leggere una sequenza di numeri interi sino a introdurre un valore nullo sommare tra di loro tutti i valori strettamente positivi e tutti i valori strettamente negativi della sequenza (trascurando quindi i valori nulli) visualizzare le due somme calcolate. Esempio Si supponga di introdurre i seguenti valori: 5 4 3 1 2 0 Occorre visualizzare i valori 10 (ottenuto dalla somma 5 + 4 + 1) e 5 (ottenuto dalla somma ( 3)+( 2)). Si osservi che il numero di valori letti risulta indefinito a priori, in quanto dipende dall introduzione di un valore nullo, informazione nota solo in fase di esecuzione. c 2006 Politecnico di Torino 3

Leggo: n H < 0 i < 1 i < n H = H + 1 i i < i + 1 Scrivo: "Somma = ", H Figura 3: Serie armonica. c 2006 Politecnico di Torino 4

Soluzione La soluzione presentata in Figura 4 è caratterizzata dall utilizzare un ciclo do-while. Questo evita la lettura del primo valore della sequenza di ingresso prima del ciclo. Le variabili sommap e somman permettono di memorizzare le due somme richieste, ovvero rispettivamente la somma dei numeri positivi e negativi. Si noti come i numeri sommap < 0 somman < 0 Leggo: n n > 0 somman < somman + n sommap = sommap + n n = 0 Scrivo: "Somma positivi = ", sommap Scrivo: "Somma negativi = ", somman Figura 4: Somma valori positivi e negativi. nulli vengano, di fatto, sommati insieme ai numeri positivi. Questa operazione non produce però alcun effetto, visto che il loro contributo alla somma è nullo. Volendo comunque evitare questo effetto si può procedere sostituendo la sezione incorniciata c 2006 Politecnico di Torino 5

di Figura 4 come indicato in Figura 5 (e lasciando il resto del diagramma inalterato).... n > 0 n < 0 sommap = sommap + n somman < somman + n... Figura 5: Somma valori positivi e negativi: Controllo più accurato sul valore dei numeri. 4 Esercizio Realizzare un diagramma di flusso in grado di: leggere, da tastiera, una sequenza di 10 numeri interi visualizzare la massima differenza (in valore assoluto) tra 2 numeri consecutivi della sequenza. L algoritmo visualizzi, inoltre, i valori tra cui questa differenza è ottenuta. Esempio Si supponga di introdurre la seguente sequenza di 10 valori: 8 15 22 123 9 23 45 23 45 2 La massima differenza è ottenuta tra i numeri 123 e 9 ed è pari a 114. Occorre visualizzare i valori 123, 9 e 114. Soluzione La soluzione è rappresentata in Figura 6. n 1 e n 2 indicano i due valori letti da tastiera più recentemente e diff il valore assoluto della differenza di tali valori, diffmax rappresenta la differenza massima, ovvero il massimo valore di diff sino a un determinato istante, e val1 e val2 i valori per cui tale differenza massima si è verificata. Durante la prima iterazione la condizione i > 1è e si procede quindi a copiare n 2 in n 1 e a incrementare il contatore i. In tutte le altre iterazioni c 2006 Politecnico di Torino 6

tale condizione è e quindi si effettua il calcolo di diff e si valuta se tale valore è maggiore o uguale a diffmax. In caso affermativo vengono memorizzati i nuovi valori di n 1 e n 2 che determinano tale differenza e il nuovo valore di diffmax. Si noti che viene controllato se diff diffmax enondiff > diffmax in quanto si vuole garantire che val1 e val2 assumano valore corretto anche nel caso in cui tutti i valori introdottida tastiera siano uguali e diff sia sempre uguale a zero. 5 Esercizio Modificare il diagramma di flusso rappresentato in Figura 7 per disegnare le figure di seguito rappresentate (di dimensione variabile): 1. triangoli di dimensione n: * ** *** **** ***** 2. triangoli rovesciati di dimensione n: ***** **** *** ** * 3. quadrati vuoti di dimensione n: ****** * * * * * * * * ****** 4. quadrati composti dalle cifre [0,9] disposte in sequenza: 012345 678901 234567 890123 456789 012345 c 2006 Politecnico di Torino 7

diffmax < 0 i < 1 i < 10 Scrivo: "Max diff tra", val1, " e ", val2, " = ", diffmax Leggo: n2 i > 1 diff < (n1 n2) diff > diffmax \ val1 < n1 val2 < n2 diffmax < diff n1 < n2 i < i+1 Figura 6: Massima differenza. c 2006 Politecnico di Torino 8

Leggo: n r < 1 r < n c < 1 c < n Scrivo: "*" c < c + 1 r < r + 1 Scrivo: "a capo" Figura 7: Visualizzazione di un quadrato. c 2006 Politecnico di Torino 9

Soluzione 1 Una possibile soluzione è rappresentata in Figura 8. Rispetto al diagramma di flusso rappresentato in Figura 7 le modifiche si limitano alla condizione di terminazione del ciclo interno. Su ogni riga il numero di asterischi è uguale al valore di r, ovvero dell indice che controlla il movimento lungo le righe. Soluzione 2 Una possibile soluzione è rappresentata in Figura 9. Rispetto al diagramma di flusso rappresentato in Figura 7 le modifiche sono nuovamente minime. Effettuando un ciclo decrescente sulla variabile r è possibile procedere come per l algoritmo Figura 8. Soluzione 3 La soluzione è rappresentata in Figura 10. Rispetto al diagramma di flusso rappresentato in Figura 7 le modifiche sono più consistenti. Invece di disegnare comunque un carattere * si rappresenta tale carattere solo sulla cornice del quadrato. Si visualizza invece uno spazio all interno del quadrato. Per determinare quale simbolo visualizzare si controllano i valori di r e c per determinare se si è sulla prima riga, sulla prima colonna, sull ultima colonna o sull ultima riga. Soluzione 4 La soluzione è rappresentata in Figura 11. Rispetto al diagramma di flusso rappresentato in Figura 7 occorre visualizzare un valore numerico crescente da 0 a 9 invece del carattere *. Si utilizza quindi la varibile val, inizializzata a 0 e incrementata dopo ogni visualizzazione sino al valore massimo. Una volta raggiunto il valore massimo a val viene riassegnato il valore zero. 6 Esercizio Si rappresenti mediante diagramma di flusso l algoritmo in grado di: leggere un valore intero n disegnare un quadrato di lato n utilizzando: caratteri * lungo la diagonale caratteri - al di sotto della diagonale caratteri + al di sopra della diagonale. Esempio Sia n = 5. Occorre visualizzare la seguente figura: c 2006 Politecnico di Torino 10

Leggo: n r < 1 r < n c < 1 c < r Scrivo: "*" c < c + 1 r < r + 1 Scrivo: "a capo" Figura 8: Visualizzazione di un triangolo. c 2006 Politecnico di Torino 11

Leggo: n r < n r > 1 \ c < 1 c < r Scrivo: "*" c < c + 1 r < r 1 Scrivo: "a capo" Figura 9: Visualizzazione di un triangolo rovesciato. c 2006 Politecnico di Torino 12

Leggo: n r < 1 r < n c < 1 c < n (r=1) OR (c=1) OR (c=n) OR (r=n) Scrivo: " " Scrivo: "*" c < c + 1 r < r + 1 Scrivo: "a capo" Figura 10: Visualizzazione di un quadrato vuoto. c 2006 Politecnico di Torino 13

Leggo: n val < 0 r < 1 r < n c < 1 c < n val > 9 val < 0 Scrivo: val val < val + 1 c < c + 1 r < r + 1 Scrivo: "a capo" Figura 11: Visualizzazione di un quadrato di cifre. c 2006 Politecnico di Torino 14

*++++ -*+++ --*++ ---*+ ----* Soluzione 1 La soluzione di Figura 12 procede tracciando la figura richiesta seguendo la logica già utilizzata nell esercizio 5. Il ciclo più esterno effettua un conteggio di n righe. Per ciascuna riga il ciclo più interno si occupa di gestire le n colonne. Tuttavia, invece di visualizzare ad ogni iterazione lo stesso simbolo (un asterisco) come nel caso dell esercizio 5, si stampa un simbolo diverso a seconda della posizione in cui ci si trova rispetto alla diagonale: se si è posizionati sulla diagonale, ovvero il valore dell indice di riga e di colonna coincidono, si visualizza un * se si è posizionati sopra la diagonale, ovvero il valore dell indice di riga è minore di quello della colonna, si visualizza un + se si è posizionati al di sotto della diagonale, ovvero il valore dell indice di riga è maggiore di quello della colonna, si visualizza un -. Soluzione 2 La soluzione di Figura 13 differisce in maniera sostanziale dalla precedente. Essa si basa sulle considerazione seguenti. Il quadrato è formato da n righe. Ciascuna riga è costituita da tre sezioni separate: una sequenza di simboli -, eventualmente vuota (nessun simbolo) un unico simbolo *, sempre e comunque presente una sequenza di simboli +, eventualmente vuota (nessun simbolo). All interno del ciclo che rappresenta le righe si possono quindi inserire tre sezioni: la prima (un ciclo) che visualizza la sequenza di simboli - la seconda (un unica operazione di scrittura) che visualizza il simbolo * la terza (un ulteriore ciclo) che visualizza la sequenza di simboli +. c 2006 Politecnico di Torino 15

Leggo: n r < 1 r < n c < 1 < c n c = r r > c Scrivo: "*" Scrivo: " " Scrivo: "+" c < c + 1 r < r + 1 Scrivo: "a capo" Figura 12: Visualizzazione di un quadrato di simboli: prima soluzione. c 2006 Politecnico di Torino 16

Occorre ovviamente ancora determinare quanti simboli - e + occorre visualizzare sulla generica riga di posizione r (con r che conta le righe e quindi varia da 1 a n compresi). Si può osservare che sulla prima riga si visualizzano 0 simboli - ed (n-1) simboli +, sulla seconda riga si visualizza 1 simbolo - e(n-2) simboli +, etc. Sarà quindi sufficiente realizzare (per ciascuna riga di posizione r) un ciclo che stampi (r-1) simboli - e un ciclo che stampi (n-r) simboli +. Ovviamente al termine di ciascuna riga occorre ricordarsi di andare a capo. c 2006 Politecnico di Torino 17

Leggo: n r < 1 r < n c < 1 c < r Scrivo: " " c < c + 1 Scrivo: "*" c < 1 c < (n r+1) Scrivo: "+" c < c + 1 r < r + 1 Scrivo: "a capo" Figura 13: Visuliazzazione di un quadrato di simboli: seconda soluzione. c 2006 Politecnico di Torino 18