Poll
Question: Mi postate una soluzione??
grazie - 0 (0%)
grazie - 1 (100%)
Total Voters: 1

Pages: [1] 2   Go Down
Print
Author Topic: Programmazione 1  (Read 2051 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
luky_ct
Matricola
*
Offline Offline

Posts: 3


« on: 07-12-2010, 19:11:02 »

ragazzi ho un problema nn riesco a risolvere qst esercizio:"data una matrice di interi"verificare se hanno almeno una riga uguale...help!!!mi postate se avete un file cn qst esercizio già svolto???grazie
Logged
gianluca
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 129



« Reply #1 on: 07-12-2010, 19:58:42 »

ciao...stasera mi è imnpossibile,domani la posto... pc

-è quadrata o frastagliata?

così sarò più preciso...
 

buona serata a tutti...

GG
 
« Last Edit: 07-12-2010, 20:01:14 by gianluca » Logged

*Ho paura di cadere..ma ho anche tanta voglia di volare..questa è la mia contraddizione*
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #2 on: 07-12-2010, 21:54:36 »

Allora, ho supposto che la matrice non fosse frastagliata, prima di postarti la mia soluzione, che mi sembra abbastanza corretta vorrei provare a farti ragionare, per risolvere l'esercizio devi tenere presente che:

Sia il nostro array:

{1,2,3}
{4,5,6}
{7,8,9}
{3,2,1}

Parti dalla prima riga, quindi abbiamo un ciclo for iniziale per

Quote
{1,2,3}

Devi confrontarla con tutte le altre righe giusto?

Allora ti servirà un secondo for che scansiona tutte le altre righe confrontandole con la prima.

Infine dentro questi due for, un altro ciclo che prende la colonna, ad esempio la chiamiamo k, e confronta gli elementi, poi di volta in volta viene incrementata.

Mi sono spiegato malissimo...  cry

Per farla breve:

Code:
for(.......................)  //e scansiono la prima riga...il for poi scenderà di riga
          {
               for(..............)  //e con questo controllo la riga di sotto, e devo scorrerle tutte per confrontarle con la prima
               {

                    for(int k=0 ................)  //faccio i controlli sulle colonne

All'interno dell' ultimo for potresti usare un contatore per vedere quanti elementi sono uguali....se sono tutti allora le righe sono uguali.

E' un pò difficile....non sono bravo a spiegare le cose....se proprio non riesci....ti darò la soluzione  
« Last Edit: 07-12-2010, 21:57:01 by Daréios » Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Luxandro
Apprendista Forumista
**
Offline Offline

Posts: 307



« Reply #3 on: 08-12-2010, 11:27:33 »

 

Come dice Daréios non ha senso postare l'esercizio risolto!

Sarebbe meglio ragionarci e capire il meccanismo 
Logged

"Quando non stai guardando è come un'onda. Quando guardi è come una particella!"
gianluca
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 129



« Reply #4 on: 08-12-2010, 11:43:27 »

Ma per riga uguale si intende che:

- esistano 2 righe aventi gli stessi elementi ma con posizioni diverse?

- esistono 2 righe aventi gli stessi elementi ma con posizioni uguali?

grazie

gg
Logged

*Ho paura di cadere..ma ho anche tanta voglia di volare..questa è la mia contraddizione*
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #5 on: 08-12-2010, 15:10:44 »

Ma per riga uguale si intende che:

- esistano 2 righe aventi gli stessi elementi ma con posizioni diverse?

- esistono 2 righe aventi gli stessi elementi ma con posizioni uguali?

grazie

gg

Bè credo la seconda, in effetti due righe sono uguali se hanno gli stessi elementi identici nelle medesime posizioni.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
luky_ct
Matricola
*
Offline Offline

Posts: 3


« Reply #6 on: 08-12-2010, 21:30:12 »

ragazzi niente nn riesco a capire ho proble solo cn qst esercizio gli altri li ho risolti senza nessun problema...mah meglio che cambi mestiere [Emoticon] Asd
Logged
luky_ct
Matricola
*
Offline Offline

Posts: 3


« Reply #7 on: 08-12-2010, 22:06:10 »

grazie ragazzi sn riuscito a risolverlo siete dei grandiiiiiiiiiiiiii
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #8 on: 08-12-2010, 22:24:08 »

perchè non sostituisci il terzo for con il while che ti permette di uscire dal ciclo appena si trova il primo valore diverso e non controllare inutilmente gli altri.
Logged

Un "buon informatico" trova una soluzione ad ogni tipo di problema. Un "ottimo informatico" trova la soluzione più efficiente ad ogni tipo di problema! Non stancatevi di migliorare la vostra soluzione!
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #9 on: 08-12-2010, 23:52:32 »

perchè non sostituisci il terzo for con il while che ti permette di uscire dal ciclo appena si trova il primo valore diverso e non controllare inutilmente gli altri.

Ecco si, qualcosa non mi convinceva, sentivo da lontano l' odore di efficienza  ok
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
antonio21
Matricola
*
Offline Offline

Posts: 26


« Reply #10 on: 09-12-2010, 11:09:21 »

salve a tutti anke a me come luky_ct nn riesce questo esercizio.. pero ho provato a farlo lo stesso.... e vorrei chiedervi: secondo voie giusta una cosa  del genere?? casomai potreste dirmi dove sono gli errori?? GRAZIE 1000 in anticipo....
public class Rigauguale
{
   public static void main(String[]args)
   {
      int[][] matrice= new int[3][4];
      int riga1;
      int riga2;
      int colonna;
      for(riga1=0;riga1<3;riga1++)
      {
         riga2=riga1+1;
         for(riga2=0;riga2<3;riga2++)
         {
            for(colonna=0;colonna<4;colonna++)
            {
               if(matrice[riga1][colonna]==matrice[riga2][colonna])
               {
                  System.out.println("Trovato");
               }
               System.exit(0);
            }
         }
      }
   }
}
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #11 on: 09-12-2010, 15:43:49 »

 

E' impostato un pò male.....praticamente c'è subito una cosa che non mi quadra:

Quote
  int riga1;
      int riga2;
      int colonna;
      for(riga1=0;riga1<3;riga1++)
      {
         riga2=riga1+1;
         for(riga2=0;riga2<3;riga2++)

Perchè prima inizializzi riga2=riga1+1 e subito sotto metti un for dove reinizializzi la cosa?
L'idea non è male.....basta fare una cosa di questo tipo:

Code:
for(riga1=0; riga1<3; riga1++)              //prima riga della matrice
{
for(riga2=riga1+1; riga2<4; riga2++)    //la riga da confrontare parte sempre da quella precedente +1

E stai attento...che nel for tu avevi messo la condizione che le righe fossero entrambe minori di 3 e non va bene.
Il primo for deve essere minore di 3 perchè si ferma alla penultima riga, mentre il secondo for deve essere minore di 4, perchè parte da 0 e arriva a 3 fino alla fine della matrice.
Non so se rende l' idea.

Quote
for(colonna=0;colonna<4;colonna++)
         {
            if(matrice[riga1][colonna]==matrice[riga2][colonna])
            {
               System.out.println("Trovato");
            }
            System.exit(0);
         }

System.exit(0) dovrebbe essere usata con la JOptionPane, non mi pare serva qui.
Attento che il tuo controllo non va...così gli stai dicendo se trovi un solo elemento uguale stampami trovato, ma è sbagliato! Tu devi dirgli se trovi tutti gli elementi uguali allora sono uguali le righe e stampami Trovato.
Così stampi anche se trovi solamente due valori uguali ma non basta.
Potresti usare un boolean che imposti a false e una variabile che conta gli elementi uguali.
Se il numero di elementi uguali è pari alla lunghezza della riga allora imposta il boolean a true.
Alla fine stampi a video il booleano.
Se non ti è chiara qualcosa chiedi che al massimo stasera ti rispondo.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
antonio21
Matricola
*
Offline Offline

Posts: 26


« Reply #12 on: 09-12-2010, 19:09:20 »

nn mi viene  testate potresti se hai tempo farmi vedere come viene con il boolean?? grazie sempre in anticipo
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #13 on: 09-12-2010, 20:20:30 »

nn mi viene  testate potresti se hai tempo farmi vedere come viene con il boolean?? grazie sempre in anticipo

E va bene....

Scusa l' indentazione che non è il massimo, mi sembra vada bene così, se non capisci qualcosa non esitare a chiedere che dopo cena ritorno.

Code:
public class Rigauguale
{
   public static void main(String[]args)
   {
      //int[][] matrice= new int[3][4];
   
int[][]matrice={{1,3,2},         //matrice di esempio sono uguali la penultima e l' ultima riga
      {2,3,1},
      {4,5,5},
      {4,5,5}};
   
 //     int riga1;        NON HA SENSO, LE DICHIARIAMO E INIZIALIZIAMO NEI FOR
 //     int riga2;
    //  int colonna;
     
int uguali=0;                      //SERVIRA' A CONTROLLARE I NUMERI UGUALI NELLE COLONNE
boolean trovato=false;          //QUESTO MI DIRA' SE ESISTONO O MENO LE RIGHE CHE CERCAVO
     

for(int riga1=0; riga1<3; riga1++)                           //QUESTA VA DALLA PRIMA RIGA ALLA PENULTIMA.....FAI CASO CHE NON DEVE ARRAIVARE ALLA FINE SENNO' ARRAYINDEXOUTOFBOUNDS
{
for(int riga2=riga1+1; riga2<4; riga2++)             //QUESTO VA DALLA SECONDA RIGA FINO ALLA FINE, PERCHE' CONTROLLO RIGA1 CON LA 2 E POI RIGA2 SCENDE PERCHE' DEVO CONFRONTARE RIGA1 CON TUTTE LE RIGHE DELLA MATRICE
{
for(int colonna=0;colonna<3;colonna++)                                    //SCORRO LE COLONNE....SI POTREBBE FARE CON UN WHILE PER EVITARE I CONFRONTI INUTILI
{
if(matrice[riga1][colonna]==matrice[riga2][colonna])
{
uguali++;
}
if(uguali==matrice[riga1].length)           //SE ABBIAMO UN NUMERO DI ELEMENTI UGUALI CHE COINCIDE CON LA LUNGHEZZA DELLE RIGHE ALLORA SARANNO UGUALI
trovato=true;                               //IMPOSTA TRUE IL BOOLEANO
}
uguali=0;                        //LO AZZERO PERCHE' SCENDO SOTTO(RIGA2 SCENDE IN BASSO) E ALLORA DEVO RICOMINCIARE IL CONTEGGIO
}
}

System.out.println(trovato);             //EUREKA!!!!
     
}
}
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
CoreyTaylor26
Matricola
*
Offline Offline

Gender: Male
Posts: 78



« Reply #14 on: 13-12-2010, 17:18:52 »

Il tuo codice è sbagliato!  nono
Innanzitutto quel boolean non credo servi a qualcosa come lo stai usando tu, infatti togliendolo non cambia nulla!  boh
Poi in secondo luogo, prova a mettere all'interno dell'Array tutte righe diverse.. il tuo codice ti dice ugualmente "trovato" anche se in realtà non c'è nulla!

Dovresti sistemarlo in questo modo:

Code:
public class Rigauguale
{
   public static void main(String[]args)
   {
int[][]matrice={{1,3,2},
      {2,3,1},
      {4,5,5},
      {4,5,5}};
     
int uguali=0;

for(int riga1=0; riga1<3; riga1++)
{
for(int riga2=riga1+1; riga2<4; riga2++)
{
int colonna=0;
while (colonna<3)
{
if(matrice[riga1][colonna]==matrice[riga2][colonna])
uguali++;
if(uguali==matrice[riga1].length)
System.out.println("Trovato");
colonna++;
}
uguali=0;
}
}
    }
}
Logged
Pages: [1] 2   Go Up
Print
Jump to: