Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Enigma_23 on 21-06-2010, 12:28:15



Title: prima prova di oggi?
Post by: Enigma_23 on 21-06-2010, 12:28:15
come vi è andata la prima prova?qualcuno può postare il testo con le possibili soluzioni?


Title: Re:prima prova?
Post by: Il Capitano on 21-06-2010, 12:52:34
Per l'ennesima volta credo proprio di non essere passato...
mi accodo anche io alla richiesta del collega.


Title: Re:prima prova di oggi?
Post by: Enigma_23 on 21-06-2010, 18:00:24
ma nessuno è in grado di postare nulla a riguardo?


Title: Re:prima prova di oggi?
Post by: gianluca on 21-06-2010, 18:01:49
Ragazzi posto i 2 esercizi che ho fatto io ma non mi ricordo i testi poi postateli voi...  :pray
P.S.    Negli Esercizi c'è  qualche errore....commentate... :pray
grazie  .ciaociao

Code:
esercizio1


public class Es1
{
    public static boolean Metodo (long [][] A,byte [] S)
    {
       int somma1=0, somma2=0;
      
       for (int i=0;    i<A.length;     i++)
             for (int j=0;    j<A[i].length;     j++)
                  for (int k=0;    k<S.length;     k++)
                       for (int q=0;    q<S.length;     q++)
                       {
                           if ( S[k] == x   &&   S[q] == y)
                           {
                              somma1 += A[x][j];
                              somma2 += A[y][j];
                              if (somma1 == somma2)
                                  return true;
                            }
                         }


        return false;
    }
}








Ersecizio 2



public class Es2
{
    public static boolean Metodo (String [][] A)
    {
       String str=new String (" ");
      
       for (int i=0;    i<A.length;     i++)
             for (int j=0;    j<A[i].length;     j++)
                  for (int k=0;    k<A.length;     k++)
                       for (int q=0;    q<A[k].length;     q++)
                           for (int  a=0;       a<A[k][q].length();     a++)
                           {
                                    str += (char)( A[q][k].charAt(a)) +1;
                                  
                                    if ((A[q][k].equals (str))     &&    (A[j][i].equals(A[q][k]))
                                  return true;
                               }
                            }


        return false;
    }
}


Title: Re:prima prova di oggi?
Post by: Mari_C on 21-06-2010, 18:46:27
PRIMO ESERCIZIO:
scrivere un metodo che prenda in input una matrice A di long ed un array S di byte e restituisca un boolean che indichi se esistono due valori x e y tali che la somma degli elementi nella riga di indice x di A sia pari a quella della riga di indice y di A (Non si possono usare array ausiliari)

SECONDO ESERCIZIO:
scrivere un metodo che prenda in input una array bid frast A di Stringhe e restituisca un boolean che indichi se esiste in A una colonna contenente una stringa e la sua proiezione.La proiezione di una stringa s è la stringa s' ottenuta sostituendo ogni carattere in s con il carattere successivo es s="abc"  s'="bcd"


Title: Re:prima prova di oggi?
Post by: Mari_C on 21-06-2010, 18:57:40
esercizio1


public class Es1
{
   
       for (int i=0;    i<A.length;     i++)
             for (int j=0;    j<A.length;     j++)
                  for (int k=0;    k<S.length;     k++)
                       for (int q=0;    q<S.length;     q++)
                       {
                           if ( S[k] == x   &&   S[q] == y)
                           {
                              ...
                            }
                       
Ersecizio 2



public class Es2
{
    public static boolean Metodo (String [][] A)
    {
       String str=new String (" ");
       
       for (int i=0;    i<A.length;     i++)
             for (int j=0;    j<A.length;     j++)
                  for (int k=0;    k<A.length;     k++)
                       for (int q=0;    q<A[k].length;     q++)
                           for (int  a=0;       a<A[k][q].length();     a++)
                           {
                                 if ( S[k] == x   &&   S[q] == y)
                                {
                                    ...
                                 }


Ho sottolineato le inconprensioni per quanto mi riguarda ovviamente,non prenderle come correzioni  .rido
PRIMO ESERCIZIO:
-secondo me il for q è inutile in qualto S è un array e puoi controllartelo con un solo for!
-Per quanto riguarda x e y la condizione nn mi convince..
SECONDO ESERCIZIO:
-perchè hai messo l'if?  .penso


Title: Re:prima prova di oggi?
Post by: gianluca on 21-06-2010, 19:24:05
scusami nel copiare il secondo es. ho messo per sbaglio l'if del primo... che  sbadato  :[Emoticon] Asd:
ma nell'esame nn l'ho messo


per quanto riguarda il primo es.
il 4 for  l'ho messo xkè dovevo verificare che esistessero sia l'elemento 'x' e sia 'y' nell'array

se sbaglio coreggimi, fanno sempre comodo i consigli o altro...grazie tante


Title: Re:prima prova di oggi?
Post by: gianluca on 21-06-2010, 23:41:10
ciao a tutti  ragazzi...

nel secondo esercizio che ho postato mi sono accorto che c'è un piccolo errore  :[Emoticon] Rosik Asd:(che mi ha fatto giocare l'esame :-)|)

e precisamente :
quando il prof dice nell Es. "state attenti alle stringhe mancanti",
vuol dire che quando si controllano le colonne per vedere se esiste una proezione di una qualunque stringa,
e invece non esiste nessuna stringa, da errore...
Domani posto l'esercizio coretto... :[Emoticon] PC Asd:

Per quanto riguarda il primo, l'Es è corretto ma si devono inizializzare le variabili 'x' e 'y' che io purtroppo non ho fatto... :boh

Cmq postate anke i vostri di esercizi così da poterli confrontare
grazie a tutti e buonanotte :-ciao .ciaociao


Title: Re:prima prova di oggi?
Post by: Enigma_23 on 22-06-2010, 09:14:22
ma si sa già quando sarà il prossimo appello? :-)|


Title: Re:prima prova di oggi?
Post by: isuccia89 on 22-06-2010, 10:17:44
ma si sa già quando sarà il prossimo appello? :-)|

dovrebbe essere il 7 luglio  :-OK


Title: Re:prima prova di oggi?
Post by: Enigma_23 on 22-06-2010, 10:31:44
mmmh,si anche io ho letto sul calendario esami del portale sdai,ma non so fino a che punto è attendibile...speriamo bene :pray


Title: Re:prima prova di oggi?
Post by: Il Capitano on 22-06-2010, 12:27:18
ma si sa già quando sarà il prossimo appello? :-)|
L'ho chiesto personalmente al professore quando ho consegnato il compito...mi ha confermato che è il 7 luglio


Title: Re:prima prova di oggi?
Post by: Enigma_23 on 22-06-2010, 12:40:07
ok grazie   .ciaociao


Title: Re:prima prova di oggi?
Post by: Mari_C on 22-06-2010, 15:11:06
Posto il mio PRIMO ESERCIZIO...il secondo l'ho fatto un disastro  :-)| anche se penso che quello del collega gianluca (apparte piccolezze come le stringhe vuote) secondo me potrebbe andare!!
Code:
class EsercizioEsameGiugno1{
  public static boolean metodo(int[][]A,int[]S){
    boolean trovato=false;
     for(int i=0;i<S.length;i++){
      int somma1=0;
      int somma2=0;
      for(int x=0;x<A.length;x++){
         for(int j=0;j<A[x].length;j++){
            somma1+=A[i][j];
            somma2+=A[i][j];
           
          }
          if(somma1==somma2){
            System.out.println(somma1+" "+somma2);
           trovato=true;
          }
      }
    }
   
    return trovato;
  }
  public static void main (String[]args){
    int A[][]={{1,2,3},
            {0,0,0},
            {1,2,3}};
    int S[]={0,2};
    System.out.println(metodo(A,S));
  }
}
Compilandolo mi da 6 risultati..tra cui 6-6 (cioè quello che volevo) :[Emoticon] Asd:
Che ne pensate?è tanto malaccio? :[Emoticon] PC Asd:


Title: Re:prima prova di oggi?
Post by: thompson on 25-06-2010, 19:00:42
ma qualcuno che ha superato l'esame potrebbe postare le sue soluzioni???


Title: Re:prima prova di oggi?
Post by: isuccia89 on 30-06-2010, 15:48:19
ma qualcuno che ha superato l'esame potrebbe postare le sue soluzioni???

 .quoto non è possibile vedere come avete fatto questi esercizi?


Title: Re:prima prova di oggi?
Post by: gianluca on 01-07-2010, 12:51:24
Quote
Ciao isuccia...

ora sono molto occupato,

La prova non l'ho superata perchè ho sbagliato a copiare dalla brutta... :-)| :[Emoticon] Rosik Asd:

Stasera metterò gli esercizi ok? :[Emoticon] PC Asd: .leggo

P.S.     Quelli postati da me prima avevano qualche errore... li ho rifatti e sono privi di errori sintattici

Ciauuu .ciaociao


Title: Re:prima prova di oggi?
Post by: Il Capitano on 02-07-2010, 17:45:57
Mari_C il tuo esercizio sembra perfetto.Potresti scrivere anche qualche commento?
Grazie

Resto comunque anche io in attesa della soluzione del secondo esercizio

Ciao


Title: Re:prima prova di oggi?
Post by: Seferex on 02-07-2010, 21:04:09
Ehm non vorrei rompere le scatole, ma a me non sembra per niente perfetto....

Code:
for(int x=0;x<A.length;x++){
         for(int j=0;j<A[x].length;j++){
            somma1+=A[i][j];
            somma2+=A[i][j];

Già solo questo non va bene ^^"
Dentro le due variabili si ha lo stesso valore...
E' ovvio che nell'if ti darà SEMPRE lo stesso risultato...

Appena posso posto il mio, ma lo ho in un'altro pc, ed ora non posso prenderlo..


Title: Re:prima prova di oggi?
Post by: Il Capitano on 03-07-2010, 00:33:05
Ehm non vorrei rompere le scatole, ma a me non sembra per niente perfetto....


Ma quale rompere le scatole anzi hai ragione...quanto prima postalo e se puoi anche il secondo
Grazie .ciaociao


Title: Re:prima prova di oggi?
Post by: Seferex on 03-07-2010, 01:55:33
Posto il secondo esercizio, dovrebbe essere corretto, ma non ci metterei la mano sul fuoco  .whistling

Code:
class eserciziocompito
{
public boolean metodo (String [][] A)
{
boolean trovato=false;
int max=0,i,j,y,z;
for (i=0; i<A.length; i++) //trovo la riga più grande della marice
{
if (A[i].length>max)
max=A[i].length;
}

for (i=0;i<max;i++)            //scorro la matrice
for (j=0;j<A.length;j++)
for (y=j+1;y<A.length;y++) //confronto un elemento della matrice con tutti gli altri
if (j<=A[i].length-1 && y<=A[i].length-1) //verifico che la stringa esista
for(z=0; z<A[i][j].length(); z++) //verifico che la stringa sia una proiezione
if(A[i][j].charAt(z)!=A[i][y].charAt(z)+1)
{
z=A[i][j].length();
trovato=false;
}
else trovato=true;
if(trovato==true)
return true;
else return false;
}
}

N.B.
In questa parte del codice:

Code:
for(z=0; z<A[i][j].length(); z++) //verifico che la stringa sia una proiezione
if(A[i][j].charAt(z)!=A[i][y].charAt(z)+1)
z=A[i][j].length();
trovato=false;
}

Si dovrebbe mettere un while, sono troppo pigro per correggerlo ora (sono le 3 di notte xD)
Ovviamente se trovate errori ditelo ;)

Domani vedo se riesco a postare il primo

EDIT:

Questo invece è il primo esercizio:

Code:
class esercizio
{
public boolean metodo (long [][] A, byte [] S)
{
int i,j,a;
boolean trovato=false;
for (i=0;i<S.length;i++)
for (j=i+1;j<S.length;j++)
{
long somma1=0;
long somma2=0;
trovato=false;

for (a=0;a<A[0].length;a++)
{
somma1+=somma1+A[S[i]][a];
somma2+=somma2+A[S[j]][a];
}
if (somma1==somma2)
trovato=true;
}
if (trovato==true)
return true;
return false;
}


}


Title: Re:prima prova di oggi?
Post by: nocs on 06-07-2010, 23:15:10
Non sò se può servire ancora dato il ritardo di risposta in ogni caso ecco il 2° esercizio come l'ho svolto..

Code:
public class Esercizio2 {
public static boolean Es2 (String A[][]) {
// calcolo riga più lunga
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++)
{
if ((A[i].length > j) && (A[k].length > j))
{
String tmp = "";
for (int x=0;x<A[i][j].length();x++)
tmp += (char) (A[i][j].charAt(x)+1); // prendo il successivo carattere ASCII

if (tmp.equals(A[k][j]))
return true;

}
}
return false;
}

public static void main(String[] args) {
String A [][] = {{"ercaz","sfag","array"},{"fsdb{","exercise","xsafjw","tkfnrfien"},{"bmfttjp","geek","sparc"}};
boolean found = Es2(A);
System.out.println(found);

}

}


Title: Re:prima prova di oggi?
Post by: Seferex on 07-07-2010, 09:52:06
Per esperienza personale (mi è costato 5 punti nel vecchio compito)
Mai mettere un return durante un ciclo for, mi riferisco a questo:

Code:
for (int x=0;x<A[i][j].length();x++)
tmp += (char) (A[i][j].charAt(x)+1); // prendo il successivo carattere ASCII

if (tmp.equals(A[k][j]))
return true;


Title: Re:prima prova di oggi?
Post by: nocs on 07-07-2010, 16:28:28
Bhè il testo non lo diceva che non è possibile utilizzare la return all'interno dei cicli, in questo caso è utilizzata per uscire subito dal metodo appena trova la sua proiezione non ti interessa sapere quante ce ne siano o fare prima tutti i controlli, in ogni caso non vorrei peccare di presunzione ma credo sia giusto!


Title: Re:prima prova di oggi?
Post by: Seferex on 08-07-2010, 01:10:07
Forse sono stato io il presuntuoso con quel reply, è solo che sono rimasto molto scottato l'ultima volta (sarei passato se non fosse stato per quell'errore)

Però ipotizza che una stringa sia "ciao" e quella che controlli è "dlbpaaa" ti ritorna cmq true... Quando ovviamente non dovrebbe ^^" perchè appena legge "dlbp" si ferma, vede che è quello che cerca, e si "mangia" gli altri 3 caratteri

Correggimi pure se sbaglio  .smile


Title: Re:prima prova di oggi?
Post by: nocs on 08-07-2010, 12:34:39
Se vuoi capirlo meglio fai una print di controllo alla String tmp, ad essa vengono concatenati tutti i caratteri aumentati di 1 nella tabella ASCII, fatta quella operazione c'e' il controllo con il metodo equals() che se le due stringhe confrontate non sono uguali non entra nel suo blocco d'istruzioni (in questo caso la semplice return) . Non sò se la spiegazione è giusta in ogni caso appena ho 5minuti riguardo il codice e faccio un paio di prove..


Title: Re:prima prova di oggi?
Post by: Seferex on 08-07-2010, 23:20:59
Mi sono spiegato male mi sa ^^"
Allora, ovviamente se non sono uguali non entra nel controlla, e fin qui ci siamo... Però se la stringa è uguale fino ad un certo punto, ti da un return sbagliato.... Ti rifaccio un esempio.
Ipotiziamo che abbiamo la stringa " a b c d " dovrebbe ritornare true se la stringa è uguale a " b c d e "
Se però la stringa è uguale a " b c d e a a a" ti ritorna cmq true, quando ovviamente non dovrebbe...
Questo perchè fa il controllo, vede che è uguale ed esce dal ciclo senza continuarlo...
Spero di essermi spiegato meglio ^^"
Cmq fidati, non voglio fare il saputone (anche perchè ho ancora molto da imparare), ma evita di mettere i return all'interno di cicli ^^


Title: Re:prima prova di oggi?
Post by: nocs on 08-07-2010, 23:50:47
Continuo a non capire.. l'ho provato nel codice l'esempio che hai riportato tu ma mi ritorna "false" come pensavo provalo tu magari io non l'ho ben afferrato ,  il codice è quello. Per la return ok! accetto il consiglio c'è sempre da imparare..


Title: Re:prima prova di oggi?
Post by: Seferex on 09-07-2010, 14:18:31
Probabilmente sono io un cane a spiegare xD o ancora peggio non ho capito niente ahahahah  :-)|