Esercizi - Home di homes.di.unimi.it

annuncio pubblicitario
Laboratorio di programmazione
25 novembre 2014
Effetti collaterali
Scrivete un programma che dichiari tre variabili intere x, y e z. Fate inserire dall’utente un valore per ciascuna delle
tre variabili, e stampate il valore di diverse espressioni con effetti collaterali a vostra scelta. Osservate i risultati e
confrontateli con la semantica spiegata a lezione.
Se non avete abbastanza fantasia per creare da soli delle espressioni, ecco alcuni suggerimenti:
System.out.println( ( x++ + --z ) * y++ );
System.out.println( ( x = 2 ) * z-- * y );
System.out.println( ( z /=2 ) + ++x + --y );
Confronti
Scrivete (usando esattamente due variabili intere) un programma che chieda all’utente di inserire due numeri e
stampi, utilizzando l’istruzione if, un messaggio che spieghi quale delle seguenti asserzioni è vera:
• il primo numero è uguale al secondo;
• il primo numero è diverso dal secondo;
• il primo numero è minore del secondo;
• il primo numero divide esattamente il secondo;
• il primo numero è zero;
• il primo numero è un multiplo di tre.
• la cifra delle unità del primo numero è uguale alla cifra delle unità del secondo numero.
Alfabeto farfallino
Quando i vostri docenti di laboratorio di programmazione erano bambini, usavano a volte, per comunicare con i
loro simili, uno speciale alfabeto, detto alfabeto farfallino1. L’alfabeto farfallino consiste nel sostituire, a ciascuna vocale, una sequenza di tre lettere della forma vocale-f-vocale. Per esempio, alla lettera a viene sostituita la
sequenza afa, alla lettera e la sequenza efe e così via.
Dovete scrivere un programma che legge righe scritte dall’utente e ne stampi la traduzione in alfabeto farfallino.
Potete assumere che il testo in input in input non contenga lettere maiuscole. Il programma deve fermarsi quando
l’utente inserisce una riga vuota.
1Non
si può escludere che qualcuno lo faccia ancora, in alcune remote regioni d’Italia. . .
1
Esempio di funzionamento
mamma mia
mafammafa mifiafa
aiuola
afaifiufuofolafa
farfalla
fafarfafallafa
La strana sillabazione
Il professor Precisini, dell’Accademia della crusca, sostenendo che le regole di sillabazione della lingua italiana
sono troppo complesse e piene di eccezioni, propone un nuovo e originale metodo di sillabazione. Il metodo
consiste in questo: una sillaba è una sequenza massimale di caratteri consecutivi che rispettano l’ordine alfabetico.
Per esempio, la parola ambire viene sillabata come am-bir-e: infatti la lettera a precede la lettera m, e le lettere b, i
e r rispettano anch’esse l’ordine. Analogamente, la parola sotterfugio viene sillabata come s-ott-er-fu-gio.
Dovete scrivere un programma che legge righe scritte dall’utente e ne stampi la versione sillabata. Potete
assumere che il testo in input in input non contenga lettere maiuscole. Il programma deve fermarsi quando l’utente
inserisce una riga vuota.
Esempio di funzionamento
amore
amor-e
medicina
m-e-di-cin-a
scafroglia
s-c-afr-o-gl-i-a
Frazioni continue
Se a0 è un numero intero qualsiasi, e a1, a2, . . . , an sono interi positivi, la notazione [a0, a1, . . . , an ] indica la
frazione continua, definita tramite l’espressione:
Ad esempio,
Ovviamente, [a0 , a1 , . . . , an ] è un numero razionale, e si può dimostrare che per ogni numero razionale esiste una
sola frazione continua che lo rappresenti a meno di eventuali 1 in fondo (poiché, ad esempio, [−1, 5, 2, 4] = [−1, 5, 2,
3, 1]). Inoltre, per ogni numero irrazionale esiste un’unica frazione continua infinita che lo rappresenta.
Scegliete un valore di n (p.es., n = 4) e scrivete un programma che riceva in input a0, a1, . . . , an e stampi in
output [a0, a1, . . . , an ]. In particolare, usate questo programma per calcolare [1, 1, . . . , 1]. Che valore ottenete?
Riuscite a immaginare che “celebre” valore rappresenta la frazione infinita [1, 1, 1, . . . ]?
2
Suggerimento: Se chiamate x il valore della frazione continua [1, 1, 1, . . . ], vale che
1
x =1+ ,
x
e quindi…
Ordinamento Stringhe per inserzione
Scrivere un programma che chieda all'utente di inserire una stringa, e quindi stampi la nuova stringa ottenuta
riordinando in ordine alfabetico i caratteri trovati nella stringa stessa, escludendo i caratteri di spazio.
Il programma e' case sensitive, ovvero considera un carattere minuscolo e uno maiuscolo come diversi.
Esempi d'esecuzione:
>javac Lab06OrdinamentoStringhePerInserzione.java
>java Lab06OrdinamentoStringhePerInserzione
Inserisci la stringa da riordinare:
Viva la Mamma
Stringa Ordinata:->MVaaaailmmv<-
Il triangolo di Tartaglia
Il triangolo di Tartaglia è un sistema per calcolare i coefficienti binomiali:
1
1
1
1
1
1
2
3
4
1
3
6
...
1
4
1
Scrivete un programma che scriva un triangolo di Tartaglia con il numero di righe richiesto dall’utente. Nella riga
t)
n-esima, n ≥ 0, e in posizione k-esima, k ≥ 0, dovete scrivere nk . Per ottenere questo risultato, potete cominciare
ogni riga scrivendo 1, e preseguire moltiplicando per (n + 1 − k)/ k (notate che questo valore è minore di uno
per certi n e k, e quindi dovete stare attenti quando effettuate la moltiplicazione). Una certa cura va posta nella
disposizione dei numeri che formano il triangolo. Ricordatevi che esiste un’opzione della direttiva di stampa %d
che permette di stampare un numero all’interno di un campo di lunghezza minima garantita.
Array bidimensionali
L'istruzione
final int R=4;
final int C=2;
int[ ][ ] s = new int[R][C];
dichiara e inizializza un array bidimensionale, ovvero un array i cui elementi sono a loro volta degli array (per la
precisione, il codice precedente fa riferimento a un array di R=4 elementi ognuno dei quali è un array di C=2
interi, che per brevità indicheremo come "array R x C di interi"). Alternativamente, l’array può essere visto come
una “tabella” con R righe e C colonne, in cui “s.length” il numero di righe di s, mentre “s[0].length” è il
numero di colonne. Scrivere un programma che memorizza in un array bidimensionale la tavola pitagorica
(suggerimento: usare due cicli for annidati per riempire opportunamente un array 10 per 10). Stampare
3
successivamente i contenuti dell'array in un formato ragionevole.
Moltiplicazione tra matrici
Realizzare un programma che calcola il risultato della moltiplicazione tra 2 matrici di valori reali. Le dimensioni
delle due matrici sono date in input da linea di comando, mentre gli elementi delle matrici vengono richiesti.
Disegnare l’output in modo che sia ben chiara la struttura della matrice che risulta dal prodotto, e arrotondare i suoi
valori alla terza cifra dopo la virgola.
Ricordiamo che il risultato della moltiplicazione di una matrice A, di dimensioni m x n (ovvero con m righe e n
colonne), per una matrice B di dimensioni n x p (ovvero con n righe e p colonne), è una matrice C di dimensioni m x
p. Indicando con (C)ij il generico termine alla riga i e colonna j di C, esso è calcolato come segue:
.
In altre parole, l’elemento alla i-esima riga e j-esima colonna di C è ottenuto moltiplicando la riga i-esima di A alla
colonna j-esima di B (La moltiplicazione riga x colonna è ottenuta moltiplicando gli elementi corrispondenti e
sommando le moltiplicazioni parziali così ottenute)
Due matrici possono essere moltiplicate fra loro solo se il numero di colonne della prima è uguale al numero di
righe della seconda. La seguente figura mostra come si possono ottenere gli elementi (C)12 o (C)23 .
Suggerimento: implementate un metodo statico che, dati in ingresso due array monodimensionali aventi la stessa
dimensione, moltiplichi gli elementi corrispondenti e faccia la somma dei risultati delle moltiplicazioni….
Esempio d’esecuzione
------------------------------>java Soluzione 2 3 3 3
Inserire riga 0 di A (3 valori): 1 1.5 2.5
Inserire riga 1 di A (3 valori): 0.1 1 -3.3
Inserire riga 0 di B (3 valori): 1 1 1
4
Inserire riga 1 di B (3
Inserire riga 2 di B (3
A x B =
C[0][0] = 4.3
C[0][1]
C[1][0] = 2.3
C[1][1]
valori):2.2
valori):0.0
5.4 1.5
-2.2 1.1
= 3.6
C[0][2] = 6.0
= 12.76
C[1][2] = -2.03
5
Scarica