Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Vivynz on 15-12-2008, 16:22:10



Title: esercizi seconda prova in itinere
Post by: Vivynz on 15-12-2008, 16:22:10
Esercizio 1
Scrivere un metodo che prenda come parametri formali un array di interi A e restituisca in output un
array di interi B in cui la posizione i-esima contiene l’indice della prima occorrenza di A nel
sottovettore A[ i+1, …, A.length –1 ], oppure –1 se questa non esiste. Si veda l’esempio:
es.: A = [ 3, 2, 4, 3, 4, 3], B = [ 3, –1, 4, 5, –1, –1 ].

Che cosa si deve fare?! .doh


Title: Re:esercizi seconda prova in itinere
Post by: fabliux on 15-12-2008, 16:27:12
Esercizio 1
Scrivere un metodo che prenda come parametri formali un array di interi A e restituisca in output un
array di interi B in cui la posizione i-esima contiene l’indice della prima occorrenza di A nel
sottovettore A[ i+1, …, A.length –1 ], oppure –1 se questa non esiste. Si veda l’esempio:
es.: A = [ 3, 2, 4, 3, 4, 3], B = [ 3, –1, 4, 5, –1, –1 ].

Che cosa si deve fare?! .doh

 .quoto


Title: Re:esercizi seconda prova in itinere
Post by: MisteroLupo on 15-12-2008, 17:13:45
B deve restituire l'indice della prima occorrenza dell'intero nella posizione i-esima dopo l'intero stesso, in effetti è ostico da spiegare e per capirlo ci ho messo un po'..

citando l'esempio:
A = [ 3, 2, 4, 3, 4, 3]
B = [ 3, –1, 4, 5, –1, –1 ]

Il 3 dopo il primo 3 si trova nella posizione n.3, quindi restituisce 3 (poi che sfiga giusto nella posizione 3 .bah)
non c'è nessun 2 dopo il primo 2 quindi restituisce -1
il 4 successivo viene nella posizione 4 quindi restituisce 4
etc..

spero di essere stato chiaro ma non lo credo :-)|


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 15-12-2008, 17:41:12
aaaaaaaaaaaaaaah ecco!!!grazie  .smile


Title: Re:esercizi seconda prova in itinere
Post by: MisteroLupo on 15-12-2008, 18:31:01
felice di essere stato d'aiuto .smile


Title: Re:esercizi seconda prova in itinere
Post by: MisteroLupo on 17-12-2008, 16:12:13
Se a qualcuno dovesse interessare, ho risolto l'esercizio sopra citato.
Si accettano migliorie o consigli ovviamente!
Code:
public class SottoVettore {

    public static int[] metodo(int[] A) {
        // metodo che risolve l'esercizio ciclando il metodo trovaSuccessivo()
        // per tutte le occorrenze dell'array.
        int[] B = new int[A.length];
        for (int i=0;i<A.length;i++) {
            B[i] = trovaSuccessivo(A,i);
        }
        return B;
    }

    public static int trovaSuccessivo(int[] A, int a) {
        // trova occorrenza uguale nel sottovettore partente da a.
        for (int i=a+1;i<A.length;i++) {
            if (A[i] == A[a]) return i;
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] A = {3,2,4,3,4,3};
        int[] B = metodo(A);
        for (int i=0;i<B.length;i++) System.out.print(B[i] + " ");
        System.out.println();
    }
}



Title: Re:esercizi seconda prova in itinere
Post by: carmelo_ct on 17-12-2008, 17:11:16
Esercizio 1
Scrivere un metodo che prenda come parametri formali un array di interi A e restituisca in output un
array di interi B in cui la posizione i-esima contiene l’indice della prima occorrenza di A nel
sottovettore A[ i+1, …, A.length –1 ], oppure –1 se questa non esiste. Si veda l’esempio:
es.: A = [ 3, 2, 4, 3, 4, 3], B = [ 3, –1, 4, 5, –1, –1 ].

Che cosa si deve fare?! .doh

Perchè hai chiamato il post "esercizio seconda prova in itinere"? Sai già che saranno gli esercizi della seconda prova? 


Title: Re:esercizi seconda prova in itinere
Post by: fabliux on 17-12-2008, 17:17:58
Perchè hai chiamato il post "esercizio seconda prova in itinere"? Sai già che saranno gli esercizi della seconda prova? 


Ma perkè vi create tutti sti problemi??    :boh

Cmq la seconda prova si baserà molto probabilmente su questi esercizi....implementazione di metodi...


Title: Re:esercizi seconda prova in itinere
Post by: fabliux on 17-12-2008, 19:11:40
Code:
Si consideri il seguente schema lineare: +++---+++---+++---+++---···.
Scrivere un metodo che prenda come parametro formale una stringa S e restituisca in output la
stringa ottenuta da S sovrapponendo il precedente schema e concatenando i caratteri corrispondenti
al simbolo ‘+’.      Es.: S=”abcdefghilmno”, Output=”abcghio”.

Qualkuno che lo ha fatto potrebbe postarlo??

grazie!


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 18-12-2008, 00:05:03
Qualkuno che lo ha fatto potrebbe postarlo??

grazie!

Questo codice calcola effettivamente la funzione (metodo) da te cercata:
Code:
public static String metodo (String s)
{
    //stringa dove conserviamo i risultati parziali
    String temp = "";
    //lunghezza della stringa originale
    int l = s.length ();

    //spostandoci di 6 posizioni alla volta
    for (int i = 0; i < l; i += 6)
        //recuperiamo i primi (al massimo) 3 caratteri di gruppi da 6
        temp += s.substring (i, Math.min (i + 3, l));
   
    //restituiamo il valore calcolato
    return temp;
}
.ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: fabliux on 18-12-2008, 00:25:12
Qualkuno che lo ha fatto potrebbe postarlo??

grazie!

Questo codice calcola effettivamente la funzione (metodo) da te cercata:
Code:
public static String metodo (String s)
{
    //stringa dove conserviamo i risultati parziali
    String temp = "";
    //lunghezza della stringa originale
    int l = s.length ();

    //spostandoci di 6 posizioni alla volta
    for (int i = 0; i < l; i += 6)
        //recuperiamo i primi (al massimo) 3 caratteri di gruppi da 6
        temp += s.substring (i, Math.min (i + 3, l));
   
    //restituiamo il valore calcolato
    return temp;
}
.ciaociao


Grazie mille.... :-OK


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 19-12-2008, 17:10:59
Qualcuno ha fatto l'esercizio 10?mi dà problemi nel passare come parametro formale un array bidimensionale n x m...


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 19-12-2008, 18:05:55
Qualcuno ha fatto l'esercizio 10?mi dà problemi nel passare come parametro formale un array bidimensionale n x m...
Se posti il testo dell'esercizio, vedrò cosa posso fare... .smile


Title: Re:esercizi seconda prova in itinere
Post by: Raro89 on 20-12-2008, 01:29:15
Ciao ragazzi volevo un aiutino...
ho fatto l'esercizio 10, lo compilo e non dà alcun errore, lo eseguo e non mi stampa niente...,
potete autarmi x favore???
Metto di seguito il testo e il codice ciao e grazie in anticipo:
Quote
/*
Esercizio 10
Scrivere un metodo che prenda come parametro formale un vettore bidimensionale A di double di
dimensioni n x m, e restituisca in output un vettore di double di dimensione m, contenente nella
locazione i-esima la somma di tutti gli elementi della colonna i-esima di A che siano non-negativi.
*/
import java.lang.*;
class esercizio10
{
   public static double [] output(double [] [] A)
   {
      //int dim1,dim2;
      //A=new double [][];
      int m=0;//colonne
      int n=0;//righe
      double [] vettore=new double [m];
      double tmp=0.0;
      while (m<vettore.length)
      {
         for (int i=0;i<vettore.length;i++)
         {
            tmp+=A[n][m];
            vettore[m]=tmp;
         }
         m++;
         System.out.print(vettore[m] );
      }
      
      return vettore;
   }
   
   public static void main (String [] args)
   {
      //int dim1=3, dim2=5;
      double [] [] A = /*new double [dim1][dim2];*/{{3.5,4.9,10.2},
                            {12.8,9.0,5.6},
                            {4.2,2.1,8.0},
                            {15.6,6.7,7.6}};
      int m=1,n;
      //for (m=0;m<dim1;m++)
         //for(n=0;n<dim2;n++)
      //A[m][n]=(double)(Math.random()*15);
      double [] vettore=output(A);
      for(int i=0;i<vettore.length;i++)
      {
         System.out.print(vettore[m]);
      }         
   }
   
}

Lo so l'array per ora nel main è riempita a con valori predefiniti da me, e nel metodo no ma è perchè ho fatto una prova...!!!
GRAZIE IN ANTICIPO E TANTI AUGURI DI BUON NATALE...DARIO!!!


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 20-12-2008, 11:50:52
Ciao ragazzi volevo un aiutino...
ho fatto l'esercizio 10, lo compilo e non dà alcun errore, lo eseguo e non mi stampa niente...,
potete autarmi x favore???
Mi permetto di farti notare gli errori del tuo codice, a scopo didattico  .smile:
Code:
public static double [] output(double [] [] A)
{
int m=0;//colonne
int n=0;//righe

//1° errore: poiché m=0, "vettore" è un array di 0 elementi
double [] vettore=new double [m];
double tmp=0.0;

//2° errore, a cascata col 1°:
//poiché m=0 e vettore.length=0, questa condizione è subito "false"
//e non si entra mai nel corpo del while
while (m<vettore.length)
{
//3° errore, se anche i primi due errori fossero risolti,
//qui dovrebbe essere "i<A.length" come condizione
for (int i=0;i<vettore.length;i++)
{
//4° errore: il contatore "i" non è mai usato per tmp+=A[i][m]
//5° errore: sommi tutti i valori della colonna, non solo quelli non-negativi
tmp+=A[n][m];
//6° errore: inutile salvare tmp adesso, si può fare fuori dal "for"
vettore[m]=tmp;
}
m++;
System.out.print(vettore[m] );
}

//qui restituisci infine un vettore vuoto
return vettore;
}

Ecco, invece, un metodo che risolve il tuo problema (metto pure la classe e un esempio di input):

Code:
import java.lang.Math;

public class esercizio10
{
public static double [] metodo (double [] [] A)
{
int m = A [0].length; //si suppone che ci sia almeno una riga e che le righe abbiano tutte la stessa dimensione
double [] temp = new double [m];

//per ogni colonna
for (int i = 0; i < m; i++)
{
//inizializzo a zero la somma degli elementi di tale colonna
temp [i] = 0;

//e poi per ogni riga (fissata la colonna)
for (int j = 0; j < A.length; j++)
//sommo i valori degli elementi non-negativi
temp [i] += Math.max (A [j][i], 0);
}

return temp;
}

public static void main (String [] args)
{
double [][] d = {{ 1, -4,  4,  6,  4},
{-1, -4,  0, -9,  6},
{ 4,  5,  8,  9, -1}};

//somme calcolate: 5,  5, 12, 15, 10
           
double [] res = metodo (d);

for (int i = 0; i < res.length; i++)
System.out.print (((i == 0) ? "" : ", ") + res [i]);
}
}

GRAZIE IN ANTICIPO E TANTI AUGURI DI BUON NATALE...DARIO!!!
Buon Natale anche a te (http://galileo.dmi.unict.it/utenti/reversengineer/pub/forum/images/smilies/sm_christmas.gif).
 .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 21-12-2008, 12:54:40
Salve a tutti anchio posto il codice relativo al 15 esercizio ma vorrei un chiarimento riguardo a questo errore che mi segnala...

Esercizio 15
Si consideri il seguente schema lineare: +++---+++---+++---+++---···.
Scrivere un metodo che prenda come parametro formale una stringa S e restituisca in output la
stringa ottenuta da S sovrapponendo il precedente schema e concatenando i caratteri corrispondenti
al simbolo ‘+’. Es.: S=”abcdefghilmno”, Output=”abcghio”.

errore:
schema15.java:23: cannot find symbol
symbol  : method cena()
location: class java.lang.String
       s.cena();
        ^
1 error

esercizio:
class schema
{
   public static String cena(String s)
   {
      String x="";
      String [] c = {"+","+","+","-","-","-","+","+","+","-","-","-",
                                                      "+","+","+","-","-","-","+","+","+","-","-","-","*","*","*"};
      for (int i=0; i<s.length();i++)
      {
         if (c=="+")
         {
            x+=s.charAt(i);
         }
      }
      return x;
         }
}

public class schema15
{
   public static void main(String [] args)
   {
       String s = "abcdefghilmno";
       s.cena();
        }
}

cmq auguri di buon natale a tuttti!!


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 21-12-2008, 15:49:15
il metodo è statico quindi nel main non hai bisogno di mettere s. prima del nome del metodo
Quote
public static void main(String [] args)
   {
       String s = "abcdefghilmno";
       s.cena();
        }
inoltre poichè il metodo prende una stringa come parametro formale
Quote
public static String cena(String s)
quando lo richiami dal main devi passare un parametro attuale quindi dovresti scrivere qualcosa tipo
String str=cena(s);
non so se sono stata chiara...


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 21-12-2008, 23:21:52
Salve a tutti anchio posto il codice relativo al 15 esercizio ma vorrei un chiarimento riguardo a questo errore che mi segnala...
Non ti seccare, ma potresti modificare il tuo post o crearne uno nuovo utilizzando il tag CODE? Non è solo per una questione di estetica, è proprio che certe scritte potrebbero essere interpretate dal parser HTML (come i tag [i] che in origine erano l'i-esimo elemento di un certo array e ora invece mi rendono "corsivo" il testo seguente .sisi).
Quando lo farai, sarò lieto di risponderti  .smile.
Ciao .ciaociao.


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 21-12-2008, 23:56:28
OK, mi sento buono perché è Natale, perciò posterò una risposta esauriente comunque  .smile.

Prima di tutto indicherò i vari errori/imprecisioni/sviste che ho notato nel tuo codice:
Code:
class schema
{
public static String cena(String s)
{
String x="";
//la sequenza è "lineare", ciò significa che continua in modo lineare e ripetitivo
//i tre puntini alla fine sono "di sospensione", per indicare una sequenza infinita
//perciò il seguente array produce un output sbagliato
String [] c = {"+","+","+","-","-","-","+","+","+","-","-","-",
                                                      "+","+","+","-","-","-","+","+","+","-","-","-","*","*","*"};
//considerato che la condizione di un ciclo for (o while, ecc...) viene valutata
//nuovamente per ogni iterazione, è meglio non calcolare più volte il valore di
//una funzione, come invece si fa con "s.length()" nel tuo esempio
for (int i=0; i<s.length();i++)
{
//nel caso di una sequenza di simboli (che essendo infinita nel nostro caso, non è rappresentabile
//tramite array) è preferibile confrontare valori char piuttosto che forzare un compareTo tra oggetti
//String (che è la nuovamente l'esecuzione di un metodo), cioè usare "==" tra oggetti String.
if (c[i]=="+")
//queste parentesi sono inutili (suggerimento estetico, non propriamente errore)
{
x+=s.charAt(i);
}
}
return x;
         }
}
Inoltre non c'è motivo di utilizzare ben 2 classi per un esercizio di così breve risoluzione.

Per quanto riguarda l'errore segnalatoti dal compilatore, rispondendo anche a- e correggendo l'errata osservazione di- Vivynz (non me ne voglia, è fatto tutto a fin di bene  .arrossisco), questo tuo codice:
Code:
       String s = "abcdefghilmno";
       s.cena();
tenta di richiamare il metodo cena su un oggetto di tipo String, che non ha (vedi javadoc) sicuramente tale metodo fra quelli disponibili (pubblicamente).

Inoltre, anche il suggerimento di Vivynz è sbagliato, in quanto tale metodo non fa parte dello scope di visibilità (a livello classe) della classe schema15, in uno dei metodi della quale tale metodo è richiamato.

Piuttosto, penso che tu volessi scrivere:
Code:
       String s = "abcdefghilmno";
       [...]schema.cena(s);
ove [...] indica una omissione di codice, come ad esempio un System.out.println().
cioè infine avresti dovuto scrivere qualcosa come:
Code:
       String s = "abcdefghilmno";
       System.out.println (schema.cena(s));

Come ultima cosa, posto un'altra soluzione al problema che usa una funzione in qualche modo generatrice di sequenze regolari infinite (lineari) di simboli +++--- (ecc...).
Code:
public class schema15
{
private static char elementoSequenza (int indice)
{
//cioè se indice è 0,1,2,6,7,8,12,13,14,...
//ovvero se il resto della divisione di indice con 6 (gruppi da 6) è 0,1 o 2
//mi viene generato un '+' altrimenti un '-';
if ((indice % 6) < 3)
return '+';
else
return '-';
//(da notare che tale return si può unificare tramite "if aritmetico" nella forma:
//                                                     condizione?then:else
}

private static String cena (String s)
{
String x = "";
int max = s.length ();

for (int i = 0; i < max; i++)
if (elementoSequenza (i) == '+')
x += s.charAt (i);

return x;
}

public static void main(String [] args)
{
    String s = "abcdefghilmno";
    System.out.println (cena (s));
}
}

Salut .ciaociao.

Spero di essermi stato fatto avuto capire :yoh!


Title: Re:esercizi seconda prova in itinere
Post by: Raro89 on 22-12-2008, 16:15:15
Grazie mille del tuo aiuto...mi sei stato veramente d'aiuto...io da solo non avrei mai trovato tutti questi errori...io pensavo che fosse solo dovuto al fatto che m prima era uguale a zero ed avevo un vettore vuoto..ma invece mi sbagliavo...grazie ancora ciao ciao


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 22-12-2008, 17:36:58
Esercizio 16...che ne pensate?
Code:
/*Una scacchiera S di dimensione 8x8 viene rappresentata mediante un array bidimensionale di
boolean in cui ogni posizione o è vuota (false) oppure contiene una pedina (true). Scrivere un
metodo che prenda come parametro formale una scacchiera S, e restituisca in output un boolean che
indichi se la scacchiera contiene almeno due pedine sulla stessa riga o sulla stessa colonna*/
public class Es16
{
public static boolean pedine(Scacchiera S)
{
for(int r=0;r<S.getRighe();r++)
{
for(int c=0;c<S.getColonne();c++)
{
if((S.contienePedina(r,c))&&(S.contienePedina(r+1,c+1)))
{
System.out.println("Ci sono due pedine contigue sulla riga "+r);
return true;
}
}
}
for(int c=0;c<S.getColonne();c++)
{
for(int r=0;r<S.getRighe();r++)
{
if((S.contienePedina(r,c))&&(S.contienePedina(r+1,c+1)))
{
System.out.println("Ci sono due pedine contigue sulla colonna "+c);
return true;
}
}
}
System.out.println("Non ci sono pedine contigue");
return false;
}
public static void main (String[] args)
{
Scacchiera sc=new Scacchiera(100);
sc.riempiCasuale();
sc.stampa();
boolean b=pedine(sc);
System.out.println(b);
sc.riempiFalse();
sc.stampa();
b=pedine(sc);
System.out.println(b);
}
}
class Scacchiera
{
private boolean [][] Scacchiera;
private int righe;
private int colonne;
public Scacchiera(int dimensione)
{
righe=dimensione;
colonne=dimensione;
Scacchiera=new boolean [righe][colonne];
}
public boolean contienePedina(int riga,int colonna)
{
if (Scacchiera[riga][colonna]==true)
return true;
else
return false;
}
public int getRighe()
{
return righe;
}
public int getColonne()
{
return colonne;
}
public void riempiCasuale()
{
for(int i=0;i<righe;i++)
{
for(int j=0;j<colonne;j++)
{
if((int)(Math.random()*2)==0)
Scacchiera[i][j]=true;
else
Scacchiera[i][j]=false;
}
}
}
public void riempiFalse()
{
for(int i=0;i<righe;i++)
{
for(int j=0;j<colonne;j++)
{
Scacchiera[i][j]=false;
}
}
}
public void stampa()
{
for(int i=0;i<righe;i++)
{
for(int j=0;j<colonne;j++)
{
System.out.print(Scacchiera[i][j]+"\t");
}
System.out.println();
}
}
}


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 23-12-2008, 15:47:06
Esercizio 16...che ne pensate?
Code:
...

Buona la descrizione di una scacchiera, anche se si poteva descrivere direttamente secondo il "lato" e non per forza tramite la possibilità di avere "righe" e "colonne" di diversa lunghezza .smile.

Per quanto riguarda il metodo richiesto dall'esercizio, invece, il tuo codice si propone di verificare se ci sono due pedine contigue in almeno una riga od una colonna (mentre l'esercizio richiede di verificare se ci sono due pedine in due posizioni qualsiasi diverse in almeno una stessa riga o colonna), tuttavia non fa nemmeno quello che tu hai erroneamente inteso.

Considera il codice:
Code:
if((S.contienePedina(r,c))&&(S.contienePedina(r+1,c+1)))
Esso verifica se ci sono due pedine contigue lungo una qualsiasi diagonale TopLeft-BottomRight, ma per il tipo di limite superiore nella dimensione dell'array, e cioè:
Code:
r<S.getRighe()
e
Code:
c<S.getColonne()
tale verifica genererà una java.lang.ArrayIndexOutOfBoundsException (http://java.sun.com/javase/6/docs/api/java/lang/ArrayIndexOutOfBoundsException.html) all'interno di Scacchiera.contienePedina(int,int) quando si verificherà la prima tra le due condizioni r==S.getRighe()-1 o c==S.getColonne()-1.

Una soluzione molto più semplice consiste nel fare due controlli, uno per ciascuna riga e uno per ciascuna colonna, contando il numero di pedine in tale riga e tale colonna, e fermarsi e restituire true non appena si trova un conteggio maggiore o uguale a 2, o restituire false quando si esce fuori dal blocco dei controlli.

Questo codice fa ciò che richiede l'esercizio:
Code:
public static boolean pedineCorretto (Scacchiera S)
{
int maxR = S.getRighe ();
int maxC = S.getColonne ();

//controlla le singole righe
for (int r = 0; r < maxR; r++)
{
int totale = 0;
for (int c = 0; c < maxC; c++)
if (S.contienePedina (r, c)) totale++;

if (totale >= 2) return true;
}

//controlla le singole colonne
for (int r = 0; r < maxR; r++)
{
int totale = 0;
for (int c = 0; c < maxC; c++)
if (S.contienePedina (r, c)) totale++;

if (totale >= 2) return true;
}

//uscendo da entrambi i cicli, sicuramente non ci sono due pedine su una stessa riga o colonna
return false;
}
Notare che si potrebbe restituire true non appena si verifica "totale == 2" ottimizzando il codice.

Ciao .ciaociao.


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 23-12-2008, 16:28:31
Per quanto riguarda la scacchiera si, lo so, l'ho lasciato così solo per essermi più chiaro  .sisi
L'esercizio 16 chiede proprio di sapere se ci sono due pedine contigue comunque potresti spiegarmi meglio l'errore?grazie  .smile
inoltre non ho capito bene il tuo codice, cioè non capisco come fai a controllare sia le singole righe che le singole colonne ripetendo in pratica due volte gli stessi cicli for
Code:
//controlla le singole righe
for (int r = 0; r < maxR; r++)
{
int totale = 0;
for (int c = 0; c < maxC; c++)
if (S.contienePedina (r, c)) totale++;

if (totale >= 2) return true;
}

//controlla le singole colonne
for (int r = 0; r < maxR; r++)
{
int totale = 0;
for (int c = 0; c < maxC; c++)
if (S.contienePedina (r, c)) totale++;

if (totale >= 2) return true;
}



Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 23-12-2008, 18:03:58
Per quanto riguarda la scacchiera si, lo so, l'ho lasciato così solo per essermi più chiaro  .sisi
L'esercizio 16 chiede proprio di sapere se ci sono due pedine contigue comunque potresti spiegarmi meglio l'errore?grazie  .smile
Certo, considerando che l'array è multidimensionale (bidimensionale per essere precisi), nel tuo caso aggiungendo +1 sia alla riga sia alla colonna, fai il controllo tra coppie di elementi contigui sulla diagonale che li contiene (cioè controlli l'elemento corrente e l'elemento in basso a destra rispetto ad esso). E in più, l'esercizio 16 chiede di sapere se ci sono almeno due pedine su una stessa riga o una stessa colonna (quindi non necessariamente contigue e non necessariamente 2, ma almeno 2), secondo quanto tu stessa hai postato:
Quote
/* [...] Scrivere un metodo che prenda come parametro formale una scacchiera S, e restituisca in output un boolean che
indichi se la scacchiera contiene almeno due pedine sulla stessa riga o sulla stessa colonna [...]*/
.arrossisco

Quote
inoltre non ho capito bene il tuo codice, cioè non capisco come fai a controllare sia le singole righe che le singole colonne ripetendo in pratica due volte gli stessi cicli for
Mea culpa  :pray! Lì ho sbagliato io  :boh. In effetti il secondo doppio ciclo annidato dovrebbe avere scambiate le parentesi che contengono inizializzazione, condizione e incremento dei rispettivi contatori. Cioè dovevo mettere così:
Code:
//controlla le singole colonne (stavolta giusto :-P)
for (int c = 0; c < maxC r++)
{
int totale = 0;
for (int r = 0; r < maxR; c++)
if (S.contienePedina (r, c)) totale++;

if (totale >= 2) return true;
}
Dannato copia-e-incolla :[Emoticon] PC Asd:...


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 23-12-2008, 19:10:43
Salve a tutti..
volevo un chiarimento relativo al secondo esercizio,
 in particolare il dubbio mi sorge nella parte relativa al trovare indice della prima occorenza di un elemento maggiore di A i...se qualcuno puo postare il codice o chiarirmi come fare fare questo passaggio... grazie
Inoltre volevo sapere se qualcuno mi puo spiegare come si fa il return di array... :-)|

Auguri di buon natale!


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 24-12-2008, 09:58:53
aaaaaaah si ho capito...cavolo non va bene che non ci avevo fatto caso...ora risistemo il tutto  .smile
per quanto riguarda questo..
Quote
E in più, l'esercizio 16 chiede di sapere se ci sono almeno due pedine su una stessa riga o una stessa colonna (quindi non necessariamente contigue e non necessariamente 2, ma almeno 2), secondo quanto tu stessa hai postato:
me la prendo anch'io con il copia e incolla  :yoh il giusto testo dell'esercizio 16 è questo:
/*Una scacchiera S di dimensione 100x100 viene rappresentata mediante un array bidimensionale di
boolean in cui ogni posizione o è vuota (false) oppure contiene una pedina (true). Scrivere un
metodo che prenda come parametro formale una scacchiera S, e restituisca in output un boolean che
indichi se la scacchiera contiene almeno due pedine contigue orizzontali o verticali*/
Per il resto tutto chiaro immaginavo fosse stata una distrazione  :-K
grazie dell'aiuto  .arrossisco
Per giovy89...non vorrei postare il mio codice prima che ci spuntano 2000 suggerimenti sbagliati come l'utlima volta  .smile
ma
Quote
Inoltre volevo sapere se qualcuno mi puo spiegare come si fa il return di array...
il return di array si fa allo stesso modo di tutti gli altri tipi..ad esempio all'interno del metodo puoi istanziare un nuovo array B ad esempio,lo inizializzi con i valori richiesti nell'esercizio e alla fine fai return B;


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 24-12-2008, 10:55:44
Ti prego dimmi che è giusto adesso... :pray :pray :pray
(nel main ho usato una scacchiera 3x3 per comodità perchè 100x100 era enorme  :[Emoticon] Asd:)
Code:
/*Una scacchiera S di dimensione 100x100 viene rappresentata mediante un array bidimensionale di
boolean in cui ogni posizione o è vuota (false) oppure contiene una pedina (true). Scrivere un
metodo che prenda come parametro formale una scacchiera S, e restituisca in output un boolean che
indichi se la scacchiera contiene almeno due pedine contigue orizzontali o verticali*/
public class Es16
{
public static boolean pedine(Scacchiera S)
{
for(int r=0;r<S.getRighe();r++)
{
for(int c=0;c<S.getColonne()-1;c++)
{
if((S.contienePedina(r,c))&&(S.contienePedina(r,c+1)))
{
System.out.println("Ci sono due pedine contigue sulla riga "+(r+1));
return true;
}
}
}
for(int c=0;c<S.getColonne();c++)
{
for(int r=0;r<S.getRighe()-1;r++)
{
if((S.contienePedina(r,c))&&(S.contienePedina(r+1,c)))
{
System.out.println("Ci sono due pedine contigue sulla colonna "+(c+1));
return true;
}
}
}
System.out.println("Non ci sono pedine contigue");
return false;
}
public static void main (String[] args)
{
Scacchiera sc=new Scacchiera(3);
sc.riempiCasuale();
sc.stampa();
boolean b=pedine(sc);
System.out.println(b);
sc.riempiFalse();
sc.stampa();
b=pedine(sc);
System.out.println(b);
}
}
class Scacchiera
{
private boolean [][] Scacchiera;
private int righe;
private int colonne;
public Scacchiera(int dimensione)
{
righe=dimensione;
colonne=dimensione;
Scacchiera=new boolean [righe][colonne];
}
public boolean contienePedina(int riga,int colonna)
{
if (Scacchiera[riga][colonna]==true)
return true;
else
return false;
}
public int getRighe()
{
return righe;
}
public int getColonne()
{
return colonne;
}
public void riempiCasuale()
{
for(int i=0;i<righe;i++)
{
for(int j=0;j<colonne;j++)
{
if((int)(Math.random()*2)==0)
Scacchiera[i][j]=true;
else
Scacchiera[i][j]=false;
}
}
}
public void riempiFalse()
{
for(int i=0;i<righe;i++)
{
for(int j=0;j<colonne;j++)
{
Scacchiera[i][j]=false;
}
}
}
public void stampa()
{
for(int i=0;i<righe;i++)
{
for(int j=0;j<colonne;j++)
{
System.out.print(Scacchiera[i][j]+"\t");
}
System.out.println();
}
}
}


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 24-12-2008, 11:32:44
Scusatemi sono un'ossessione  .doh .doh
Dov'è il probl in questo esercizio?(la struttura è stata fatta in classe insieme al prof. Cincotti...)
Code:
/*Dato un array frastagliato bidimensionale di stringhe restituire true se
c'è una stringa con un carattere ripetuto almeno 2 volte altrimenti false*/

public class Es18
{
public static boolean ripetizioneCarattere(String[][] A)
{
for(int i=0;i<A.length;i++)
{
for(int j=0;j<A[j].length;j++)
{
//così lavoriamo su A[i][j]
//per ogni carattere della stringa bisogna controllare tutti quelli successivi
//altre 2 iterazioni
for(int k=0;k<A[i][j].length()-1;k++)
{
for(int l=k+1;l<A[i][j].length();l++)
{
if(A[i][j].charAt(k)==A[i][j].charAt(l))
return true;
}
}
}
}
return false;
}


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 24-12-2008, 15:45:37
Ti prego dimmi che è giusto adesso... :pray :pray :pray
Visto che mi preghi, allora ti dico che è giusto  .sisi.
Scherzo, è giusto davvero :-OK.

Scusatemi sono un'ossessione  .doh .doh
Dov'è il probl in questo esercizio?(la struttura è stata fatta in classe insieme al prof. Cincotti...)
Code:
/*Dato un array frastagliato bidimensionale di stringhe restituire true se
c'è una stringa con un carattere ripetuto almeno 2 volte altrimenti false*/
[...]
Il problema è nella riga che contiene il secondo for, ovvero
Code:
for(int j=0;j<A[j].length;j++)
va sostituito con
Code:
for(int j=0;j<A[i].length;j++)
Tipico errore di battitura che ti fa impazzire per ore perché è troppo incastrato nel codice per riconoscerlo a prima vista .wink.

Ciao .ciaociao.


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 26-12-2008, 12:02:08
aaaaaaaaah che sollievo  .smile grazie 1000 per la disponibilità  .arrossisco


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 29-12-2008, 14:48:39
Non la supererò mai sta provaaaaaaaa....help!!

Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe e
restituisca un boolean che indichi se esiste una coppia di stringhe in S in cui occorre lo stesso
carattere. Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True

Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti)


Title: Re:esercizi seconda prova in itinere
Post by: rox on 29-12-2008, 15:36:38
Si consideri il seguente schema lineare: +++---+++---+++---+++---···.
Scrivere un metodo che prenda come parametro formale una stringa S e restituisca in output la
stringa ottenuta da S sovrapponendo il precedente schema e concatenando i caratteri corrispondenti
al simbolo ‘+’.      Es.: S=”abcdefghilmno”, Output=”abcghio”.
ho provato a risolverlo ma non so se è giusto :
import javax.swing.*;
public class es15{
   private stringa s;
   public es15( stringa s)
   {
      this.s=s;
   }
   public String getNuovaStringa()
   {
      String nuova=" ";
      
      for (int i=0;i<s.length();i=i+3)
      {
          nuova+=s+s[i+1]+s[+2];
      }
      return nuova;
   }
}
class stringa
   {
private String s;
      public stringa(String s)
      {
         this.s=JOptionPane.showInputDialog
         ("immetti la Stringa");
         s.toCharArray();
      }
   }



il compilatore mi da questi errori:

es15.java:12: cannot find symbol
symbol  : method length()
location: class stringa
      for (int i=0;i<s.length();i=i+3)
                      ^
es15.java:14: array required, but stringa found
          nuova+=s+s[i+1]+s[+2];
                  ^
es15.java:14: array required, but stringa found
          nuova+=s+s[i+1]+s[+2];
                       ^
es15.java:14: array required, but stringa found
          nuova+=s+s[i+1]+s[+2];
                              ^
4 errors
grazie in anticipo per l'aiuto!


Title: Re:esercizi seconda prova in itinere
Post by: Gam on 29-12-2008, 18:04:17
Ciao, cmq io nn mi complicherei la vita a fare tutti questi this e classi; per vedere se è giusto mi puoi postare pure il main?!? mi secca scriverlo, cmq io ho risolto il problema facendo un array di char che contiene lo schema +++---ecc... in questo modo è molto semplice.
Almeno per come sono riuscito a risolverlo io :boh
Se scrivi il main sarò lieto di aiutarti :-ciao


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 29-12-2008, 18:25:31
il compilatore mi da questi errori:

Code:
es15.java:12: cannot find symbol
symbol  : method length()
location: class stringa
for (int i=0;i<s.length();i=i+3)
                ^
es15.java:14: array required, but stringa found
nuova+=s[i]+s[i+1]+s[+2];
         ^
es15.java:14: array required, but stringa found
nuova+=s[i]+s[i+1]+s[+2];
              ^
es15.java:14: array required, but stringa found
nuova+=s[i]+s[i+1]+s[+2];
                     ^
4 errors
Tag FONT aggiunto per leggibilità!
Allora, innanzitutto il procedimento da te adottato è corretto e funziona bene su stringhe di qualsiasi dimensione.
I problemi di compilazione si verificano perché hai fatto confusione tra la classe java.lang.String (http://java.sun.com/javase/6/docs/api/java/lang/String.html) (che rappresenterebbe s in riga 12), la tua personale classe stringa (che rappresenta la definizione di s in riga 3), e array di char (che rappresenta s nel corpo del ciclo for in riga 14.

Bisogna essere coerenti con i tipi di dati usati. Devi scegliere uno solo di questi tre tipi e trattare s come tale tipo di oggetto Java coerentemente.

Inoltre, un altro piccolo errore, sempre in riga 14, alla fine ti manca una i alla sinistra del +2.

Infine, un consiglio veramente veramente appassionato perché coinvolge la leggibilità e la correttezza di ciò che il forum scrive in output alla visualizzazione dei nostri messaggi: usa sempre il tag FONT per rappresentare del codice, perché, anche nel tuo caso, si è persa una s[i] del rigo 14 (guarda tu stesso) :-)|.

Ciao ciao .ciaociao.


Title: Re:esercizi seconda prova in itinere
Post by: Gam on 30-12-2008, 12:07:10
Ciao, volevo chiedervi se per cortesia mi potevate postare la soluzione dell'esercizio 6 tra quelli proposti dal prof.
Grazie.  .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 30-12-2008, 13:38:33
allora qualcuno mi da una mano??almeno qualche indicazione....


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 30-12-2008, 20:07:10
siccome non avrò tempo fino a gennaio inoltrato ti indico una possibile soluzione a livello proprio logico (senza codice)
Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe e
restituisca un boolean che indichi se esiste una coppia di stringhe in S in cui occorre lo stesso
carattere. Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True
tramite il String.charAt(int) (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#charAt(int)) confronti (ad esempio) il primo caratteri con tutti gli altri, poi il secondo con tutti gli altri (dentro una serie di cicli)...etc, mettendo un boolean (inizializzato come false) a true in caso trovi coincidenze. Dovrebbe funzionare.

Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti)
intanto c'è da dire che per gli array frastagliati, non avendo dimensioni fissa, conviene sempre mettere un bel IF per sapere di volta in volta quale sia la stringa "maggiore" (o più lunga che dir si voglia) e così sapersi regolare nel ciclo. Dopodichè, a quanto ho capito, vuole sapere se ci sono colonne con gli stessi caratteri, e qui ti basta confrontare anche solo i primi di ogni riga (se non sono uguali i primi la stringa non è uguale), se sono uguali passi ai secondi (incrementando di volta in volta il contatore), e così via. Mettici (visto che lo richiede) anche un controllo del tipo if(S.length()==0) continue; else {fai i dovuti controlli} per saltare stringhe mancanti.
Saluti e buono studio buon anno! .ciaociao ^^


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 30-12-2008, 23:29:34
Non la supererò mai sta provaaaaaaaa....help!!

Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe e
restituisca un boolean che indichi se esiste una coppia di stringhe in S in cui occorre lo stesso
carattere. Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True
Code:
public static boolean helpVivynz1 (String [][] S)
{
boolean found = false;

for (int r = 0; r < S.length && !found; r++)
for (int c = 0; c < S [r].length && !found; c++)
for (int k = 0, max = S [r][c].length () && !found; k < max; k++)
{
//cicla per ogni carattere "l" di ogni stringa dell'array bidimensionale S
char l = S [r][c].charAt (k);

//prima di tutto verifica se c'è un carattere uguale ad "l" nelle stringhe
//successiva della riga corrente di S, se ce ne sono
for (j = c + 1; j < S [r].length && !found; j++)
if (S [r][j].indexOf (l) != -1)
found = true;

//poi verifica se c'è un carattere a "l" nelle stringhe di tutte le righe
//successive alla riga corrente, se ce ne sono
if (!found)
for (i = r + 1; i < S.length && !found; i++)
for (j = 0; j < S [i].length && !found; j++)
if (S [i][j].indexOf (l) != -1)
found = true;
}

return found;
}
Si può usare il metodo java.lang.String.indexOf (int) (http://java.sun.com/javase/6/docs/api/java/lang/String.html#indexOf(int)), vero  :boh?
Seriamente, se non fosse così, fammelo sapere che modifico leggermente il codice per non doverlo usare .smile.


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 30-12-2008, 23:44:07
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti)
Code:
    public static boolean helpVivynz2 (String [][] S)
    {
        int max = 0;
        boolean found = false;
       
        //questo ciclo calcola la dimensione massima delle righe di S
        for (int i = 0; i < S.length; i++)
            if (S [i].length > max)
                max = S [i].length;
       
        //per ogni colonna
        for (int c = 0; c < max && !found; c++)
            //per ogni coppia di righe diverse (r1, r2) con r1 < r2
            for (int r1 = 0; r1 < (S.length - 1) && !found; r1++)
                for (int r2 = r1 + 1; r2 < S.length && !found; r2++)
                    //se entrambe le righe r1 ed r2 hanno almeno la colonna 'c'
                    if ((c < S [r1].length && c < S [r2].length)
                        && (S [r1][c].equals (S [r2][c]))) //e le stringhe S[r1][c] e S[r2][c] sono uguali
                            found = true; //allora restituiamo il successo
       
        return found;
    }

EDIT: ho corretto il codice aggiungendo le dichiarazioni per r1 ed r2  :[Emoticon] PC Asd:.


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 31-12-2008, 12:03:03
bho sinceramente non ho idea se si può usare  .huh ma grazie mille per il tuo aiuto!!!!!troppo disponibile  :pray


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 31-12-2008, 12:17:25
ah poi per quanto riguarda il primo ero riuscita a scrivere del codice,sembra funzionare però non saprei se poi ci sono degli errori nascosti  .arrossisco

Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe e
restituisca un boolean che indichi se esiste una coppia di stringhe in S in cui occorre lo stesso
carattere. Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True*/
public class Es30
{
public static boolean occorreStessoCarattere(String[][] S)
{
for(int i=0;i<S.length;i++)
{
for(int j=0;j<S[i].length;j++)
{
for(int l=0;l<S.length;l++)
{
for(int m=0;m<S[l].length;m++)
{
for(int k=0;k<S[i][j].length()-1;k++)
{
for(int w=0;w<S[l][m].length()-1;w++)
{
if((S[i][j].charAt(k)==S[l][m].charAt(w))&&(S[i][j]!=S[l][m]))//il secondo end confronta volontariamente gli indirizzi delle stringhe per verificare che non avvenga il confronto di una stringa con se stessa
return true;
}
}
}
}
}
}
return false;
}
public static void main (String[] args)
{
String[][] s={{"abc"},{"defg","hilmn"},{"op","qrs","tuavz"}};
boolean b=occorreStessoCarattere(s);
System.out.println(b);
}
}


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 31-12-2008, 17:42:29
Salve a tutti,
volevo chiedere se qualcuno può postarmi l'esercizio 3 di quelli proposti dal prof. ?

Mentre ci sono se qualcuno può spiegarmi l'output dell'esempio di questo esercizio?
Grazie a tutti e felice anno nuovo... .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 31-12-2008, 17:43:30
ah poi per quanto riguarda il primo ero riuscita a scrivere del codice,sembra funzionare però non saprei se poi ci sono degli errori nascosti  .arrossisco
No, errori non ce ne sono. Solo si può migliorare per evitare di ciclare anche sui singoli caratteri di una stessa stringa (benché grazie alla seconda condizione sicuramente non restituisci true);
 :-ciao


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 31-12-2008, 17:51:26
Mi ero perso questo passaggio del tuo post, caro Fr3d3R!K
Mettici (visto che lo richiede) anche un controllo del tipo if(S.equals("")) continue; else {fai i dovuti controlli} per saltare stringhe mancanti.
Tuttavia, tale codice non può funzionare in generale :nono, poiché S dovrebbe essere una stringa già assegnata in qualche modo scorrendo i due array, e se scorro fuori da un array tentando di leggere una posizione non esistente, sollevo una java.lang.ArrayIndexOutOfBoundException (http://java.sun.com/javase/6/docs/api/java/lang/ArrayIndexOutOfBoundsException.html) :boh
 .coolio


Title: Re:esercizi seconda prova in itinere
Post by: Alex_47 on 31-12-2008, 17:55:16
Salve a tutti , vorrei un aiuto riguardo questo esercizio della seconda prova itinere ,praticamente non saprei cosa fare XD...

ecco qua la consegna...

Esercizio 8
Scrivere un metodo che prenda come parametro formale un vettore di stringhe e restituisca in output
un vettore di interi contenente in ogni locazione, rispettivamente, la somma dei codici ASCII
maggiori di 32 dei caratteri nella corrispondente stringa in input.

qualcuno mi saprebbe aiutare?


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 31-12-2008, 18:01:38
Mi ero perso questo passaggio del tuo post, caro Fr3d3R!K
Mettici (visto che lo richiede) anche un controllo del tipo if(S.equals("")) continue; else {fai i dovuti controlli} per saltare stringhe mancanti.
Tuttavia, tale codice non può funzionare in generale :nono, poiché S dovrebbe essere una stringa già assegnata in qualche modo scorrendo i due array, e se scorro fuori da un array tentando di leggere una posizione non esistente, sollevo una java.lang.ArrayIndexOutOfBoundException (http://java.sun.com/javase/6/docs/api/java/lang/ArrayIndexOutOfBoundsException.html) :boh
 .coolio
è probabile che io non abbia afferrato in pieno il tuo discorso, però può anche darsi di sì, per cui io intanto rispondo  .timido: io non mi sono riferito all'array, ma alla stringa singola, in quanto se era vuota andava saltata ma forse (mi è venuto in mente ora) viene saltata automaticamente ed io ho detto una ca***ta sia prima che ora...
L'errore invece è nel S.equals("") quando invece andrebbe S.length()==0, sbaglio reverse? .whistling


Title: Re:esercizi seconda prova in itinere
Post by: Alex_47 on 31-12-2008, 18:04:42
Salve a tutti , vorrei un aiuto riguardo questo esercizio della seconda prova itinere ,praticamente non saprei cosa fare XD...

ecco qua la consegna...

Esercizio 8
Scrivere un metodo che prenda come parametro formale un vettore di stringhe e restituisca in output
un vettore di interi contenente in ogni locazione, rispettivamente, la somma dei codici ASCII
maggiori di 32 dei caratteri nella corrispondente stringa in input.

qualcuno mi saprebbe aiutare?


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 31-12-2008, 18:17:34
Puoi provare, prendendo ogni carattere della stringa corrispondente, memorizzarlo in una variabile temporanea "castato" (cioè (int)(carattere)) ad int (così ottieni il valore numerico del carattere che corrisponde all'ASCII), e poi se è maggiore di 32 lo sommi alla rispettiva locazione dell'array di interi...


Title: Re:esercizi seconda prova in itinere
Post by: Gam on 31-12-2008, 19:27:41
Ciao volevo avere un chiarimento su questo esercizio. Il dubbio era che facendo caso che la stringa non abbia numeri o simboli ma solo lettere è scontato guardando la tabella dei codici ASCII che le lettere siano maggiori di 32.
Quindi significa che la stringa che il metodo prende in considerazione conterrà anche dei numeri e simboli?


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 01-01-2009, 17:11:45
Code:
public class esercizio7
{
public static int[] CodiciCaratteri(String[] S)
{
int i;
int[] somma=new int[S.length];

for(i=0;i<somma.length;i++) //inizializzazione array di int
somma[i]=0;

for(i=0;i<S.length;i++) //ciclo array di stringhe
for(int j=0;j<S[i].length();j++) //ciclo delle singole stringhe
{
int temp=(int)(S[i].charAt(j));
if(temp>32)
somma[i]+=temp;
}
return somma;
}
public static void main(String[] args)
{
String[] S={"cia ","ti","piace","il","java?"};
int[] somma=CodiciCaratteri(S);
for(int i=0;i<somma.length;i++)
System.out.print(somma[i]+" ");
System.out.println();
}
}
io ho scritto lettere ma le stringhe possono contenere tutti i simboli previsti dal codice ascii.


Title: Re:esercizi seconda prova in itinere
Post by: Alex_47 on 01-01-2009, 22:12:32
Avrei un problema con l'esercizio 13 , praticamente mi fa Bound of exception , ora vi mostro il mio codice...

la consegna è questa
Esercizio 13
Scrivere un metodo che prenda come parametro formale un array di stringhe A e restituisca in
output una stringa ottenuta concatenando il penultimo e l’ultimo carattere occorrenti nella prima e
nell’ultima stringa in A.
N.B.: Si supponga che A sia non vuoto e che tutte le stringhe in A abbiano più di due caratteri.


import java.lang.*;
import java.math.*;

public class esercizio13
{

   
   public static String metodo(String [] A)
   {
      int i;
      int M;
      int N;
      String G="";
      
      char c;
      
      M=A[0].length();
      N=A.length;
      
      G =G+ A[0].charAt(M);
      G =G+ A[0].charAt(M-1);
      
      M=A[N].length();
      
      G =G+ A[N].charAt(M);
      G =G+ A[N].charAt(M-1);
      
      
      return G;
   
   }




   public static void main(String args[])
   {
      String [] A = {"ciaodfdffdssddd","fidfsdsfdfdfsrltol","deathdfsfdsdfdsnote","flaridsfdsfdfsdsfogme"};
      
      System.out.println(metodo(A));
      
      
      
    }
   
   
}

praticamente me lo compila non dandomi errori , ma poi non me lo esegue , qual'è il problema??


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 01-01-2009, 23:31:06
Avrei un problema con l'esercizio 13 , praticamente mi fa Bound of exception , ora vi mostro il mio codice...
[...]
praticamente me lo compila non dandomi errori , ma poi non me lo esegue , qual'è il problema??
Prima di dirti dove sta l'errore, ti vorrei suggerire che la stessa JVM quando ci sono errori ti indica esattamente dove sono, così magari impari anche ad analizzare riga per riga l'output dettagliato dall'esecutore java .smile.

Il tuo codice produce il seguente errore:
Code:
>java esercizio13
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 15
        at java.lang.String.charAt(Unknown Source)
        at esercizio13.metodo(esercizio13.java:20)
        at esercizio13.main(esercizio13.java:40)
Questo output mi dice che il metodo main della classe esercizio13 ha provocato un'eccezione nella riga 40 del file esercizio13.java, che per il tuo codice consiste nella riga
Code:
System.out.println(metodo(A));
Ora se leggi la riga appena sopra nell'output si vede che il metodo metodo della classe esercizio13 ha provocato una eccezione (che poi è quella che è stata fatta avanzare nello stack delle chiamate poiché non gestita precedentemente) in riga 20 del file esercizio13.java, che per il tuo codice consiste nella riga
Code:
G =G+ A[0].charAt(M);
A sua volta vedi che l'eccezione è stata sollevata (thrown) esattamente dal metodo charAt della classe String e l'eccezione è java.lang.StringIndexOutOfBoundsException (http://java.sun.com/javase/6/docs/api/java/lang/StringIndexOutOfBoundsException.html). Leggendo tale javadoc leggiamo che tale eccezione è lanciata dai metodi di String per indicare che un indice è o negativo oppure che è maggiore oppure che è uguale alla dimensione della stringa. Per alcuni metodi come quello charAt, questa eccezione è lanciata quando l'indice è uguale alla dimensione della stringa.

È proprio questa ultima riga che da una risposta esauriente alla tua domanda.

Con questo non voglio dire che usare il forum per chiedere spiegazioni/suggerimenti/chiarimenti sia sbagliato, solo che prima di farlo è bene usare i mezzi minimi che ciascuno ha sicuramente a disposizione, cioè la lettura all'indietro dello Stack delle chiamate fino a giungere alla eccezione od errore e a chi l'ha generato, documentandosi opportunamente.
Capito quindi l'errore .smile?


Title: Re:esercizi seconda prova in itinere
Post by: TheSpecialOne on 02-01-2009, 12:50:27
Problema con un esercizio, anzi con 2!

1)  Scrivere un metodo, che presi 2 array A e B di byte, restituisca l'elemento che occorre piu volte nei 2 array (anche in uno solo)

2)  Scrivere un metodo, che preso un array bidimensionale frastagliato di Stringhe S, restituisca un boolean che indichi se esiste una riga che contiene 2 stringhe che terminano con la stessa coppia di caratteri

Su entrambi ho il problema di non riuscire ad isolare un elemento, per poterlo confrontare con gli altri...
Nel secondo riesco ad estrarre gli ultimi 2 caratteri, però poi non so come confrontarli con gli altri delle stringhe della riga

Spero di non essere stato troppo insistente, e che qualche anima pia possa darmi una mano!


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 02-01-2009, 14:55:15
reversengineer è il migliore per aiutare ihihi  :[Emoticon] Asd:
si può usare il metodo replace della classe String???cioè è consentito?


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 02-01-2009, 15:59:56
reversengineer è il migliore per aiutare ihihi  :[Emoticon] Asd:
si può usare il metodo replace della classe String???cioè è consentito?
tutti i metodi sono ammessi salvo diversa specifica (come ad esempio nell'esercizio del dizionario vengono vietati i metodi di ordinamento). In un esercizio della seconda prova, per portare un altro esempio, veniva vietato l'uso di array ausiliari. Dipende tutto dal testo ma il mio consiglio (generico) è sempre uno: se non è specificato, meglio chiedere, così non si sbaglia sicuro! .wink
@TheSpecialOne: in che senso non riesci a isolare? quando sei dentro il ciclo memorizzi il valore in una variabile temporanea (ad esempio). Poi, per quanto riguarda l'esercizio 1 (e anche il 2 rivedendolo) sono stati postati sorgenti di esercizi quasi uguali (la procedura è sempre la stessa).
1. tieni fisso un elemento con un indice, e con l'altro scorri il primo (e successivamente il secondo) array. Mano a mano che trovi elementi che occorrono più volte li memorizzi nella variabile MAX. Finito il primo controllo incrementi il primo indice e torni a ricontrollare. Ovviamente devi prevedere una forma di controllo "aggiuntiva" (in realtà è quella che deve avvenire prima di tutte) perchè non è detto che i due array abbiano la stessa dimensione, e, senza, c'è la probabilità di generare un ArrayIndexOutOfBoundsExceptions (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ArrayIndexOutOfBoundsException.html). Ma l'idea di principio è questa.
2. In questo dopo tutti i for di rito, basta solo usare il metodo String.charAt(int) (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#charAt(int)) sugli ultimi due caratteri (guarda gli altri sorgenti per esempi), e ritornare true in caso di successo (o false nel caso contrario).
Spero sia tutto chiaro e di essere stato d'aiuto.
Saluti e buon 2009! .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 02-01-2009, 16:55:42
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti)
[CUT]
scusa reverse, non vorrei "rovinarti la reputazione" :[Emoticon] Asd: però ho notato una cosa che mi ha incuriosito parecchio nel tuo codice (oltre alla mancata dichiarazione di r1 ed r2 ma quello immagino sia una semplice dimenticanza .whistling ): ho provato il tuo sorgente con questo main:
Code:
public static void main(String[] args)
{
String[][] S={{"sinhg","","dihjh"},{"",""},{"ca"},{"ciao","fdhd","dshgdsh","gsdg"}};
for(int i=0;i<S.length;i++) //questo ciclo serve solo per stampare l'array di input
{
for(int j=0;j<S[i].length;j++) //questo ciclo serve solo per stampare l'array di input
System.out.print(S[i][j]+" ");
System.out.println();
}
System.out.println("---------------------"); //questo serve per separare gli elementi della matrice dal flag
boolean flag=helpVivynz2(S);
System.out.println(flag);
}
e come risultato, come puoi vedere qui sotto, esce TRUE mentre dovrebbe uscire FALSE. Errori o cose simili però io non li ho notati, tu che dici? perchè è strana come cosa...
Code:
>javac helpVivynz2.java
>Exit code: 0
>java helpVivynz2
sinhg  dihjh
 
ca
ciao fdhd dshgdsh gsdg
---------------------
true
>Exit code: 0
Saluti!


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 02-01-2009, 17:01:10
mi devo ricredere? .smile .smile
comunque è utile l'aiuto di tutti  .wink
si può sistemare questo codice per fargli fare quello che effettivamente dovrebbe??????

Code:
/*Scrivere un metodo che prenda in input una matrice A di long ed un intero m, e restituisca un
boolean che indichi se esistono due righe di A che condividono almeno m elementi (cioè devono
essere presenti in entrambe le righe, anche in posizioni differenti).
N.B.: Si supponga che ogni singola riga di A contenga elementi distinti*/
public class Es39
{
public static boolean mElementi(long[][] A,int m)
{
int cont=0; //conta il numero di elementi uguali
long temp=0;
for(int r=0;r<A.length;r++)
{
cont=0;
for(int c=0;c<A[0].length;c++)
for(int r1=r+1;r1<A.length;r1++)
{
for(int c1=0;c1<A[0].length;c1++)
if(A[r][c]==A[r1][c1])
{
if(temp!=A[r][c]) //per evitare che lo stesso valore venga contato più volte
cont++;
temp=A[r][c];
}
if(cont>=m)
return true;
}
}
return false;
}
}


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 02-01-2009, 20:25:31
scusa reverse, non vorrei "rovinarti la reputazione"
Non ti preoccupare, ho subito trattamenti molto peggiori del tuo in precedenti esperienze di forum, se proprio volessimo considerare il tuo intervento un trattamento negativo  .smile.

Quote
:[Emoticon] Asd: però ho notato una cosa che mi ha incuriosito parecchio nel tuo codice (oltre alla mancata dichiarazione di r1 ed r2 ma quello immagino sia una semplice dimenticanza .whistling )
Ammetto di non aver compilato la classe prima di postare :pray. r1 ed r2 andavano opportunamente dichiarate (magari nel rispettivo ciclo).

Quote
: ho provato il tuo sorgente con questo main:
Code:
public static void main(String[] args)
{
String[][] S={{"sinhg","","dihjh"},{"",""},{"ca"},{"ciao","fdhd","dshgdsh","gsdg"}};
for(int i=0;i<S.length;i++) //questo ciclo serve solo per stampare l'array di input
{
for(int j=0;j<S[i].length;j++) //questo ciclo serve solo per stampare l'array di input
System.out.print(S[i][j]+" ");
System.out.println();
}
System.out.println("---------------------"); //questo serve per separare gli elementi della matrice dal flag
boolean flag=helpVivynz2(S);
System.out.println(flag);
}
e come risultato, come puoi vedere qui sotto, esce TRUE mentre dovrebbe uscire FALSE.
Errato: secondo la definizione del problema, bisogna restituire true se esistono almeno due stringhe uguali in una stessa colonna, e nel tuo esempio una tale coppia è formata dalle stringhe vuote della colonna 1 (seconda colonna)

In realtà, questa tua osservazione chiarisce cosa non avevi capito quando veniva richiesto di "saltare le eventuali stringhe mancanti" nel testo dell'esercizio.
Stringhe mancanti è abbastanza sicuramente riferito a stringhe che in una data colonna non ci sono, vale a dire che bisogna saltare di controllare le stringhe che in una certa riga non sono presenti a posizioni fuori dalla dimensione dell'array.

Ciao ciao  .ciaociao.


Title: Re:esercizi seconda prova in itinere
Post by: rox on 03-01-2009, 11:10:32
ragazzi io ho provato a fare l'esercizio n°1 ma non riesco a fermarmi non appena trovo la prima occorrenza.questo è il mio codice:
Code:
/*Esercizio 1
Scrivere un metodo che prenda come parametri formali un array di interi A e restituisca in output un
array di interi B in cui la posizione i-esima contiene l’indice della prima occorrenza di A[i] nel
sottovettore A[ i+1, …, A.length –1 ], oppure –1 se questa non esiste. Si veda l’esempio:
es.: A = [ 3, 2, 4, 3, 4, 3], B = [ 3, –1, 4, 5, –1, –1 ].*/
public class es1{
private int[]a;
private int x;
public es1(int[]a)
{
this.a=a;

}
public void getArray()
{
for (int i=0;i<a.length;i++)
{

for(int j=i+1;j<a.length-1;j++)
{


if(a[i]!=a[j])
{
x=-1;

}else  this.x=j;
}

System.out.print(x);

}
}
}
//per richiamare il metodo che ho fatto:
public class esrcizio1{
public static void main(String args[]){
int []a={ 3,2,4,3,4,3};

es1 b=new es1(a);
b.getArray();
}
}
qualcuno mi potrebbe dire cosa devo cambiare?è da ieri che ci provo ma non riesco a trovare la soluzione.cerfcate di aiutarmi il più presto possibile perchè se riesco a capire come si fa almeno credo che poi sarò in grado di fare gli altri esercizi sulle stringhe!grazie in anticipo dell'aiuto.


Title: Re:esercizi seconda prova in itinere
Post by: TheSpecialOne on 03-01-2009, 12:38:38
salve a tutti, mi scuso anticipatamente per il disturbo  .whistling
Stamattina, svolgendo per l'ennesima volta un esercizio
Code:
Scrivere un metodo che prenda in input un array bidimensionale frastagliato S di stringhe, e
restituisca un array bidimensionale S’ ottenuto da S eliminando le vocali ‘e’, ‘o’.
mi sono accorto di un grande problema, cioè della dimensione degli array frastagliati. Se cambio la dimensione del mio array per testare il metodo, esce dall'array, e di conseguenza mi dà errore.

Ora posto il codice che ho fatto, anche per permettervi di capire meglio il problema di fronte al quale mi trovo, che nello specifico si trova sul for della j.
Inserendo 
Code:
j<S[i].length
esce dall'array, in quanto nell'esempio i è uguale a 2, mentre j=3.
Come posso ovviare a questo problema???

Ecco il main:
Code:
public static void main (String [] args)
{
String [][] S= {{"MAMMA","INTER","LECCE","AIUOLA"},
                        {"MAN","OASIS"},
                        {"AEREO"}};
String [][] SS= elimina (S);      
}

Ed ecco il metodo:
Code:
private static String [][] elimina (String [][] S)
{
String [][] T= new String [S.length][S.length];
String str="";
for (int i=0;i<S.length;i++)
{
for (int j=0;j<S[i].length;j++)
{
for (int h=0;h<S[i][j].length();h++)
{
if (S[i][j].charAt(h) != 'E' && S[i][j].charAt(h) != 'O')
{
str=str+S[i][j].charAt(h);
T[i][j]=str;
}
}
str="";
}
}
return T;
}


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 03-01-2009, 12:47:28
ragazzi io ho provato a fare l'esercizio n°1 ma non riesco a fermarmi non appena trovo la prima occorrenza.questo è il mio codice: [CUT]
bè, intanto:
1. il metodo non è void perchè (come dice il testo) deve tornare qualcosa (in questo caso un array di interi B).
2. Il metodo ti conviene metterlo static e richiamarlo dal main con la sintassi B=getArray(A);.
3. In questo caso quel costruttore è inutile, come anche la variabile x (cosa rappresenta this.x?), nel ciclo interno alla "j" ti bastava la condizione
Code:
if(a[i]==a[j])
{
     B[i]=j;
     j=A.length-1; //per uscire dal ciclo ed evitare di sovrapporre gli indici nella stessa locazione;
}
con un "break" appena fuori dal ciclo di j. Oppure fai come mistero lupo con due metodi separati (vedi la prima pagina).
Per chiarimenti ecco il mio sorgente (funzionante):
Code:
public class esercizio1
{
public static int[] Occorrenza(int[] A)
{
int[] B=new int[A.length];
for(int k=0;k<B.length;k++){B[k]=-1;}
for(int i=0; i<A.length;i++)
{
while(true)
{
for(int j=i+1;j<A.length;j++)
{
if(A[i]==A[j])
{
B[i]=j;
j=A.length-1;
}
}
break;
}
}
return B;
}
public static void main (String[] args)
{
int[] A={3,2,4,3,4,3};
int[] B=Occorrenza(A);
for(int i=0;i<B.length;i++)
{
System.out.print(B[i]+"  ");
}
System.out.println();
}
}
.ciaociao
@SpecialOne: guarda questo (http://forum.sdai.unict.it/index.php?topic=630.msg4307#msg4307) post, reverse ha già "risolto" il problema della dimensione degli array frastagliati in un altro esercizio...
@Vivynz: hai provato nei cicli delle colonne a sostituire A[0].length con (rispettivamente) A[r].length ed A[r1].length? .whistling


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 03-01-2009, 15:01:46
bè si ma l'array non è frastagliato quindi non risolve il problema...praticamente non so come fare a confrontare le righe solamente a 2 a 2 perchè in questo modo il metodo fa il confronto di ogni riga con tutte quelle successive...


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 03-01-2009, 16:12:29
bè si ma l'array non è frastagliato quindi non risolve il problema...praticamente non so come fare a confrontare le righe solamente a 2 a 2 perchè in questo modo il metodo fa il confronto di ogni riga con tutte quelle successive...
non c'entra il fatto che l'array non sia frastagliato, il testo dice che ci devono essere m elementi in comune tra due righe (non c'è scritto che devono essere contigue). Quindi, supposto m=2, devo cercare due righe che hanno 2 elementi in comune. Quindi (nel sorgente qui sotto ho fatto l'esempio con 3):
Code:
public class esercizio10
{
public static boolean mElementi(long[][] A,int m)
{
int cont=0; //conta il numero di elementi uguali
long temp=0;
for(int r=0;r<A.length;r++)
{
cont=0;
for(int c=0;c<A[r].length;c++)
for(int r1=r+1;r1<A.length;r1++)
{
for(int c1=0;c1<A[r1].length;c1++)
                                        {
if(A[r][c]==A[r1][c1])
{
if(temp!=A[r][c]) //per evitare che lo stesso valore venga contato più volte
cont++;
temp=A[r][c];
}
                                                if(cont>=m)
   return true;
                                         }
                                         break;
}
}
return false;
}
public static void main(String[] args)
{
long[][] A={{3,4,5,6},{7,5,3,4},{12,9,8,11}};
int m=3;
boolean flag=mElementi(A,m);
System.out.println(flag);
}
}
questo sopra ovviamente ritorna true. Se cancelli, nella seconda riga, un numero qualsiasi (lasciando invariato m) tra 5,3,4 tornerà false.
MODIFICATO PER SODDISFARE LA CONDIZIONE POSTATA SOTTO DA VIVYNZ.


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 04-01-2009, 11:10:45
no...non ho saputo spiegare il problema forse...prova il codice con questo main
Code:
public static void main(String[] args)
{
long[][] A={{3,4,5,6},{7,5,9,4},{3,9,8,11}};
int m=3;
boolean flag=mElementi(A,m);
System.out.println(flag);
}
restituisce true ma dovrebbe restituire false perchè 5 e 4 sono nella seconda riga e il 3 nella terza mentre dovrebbero stare tutti su una stessa riga per essere un effettivo true...


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 04-01-2009, 11:40:13
l'ho modificato, ed ammetto di non averlo letto attentamente il tuo post :pray, infatti il problema stava nel fatto che il ciclo di r1 incrementando subito dopo il confronto tra A[r][c] e A[r1][c1] spostando il controllo sulla riga successiva (cosa che non doveva fare in quanto prima doveva controllare tutta la seconda riga e azzerare il contatore). Se non ti quadra qualcosa nel codice dimmelo pure.
Saluti! .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 04-01-2009, 11:53:51
Grazie adesso funziona!!gentilissimo..ma potresti spiegarmi come si usa il break in questo modo perchè non l'ho mai usato....


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 04-01-2009, 12:03:03
il break; (http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html) è un'istruzione che, appena chiamata, salta la struttura (selettiva o iterativa che sia) ed esce (nel caso di un ciclo lo termina in anticipo senza nemmeno passare dal controllo). Un pò come se avessi messo r1=A.length, sarebbe uscito dal ciclo perchè il controllo era falso. Esistono (come puoi vedere dal link che ho inserito) due versioni del break: con etichetta e senza etichetta (cambia che con etichetta esce dalla struttura e ti spedisce all'etichetta come fosse un goto). Un istruzione simile è anche il continue; che invece di uscire dalla struttura semplicemente torna all'inizio del ciclo (incremento e controllo) saltando tutte le istruzioni successive ad essa (come se tu avessi un etichetta "sul ciclo" e facessi goto etichetta).
Saluti! .ciaociao
P.S. usala solo quando necessaria perchè non è molto ben vista come istruzione .whistling .wink dicono che renda il codice poco lineare. Ma "quanno ce vò ce vò!!!" :[Emoticon] Asd:


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 04-01-2009, 13:29:38
ho capito grazie!!!  .arrossisco


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 04-01-2009, 13:57:38
giuro che sono le ultime cose che chiedo  .smile :pray :pray

un esercizio è questo:
(http://pikkolavy.altervista.org/im.jpg)
e l'altro:
Un “dizionario” è un array di stringhe ordinato lessicograficamente in senso crescente. Scrivere un
metodo che prenda in input una matrice quadrata S di stringhe ed un dizionario, e restituisca un
nuovo dizionario aggiornato con tutte le stringhe in S.
Si supponga che non esistano stringhe ripetute. Non è possibile utilizzare metodi di ordinamento.


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 04-01-2009, 15:34:09
P.S. usala solo quando necessaria perchè non è molto ben vista come istruzione .whistling .wink dicono che renda il codice poco lineare. Ma "quanno ce vò ce vò!!!" :[Emoticon] Asd:
Il problema della istruzione goto è che distrugge completamente il controllo di flusso. Tanto varrebbe scrivere direttamente in IJVM e mantenere la potenza del linguaggio (provocazione) :-)L.
Piuttosto, un uso corretto delle istruzioni condizionali dentro le intestazioni dei cicli evita l'uso dei goto ed è fondamentale per evitare errori e rendere il codice più facile da leggere. Inoltre, con il controllo di flusso è più semplice anche dimostrare che un certo codice fa esattamente quello che si intende fare. Senza parlare poi dei linguaggi di programmazione funzionale, dove le dimostrazioni si fanno per induzione (per fondata) e sono rigorosissime, ma qui andiamo oltre...  .smile

giuro che sono le ultime cose che chiedo  .smile :pray :pray
un esercizio è questo:
(http://pikkolavy.altervista.org/im.jpg)
(ti consiglio di mettere un link al file jpg sul (penso) tuo spazio su altervista, poiché il sito impedisce che vengano restituiti contenuti da pagine esterne (penso controlli il campo Referrer: di HTTP, ma non ne sono sicuro).
Questo esercizio è già stato risolto nel vecchio forum, da me medesimo stesso:
>>link al post con la soluzione<< (https://www.dmi.unict.it/u2/index.php?option=com_joomlaboard&Itemid=34&func=view&id=56192&catid=6)

Quote
Un “dizionario” è un array di stringhe ordinato lessicograficamente in senso crescente. Scrivere un
metodo che prenda in input una matrice quadrata S di stringhe ed un dizionario, e restituisca un
nuovo dizionario aggiornato con tutte le stringhe in S.
Si supponga che non esistano stringhe ripetute. Non è possibile utilizzare metodi di ordinamento.
E come devo ordinare? Come si ordina senza usare un metodo di ordinamento? .huh O forse non ho capito cosa s'intende con quest'ultima condizione .penso...


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 04-01-2009, 15:47:37
reverse parlavo del break. Il tuo esempio probabilmente vale anche per questo, ma infatti sono d'accordo con quello che dici, queste sono istruzioni che "rompono" il flusso quindi da usare solo quando necessarie.
L'esercizio del dizionario è stato già trattato qui (http://www.dmi.unict.it/u2/index.php?option=com_joomlaboard&Itemid=34&func=view&id=45598&catid=6#msg45598). A quanto ho capito non si possono usare i metodi presenti nella classe Arrays (http://www.google.it/url?sa=t&source=web&ct=res&cd=1&url=http%3A%2F%2Fjava.sun.com%2Fj2se%2F1.4.2%2Fdocs%2Fapi%2Fjava%2Futil%2FArrays.html&ei=SM1gSfeILo_S0AX72o2lCg&usg=AFQjCNFU-jnDwSK3d3joMAAaETVxVFLn8Q&sig2=1LRjzr7Y-uTESWMupTFLzw). Altrimenti sarebbe (appunto) impossibile.


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 04-01-2009, 18:55:47
Code:
class quarto
{
public boolean ciao(long [][] A)
{
boolean t=false;
int a=1;
for(int i=0;i<A.length&&a<=2;i++)
{
t=false;
for (int j=0;j<A[i].length&&t==false;j++)
  for (int x=j+1;x<A[i].length&&t==false;x++)
  {
if (A[i][j]==A[i][x])
{
t=true;
a++;
}
}
}
return t;
}
}

public class quarto_4
{
public static void main(String [] args)
       {
quarto a =new quarto();
long [][] A={ {3l,5l,6l,3l},
    {5l,77l,66l},
                                     {4l,5l,6l,7l,8l},
                                     {5l,6l,7l,5l} };
System.out.println(a.ciao(A));
}
}
testo
Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).

Salve a tutti volevo sapere se l'esercizio puo essere soggetto a migliorie
e volevo inoltre sapere se ho inteso bene l'esercizio oppure dovevo considerare che gli elementi uguali nelle due righe dovevano essere comuni a tutte e due...
se qualcuno puo illuminarmi.. Grazie anticipate!   .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 04-01-2009, 19:04:12
In pratica il programma deve controllare se ci sono due righe, non successive (ad esempio la prima e la terza ma anche la seconda e la quarta) con due elementi in comune (rispettivamente un elemento per riga).
EDIT: corretto dopo l'osservazione di reverse, io avevo letto due per riga (studiare fino a quest'ora fa male a quanto sembra!!! :[Emoticon] Asd: )


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 04-01-2009, 19:44:07
Code:
class quarto
{
public boolean ciao(long [][] A)
{
boolean t=false;
int a=1;
for(int i=0;i<A.length&&a<=2;i++)
{
t=false;
for (int j=0;j<A[i].length&&t==false;j++)
  for (int x=j+1;x<A[i].length&&t==false;x++)
  {
if (A[i][j]==A[i][x])
{
t=true;
a++;
}
}
}
return t;
}
}
Il tuo codice è errato, però hai fatto bene a chiedere un parere qua sul forum  .smile.

Allora ti indico dove sono i tuoi errori:
Innanzitutto un controllo del tipo if (A[i][j]==A[i][x]) controlla due elementi di una stessa riga, e l'esercizio invece vuole sapere se esistono due elementi ma in righe diverse (condizione ancora più forte, addirittura devono essere non consecutive!)
Inoltre, il fatto che inizializzi x con int x=j+1 nel ciclo for più interno fa capire che hai inteso erroneamente di cercare due elementi sicuramente su colonne diverse, mentre potrebbero essere "anche" in colonne diverse, ma non devono necessariamente esserlo.
Infine, l'uso di una variabile contatore a complica il controllo di flusso ed introduce possibilità di errore.

Ti spiego meglio cosa richiede l'esercizio:
bisogna restituire true quando esiste almeno una coppia di righe non consecutive che abbiano uno stesso elemento in comune, cioè due elementi uguali (almeno uno per riga) in qualsiasi posizione (non solo nel caso in cui siano nella stessa colonna, ma "anche in colonne differenti") in due righe diverse non consecutive.
Altrimenti, restituire false.

Un codice che risolve il tuo problema è il seguente:
Code:
public static boolean metodoEsercizio (long [][] A)
{
    //si ricorda del successo (valore true) o del fallimento (valore false) della ricerca
    boolean found = false;
   
    //per ciascuna coppia di righe (r1, r2) non consecutive (cioè tali he |r2-r1| >= 2 )
    for (int r1 = 0; r1 < (A.length - 2) && !found; r1++)
        for (int r2 = r1 + 2; r2 < A.length && !found; r2++)
            //per ciascuna coppia di colonne (c1, c2) ove c1 è un indice per A [r1] e c2 lo è per A [r2]
            for (int c1 = 0; c1 < A [r1].length && !found; c1++)
                for (int c2 = 0; c2 < A [r2].length && !found; c2++)
                    //se trovo che tali elementi sono uguali, mi ricordo della ricerca con successo
                    if (A [r1][c1] == A [r2][c2])
                        found = true;
   
    return found;
}

Ciao .ciaociao.


Title: Re:esercizi seconda prova in itinere
Post by: folle on 04-01-2009, 19:47:38
ciao a tutti...avrei un problemino..cn qsto codice...


/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S
di stringhe e restituisca un boolean che indichi se esiste una coppia di stringhe in S
in cui occorre lo stesso carattere.
Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True*/
import java.lang.String;
import javax.swing.*;
public class eserciziofrastagliato
{
    public static boolean uguali( String [][]s)
    {
        int i,j,k;int h;boolean trovato=false;
        for(i=0,j=0;i<s.length;i++,j++)
        {
            String temporanea=s[j];
           for(k=i+1,h=j+1;k<s[j].length();k++,h++)
            {
                while((i<s[j].length())&&(k<s[k][h].length()))
                if(s[j].charAt(i)==s[k][h].charAt(k));
                trovato=false;
            }
        }
       return trovato;
    }
   
    public static void main(String [] args)
    {
      String [][]a=new String[3][];
        a[0]=new String [2];
        a[1]=new String [3];
        a[2]=new String [2];
        int i;int j;
        for(i=0;i<a.length;i++)
        {
           for(j=0;j<a.length;j++)
            {
              a[j]=JOptionPane.showInputDialog("inserisci stringhe");
            }
        }
        for(i=0;i<a.length;i++)
         {
            for(j=0;j<a.length;j++)
              {
                System.out.println(a[j]+"\t");
              }
         }
         System.out.println(uguali(a));
    }
}


il problema è ke nn m da errori ma nell'esecuzione...nn m esegue nulla;ma mi da sl la stampa dell'array bidimensionale..
 :-)|nn so ke fare!!!


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 04-01-2009, 19:52:22
ciao a tutti...avrei un problemino..cn qsto codice...
appena metti tutto sotto il tag CODE (è indicato dall'asterisco (http://forum.informatica.unict.it/Themes/Anecdota/images/bbc/code.gif)), perchè così non si capisce nulla....wink
Oppure dare uno sguardo al metodo già fatto di questo stesso esercizio (sempre in questo topic)...


Title: Re:esercizi seconda prova in itinere
Post by: folle on 04-01-2009, 20:22:20
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S
di stringhe e restituisca un boolean che indichi se esiste una coppia di stringhe in S
in cui occorre lo stesso carattere.
Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True*/
import java.lang.String;
import javax.swing.*;
public class eserciziofrastagliato
{
    public static boolean uguali( String [][]s)
    {
        int i,j,k;int h;boolean trovato=false;
        for(i=0,j=0;i<s.length;i++,j++)
        {
            String temporanea=s[i][j];
           for(k=i+1,h=j+1;k<s[i][j].length();k++,h++)
            {
                while((i<s[i][j].length())&&(k<s[k][h].length()))
                if(s[i][j].charAt(i)==s[k][h].charAt(k));
                trovato=true;
            }
        }
       return trovato;
    }
   
    public static void main(String [] args)
    {
      String [][]a=new String[3][];
        a[0]=new String [2];
        a[1]=new String [3];
        a[2]=new String [2];
        int i;int j;
        for(i=0;i<a.length;i++)
        {
           for(j=0;j<a[i].length;j++)
            {
              a[i][j]=JOptionPane.showInputDialog("inserisci stringhe");
            }
        }
        for(i=0;i<a.length;i++)
         {
            for(j=0;j<a[i].length;j++)
              {
                System.out.println(a[i][j]+"\t");
              }
         }
         System.out.println(uguali(a));
    }
}
sorry.....visto negli altri post...ma nn c ho capito gran kè per risolvere il prob!! :boh


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 04-01-2009, 20:54:55
EDIT: bastava modificare il messaggio tramite il tasto "Modifica" .wink
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato S
di stringhe e restituisca un boolean che indichi se esiste una coppia di stringhe in S
in cui occorre lo stesso carattere.
Es.: Input: [ (“abc”, “dewfg”, …), (…), …, (…, “xyfw”, …), …], Output: True*/
import java.lang.String;
import javax.swing.*;
public class eserciziofrastagliato
{
    public static boolean uguali( String [][]s)
    {
        int i,j,k;int h;boolean trovato=false;
        for(i=0,j=0;i<s.length;i++,j++)
        {
            String temporanea=s[i][j];
           for(k=i+1,h=j+1;k<s[i][j].length();k++,h++)
            {
                while((i<s[i][j].length())&&(k<s[k][h].length()))
                if(s[i][j].charAt(i)==s[k][h].charAt(k));
                trovato=true;
            }
        }
       return trovato;
    }
   
    public static void main(String [] args)
    {
      String [][]a=new String[3][];
        a[0]=new String [2];
        a[1]=new String [3];
        a[2]=new String [2];
        int i;int j;
        for(i=0;i<a.length;i++)
        {
           for(j=0;j<a[i].length;j++)
            {
              a[i][j]=JOptionPane.showInputDialog("inserisci stringhe");
            }
        }
        for(i=0;i<a.length;i++)
         {
            for(j=0;j<a[i].length;j++)
              {
                System.out.println(a[i][j]+"\t");
              }
         }
         System.out.println(uguali(a));
    }
}
sorry.....visto negli altri post...ma nn c ho capito gran kè per risolvere il prob!! :boh
Il compilatore non ti dà errori perchè in termini di sintassi è corretto, però logicamente la struttura è errata. Allora:
1° errore: i e j devono stare su due for separati, perchè sono indici di riga e colonna. Quindi il primo deve avere come condizione di controllo
Code:
s.length //lunghezza riga
mentre il secondo (j)
Code:
s[i].length //lunghezza colonna
2° errore: manca il controllo per scorrere la stringa in tutta la sua lunghezza, puoi usare h in questo modo:
Code:
for(h=0;h<S[i][j].length();h++) //S[i][j] accede alla stringa mentre .length() è il metodo String per la lunghezza
Implementato il controllo sopra, arriviamo al:
3° errore: Perchè tu confronti il carattere (ad esempio) del posto (0,0) con quello (1,1), poi (1,1) con (2,2) saltando una riga intera. Dovresti poter confrontare invece ANCHE stringhe della stessa riga ma di colonna differente. Una soluzione sarebbe memorizzare di volta in volta in una variabile temporanea (dentro il ciclo della stringa) il carattere "iniziale" (per avere qualcosa con cui confrontare il successivo) ovvero il valore indicizzato in quel momento da k. In questo modo:
Code:
for(int r=0;r<S.length;r++) //ciclo righe matrice
for(int c=0;c<S[r].length;c++) //ciclo colonne matrice
for(int k=0;k<S[r][c].length();k++) //ciclo stringhe
    char a=S[r][c].charAt(k); //variabile temporanea per confronto
Una volta fatto questo puoi creare un ciclo interno alla singola riga per poter confrontare il carattere con tutte le stringhe successive della riga stessa.
Code:
for(int j=c+1;j<S[r].length;j++) //ciclo stringhe successive (stessa riga) per confronto
if(S[r][j].indexOf(a)!=-1)
return true;
il metodo indexOf(carattere) (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#indexOf(int)) ti cerca il carattere che gli passi come parametro nella stringa, restituendo -1 se non lo trova.
Finito questo controllo, passi alle "righe" successive controllando allo stesso modo.
Tutto chiaro? .smile


Title: Re:esercizi seconda prova in itinere
Post by: folle on 04-01-2009, 21:24:36
grazie tante per la correzione...ora m metto a sistemare il codice...li abolirei proprio qsti array frastagliati!! .arrossisco
cmq..thanks


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 04-01-2009, 21:34:52
Grazie reversengineer,
per la correzione ma nn mi è chiaro perchè all'inizio hai messo r1+2 (nn dovrebbe essere r1+1), cosi come hai scritto,  secondo me, al primo ciclo confronti ogni elemento della prima riga con tutti quelli della terza righa e nn della seconda....
Correggimi se sbaglio.. .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 04-01-2009, 21:46:37
Grazie reversengineer,
per la correzione ma nn mi è chiaro perchè all'inizio hai messo r1+2 (nn dovrebbe essere r1+1), cosi come hai scritto,  secondo me, al primo ciclo confronti ogni elemento della prima riga con tutti quelli della terza righa e nn della seconda....
Correggimi se sbaglio.. .ciaociao
Esatto, ogni elemento della prima riga va confrontato con tutti gli elementi della terza riga (e successive), poiché la prima e la terza sono non contigue, invece la prima e la seconda lo sono (e secondo la consegna dell'esercizio, due righe continue non vanno confrontate).
In pratica, quel +2 a sommare rende r2 sicuramente non contigua con r1.
 .ciaociao



Title: Re:esercizi seconda prova in itinere
Post by: hax on 05-01-2009, 12:06:45
ciao avrei bisogno di una interpretazione...
Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).

non ho capito come devo cercare questi elementi uguali...
cioè devo trovare 2 elementi in una riga e ritrovarli in un'altra riga?
devo trovare 2 elementi uguali in una riga e altri 2 uguali in un'altra (anche se diversi da quelli trovati nell'altra riga)?


Title: Re:esercizi seconda prova in itinere
Post by: TheSpecialOne on 05-01-2009, 12:28:13
ciao avrei bisogno di una interpretazione...
Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).

non ho capito come devo cercare questi elementi uguali...
cioè devo trovare 2 elementi in una riga e ritrovarli in un'altra riga?
devo trovare 2 elementi uguali in una riga e altri 2 uguali in un'altra (anche se diversi da quelli trovati nell'altra riga)?

praticamente devi controllare che nell'array ci siano 2 righe, che hanno in comune almeno 2 elementi, e in tal caso restituire true. Devi considerare che non devono essere contigue, quindi la riga 0 con la 1 non devi confrontarle.
Per esempio:

2 | 7 | 6 | 1
3 | 2 ! 9
4 | 2 | 1 | 8

In questo caso dovrebbe restituire true, in quanto 2 e 1 sono presenti nella prima e nella terza riga!
Spero di essere stato chiaro, e soprattutto di non avere detto corbellerie!


Title: Re:esercizi seconda prova in itinere
Post by: hax on 05-01-2009, 12:38:13
Chiarissimo! grazie.  :-OK


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 05-01-2009, 13:14:23
salve a tutti,
volevo un chiarimento , nell'esercizio di trovare due elementi comuni alle due righenn consecutive, se invece quest'ultime sono consecutive come devo fare?
Grazie anticipate...!  .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 05-01-2009, 13:26:30
salve a tutti,
volevo un chiarimento , nell'esercizio di trovare due elementi comuni alle due righenn consecutive, se invece quest'ultime sono consecutive come devo fare?
Grazie anticipate...!  .ciaociao
Cosa intendi? Vuoi risolvere un esercizio diverso in cui vengono menzionate le righe consecutive invece che quelle non consecutive? E se sì, le righe devono essere solo consecutive, o anche consecutive?


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 05-01-2009, 13:37:43
Effettivamente è un curiosa questa domanda .penso. Se le righe sono consecutive non devi fare nulla!!! .smile


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 05-01-2009, 13:41:15
mi riferivo allo stesso esercizio che ho postato,
con la variante che le righe devono essere consecutive!
ah.. mentre ci sono esiste per caso una funzione di java che permette di eliminare un carattere da una stringa?
puo andare la funzione replace..
ciao


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 05-01-2009, 14:06:28
Code:
class settimo
{
public static boolean ciao(long [] A)
{
boolean t=false;
for(int i=0;i<A.length&&t==false;i++)
{
if (A[i]>A[i+1]&&A[i+1]>A[i+2]&&A[i+2]>A[i+3]&&A[i+3]>A[i+4]&&A[i+4]>A[i+5])
t=true;
}
return t;
}
}

public class settimo_7
{
public static void main(String [] args)
{
long [] A={8l,3l,9l,22l,14l,9l,6l,2l,1l,6l,4l};
System.out.println(settimo.ciao(A));
}
}
Scrivere un metodo che prenda in input un array di long, e restituisca un boolean che indichi se
esiste una sequenza decrescente di almeno 4 numeri contigui.
Es.: Input: <8, 3, 9, 22, 14, 9, 6, 2, 1, 6, 4>, Output : True


 per come è impostato funziona pero se cambio i numeri e sconvolgo l'ordine di decrescenza moi compila pero nn da niente..
why? .penso


Title: Re:esercizi seconda prova in itinere
Post by: hax on 05-01-2009, 14:42:08
per come è impostato funziona pero se cambio i numeri e sconvolgo l'ordine di decrescenza moi compila pero nn da niente..
why? .penso
funziona solo nel caso positivo! se non trova i 4 numeri consecutivi ti da errore perchè arrivato all'ultimo elemento dell'array non può controllare gli altri 3 consecutivi essendo terminato l'array.
Fai terminare il ciclo ad A.length-4 (cioè i<A.length-3)

poi una cosa... perchè controlli 5 coppie se i consecutivi sono 4? hai un controllo in più.

ps. secondo me sarebbe meglio usare un contatore di consecutivi (che incrementi ad ogni passo e azzeri quando non trovi il consecutivo) invece di fare 4 controlli dentro l'if.


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 05-01-2009, 15:05:18
Grazie,
un chiarimento ma quando parla di numeri contigui devo considerare i singoli numeri vicini e successivi oppure le coppie....ad esempio  quando parla di 5 numeri contigui devo interpretare 5 singoli numeri vicini oppure devo considerare 5 coppie consecutive di numeri..? ciao


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 05-01-2009, 15:07:21
ah.. mentre ci sono esiste per caso una funzione di java che permette di eliminare un carattere da una stringa?
puo andare la funzione replace..
ciao
si, potrebbe andare...

@Giovi89: 5 numeri contigui significa 5 numeri vicini...

Non so se SpecialOne li ha risolti ma se dovessero servire qui ci sono due esempi per i due esercizi richiesti da lui:

Scrivere un metodo, che presi 2 array A e B di int, restituisca l'elemento che occorre piu volte nei 2 array (anche in uno solo).
P.S. non fate caso al nome del metodo :[Emoticon] Asd:
Code:
public class esercizio12
{
public static int PiuOccorroso(int[] A, int[] B)
{
int maxA=0,maxB=0,contA=0,contB=0,max=0,cont=0;
int i,j;
for(int a=0;a<A.length-1;a++) //controllo solo array A
for(int a1=a+1;a1<A.length;a1++)
if(A[a]==A[a1])
{
maxA=A[a];
contA++;
}
for(int b=0;b<B.length-1;b++) //controllo solo array B
for(int b1=b+1;b1<B.length;b1++)
if(B[b]==B[b1])
{
maxB=B[b];
contB++;
}
if(A.length<=B.length) //controllo incrociato di A e B con A <= B
for(i=0;i<B.length;i++)
for(j=0;j<A.length;j++)
if(B[i]==A[j])
{
max=B[i];
cont++;
}
else //controllo incrociato di A e B con A > B
for(i=0;i<A.length;i++)
for(j=0;j<B.length;j++)
if(A[i]==B[j])
{
max=A[i];
cont++;
}
if(contA>contB && contA>cont) //controllo indice maggiore
{
cont=contA;
max=maxA;
}
else if(contB>contA && contB>cont) //controllo indice maggiore
{
cont=contB;
max=maxB;
}
return max;
}
public static void main(String[] args)
{
int[] A={1,2,3,4};
int[] B={5,6,7,8,9};
int max=PiuOccorroso(A,B);
System.out.println(max + " occorrenza/e");
}
}

Scrivere un metodo, che preso un array bidimensionale frastagliato di stringhe S, restituisca un boolean che indichi se esiste una riga che contiene 2 stringhe che terminano con la stessa coppia di caratteri.
Code:
public class esercizio13
{
public static boolean StessaCoppia(String[][] S)
{
int r,maxR=0;
for(int i=0;i<S.length;i++) //calcolo la lunghezza della riga più grande
{
if (S.length>maxR)
maxR=S.length;
}
for(r=0;r<maxR;r++) //ciclo righe
for(int c1=0;c1<S[r].length-1;c1++) //ciclo colonne
for(int c2=c1+1;c2<S[r].length;c2++) //ciclo colonne 2 (confronto)
if(r<S[0].length) //controllo se la riga corrente esiste nella colonna corrente
if(S[r][c1].charAt(S[r][c1].length()-2)==(S[r][c2].charAt(S[r][c2].length()-2))) //confronto i penultimi caratteri
if(S[r][c1].charAt(S[r][c1].length()-1)==(S[r][c2].charAt(S[r][c2].length()-1))) //confronto gli ultimi ultimi caratteri
return true;
return false;
}
public static void main(String[] args)
{
String[][] S={{"ciao","dottoraus"},{"ginhao","nsbviao","vbsjbini","ggfu"},{"blabla"},{""}}; //stamperà true
for(int  i=0;i<S.length;i++)
{
for(int j=0;j<S[i].length;j++)
System.out.print(S[i][j]+" ");
System.out.println();
}
boolean flag=StessaCoppia(S);
System.out.println(flag);
}
}


Title: Re:esercizi seconda prova in itinere
Post by: rox on 05-01-2009, 16:51:25
scusami reversengineer ma vorrei sapere come mai questa volta per concatenare le stringhe non abbiamo usato il metodo concat?


        temp += s.substring (i, Math.min (i + 3, l));
   
 


Title: Re:esercizi seconda prova in itinere
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 05-01-2009, 16:58:55
mi riferivo allo stesso esercizio che ho postato,
con la variante che le righe devono essere consecutive!
Intendo quindi che devono essere solo consecutive, non anche consecutive: in questo caso bisogna modificare la condizione di uscita del primo for e togliere completamente il secondo for, poichè per ogni riga esiste una sola riga contigua successiva (e quella precedente viene già confrontata nel ciclo precedente), cioè uscirebbe fuori questo codice:
Code:
public static boolean metodoEsercizio (long [][] A)
{
    //si ricorda del successo (valore true) o del fallimento (valore false) della ricerca
    boolean found = false;
   
    //per ciascuna coppia di righe (r1, r2) consecutive (cioè tali he |r2-r1| = 1 )
    for (int r1 = 0; r1 < (A.length - 1) && !found; r1++)
    {
        int r2 = r1 + 1;
        //per ciascuna coppia di colonne (c1, c2) ove c1 è un indice per A [r1] e c2 lo è per A [r2]
        for (int c1 = 0; c1 < A [r1].length && !found; c1++)
            for (int c2 = 0; c2 < A [r2].length && !found; c2++)
                //se trovo che tali elementi sono uguali, mi ricordo della ricerca con successo
                if (A [r1][c1] == A [r2][c2])
                    found = true;
    }
   
    return found;
}

devi solo cambiare il contatore da "+2" a "++" in modo che le righe che confronti siano contigue....coolio
Errato. A parte che come ho appena fatto notare non serve nemmeno ciclare dentro il primo for poiché esiste una sola riga successiva contigua, ma l'operatore unario ++ ha pure il side-effect (effetto collaterale) di modificare la variabile su cui viene applicato.
Sono questi esempi di problemi introdotti dal codice (non da te, bada) che mi fanno sempre più ben pensare della programmazione funzionale (...) .penso.

ah.. mentre ci sono esiste per caso una funzione di java che permette di eliminare un carattere da una stringa?
puo andare la funzione replace..
ciao
Il carattere che vuoi eliminare è identificabile univocamente da un indice all'interno della stringa oppure è il primo uguale a un certo carattere noto?
scusami reversengineer ma vorrei sapere come mai questa volta per concatenare le stringhe non abbiamo usato il metodo concat?
        temp += s.substring (i, Math.min (i + 3, l));
Non mi pare che debba essere usato obbligatoriamente. Inoltre, il codice:
Code:
temp += s.substring (i, Math.min (i + 3, l));
è equivalente al codice
Code:
temp = temp + s.substring (i, Math.min (i + 3, l));
che mi permette di riutilizzare temp tramite riassegnazione del valore con una concatenazione fatta tramite il più elegante operatore +.

Ciao a tutti .ciaociao.


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 05-01-2009, 17:03:24
distrazione perchè l'esercizio non l'ho nemmeno visto, ho considerato quello che ho fatto io in cui cambiando solo l'indice (visto che gli altri confronti erano usano come riferimento solo gli indici) ottenevo il risultato sperato. L'altro sorgente non l'ho visto. Però il fatto della riga successiva contigua singola fa parte di quel singolo esercizio. Per la variazione dell'indice da me sta lì apposta, casomai li faccio riazzerare alla fine. .wink
Comunque perchè usare il metodo concats quando in quel modo è più semplice ed immediato?  .timido


Title: Re:esercizi seconda prova in itinere
Post by: TheSpecialOne on 05-01-2009, 19:51:13
ah.. mentre ci sono esiste per caso una funzione di java che permette di eliminare un carattere da una stringa?
puo andare la funzione replace..
ciao
si, potrebbe andare...

@Giovi89: 5 numeri contigui significa 5 numeri vicini...

Non so se SpecialOne li ha risolti ma se dovessero servire qui ci sono due esempi per i due esercizi richiesti da lui:

Scrivere un metodo, che presi 2 array A e B di int, restituisca l'elemento che occorre piu volte nei 2 array (anche in uno solo).
P.S. non fate caso al nome del metodo :[Emoticon] Asd:
Code:
public class esercizio12
{
public static int PiuOccorroso(int[] A, int[] B)
{
int maxA=0,maxB=0,contA=0,contB=0,max=0,cont=0;
int i,j;
for(int a=0;a<A.length-1;a++) //controllo solo array A
for(int a1=a+1;a1<A.length;a1++)
if(A[a]==A[a1])
{
maxA=A[a];
contA++;
}
for(int b=0;b<B.length-1;b++) //controllo solo array B
for(int b1=b+1;b1<B.length;b1++)
if(B[b]==B[b1])
{
maxB=B[b];
contB++;
}
if(A.length<=B.length) //controllo incrociato di A e B con A <= B
for(i=0;i<B.length;i++)
for(j=0;j<A.length;j++)
if(B[i]==A[j])
{
max=B[i];
cont++;
}
else //controllo incrociato di A e B con A > B
for(i=0;i<A.length;i++)
for(j=0;j<B.length;j++)
if(A[i]==B[j])
{
max=A[i];
cont++;
}
if(contA>contB && contA>cont) //controllo indice maggiore
{
cont=contA;
max=maxA;
}
else if(contB>contA && contB>cont) //controllo indice maggiore
{
cont=contB;
max=maxB;
}
return max;
}
public static void main(String[] args)
{
int[] A={1,2,3,4};
int[] B={5,6,7,8,9};
int max=PiuOccorroso(A,B);
System.out.println(max + " occorrenza/e");
}
}

Scrivere un metodo, che preso un array bidimensionale frastagliato di stringhe S, restituisca un boolean che indichi se esiste una riga che contiene 2 stringhe che terminano con la stessa coppia di caratteri.
Code:
public class esercizio13
{
public static boolean StessaCoppia(String[][] S)
{
int r,maxR=0;
for(int i=0;i<S.length;i++) //calcolo la lunghezza della riga più grande
{
if (S.length>maxR)
maxR=S.length;
}
for(r=0;r<maxR;r++) //ciclo righe
for(int c1=0;c1<S[r].length-1;c1++) //ciclo colonne
for(int c2=c1+1;c2<S[r].length;c2++) //ciclo colonne 2 (confronto)
if(r<S[0].length) //controllo se la riga corrente esiste nella colonna corrente
if(S[r][c1].charAt(S[r][c1].length()-2)==(S[r][c2].charAt(S[r][c2].length()-2))) //confronto i penultimi caratteri
if(S[r][c1].charAt(S[r][c1].length()-1)==(S[r][c2].charAt(S[r][c2].length()-1))) //confronto gli ultimi ultimi caratteri
return true;
return false;
}
public static void main(String[] args)
{
String[][] S={{"ciao","dottoraus"},{"ginhao","nsbviao","vbsjbini","ggfu"},{"blabla"},{""}}; //stamperà true
for(int  i=0;i<S.length;i++)
{
for(int j=0;j<S[i].length;j++)
System.out.print(S[i][j]+" ");
System.out.println();
}
boolean flag=StessaCoppia(S);
System.out.println(flag);
}
}

Grazie frederik, il primo ero riuscito a risolverlo. Il secondo non ci ho perso molto tempo onestamente, ma ragionando sul tuo codice mi hai dato un significativo aiuto! Thanks!


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 06-01-2009, 01:13:38
hai fatto male ad abbandonarlo perchè gli array frastagliati alle seconde prove sono quasi una certezza (sono state fortunate le persone che hanno avuto un esame senza di essi perchè è difficile che manchino). Felice comunque di essere stato d'aiuto!


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 06-01-2009, 12:08:46
Code:
class undicesimo
{
public static boolean ciao(String [][] A)
{
boolean t=false;
for (int r1=0;r1<A.length-1&&t==false;r1++)
   for(int r2=r1+1;r2<A.length&&t==false;r2++)
      for(int c1=0;c1<A[r1].length&&t==false;c1++)
        for(int c2=0;c2<A[r2].length&&t==false;c2++)
           if (A[r1][c1].equals(A[r2][c2]))
   t=true;
   
   return t;
}
}

public class undicesimo_11
{
public static void main(String [] args)
{
String [][] A={ {"giovanni","carola","giorgio"},
                      {"enumerare","michelle"},
      {"Alessio","carola","andrea"} };
System.out.println(undicesimo.ciao(A));
}
}
Esercizio
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca un boolean che indichi se esiste una colonna in S contenente due stringhe uguali (saltare le
eventuali stringhe mancanti).


di come lo fatto io funziona ma il mio problema è d' interpretazione nn sono convinto quando dice che ci deve essere una colonna dove vi sono due stringhe uguali ma se l'array è frastagliato come puo esserci una sola colonna nn dovrebbero essere due su due righe differenti?...

quando ho problemi di interpretazione cosa mi consigliate di fare per carpire al meglio l'esercizio?
inoltre qualcuno è riuscito a risolvere esercizi del tipo:

Scrivere un metodo che prenda in input un array bidimensionale A di long, e restituisca un array A’
ottenuto da A ordinando in senso crescente gli elementi in ogni singola colonna di indice dispari.
Es.: Input : [(2,6,4), (1,9,0), (3,7,7), (5,8,5)], Output : [(2,6,4), (1,7,0), (3,8,7), (5,9,5)].


oppure

Scrivere un metodo che prenda in input un array bidimensionale A di long, e restituisca il valore
di (simbolo della sommatoria nn me lo riconosce) j max(A, j) , dove max(A, j) è una funzione che restituisce il massimo elemento presente nella j-esima colonna di A


ci possono esssere esercizi simili...se si qualcuno puo postare un codice esauriente?
Grazie anticipate!! .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 06-01-2009, 12:43:37
il primo esercizio che chiedi (ordinamento colonne dispari) è già stato risolto in questo topic. Cerca nelle pagine precedenti.


Title: Re:esercizi seconda prova in itinere
Post by: Giovi89 on 06-01-2009, 13:54:52
Code:
class dodicesimo
{
public static void ciao(byte j,String [][] A)
{
       String [][] A1=new String [A.length][];
       for(int i=0;i<A.length;i++)
  A1[i]=new String [A[i].length];

  for(int x=0;x<A1.length;x++)
    for(int y=0;y<A1[x].length;y++)
      A1[x][y]=A[x][y];
char d='g';
//char h='*';
       for(int x=0;x<A.length;x++)
for(int y=0;y<A[x].length;y++)
{
if(y==(int)j)
{
  /*for(int k=0;k<A[x][y].length()-1;k++)
    for(int a=k+2;a<A[x][y].length();a++)
       if (A[x][y].charAt(k)==A[x][y].charAt(a))
       if(A[x][y].charAt(a)==d)
       {*/
       A[x][y]=A[x][y].replace('g','*');
       A1[x][y]=A[x][y];
       }
}
//}

for(int x=0;x<A.length;x++)
  for(int y=0;y<A[x].length;y++)
    System.out.println(A1[x][y]);
}
}

public class dodicesimo_12
{
public static void main(String [] args)
{
byte j=(byte)(0);
String [][] A={  {"giorgio","giovanni","giacomo"},
      {"alessandro","ffggggggw"},
      {"stefano"} };
dodicesimo.ciao(j,A);
}
}
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe ed un
byte j, e restituisca una matrice S’ copia di S in cui in ogni stringa della colonna j-esima ogni
occorrenza del carattere ‘g’ è sostituita da un carattere ‘*’.


volevo un chiarimento ma noi dobbiamo sostituire tutti i caratteri g della stringa corrispondente alla colonna j-esima oppure solo le occorrenze del carattere g e quindi la prima g di ogni stringa nn deve essere sostituita?...
se qualcuno puo chiarirmi...
..insomma nn mi è chiaro il significato di occorrenza applicato all'esercizio?
(nel codice la parte commentata è superflua, mi serve  per trovare le occorrenze di 'g', secondo me è superflua visto che utilizzo la funzione replace, voi che ne pensate?).. inoltre scusatemi se sono cosi insistente ma potete dare un'occhiata al codice e al chiarimento chiesto che ho postato prima..? .ciaociao e Grazie!


Title: Re:esercizi seconda prova in itinere
Post by: Alex_47 on 06-01-2009, 17:04:29
Ho fatto l'esercizio 16 diminuendo le posizioni della scacchiera e invece di fare 100 posti ne ho fatti 8 per essere più breve e ho scritto questo codice..

Code:
import java.lang.*;
import java.math.*;

public class esercizio16
{



public static boolean metodo(boolean [][] S)
{

int X = S.length-1;

int Y = S[0].length-1;

int r;
int c;


for(r=0;r < X;r++)
{
for(c=0;c < Y;c++)
{
if((S[X][Y])&&(S[X+1][Y+1]))
{
System.out.println("Ci sono due pedine contigue sulla riga "+r);
return true;
}
}
}


for(c=0;c < Y;c++)
{
for(r=0;r < X;r++)
{
if((S[X][Y])&&(S[X+1][Y+1]))
{
System.out.println("Ci sono due pedine contigue sulla colonna "+c);
return true;
}
}
}
System.out.println("Non ci sono pedine contigue");
return false;

    }
       
       
       
           

public static void main(String args[])
{
boolean [][]A ={ {false,false,false,false,false,false,false,false},
                 {false,false,false,false,false,false,false,false},
                 {false,false,false,false,false,false,false,false},
                 {false,false,true,false,true,false,false,false},
                 {false,false,false,true,true,false,false,false},
                 {false,false,false,false,false,false,false,false},
                 {false,false,false,false,false,false,false,false},
                 {false,false,false,false,false,false,false,false}};


System.out.println(metodo(A));




    }
   
   
}

l'unico problema e che la condizione è sempre false e non mi esce mai true , però dovrebbero esserci pedine contigue. Secondo voi qual'è il problema?


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 06-01-2009, 17:10:25
stesso discorso... .wink
appena metti tutto sotto il tag CODE (è indicato dall'asterisco (http://forum.informatica.unict.it/Themes/Anecdota/images/bbc/code.gif))
EDIT:
1. X e Y entrambi e S.length-1 non è una buona idea perchè confronti elementi dello stesso indice (mentre dovresti confrontare l'elemento col successivo di volta in volta).
2. Nel ciclo delle righe il +1 in entrambi è errato, il +1 dovrebbe stare solo nella colonna in modo che ti scorre tutta la riga. Stesso discorso per il ciclo delle colonne, +1 solo nell'indice di riga così tieni fisso il primo e scorri la colonna, poi incrementi il primo indice e tieni fisso il secondo scorrendo il resto e così via.
In definitiva non usare variabili che non servono (creano solo confusione) fai così:
Code:
int i,j;
for(i=0;i<S.length;i++) //ciclo righe
for(j=0;j<S[i].length-1;j++) //ciclo colonne-1 (se non ci fosse il -1 darebbe un ArrayIndexOutOfBounds)
if(S[i][j] && S[i][j+1]) //controllo pedine contigue su righe (scorro tutta la riga grazie al 2° indice)
return true;
for(i=0;i<S.length-1;i++) //ciclo righe-1 (altrimenti ArrayIndexOutOfBounds come detto anche sopra)
for(j=0;j<S[i].length;j++) //ciclo colonne
if(S[i][j] && S[i+1][j]) //controllo pedine contigue su colonne (scorro tutta la colonna grazie al 1° indice)
return true;
return false;
Saluti!


Title: Re:esercizi seconda prova in itinere
Post by: Alex_47 on 06-01-2009, 17:20:54
fatto guarda il mio post modificato^^


Title: Re:esercizi seconda prova in itinere
Post by: Raro89 on 06-01-2009, 19:07:00
ciao ragazzi volevo un aiutino se è possibile...
ho fatto l'esercizio 12(di seguito postato),e non capisco come ovviare a questo errore!!!
potete darmi qualche suggerimento?
grazie...!!!!
Quote
/*
Esercizio 12
Una scacchiera S di dimensione 8x8 viene rappresentata mediante un array bidimensionale di
boolean in cui ogni posizione o è vuota (false) oppure contiene una pedina (true). Scrivere un
metodo che prenda come parametro formale una scacchiera S, e restituisca in output un boolean che
indichi se la scacchiera contiene almeno due pedine sulla stessa riga o sulla stessa colonna.
*/
class esercizio12
{
   public static boolean risposta( boolean [] [] scacchiera)
   {
      int y;
      int i;
      int z;
      boolean risposta=false;
      boolean a;
      boolean b;
      for (int c=0;c<scacchiera.length;c++)
      
         y=(int)(1+Math.random()*2);
         if(y==1 ? a=false : b=true);
      
         
      for ( i=0;i<scacchiera.length;i++)
          for(z=0;z<scacchiera.length;z++)
      {
         
         if (scacchiera[z]==b)
         {
            risposta=true;
            System.out.println("La schacchiera contiene due pedine sulla stessa riga o colonna");
         }
         else
            System.out.println("La scacchiera non contine due pedine sulla stessa riga o colonna");
      }
      return risposta;
   }
   public static void main(String [] args)
   {
      boolean [][] scacchiera=new boolean [8][8];
      boolean conferma;
      conferma=risposta(scacchiera);
   }
}

ciao a grazie a tutti in anticipo...
ps:un ultima cosa : leggendo i vari post ho visto che parlate di esercizi di arrey frestagliati...ma da dove li avete presi?dal sito del prof?perchè io fin ora ho solo fatto i primi 17 esercizi quelli che ci sono sul sito del prof...ciao e grazie...


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 07-01-2009, 11:10:01
EDIT: penso che siano gli esercizi degli esami passati...
per quanto riguarda il tuo esercizio, hai dimenticato di dire qual è l'errore che ti dà.


Title: Re:esercizi seconda prova in itinere
Post by: TheSpecialOne on 07-01-2009, 16:12:53
[
Scrivere un metodo che prenda in input un array bidimensionale A di long, e restituisca un array A’
ottenuto da A ordinando in senso crescente gli elementi in ogni singola colonna di indice dispari.
Es.: Input : [(2,6,4), (1,9,0), (3,7,7), (5,8,5)], Output : [(2,6,4), (1,7,0), (3,8,7), (5,9,5)].



Sicuri che è stato risolto nel topic? non lo trovo...
Io ho provato, sono arrivato fino al punto di isolare le colonne dispari, solo che poi non so che condizione inserire all'interno, per far si che si scambino gli elementi.
Se qualcuno ha suggerimenti, sono ben accetti!


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 07-01-2009, 16:24:16
hai ragione mi sono confuso, è in un topic simile (sempre aperto da Vivynz) ovvero questo (http://forum.sdai.unict.it/index.php?topic=701.0). Scusa l'imprecisione.
La condizione è quella classica dell'ordinamento, se un elemento è maggiore del successivo (in caso di ordinamento crescente), li scambi tramite un algoritmo di ordinamento qualunque.


Title: Re:esercizi seconda prova in itinere
Post by: Raro89 on 07-01-2009, 16:48:05
raga  ho bisogno di un altro chiarimento...
come posso risolvere questo errore?
di seguito l'esercizio e stavolta anche l'errore...
Quote
/*
Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).
*/
class arrayFrastagliato
{
   public static boolean risp (long [] [] A)
   {
      boolean conf=false;
      int r;
      int c;
      //inizializza la tabella:
      for (r=0;r<A.length;r++)
          for(c=0;c<A[r].length;c++)
         A[r][c]=(long)(10*Math.random()+1);
            System.out.print(A[r][c] +"\t");
      
      for (int j=0;j<A.length-1;j++)
      {
         if(A[r][c]==A[r][c]+1)
            conf=true;
         System.out.println("Nell'array frastagliato sono presenti due elementi uguali");
      }
      return conf;
   }
   
   public static void main (String [] args)
   {
      boolean risp;
      long frast[][]=new long[5][];
      frast[0]=new long[4];
      frast[1]=new long[3];
      frast[2]=new long[2];
      frast[3]=new long[5];
      frast[4]=new long[3];
      for (int i=0;i<frast.length;i++)
      {
         frast=risp(frast);
      }
   }
}
l'errore...
Quote
>javac arrayFrastagliato.java
arrayFrastagliato.java:39: incompatible types
found   : boolean
required: long[][]
         frast=risp(frast);
                   ^
1 error
>Exit code: 1
ciao e grazie in anticipo...


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 07-01-2009, 16:55:05
il tipo di ritorno del metodo è boolean mentre la JVM nel main, al momento di chiamare il metodo risp si trova frast che è una matrice di long. .wink
Dovresti mettere:
Code:
risp=risp(frast); //senza for visto che devi stampare solo il boolean che è un valore singolo
e comunque sconsiglio di usare lo stesso nome sia per il boolean che per il metodo perchè è ad alto rischio confusione. Per convenzione le variabili (ed anche metodi e classi per la cronaca .whistling) vengono denominate con nomi coerenti al compito che devono svolgere (ad esempio il boolean puoi chiamarlo controllo oppure flag mentre il metodo ElementiUguali o cose simili).


Title: Re:esercizi seconda prova in itinere
Post by: Raro89 on 07-01-2009, 17:02:24
Fr3d3R!K...
grazie mille...voi del forum siete davvero d'aiuto...!!!


Title: Re:esercizi seconda prova in itinere
Post by: Raro89 on 07-01-2009, 17:22:58
Fr3d3R!K
per favore help...
dove sbaglio adesso?
rispetto a quello di prima c'è fatta qualche modifica ma non riesco a capire dove sbaglio...
di seguito codice ed errori

Quote
/*
Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).
*/
class arrayFrastagliato
{
   public static boolean risp (long [] [] A)
   {
      boolean conf=false;
      
      for (int r=0;r<A.length;r++)
           for (int c=0;c<A.length-1;c++)
      {
         if(A[r][c]==A[r+1][c+1])
         {
            conf=true;
            System.out.println("Nell'array frastagliato sono presenti due elementi uguali");   
         }
         else conf=false;
         System.out.println("Nell'array non sono presenti due elementi uguali");
         
         
         
      }
      return conf;
   }
   
   public static void main (String [] args)
   {
      boolean risp;
      long frast[][]=new long[5][];
      frast[0]=new long[4];
      frast[1]=new long[3];
      frast[2]=new long[2];
      frast[3]=new long[5];
      frast[4]=new long[3];
      int r;
      int c;
      //inizializza la tabella:
      for (r=0;r<frast.length;r++)
          for(c=0;c<frast[r].length;c++)
         frast[r][c]=(long)((long)15*Math.random()+1);
      
      for (r=0;r<frast.length;r++)
      {
         for (c=0;c<frast[r].length;c++)
            System.out.print(frast[r][c] +"\t");
          System.out.println();
      }
      
         risp=risp(frast);
      
   }
}


errori
Quote
13   13   2   5   
7   11   1   
9   7   
12   3   8   4   4   
1   11   7   
Nell'array non sono presenti due elementi uguali
Nell'array non sono presenti due elementi uguali
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
   at arrayFrastagliato.risp(arrayFrastagliato.java:15)
   at arrayFrastagliato.main(arrayFrastagliato.java:52)
>Exit code: 1
grazie in anticipo


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 07-01-2009, 18:00:25
13sima riga dove hai scritto:
Code:
for (int c=0;c<A.length-1;c++)
invece di:
Code:
for (int c=0;c<A[r].length-1;c++)


Title: Re:esercizi seconda prova in itinere
Post by: rox on 08-01-2009, 11:52:19
scusate qualcuno mi potrebbe dire cosa c'è di sbagliato in questo codice?
Code:
public class es5{
private int x;
private int []a;
public es5(int x)
{
this.x=x;

}
public String Genera(int x)
{      String generata="";
this.x=x;
Moneta m=new Moneta();
for (int i=0;i<x;i++)
{
m.effettuaLancio();
m.getFaccia();
if (m.getFaccia()=='C')
{
int z=(int)(Math.random()*3);
if (z==0)
{
generata+='e';
}else if (z==1)
{
generata+='i';
}
else if (z==2)
{
generata+='u';
}
}
if (m.getFaccia()=='T')
{ int y=(int)(Math.random()*2);
if(y==0)
{
generata+='a';
}
else generata+='o';
}
}return generata;
}
public String[] Generabis(int[] a)
{       int t=0;
this.a=a;
int somma=0,i;
for( i=0;i<a.length-1;i++)
{
somma+=a[i];

}
int m=(int)(somma/i);
for ( i=0;i<a.length;i++)
{
t=(int)(m+a[i]);


}
String[]b=new String[a.length];
for( i=0;i<a.length-1;i++)
b[i]=Genera(a[i]);
return b;
}
}
la consegna è questa:Esercizio 5 bis
Scrivere un metodo che prenda come parametri formali un array di interi A e restituisca in output un
corrispondente array di stringhe, in cui la i-esima stringa di lunghezza (m+A) è restituita dal
metodo Genera, e dove m è la media dei valori in A.


Title: Re:esercizi seconda prova in itinere
Post by: folle on 08-01-2009, 12:20:43
ciao a tutti vorrei cercare di capire xkè qsto codice nn fa qllo ke gli kiedo è molto banale...ma nn capisco...d sicuro sbaglio righe cn colonne..però vorrei almeno cercare d correggerlo...helllpppp .huh da premettere ke all'inizio l'ho fatto per due valori contigui xkè nn riuscivo a capire l'errore!!
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A
di long, e restituisca un boolean che indichi se esiste una riga in A
contenente tre elementi contigui uguali.*/
import java.lang.String;
import javax.swing.*;
public class esercizioa3
{
   public static boolean tre(long [][]a)
     {
         int r=0,c=0,s,t;boolean trovati=false;
         long temp=a[r][c];
         for(r=0;r<a.length;r++)
           {
               
               for(c=0;c<a[r].length-1;c++)
                {
                    c++;
                         if(temp==a[r][c])
                           trovati=true;
                         else
                           trovati=false;
                       
               
                }
            }
         return trovati;           
      }
public static void main(String []args)
     {     
       int i,j;
       long [][]A=new long[5][];
       A[0]=new long[2];
       A[1]=new long[4];
       A[2]=new long[3];
       A[3]=new long[5];
       A[4]=new long[3];
        for(i=0;i<A.length;i++)
         for(j=0;j<A[i].length;j++)
         A[i][j]=(long)(5*Math.random()+1);
         
         for(i=0;i<A.length;i++)
          {
              for(j=0;j<A[i].length;j++)
                  System.out.print(A[i][j] +"\t");
                  System.out.println();
          }
          System.out.println(tre(A));
      }
}
e mi da qsta stampa...errata ovviamente .poverinoi
grazie in anticipo se quancuno m risp


Code:
>javac esercizioa3.java
>Exit code: 0
>java esercizioa3
1 5
2 5 3 1
5 1 5
1 3 1 5 4
2 2 1
false
>Exit code: 0


Title: Re:esercizi seconda prova in itinere
Post by: Vivynz on 08-01-2009, 14:53:17
vale io l'ho fatto così  .wink sembra funzionare...
Code:
public static boolean treContigui(long[][] A)
{
for(int i=0;i<A.length;i++)
{
for(int j=0;j<A[i].length-2;j++)
{
if((A[i][j]==A[i][j+1])&&(A[i][j]==A[i][j+2]))
return true;
}
}
return false;
}


Title: Re:esercizi seconda prova in itinere
Post by: fabliux on 14-01-2009, 11:46:44
Code:
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S' ottenuta da S eliminando i primi due e gli ultimi due caratteri di ogni
stringa.

Come lo risolvereste??? postate la possibile soluzione.....Grazie.... :-ciao


Title: Re:esercizi seconda prova in itinere
Post by: ShiShi on 14-01-2009, 11:52:53
Code:
/*Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S’ ottenuta da S eliminando i primi due e gli ultimi due caratteri di ogni
stringa.*/

public class Nono
 {
    public static void main ( String [] args )
    {
        String [][] A = { { "lica" , "domani" , "luca" } ,
                       { "luc" , "lit" } ,
                       { "andrea" , "lito", "giorgio"} ,
                       { "andes" , "sergio" , "ahahahah"}};
        A=metodo(A);       
         for(int i=0;i<A.length;i++)
           {
            System.out.println("");
            for(int k=0;k<A[i].length;k++)
                System.out.print(A[i][k]+"|");
            }
    }
   
public static String [][] metodo (String[][]A)
    {
        for (int i=0; i<A.length; i++)
            for (int j=0; j<A[i].length; j++)
                {
                    A[i][j]=ControllaCaratteri (A[i][j]);
                }
                return A;
    }
public static String ControllaCaratteri (String A)
   {
       String O="";
           for(int i=2; i<A.length()-2; i++)
             O+= A.charAt(i);
           return O;
    }
}

Io l'ho fatto così.  .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: fabliux on 14-01-2009, 12:04:22
Code:
/*Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S’ ottenuta da S eliminando i primi due e gli ultimi due caratteri di ogni
stringa.*/

public class Nono
 {
    public static void main ( String [] args )
    {
        String [][] A = { { "lica" , "domani" , "luca" } ,
                       { "luc" , "lit" } ,
                       { "andrea" , "lito", "giorgio"} ,
                       { "andes" , "sergio" , "ahahahah"}};
        A=metodo(A);       
         for(int i=0;i<A.length;i++)
           {
            System.out.println("");
            for(int k=0;k<A[i].length;k++)
                System.out.print(A[i][k]+"|");
            }
    }
   
public static String [][] metodo (String[][]A)
    {
        for (int i=0; i<A.length; i++)
            for (int j=0; j<A[i].length; j++)
                {
                    A[i][j]=ControllaCaratteri (A[i][j]);
                }
                return A;
    }
public static String ControllaCaratteri (String A)
   {
       String O="";
           for(int i=2; i<A.length()-2; i++)
             O+= A.charAt(i);
           return O;
    }
}

Io l'ho fatto così.  .ciaociao

 Grazie mille.... .ciaociao


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 14-01-2009, 13:06:03
Code:
   public static boolean tre(long [][]a)
     {
         int r=0,c=0,s,t;boolean trovati=false;
         long temp=a[r][c]; [b]//questo è inutile[/b]
         for(r=0;r<a.length;r++)
           {
               for(c=0;c<a[r].length-1;c++)
                {
                    c++; [b]//e perchè visto che si incrementa già nel for?[/b]
                         if(temp==a[r][c]) [b]//confronti il primo elemento con quello corrente? non va devi avere 3 contigui dovunque nella riga[/b]
                           trovati=true; [b]//se ci sono elementi uguali al primo dal secondo posto in poi restituisce questo (visto che hai incrementato la c prima)[/b]
                         else
                           trovati=false;
                       
               
                }
            }
         return trovati;           
      }
sinceramente non capisco cosa fai in quel programma rispetto a ciò che chiede il testo...hai temp al quale assegni il primo valore, lo fai restare fisso, e lo confronti con gli altri elementi della matrice (il primo con tutti gli altri). Ma non è questo che chiede. Un esempio (fatto al volo ^^ ) per il tuo programma invece sarebbe
Code:
for(r=0;r<a.length;r++)
     for(c=0;c<a[r].length-2;c++)
          if(a[r][c]==a[r][c+1])
             if(a[r][c+1]==a[r][c+2])
                return true;
return false;
Saluti. .ciaociao
EDIT: se ti viene meglio puoi usare altri cicli for per gli indici.


Title: Re:esercizi seconda prova in itinere
Post by: ShiShi on 14-01-2009, 16:35:21
Code:
Scrivere un metodo che prenda come parametri formali un array di stringhe A e restituisca in output
un array B di m stringhe, dove:
• m è la lunghezza media delle stringhe in A di lunghezza maggiore di 5, e
• la i-esima stringa di B è ottenuta concatenando (m*i) asterischi.

Se non sbaglio qualcuno l'ha fatto e postato qui, ma vorrei sapere cosa chiede.
Fino al punto uno ci sono...ma non ho capito • la i-esima stringa di B è ottenuta concatenando (m*i) asterischi.

Qualcuno può farmi un esempio o è così gentile da spiegarmi meglio? .poverinoi


Title: Re:esercizi seconda prova in itinere
Post by: Fr3d3R!K on 14-01-2009, 16:52:14
esempio i=0 (m ipotizziamolo 5):
primo "giro" dell'array di stringhe, la prima sarà composta da 5x0 asterischi (1 stringa="");
i=1
secondo giro dell'array di stringhe, la seconda sarà composta da 5x1 asterischi (2 stringa="*****");
i=2
terzo giro, terza stringa composta da 5x2 asterischi (3 stringa="**********");

e così via fino alla fine...chiaro? .wink


Title: Re:esercizi seconda prova in itinere
Post by: ShiShi on 14-01-2009, 17:00:56
Chiarissimo, grazie! .smile