Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: atrix0ne on 07-04-2009, 12:55:49



Title: PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 12:55:49
Code:
public class one
  {
  public static boolean metodo(float [][]A)
    {
    float somma=0;
    float somma1=0;
    float somma2=0;
    float somma3=0;
    float perimetro=0;
    float max=0;
    int r=0;
    for(r=0;r<A.length;r++)
      {
      somma+=A[r][0];
      }
    for(int c=0;c<A[0].length;c++)
      {
      somma1+=A[0][c];
      }
    int c1=A[0].length-1;
    for(int r1=0;r1<A.length;r1++)
      {
      somma2+=A[r1][c1];
      }
    int r2=A.length-1;
    for(int c2=0;c2<A[0].length;c2++)
      {
      somma3+=A[r2][c2];
      }
    perimetro=somma1+somma2+somma3;
    for(r=0;r<A.length;r++)
      {
      for(int c=0;c<A[0].length;c++)
        {
        if(max<A[r][c])
          {
          max=A[r][c];
          }
        }
      }
    if(max==perimetro) return true;
    return false;
    }
         public static void main (String[]args)
  {
    int riga=3;
    int colonna=4;
    float m[][]= {   { 8,3,9,2},
                    { 1, 1,1,2},
                    { 1,1,1 ,1}

                  };
    int i,j;

    for(i=0;i<riga;i++)
      {
        System.out.println();
        for(j=0;j<colonna;j++)
          System.out.print(m[i][j]+" ");
      }

    System.out.println();

    System.out.println(metodo(m));
  }
}
io l'ho fatto cosi',ho sbagliato i " -1" e i numeri degli angoli li conto 2 volte .poverinoi


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 13:24:14
uffa si poteva fare cn 4 for  .poverinoi e io ne ho messi 6 .poverinoi


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: TheUniversalMind on 07-04-2009, 13:44:43
questo è il primo, io ho sbagliato nel dichiarare le variabili "somma" e "massimo" di tipo int. (come uno scemo, non mi sono reso conto che l'array era di float) spero proprio ke non mi vengano sottratti troppi punti

Code:
public class esercizio1esame
{
public static void main (String [] args)
{
float [][] A={{5,5,5,5,5},
      {5,1,300,1,5},
      {5,1,1,1,5},
      {5,5,5,5,5}};
     
System.out.println(metodo(A));
}

public static boolean metodo (float [][] A)
{
float somma=0;
float massimo=A[0][0];
for (int i=0;i<A.length;i++)
{
for (int j=0;j<A.length;j++)
{
if (i==0 || j==0)
{
somma+=A[i][j];
}
else if (i==A.length-1 || j==A.length-1)
{
somma+=A[i][j];
}

if (A[i][j]>massimo)
{
massimo=A[i][j];
if (massimo<somma)
{
return true;
}
}
}
}
return false;
}
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: ShiShi on 07-04-2009, 13:59:15
questo è il primo, io ho sbagliato nel dichiarare le variabili "somma" e "massimo" di tipo int. (come uno scemo, non mi sono reso conto che l'array era di float) spero proprio ke non mi vengano sottratti troppi punti

Code:
public class esercizio1esame
{
public static void main (String [] args)
{
float [][] A={{5,5,5,5,5},
      {5,1,300,1,5},
      {5,1,1,1,5},
      {5,5,5,5,5}};
     
System.out.println(metodo(A));
}

public static boolean metodo (float [][] A)
{
float somma=0;
float massimo=A[0][0];
for (int i=0;i<A.length;i++)
{
for (int j=0;j<A.length;j++)
{
if (i==0 || j==0)
{
somma+=A[i][j];
}
else if (i==A.length-1 || j==A.length-1)
{
somma+=A[i][j];
}

if (A[i][j]>massimo)
{
massimo=A[i][j];
if (massimo<somma)
{
return true;
}
}
}
}
return false;
}
}

E siamo due gli scemi XD ora che leggo il tuo mi sono accorta che ho fatto lo stesso banale errore.
Comunque per il resto l'esercizio è quasi uguale al tuo, anche io ho usato due For  .wink


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 14:43:28
il secondo come lo avete fatto?


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: Serginho21 on 07-04-2009, 14:51:17
io ho usato 4 for per il primo


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 14:52:55
il secondo è giusto cosi'?
Code:
public class esame2
  {
  public static int metodo(String S[][],String S1[][])
    {
   
for(j=0;j<S[i].length;j++)
  {
  i=0;
  car=S[i][j].charAt(S[i][j].length()-1);
   for(i=0;i<S.length;i++)
     {
     if(S[i].length<=j)
       else
     {
     if(S[i][j].charAt(S[i][j].length()-1)==car) vf=true;
       else
     {
     vf=false;
     break;
     }
   if(S1[i][j].charAt(S1[i][j].length()-1)==car) vf=true;
     else
   {
   vf=false;
   break;
   }
 }
}
}
if(vf==true)

  return j;
}
return -1;
}
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: djjeck on 07-04-2009, 15:10:58
Perché non postate il testo, così li risolvo pure io.
In un massimo di tre statement.


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 15:23:07
Scrivere un metodo che dato un array di float in input,calcolare la somma degli elementi ke si trovano nel perimetro dell'array e confrontarlo col massimo elemento dell'array,se sono uguali return true altrimenti false. Era cosi' piu o meno


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: djjeck on 07-04-2009, 16:02:16
Ce l'ho fatta, ma me la sono vista brutta. Alla fine è un solo statement, il return.
Però ho dovuto usare il brutto trucchetto delle variabili locali in un array.
E' così confuso che non l'ho dovuto neppure offuscare ulteriormente.

Funziona, c'è anche il main per provarlo.
Code:
public class PerimetroEMassimo{
/*
 * Scrivere un metodo che dato una matrice di float in input, calcolare la somma degli elementi ke si trovano nel perimetro della matrice e confrontarla col massimo elemento della matrice, se sono uguali return true altrimenti false.
 */
  public static boolean perimetroUgualeAlMassimo(float[][] A,float...vars){
    return A.length==0||A[0].length==0?true:(vars.length==0)?perimetroUgualeAlMassimo(A,0,0,0,A[0][0]):(vars[0]==A.length)?(vars[2]==vars[3]):perimetroUgualeAlMassimo(A,vars[0]+(vars[1]==A[(int)vars[0]].length-1?1:0),vars[1]==A[(int)vars[0]].length-1?0:vars[1]+1,vars[2]+(vars[0]==0||vars[1]==0||vars[0]==A.length-1||vars[1]==A[(int)vars[0]].length-1?A[(int)vars[0]][(int)vars[1]]:0),Math.max(vars[3],A[(int)vars[0]][(int)vars[1]]));
  }
  public static void main(String[] args){
    System.out.println(perimetroUgualeAlMassimo(new float[][]{{1,1,1,1},{1,10,0,1},{1,1,1,1}}));
    System.out.println(perimetroUgualeAlMassimo(new float[][]{{2,2,2,2},{2,20,1,2},{2,2,2,2}}));
    System.out.println(perimetroUgualeAlMassimo(new float[][]{{1,1,1,1},{1,12,1,1},{1,1,1,1}}));
  }
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: TheUniversalMind on 07-04-2009, 16:29:44
ho notato che quello fatto da me, ha qlke problemino, appena torno a casa, lo controllo.
questo è il secondo:
(alla fine, dove ho messo il "return" i;  a causa della fretta, non ho messo "cont==S.length", ma solo "cont==S.length"; per il resto mi sembra correttamente funzionante)
Code:
public class esercizio2esame
{
public static void main (String [] args)
{
String [][] S={{"ciccio","ashsah","asfhs"},{"pallo","weret"},{"orologio"}};
String [][] S1={{"asso","aassg","qweqq"},{"banco","wad"},{"tecnico"}};

System.out.println(metodo(S,S1));
}

public static int metodo (String [][] S,String [][] S1)
{
int cont=0;
for (int i=0;i<S.length;i++)
{
cont=0;
for (int j=0;j<S[i].length;j++)
{
for (int k=S[j][i].length()-1;k==S[j][i].length()-1;k++)
{
for (int z=S1[j][i].length()-1;z==S1[j][i].length()-1;z++)
{
if (S[j][i].charAt(k) == S1[j][i].charAt(z))
{
cont++;
if (cont==S[i].length)
{
return i;
}
}

}
}
}
}
return -1;

}
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 17:17:22
ma il mio comè ?(secondo eser)


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 07-04-2009, 17:52:34
*Scrivere un metodo che prenda in input una matrica A di float,
e restituisca un boolean che indicihi se la somma degli elementi del perimetro di A
è maggiore del massimo in A.*/

class Esercizio1
{
   public static boolean metodo (float[][]A)
   {
      boolean ok=false;
      float max=0;
      float somma1=0;
      float somma2=0;
      float somma3=0;
      float somma4=0;
      float perimetro=0;
      
      for(int i=0; i<A.length; i++)
        for (int j=0; j<A[0].length; j++)
      {                                                           //trovo il massimo nella matrice//
         if(A[j]>max)             
            max=A[j];
      }
      System.out.println("Il massimo = "+max);
      
      
      // Scansiono la prima riga e ne sommo gli elementi
      for(int c2=0; c2<A[0].length; c2++)
           somma1+= A[0][c2];
      //Scansiono la prima colonna e ne sommo gli elementi
      for(int d2=1; d2<A.length; d2++)
           somma2+=A[d2][0];
                                                                  //Scansiono solamente il perimetro della matrice
      //Scansiono l'ultima riga e ne sommo gli elementi
      for(int e2=1; e2<A[0].length; e2++)
           somma3+=A[A.length-1][e2];
      //Scansiono l'ultima colonna e e ne sommo gli elementi
      for(int k2=1; k2<A.length-1; k2++)
           somma4+=A[k2][A[0].length-1];
      
      //Calcolo il perimetro sottraendo alle singole somme gli angoli della matrice (così calcolo correttamente il perimetro)
      perimetro=somma1+somma2+somma3+somma4;
      
      System.out.println(" Il Perimetro = "+perimetro);
      
      if(perimetro>max)
          ok=true;
     return ok;
   }
   
   
   
   
   public static void main (String [] args)
   {
      float [][] A={{2,2,2,1},
                {1,1,6,2},
                {2,1,1,2},
                {7,2,2,3}};
                 
      System.out.println(metodo(A));
   }
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 18:02:36
anke io ho fatto cosi' se hai visto sopra,però dicono ke è meglio 4 for,ke ne pensi?


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: callo on 07-04-2009, 19:15:48
Code:
/*SCRIVERE UN METODO CHE PRENDA UNA MATRICE A DI FLOAT E RESTITUISCA UN BOOLEAN CHE INDICHI
SE LA SOMMA DEGLI ELEMENTI DEL PERIMETRO DI A E' MAGGIORE DEL MASSIMO ELEMENTO DI A*/
public class esercizio
{
  public static boolean metodo(float a [][])
  {
    float somma=0,h=0,verifica=0,altezza=0;
    float max=0,lato=0;
    for(int i=0;i<a.length;i++)
      for(int j=0;j<a[i].length;j++)
      {
        {
        if(a[i][j]>max)
          max=a[i][j];
        }
        if((i==0)||(i==a.length))//SE LA RIGA E' LA PRIMA O L'ULTIMA
          lato+=a[i][j];//FAMMI LA SOMMA DI TUTTI GLI ELEMENTI
        else
        if((j==0)||(j==a[0].length-1))
          {
          altezza+=a[i][j];
        }
      }
      verifica=lato+altezza;
      if(verifica>max)
      {
        System.out.println("il valore massimo e':"+max+ " mentre il perimetro e':"+verifica);
      return true;
      }
      return false;
  }
  public static void main(String args[])
{
float[][] A =  {  {1,1,2,1  },
                {38,2,34,1  },
                {4,3,2,1  },
                {1,1,0,1  }};
                 
    System.out.println(metodo(A));
  }
}

così è come l'ho fatto io dopo alcune modifiche apportate qui a casa visto che l'originale dava qualche erroruccio......(quindi suppongo di non essere passato .poverinoi) vedete un pò che ve ne pare!


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 07-04-2009, 19:49:06
si infatti, è più efficiente con 4 for .sisi


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 21:08:42
il secondo cm lo avete fatto??


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: Daréios89 on 07-04-2009, 22:10:22
Ragazzi, io tempo di non averlo superato, dopo tutti quei post..  :-K
Ci aggiorniamo ragazzi.


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 22:13:45
quanti for hai fatto per ogni eser?


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: Daréios89 on 07-04-2009, 22:20:52
per il primo 5, per l'altro....aimè.....uno solo..  :"-(


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 07-04-2009, 23:14:18
ok allora ci rivedremo a giugno tutti e 2 :-OK :[Emoticon] PC Asd:


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: djjeck on 08-04-2009, 00:50:26
Maggiore del massimo? Non uguale?

Mannaggia, ecco il mio metodo corretto
Code:
public class PerimetroEMassimo{
/*
Scrivere un metodo che prenda in input una matrica A di float,
e restituisca un boolean che indicihi se la somma degli elementi del perimetro di A
è maggiore del massimo in A.
 */
  public static boolean perimetroUgualeAlMassimo(float[][] A,float...vars){
    return A.length==0||A[0].length==0?true:(vars.length==0)?perimetroUgualeAlMassimo(A,0,0,0,A[0][0]):(vars[0]==A.length)?(vars[2]>vars[3]):perimetroUgualeAlMassimo(A,vars[0]+(vars[1]==A[(int)vars[0]].length-1?1:0),vars[1]==A[(int)vars[0]].length-1?0:vars[1]+1,vars[2]+(vars[0]==0||vars[1]==0||vars[0]==A.length-1||vars[1]==A[(int)vars[0]].length-1?A[(int)vars[0]][(int)vars[1]]:0),Math.max(vars[3],A[(int)vars[0]][(int)vars[1]]));
  }
  public static void main(String[] args){
    System.out.println(perimetroUgualeAlMassimo(new float[][]{{1,1,1,1},{1,10,0,1},{1,1,1,1}}));
    System.out.println(perimetroUgualeAlMassimo(new float[][]{{1,1,1,1},{1,11,0,1},{1,1,1,1}}));
  }
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: Serginho21 on 08-04-2009, 12:41:37
secondo voi quando li metterà i risultati il prof?


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: ShiShi on 08-04-2009, 14:27:49
Questo è il mio primo:

Code:
public class Cancella2 {
     public static void main(String [] args) {
   float [][] A={{1, 1, 1, 1, 1},
                  {1, 2, 4, 0, 1},
                  {1, 2, 3, 2, 1},
                  {1, 1, 1, 1, 1}};
        System.out.println (metodo (A));
     }

static boolean metodo (float [][]A) {
    float tmp=0;
    float max=0;
    float somma=0;
    boolean prova = false;
    for(int r=0; r<A.length; r++)
       for(int c=0; c<A[0].length-2; c++) {
           somma+= A[r][0] + (A[r][A[0].length]) + A[0][c+1] + A[A[0].length][c+1];
           if (A[r][c]>tmp) {
               max=A[r][c];
               tmp=A[r][c];
           }
       if (somma > max)
           prova = true;
        }
        return prova;
   }
}

Mi da errore

 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
   at Cancella2.metodo(Cancella2.java:18)
   at Cancella2.main(Cancella2.java:8)

Qualcuno sa dirmi come posso correggerlo?
Se metto A.length-5 non mi da più l'essore però ovviamente non mi ritorna true perchè sballa tutto.


Il secondo invece:
Code:
public class Cancella {
     public static void main(String [] args) {
 String [][]S = {{ "abc" , "defg" , "hi" } ,
                  { "lmn" , "opq"} ,
                  { "rst" , "uvz", "wy"} ,
                  { "jkx" , "?òssss" , "§j"}};
                 
 String [][]S1 = {{ "abc" , "ded" , "hsd" } ,
                  { "lmn" , "opg"} ,
                  { "rst" , "uvd", "wyg"} ,
                  { "jkx" , "?òssss" , "§jgfh"}};
  System.out.println (metodo (S,S1));
  }


static int metodo(String[][] S, String[][] S1) {
int j=-1;
for(int r=0; r<S.length-2; r++) {
    int cont=0;
   for(int c=0; c<S[r].length-2; c++) {
       if(S[c][r].charAt(S[c][r].length()-1) == S1[c][r].charAt(S1[c][r].length()-1))
        cont++;
    if (cont == S[0].length-2)
        j=c;
   }
  }
  return j;
 }
}
compila ed esegue correttatemente, no problem per questo. .ciaociao


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: arcotix on 08-04-2009, 18:58:44
Code:
public class esercizio1 {
        static boolean metodo(float[][]A)
{
boolean maggiore=false;
float max=0;
float perimetro=0;
for(int r=0;r<A.length;r++)
{
perimetro += A[r][0];
perimetro += A[r][A[A.length-1].length-1];
for(int c=0;c<A[r].length;c++)
{
if(max<A[r][c])
max=A[r][c];
if(r<1)
{
perimetro += A[0][c];
perimetro += A[A.length-1][c];
if(c==0)
{
perimetro =(perimetro - A[0][0])-A[0][A[0].length-1];
perimetro =(perimetro - A[A.length-1][0])-A[A.length-1][A[A.length-1].length-1];

}
}
}
}
if(max>perimetro)
System.out.println(maggiore=true);
else System.out.println(-1);
return maggiore;

}
public static void main(String[]args)
{
float[][]a = {      {1,2,3},
  {8,37,4},
  {7,6,5}};
metodo(a);

}
}
Questo è il mio di primo, come vedete bastano 2 for e alla fine era piuttosto semplice...invece il secondo qualcuno l'ha fatto in modo corretto?


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 08-04-2009, 19:13:18
c'e ki ne ha fatti 2,ki 4,ki 6 buuu del primoo


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 08-04-2009, 19:27:35
ki è ke sà il testo del secondo eser?


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: dani89 on 09-04-2009, 11:43:26
purtroppo anch'io temo di non passare, tuttavia tornato a casa ho trovato le soluzioni, ecco il primo esercizio:
Code:
public class esame1
{
public static boolean metodo (float[][]A)
{
float max=0,per=0;
for (int i=0;i<A.length;i++)
{
for (int j=0;j<A[0].length;j++)
{
if (A[i][j]>max)
max=A[i][j];
}
}
for (int i=0;i<A.length;i++)
{
for (int j=0;j<A[0].length;j++)
{
if (i==0 || i==A.length-1 || j==0 || j==A.length-1)
per+=A[i][j];
}
}
if (per>max)
return true;
return false;
}
public static void main (String[]args)
{
float[][]A={{1.0f,1.0f,1.0f},
                    {1.0f,7.0f,1.0f},
    {1.0f,1.0f,1.0f}};
boolean s=metodo(A);
System.out.println(s);
System.exit(0);
}
}
e il secondo:
Code:
public class esame2
{
public static int metodo (String[][]S,String[][]S2)
{
int cont=0,colonna=-1;
for (int j=0;j<S[0].length;j++)
{
for (int i=0;i<S.length;i++)
{
if(j >= S[i].length)
{
cont++;
if(cont==S.length)
return j;
}
else
{
int voc_1=S[i][j].length()-1;
int voc_2=S2[i][j].length()-1;
if (S[i][j].charAt(voc_1)==S2[i][j].charAt(voc_2))
{
cont++;
if (cont==S.length)
          return j;
}
}
}
cont=0;
}
return colonna;
}
public static void main (String[]args)
{
String[][]S={{"cane","gatto","mango"},
                     {"banana","libro","vetro","giaguaro"},
     {"canarino","torta"},
     {"polpetta","giubotto","chinotto","pantalone","marmitta"},
     {"motore","carpetta","compasso","macchina"}};
String[][]S2={{"mortadelle","gattino","topo"},
                     {"zainetta","liquoro","toro","jiejre"},
     {"costuma","mansel"},
     {"cartellinz","casettc","cervo","mdeome","odueo"},
     {"barche","bingo","canguro","douoje"}};
int num=metodo(S,S2);
System.out.println(num);
System.exit(0);
}
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: atrix0ne on 09-04-2009, 12:25:34
cosa hai messo invece nel compito?


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: dani89 on 09-04-2009, 16:30:14
nel compito nel primo esercizio ho fatto 2 for in + inutili, e nel secondo ho sbagliato le condizioni x determinare l'ultima vocale, poichè ho usato lo stesso indice x tutte e 2 gli array, quando nei 2 array le parole da confrontare possono essere diverse anche se finiscono con la stessa vocale, ad esempio: gatto,topo.


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: arcotix on 09-04-2009, 16:54:04
nel compito nel primo esercizio ho fatto 2 for in + inutili, e nel secondo ho sbagliato le condizioni x determinare l'ultima vocale, poichè ho usato lo stesso indice x tutte e 2 gli array, quando nei 2 array le parole da confrontare possono essere diverse anche se finiscono con la stessa vocale, ad esempio: gatto,topo.
il secondo che hai postato forse non va bene perchè l'esercizio chiede che le colonne abbiano lo stesso carattere comune alla fine della stringa, e nel tuo esercizio se cambi in una stringa il suo carattere finale, e lo cambi nella stringa corrispondende del secondo array(es prima erano "vetro","topo" e io li ho fatti diventare "vetri","topi")il risultato è comunque true ma non dovrebbe essere perchè la 'i' è comune solo a 2 stringhe e non a tutta la colonna...io ci sto impazzendo con quest'esercizio  .leggo


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: dani89 on 09-04-2009, 17:16:56
hai ragione vediamo di risolvere questo problema....


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 21-04-2009, 11:02:48
Ragazzi, questa dovrebbe essere la soluzione più efficiente del primo metodo :-K
Quote
/*Scrivere un metodo che prenda in input una matrica A di float,
e restituisca un boolean che indicihi se la somma degli elementi del perimetro di A
è maggiore del massimo in A.*/
class Esercizio1II // PIU' EFFICIENTE
{
   public static boolean metodo (float [][] A)
   {
      float somma=0;
      float max=0;
      for(int i=0; i<A.length; i++)
      for(int j=0; j<A.length; j++)
      {
         if((i==0) || (i==A.length-1) || (j==0) || (j==A.length-1) )
            somma+=A[j];
      
         if(A[j]>max)
            max=A[j];
      }
      if(somma>max)
         return true;
      return false;
   }
   
   public static void main (String [] args)
   {
      float [][] A={ {2,1,1,2},
                {1,1,1,1},
                {1,1,2,1},
                {2,1,1,2}};
                 
      System.out.println(metodo(A));
   }
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: dani89 on 21-04-2009, 11:18:11
non puoi prendere a[j] è un array bidimensionale, si deve prendere A[ i ][j], x il resto credo che sia giusto


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 21-04-2009, 15:59:21
 :-)| :-)| Si Si... ho sbagliato a scrivere...è A[j]
GRAZIE per  la correzione :-ciao


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 21-04-2009, 15:59:52
A[ i] [j ]


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 21-04-2009, 16:00:30
 :-)|   Si Si... ho sbagliato a scrivere...è A[ i] [j]
GRAZIE per  la correzione :-ciao


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 21-04-2009, 16:44:51
Ragazzi, vediamo come possiamo risolvere il secondo :-)|
Quote
/*Scrivere un metodo che prenda in input due array bidimensionali di stringhe frastagliati S ed S1
identici nella struttura, e restituisca un indice j che indichi se entrambe le colonne j-esime
di S ed S1 (anche non complete) sono tali che tutte le stringhe in esse terminano con lo stesso
carattere (comune ad entrambe le colonne). Se non esistono tali colonne j= -1.*/


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 28-04-2009, 10:52:16
 :-ciao Ragazzi ho svolto il secondo esercizio della prova d'esame del 7 aprile.
Il metodo funziona,solo che non va quando le matrici sono frastagliate.. :-)| Ancora non ho capito bene come funzionano le frastagliate....Ecco il codice
P.S. qualcuno mi potrebbe spiegare come farlo funzionare con le matrici frastagliate..grazie
Quote

/*Scrivere un metodo che prenda in input due array bidimensionali di stringhe frastagliati S ed S1
identici nella struttura, e restituisca un indice h=1 che indichi se entrambe le colonne j-esime
di S ed S1 (anche non complete) sono tali che tutte le stringhe in esse terminano con lo stesso
carattere (comune ad entrambe le colonne). Se non esistono tali colonne h= -1.*/

class Esercizio2
{
   public static int metodo (String[][] S,String[][]S1)
   {
      int h=-1;
      int j=0;
      int cont=1;
      for(int i=0; i<S[0].length; i++)
      {
        for(int k=j+1; k<S.length; k++)
           {
         if((S[j].charAt(S[j].length()-1)==S[k].charAt(S[k].length()-1))
         &&(S[k].charAt(S[k].length()-1)==S1[j].charAt(S1[j].length()-1))
         &&(S1[j].charAt(S1[j].length()-1)==S1[k].charAt(S1[k].length()-1)))
            cont++;
           }
       
           if(cont==S.length)
           h=1;
                cont=1;
           }
   
      return h;
   }
   
   
    public static void main(String [] args) {
 String [][]S = {{ "aba" , "defs"} ,
         { "lmc" , "ops"} ,
                      { "rsc" , "uvs"} ,
                      { "jkc" , "aassss"},
            { "dsi" ,  "dass"}};
                 
 String [][]S1 = {{ "abc" , "des"} ,
                        { "lmc" , "ops"} ,
                        { "rsc" , "uvs"} ,
                        { "jkc" , "assss"},
         { "cis"  , "dars"}};
  System.out.println (metodo (S,S1));
  }
}


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 28-04-2009, 10:54:35
/*Scrivere un metodo che prenda in input due array bidimensionali di stringhe frastagliati S ed S1
identici nella struttura, e restituisca un indice h=1 che indichi se entrambe le colonne j-esime
di S ed S1 (anche non complete) sono tali che tutte le stringhe in esse terminano con lo stesso
carattere (comune ad entrambe le colonne). Se non esistono tali colonne h= -1.*/

class Esercizio2
{
   public static int metodo (String[][] S,String[][]S1)
   {
      int h=-1;
      int j=0;
      int cont=1;
      for(int i=0; i<S[0].length; i++)
      {
        for(int k=j+1; k<S.length; k++)
           {
         if((S[j] [ i].charAt(S[j] [ i].length()-1)==S[k] [ i].charAt(S[k] [ i].length()-1))
         &&(S[k] [ i].charAt(S[k] [ i].length()-1)==S1[j] [ i].charAt(S1[j] [ i].length()-1))
         &&(S1[j] [ i].charAt(S1[j] [ i].length()-1)==S1[k] [ i].charAt(S1[k] [ i].length()-1)))
            cont++;
           }
       
           if(cont==S.length)
           h=1;
                cont=1;
           }
   
      return h;
   }
   
   
    public static void main(String [] args) {
 String [][]S = {{ "aba" , "defs"} ,
         { "lmc" , "ops"} ,
                      { "rsc" , "uvs"} ,
                      { "jkc" , "aassss"},
            { "dsi" ,  "dass"}};
                 
 String [][]S1 = {{ "abc" , "des"} ,
                        { "lmc" , "ops"} ,
                        { "rsc" , "uvs"} ,
                        { "jkc" , "assss"},
         { "cis"  , "dars"}};
  System.out.println (metodo (S,S1));
  }


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: pippo on 28-04-2009, 10:58:38
 :-ciao


Title: Re:PRIMA SOLUZIONE ALL'ESAME DI OGGI
Post by: djjeck on 28-04-2009, 15:38:24
ragazzi nel primo if qui compare solo un indice(manca l'indice i), invece ci sono naturalmente 2 indici;  :-ciao
E aggiustalo.
Comunque il tuo problema è che utilizzi la lunghezza della prima riga come riferimento per il numero di colonne.
Dai un'occhiata al mio metodo findMaxWidth(String[][]) : int


Secondo me questo esercizio è troppo complicato.
Io lo risolverei così, più o meno.
Una soluzione un po' più ordinata, ma in effetti troppo lunga.
Code:
/** Scrivere un metodo che prenda in input due array bidimensionali di stringhe frastagliati S ed S1
identici nella struttura, e restituisca un indice j che indichi se entrambe le colonne j-esime
di S ed S1 (anche non complete) sono tali che tutte le stringhe in esse terminano con lo stesso
carattere (comune ad entrambe le colonne). Se non esistono tali colonne j= -1.
 */
public static int findColumns(String[][] S,String[][] S1){
  //trovo il numero di colone (anche incomplete) dell'array frastagliato
  int width=findMaxWidth(S);
  //per ogni colonna
  for(int i=0;i<width;i++)
    // se in questa colonna esiste un carattere unico di fine stringa
    if(getColumnsLastChar(S,i)!=null)
     // e se questo carattere è lo stesso anche per l'altro array
      if(getColumnsLastChar(S,i)==getColumnsLastChar(S1,i))
        // restituisco l'indice della colonna
        return i;
  // se nessuna colonna corrisponde alla descrizione, restituisco -1
  return -1;
}


/**
 * Trova il numero di colonne di un array bidimensionale di stringhe.
 */
private static int findMaxWidth(String[][] S){
  int max=0;
  for(int r=0;r<S.length;r++)
    max=Math.max(S[r].length,max);
  return max;
}


/**
 * Se nella colonna column della matrice A tutte le stringhe terminano con lo stesso carattere, quel carattere viene restituito. Altrimenti viene restituito null.
 */
private static Character getColumnsLastChar(String[][] A,int column){
  Character c=null;
  for(int r=0;r<A.length;r++)
    // se la colonna possiede l'elemento r-esimo
    if(column<A[r].length){
      // se non ho ancora trovato nessun carattere
      if(c==null)
        // memorizzo in c il primo carattere della colonna
        c=getLastChar(A[r][column]);
      // altrimenti, se ho già trovato un carattere, lo confronto con il successivo.
      // se sono diversi, la colonna non possiede un unico carattere terminale di stringa
      else if(getLastChar(A[r][column])!=c)
        // e quindi restituisco null
        return null;
    }
  // arrivati a questo punto, il carattere c è comune alla fine di tutte le stringhe
  return c;
}
 
/**
 * Restituisce l'ultimo carattere della stringa s.
 */
private static char getLastChar(String s){
  return s.charAt(s.length()-1);
}