Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: ShiShi on 09-02-2009, 10:55:26



Title: Altro Esercizio prima parte
Post by: ShiShi on 09-02-2009, 10:55:26
Code:
/*Scrivere un metodo che prenda in input due array bidimensionali A e B
di float delle stesse dimensioni nxm, e restituisca il numero di righe pesanti di A.
Una riga di r di A si dice pesante se contiene un numero pari di elementi ed esiste
una riga p in B tale che ogni elemento di posizione dispari di r è maggiore del successivo
elemento (di posizione pari) di p.
Es.: r = [4,7,2,9,18,7] e p = [12,3,2,1,19,17], r è pesante perchè 4>3, 2>1 e 18>17.*/

public class Gioca {
    public static void main (String[]args) {
        float [][] A = {{4, 7, 2, 9, 18, 7},
                         {0, 0, 0, 0, 0, 0},
                         {0, 0, 0, 0, 0, 0},
                         {0, 0, 0, 0, 0, 0},
                         {0, 0, 0, 0, 0, 0},
                         {0, 0, 0, 0, 0, 0}};
                         
        float [][] B = {{12, 3, 2, 1, 19, 17},
                         {12, 3, 2, 1, 19, 17},
                         {54, 66, 67, 85, 90, 99},
                         {99, 81, 81, 62, 88, 87},
                         {99, 80, 80, 62, 88, 87},
                         {99, 80, 80, 62, 88, 87}};
        System.out.println (metodo (A,B));
    }

static int metodo (float [][]A, float [][]B) {
    int pesanti=0;
    int n=A.length;
    int m=A[0].length;
    if (n % 2 == 0) {
         for (int c=0; c<m; c+=c+2) {
            int cont=0;
             for (int r=0; r<n; r++)
        if (A[r][c]>B[r][c+1])
            cont++;
   if (cont>=A.length/2)
    pesanti++;
   }
  }
  return pesanti;
 }
}

Mi sono fermata al contare quanti elementi della riga sono maggiori di quelli nella riga B, non capisco perchè invece di 3 me ne conta 2.. :-)| Sapete dirmi dove sbaglio?Grazie in anticipo.

EDIT:Ho modificato il codice perchè ho risolto il problema e ne è sorto un altro  .poverinoi mi ritorna zero nonostante c'è una riga pesante.


Title: Re:Altro Esercizio prima parte
Post by: ShiShi on 09-02-2009, 16:13:04
Nessuno ha idea di che errore può esserci?  :-)|


Title: Re:Altro Esercizio prima parte
Post by: Crasher on 10-02-2009, 10:17:10
for (int c=0; c<m; c+=c+2)

c+=c+2 significa c = c + (c+2)

quindi avrai:
1° for:
c=0 ==> colonna 0

2° for
c = 0+ (0+2) ==> colonna 2

3° for
c ora vale 2 ==> c = 2+ (2+2) ==> colonna 6

Così salti la colonna 4 che è pari!


Devi cambiarlo scrivendo:
c += 2

che equivale a

c = c+2

:)


Title: Re:Altro Esercizio prima parte
Post by: ShiShi on 10-02-2009, 16:57:04
Riguardavo il codice, contavo le colonne e non mi accorgevo dell'errore...ti ringrazo perchè per una stupidata stavo uscendo pazza  .rido
Tra l'altro mi sono accorta che c'era un altro errore oltre a quello che mi hi fatto notare.
Posto l'esercizio ormai corretto nel caso servisse a qualcun altro  .smile
Code:
/*Scrivere un metodo che prenda in input due array bidimensionali A e B
di float delle stesse dimensioni nxm, e restituisca il numero di righe pesanti di A.
Una riga di r di A si dice pesante se contiene un numero pari di elementi ed esiste
una riga p in B tale che ogni elemento di posizione dispari di r è maggiore del successivo
elemento (di posizione pari) di p.
Es.: r = [4,7,2,9,18,7] e p = [12,3,2,1,19,17], r è pesante perchè 4>3, 2>1 e 18>17.*/

public class Gioca {
    public static void main (String[]args) {
        float [][] A = {{4, 7, 2, 9, 18, 7},
                         {4, 7, 2, 9, 18, 7},
                         {4, 7, 2, 9, 18, 7},
                         {0, 0, 0, 0, 0, 0},
                         {0, 0, 0, 0, 0, 0},
                         {4, 7, 2, 9, 18, 7}};
                         
        float [][] B = {{12, 3, 2, 1, 19, 17},
                         {12, 3, 2, 1, 19, 17},
                         {54, 66, 67, 85, 90, 99},
                         {99, 81, 81, 62, 88, 87},
                         {99, 80, 80, 62, 88, 87},
                         {12, 3, 2, 1, 19, 17}};
        System.out.println (metodo (A,B));
    }

static int metodo (float [][]A, float [][]B) {
    int pesanti=0;
    int n=A.length;
    int m=A[0].length;
    if (n % 2 == 0) {
        for (int r=0; r<n; r++) {
            int cont=0;
             for (int c=0; c<m; c+=2)
        if (A[r][c]>B[r][c+1])
            cont++;
   if (cont==A.length/2)
    pesanti++;
   }
  }
  return pesanti;
 }
}


Title: Re:Altro Esercizio prima parte
Post by: atrix0ne on 11-02-2009, 21:00:51
speriamo di superarla sta prova dei metodi :(


Title: Re:Altro Esercizio prima parte
Post by: zElOtO on 11-02-2009, 23:33:15
speriamo di superarla sta prova dei metodi :(

Speriamo di superarla sta prova di laboratorio  .leggo


Title: Re:Altro Esercizio prima parte
Post by: atrix0ne on 12-02-2009, 00:51:04
prima metodi e poi laboratorio  |-O


Title: Re:Altro Esercizio prima parte
Post by: zElOtO on 12-02-2009, 01:25:51
prima metodi e poi laboratorio  |-O

Beh io metodi l'ho già passato, mi aspetta il laboratorio gg 25!! Speriamo bene!  :[Emoticon] PC Asd:


Title: Re:Altro Esercizio prima parte
Post by: atrix0ne on 12-02-2009, 13:11:55
mi daresti una mano coi metodi? :-)|


Title: Re:Altro Esercizio prima parte
Post by: Vivynz on 12-02-2009, 13:17:38
postate sul forum che ci sono tantissime persone che possono dare una mano!


Title: Re:Altro Esercizio prima parte
Post by: zElOtO on 12-02-2009, 13:37:38
mi daresti una mano coi metodi? :-)|

Chiedi e ti sarà risposto  :boh


Title: Re:Altro Esercizio prima parte
Post by: Vivynz on 12-02-2009, 13:40:35
Chiedi e ti sarà risposto  :boh
.quoto


Title: Re:Altro Esercizio prima parte
Post by: ShiShi on 20-02-2009, 11:10:59
Ho svolto questo esercizio e credo sia giusto, il mio dubbio è se per colonna i-esima si intende una colonna a piacere scelta appunto con l'indice i.  :boh

Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe ed un
indice i, e restituisca una copia S’ di S in cui ogni stringa presente nella colonna i-esima è stata
modificata scambiando il quinto carattere con l’ultimo, rispettivamente.*/

public class GiustoPrimo {
   public static void main (String[]args) {
      String[][]A = {{"palla", "pallCaaK", "palla"},
                        {"palla", "pallTH"},
                        {"palla", "pallUaaaaJ", "palla"}};
                A=metodo (A);
                for (int i=0; i<A.length; i++)
                   for (int j=0; j<A[i].length; j++)
            System.out.print (A[i][j]+"|");
        }

public static String[][] metodo (String[][]A) {
int h=1;
    if (A.length>=h)
     for (int r=0; r<A.length; r++)
        A[r][h] = metodo2 (A[r][h]);
        return A;
    }

public static String metodo2 (String A) {
    String tmp2="";
    String tmp="";
    char quinto= A.charAt(4);
    char ultimo= A.charAt(A.length()-1);
        for (int i=0; i<4; i++)
            tmp+= A.charAt(i);
        for (int j=5; j<A.length()-1; j++)
             tmp2+=A.charAt(j);
             tmp2+= quinto;
        tmp2 = tmp+ultimo+tmp2;
       return tmp2;
   }
}

Un altro dubbio è con questo testo
Code:
/*Scrivere un metodo che prenda come parametri formali due array di long D e V
della stessa dimensione e restituisca in output un array bidimensionale S
in cui la i-esima riga ha D[i] colonne ed ogni colonna contiene i corrispondenti
valori memorizzati in V. (N.B.: Si inizializzi S colonna dopo colonna).*/

non capisco..i due array D e V sono ad una dimensione no?E l'array bidimensionale S che restituisce come ha le righe?


Title: Re:Altro Esercizio prima parte
Post by: Root on 20-02-2009, 11:57:43
Allora....

Quote
Ho svolto questo esercizio e credo sia giusto, il mio dubbio è se per colonna i-esima si intende una colonna a piacere scelta appunto con l'indice i.  boh

per quanto riguarda il primo esercizio credo che tu abbia sbagliato qualcosina:

1)Il metodo deve prendere in input un array bidimensionale di stringhe ed un indice i, quindi la sua intestazione dovrebbe essere
Code:
public static String [][] metodo (String [][] A, int h);
per il resto è quasi corretto (ovvero ad ogni stringa della colonna h esegui metodo 2), ma devi anche stare attenta che l'indice h non sfori per ogni riga... quindi devi tramutare quel controllo
Code:
if(A.length >= h)
in
if(A[r].length >h)
ed eseguirlo ad ogni riga, ed oltretutto il testo richiede una copia dunque devi creare un copia di A

2)Su metodo2 si potrebbe ridire qualcosina, ad esempio:
 perchè ti crei due stringhe temporanee?
Potresti semplicemente utilizzare il metodo della classe String
Code:
cha[] toCharArray()
ed effettuare un mero scambio di indici (cioè semplicemente scambi la quinta posizione con l'ultima e viceversa).
In questo modo ti eviti quei for in metodo2

Quote
Un altro dubbio è con questo testo


/*Scrivere un metodo che prenda come parametri formali due array di long D e V
della stessa dimensione e restituisca in output un array bidimensionale S
in cui la i-esima riga ha D colonne ed ogni colonna contiene i corrispondenti
valori memorizzati in V. (N.B.: Si inizializzi S colonna dopo colonna).*/


non capisco..i due array D e V sono ad una dimensione no?E l'array bidimensionale S che restituisce come ha le righe?

Se la riga i-esima ha tante colonne quanto è il valore memorizzato in  D alla pos. i, mi sembra ovvio che le righe di S devono essere tante quanto la lunghezza di D.
 .smile

Buono studio e fammi sapere!
Ciao
Dario


Title: Re:Altro Esercizio prima parte
Post by: ShiShi on 21-02-2009, 12:37:14
Code:
cha[] toCharArray()
Ho cercato di non usare il metodo della classe String. Spesso il prof vieta l'uso di alcuni metodi e così mi sto abituando a trovare prima l'alternativa. Grazie per l'aiuto e la spiegazione del secondo esercizio  .smile


Title: Re:Altro Esercizio prima parte
Post by: Root on 21-02-2009, 12:50:37
Code:
cha[] toCharArray()
Ho cercato di non usare il metodo della classe String. Spesso il prof vieta l'uso di alcuni metodi e così mi sto abituando a trovare prima l'alternativa. Grazie per l'aiuto e la spiegazione del secondo esercizio  .smile

Non sapevo che il prof vietasse l'uso di metodi, ma sicuramente non ti vieta di costruirti un metodo che faccia la stessa cosa del metodo vietato! A volte, la suddivisione in problemi più piccoli semplifica di molto la soluzione.
Quindi potresti usare una cosa del genere:
Code:
char[] myToCharArray(String _in)
{
    char [] toRet = new char[_in.length()];
    for(int i = 0; i<toRet.length; i++)
       toRet[i] = _in.charAt(i);
    return toRet;
}
e poi utilizzare il vettore ritornato per scambiare gli indici!

Buono Studio
Dario


Title: Re:Altro Esercizio prima parte
Post by: ShiShi on 22-02-2009, 17:04:07
Non ho perfettamente capito come usare il metodo che mi hai scritto Root, ora ricontrollo tutto l'esercizio, ma correggendo i due errori che mi hai fatto notare pensi è costruito e strutturato male il secondo metodo?


Title: Re:Altro Esercizio prima parte
Post by: Root on 22-02-2009, 17:29:36
Non ho perfettamente capito come usare il metodo che mi hai scritto Root, ora ricontrollo tutto l'esercizio, ma correggendo i due errori che mi hai fatto notare pensi è costruito e strutturato male il secondo metodo?

A questo punto non lo so. Se il prof vuole che siano usati TOT cicli annidati per risolvere un esercizio, allora la suddivisione di un metodo in più metodi potrebbe essere considerata (erroneamente) una cosa sbagliata!

Comunque, correggendo quegli errori il metodo funziona correttamente!

Per quanto riguarda il metodo che ti ho postato io, quello vuole essere un sostituito di toCharArray della classe String, potresti dunque usarlo per risolvere l'esercizio scambiando due posizioni di un array di char piuttosto che costruirti stringhe temporanee&C (quello che fa metodo2 per intenderci).

Salut
Dario
Salut
Dairo


Title: Re:Altro Esercizio prima parte
Post by: ShiShi on 22-02-2009, 17:38:58
Comunque grazie per l'aiuto  .smile altri che hanno superato l'esame sanno dirmi se è un problema l'uso di due metodi?Credo di non aver sbagliato nell'uso di for in questo esercizio..


Title: Re:Altro Esercizio prima parte
Post by: ShiShi on 23-02-2009, 17:33:20
Ho provato a svolgere questo esercizio ma mi fermo all'ordinare l'array, qualcuno può aiutarmi nell'inserire l'elemento h? .ciaociao
Code:
/*Scrivere un metodo che prende come parametri un array di float e un float h.
Si assuma che l'array dato sia ordinato in senso crescente. Il metodo deve restituire un array
di float ottenuto dall'array originale inserendo l'elemento h nella posizione corretta.*/

public class Boh {
    public static void main (String [] args)
    {
       int [] A = { 2, 5 , 1, 7, 6, 4};
       int h=3;
             A=metodo( A ) ;
             for(int i=0;i<A.length;i++)
             System.out.print (A[i]+"|");
    }
   
public static int[] metodo (int [] A) {
       for (int r=0; r<A.length-1; r++)
           for (int c=A.length-1; c>0; --c)
           if(A[c]<(A[c-1]))
                metodo2 (A , c , c-1);
                    return A;                   
    }
public static void metodo2 (int [] A, int r, int c) {     
       int tmp=A[r];
         A[r]=A[c];
         A[c]=tmp;       
    }
}