Pages: [1]   Go Down
Print
Author Topic: Esercizio Prima Prova  (Read 1284 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« on: 12-12-2010, 19:47:20 »

Salve!  ciao

Ho difficoltà nello svolgere il seguente esercizio

Code:
/* Scrivere un metodo che prenda in input tre matrici, con le stesse dimensioni, di double e restituisca
un boolean che indichi se le tre matrici presentano (in qualunque posizione) una colonna comune.
P.S.: Due double sono considerati uguali se differiscono per meno di un millesimo.*/

public boolean TreMatr(double[][] A, double[][] B, double[][] C)
{
for(int j=0;j<A.length*3;j++)
{
boolean uguali=true;
for(int k=0;k<A[j].length;k++)
{
for(int i=0,x=1;(i<A[j].length)&&(uguali);i++)
{
if(Math.abs(A[i][j]-B[i][k])<0.001)
x++;
else
uguali=false;

if(x==A[j].length)
return true;
}

for(int i=0,x=1;(i<A[j].length)&&(uguali);i++)
{
if(Math.abs(A[i][j]-C[i][k])<0.001)
x++;
else
uguali=false;

if(x==A[j].length)
return true;
}

for(int i=0,x=1;(i<A[j].length)&&(uguali);i++)
{
if(Math.abs(B[i][j]-C[i][k])<0.001)
x++;
else
uguali=false;

if(x==A[j].length)
return true;
}
}
}
return uguali;
}

Nel confrontare 2 matrici non avrei avuto alcun problema; con 3 mi sono confuso!   testate
« Last Edit: 12-12-2010, 19:49:58 by Luxandro » Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #1 on: 13-12-2010, 19:02:57 »

L'ho risolto! 

Mi ero complicato la vita inutilmente!!   yoh
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
CoreyTaylor26
Matricola
*
Offline Offline

Gender: Male
Posts: 78



« Reply #2 on: 13-12-2010, 19:13:35 »

Giusto per curiosità, come hai risolto? 
Logged
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #3 on: 13-12-2010, 19:19:20 »

Dovrebbe venir fuori una cosa di questo tipo  [Emoticon] Asd ma fossi in te non ci crederei molto, dopo una giornata di studio lo sclero inizia a farsi sentire    testate

Code:
public boolean TreMatr(double[][] A, double[][] B, double[][] C)
{
         boolean trovato;
//Confronta la j-esima colonna di A con la k-esima colonna di B
for(int j=0;j<A.length;j++)
{
trovato=true;
for(int k=0;k<B[j].length;k++)
{
for(int i=0,x=1;(i<A[j].length)&&(trovato);i++)
{
if(Math.abs(A[i][j]-B[i][k])<0.001)
x++;
else
trovato=false;
if(x==A[j].length)
return true;
}
}
         }

//Confronta la j-esima colonna di A con la k-esima colonna di C
for(j=0;j<A.length;j++)
{
                trovato=true;
for(k=0;k<A[j].length;k++)
{
for(i=0,x=1;(i<C[j].length)&&(trovato);i++)
{
if(Math.abs(A[i][j]-C[i][k])<0.001)
x++;
else
trovato=false;
if(x==A[j].length)
return true;
}
}
    }

//Confronta la j-esima colonna di B con la k-esima colonna di C
for(j=0;j<A.length;j++)
{
                trovato=true;
for(k=0;k<C[j].length;k++)
{
for(i=0,x=1;(i<A[j].length)&&(trovato);i++)
{
if(Math.abs(B[i][j]-C[i][k])<0.001)
x++;
else
trovato=false;

if(x==A[j].length)
return true;
}
}
}
return false;
}

EDIT: Come previsto avevo sbagliato  [Emoticon] Asd

PS.: Questo metodo non è il massimo dell'efficienza, ma è l'unico modo in cui riesco a farlo adesso   boh
« Last Edit: 13-12-2010, 22:26:16 by Luxandro » Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
CoreyTaylor26
Matricola
*
Offline Offline

Gender: Male
Posts: 78



« Reply #4 on: 13-12-2010, 19:23:57 »

A chi lo dici!  cry lo sclero me lo porto addosso già da qualche oretta!
Comunque, ci rifletterò su.. magari più tardi!  testate ora come ora sto fondendo!  I
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #5 on: 14-12-2010, 01:50:26 »

EDIT: Come previsto avevo sbagliato  [Emoticon] Asd

PS.: Questo metodo non è il massimo dell'efficienza, ma è l'unico modo in cui riesco a farlo adesso   boh
Conviene che metti l'EDIT dopo il P.S., altrimenti sembra che hai riconosciuto l'erroneità della soluzione ma di averla tuttavia caratterizzata come "non efficiente, ma comunque un modo in cui riesci a farlo" (cioè questo non è un modo per farlo, nemmeno poco efficiente, poiché è sbagliato boh, come tu stesso hai notato univ).

Tornando al codice, il tuo problema è che se guardi bene j e k stanno ciclando sulle righe , non sulle colonne .

E poi sono stati fatti dei controlli separati (mentre vanno fatti in modo coerente - leggasi cicli for annidati ).

Se vuoi, domani posto una soluzione al problema.
Comunque, non è difficile, devi solo fare (almeno!) tre cicli annidati, di cui uno per ciclare sulle colonne di A, uno per ciclare sulle colonne di B e uno per ciclare sulle colonne di C (supposto d'aver chiamato A, B e C le tre matrici ).
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #6 on: 14-12-2010, 07:23:51 »

Così dovrebbe andare!  

Code:
/* Scrivere un metodo che prenda in input tre matrici, con le stesse dimensioni, di double e restituisca
un boolean che indichi se le tre matrici presentano (in qualunque posizione) una colonna comune.
P.S.: Due double sono considerati uguali se differiscono per meno di un millesimo.*/

public boolean TreMatrici(double [][] A, double [][] B, double [][] C)
{
for (int j = 0; j < j [0].length; j++)
{
for (int k = 0; k < j [0].length; k++)
{
boolean uguali = false, _a = true , _b = true , _c = true;
for (int i = 0, a = 1, b = 1, c = 1; (i < A.length) && (uguali); i++)
{
if (Math.abs(A [i][j] - B [i][k]) < 0.001)   a++;
else   _a = false;
if (Math.abs(A [i][j] - C [i][k]) < 0.001)   b++;
else   _b = false;
if (Math.abs(B [i][j] - C [i][k]) < 0.001)   c++;
else   _c = false;

if ((a == A.length)||(b == A.length)||(c == A.length))   return true;
if ((! _a) && (! _b) && (! _c))   uguali = false;
}
}
}
return false;
}
« Last Edit: 14-12-2010, 07:38:40 by Luxandro » Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #7 on: 14-12-2010, 11:59:08 »

Ma perché non compili i programmi prima di postarli testate testate testate testate testate testate testate testate testate testate testate testate ?
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: