welcome: please sign in
location: attachment:20091209-EsercitazioneLAB-Array-SOLUZIONI.txt of InformaticaCDLmatematica

Attachment '20091209-EsercitazioneLAB-Array-SOLUZIONI.txt'

Download

   1 // Progettare due metodi statici in un programma Java, siano i loro nomi "raddoppiaArrayIterativo" e 
   2 // "raddoppiaArrayRicorsivo". Entrambi devono ricevere due array di interi, siano "a" e "b". I metodi 
   3 // presuppongono che i due array  siano stati gia' creati nel main, e che "a" sia stato anche 
   4 // inizializzato attraverso una lettura da input. Entrambi i metodi devono semplicemente 
   5 // riempire "b" con gli elementi di "a" moltiplicati per 2; come suggeriscono i nomi, il primo metodo 
   6 // deve essere iterativo, mentre il secondo ricorsivo.
   7 
   8 // *** ESEMPIO: se l'arrai "a" fosse 
   9 //     3  5  6  3  2  6  4  3  5  2
  10 // allora l'array "b" dovrebbe essere creato come
  11 //    6 10 12  6  4  12 8  6 10  4.
  12 
  13 import java.util.*;
  14 
  15 public class RaddoppiaArray {
  16 	
  17     public static Scanner input = new Scanner(System.in); 
  18 
  19     public static void leggiArray(int a[]){
  20     	System.out.println("Inserire " + a.length + " numeri interi, elementi di un array");
  21     	for (int i=0; i < a.length; i++)
  22     		a[i] = input.nextInt();
  23     }
  24 
  25     public static void raddoppiaIterativo (int a[], int b[]){
  26     	for (int i = 0; i < a.length; i++)
  27     		b[i] = a[i]*2;
  28     }
  29     
  30     public static void raddoppiaRicorsivo (int a[], int b[], int pos){
  31     	if (pos < a.length){
  32     		b[pos] = a[pos]*2;
  33     		raddoppiaRicorsivo(a, b, pos+1);
  34     	}
  35     }
  36     
  37     public static void stampaArray(int a[]){
  38     	for (int i=0; i < a.length; i++)
  39     		System.out.println(a[i]);
  40     }
  41 
  42 	public static void main(String[] args) {
  43         System.out.println("Quanti elementi conterra' l'array? ");
  44 
  45         int a[] = new int[input.nextInt()];
  46         leggiArray(a);
  47         
  48         int b[] = new int[a.length];
  49         
  50         raddoppiaIterativo(a, b);
  51         System.out.println("Array raddoppiato (iterativamente): ");
  52         stampaArray(b);
  53         
  54         raddoppiaRicorsivo(a, b, 0);
  55         System.out.println("Array raddoppiato (ricorsivamente): ");
  56         stampaArray(b);
  57 	}
  58 
  59 }
  60 
  61 
  62 /////////////////////////////////////////////////////////////////////////////////7
  63 
  64 
  65 // Scrivere un programma Java che preveda un metodo statico chiamato "minimiLocali".
  66 // Questo metodo deve ricevere un array di interi ed uno di booleani. Siano questi
  67 // array chiamati "v" e "minimo", 
  68 // e siano le loro lunghezze "v.length" e "minimo.length". Il metodo presuppone che i due array 
  69 // siano stati gia' creati e inizializzati nel main; "v" deve essere letto da input, "minimo",
  70 // invece, deve essere inizializzato con elementi tutti pari a "false".
  71 // Gli array devono essere tali che si abbia "v.length==minimo.length". 
  72 // Il metodo "minimiLocali" deve semplicemente far si' che, dopo la sua invocazione, l'array "minimo" 
  73 // contenga "true" in una posizione "i" se e solo se nella posizione "i" dell'array "v" e' presente 
  74 // un minimo locale, cioe' un numero minore sia del suo precedente che del suo successivo.
  75 
  76 // *** ESEMPIO: se l'array "v" fosse 
  77 
  78 //       ---------------
  79 //  v   |1|3|6|2|6|7|1|8| 
  80 //       ---------------
  81 //       0 1 2 3 4 5 6 7
  82 
  83 // allora l'array "minimo" dovrebbe contenere "true" solo nelle posizioni "3" e "6", e "false" in 
  84 // tutte le altre: infatti 2 e 1 sono minimi locali, e si trovano rispettivamente nelle posizioni "3" e "6".
  85 
  86 import java.util.*;
  87 
  88 public class MinimiLocali {
  89 
  90 	public static Scanner input = new Scanner(System.in); 
  91 
  92     public static void leggiArray(int a[]){
  93     	System.out.println("Inserire " + a.length + " numeri interi, elementi di un array");
  94     	for (int i=0; i < a.length; i++)
  95     		a[i] = input.nextInt();
  96     }
  97 
  98     public static void minimiLocali(int a[], boolean b[]){
  99     	for (int i=1; i < a.length-1; i++)
 100     		if (a[i] < a[i-1] && a[i] < a[i+1])
 101     			b[i] = true;
 102     }
 103 
 104 	public static void main(String[] args) {
 105         System.out.println("Quanti elementi conterra' l'array? ");
 106 
 107         int v[] = new int[input.nextInt()];
 108         leggiArray(v);
 109         
 110         boolean minimo[] = new boolean[v.length];
 111     	for (int i=0; i < minimo.length; i++)
 112     		minimo[i] = false;
 113         
 114     	minimiLocali(v, minimo);
 115     	
 116         System.out.println("Sono minimi locali i seguenti elementi: ");
 117     	for (int i=0; i < minimo.length; i++)
 118     		if (minimo[i])
 119     			System.out.println(v[i] + " in posizione " + i + " dell'array");  	
 120 	}
 121 
 122 }
 123 
 124 
 125 
 126 ///////////////////////////////////////////////////////////////////////////////////////////////
 127 
 128 
 129 /*
 130 Esercizio 3
 131 ---
 132 Una piccola compagnia aerea ha appena acquistato un computer da dedicare
 133 al sistema di prenotazione
 134 automatica dei voli. La compagnia vi ha chiesto di programmare il sistema.
 135 Il vostro compito è 
 136 scrivere un programma che assegna i posti di ogni volo dell'unico aereo
 137 posseduto dalla compagnia 
 138 (10 posti in tutto).
 139 Il vostro programma dovrebbe visualizzare questo menù di opzioni:
 140 
 141     Digitare 1 per fumatori o 2 per non fumatori:
 142 
 143 Se la persona digita 1, il programma le assegna un posto nel reparto
 144 fumatori (posti 1-5). 
 145 Se invece digita 2, il posto si troverà nel reparto non fumatori (posti
 146 6-10). Il programma deve 
 147 visualizzare una carta di imbarco che indica il numero del posto della
 148 persona e se si trova nel
 149 reparto non fumatori o fumatori, del tipo
 150 
 151     Reparto fumatori, posto 3   
 152 
 153 Utilizzate un array per rappresentare i posti dell'aereo. Inizializzate
 154 tutti gli elementi 
 155 dell'array a 0, per indicare che all'inizio tutti i posti sono vuoti. Man
 156 mano che vengono 
 157 assegnati, impostate i posti occupati a 1. Il programma, ovviamente, non
 158 deve riassegnare i posti
 159 già occupati. 
 160 Se il reparto richiesto e' completamente occupato, il programma dovra'
 161 segnalare:
 162 
 163     Reparto completo. Il prossimo volo parte tra 3 ore.
 164 
 165 *** POSSIBILE MODIFICA: Quando il reparto richiesto si è riempito,
 166 chiedere al passeggero se è accettabile 
 167 andare nell'altro reparto. Se il passeggero accetta, gli si assegna un
 168 posto nell'altro reparto (ammesso 
 169 che ci sia un posto disponibile). Se il passeggero rifiuta, o anche se
 170 accetta ma anche l'altro reparto 
 171 è pieno, visualizzate 
 172  
 173    Il prossimo volo parte tra 3 ore.
 174 
 175  */
 176 
 177 
 178 import java.util.Scanner;
 179 
 180 public class PoorAirlines {
 181 
 182     public enum Reparto {FUMATORI, NON_FUMATORI}; 
 183     
 184     public static Reparto leggiReparto(Scanner input) {
 185 	int scelta;
 186 	do{
 187 	    System.out.print("Digitare 1 per fumatori o 2 per non fumatori: ");
 188 	    scelta = input.nextInt();
 189 	}while(scelta != 1 && scelta != 2);
 190 	
 191 	if(scelta == 1)
 192 	    return Reparto.FUMATORI;
 193 	else
 194 	    return Reparto.NON_FUMATORI;
 195     }
 196     
 197     public static String repartoToString(Reparto r) {
 198 	switch (r) {
 199 	case FUMATORI:
 200 	    return "fumatori";
 201 	    
 202 	case NON_FUMATORI:
 203 	    return "non fumatori";
 204 
 205 	default:
 206 	    return "";
 207 	}
 208     }
 209     
 210     public static int trovaPosto(Reparto r, int[] p) {
 211 	int da;
 212 	int a;
 213 	
 214 	// i posti fumatori sono da 1 a 5 
 215 	if(r == Reparto.FUMATORI) {
 216 	    da = 1;
 217 	    a = 5;
 218 	}
 219 	// i non fumatori da 6 a 10
 220 	else {	    
 221 	    da = 6;
 222 	    a = 10;
 223 	}
 224 	
 225 	for(int ris = da; ris <= a; ris++) {
 226 	    // verifica se il posto è libero
 227 	    if(p[ris] == 0)
 228 		return ris;
 229 	}
 230 	
 231 	// se non hai trovato un posto libero
 232 	return -1;
 233     }
 234     
 235     public static Reparto scambiaReparto(Reparto r) {
 236 	if(r == Reparto.FUMATORI)
 237 	    return Reparto.NON_FUMATORI;
 238 	else
 239 	    return Reparto.FUMATORI;
 240     }
 241     
 242     public static void main(String[] args) {
 243 	Scanner input = new Scanner(System.in);
 244 	
 245 	// per comodita` non utilizzeremo l'emento di indice 0 
 246 	int[] posti = new int[11];
 247 	
 248 	// all'inizio tutti i posti sono liberi (ovvero 0)
 249 	for(int i = 1; i < posti.length; i++)
 250 	    posti[i] = 0;
 251 	
 252 	while(true) {
 253 	    System.out.println("\nLa PoorAirlines le da il benvenuto.\n");
 254 	    Reparto rep = leggiReparto(input);
 255 	    int posto = trovaPosto(rep, posti);
 256 	    if(posto == -1) {
 257 		String scelta;
 258 		do{
 259 		    System.out.println("\nReparto completo. Desidera verificare la disponibilità nell'altro reparto? (si/no).");
 260 		    scelta = input.next();
 261 		}while(! scelta.equals("si") && ! scelta.equals("no"));
 262 		if(scelta.equals("si")) {
 263 		    rep = scambiaReparto(rep);
 264 		    posto = trovaPosto(rep, posti);
 265 		}
 266 	    }
 267 	    
 268 	    if(posto == -1)
 269 		System.out.println("\nIl prossimo volo parte tra 3 ore.\n");
 270 	    else {
 271 		// segna il posto come occupato
 272 		posti[posto] = 1;
 273 		
 274 		// stampa carta d'imbarco
 275 		System.out.println("\nReparto " + repartoToString(rep) + ", posto " + posto + ".\n");
 276 	    }
 277 	}
 278     }
 279 }

Attached Files

You are not allowed to attach a file to this page.