Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Concetto logico sui cicli annidati

    Ho un problema di questo tipo, devo verificare che ogni riga di testo del file A sia contenuta anche nel file B (non conta l'ordine ne la posizione, l'importante è che ci sia) e nel caso in cui una riga di A non sia presente in B venga scritta sul file C.

    Il punto è questo, io ho provato a fare due cicli annidati dove il ciclo esterno svoglia il file A e l'interno il file B, quindi ho fatto un confronto se A[x] != B[y] dove y è l'indice del for interno, sono diversi allora scrivi sul file C.
    Ma visto che l'ordine e la posizione non contano, ovviamente il confronto di prima non fa altro che scrivere tutto il file A in C perchè giustamente in B c'è per forza la riga diversa e non riesco a uscirne fuori.

    Come posso avere la certezza che una riga di A non sia assolutamente presente in B se il controllo (if) interno fa ogni volta una verifica riga x riga..
    La curiosità è la fonte della conoscenza.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Imposti all'ingresso del ciclo interno una variabile booleana a false e se trovi la riga nel ciclo, esci dallo stesso impostando la variabile a true.

    All'uscita dal ciclo esterno, se la variabile booleana è false, scrivi la riga in C.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ho provato a fare questo ma il risultato è identico, in C mi ritrovo tutto A e se ovviamente nell'if finale faccio test!=false il file rimane vuoto. :

    codice:
       test = false;
            for ( i; i<SELECTSIZE; i++){
    		for ( y; y<DBSIZE; y++){
    			if (FILEA[i] == FILEB[y]){
                                test == true;
                                break;
    			}
    		}
                    if(test==false)
                        FILEC << FILEA[i] << "\n";
            }
    La curiosità è la fonte della conoscenza.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da oregon
    Imposti all'ingresso del ciclo interno una variabile booleana a false e se trovi la riga nel ciclo, esci dallo stesso impostando la variabile a true.

    All'uscita dal ciclo interno, se la variabile booleana è false, scrivi la riga in C.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ho provato questo, scusa se non afferro alla prima i suggerimenti ma sono parecchio arrugginito , cmq sia anche questo mi da lo stesso e identico risultato, tutto o niente.

    codice:
            for ( i; i<SELECTSIZE; i++){
    		for ( y; y<DBSIZE; y++){
                            test = false;
                            if (bufferSelect[i] == bufferDB[y]){
                                test == true;
                                break;
    			}
    *                        break;
    		}
                    if(test==false)
                        risultato << bufferSelect[i] << "\n";
            }
    Ho l'impressione che non esco correttamente dal ciclo interno nel caso in cui trovo la riga perchè esattamente nella riga che ho messo l' *, quel break secondo me non fa nulla e il ciclo ricomincia riassegnando a test il valore di false e quindi alla fine test ha il reale valore solo dell'ultimo confronto che quasi certamente non è uguale e quindi scrive in risultato tutto il file A... Mi sbaglio?
    La curiosità è la fonte della conoscenza.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ...

    1) primo for

    2) variabile a false

    3) secondo for

    4) if ... se uguale, variabile a true e break

    5) chiudi secondo for

    6) if variabile ed eventuale scrittura in C

    7) chiudi primo for
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Non so più che fare, ho scritto come consigliato da te :

    codice:
            for ( i; i<SELECTSIZE; i++){
                  test = false;
    		for ( y; y<DBSIZE; y++){
                            if (bufferSelect[i] == bufferDB[y]){
                                test == true;
                                break;
    			}
    		}
                    if(test==false)
                        risultato << bufferSelect[i] << "\n";
            }
    Dal punto di vista logico, per quanto ne so, dovrebbe funzionare cosi, ma niente, in "risultato" mi mette tutto quello che c'è in "bufferSelect[i]".

    PS: Ho modifica il messaggio prima di questo con una nota che forse non hai letto.

    Cmq ti ringrazio fino ad ora.
    La curiosità è la fonte della conoscenza.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prima di tutto

    for ( i=0; i<SELECTSIZE; i++){

    e

    for ( y=0; y<DBSIZE; y++){

    e poi controlla che effettivamente qualche volta la if venga eseguita (metti un breakpoint sul break)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    ... e poi
    codice:
    test = true;
    non
    codice:
    test == true;

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da zucchino
    ... e poi
    codice:
    test = true;
    non
    codice:
    test == true;
    Giusto ... non l'avevo neanche notato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.