Pages: [1]   Go Down
Print
Author Topic: Un consiglio...  (Read 1467 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
sonj
Matricola
*
Offline Offline

Posts: 76



« on: 11-05-2011, 17:12:56 »

Salve... avrei bisogno di un consiglio. Vi illustro il mio problema apparentemente semplice,ma che non riesco a risolvere correttamente:

Ho 2 array,ad ex di dimensione 4,all'interno vi sono delle stringhe.
devo confrontare i due array e vedere quante stringhe vi sono uguali.
il risultato lo do con
si-> se le stringhe sono uguali e hanno lo stesso indice.
no-> se sono diverse
forse-> se le stringhe sono uguali ma sono messe in posizioni differenti(quindi indici diversi).
non vi devono essere ripetizioni cioè che se in un array la parola è ripetuta 2 volte e nell'altro solo una volta allora la risposta deve essere solo una.

qualcuno può aiutarmi??  pray
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #1 on: 11-05-2011, 18:15:00 »

stai facendo programmazione 1? se è così forse è meglio che ti sforzi di pensarla. Prova a pensare a cosa faresti tu per controllare i nomi uguali in due liste e poi vedi di scriverlo come algoritmo. Sicuramente intanto prendi i nomi da un elenco ad uno ad uno e li cerchi nell'altro, poi...
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!
sonj
Matricola
*
Offline Offline

Posts: 76



« Reply #2 on: 11-05-2011, 22:10:08 »

supponendo che le stringhe siano 4 colori (blu,giallo,verde,rosso);
un array lo inizializzo con una random,mentre l'altro con input da tastiera.
essendo poi che non vi devono essere ripetizioni.
 Cioè ad esempio un array è:A= blu blu verde giallo
e l'altro è B=verde blu rosso rosso
il risultato sarà:forse,si (senza contare due volte il blu in B)

Allora,spiego quello che ho provato a fare io...
con due cicli vedevo se c'erano colori uguali,in seguito mi sono messa gli indici dei colori di A in un terzo array(ciò per evitare ripetizioni) ... in due cicli a parte ho poi scansionato questo mio array di indici,facendo un controllo dei valori uguali,se questi valori erano uguali allora vedevo,se esisteva, qual'era l'elemento che ha la locazione uguale all'indice salvato(che poi registravo come si) e cancellavo altro dall'array....e cosi anche per le altre soluzioni.
UN EX di codice:
Code:
for(int i=0;i<A.length;i++)
        for(int j=0;j<B.length;j++)
          if(A[i]==B[j])
            indici[i]=j;//il terzo array

for(int i=0;i<indici.length-1;i++){
         for(int j=i+1;j<indici.length;j++){
           if(indici[i]==indici[j]){
               if(indici[i]==i){
                 array[i]=nera;
                 indici[j]=' ';
                 }
                 else if(indici[j]==j){
                   array[j]=si;//array è dove salvo le soluzioni
                   indici[i]=' ';//per cancellare metto il carattere vuoto
                   }
                else{
                  array[i]=forse;
                  indici[j]=' ';
                  }
              }
            else{
                if(indici[i]==i)
                  array[i]=si;
                else
                   if(indici[i]!=' ')
                    array[i]=forse
                }
              }
         }
 
Questo è il mio codice abbozzato solo che mi da problemi nei controlli credo,o forse ho proprio sbagliato il metodo  boh il fatto è che mi da soluzioni simili ma cmq sbagliate   testate Mi sapresti dire se piu o meno è corretto? che modifiche dovrei apportare o se cmq conosci un metodo migliore  [Emoticon] Asd
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #3 on: 11-05-2011, 22:26:12 »

non mi è chiaro l'uso dell'array ausiliario. Se io incontro due stringhe uguali nella stessa posizione, e subito dopo nella posizione successiva la stringa di B è ancora uguale, non sovrascrive la precedente? mentre prima sarebbe stato un si, così mio porterebbe ad un forse.
Comunque prima di vedere il codice fammi capire meglio il tuo ragionamento.
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!
sonj
Matricola
*
Offline Offline

Posts: 76



« Reply #4 on: 11-05-2011, 22:52:11 »

Effettivamente come ho scritto io fa dei controlli superflui alla stessa locazione
l'array ausiliare lo utilizzo per salvare solo gli indici,cosi se in A due locazioni puntano allo stesso valore segno l'indice di questo valore di B.(non so se sono chiara)
in effetti forse cosi faccio dei passaggi in più,ma utilizzando solo i due array non riuscivo a controllare se due elementi mi puntavano allo stesso elemento contando cosi due forse(scrivo forse,come es,potrebbe essere un forse e un si).
Quindi utilizzo questo array indici per inserire tutti gli indici delle stringhe uguali,senza fare nessun controllo. In seguito controllare se gli esistono degli indici uguali.
se esistono allora uno lo devo cancellare,quindi vedo quale elemento indice è uguale all'indice della locazione( quell'elemento indicherà la mia stringa alla posizione i-esima al posto giusto,il si) e inserisco nel array soluzioni il si nell'indice che ho trovato. invece l'altro indice lo cancello. Se Cmq non ci sono indici di locazione=all'elemento indice allora praticamente scelgo a caso un indice e poi inserisco nella soluzione il forse,mentre l'altro indice lo cancello...
Probabilmente è un caos totale  [Emoticon] Asd
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #5 on: 11-05-2011, 23:22:29 »

Quote
in effetti forse cosi faccio dei passaggi in più
più che fare passaggi in più credo ci sia un'errore. Se io sto controllando l'elemento i che sta in A, trovo B[j] uguale ad A[i ], mi segno l'indice j se continuando a scorrere B trovo che B[k] sarà anch'esso uguale ad A[i ]. Mi salverò k sovrascrivendo j. E così succederà di nuovo se abbiamo un l!=i tale che A[l]=B[i ]=B[k], alla fine mi troverò due volte k nell'array indici e questo è un errore.
« Last Edit: 13-05-2011, 13:36:02 by cock86 » 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!
sonj
Matricola
*
Offline Offline

Posts: 76



« Reply #6 on: 13-05-2011, 08:09:53 »

[ E così succederà di nuovo se abbiamo un l!=i tale che A[l]=B=B[k], alla fine mi troverò due volte k nell'array indici e questo è un errore.
in realtà ci avevo pensato... però pensavo potesse essere trascurabile
In effetti ora che ci penso con più lucidità in questo modo potrebbe non trovare dei si,xke salverebbe ad esempio le postazioni con il forse successivo.
mmmm... come potrei fare? dovrei dare un arrai molto più grande e salvare tutto? boh
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #7 on: 13-05-2011, 13:38:03 »

intanto avevo fatto un pò di confusione, avendo usato l'indice i la scrittura [i ] veniva vista come tag del corsivo.
Comunque a questo punto assodato il problema devi cambiare soluzione. Se tu dovessi fare una cosa del genere cosa faresti? fisicamente dico!
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!
sonj
Matricola
*
Offline Offline

Posts: 76



« Reply #8 on: 17-05-2011, 13:37:14 »

intanto avevo fatto un pò di confusione, avendo usato l'indice i la scrittura [i ] veniva vista come tag del corsivo.
Comunque a questo punto assodato il problema devi cambiare soluzione.
In che senso??  cool
Logged
cock86
Forumista Eroico
*****
Offline Offline

Posts: 2.014


OM


« Reply #9 on: 17-05-2011, 19:29:25 »

nel senso che usando l'indice [i ] il forum lo prende come tag e scrive in corsivo. Quindi ho corretto mettendo uno spazio tra la i e la ]. Magari eri riuscito a leggere ma scappava qualcosa.
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!
Pages: [1]   Go Up
Print
Jump to: