Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    [C] Operatori not e ritorno funzioni

    Ho un programma che a un certo punto dell'esecuzione ha due while
    codice:
    while (a[i].id<x.id) i++; 
    while (a[j].id>x.id) j--;
    Per vari motivi mi serve generalizzare il confronto interno al while, utilizzando una funzione:
    codice:
    int confronta(int i, myStruct *a, myStruct x)
    {
        return a[i].id < x.id;         
    }
    Riscrivo il primo while come
    codice:
    while (confronta(i, ID, a, x)) i++;
    Tutto Ok!!! Ora a rigor di logica il secondo while dovrebe essere il risultato della funzione però negato, in quanto stavolta il confronto non è minore come nella funzione ma è maggiore, quindi il risultato va negato e l'indice da passare non è più i ma j, quindi:
    codice:
    while (!confronta(j, ID, a, x)) j--;
    Ma così non funziona, idee???

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se non e' < (minore) allora e' >= (maggiore o uguale), non "strettamente" maggiore ...

    Questo puo' darti problemi ...

    Pero' non vedo motivi per usare quella funzione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Quei due while fanno parte di un algoritmo di quicksort. Ho anche altri due algoritmi di ordinamento. Ognuno degli algoritmi deve poter ordinare su 4 campi di una struttura.
    Se volessi fare a meno di quella funzione ogni algoritmo di ordinamento, avrebbe, nelle righe di confronto codice extra enorme, pieno di if per capire che campo della struttura scegliere e per capire se usare uno strcmp nel caso confronto stringhe o un > nel caso di confronto interi.

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    la funzione confronta ritorna un int.. non credo proprio che l'operatore di negazione funzioni..

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Ho provato scrivendo
    codice:
    int a = 1;
    printf("%D", !a);
    e funziona.

    Cmq ho risolto modificando:
    codice:
    int confronta(int i, myStruct *a, myStruct x, int *ritorno)
    {
        ritorno[0] a[i].id < x.id;  
        ritorno[0] a[i].id > x.id;       
    }
    // ...
    int r[2];
    while (confronta(i, ID, a, x, r), r[0]) i++;
    while (confronta(j, ID, a, x, r), r[1]) j--;
    Non è molto elegante ma funziona!!!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma cosa vuol dire questo

    codice:
     ritorno[0] a[i].id < x.id;  
     ritorno[0] a[i].id > x.id;
    ??
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Originariamente inviato da oregon
    Ma cosa vuol dire questo

    codice:
     ritorno[0] a[i].id < x.id;  
     ritorno[0] a[i].id > x.id;
    ??
    La seconda riga è:
    codice:
    ritorno[0] a[j].id > x.id;

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma anche fosse, ripeto, che vuol dire?
    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.