Esercizi per il corso di Programmazione I

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