Massimo/minimo di array

Fab996
Se ho un array composto da 3 elementi, e di questo array ho trovato il massimo e il minimo, come posso accedere all'elemento intermedio?

Risposte
Dante.utopia
Linguaggio? Con massimo e minimo, intendi testa e cosa, oppure l'elemento di "grado" massimo? (Un array può contenere qualsiasi cosa)

Fab996
"Dante.utopia":
Linguaggio? Con massimo e minimo, intendi testa e cosa, oppure l'elemento di "grado" massimo? (Un array può contenere qualsiasi cosa)


In java.. Per esempio ho un array di tre elementi int[3] e questi 3 numeri sono letti attraverso lo scanner; se per esempio l'utente inserisce i numeri 3,5,7 trovare il massimo e il minimo è semplice(ossia 3 e 7), se però volessi accedere al numero 5 come faccio?

Dante.utopia
scusa, per esclusione il 5 è dove non c'è il 3 o il 7!

Fab996
"Dante.utopia":
scusa, per esclusione il 5 è dove non c'è il 3 o il 7!


Eh fino a qua c'ero arrivato, poi quando torno ti posto il testo dell'esercizio e il mio codice.. :D

Dante.utopia
:smt023

Fab996
"Dante.utopia":
:smt023

Il testo del problema è questo:

Sul tavolo ci sono due scatole vuote: la prima ha dimensioni A1 * B1 * C1 e la seconda A2 * B2 * C2, espresse come
base * altezza * profondità in una qualche unità di misura. Si vuole determinare se una delle due scatole può essere
contenuta nell'altra, sapendo che le due scatole possono ruotare (di 90° alla volta) attorno a ciascuno dei propri lati,
per cui le facce delle due scatole sono sempre parallele oppure ortogonali. Tali scatole hanno spessore nullo e, quindi,
una può essere contenuta nell'altra anche a parità di lunghezza di alcuni dei lati (mentre nella realtà ciò non è possibile).
Per esempio, la scatola di dimensioni 3 * 9 * 7 è contenuta nella scatola 7 * 5 * 10 facendo combaciare i due lati lunghi
7 e allineando il lato lungo 3 con quello lungo 5 (e quindi quello lungo 9 con quello lungo 10). Non è invece contenuta
nella scatola 5 * 5 * 10 perché il lato lungo 9 deve necessariamente essere allineato con quello lungo 10 e, quindi, il lato
lungo 7 non può essere allineato con uno dei due lati rimanenti, ciascuno di lunghezza pari a 5. Scrivere un programma che
riceve le dimensioni A1 * B1 * C1 e A2 * B2 * C2 e determina se una delle due scatole può essere contenuta nell'altra.

INPUT:
Il file input.txt è composto da due righe. La prima riga contiene i tre numeri interi A1, B1 e C1 separati da uno spazio.
La seconda riga contiene i tre numeri interi A2, B2 e C2 separati da uno spazio. Tutti i numeri sono positivi e non
superiori a 1000.

OUTPUT:
Il file output.txt è formato da una sola riga determinata come segue:
- se le due scatole sono uguali: "Scatole uguali";
- se la prima scatola può essere contenuta nella seconda: "Prima scatola piu' piccola della seconda";
- se la seconda scatola può essere contenuta nella prima: "Prima scatola piu' grande della seconda";
- in tutti gli altri casi: "Scatole non confrontabili".

-- ESEMPIO

input.txt output.txt
1 2 3 Scatole uguali
3 2 1

input.txt output.txt
2 2 3 Prima scatola piu' grande della seconda
3 2 1

input.txt output.txt
2 2 3 Prima scatola piu' piccola della seconda
3 2 3


input.txt output.txt
3 4 5 Scatole non confrontabili
2 4 6

E questo e il mio codice:
import fiji.io.*;
class Boxes {
	public static void main(String[] args) {
		int[] a,b;
		int i,j,z,max,max1,min1,min,t;
		boolean isGrande,isPiccola;
		a = new int[3];
		b = new int[3];
		t = 0;
		z = 0;
		for (i=0; i<3; i++)
			a[i] = Lettore.in.leggiInt();
		for (j=0; j<3; j++)
			b[j] = Lettore.in.leggiInt();
		max = massimo(a);
		max1 = massimo(b);
		min = minimo(a);
		min1 = minimo(b);
		for (i=0; i<3; i++) {
			if ((a[i]!=max) && (a[i]!=min))
				t = a[i];
		}
		for (j=0; j<3; j++) {
			if ((b[j]!=max1) && ( b[j]!=min1))
				z = b[j];
		}
		if ((max1>=max) && (min1>=min) && (z>=t))
			System.out.println("Prima scatola più piccola della seconda");
		else if ((max1<=max) && (min1<=min) && (z<=t))
			System.out.println("Prima scatola più grande della seconda");
		else if ((max1==max) && (min1==min) && (z==t))
			System.out.println("Scatole uguali");
	}
	public static int massimo(int[] c) {
		int s,z;
		s= c[0];
		for (z=1; z<c.length; z++) {
			if(s<c[z])
				s=c[z];
		}
		return s;
	}
	public static int minimo(int[] c) {
		int s,z;
		s= c[0];
		for (z=1; z<c.length; z++) {
			if(s>c[z])
				s=c[z];
		}
		return s;
	}
}

apatriarca
Perché non hai ordinato i due array invece di calcolare minimo, massimo ed elemento intermedio? Ti stai complicando la vita. Se supponi di avere le dimensioni ordinate dalla più piccola alla più grande (e di usare la notazione \(A_1 \times A_2 \times A_3\) per le dimensioni della prima scatola e \(B_1 \times B_2 \times B_3\) per la seconda), avrai che la prima scatola può essere contenuta nella seconda se \(A_i \leq B_i\) per ogni \(1 \leq i \leq 3,\) è uguale all'altra se \( A_i = B_i \) e la contiene nel caso \( A_i \ge B_i. \) Se non ti trovi in nessuna di queste situazioni allora le scatole non sono confrontabili. Se infatti guardi i tuoi esempi:
* 1 2 3 = sorted(3 2 1)
* 2 2 3 >= sorted(3 2 1) = 1 2 3
* 2 2 3 <= sorted(3 2 3) = 2 3 3
* 3 4 5 non è confrontabile con 2 4 6.

P.S. In Java puoi ordinare un array molto facilmente con Arrays.sort ma non è difficile scrivere una funzione che ordina array di 3 elementi senza grosse difficoltà (puoi farlo con 3 scambi..).

Fab996
"apatriarca":
Perché non hai ordinato i due array invece di calcolare minimo, massimo ed elemento intermedio? Ti stai complicando la vita. Se supponi di avere le dimensioni ordinate dalla più piccola alla più grande (e di usare la notazione \(A_1 \times A_2 \times A_3\) per le dimensioni della prima scatola e \(B_1 \times B_2 \times B_3\) per la seconda), avrai che la prima scatola può essere contenuta nella seconda se \(A_i \leq B_i\) per ogni \(1 \leq i \leq 3,\) è uguale all'altra se \( A_i = B_i \) e la contiene nel caso \( A_i \ge B_i. \) Se non ti trovi in nessuna di queste situazioni allora le scatole non sono confrontabili. Se infatti guardi i tuoi esempi:
* 1 2 3 = sorted(3 2 1)
* 2 2 3 >= sorted(3 2 1) = 1 2 3
* 2 2 3 <= sorted(3 2 3) = 2 3 3
* 3 4 5 non è confrontabile con 2 4 6.

P.S. In Java puoi ordinare un array molto facilmente con Arrays.sort ma non è difficile scrivere una funzione che ordina array di 3 elementi senza grosse difficoltà (puoi farlo con 3 scambi..).


Grazie mille, se volessi fare la funzione vedo se il primo elemento è più piccolo del secondo, se non è cosi lo scambio di posto, e poi vedo se il secondo elemento è più piccolo del terzo, se non è cosi lo scambio di posto ?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.