Programmazione – Algoritmi
- La soluzione di problemi con il computer
- Algoritmo e programma
- Computabilità
- La descrizione dell’algoritmo
- Metodi di descrizione degli algoritmi
- I dati nell’algoritmo
- Realizzazione di algoritmi e programmi
- Pseudocodifica
- Programmazione strutturata
- La ricerca della soluzione
Programmazione
- Paradigmi di programmazione
- Linguaggi di programmazione
- Compilatori e interpreti
- Il linguaggio Java
- Gli errori
Java – Introduzione
- CodingGroundURL
- Esecuzione online di programmi java
- ________________________
- Il primo programma In Java
- Metodi print e println
- Tipi di dati
- Le variabili
- Assegnazione
- L’API
- Classi predefinite
- Introduzione a classi e oggetti
- La classe Scanner
- Classe String: stringhe di caratteri
- Overloading
- classe Random
Programmazione a oggetti – Introduzione
Esercizi – Stringhe
- Esercizi sulle stringhe (1-6 sito)
- Esercizi sulle le stringhe
1) Stampare un polinomio dopo aver chiesto i valori dei coefficienti di secondo e primo grado e del
termine noto
… X*X + …X + … =
(Esempio: se i numeri inseriti sono 3, 9 e 7 il programma stampa
3X*X + 9X + 7 =
2) Chiedere all’utente di inserire due numeri, calcolare somma e differenza e stampare
… + … = …
… – … = …
(Esempio: se i numeri inseriti sono 15 e 2 il programma stampa
15 + 2 = 17
15 – 2 = 13
3) Chiedere all’utente di inserire due numeri, calcolare il prodotto, il quoziente e il resto della divisione e stampare
… x … = …
… : … = … con resto ….
(Esempio: se i numeri inseriti sono 15 e 2 il programma stampa
15 x 2 = 30
15 : 2 = 7 con resto 1
4) Data una stringa che contenga un’addizione tra due numeri di due cifre nella forma
n1 + n2 =
calcolare il risultato, inserirlo nella stringa e stampare la stringa risultante
(es: Se la stringa contiene
35 + 20 =
si deve ottenere e stampare la stringa
35 + 20 = 55
5) Data una stringa inserita in input creare una nuova stringa in cui risultino scambiate le due metà della stringa. Se il numero di caratteri è dispari quello centrale non compare nella stringa.
(Non usare istruzioni if)
(es: Se la stringa contiene “pianoforte” contiene “fortepiano”
Se la stringa contiene “pianoeforte” contiene “fortepiano”
6) Data una stringa inserita in input creare una nuova stringa in cui risultino scambiate le due metà della stringa. Se il numero di caratteri è dispari quello centrale deve rimanere nella stessa posizione.
(Non usare istruzioni if)
(es: Se la stringa contiene “pianoforte” contiene “fortepiano”
Se la stringa contiene “pianoEforte” contiene “forteEpiano”
7) Data una stringa che contenga un’addizione tra due numeri nella forma
n1 + n2 =
calcolare il risultato, inserirlo nella stringa e stampare la stringa risultante
(es: Se la stringa contiene
3 + 220 =
si deve ottenere e stampare la stringa
3 + 220 = 223
- Esercizi sulle stringhe (ore, minuti, secondi)
1) Chiedere all’utente un numero espresso in secondi e stampare il numero
corrispondente di ore, minuti e secondi.
2) Chiedere all’utente un numero espresso in secondi e creare una stringa nella forma
..h ..m ..s
Se i numeri sono di una sola cifra aggiungere uno zero davanti (Non usare istruzioni
if).
3) Chiedere all’utente un numero di ore, minuti e secondi e stampare il numero
corrispondente di secondi.
4) Chiedere all’utente un orario come stringa nella forma ..h ..m ..s (sempre due cifre
per ogni valore) e stampare il numero corrispondente in secondi.
5) Chiedere all’utente un orario come stringa nella forma nh nm ns (con n numero
intero, numero di cifre variabile) e stampare il numero corrispondente in secondi.
- Contare le occorrenze di un carattere in una stringa
Data una stringa (richiesta in input) contare quante volte compare un carattere richiesto e fornire anche tutte le posizioni in cui il carattere compare. (Produrre tabella dei dati, flowchart o pseudocodifica, codice)
Java – Elementi di base
- Struttura sequenziale
- Istruzione if..else
- cicli while e do while
- Istruzione for
- ________________________
- Confronti sulle stringhe: equals e compareTo, cicli sulle stringhe
- ________________________
- Conversioni di tipo
- Costanti
- Costanti simboliche
- Espressioni e operatori
Java – Programmazione a oggetti
- Introduzione a classi e oggetti
- Costruttori
- Dichiarazione di metodi
- Documentazione Javadoc
- comando javadoc
Programmazione a oggetti
Esercizi – Classi e metodi
- classe Rettangolo
Rettangolo
attributi:
– base,
– altezza;
metodi (oltre ai metodi get e eventuali set) per:
– ottenere lo stato del rettangolo sotto forma di stringa (b= , h= );
– calcolare il perimetro;
– calcolare l’area;
– verificare se è un quadrato (vero o falso);
– verificare l’uguaglianza a un altro rettangolo (vero o falso);
– confrontare se ha l’area maggiore, uguale o minore di un altro rettangolo; questo metodo e i successivi si devono comportare come il metodo compareTo: restituire -1, 0, 1 se il primo valore è minore, uguale o maggiore del secondo;
– confrontare se è più largo di un altro rettangolo;
– confrontare se è più alto di un altro rettangolo;
– verificare se può contenere un altro rettangolo, cioè se è sia più largo che più alto (vero o falso).
- classe Testo
Realizzare una classe Testo
Attributi:
– String contenuto
Costruttori
– senza parametri (imposta contenuto a stringa vuota)
– con un parametro stringa
Metodi
– getContenuto() restituisce il contenuto del testo
– primoCar() restituisce il primo carattere
– ultimoCar() restituisce l’ultimo carattere
– stringaTra() restituisce la stringa compresa tra due caratteri specificati (caratteri compresi). Se non esiste restituisce la stringa vuota
overloading:
– stringaTra() restituisce la stringa compresa tra due caratteri specificati a partire da una posizione specificata
– la versione senza posizione richiama quella con la posizione
– conta() conta il numero di occorrenze di una stringa nel testo
overloading
– conta() che conta il numero di occorrenze di un carattere richiamando la versione con la stringa
– conta() che conta quante volte compare una stringa compresa tra due caratteri specificati (richiama stringaTra e poi usa la versione che conta le stringhe)
– indexStringaTra() restituisce la posizione di una stringa compresa tra due caratteri specificati a partire da una posizione specificata. Se non esiste restituisce -1 (usa StringaTra per trovare la stringa e poi ne restituisce la posizione).
– la versione senza posizione richiama quella con la posizione
- classe Byte – Rappresentazione di numeri in binario (come stringhe)
Creare la classe Byte
Attributi
– stringa rapprBinaria
Costruttori
– senza parametri: imposta i bit tutti a 0
Metodi
– getRapprBinaria() per restituire la stringa di bit
– setRapprBinaria() per impostare una stringa di bit
– ottieniBit() per restituire un singolo bit specificato
– impostaBit() per impostare un singolo bit specificato
– int conversioneBinDec() per convertire il valore binario della stringa in decimale
– conversioneDecBin() per convertire un valore decimale in binario e memorizzarlo nella stringa
– leggiBinario() per leggere un valore binario e memorizzarlo
– leggiDecimale() per leggere un valore decimale e memorizzarlo come binario richiamando il metodo di conversione
– scriviBinario() per stampare il valore binario contenuto nella stringa
– scriviDecimale() per stampare come decimale il valore binario contenuto nella stringa, dopo averlo convertito con il metodo di conversione
Creare la classe TestByte
Creare una classe Rappresentazioni che gestisca l’interazione con l’utente per effettuare le operazioni desiderate
- classe Bit
Realizzare una classe Bit
Attributi:
– b, valore di un bit, di tipo: int
Costruttori:
– senza parametri: imposta il bit a 0
– con un parametro int, imposta il bit al valore specificato
– con un parametro char, imposta il bit al valore specificato
– con un parametro boolean, imposta il bit al valore specificato (true corrisponde a 1, false a 0)
Metodi
– int bInt() per ottenere il valore 0 o 1 del bit come intero
– char bChar() per ottenere il valore del bit come char
– boolean bBoolean() per ottenere il valore del bit come boolean
– setB(int valore) per impostare il bit a 0 o 1 specificando un intero
– setB(char valore) per impostare il bit a 0 o 1 specificando un carattere
– setB(boolean valore) per impostare il bit a 0 o 1 specificando un boolean
– set() per impostare il bit a 1
– reset() per impostare il bit a 0
– complementa() per fare il complemento del bit (0 se è 1, 1 se è 0)
– uguale(): verifica se il bit è uguale a un altro
– confronta(): confronta il bit con un altro, in modo analogo al metodo compareTo() della classe String
– or(): esegue l’operazione OR tra il bit e un altro
– and(): esegue l’operazione AND tra il bit e un altro
Realizzare la classe TestBit per provare l’esecuzione
Seconda versione
– b di tipo: char
Terza versione
– b di tipo: boolean
- classe CoppiaBit
– classe Bit con b intero
Creare la classe CoppiaBit
Attributi
– due oggetti Bit: Bit b1, Bit b2
Costruttori
– senza parametri: imposta i bit a 00
Metodi
– getB1() per ottenere il primo bit
– getB2() per ottenere il secondo bit
– ottieniCoppia() (o anche aStringa()) per ottenere i bit come stringa di due caratteri
– setB1() per impostare il primo bit
– setB2() per impostare il secondo bit
– impostaCoppia(String s) per impostare i bit in base a una stringa di due caratteri
– set() per impostare tutti i bit a 1
– reset() per impostare tutti i bit a 0
– uguale() per verificare se la coppia di bit è uguale a un’altra coppia
– confronta(): per confrontare una coppia di bit con un’altra, in modo analogo al metodo compareTo() della classe String
– scambia() per scambiare il primo bit con il secondo
– or() per eseguire le operazioni OR bit a bit con un’altra coppia
– and() per eseguire le operazioni AND bit a bit con un’altra coppia
– somma() per eseguire la somma binaria con un’altra coppia (un eventuale terzo bit nel risultato viene perso)
(aggiungere alla classe Bit i metodi:
risultatoSomma()
riportoSomma()
Creare la classe TestCoppiaBit per provare l’esecuzione
(crea un oggetto di tipo CoppiaBit e avvia l’elaborazione)
Sostituire la classe Bit usando
– classe Bit con b carattere
– classe Bit con b booleano
- Carta da gioco
classe Seme
– costanti intere DENARI, COPPE, BASTONI, SPADE inizializzate ai valori numerici opportuni (1-4)
Attributi
– int s : in ogni oggetto conterà uno dei valori precedenti
Costruttori
– con paramentro intero
Metodi
– getS() restituisce il valore numerico del seme
– setS() imposta il valore numerico del seme
– semeStringa() restituisce il nome completo del seme (es. denari, coppe)
– ugualeSeme() confronta se il seme è uguale a un altro e restituisce true o false
classe Valore
– costanti intere ASSO, DUE, TRE, QUATTRO, CINQUE, SEI, SETTE, FANTE, CAVALLO, RE inizializzate ai valori numeri opportuni (1-10)
Attributi
– int v : in ogni oggetto conterà uno dei valori precedenti
Costruttori
– con paramentro intero
Metodi
– getV() restituisce il valore
– setV() imposta il valore
– valoreStringa() restituisce il nome completo del valore(es. asso, tre)
– ugualeValore() confronta se il valore è uguale a un altro e restituisce true o false
classe Carta
Attributi
– Seme sem
– Valore val
Costruttori
– Carta(Seme s, Valore v)
Metodi
– getSem() restituisce il seme
– getVal() restituisce il valore
– setSem(Seme s) imposta il seme
– setVal(Valore v) imposta il valore
– cartaStringa() restituisce il nome completo della carta combinando i nomi di seme e valore (es. asso di denari, tre di spade, fante di bastoni)
– ugualeCarta(Carta c) confronta se la carta è uguale a un’altra e restituisce true o false
IFS – Sviluppo di giochi – Java – Classi e metodi
- Consegna
- Lancio monete e dadi
- Creazione sito web della documentazione
- gioco Frase Nascosta
- Test gioco frase nascosta
- Gioco monete e dadi
Programmazione a oggetti – Associazioni
- Associazioni tra le classi
- Diagrammi UML delle associazioni
- ________________________
- Progettazione delle classi
Java – Array
- Strutture di dati
- Gli array
- Array in Java
- Algoritmi di ricerca e ordinamento degli array
- Array di oggetti
- Classe Arrays
- Matrici
- Classe Vector
Esercizi – Array
- esempio
- classe Array – es 17 di Progetti-classi
Array (prima versione)
attributi:
a: un array di numeri;
costruttori:
– per creare un array vuoto;
– per inserire nell’array attributo i valori di un array passato come parametro;
metodi per:
– sommare all’array un array di dimensione qualsiasi (somma solo gli elementi comuni e restituisce un nuovo array di questa dimensione);
– stampare l’array;
– stampare un array passato come parametro;
– chiedere dei numeri come input da tastiera per riempire tutto l’array;
– verificare se l’array è uguale a un altro array passato come parametro (cioè se gli array hanno esattamente gli stessi elementi nello stesso ordine); il metodo deve restituire un valore booleano;
– moltiplicare l’array per un valore;
– elevare al quadrato ogni elemento dell’array;
– invertire gli elementi dell’array;
– effettuare una rotazione di ordine n degli elementi dell’array;
Array (seconda versione)
attributi:
a: un array di numeri;
dim: dimensione massima dell’array;
numEl: numero degli elementi effettivamente utilizzati;
costruttori:
– per creare un array vuoto;
– per creare un array vuoto con una dimensione passata come parametro;
– per inserire nell’array attributo i valori di un array passato come parametro;
metodi per:
– sommare all’array un array di dimensione qualsiasi (somma solo gli elementi comuni e restituisce un nuovo array di questa dimensione);
– stampare l’array;
– stampare un array passato come parametro;
– chiedere dei numeri come input da tastiera e inserirli nell’array, senza sapere quanti sono i numeri da inserire; quando viene richiamato suppone sempre di ripartire dall’array vuoto
– verificare se l’array è uguale a un altro array passato come parametro (cioè se gli array hanno esattamente gli stessi elementi nello stesso ordine); il metodo deve restituire un valore booleano;
– aggiungere un numero nella prima posizione libera dell’array;
– cancellare un elemento dell’array, dato l’indice;
– moltiplicare l’array per un valore;
(– effettuare il prodotto scalare con un altro array;)
– elevare al quadrato ogni elemento dell’array;
– invertire gli elementi dell’array;
– effettuare una rotazione di ordine n degli elementi dell’array;
– concatenare in fondo all’array un array passato come parametro creando un nuovo array;
– fondere un array (ordinato) con un altro (ordinato) creando un nuovo array.
- Vendite
creare una classe con un array per memorizzare le vendite giornaliere di un negozio in una settimana
scrivere un metodo per trovare il valore maggiore delle vendite della settimana
scrivere un metodo per restituire il nome del giorno in cui si è verificato il valore maggiore delle vendite
- frequenza parole (e vocali)
Analizzare una frase calcolando la frequenza delle vocali.
metodi (nella classe Testo):
public int[ ] frequenzaStringhe(String[ ] stringhe)
public String[ ] elencoParole( )
public int[ ] frequenzaVocali( ) (che richiama frequenzaStringhe)
- classe Byte con array di Bit (array di oggetti)
Partendo da una delle classi Bit realizzate in precedenza:
Creare la classe Byte
Attributi
– costante MAXDIM con valore 8
– rapprBinaria array di MAXDIM (cioè 8) oggetti Bit
Costruttori
– senza parametri: imposta i bit tutti a 0
Metodi
– getRapprBinaria() per restituire l’array di bit
– setRapprBinaria() per impostare l’array di bit
– ottieniBit() per restituire un singolo bit specificato
– impostaBit() per impostare un singolo bit specificato
– aStringa() (o toString()) per restituire il byte come stringa
– int conversioneBinDec() per convertire il valore binario dell’array in decimale
– conversioneDecBin(int dec) per convertire un valore decimale in binario e memorizzarlo nell’array
– leggiBinario() per leggere un valore binario e memorizzarlo
– leggiDecimale() per leggere un valore decimale e memorizzarlo come binario richiamando il metodo di conversione
– scriviBinario() per stampare il valore binario contenuto nell’array
– scriviDecimale() per stampare come decimale il valore binario contenuto nell’array, dopo averlo convertito con il metodo di conversione
Creare la classe TestByte con i test unitari per provare l’esecuzione
Utilizzare i metodi opportuni della classe Bit (scrivendoli se non già disponibili) per creare tutti i metodi successivi.
– set() per impostare tutti i bit del byte a 1
– reset() per impostare tutti i bit del byte a 0
– uguale(): verifica se il byte è uguale a un altro
– confronta(): confronta il byte con un altro, in modo analogo al metodo compareTo() della classe String
———————————————————
Utilizzare i metodi opportuni della classe Bit (scrivendoli se non già disponibili) per creare tutti i metodi successivi.
– ruota() per ruotare i bit in senso orario o antiorario in base al valore di un parametro
– or() per eseguire le operazioni OR bit a bit con un altro byte
– and() per eseguire le operazioni AND bit a bit con un altro byte
———————————————————
Utilizzare i metodi opportuni della classe Bit (scrivendoli se non già disponibili) per creare tutti i metodi successivi.
– somma() per eseguire la somma binaria con un altro byte (un eventuale nono bit nel risultato viene perso) (si ricorda che nella classe Bit si deve avere il metodo risultatoSomma() e il metodo riportoSomma())
– complemento() per fare il complemento a due del byte
– sottrazione() per eseguire la sottrazione binaria con un altro byte (somma con il complemento a due dell’altro byte)
————————————–
Modificare e aggiungere i metodi necessari a gestire la rappresentazione anche di numeri negativi:
rappresentazioneDecBin() riceve un numero con segno, se è positivo richiama la conversione in binario, se è negativo richiama la conversione del valore senza segno e poi richiama il complemento a 2
rappresentazioneBinDec() se il valore è positivo (primo bit a 0) richiama la conversione in decimale, se è negativo (primo bit a 1) richiama il complemento a 2, richiama la conversione in decimale e poi aggiunge il segno negativo
i metodi leggiDecimale() e scriviDecimale() che richiamavano le conversioni ora devono richiamare le rappresentazioni
- Matrici
esercizio n. 18: Matrici
Java – Ulteriori elementi
- Costruttori
- Metodi statici
- classe Math
- Variabili statiche
- Introduzione alla gestione delle eccezioni
- classe Bit con Eccezione
- classe TestBit con Eccezione
- classe BitErratoEcc
- Programmazione a oggetti: ereditarietà
- Ereditarietà
- Classe Object
- Metodo toString
- Metodo equals
- Interfacce
- Interfaccia Comparable
IFS – Mazzo di carte
- Consegna
- classe Seme
- classe Valore
- classe Carta
- classe Mazzo
- Tipi enumerativi
Progettazione
- UMLetino – applicazione per disegnare diagrammi UML
- Schemi Proprietari di cani
- Schemi Prestiti biblioteca
- Schemi Quadrato con attributi
Esercizi – Progettazione
- Gruppo di persone
Progettare le classi presentando il diagramma UML per gestire: un gruppo di persone.
Suggerimento: classe Persona, classe Gruppo.
Non è richiesto di fare la codifica delle classi, solo il progetto.
Pensare agli attributi e ai metodi necessari per ciascuna classe e alla relazione tra le classi.
Considerare un gruppo generico di persone (solo per capirsi, per esempio un gruppo che potrebbe partecipare a un viaggio, iscriversi a un corso, fare una qualsiasi scelta…)
- Famiglia di persone
Progettare le classi presentando il diagramma UML per gestire: una famiglia di persone.
Non è richiesto di fare la codifica delle classi, solo il progetto.
Pensare alle classi necessarie, agli attributi e ai metodi necessari per ciascuna classe e alla relazione tra le classi.
Nella famiglia rispetto al gruppo di persone è necessario considerare il ruolo che ogni persona riveste all’interno della famiglia.
Ci sono varie soluzioni possibili.
- Soluzioni per Famiglia
in Persona
aggiungere il ruolo
però così una persona appartiene a una sola famiglia mentre potrebbe appartenere a due, quella di origine e una nuova famiglia
in Famiglia
padre
madre
array dei figli
ogni elemento è una persona e può essere anche nullo
in Famiglia
array di persone
array dei ruoli delle persone
Gioco con le carte semplice
- classe Random
- Mazzo di carte
classe Carta
attributi:
seme,
valore
classe Mazzo di carte
attributo: array di oggetti Carta (seme, valore);
metodi per:
inizializzare il mazzo in modo ordinato,
mescolare il mazzo,
estrarre la prima carta dal mazzo,
rimettere una carta in fondo al mazzo.
- Gioco semplice
Scrivere un programma per giocare a carte contro il computer: il valore più alto vince; se i valori sono uguali vince il rosso, se sono uguali e dello stesso colore, fiori vincono su picche e cuori su quadri.
IFS – Giochi di carte
- Giochi di carte