Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C] ricerca binaria ricorsiva

    dite la verità vi stavate preoccupando di me perchè oggi non postavo nulla

    oggi è una stupidaggine molto grossa!

    codice:
    #include <stdio.h>
    #define dim 100
    
    void leggivet (int a[], int n);
    int ricercaRicorsiva (int a[], int inf, int sup, int x);
    
    int main(){
        int a[dim], x, n, inf, sup;
        
        leggivet(a, n);
        
        printf("numero da ricercare = ");
        scanf("%d", &x);
        
        
    printf("%d\n", ricercaRicorsiva (a, inf, sup, x));
        
    system ("pause");
    return 0;
    
    }
    
    
    
    void leggivet(int a[], int n){
         
         int i;
         
         printf("inserire dimensioni vettore (max %d) = ", dim);
         scanf("%d", &n);
         
         
         for(i=0;i<n;i++){
         printf("a[%d]= ", i);
         scanf("%d", &a[i]);
         }
    
    }//fine leggivet
    
    int ricercaRicorsiva (int a[], int inf, int sup, int x){
        
        int med;
        int trovato;
        
        if(inf>sup)
         trovato=0;
             else {
             med=(inf+sup)/2;
             if(x==a[med])
              trovato=1;
             if (x>a[med])
             trovato = ricercaRicorsiva(a, med+1, sup, x);
             else 
                  trovato = ricercaRicorsiva(a, inf, med-1, x);
             }
    return trovato;
    }
    come da titolo questo programma molto stupido, dovrebbe caricare un vettore a[dim] e cercare un valore in questo caso "x", se viene trovato deve restituirmi 1 altrimenti 0. Il mio problema è che mi da sempre 0. L'unica cosa che mi viene in mente è che il valore x per un qualche motivo non viene passato alla funzione "ricercaRicorsiva". Voi che mi dite?

  2. #2
    La prima cosa che si vede... Quanto valgono inf e sup quando fai la chiamata alla funzione?

  3. #3
    dici la chiamata nel main? dovrei inizializzarli?

  4. #4
    Certo che si..

  5. #5
    gli ho inizializzati per inf=0; e sup=n-1; ma il programma va in crash

  6. #6
    codice:
    #include <stdio.h>
    #define dim 100
    
    void leggivet (int a[], int n);
    int ricercaRicorsiva (int a[], int inf, int sup, int x);
    
    int main(){
        int a[dim], x, n, inf, sup;
        
        leggivet(a, n);
        
        printf("numero da ricercare = ");
        scanf("%d", &x);
        
        
    printf("%d\n", ricercaRicorsiva (a, inf, sup, x));
        
    system ("pause");
    return 0;
    
    }
    
    
    
    void leggivet(int a[], int n){
         
         int i;
         
         printf("inserire dimensioni vettore (max %d) = ", dim);
         scanf("%d", &n);
         
         
         for(i=0;i<n;i++){
         printf("a[%d]= ", i);
         scanf("%d", &a[i]);
         }
    
    }//fine leggivet
    
    int ricercaRicorsiva (int a[], int inf, int sup, int x){
        
        int med, n;
        int trovato;
        
        inf=0;
        sup=&n-1; 
        
        if(inf>sup)
         trovato=0;
             else {
             med=(inf+sup)/2;
             if(x==a[med])
              trovato=1;
             if (x>a[med])
             trovato = ricercaRicorsiva(a, med+1, sup, x);
             else if (x<a[med])
                  trovato = ricercaRicorsiva(a, inf, med-1, x);
             }
    return trovato;
    }
    RISOLTO...avevi ragione ingnà, bisognava inizializzarli...ma anche dargli l'indirizzo della "n". Inizia ad essere tutto molto più chiaro questo linguaggio che inziavo ad odiare! , ma fa ancora schifo la mia indentazione?

  7. #7
    Hai inizializzato sup a n-1..
    Prova a mettere
    codice:
    printf("n=%d",n);
    dopo
    codice:
    leggivet(a, n);
    Che succede?

  8. #8
    ma la n l'acquisisco già nel leggi vet

  9. #9
    Ti volevo fare capire che visto che non avevi passato il puntatore ad n nella funzione leggivet il valore n risultava non ben definito..Quindi quando settavi sup = n-1(nel main dovevi farlo) il programma crashava ..

  10. #10
    ma la n l'acquisisco già nel leggi vet
    Non hai capito allora..In quel modo la n avra' quel valore SOLO nella funzione leggi(la setti solo per quella funzione;nel programma non si vedrà quel valore)..appena la funzione termina quel valore muore con essa..

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.