Section outline

    • public class HelloWorld {
          public static void main(String[] args) {
              System.out.println("Hello, World");
          }
      }

    • Variabili

      • int : numeri interi
      • double : numeri con la virgola
      • String : qualsiasi sequenza di caratteri (lettere, numeri, punteggiatura,...)

      Stampa

      System.out.println("Ciao a tutti");

      Input

      import java.util.Scanner;
       
      Scanner input = new Scanner(System.in); int i = input.nextInt();

      double d = input.nextDouble();

      String s = input.next();

      • Esercizio 2.1 Scrivete un programma che chieda all'utente due numeri interi e ne stampi: la somma, la differenza, il prodotto, il rapporto, la media.
      • Esercizio 2.2 Scrivete un programma che prende in input la lunghezza del lato di un quadrato e stampa il perimetro e l'area del quadrato.
      • Esercizio 2.3 Scrivete un programma che prende in input in prezzo di un oggetto (in Euro) e la percentuale di sconto, e ne stampa il prezzo scontato.
      • Esercizio 2.4 Scrivete un programma che prende in input due interi e stampa la divisione intera, il resto e la divisione floating point.
    • Assegnamenti

      • +=, -=
      • x++, ++x, x--, --x

      Valutazione delle espressioni

    • Le funzioni matematiche in java.lang.Math

      import java.lang.Math;

      • abs(x) -> valore assoluto di x
      • pow(x,y) -> x elevato alla y
      • sqrt(x) -> radice quadrata di x
      • random() -> numero casuale tra 0 e 1
      • PI -> pi greco.

      Esercizi

      • Esercizio 3.1. Si scriva un programma che prende in input due numeri che corrispondono ai lati di un triangolo rettangolo e si calcoli il valore dell'ipotenusa.
      • Esercizio 3.2. Si scriva un programma che prende in input il raggio di un cerchio e stampa il perimetro e l'area.
      • Esercizio 3.3. Si scriva un programma che prende in input un periodo di tempo espresso in minuti, e calcola l'equivalente in ore. Ad esempio, con input 80 restituisce "1 ora e 20 minuti".
    • I costrutti decisionali

      • if (condizione)
           {...}
        else
           {...}
      • switch (condizione) {
          case ... : .... ; break;
          default : ... ;
        }
    • Il costrutto if-else
        Esercizio 4.1 Scrivete un programma che prende in input due numeri interi e ne stampa il maggiore.
      • Esercizio 4.2 Scrivete un programma che prende in input un numero intero e verifica se è pari o dispari.
      • Esercizio 4.3 Scrivete un programma che prende in input un numero intero e verifica se è positivo, negativo o nullo.
      • Esercizio 4.4 Scrivete un programma che prende in input tre numeri interi e ne stampa il minore.
      • Esercizio 4.5 Scrivete un programma che calcola il prezzo del pasto. Il programma chiede all'utente le portate consumate con 3 domande ("Hai mangiato il primo?","Hai mangiato il secondo?", "Hai mangiato il contorno?") con possibile risposta true o false (un booleano). I prezzi applicati sono:
        • primo € 3.50
        • secondo € 4.00
        • contorno € 2.50
        • menu (primo e secondo) € 6.50
        • menu completo (primo, secondo e contorno) € 8.00

    • Il costrutto switch

      • Esercizio 4.6 Scrivete un programma che prende in input un numero intero compreso tra 1 e 12 e stampa il nome del mese corrispondente. Ad esempio, con input 2 stampa "Febbraio". Si utilizzi un costrutto switch per decidere tra i vari casi.
      • Esercizio 4.7 Scrivete un programma che prende in input un numero intero (compreso tra 0 e 10) e ne stampa la sequenza decrescente in lettere (fino a 1) seguita dalla parola "FUOCO!". Ad esempio, se l'input è 5, il programma stampa: "cinque quattro tre due uno FUOCO!". Si utilizzi un costrutto switch.

    • I cicli WHILE

      • while (condizione) { ... }
      • do { ... } while (condizione);

      Esercizi

      • Esercizio 5.1 Scrivete un programma che chiede in input una sequenza di numeri e si ferma quando l'utente immette 0.
      • Esercizio 5.2 Scrivete un programma che chiede in input una sequenza di numeri e si ferma quando l'utente immette un numero dispari.
      • Esercizio 5.3 Scrivete un programma che chiede in input una sequenza di numeri e stampa la somma di tutti i numeri inseriti, fermandosi quando l'utente immette 0. Ad esempio, se l'utente immette 2 5 3 0 allora il programma stampa 10.
      • Esercizio 5.4 Scrivete un programma che chiede in input una sequenza di numeri, fermandosi quando la somma dei numeri inseriti è maggiore o uguale a 100.
      • Esercizio 5.5 Scrivete un programma che chiede in input il capitale (in euro) ed il tasso di interesse annuo (percentuale), e calcola dopo quanti anni il capitale raddoppia.
      • Esercizio 5.6 [DIFFICILE] Scrivete un programma che prende in input un numero intero 'n' e stampa la successione di Fibonacci fino a 'n'. (La successione di Fibonacci si ottiene partendo dai numeri 0 e 1, ed ogni termine successivo è la somma dei due che lo precedono. Esempio: 0, 1, 1, 2, 3, 5, 8).
    • Il tipo String

      Funzioni principali

      • concatenazione di stringhe: +
      • charAt(i) restituisce il carattere in posizione i (le posizioni partono da 0)
      • length() restuisce la lunghezza della stringa (numero di caratteri inclusi gli spazi)
      • substring(begin, end) restuisce la porzione di stringa a partire dall'indice begin (incluso) fino all'indice end (escluso)
      • toLowerCase() restituisce una stringa convertita in minuscolo
      • toUpperCase() restituisce una stringa convertita in maiuscolo
      • trim() restituisce una stringa senza spazi iniziali e finali.

      Esercizi

        Esercizio 6.1 Scrivete un programma che prende in input una stringa ed un numero intero i, e stampa il carattere in posizione i-esima.
      • Esercizio 6.2 Scrivete un programma che prende in input una stringa e la stampa in minuscolo, in maiuscolo e senza spazi (iniziali e finali). Stampate inoltre la lunghezza della stringa.
      • Esercizio 6.3 Scrivete un programma che prende in input una stringa ed un numero intero 'n', e stampa i primi 'n' caratteri della stringa, seguiti da uno spazio, e dai caratteri restanti. (Esempio: data la stringa CARNEVALE ed il numero 5 stampa "CARNE VALE".)
      • Esercizio 6.4 Scrivete un programma che prende in input un numero intero 'i' ed una parola. Si dica se la lettera in posizione i-esima è una vocale o una consonante. Si utilizzi un costrutto switch per decidere tra i vari casi.

    • Cicli FOR

      Esercizi

      • Esercizio 6.5 Scrivete un programma che prende in input un numero intero 'n' e stampa i numeri pari da 1 a 'n'. (Ad esempio, con input 7 stampa '2 4 6').
      • Esercizio 6.6 Scrivete un programma che prende in input un numero intero 'n' e stampa i numeri da 1 a 'n' in ordine inverso. (Ad esempio, con input 3 stampa '3 2 1').
      • Esercizio 6.7 Scrivete un programma che prende in input un numero intero 'n' e stampa 'n' asterischi. Ad esempio, con input 5 stampa *****.
      • Esercizio 6.8 Scrivete un programma che prende in input una stringa e la stampa sostituendo tutti i caratteri non spazio con asterischi. Ad esempio, con input 'Ciao a tutti' stampa '**** * *****'.
    • Metodi statici.

      Esercizi

      • Esercizio 8.1 Si implementi un metodo statico:
        media(int a, int b, int c)
        che restituisce la media di 3 numeri interi. Si scriva un test con 3 chiamate al metodo.
      • Esercizio 8.2 Si implementi un metodo statico:
        calcolaInteressi(double tasso, double capitale)
        che restituisce gli interessi maturati sul capitale con un certo tasso. Si scriva un test per calcolare gli interessi su 10000 € al 5%.
      • Esercizio 8.3 Si implementi un metodo statico:
        sommaArray(int[] a)
        che restituisce la somma dei numeri contenuti nell'array. Si scriva un test con 3 chiamate al metodo.
      • Esercizio 8.4 Si implementi un metodo statico:
        mediaArray(int[] a)
        che restituisce la media dei numeri contenuti nell'array. Si scriva un test con 3 chiamate al metodo. (Suggerimento: si sfrutti il metodo sommaArray già realizzato).
      • Esercizio 8.5 Si implementi un metodo statico:
        contiene(int[] a, int n)
        che restituisce true se l'array contiene il numero n, e false altrimenti. Si scriva un test con 3 chiamate al metodo.
      • Esercizio 8.6 Si implementi un metodo statico:
        frequenzaArray(int[] a, int n)
        che restituisce la frequenza con cui appare il numero n nell'array. Si scriva un test con 3 chiamate al metodo.
    • Gli array.

      • dichiarazione
      • inizializzazione {...}
      • stampa
      • cicli for e foreach

      • Esercizio 7.1 Si scriva un programma che prende in input 10 interi salvandoli in un array. Infine si stampino solo i numeri maggiori o uguali a 10.
      • Esercizio 7.2 Si scriva un programma che prende in input 5 parole salvandole in un array. Si stampino tutte le parole che iniziano per 'a'.
      • Esercizio 7.3 Si scriva un programma che prende in input una stringa ed un carattere e calcola la frequenza con cui appare il carattere nella stringa. Esempio: "studente" e 't' stampa 2).
      • Esercizio 7.4 Si scriva un programma che prende in input 10 numeri interi e li salva in un array. Infine si stampi il massimo e la sua posizione.
      • Esercizio 7.5 Si scriva un programma che prende in input una parola e controlla se è palindroma (cioè se, letta da destra verso sinistra, rimane identica. Esempio: "aveva").
      • Esercizio 7.6 (difficile) Si scriva un programma che prende in input una stringa e controlla se è palindroma (cioè se, letta da destra verso sinistra, senza considerare gli spazi, rimane identica. Esempio: "i topi non avevano nipoti").

    • Metodi statici con array e stringhe

      • Esercizio 9.1 Si scriva un metodo statico che prende in input un numero n e restituisce un array di lunghezza n che contenga i numeri da 1 a n. Ad esempio, dato 5 si ottiene {1,2,3,4,5}.

      • Esercizio 9.2 Si scriva un metodo statico che prende in input un array e restituisce un nuovo array ottenuto sostituendo ai numeri negativi il numero 0. Ad esempio, data l'array {1,-1,2,3,-4,2,0} si ottiene {1,0,2,3,0,2,0}.

      • Esercizio 9.3 Si progettino i seguenti metodi:
        • lineaAsterischi(int n) restituisce una stringa di 'n' asterischi. Ad esempio, lineaAsterischi(5) restituisce "*****";
        • rettangoloAsterischi(int n, int m) restituisce una stringa con un rettangolo di asterischi di dimensioni n x m. Ad esempio, rettangoloAsterischi(3,5) restituisce:
          *****
          *****
          *****
          (Suggerimento: per andare a capo si utilizzi "\n" e si sfrutti il metodo lineaAsterischi.)
        • quadratoAsterischi(int n) restituisce una stringa con un quadrato di asterischi di lato n. Ad esempio, quadratoAsterischi(3) restituisce:
          ***
          ***
          ***
          (Suggerimento: si sfrutti il metodo rettangoloAsterischi).

    • Generazione di numeri casuali
      • Random generatore = new Random();
        int n = generatore.nextInt(1000);   // genera numeri casuali tra 0 e 999
    • Cicli annidati e matrici
      • Esercizio 10.1 Si scriva un metodo statico creaMatriceRandom(int n, int m) che restituisce una matrice n x m con numeri interi casuali (compresi tra 0 e 9). Si inserisca nel main un test, e si stampi il contenuto della matrice.
      • Esercizio 10.2 Si scriva un metodo statico contiene(int[][] m, int a) che restituisce true se la matrice "m" contiene il numero "a", false altrimenti.
      • Esercizio 10.3 Si scriva un metodo statico frequenza(int[][] m, int a) che restituisce il numero di volte che l'elemento "a" compare nella matrice "m".
      • Esercizio 10.4 Si scriva un metodo statico estraiDiagonale(int[][] m) che restituisce la diagonale della matrice.
      • Esercizio 10.5 Si scriva un metodo statico triangoloAsterischi(int n) che restituisce una stringa con un triangolo fatto di asterischi con base ed altezza 'n'. Ad esempio, con input 4 restituisce:
        *
        **
        ***
        ****
    • Metodi statici ricorsivi

      • Esercizio 11.1 Si scriva un metodo ricorsivo sommaNumeri(int n) che restituisce la somma dei numeri da 1 a n. Esempio: con input 5 restituisce 1+2+3+4+5 = 15.
      • Esercizio 11.2 Si scriva un metodo ricorsivo fattoriale(int n) che restituisce il prodotto dei numeri da 1 a n. Esempio: con input 4 restituisce 1*2*3*4 = 24. (Per convenzione il fattoriale di 0 è 1).
      • Esercizio 11.3 Si scriva un metodo ricorsivo asterischi(int n) che restituisca la stessa stringa del metodo lineaAsterischi(int n).
      • Esercizio 11.4 Si scriva un metodo ricorsivo reverse(String s) che restituisce la stringa inversa di s. Ad esempio: data la stringa "ciao" restituisce "oaic".
      • Esercizio 11.5 Si scriva un metodo ricorsivo fibonacci(int n) che restituisce il termine n-esimo della successione di Fibonacci. (La successione di Fibonacci si ottiene partendo dai numeri 0 e 1, ed ogni termine successivo è la somma dei due che lo precedono. Esempio: 0, 1, 1, 2, 3, 5, 8). Ad esempio, il termine in sesta posizione è 8.
      • Esercizio 11.6 Si scriva un metodo ricorsivo isPalindrome(String s) che restituisce true se la stringa s è palindroma a meno degli spazi, false altrimenti. Ad esempio: data la stringa "i topi non avevano nipoti" restituisce true.

    • Cicli annidati

      • Esercizio 12.1 Si scriva un metodo statico che prende in input due array di interi e restituisce true se esiste almeno un numero presente in entrambi gli array, e false altrimenti.
      • Esercizio 12.2 Si scriva un metodo statico che prende in input un array di interi e restituisce un array contenente le frequenze per tutti i numeri presenti nell'array. Ad esempio, se l'array di input è {2,5,2,3,2,5,0} l'output è {3,2,3,1,3,2,1}.
      • Esercizio 12.3 Si scriva un metodo statico che prende in input due stringhe e restituisce true se le stringhe hanno un carattere in comune, false altrimenti.
      • Esercizio 12.4 Si scriva un metodo statico che prende in input una stringa ed un intero n e restituisce la stringa ripetuta n volte in verticale. Ad esempio, data la stringa "ciao" e il numero 5 restituisce:
        ccccc
        iiiii
        aaaaa
        ooooo 

      Altri esercizi

      • Esercizio 12.5 Si scriva un metodo statico che prende in input un numero intero n e restituisce una stringa contenente tutti i suoi divisori separati da uno spazio. Ad esempio, dato in input 10 restituisce "1 2 5 10".
      • Esercizio 12.6 Si scriva un metodo statico booleano che prende in input due stringhe e verifica che siano una l'inversa dell'altra. Ad esempio, con input "vera" e "arev" restituisce true.

    • Per gli appelli di gennaio e febbraio dell'AA 21/22 la prova scritta a distanza si svolgerà sul sito fad.unich.it utilizzando il sistema di proctoring Respondus.

      La prova scritta consiste in una serie di esercizi sia teorici che pratici (per gli studenti del CLEII nello scritto verrà incluso lo sviluppo di alcuni metodi relativi al progetto di Laboratorio di programmazione 1. La consegna del progetto prima dell'esame è caldamente consigliata (ma non obbligatoria)).

      Il tempo per lo svolgimento della prova scritta è di 2 ore.

      Il voto della prova scritta è in trentesimi. (per gli studenti del CLEII Il voto del progetto è da 0 a 2 e sarà sommato al voto della prova scritta).


    • Di seguito troverete un test di prova per l'esame. Potete svolgerlo per simulare le modalità operative per sostenere la prova scritta con l'utilizzo del sistema di proctoring Respondus. Il test vi chiederà di scaricare e installare Respondus LockDown Browser prima di poter rispondere alle domande. Una volta installato, questo browser sarà utilizzato anche per l'esame.

      NOTA: per sostenere l'esame (e anche questo test di prova) è necessario un pc con Windows o MacOS (sono esclusi tablet, smartphone e pc con Linux).

      Prima della prova d’esame, gli studenti avranno cura di:

      • assicurarsi che l’illuminazione dell’ambiente di lavoro sia adeguata a consentire una nitida visione di monitoraggio;
      • evitare che, nel medesimo ambiente, siano presenti altre persone o monitor per tutta la durata della prova (si ricorda che l'intera prova sarà registrata);
      • evitare che il computer si blocchi durante la prova, in particolare utilizzare il computer servendosi di alimentazione da rete elettrica e non da batterie che possono scaricarsi;
      • predisporre la scrivania il più possibile sgombra;
      • preparare un documento d'identità in corso di validità.
      • Collegare il PC via cavo al Modem (evitare wifi o hotspot con cellulare)
      • assicurarsi che il nome cognome e la foto del documento di riconoscimento siano assolutamente leggibili onde non rischiare l’annullamento dell’esame
      Le linee guida per lo svolgimento dell'esame sono consultabili nel sito:

      È disponibile un video tutorial per l'utilizzo di Respondus: