|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Sep 2009
Città: Soverato (Catanzaro)
Messaggi: 510
|
[JAVA] Aiuto codice!!!
Salve gente!!!
Dovrei fare questo codice: Scrivere un metodo che restituisce true se e solo sè la matrice M di interi è triangolare inferiore!!! Grazie!!! |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 250
|
Non è un buon esercizio farsi scrivere un codice da altri. Il mio consiglio è di provarci e postare quello che hai scritto per capire cosa manca/sbagli..
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
dipende molto da come ti viene passata al metodo che devi scrivere....
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
Quote:
Comunque, una matrice triangolare inferiore è del tipo: ![]() Dovrai quindi lavorare , a meno che tu non definisca una tua classe matrice, con un array bidimensionale. E sicuramente dovrai muoverti in maniera correttra con dei cicli for. Però ora il codice devi scriverlo tu. |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
8 righe di codice essendo verbosi (ed escluso segnature, solo il corpo del metodo)(non essendo verbosi bastano 5)
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
Codice:
public boolean isATriangleMatrix(int[][] mtx) {
for(int i=0;i<mtx.length;i++) {
for(int e=0;e<i;e++) {
if(mtx[i][e]!=0)
return false;
}
}
return true;
}
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- Ultima modifica di Frank1962 : 06-12-2009 alle 00:15. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Chiedeva la triangolare inferiore, non la superiore, ma l'unica differenza tra la tua (triangolare superiore) e la triangolare inferiore è l'inizializzazione dell''indice e controllo di uscita sul secondo for, in pratica abbiamo detto la soluzione però!!!! (se la doveva trovare da solo)
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB |
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Sep 2009
Città: Soverato (Catanzaro)
Messaggi: 510
|
Quote:
Comunque avete ragione, domani provo a farlo io e lo posto, cosi mi correggete Questo qui purtroppo non lo capisco, perchè ci sono delle cose che ancora non ho fatto (sono praticamente all'inizio) |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Quote:
Andando nello specifico, cosa non capisci? Ricorda che prima di tutto c'è l'algoritmo, e poi dopo la sua traduzione in codice. L'algoritmo dietro quel codice l'hai capito? L'algoritmo che vuoi applicare l'hai bene in mente? Ragiona su quel che vuoi, sapere se una matrice è triangolare superiore (o inferiore, è speculare). Che vuol dire che una matrice è triangolare superiore (inferiore)? Che tutti gli elementi a sinistra (destra) della diagonale sono zero, quindi quando non lo è? quando uno di quegli elementi è diverso da zero. Adesso scomponi il problema, ragiona in termini di righe. Una matrice è composta da n righe, ogni riga la partizioniamo in 3 insiemi [a_0,a_k-1],[a_k],[a_k+1,a_n] dove k è l'indice della diagonale. Fatto questo nelle matrici triangolari superiori (inferiori) gli elementi della partizione [a_0,a_k-1] ([a_k+1,a_n]) devono essere tutti zeri, detta in un altro modo appena trovi un elemento diverso da zero sai per certo che la matrice NON è triangolare superiore (inferiore). Questo vale per ogni riga della matrice, il punto è adesso trovare l'indice dell'elemento diagonale. Alla prima riga l'elemento diagonale è il primo, nella seconda il secondo etc. etc. Come vedi è sempre l'elemento (i,i). Quindi l'algoritmo è: Codice:
per ogni riga della matrice
per ogni elemento della partizione [a_0,a_k-1] ([a_k+1,a_n])
se l'elemento è diverso da zero
la matrice NON è triangolare superiore (inferiore), quindi ritorna falso
ritorna vero
Codice:
int[][] matrix Codice:
for(dichiarazione e inizializzazione variabile d'indice;condizione di permanenza nel ciclo;incremento variabile) Codice:
for (int i=0;i<matrix.length;i++) Terzo passo, scorrere la partizione desiderata, gli zeri devono stare alla sinistra, quindi inizializiamo l'indice a 0 e lo facciamo finire subito prima dell'elemento diagonale che è l'i-esimo Codice:
for(int j=0;j<i;j++) Codice:
for(int j=i+1;j<matrix[i].length;j++) Quarto passo, se quell'elemento non è zero uscire Codice:
if (matrix[i][j]!=0) return false; Codice:
return true
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB Ultima modifica di morskott : 07-12-2009 alle 12:40. |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Nottambulo anche te?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Sep 2009
Città: Soverato (Catanzaro)
Messaggi: 510
|
Quote:
Comunque di quel codice non capivo i isATriangleMatrix e mtx (si possono scrivere in un altro modo???), dato che non li avevo mai scritto...I for e l'if si, ci mancherebbe... |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Roma
Messaggi: 1242
|
Sono semplicemente il nome del metodo e il nome del parametro che gli passi. Potevi benissimo dichiararla come: public boolean pincoPallino (int[][] matrice)
__________________
Concertina: "I know the truth is in between the 1st and 40th drink" |
|
|
|
|
|
#14 | |
|
Bannato
Iscritto dal: Sep 2009
Città: Soverato (Catanzaro)
Messaggi: 510
|
Quote:
E se invece di public boolean usassi public static void è un errore??? |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Roma
Messaggi: 1242
|
Si. Void significa che il metodo non restituisce nulla, nel caso da te richiesto è necessario un boolean che restituisce true/false.
__________________
Concertina: "I know the truth is in between the 1st and 40th drink" |
|
|
|
|
|
#16 |
|
Bannato
Iscritto dal: Sep 2009
Città: Soverato (Catanzaro)
Messaggi: 510
|
|
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Sep 2009
Città: Soverato (Catanzaro)
Messaggi: 510
|
Quindi alla fine verrebbe cosi:
Codice:
import fiji.io.*;
public class Matrici
{
public boolean MatriceTriangolareSup (int[][] m)
{
for (int i=0; i<m.length; i++)
{
for (int j=0; j<i; j++)
{
if (m[i][j] != 0)
return false;
}
}
return true;
}
}
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
esatto
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Sep 2009
Città: Soverato (Catanzaro)
Messaggi: 510
|
Ottimo, grazie a tutti per avermi aiutato!!!
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Roma
Messaggi: 1242
|
Per convenzione i nomi dei metodi iniziano con lettera minuscola, quindi sarebbe consigliabile matriceTriangolareSup. Ovviamente è solo una convenzione e come hai scritto te non pregiudica minimamente la corretta esecuzione del programma
__________________
Concertina: "I know the truth is in between the 1st and 40th drink" |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:28.





















