/* __ __ __ | 1 | 4 | 4 | -- -- -- 0 1 2 */ import java.util.Scanner; class Vettori{ static Scanner tastiera = new Scanner( System.in ); public static int[] leggiVettore( ){ return leggiComponenti( 0 ); // leggi le componenti // a partire dalla prima } private static int[] leggiComponenti( int pos ){ // leggi le componenti che, nell'array in costruzione, // vanno dalla posizione 'pos' in avanti Integer comp = leggiComp(); if ( comp == null ) return new int[ pos ]; // caso base della ricorsione // altrimenti leggiamo le susseguenti componenti int[] susseguenti = leggiComponenti( pos + 1 ); susseguenti[ pos ] = comp; return susseguenti; } public static Integer leggiComp( ){ //private static Integer leggiComp( ){ // leggi una componente intera, oppure null try{ return tastiera.nextInt(); } catch( Exception e ) { return null; } } public static void stampa( int[] aa ){ // System.out.println( aa ); // stamperebbe un illeggibile riferimento System.out.println( aStampa( aa ) ); } public static String aStampa( int[] aa ){ // Concatena, dopo averle trasformate in stringhe, // tutte le componenti del dato array 'aa', per // poterle poi (in qualche altro metodo, come // il metodo 'stampa' qua sopra o il metodo 'main' // riportato in calce) stampare. String acc = ""; for( int el : aa ) // 'for' generica acc = acc + el + " "; return acc; } public static int sommatoria( int[] aa ){ // Effettua la somma di tutte le componenti del // dato array 'aa'. int acc = 0; for( int el : aa ) // 'for' generica acc = acc + el; // for( int i = 0; i < aa.length; i++ ) // // acc = acc + aa[ i ]; return acc; } public static int produttoria( int[] aa ){ // Effettua il prodotto di tutte le componenti del // dato array 'aa'. int acc = 1; for( int i = 0; i < aa.length; i++ ) // 'for' non generica: ci servira` da modello // per la 'posMinimo' (vedi sotto) acc = acc * aa[ i ]; return acc; } public static int minimo( int[] aa ){ int acc = Integer.MAX_VALUE; for( int el : aa ) // 'for' generica acc = (acc < el) ? acc : el; return acc; } // Qui sotto la determinazione delle componenti // minima e del massima verra` effettuata // secondo lo stesso schema che ci ha // permesso di calcolare sommatoria e // produttoria public static int massimo( int[] aa ){ int acc = Integer.MIN_VALUE; for( int el : aa ) // 'for' generica acc = (acc < el) ? el : acc; return acc; } public static int posMinimo( int[] aa, int inizio ){ // 'inizio' ci fornisce la posizione nominale di inizio array int acc = Integer.MAX_VALUE; Integer posMin = null; for( int i = inizio; i < aa.length; i++ ) if ( acc > aa[ i ] ){ posMin = i; acc = aa[ i ];} return posMin; } public static void insSorting( int[] aa ){ // Cerca ripetutamente il minimo e portalo in testa // di un array via via nominalmente piu` corto. // Alla fine l'array sara` ordinato in senso // non-decrescente. for( int i = 0; i < aa.length-1; i++ ){ // 'Nominalmente' l'array va dalla posizione i // inclusa fino alla posizione length esclusa. // Cerchiamo in che posizione sta il minimo. int posMinimale = posMinimo( aa, i ); swap( aa, i, posMinimale ); } } private static void swap( int[] vet, int p, int q ){ int t = vet[ q ]; // copia messa in salvo vet[ q ] = vet[ p ]; vet[ p ] = t; } public static void main( String[] argg ){ int[] vettore; System.out.println( "Dammi i tuoi numeri>>> " ); vettore = leggiVettore(); // System.out.println( "Ecco i tuoi numeri " + vettore ); System.out.println( "Riecco i tuoi numeri " + aStampa( vettore ) ); System.out.println( "Ecco la loro somma " + sommatoria( vettore ) ); System.out.println( "Ecco il loro prodotto " + produttoria( vettore ) ); System.out.println( "Il loro minimo, " + minimo( vettore ) + " si trova in posizione " + posMinimo( vettore, 0 ) ); insSorting( vettore ); System.out.println( "I tuoi numeri, dopo il riordino " + aStampa( vettore ) ); } }