// Progettare due metodi statici in un programma Java, siano i loro nomi "raddoppiaArrayIterativo" e // "raddoppiaArrayRicorsivo". Entrambi devono ricevere due array di interi, siano "a" e "b". I metodi // presuppongono che i due array siano stati gia' creati nel main, e che "a" sia stato anche // inizializzato attraverso una lettura da input. Entrambi i metodi devono semplicemente // riempire "b" con gli elementi di "a" moltiplicati per 2; come suggeriscono i nomi, il primo metodo // deve essere iterativo, mentre il secondo ricorsivo. // *** ESEMPIO: se l'arrai "a" fosse // 3 5 6 3 2 6 4 3 5 2 // allora l'array "b" dovrebbe essere creato come // 6 10 12 6 4 12 8 6 10 4. import java.util.*; public class RaddoppiaArray { public static Scanner input = new Scanner(System.in); public static void leggiArray(int a[]){ System.out.println("Inserire " + a.length + " numeri interi, elementi di un array"); for (int i=0; i < a.length; i++) a[i] = input.nextInt(); } public static void raddoppiaIterativo (int a[], int b[]){ for (int i = 0; i < a.length; i++) b[i] = a[i]*2; } public static void raddoppiaRicorsivo (int a[], int b[], int pos){ if (pos < a.length){ b[pos] = a[pos]*2; raddoppiaRicorsivo(a, b, pos+1); } } public static void stampaArray(int a[]){ for (int i=0; i < a.length; i++) System.out.println(a[i]); } public static void main(String[] args) { System.out.println("Quanti elementi conterra' l'array? "); int a[] = new int[input.nextInt()]; leggiArray(a); int b[] = new int[a.length]; raddoppiaIterativo(a, b); System.out.println("Array raddoppiato (iterativamente): "); stampaArray(b); raddoppiaRicorsivo(a, b, 0); System.out.println("Array raddoppiato (ricorsivamente): "); stampaArray(b); } } /////////////////////////////////////////////////////////////////////////////////7 // Scrivere un programma Java che preveda un metodo statico chiamato "minimiLocali". // Questo metodo deve ricevere un array di interi ed uno di booleani. Siano questi // array chiamati "v" e "minimo", // e siano le loro lunghezze "v.length" e "minimo.length". Il metodo presuppone che i due array // siano stati gia' creati e inizializzati nel main; "v" deve essere letto da input, "minimo", // invece, deve essere inizializzato con elementi tutti pari a "false". // Gli array devono essere tali che si abbia "v.length==minimo.length". // Il metodo "minimiLocali" deve semplicemente far si' che, dopo la sua invocazione, l'array "minimo" // contenga "true" in una posizione "i" se e solo se nella posizione "i" dell'array "v" e' presente // un minimo locale, cioe' un numero minore sia del suo precedente che del suo successivo. // *** ESEMPIO: se l'array "v" fosse // --------------- // v |1|3|6|2|6|7|1|8| // --------------- // 0 1 2 3 4 5 6 7 // allora l'array "minimo" dovrebbe contenere "true" solo nelle posizioni "3" e "6", e "false" in // tutte le altre: infatti 2 e 1 sono minimi locali, e si trovano rispettivamente nelle posizioni "3" e "6". import java.util.*; public class MinimiLocali { public static Scanner input = new Scanner(System.in); public static void leggiArray(int a[]){ System.out.println("Inserire " + a.length + " numeri interi, elementi di un array"); for (int i=0; i < a.length; i++) a[i] = input.nextInt(); } public static void minimiLocali(int a[], boolean b[]){ for (int i=1; i < a.length-1; i++) if (a[i] < a[i-1] && a[i] < a[i+1]) b[i] = true; } public static void main(String[] args) { System.out.println("Quanti elementi conterra' l'array? "); int v[] = new int[input.nextInt()]; leggiArray(v); boolean minimo[] = new boolean[v.length]; for (int i=0; i < minimo.length; i++) minimo[i] = false; minimiLocali(v, minimo); System.out.println("Sono minimi locali i seguenti elementi: "); for (int i=0; i < minimo.length; i++) if (minimo[i]) System.out.println(v[i] + " in posizione " + i + " dell'array"); } } /////////////////////////////////////////////////////////////////////////////////////////////// /* Esercizio 3 --- Una piccola compagnia aerea ha appena acquistato un computer da dedicare al sistema di prenotazione automatica dei voli. La compagnia vi ha chiesto di programmare il sistema. Il vostro compito è scrivere un programma che assegna i posti di ogni volo dell'unico aereo posseduto dalla compagnia (10 posti in tutto). Il vostro programma dovrebbe visualizzare questo menù di opzioni: Digitare 1 per fumatori o 2 per non fumatori: Se la persona digita 1, il programma le assegna un posto nel reparto fumatori (posti 1-5). Se invece digita 2, il posto si troverà nel reparto non fumatori (posti 6-10). Il programma deve visualizzare una carta di imbarco che indica il numero del posto della persona e se si trova nel reparto non fumatori o fumatori, del tipo Reparto fumatori, posto 3 Utilizzate un array per rappresentare i posti dell'aereo. Inizializzate tutti gli elementi dell'array a 0, per indicare che all'inizio tutti i posti sono vuoti. Man mano che vengono assegnati, impostate i posti occupati a 1. Il programma, ovviamente, non deve riassegnare i posti già occupati. Se il reparto richiesto e' completamente occupato, il programma dovra' segnalare: Reparto completo. Il prossimo volo parte tra 3 ore. *** POSSIBILE MODIFICA: Quando il reparto richiesto si è riempito, chiedere al passeggero se è accettabile andare nell'altro reparto. Se il passeggero accetta, gli si assegna un posto nell'altro reparto (ammesso che ci sia un posto disponibile). Se il passeggero rifiuta, o anche se accetta ma anche l'altro reparto è pieno, visualizzate Il prossimo volo parte tra 3 ore. */ import java.util.Scanner; public class PoorAirlines { public enum Reparto {FUMATORI, NON_FUMATORI}; public static Reparto leggiReparto(Scanner input) { int scelta; do{ System.out.print("Digitare 1 per fumatori o 2 per non fumatori: "); scelta = input.nextInt(); }while(scelta != 1 && scelta != 2); if(scelta == 1) return Reparto.FUMATORI; else return Reparto.NON_FUMATORI; } public static String repartoToString(Reparto r) { switch (r) { case FUMATORI: return "fumatori"; case NON_FUMATORI: return "non fumatori"; default: return ""; } } public static int trovaPosto(Reparto r, int[] p) { int da; int a; // i posti fumatori sono da 1 a 5 if(r == Reparto.FUMATORI) { da = 1; a = 5; } // i non fumatori da 6 a 10 else { da = 6; a = 10; } for(int ris = da; ris <= a; ris++) { // verifica se il posto è libero if(p[ris] == 0) return ris; } // se non hai trovato un posto libero return -1; } public static Reparto scambiaReparto(Reparto r) { if(r == Reparto.FUMATORI) return Reparto.NON_FUMATORI; else return Reparto.FUMATORI; } public static void main(String[] args) { Scanner input = new Scanner(System.in); // per comodita` non utilizzeremo l'emento di indice 0 int[] posti = new int[11]; // all'inizio tutti i posti sono liberi (ovvero 0) for(int i = 1; i < posti.length; i++) posti[i] = 0; while(true) { System.out.println("\nLa PoorAirlines le da il benvenuto.\n"); Reparto rep = leggiReparto(input); int posto = trovaPosto(rep, posti); if(posto == -1) { String scelta; do{ System.out.println("\nReparto completo. Desidera verificare la disponibilità nell'altro reparto? (si/no)."); scelta = input.next(); }while(! scelta.equals("si") && ! scelta.equals("no")); if(scelta.equals("si")) { rep = scambiaReparto(rep); posto = trovaPosto(rep, posti); } } if(posto == -1) System.out.println("\nIl prossimo volo parte tra 3 ore.\n"); else { // segna il posto come occupato posti[posto] = 1; // stampa carta d'imbarco System.out.println("\nReparto " + repartoToString(rep) + ", posto " + posto + ".\n"); } } } }