Esercizi per il corso di Programmazione I Programmi senza IF e cicli Esercizio 1 Leggere da tastiera il raggio r di una circonferenza, calcolare area e lunghezza della circonferenza e visualizzare a video i risultati Esercizio 2 Leggere da tastiera i coefficienti a, b, c di un equazione di II grado ax2 +bx+c = 0, calcolarne le soluzioni (nell’ipotesi che il delta sia non negativo) e visualizzarle a video Esercizio 3 Leggere da tastiera i coefficienti a, b, c, d e i termini noti e, f di un sistema lineare di due equazioni e due incognite ½ ax + by = e cx + dy = f calcolare le soluzioni x, y (nell’ipotesi che il determinante del sistema ad − bc sia diverso da zero) e visualizzarle a video Esercizio 4 Leggere da tastiera i valori dell’ipotenusa e di un cateto di un triangolo rettangolo, calcola la lunghezza dell’altro cateto, il perimetro e l’area del triangolo e visualizzare a video i risultati Esercizio 5 Leggere da tastiera il capitale C, il tasso i e il numero di anni t, calcolare il montante con la capitalizzazione semplice e quello con la capitalizzazione composta Ms = C(1 + it), Mc = C(1 + i)t e visualizzare i risultati Esercizio 6 Leggere da tastiera i tre lati di un triangolo a, b e c, calcolare il perimetro e l’area, quest’ultima con la formula di Erone p S = p(p − a)(p − b)(p − c) ove p è il semiperimetro. Programmi con if/else Esercizio 7 Estendere l’esercizio 2, trattando il caso in cui il delta sia negativo e visualizzando un messaggio in tal caso Esercizio 8 Estendere l’esercizio 3 trattando il caso in cui il determinante del sistema sia zero Esercizio 9 Leggere da tastiera due numeri interi e visualizzare il maggiore tra i due 1 Esercizio 10 Leggere da tastiera due numeri e visualizzare se i due numeri sono uguali, o se é maggiore il primo o il secondo Esercizio 11 Leggere da tastiera le lunghezze dei tre lati di un triangolo e indicare se il triangolo è equilatero (tre lati uguali), isoscele (due lati uguali e uno diverso) o scaleno (tre lati diversi) Esercizio 12 Leggere da tastiera tre numeri interi e visualizzare il maggiore Esercizio 13 Leggere da tastiera un intero A e dire se l’anno A é bisestile (A divisibile per 4 e non divisibile per 100, oppure divisibile per 400) Esercizio 14 Leggere da tastiera il reddito I di un individuo, calcolare e visualizzare l’imposta T secondo la formula 10% per redditi fino a 2000 euro 15% per redditi tra 2000 e 3000 euro 20% per redditi tra 3000 e 4500 euro 25% per redditi tra 4500 e 6000 euro 30% per redditi oltre 6000 euro Programmi con switch Esercizio 15 Leggere da tastiera un numero tra 0 e 9 e visualizzarlo come parola in inglese (ad es. inserendo 3 si ottiene three) Esercizio 16 Leggere da tastiera un numero tra 0 e 99 e visualizzarlo in numeri romani (ad es. 43 come XLIII) Esercizio 17 Leggere da tastiera un primo numero reale X, un carattere OP contenente il simbolo di un’operazione matematica (+, -, *, /) e un secondo numero reale Y e calcolare X OP Y (cioè ad esempio se OP è + calcolare X + Y , se OP è − calcolare X − Y , ecc.) Esercizio 18 Leggere da tastiera una data (giorno e mese) e controllare se è una data valida, visualizzando un messaggio di conferma o di errore (ad esempio sono date corrette il 23/8, l’8/9 o il 13/11, sono invece errate le date 3/13, 31/4 e 30/2) Esercizio 19 Leggere da tastiera una data dell’anno corrente sotto forma di giorno e mese e calcolare quanti giorni sono trascorsi dal primo gennaio (Sugg. aggiungere al giorno immesso dall’utente il numero di giorni trascorsi tra il primo del mese e il primo gennaio) Programmi con while/do while Esercizio 20 Leggere da tastiera un numero intero assicurandosi che sia positivo, se invece è negativo o nullo far ripetere l’immissione visualizzando un messaggio d’errore. 2 Esercizio 21 Implementare l’algoritmo di Euclide per calcolare il massimo comun divisore di due numeri interi: partendo dai due numeri iniziali si sostituisca il più grande con la differenza tra il più grande e il più piccolo fino a quando non si arriva ad avere due numeri uguali, che conterranno il MCD voluto. Esercizio 22 Migliorare l’implementazione dell’algoritmo di Euclide del MCD: partendo da due numeri iniziali si sostituisca uno dei due con il resto della divisione tra lui e l’altro fino a quando il resto ottenuto non diventa zero, l’altro numero rimasto è il MCD dei due numeri iniziali. Esercizio 23 Scrivere un programma che calcola la somma di un insieme illimitato di numeri: l’utente immette un numero alla volta, alla fine inserisce zero, il programma si ferma visualizzando il totale Esercizio 24 Come il programma precedente, calcolare la media dei numeri immessi Esercizio 25 Scrivere un programma che legge una serie di numeri interi positivi fermandosi quando la somma dei numeri immessi supera un valore costante (ad esempio 100) Esercizio 26 Come il programma precedente, fermandosi però quando il numero immesso supera la somma dei numeri precedenti Esercizio 27 Calcolare la radice quadrata di un numero reale R con il metodo di Newton: si parta con X = R e ad ogni passo si aggiorni X con il valore 1 R 2 (X + X ) e ci si fermi quando la differenza tra il vecchio valore di X e il nuovo non diventi in valore assoluto minore di una certa √ quantitá costante EPS. A quel punto X conterrá il valore approssimato di R. EPS serve ad indicare √ quante cifre esatte si vogliono di X, ad esempio per avere due cifre si pone EPS=0.01. Esercizio 28 Calcolare la costante di Nepero e tramite la formula e= ∞ X 1 n! n=0 sommando però solo un numero finito di termini: si aggiunga un addendo per volta a partire dal primo e si fermi il calcolo quando l’addendo da aggiungere diventa più piccolo di una certa quantitá costante. Programmi con for Esercizio 29 Leggere da tastiera un numero N e una stringa S e visualizzare N volte la stringa S Esercizio 30 Leggere da tastiera un numero intero N e calcolare il fattoriale di N 3 Esercizio 31 Leggere ¡N ¢ da tastiera due numeri interi N e K calcolare il coefficiente binomiale K Esercizio 32 Leggere da tastiera un numero intero n e visualizzare tutti le coppie di numeri interi che hanno come somma n. Esercizio 33 Leggere da tastiera un numero intero K compreso tra 1 e 20 e visualizzare la tabella pitagorica dei numeri tra 1 e K. Esercizio 34 Leggere da tastiera un numero intero N e successivamente N numeri reali, calcolare a scelta una o più delle seguenti quantità • la somma • il prodotto • la media aritmetica PN i=1 Xi N • la media geometrica "N Y # N1 Xi i=1 • la media armonica N PN 1 i=1 Xi • il massimo • il minimo • il campo di variazione (cioè il massimo meno il minimo) • la varianza e visualizzare il risultato Esercizio 35 Leggere da tastiera un numero intero N e successivamente N coppie di numeri reali X, W e calcolare la media dei valori X pesata con i pesi W, ossia P XW P i i Wi Esercizio 36 Leggere da tastiera un numero intero K e visualizzare a video il triangolo di Tartaglia di K righe, cioè quello che contiene i coefficienti binomiali ¡i¢ , per i = 0, . . . , k, j = 0, . . . , i. j Esercizio 37 Leggere da tastiera un numero intero n e determinare se è perfetto, cioè se la somma dei suoi divisori, tranne se stesso, è uguale a n 4 Programmi con gli array Esercizio 38 Leggere da tastiera un vettore di N numeri reali e visualizzare il quadrato di ognuno Esercizio 39 Leggere da tastiera un vettore di N stringhe e visualizzare il vettore in ordine inverso, cioè visualizzando prima l’ultima stringa inserita, poi la penultima, ecc. fino alla prima inserita. Esercizio 40 Leggere da tastiera un vettore di N numeri reali e calcolare una o più quantità dell’esercizio 34. Esercizio 41 Leggere da tastiera un vettore di N numeri reali e visualizzare le posizioni dell’elemento minimo e dell’elemento massimo. Esercizio 42 Leggere da tastiera un vettore di N numeri reali e visualizzare gli elementi del vettore che differiscono in valore assoluto dalla media più di un valore costante (ad esempio 0.1) Esercizio 43 Leggere da tastiera un vettore X di N numeri reali e visualizzare gli elementi del vettore Xi tali che |Xi − X̄| ≤² s in cui X̄ é la media di X, s é lo scarto quadratico medio rP (xi − X̄)2 s= N e ² è una costante Esercizio 44 Leggere da tastiera un vettore di N numeri interi e invertirlo (scambiare il primo con l’ultimo, il secondo con il penultimo, ecc.) Esercizio 45 Leggere da tastiera N e riempire un vettore con i primi N numeri primi Esercizio 46 Leggere da tastiera un vettore ordinato A di N interi, contenente elementi possibilmente duplicati, e memorizzare in un secondo vettore B tutti gli elementi di A senza duplicati, infine visualizzare B a video Esercizio 47 Svolgere l’esercizio precedente senza l’ipotesi che il vettore sia ordinato. Esercizio 48 Leggere da tastiera i coefficienti pi di un polinomio p di grado n (in totale sono n + 1 numeri) e un valore x e valutare il polinomio p nel punto x mediante la formula n X p(x) = pi xi i=0 Studiare un modo per evitare di calcolare le potenze di x. 5 Esercizio 49 Partendo dai dati dell’esercizio precedente, valutare il polinomio p0 derivata di p mediante la formula 0 p (x) = n X i · pi xi−1 i=1 Anche in questo caso studiare un modo per evitare di calcolare le potenze di x. Esercizio 50 Leggere da tastiera due vettori A e B di interi di dimensione n e memorizzare in un vettore C di dimensione 2n l’unione degli elementi dei due vettori, memorizzando una sola volta gli elementi in comune Esercizio 51 Leggere da tastiera due vettori A e B di interi di dimensione n e memorizzare in un vettore C di dimensione n l’intersezione degli elementi dei due vettori Esercizio 52 Leggere da tastiera due vettori A e B di interi di dimensione n e memorizzare in un vettore C di dimensione n gli elementi di A che non stanno in B Esercizio 53 Leggere da tastiera i primi k elementi di un vettore A di interi di dimensione n (con k < n) e un intero x e inserire l’elemento nella posizione centrale del vettore facendo scorrere di un posto verso destra tutti gli elementi successivi alla posizione centrale Esercizio 54 Leggere da tastiera un vettore A di interi di dimensione n e un intero x ed eliminare da A l’elemento x nella prima posizione in cui si trova in A, facendo scorrere di un posto verso sinistra tutti gli elementi successivi alla posizione di x Programmi con le matrici Esercizio 55 Leggere da tastiera una matrice T di 7 righe e 3 colonne di numeri reali, contenente le temperature riportate in tre località negli ultimi sette giorni, e calcolare per ogni località la temperatura media, massima e minima. Esercizio 56 Leggere da tastiera una matrice A di 3 righe e 4 colonne di numeri reali e calcolare la matrice trasposta B, cioè ottenuta da A in cui le righe di A corrispondono alle colonne di B. Ovviamente B dovrà avere 4 righe e 3 colonne. Esercizio 57 Legge da tastiera una matrice di N ×N numeri reali e visualizzare la colonna della matrice con la somma degli elementi piú alta. Esercizio 58 (per chi già conosce la teoria delle matrici) Leggere da tastiera due matrici A e B di N × N numeri reali e calcolare la somma C = A + B e il prodotto D = AB, visualizzando le due matrici ottenute Esercizio 59 (per chi già conosce la teoria delle matrici) Leggere da tastiera due matrici A e B di N × N numeri reali e calcolare la matrice C = At BA, ove per At si intende la matrice trasposta di A. 6 Programmi con le stringhe Esercizio 60 Leggere da tastiera una stringa x e calcolare x̃, ossia la stringa inversa di x. Esercizio 61 Leggere da tastiera due stringhe x e y e calcolare la stringa x̃·y·x, ottenuta concatendo la stringa inversa di x, y e x. Ad esempio se x=’gal’ e y=’ri’ allora il programma deve visualizzare la stringa ’lagrilag’ Esercizio 62 Leggere da tastiera due stringhe X e Y e un intero n e calcolare due stringhe X 0 e Y 0 cosı́ definite: X 0 ha i primi n caratteri di X e la parte di Y dal n + 1–esimo carattere in poi, Y 0 ha i primi n caratteri di Y e la parte di X dal n + 1–esimo carattere in poi, Esercizio 63 Leggere da tastiera un aggettivo maschile singolare e visualizzare a video l’aggettivo al maschile plurale, al femminile singolare e al femminile plurale Esercizio 64 Leggere da tastiera una stringa contenente un verbo all’infinito in italiano e lo visualizza coniugato al presente indicativo (considerare solo i verbi regolari delle tre coniugazioni) Esercizio 65 Leggere da tastiera un numero intero n e calcolare la stringa di 0 e 1 rappresentazione binaria di n Esercizio 66 Leggere da tastiera due numeri interi n e b e calcolare la stringa rappresentazione di n in base b (attenzione alle basi maggiori di 10) Strutture e array di strutture Esercizio 67 Definire una struttura adatta a memorizzare una frazione, leggere da tastiera una frazione e semplificarla. Esercizio 68 Utilizzando la struttura della sezione precedente, leggere da tastiera due frazioni, calcolarne somma e prodotto e semplificarle Esercizio 69 Definire una struttura adatta a memorizzare un numero complesso, leggere da tastiera due numeri complessi e calcolarne somma e prodotto. Esercizio 70 Definire una struttura adatta a memorizzare una data, leggere da tastiera una data e visualizzarne la data successiva Esercizio 71 Definire una struttura dati adatta a memorizzare il cognome e lo stipendio dei dipendenti di un’azienda, leggere da tastiera i dati e trovare il dipendente con lo stipendio più alto Esercizio 72 Definire il cognome l’età e lo stipendio dei dipendenti di un’azienda, leggere da tastiera i dati e visualizzare i dipendenti in ordine prima di stipendio e in caso di parità per età. 7 Esercizio 73 Definire una struttura dati adatta a memorizzare il nome, il numero di medaglie d’oro, d’argento e di bronzo delle squadre partecipante ad un’olimpiade, leggere da tastiera i dati e visualizzare la classifica (prima contano gli ori, a parità gli argenti, a parità i bronzi) Esercizio 74 Definire una struttura dati adatta a memorizzare il cognome, il numero di conto e l’importo degli ultimi N movimenti dei correntisti di una banca, leggere da tastiera i dati e visualizzare per ogni correntista il numero di conto e la somma algebrica dei movimenti effettuati Esercizio 75 Definire una struttura adatta a memorizzare i dati degli esami di uno studente (nome materia, data, voto) e visualizzare un menù con cui è possibile inserire i dati di un nuovo esame, visualizzare la media e terminare il programma Esercizio 76 Definire una struttura adatta a memorizzare i dati degli studenti iscritti ad un corso di laurea (nome, cognome, matricola, numero e dati degli esami sostenuti) e visualizzare un menù con cui è possibile inserire i dati di un nuovo esame dato da uno studente, inserire un nuovo studente, eliminare uno studente, visualizzare gli esami e la media di uno studente e terminare il programma Procedure e funzioni Non si forniscono esercizi esclusivi per le procedure e funzioni, ma si invita a risolvere gli esercizi precedenti sviluppando procedure o funzioni, che ricevono come parametri di ingresso i dati che invece nel testo originale dell’esercizio sono letti da tastiera e che restituiscono in parametri di uscita (o come risultato, se si usa una funzione) gli eventuali risultati che nel testo originale dell’esercizio sono visualizzati a video. Ad esempio l’esercizio 39 diventa: Scrivere una procedura che riceve come parametro di ingresso un vettore di N numeri reali e che restituisce in un parametro di uscita una delle quantità dell’esercizio 34 Si eviti però di usare a tale scopo gli esercizi, come il 59, in cui ci sono troppi risultati Ricorsione Esercizio 77 Scrivere una funzione ricorsiva che calcola l’elevamento a potenza di un numero reale X ad un esponente intero non negativo e Esercizio 78 Estendere l’esercizio precedente al caso in cui l’esponente sia anche negativo Esercizio 79 Scrivere una funzione ricorsiva che dato il numero di oggetti n e un numero intero k ≤ n calcola il numero di disposizioni Dnk degli n oggetti a k a k secondo la formula Dnk = n · (n − 1) · (n − 2) · . . . (n − k + 1) 8 Esercizio 80 Scrivere una funzione ricorsiva che conta il numero delle cifre di un numero intero (Sugg. se si prende un numero intero, ad esempio N=12345, allora N div 10=1234 è il numero tranne l’ultima cifra, cioè ha un numero di cifre diminuito di uno rispetto a N, da ciò . . . ). Esercizio 81 Scrivere una funzione ricorsiva che calcola la somma delle cifre di un numero intero. Ad esempio se il numero è 345 la somma delle cifre è 3 + 4 + 5 = 12. Esercizio 82 Scrivere una funzione ricorsiva che calcola, dati N e K, il coefficiente binomiale secondo le ben note proprietà µ ¶ µ ¶ n n = =1 0 n µ ¶ µ ¶ µ ¶ n n−1 n−1 = + k k−1 k Esercizio 83 Scrivere una funzione ricorsiva che controlla se una stringa è palindroma, cioè è indifferente leggerla da sinistra a destra o viceversa (ad es. anna, esse, onano, abccba, ecc.) Esercizio 84 Scrivere una funzione ricorsiva che dato un vettore X di interi e un numero intero n calcola il massimo dei primi n elementi di X Esercizio 85 Scrivere una funzione ricorsiva che dato un vettore A di interi, un numero intero n e un intero X restituisce true se X é presente tra i primi n elementi di A, false viceversa Liste Esercizio 86 Scrivere una funzione che calcola il massimo di una lista di interi Esercizio 87 Scrivere una procedura che ricevendo come parametro di ingresso una lista L di interi e due interi k1 e k2 restituisce in un parametro di uscita una seconda lista di interi che contiene gli elementi di L che sono compresi tra k1 e k2. Esercizio 88 Scrivere una procedura che data (come parametro di ingresso) una lista di interi restituisce come parametri di uscita la somma degli elementi di posto pari e la somma degli elementi di posto dispari Esercizio 89 Scrivere una procedura che date (come parametri di ingresso) due liste A e B di interi restituisce come parametro di uscita una lista che contiene tutti gli elementi di A che non sono contenuti in B Esercizio 90 Scrivere una procedura che data una lista ordinata L di interi, contenente elementi possibilmente duplicati, restituisce in un parametro di uscita una lista (ordinata) contenente tutti gli elementi di L senza duplicati. Esercizio 91 Scrivere una funzione che data una lista ordinata L di interi e un numero intero k restituisce come risultato la somma degli elementi di L minori di k 9 Alberi Esercizio 92 Scrivere una funzione che dato un albero binario R di interi e un intero X restituisce true se esiste un nodo di R con chiave pari a X, false altrimenti. Esercizio 93 Scrivere una funzione che dato un albero binario di ricerca R di interi e un intero X restituisce come risultato il numero di nodi di R con chiave superiore a X. Esercizio 94 Scrivere una funzione che dato un albero binario A restituisce come risultato il numero di nodi con un solo figlio Esercizio 95 Scrivere una funzione che dato un albero binario A restituisce true se ogni nodo ha una chiave maggiore delle chiavi dei suoi figli, false altrimenti File Non si forniscono ulteriori esercizi per i file, ma si invita a risolvere gli esercizi delle sezioni relative agli array e agli array di strutture leggendo i dati da file e registrando su file gli eventuali risultati (sullo stesso file da cui si è letto per i casi in cui si richiede di modificare i dati iniziali). 10