Pages: 1 ... 3 4 [5] 6 7 ... 9   Go Down
Print
Author Topic: esercizi seconda prova in itinere  (Read 24237 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #60 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();
}
}

@SpecialOne: guarda questo 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?
« Last Edit: 03-01-2009, 13:07:03 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #61 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...
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #62 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.
« Last Edit: 04-01-2009, 11:35:56 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #63 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...
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #64 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!
« Last Edit: 04-01-2009, 11:45:17 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #65 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....
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #66 on: 04-01-2009, 12:03:03 »

il break; è 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!
P.S. usala solo quando necessaria perchè non è molto ben vista come istruzione dicono che renda il codice poco lineare. Ma "quanno ce vò ce vò!!!" [Emoticon] Asd
« Last Edit: 04-01-2009, 12:07:16 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #67 on: 04-01-2009, 13:29:38 »

ho capito grazie!!! 
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #68 on: 04-01-2009, 13:57:38 »

giuro che sono le ultime cose che chiedo  pray pray

un esercizio è questo:
Link Immagine
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.
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #69 on: 04-01-2009, 15:34:09 »

P.S. usala solo quando necessaria perchè non è molto ben vista come istruzione 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) no.
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... 

giuro che sono le ultime cose che chiedo  pray pray
un esercizio è questo:
Link Immagine
(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<<

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? O forse non ho capito cosa s'intende con quest'ultima condizione ...
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #70 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. A quanto ho capito non si possono usare i metodi presenti nella classe Arrays. Altrimenti sarebbe (appunto) impossibile.
« Last Edit: 04-01-2009, 15:56:58 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Giovi89
Apprendista Forumista
**
Offline Offline

Posts: 273


« Reply #71 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!   
Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #72 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 )
« Last Edit: 04-01-2009, 20:16:51 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #73 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  .

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 .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
folle
Guest
« Reply #74 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!!!
Logged
Pages: 1 ... 3 4 [5] 6 7 ... 9   Go Up
Print
Jump to: