Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: simOne_fLuo on 25-02-2009, 11:15:34



Title: Prove 25/2/08
Post by: simOne_fLuo on 25-02-2009, 11:15:34
ragazzi sono appena tornato io avevo questo compito..:

1)Un aereo si muove in una superficie toroidale rappresentata da una matrice S di nxn interi occupando di volta in volta una posizione di S. L'aereo si sposta alternando un movimento orizzontalr da sinistra a destra ad uno verticale dal'alto in basso; se l'aereo si trova nella posizione (i,j) l'ampiezzadello spostamento successivo è data da S[i,j] se quest'ultimo è positivo. Se S[i,j] contiene valore zero si tratta di un aeroporto in cui l'aereo atterra, se contiene un valore negativo si tratta di un tifone che fa precipitare l'aereo. Scrivere un metodo che prenda in input S e restituisca il numero di spostamenti compiuti da un ereo cha parte dal centro di S.

2)Scrivere 1 metodo che prenda in input un array A di byte, e restituisca un array bidimensionale frastagliato B di stringhe la cui lunghezza delle righe è data dai valori di A. Si riempia B con delle stringhe casuali da 5 a 8 caratteri in cui ogni singolo carattere è 'p' con probabilità 2/3, 'a' con probabilità 1/6 e 'k' con probabilità 1/6.

Il 2° non era ala fine impossibile ma il primo bello tosto..


Title: Re:Prove 25/2/08
Post by: pemix on 25-02-2009, 12:31:58
Questo è come l'ho fatto io, ma ogni tanto va a ciclo infinito. Qualcuno sà dove sbaglio?o se è giusto?

Testo del compito:
Un aereo si muove in una superficie toroidale rappresentata da una matrice S di nxn interi occupando di volta in volta una posizione di S. L'aereo si sposta alternando un movimento orizzontalr da sinistra a destra ad uno verticale dal'alto in basso; se l'aereo si trova nella posizione (i,j) l'ampiezzadello spostamento successivo è data da S[i,j] se quest'ultimo è positivo. Se S[i,j] contiene valore zero si tratta di un aeroporto in cui l'aereo atterra, se contiene un valore negativo si tratta di un tifone che fa precipitare l'aereo. Scrivere un metodo che prenda in input S e restituisca il numero di spostamenti compiuti da un ereo cha parte dal centro di S.
Code:
public class esercizio1
{
 public static void main(String[]args)
  {
    int n=600;
    int S[][]=new int[n][n];
    for(int i=0;i<S.length;i++)
    {
      for(int j=0;j<S[i].length;j++)
      {
        S[i][j]=(int)(Math.random()*100);
      }
    }
    System.out.println(metodo(S));
  }
 public static int metodo (int S[][])
  {
    int spostamenti=0;
    int movimentoalternato=0;
    int ampiezza=0;
    int n=S.length/2;
    int x=n/2;
    int y=n/2;
    boolean stop=false;
    while(stop==false)
    {
      if(movimentoalternato==0)
      {
        if(S[x][y]==0){stop=true;break;}
        if(S[x][y]< 0){stop=true;break;}
        if(S[x][y]> 0)
        {
         ampiezza=0;
         ampiezza=S[x][y];
         x+=ampiezza;
         if(x>n){x=(x-n);}
         spostamenti++;
         movimentoalternato=1;
        }
      }
      if(movimentoalternato==1)
      {
        if(S[x][y]==0){stop=true;break;}
        if(S[x][y]< 0){stop=true;break;}
        if(S[x][y]> 0)
        {
         ampiezza=0;
         ampiezza=S[x][y];
         y+=ampiezza;
         if(y>n){y=(y-n);}
         spostamenti++;
         movimentoalternato=0;
        }
      }
    }
    return spostamenti;
  }
}


Title: Re:Prove 25/2/08
Post by: ShiShi on 25-02-2009, 12:38:23
Questo è il primo del secondo gruppo. Compilando non mi restituisce errori però mi torna 0 invece di uno. Ho chiesto al prof e in pratica i 5 elementi, 2 prima e 2 dopo dovevano essere Decrescenti...Non so dove ho sbagliato.
Ho letto il testo degli altri secondo me sono un pò più complessi  .huh

Code:
/*Scrivere un metodo che prenda in input una matrice A di float, e restituisca il numero di
elementi bilanciati di A. Un elemento x di A si dice bilanciato se la sequenza ordinata
formata dai due elementi immediatamente a sinistra di x, l'elemento x e i due elementi
immediatamente a destra di x, è in ordine non-crescente.
N.B. : Gli elementi che non hanno sufficienti "vicini" non devono essere considerati.*/

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

public static int metodo (float [][]A) {
    int bilanciati = 0;
    for (int r=0; r<A.length; r++) {
        for (int c=1; c<A[0].length-2; c+=2) {
            for (int c1=0; c1<A[0].length-1; c1++) {
    if ((A[r][c1] > A [r][c+1]) && (A[r][c] > A [r][c+2]) && (A[r][c1] > A [r][c1+1]) && (A[r][c1] > A [r][c1+2]) && (A[r][c1+2] > A [r][c]))
        bilanciati++;
        }
    }
}
return bilanciati;
 }
}


Title: Re:Prove 25/2/08
Post by: ShiShi on 25-02-2009, 12:48:01
E questo è il secondo...anche qui mi ritorna niente, stringa vuota. Bene....posso cominciare a disperarmi? :-)|

Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di stringhe,
e restituisca una stringa ottenuta concatenando i penultimi caratteri di tutte le stringhe
in A contenute nella colonna completa più a destra*/

public class Esame2 {
    public static void main (String [] args) {
        String[][]A = {{"abcd"},
                        {"mno", "pqrst", "il"},
                        {"uvz", "wy", "abcd"}};
            System.out.println (metodo (A));
        }

public static String metodo (String [][]A) {
    String tmp = "";
    for (int r=0; r<A.length; r++) {
        for (int r1=r+1; r1<A.length-2; r++) {
            if (A[r].length < A [r1].length-1)
        for (int c=0; c<A[r].length; c++) {
    tmp+= A[r][c].charAt(A[r][c].length()-2);
        }
    }
}
return tmp;
 }
}
               


Title: Re:Prove 25/2/08
Post by: simOne_fLuo on 25-02-2009, 12:56:19
E questo è il secondo...anche qui mi ritorna niente, stringa vuota. Bene....posso cominciare a disperarmi? :-)|
              

hmm.. direi di si..
cmq stavolta il prof ha superato se stesso + difficili di sempre.. :-)| :[Emoticon] Rosik Asd:


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 13:06:19
io ho fatto 2 for e 2 for


Title: Re:Prove 25/2/08
Post by: thomas89 on 25-02-2009, 13:06:48
ragazzi sono appena tornato io avevo questo compito..:

1)Un aereo si muove in una superficie toroidale rappresentata da una matrice S di nxn interi occupando di volta in volta una posizione di S. L'aereo si sposta alternando un movimento orizzontalr da sinistra a destra ad uno verticale dal'alto in basso; se l'aereo si trova nella posizione (i,j) l'ampiezzadello spostamento successivo è data da S[i,j] se quest'ultimo è positivo. Se S[i,j] contiene valore zero si tratta di un aeroporto in cui l'aereo atterra, se contiene un valore negativo si tratta di un tifone che fa precipitare l'aereo. Scrivere un metodo che prenda in input S e restituisca il numero di spostamenti compiuti da un ereo cha parte dal centro di S.

Non ho capito una cosa, l'aereo ho capito ke parte dal centro.. ma DOVE deve arrivare?


Title: Re:Prove 25/2/08
Post by: ShiShi on 25-02-2009, 13:26:37
Beeeeeeeeeeene..spero almeno di avere azzeccato i for, non riesco nemmeno a cercare di sistemarlo perchè non capisco più nulla al momento  :"-(


Title: Re:Prove 25/2/08
Post by: Giovi89 on 25-02-2009, 13:31:04
Cari colleghi io per l' esercizio del compito riguardante l'aereo ho usato 2 for invece 4 per quello delle stringhe casuali? sono giusti?


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 13:34:55
Questo è il primo del secondo gruppo. Compilando non mi restituisce errori però mi torna 0 invece di uno. Ho chiesto al prof e in pratica i 5 elementi, 2 prima e 2 dopo dovevano essere Decrescenti...Non so dove ho sbagliato.
Ho letto il testo degli altri secondo me sono un pò più complessi  .huh

Code:
/*Scrivere un metodo che prenda in input una matrice A di float, e restituisca il numero di
elementi bilanciati di A. Un elemento x di A si dice bilanciato se la sequenza ordinata
formata dai due elementi immediatamente a sinistra di x, l'elemento x e i due elementi
immediatamente a destra di x, è in ordine non-crescente.
N.B. : Gli elementi che non hanno sufficienti "vicini" non devono essere considerati.*/

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

public static int metodo (float [][]A) {
    int bilanciati = 0;
    for (int r=0; r<A.length; r++) {
        for (int c=1; c<A[0].length-2; c+=2) {
            for (int c1=0; c1<A[0].length-1; c1++) {
    if ((A[r][c1] > A [r][c+1]) && (A[r][c] > A [r][c+2]) && (A[r][c1] > A [r][c1+1]) && (A[r][c1] > A [r][c1+2]) && (A[r][c1+2] > A [r][c]))
        bilanciati++;
        }
    }
}
return bilanciati;
 }
}
non ci provare ora a sistemarlo perchè il cervello è fuori uso, possibilmente domani ti risulta tutto chiaro!cmq hai sbagliato alcune cose..perchè due cicli per le colonne?inoltre l'ordine è non crescente questo significa che l'elemento più a sinistra può essere maggiore o UGUALE  di quello a destra..e quindi le righe composte tutte ds uno contano anche ecco il codice corretto
Code:
public static int metodo (float [][]A)
{
    int bilanciati = 0;
    for (int r=0; r<A.length; r++)
        for (int c=2; c<A[0].length-2; c+=2)
if((A[r][c-2]>=A[r][c-1])&&(A[r][c-1]>=A[r][c])&&(A[r][c]>=A[r][c+1])&&(A[r][c+1]>=A[r][c+2]))
bilanciati++;  
return bilanciati;
 }


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 13:38:12
evvai 2 cicli for giusti,quanto li valuta? >:)


Title: Re:Prove 25/2/08
Post by: ShiShi on 25-02-2009, 13:38:59
Sì infatti, per adesso non sono in grado di capirci più qualcosa...Ho fatto un altro for perchè credevo che A[r][c-1] non si potesse fare, in un esercizio non mi risultava ma mi sa era un altro l'errore allora.  :-)| :-)| :-)| :-)|
Leggendo anche il secondo come pensi sia andato il tutto?


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 13:47:13
"azzeccando i for" e sbagliando qualcosina tipo parentesi e dichiarazione quanto si può prendere?


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 13:51:51
stavo proprio vedendo il secondo..io l'avrei fatto così:
Code:
public static String metodo(String[][] A)
{
String tmp="";
int min=A[0].length;
for(int i=0;i<A.length;i++)
if(A[i].length<min)
min=A[i].length;
for(int r=0;r<A.length;r++)
tmp+=A[r][min-1].charAt(A[r][min-1].length()-2);
return tmp;
}
infatti se ci pensi la colonna completa più a destra ha come indice la lunghezza della riga più corta!tu invece nel tuo codice confronti le righe a 2 a 2 e se la prima è più corta della seconda aggiungi il carattere...
devo dire però che c'erano esercizi abbastanza complessi...


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 13:52:55
"azzeccando i for" e sbagliando qualcosina tipo parentesi e dichiarazione quanto si può prendere?
dipende quanto li considera gravi il prof...e se la mancanza di una coppia di parentesi compromette tutto e allora è un bel probl  .smile


Title: Re:Prove 25/2/08
Post by: ShiShi on 25-02-2009, 13:55:51
Non mi resta che aspettare e sparare va...  :pray
Grazie Vivy da sola non ci avrei nemmeno provato a fare una correzione  .smile


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 13:56:14
nel secondo metodo io ho usato la substring,substring(A[r][c].length-2,A[r][c].length) è corretto?


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 13:57:27
Non mi resta che aspettare e sparare va...  :pray
Grazie Vivy da sola non ci avrei nemmeno provato a fare una correzione  .smile
e non la facciamo così grave basta SPERARE non SPARARE  :[Emoticon] Asd: :[Emoticon] Asd: :[Emoticon] Asd: :[Emoticon] Asd: :[Emoticon] Asd: :[Emoticon] Asd: :[Emoticon] Asd: :[Emoticon] Asd:
cmq sempre a disposizione...dove posso  .smile


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 13:58:26
nel secondo metodo io ho usato la substring,substring(A[r][c].length-2,A[r][c].length) è corretto?
perchè usare substring se si doveva prendere un solo carattere?in questo modo ne prendi due...


Title: Re:Prove 25/2/08
Post by: ShiShi on 25-02-2009, 13:59:55
..........sono diventata pure dislessica yeah!  .rido
Sparare sarebbe la soluzione se non lo supero, un colpo in testa  :"-(


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 14:02:57
noooooooooooo non la facciamo così tragica  .smile


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 14:05:22
ma i soli for quanto valgono??


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 14:07:40
dipende se l'esercizio è giusto o meno...i for da soli non valgono niente


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 14:09:48
insomma,dato ke quando vedeva se erano minori o maggiori i for di quanto voleva lui metteva subito 2,io penso ke ne dia molta importanza,poi nn lo so .bah


Title: Re:Prove 25/2/08
Post by: Vivynz on 25-02-2009, 14:15:43
lui per giudicare gli esercizi intanto vede se il numero di for è giusto...in questo caso controlla il codice...ma ad esempio se ci sono i for giusti e tutto il resto bagliato non puoi pretendere che dia un punteggio alto..


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 14:38:10
vabè un bell'8 me lo dà ahah


Title: Re:Prove 25/2/08
Post by: TheUniversalMind on 25-02-2009, 15:23:05
evvai 2 cicli for giusti,quanto li valuta? >:)

i cicli sono 4 € al Kg, quindi fai tu!! .rido .rido .rido


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 15:58:02
tr poco ghgh :-)L


Title: Re:Prove 25/2/08
Post by: Dhavamba on 25-02-2009, 16:40:30
Questo è l'esercizio dell'aero, secondo voi è giusto?

Code:
public class aereo {

    public static int teo(int A[][]) {
    int m = (int) (A.length/2) - 1;
    int n = (int) (A[m].length/2) - 1;
    int s = 0;
    while (A[m][n]>=0) {
       n++;
       s++;
       if (n > A[m].length - 1) n=0;
       if (A[m][n] <= 0) break;
       m++;
       s++;
       if (m > A.length - 1) m=0; } 
    return s;      }
   
   
    public static void main(String args[]) {
    aereo h = new aereo();
    int[][] f = {{2, 4, 1, 7}, {1, 2,7,12}, {3, 2, 6, 1},{3, 2, 6, 1}};
    int s = h.teo(f);
    System.out.println(s);
    }   
   
}


Questo è quello dell'array di byte, stessa domanda XD

Code:
class byt {

    public static String [][] vett(byte A[]) {
    String [][] B = new String[A.length][];
    for (int i = 0; i < A.length; i++) {
    B[i] = new String[A[i]];      }
    for (int r = 0; r < B.length; r++) {
    for (int d = 0; d < B[r].length; d++) {
      B[r][d]= "";
      for (int g = 0; g < (int)(Math.random()*(8-5)+5+1); g++) {
         int k = (int)(Math.random()*6+1);
         if (k == 1) B[r][d] +='a';
         if (k == 2) B[r][d] +='k';
         if (k > 2) B[r][d] +='p';  } } }
    return B; }
   
   
    public static void main(String args[]) {
    byt h = new byt();
    byte [] f = {2, 4, 1, 7, 6};
    String [][] s = h.vett(f);
    System.out.println(s[1][3]);
    }   
   
   
}



Title: Re:Prove 25/2/08
Post by: simOne_fLuo on 25-02-2009, 20:12:07
evvai 2 cicli for giusti,quanto li valuta? >:)

i cicli sono 4 € al Kg, quindi fai tu!! .rido .rido .rido
|-O |-O


Title: Re:Prove 25/2/08
Post by: atrix0ne on 25-02-2009, 21:43:06
non capisco qualè la sua valutazione,sec voi sbagliando qualkosa lieve 18 lo dà?


Title: Re:Prove 25/2/08
Post by: Acicatena86 on 26-02-2009, 23:29:20
Questo è l'esercizio dell'aero, secondo voi è giusto?

Code:
    while (A[m][n]>=0) {......
..................
}
   


Ma  invece di fare così ,perchè non mettevi un bel

Code:
while(! (A[m][n]<=0)
  ??

Così evitavi quegli inutili break, che al prof non piacciono tanto  .whistling




Title: Re:Prove 25/2/08
Post by: Dhavamba on 27-02-2009, 07:29:35
Quote
Così evitavi quegli inutili break, che al prof non piacciono tanto 


Quelo che dici tu è sbagliato, perchè anche se cambio quel while, quando l'aereo fà lo spostamento di sinistra non ha nessuno fermo e fà anche lo stesso il movimento di sopra e sotto (e se nel movimento di sinistra andasse verso un uragano o un aereoporto?)

Ora che ci penso, al poso del break potevo fare un bel return, no?


Title: Re:Prove 25/2/08
Post by: Crasher on 27-02-2009, 09:48:48
Ora che ci penso, al poso del break potevo fare un bel return, no?
Esattamente...
Cmq sono usciti i vostri risultati...


Title: Re:Prove 25/2/08
Post by: ShiShi on 12-03-2009, 19:36:41
Scrivo in questo stesso post, mi sembra il più adatto.
Ho rifatto tutte e quattro le prove. Qualcuno sa dirmi se sono corrette?
Compilano ed eseguono credo perfettamente ciò che viene richiesto, ma magari c'è qualche imperfezione o qualcosa che mi è sfuggito. .smile

Primo
Code:
/*Scrivere un metodo che prenda in input una matrice A di float, e restituisca il numero di
elementi bilanciati di A. Un elemento x di A si dice bilanciato se la sequenza ordinata
formata dai due elementi immediatamente a sinistra di x, l'elemento x e i due elementi
immediatamente a destra di x, è in ordine non-crescente.
N.B. : Gli elementi che non hanno sufficienti "vicini" non devono essere considerati.*/

public class Esame {
    public static void main (String [] args) {
         float [][] A = {{5,4,3,2,1},
                          {1,1,1,1,1},
                          {1,1,1,1,1},
                          {10,9,8,7,6},
                          {1,1,1,1,1}};
            System.out.println (metodo (A));
        }

public static int metodo (float [][]A) {
    int bilanciati = 0;
    for (int r=0; r<A.length; r++) {
        for (int c=2; c<A[0].length-2; c+=2) {
    if ((A[r][c] > A [r][c+1]) && (A[r][c+1] > A [r][c+2]) && (A[r][c] < A [r][c-1]) && (A[r][c-1] < A [r][c-2]))
        bilanciati++;
    }
 }
return bilanciati;
 }
}

Secondo

Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di stringhe,
e restituisca una stringa ottenuta concatenando i penultimi caratteri di tutte le stringhe
in A contenute nella colonna completa più a destra*/

public class Esame2 {
    public static void main (String [] args) {
        String[][]A = {{"abcd","efgh"},
                        {"mno", "pqrst", "il"},
                        {"uvz", "wy", "abcd"}};
            System.out.println (metodo (A));
        }

public static String metodo (String [][]A) {
    String tmp = "";
    int max = A[0].length;
    for (int r=0; r<A.length; r++)
            if (A[r].length < max)
                max = A[r].length;
        for (int r1=0; r1<A.length; r1++) {
    tmp+= A[r1][max-1].charAt(A[r1][max-1].length()-2);
        }
  return tmp;
 }
}

Terzo

Code:
/*Un aereo si muove in una superficie toroidale rappresentata da una matrice S di nxn interi
occupando di volta in volta una posizione di S. L'aereo si sposta alternando un movimento
orizzontale da sinistra a destra ad uno verticale dal'alto in basso; se l'aereo si trova
nella posizione (i,j) l'ampiezza dello spostamento successivo è data da S[i,j] se quest'ultimo è positivo.
Se S[i,j] contiene valore zero si tratta di un aeroporto in cui l'aereo atterra, se contiene un
valore negativo si tratta di un tifone che fa precipitare l'aereo. Scrivere un metodo che prenda
in input S e restituisca il numero di spostamenti compiuti da un aereo cha parte dal centro di S.*/

public class Esame3 {
    public static void main (String [] args) {
         int [][] A = {{1,2,9,2,1},
                        {0,1,0,4,3},
                        {2,1,1,2,1},
                        {2,2,2,1,2},
                        {1,1,0,1,1}};
            System.out.println (metodo (A));
        }
       
public static int metodo (int [][] A) {
    int volo = 0;
    int tmp = 1;
    int r= A.length/2;
    int c = A.length/2;
        while (A[r][c] > 0) {
            volo++;
        if(tmp==1) {
            tmp--;
                  if (r<A.length-1 && r+A[r][c]<A.length)
                      r+=A[r][c];
                  else
                      if(A[r][c]==1)
                      r=0;
                  else
                      r=(r+A[r][c])-(A.length);
            }
        else
            tmp++;
                  if (c<A.length-1 && c+A[r][c]<A.length)
                      c+=A[r][c];
                  else
                      if(A[r][c]==1)
                      c=0;
                  else
                      c=(c+A[r][c])-(A.length);           
    }
    return volo;
    }
}

Quarto

Code:
/*Scrivere 1 metodo che prenda in input un array A di byte, e restituisca un array bidimensionale
frastagliato B di stringhe la cui lunghezza delle righe è data dai valori di A.
Si riempia B con delle stringhe casuali da 5 a 8 caratteri in cui ogni singolo carattere
è 'p' con probabilità 2/3, 'a' con probabilità 1/6 e 'k' con probabilità 1/6.*/

public class Esame4 {
     public static void main (String [] args) {
         byte [] A = {1,2,3,4,};
         String [][] B;
         B=metodo(A);
          for (int r=0; r<B.length; r++) {
               System.out.println("");
                  for (int c=0; c<B[r].length; c++)
            System.out.print (B[r][c]+"|");
           }
        }
       
public static String [][] metodo (byte [] A) {
    String [][] B = new String[A.length][];   
    String tmp = "";
    for (int i=0; i<A.length; i++) {
        B[i] = new String [A[i]];
            for (int c=0; c<B[i].length; c++) {
                B[i][c]= "";
                    for (int h= (int)(Math.random()*8+5); h>0; h--) {
                       int prova = (int)(Math.random()*6+1);
        if (prova <= 4)
                B[i][c] += 'p';
        if (prova == 5)
            B[i][c] += 'a';
        else
            B[i][c] += 'k';
    }
        }
}
    return B;
    }
}