Pages: 1 [2] 3   Go Down
Print
Author Topic: Esame 7/7/2010  (Read 5722 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
nocs
Matricola
*
Offline Offline

Posts: 94



WWW
« Reply #15 on: 07-07-2010, 16:56:48 »

Io  il primo lo avrei risolto in questa maniera sembra funzionare.. provate a giocare con i valori della matrice

Code:
/**
 * ESERCIZIO 1:
scrivere un metodo che prenda in input due matrici A e B di byte delle stesse
dimensioni e restituisca un boolean se esiste una tappeto in A il cui valore
differisce al più di un'unità da quello di un tappeto di B (in qualunque posizione).
  Un tappeto è l'insieme di 4 elementi contigui disposti a quadrato;
  il suo valore è dato dal prodotto dei 4 numeri.
 *
 *
 */


public class Es1 {

// banale metodo per il calcolo degli adiacenti
// evitabile!! :)

public static int tappeto(byte a,byte b,byte c,byte d) {
return a*b*c*d;
}

public static boolean Es1 (byte [][] A, byte [][] B)
{
for (int i=0; i<A.length-1; i++)
for (int j=0;j<A[0].length-1;j++)
for (int k=0;k<B.length-1;k++)
for (int l=0;l<B[0].length-1;l++)
if (tappeto(A[i][j],A[i][j+1],A[i+1][j],A[i+1][j+1]) == tappeto(B[k][l],B[k][l+1],B[k+1][l],B[k+1][l+1]) || tappeto(A[i][j],A[i][j+1],A[i+1][j],A[i+1][j+1]) == tappeto(B[k][l],B[k][l+1],A[k+1][l],B[k+1][l+1])+1)
return true;

return false;
}


public static void main(String[] args) {
byte [][] A = {
{1,2,3,1},
{3,4,6,1},
{11,24,64,41}
  };

byte [][] B = {
{78,13,21,1},
{1,1,2,1},
{4,6,62,46}
  };
boolean esiste = Es1(A,B);
System.out.println(esiste);
}

}
Logged
jos90
Apprendista Forumista
**
Offline Offline

Posts: 171



« Reply #16 on: 07-07-2010, 19:19:41 »

Su per giu il contenuto è lo stesso in quanto la differenza è che tu semplifichi con un metodo per la moltiplicazione, ma credo che siamo sempre lì per ora.. o sbaglio? e il secondo invece?
Logged

Perchè non pensi di non capire, quando capisci di non pensare?
Seferex
Matricola
*
Offline Offline

Gender: Male
Posts: 34



« Reply #17 on: 08-07-2010, 01:15:03 »

Nocs in quel modo, se arrivi all'ultimo elemento di qualsiasi riga, credo che sballi qualcosa, in quanto non può prendere il corretto "i+1"

Un collega a fine compito, mi ha fatto notare che si poteva fare qualcosa di molto + carino, ovvero inizializzare le variabili del for a 1 e invece di prendere i+1 ecc si prendeva i-1, in questo modo ci si evita un controllo, ma credo che vada bene anche mettendo i+1 (mettendo un controllo ovviamente)

Non so se sono stato chiaro xD


EDIT: Chiedo scusa, non avevo letto .length-1 nulla da obiettare allora ^^
« Last Edit: 08-07-2010, 01:23:42 by Seferex » Logged
jos90
Apprendista Forumista
**
Offline Offline

Posts: 171



« Reply #18 on: 08-07-2010, 03:54:53 »

Ottimo allora, sapete quando si sapranno i risultati? 
Logged

Perchè non pensi di non capire, quando capisci di non pensare?
gianluca
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 129



« Reply #19 on: 08-07-2010, 10:09:53 »

Il proff  aveva detto che si sapranno sicuramente per martedì...
cmq guardate se i miei esercizi vanno bene e poi  commentate
ciau
Code:


ESERCIZIO 1:
scrivere un metodo che prenda in input due matrici A e B di byte delle stesse dimensioni
e restituisca un boolean se esiste una tappeto in A il cui valore differisce al più di un'unità
da quello di un tappeto di B (in qualunque posizione).
Un tappeto è l'insieme di 4 elementi contigui disposti a quadrato;
il suo valore è dato dal prodotto dei 4 numeri.




// Primo esercizio

public class Es_1
{
public static boolean Metodo(byte [][] A, byte [][] B)
{
int valore1=0, valore2=0;

for (int i=0; i<A.length; i++)
for (int j=0; j<A[i].length; j++)
for (int q=0; q<B.length; q++)
for (int k=0; k<B[q].length; k++)
{
valore1=A[i][j]*A[i][j+1]*A[i+1][j]*A[i+1][j+1];

  valore2=B[q][k]*B[q][k+1]*B[q+1][k]*B[q+1][k+1];

System.out.println(valore1+" "+valore2);
if (valore1==valore2  ||  valore1==valore2+1  ||valore1==valore2-1)
return true;
}

return false;
}
}


ESERCIZIO 2:
scrivere un metodo che prenda in input un array bidimensionale
frastagliato A di stringhe e restituisca un boolean se esiste in A
una colonna contenente 3 stringhe con lo stesso carattere finale
(attenzione alle stringhe mancanti).



// Secondo esercizio

public class Es_2
{
public static boolean Metodo(String [][] A)
{
int a=0;
char vocale=' ';

for (int i=0; i<A[0].length; i++)
{
vocale=' ';
a=0;
for (int q=0; q<A[0].length; q++)
for (int j=0; j<A.length; j++)
if (i<A[j].length  &&  q<A[j].length)
{
vocale=A[j][i].charAt(A[j][i].length()-1);

if (A[j][q].charAt(A[j][q].length()-1) == vocale)
{
a++;

if (a==3)
return true;
}
}

}

return false;
}
}
« Last Edit: 08-07-2010, 10:19:59 by gianluca » Logged

*Ho paura di cadere..ma ho anche tanta voglia di volare..questa è la mia contraddizione*
thompson
Matricola
*
Offline Offline

Posts: 40



« Reply #20 on: 08-07-2010, 11:06:30 »

Ottimo allora, sapete quando si sapranno i risultati? 

per i risultati il prof ha detto martedì  (sempre se ho capito bene  )
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione.
isuccia89
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 481



« Reply #21 on: 08-07-2010, 15:32:16 »

si anch'io ho capito martedì... spero cmq che li metta prima x risparmiarci qualche giorno di ansia  testate
Logged

Se incontrerai qualcuno persuaso di saper tutto e di esser capace di far tutto non potrai sbagliare, costui è un imbecille! (Confucio)
nocs
Matricola
*
Offline Offline

Posts: 94



WWW
« Reply #22 on: 08-07-2010, 23:57:41 »

Per rispondere a jos90, il secondo così sembra funzionare

Code:
public class Es2 {

/** ESERCIZIO 2:
scrivere un metodo che prenda in input un array bidimensionale
frastagliato A di stringhe e restituisca un boolean se esiste in A
una colonna contenente 3 stringhe con lo stesso carattere finale
(attenzione alle stringhe mancanti).
* @param args
*/

public static boolean parseChar(String a,String b,String c) {
if (a.charAt(a.length()-1) == b.charAt(b.length()-1) && a.charAt(a.length()-1) == c.charAt(c.length()-1))
return true;
return false;
}

public static boolean Ex2 (String [][] A)
{
int max = A[0].length;
for (int i=1;i<A.length;i++)
if (A[i].length > max)
max = A[i].length;

for (int j=0;j<max;j++)
for (int i=0;i<A.length;i++)
for (int k=i+1;k<A.length;k++)
for (int l=k+1;l<A.length;l++)
{
if ((A[i].length > j ) && (A[k].length > j) && A[l].length > j)
if (parseChar(A[i][j],A[k][j],A[l][j]))
return true;
}
return false;
}

public static void main(String[] args) {
String A [][] = {
{"abcd","sfag","arrac"},
{"bcdeaaa","exercise","xsafjw","tkfnrfien"},
{"bmfttjp","geek","sparc"},
{"sfnaln","aknsfni","@o#nkc"},
{"bsd"},
{"sfakl","asfjna"}

};

boolean found = Ex2(A);
System.out.println(found);

}

}
Logged
gianluca
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 129



« Reply #23 on: 09-07-2010, 10:13:33 »

buongiorno a tutti raga... ciao

potreste dirmi perfavore  se i miei 2 Es. postati poco più sopra sono sbagliati o se vi trovate qualche errore??? testate

Grazie infinite buona giornata ciao
Logged

*Ho paura di cadere..ma ho anche tanta voglia di volare..questa è la mia contraddizione*
ɹǝǝ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 #24 on: 09-07-2010, 10:50:14 »

Code:
// Primo esercizio

public class Es_1
{
public static boolean Metodo(byte [][] A, byte [][] B)
{
int valore1=0, valore2=0;

for (int i=0; i<A.length; i++)        //NOTA 1
for (int j=0; j<A[i].length; j++)    //NOTA 2
for (int q=0; q<B.length; q++)
for (int k=0; k<B[q].length; k++)
{
valore1=A[i][j]*A[i][j+1]*A[i+1][j]*A[i+1][j+1];  //NOTA 3

  valore2=B[q][k]*B[q][k+1]*B[q+1][k]*B[q+1][k+1];

System.out.println(valore1+" "+valore2);
if (valore1==valore2  ||  valore1==valore2+1  ||valore1==valore2-1)  //NOTA 4
return true;
}

return false;
}
}

NOTA 1: i deve smettere di ciclare al valore A.length-2, poiché nel ciclo più annidato viene acceduto anche A[i+1][...]
NOTA 2: j deve smettere di ciclare al valore A[i].length-2, poiché nel ciclo più annidato viene acceduto anche A[...][j+1]
NOTA 3: questo calcolo andrebbe fatto come prima istruzione del corpo del secondo ciclo for (quello che itera su j) cosicché venga fatto meno volte; in questo punto del codice invece viene calcolato troppe volte
NOTA 4: condizione più elegante: Math.abs(valore1-valore2)<=1

Code:
// Secondo esercizio

public class Es_2
{
public static boolean Metodo(String [][] A)
{
int a=0;
char vocale=' ';

for (int i=0; i<A[0].length; i++)    //NOTA 1
{
vocale=' ';
a=0;
for (int q=0; q<A[0].length; q++) //NOTA 1
for (int j=0; j<A.length; j++)
if (i<A[j].length  &&  q<A[j].length)
{
vocale=A[j][i].charAt(A[j][i].length()-1);

if (A[j][q].charAt(A[j][q].length()-1) == vocale)
{
a++;

if (a==3)
return true;
}
}

}

return false;
}
}

NOTA 1: il numero di colonne massimo non è A[0].length, ma piuttosto \max \{{A[i].length\;|\;0\leq i\leq A.length-1}\}
NOTA globale: anche supponendo che l'array bidimensionale frastagliato contenga solo stringhe con almeno 1 carattere ciascuna,
    il tuo codice in realtà performa questo algoritmo:
    Restituisce vero se l'array passato come parametro ha almeno 3 righe tutte e 3 con almeno 1 colonna; falso altrimenti;
    Come dire che non hai centrato l'obiettivo dell'esercizio boh.


E fu così che diventai Forumista Eroico univ ok...
« Last Edit: 09-07-2010, 10:53:38 by reversengineer » 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
thompson
Matricola
*
Offline Offline

Posts: 40



« Reply #25 on: 09-07-2010, 10:50:52 »

si anch'io ho capito martedì... spero cmq che li metta prima x risparmiarci qualche giorno di ansia  testate
     
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione.
gianluca
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 129



« Reply #26 on: 09-07-2010, 12:34:31 »

Grazie tante pe  le correzzioni reversengineer  ok

per come l'ho fatto passerei all'esame???

grazie ciau

GG
Logged

*Ho paura di cadere..ma ho anche tanta voglia di volare..questa è la mia contraddizione*
ɹǝǝ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 #27 on: 09-07-2010, 13:03:09 »

Grazie tante pe  le correzzioni reversengineer  ok

per come l'ho fatto passerei all'esame???
Non conosco i criteri di giudizio del docente che tenuto il tuo esame, nè chi sia per l'attuale a.a.. boh.
A mio giudizio, il primo esercizio è corretto ma non merita il massimo dei voti , mentre il secondo non è corretto e non merita nemmeno la sufficienza boh.

GG
GG è una firma usata da un altro grande utente di questo forum . La prima nel tuo caso sta per Gianluca, e l'altra ?
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
gianluca
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 129



« Reply #28 on: 09-07-2010, 13:35:25 »

GG = Gianluca Grasso
Logged

*Ho paura di cadere..ma ho anche tanta voglia di volare..questa è la mia contraddizione*
jos90
Apprendista Forumista
**
Offline Offline

Posts: 171



« Reply #29 on: 09-07-2010, 14:21:36 »

Grazie nocs, ho capito su per giu dove sbagliavo però io l'ho fatto in maniera diversa, e ho commentato i miei errori fatti nel compito e successivamente corretti a pc, ho capito dove ho sbagliato ma credo siano 4 errori piuttosto gravi xD
Code:
public static boolean esercizio2 (String[][] A)
{
boolean carfin=false;
for (int i=0;i<A.length;i++)
{
for (int j=0;j<A[i].length;j++)
{
for (int k=0;k<A[j][i].length();k++)
{
while (j<=A[i].length-3)//avevo messo =< e doveva essere A[i].length-3 e non A[i].length-2
{
int l=A[j][i].length()-1;int m=A[j+1][i].length()-1;int n=A[j+2][i].length()-1;
//avevo dimenticato le parentesi del metodo length
if (A[j][i].charAt(l)==A[j+1][i].charAt(m)&&A[j+1][i].charAt(m)==A[j+2][i].charAt(n)) //e avevo scordato a inizializzare indici diversi per ogni carattere (l, m, n)
{
carfin=true;
break;
}
else
j++;
//Avevo dimenticato di aggiungere una condizione else, di questo modo il ciclo while non e' infinito
}
}
}
}
return carfin;
Logged

Perchè non pensi di non capire, quando capisci di non pensare?
Pages: 1 [2] 3   Go Up
Print
Jump to: