Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Alucard_89 on 04-02-2011, 16:43:38



Title: Testo prima prova 03/02/2011
Post by: Alucard_89 on 04-02-2011, 16:43:38
Salve a tutti...

Qualcuno sarebbe così gentile da postare e/o scansionare il testo della prova in oggetto?

Grazie anticipate...


Title: Re:Testo prima prova 03/02/2011
Post by: StephCT on 04-02-2011, 18:08:31
primo esercizio:
scrivere un metodo che prenda in input una matrica a di byte e restituisca un boolean che indichi se esistono in a due righe tali che l'una sia una permutazione dell'altra.
N.B ogni singola riga contiene elementi distinti e non è possibile ordinare le righe!

(la spiegazione di permutazione non era presente nella richiesta ma il prof ha dato spiegazione quando l'ha presentata dicendo che vuol dire cercare due righe che contengono gli stessi elementi, anche in posizioni differenti.)
qualcuno invece aveva da controllare due colonne invece che le righe.

secondo esercizio:
Scrivere un metodo che prenda in input un array A di n stringhe ,e restituisca un array
bidimensionale frastagliato b di stringhe con n righe in cui il numero di colonne nella i-esima riga e
dato dal numero di caratteri 'g' , ' h' ,....,'p' presenti nella stringa A[i ](es."ggabmngssh"-> 6). ad
ogni elemento di b deve essere assegnata una stringa di lunghezza 5 ottenuta dalla concatenazione
delle lettere casuali 'd','g','z' ognuna con probabilità ,rispettivamente ,26% ,11% e 63%

(tutto scritto, nessuna spiegazione ulteriore dato che è abbastanza chiaro)
nn so se a questo esiste la variante o ce l'avevamo tutti uguale.


Title: Re:Testo prima prova 03/02/2011
Post by: Mari_C on 05-02-2011, 13:21:28

nn so se a questo esiste la variante o ce l'avevamo tutti uguale.

Ho letto che cambiavano le lettere e le probabilità..


Title: Re:Testo prima prova 03/02/2011
Post by: cibernaux on 06-02-2011, 15:26:36
Qualcuno che ha svolto il secondo esercizio, potrebbe pubblicare la soluzione?? grazie  :-)|


Title: Re:Testo prima prova 03/02/2011
Post by: Mari_C on 07-02-2011, 12:51:36
Ecco due possibili soluzioni del secondo esercizio(cambia solo la prima parte dell'esercizio in effetti la prima soluzione tramite charAt, la seconda soluzione mettendo un for in più):
Code:
public static String[][] metodo(String[]A){
    int n=A.length;
    String[][]B=new String[n][];
   
    for(int i=0;i<A.length;i++){
      int cntC=0;
      for(int k=0;k<A[i].length();k++){
        if(A[i].charAt(k)=='g'|| A[i].charAt(k)=='h' || A[i].charAt(k)=='i'||
          A[i].charAt(k)=='j' || A[i].charAt(k)=='k' ||A[i].charAt(k)=='l' ||
          A[i].charAt(k)=='m' || A[i].charAt(k)=='n' ||A[i].charAt(k)=='o' ||
          A[i].charAt(k)=='p')
          cntC++;
      }
      B[i]=new String[cntC];
    }
      for(int r=0;r<B.length;r++){
        for(int c=0;c<B[r].length;c++){
          B[r][c]="";
          for(int p=0;p<5;p++){
            int w=(int)(Math.random()*99)+1; //questo mi serve per le probabilità
            if(w<=11)
              B[r][c]+="g";
            else if(w>=11 && w<=26)
              B[r][c]+="d";
            else
              B[r][c]+="z";
          }
        }
      }
   
    return B;
  }
Code:
public static String[][] metodo(String[]A){
    int n=A.length;
    String[][]B=new String[n][];
     String car="ghijklmnop";
    for(int i=0;i<A.length;i++){
      int cntC=0;
      for(int k=0;k<A[i].length();k++){
         for(int m=0;m<car.length();m++){
            if(A[i].charAt(k)==car.charAt(m))
             cntC++;
          }
      }
      B[i]=new String[cntC];
    }
      //come sopra

Spero sia chiara!


Title: Re:Testo prima prova 03/02/2011
Post by: StephCT on 07-02-2011, 13:09:22
vorrei suggerirti dei cambiamenti per perfezionarlo (per il futuro dato che è ormai consegnato l'esercizio):
Code:
if(A[i].charAt(k)=='g'|| A[i].charAt(k)=='h' || A[i].charAt(k)=='i'||
          A[i].charAt(k)=='j' || A[i].charAt(k)=='k' ||A[i].charAt(k)=='l' ||
          A[i].charAt(k)=='m' || A[i].charAt(k)=='n' ||A[i].charAt(k)=='o' ||
          A[i].charAt(k)=='p')
questo mega if si può sostituire semplicemente con:
Code:
if(A[i].charAt(k)>='g' && A[i].charAt(k)<='p')
ricordati che i caratteri sono considerati un pò come numeri perchè viene controllato il loro codice UNICODE se nn erro, e ovviamente le lettere dell'alfabeto sono, nella tabella dei codici, una dietro l'altra in senso crescente.

Code:
int w=(int)(Math.random()*99)+1;
questo credo sia errore perchè crei numeri random compresi tra 1 e 99, ti manca il 100. quindi quando andrai a controllare la probabilità cn questo metodo, la probabilità che venga concatenata una z non è del 63% ma del 62%.quindi deve essere Math.random()*100...

un'altra minima correzione per "perfezionare":
Code:
else if(w>=11 && w<=26)
la prima delle due condizioni è inutile perchè se il primo if non è vero allora già escludi il fatto che il numero w sia minore o uguale a 11, quindi sai già che è compreso tra 12 e 100.
per la probabilità hai usato cmq lo stesso procedimento mio...vedremo ^^


Title: Re:Testo prima prova 03/02/2011
Post by: Mari_C on 07-02-2011, 15:45:34
grazie mille per i suggerimenti  .rido


Title: Re:Testo prima prova 03/02/2011
Post by: StephCT on 07-02-2011, 16:02:48
figurati  .arrossisco


Title: Re:Testo prima prova 03/02/2011
Post by: Luckino on 08-02-2011, 09:38:18
vorrei suggerirti dei cambiamenti per perfezionarlo (per il futuro dato che è ormai consegnato l'esercizio):

Code:
else if(w>=11 && w<=26)


sei sicuro che le probabilità siano esatte??
le probabilità erano 11%,26%,63%:

Code:

if(w<=11)

e fino a qui ci siamo perchè ci sono 11 possibilità che esca la lettera...

Code:

if(w>11 && w<= 26)

qui tu prendi in considerazione i numeri che vanno da 12 a 26...quindi ci sono 15 possibilità e non 26 che esca la lettera...

la restante percentuale che hai considerato risulta 74% e non 63%

io l'ho fatto così:
Code:

if(casuale <= 11)


Code:

if (casuale>11 && <=37)

i numeri compresi tra 11  e 37 sono 26

infine i numeri che vanno poi oltrei il 37 sono 63...

spero di essere stato chiaro..Ciao!! :-ciao :-ciao


Title: Re:Testo prima prova 03/02/2011
Post by: StephCT on 08-02-2011, 10:54:38
ah ecco nn mi ero accorto di dirglielo, si doveva mettere minore di 37 sennò nn vale la percentuale. io nel compito l'ho messa.


Title: Re:Testo prima prova 03/02/2011
Post by: Mari_C on 08-02-2011, 11:35:52
 :-)| capito..grazie!