Condizione if non rispettata

di il
8 risposte

Condizione if non rispettata

Ho bisogno del vostro aiuto, non capisco perchè pur essendoci l'if(max!=i) entra lo stesso nel ciclo senza rispettare la condizione



void heapify(int a[],int dim,int i){

int l,r,max;

l=sinistro(i);
r=destro(i);

if (l<dim && a[l]>a[i])
    max=l;
else
    max=i;
if(r<dim && a[r]>a[max])
    max=r;

if(max !=i ){
    scambio(a,i,max);
    heapify(a,dim,max);}

}

8 Risposte

  • Re: Condizione if non rispettata

    Perdonaci ma di quale ciclo parli?
  • Re: Condizione if non rispettata

    Diciamo di questo pezzo qui,è qui che non rispetta l' if:

    if(max !=i ){
    scambio(a,i,max);
    heapify(a,dim,max);}

    }
  • Re: Condizione if non rispettata

    E' strano! Prova ad inserire delle printf di debug e vedi i valori di i e max fuori e d'entro quell'if.
  • Re: Condizione if non rispettata

    Facendo il controllo ho visto che non prende il valore di i.
    Il programma è questo, non capisco perchè mi fa quest'errore.
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 8
    
    void converti(char s[],int a[]);
    void creaheap(int a[],int dim);
    void heapify(int a[],int dim,int i);
    int sinistro(int i);
    int destro(int i);
    void scambio(int arr[],int a,int b);
    void heapsort(int a[], int dim);
    int main()
    { char s[10];
      int i;
      int arr[N];
    
      printf("Inserisci data (nel formato gg/mm/aaaa):\n");
      scanf("%s",s);
      converti(s,arr);
       for(i=0;i<8;i++){
        arr[i]=arr[i]-48;
        }
    
      printf("\nCostruzione array:\n");
    
      for(i=0;i<8;i++){printf("%i ",arr[i]);}
    
      printf("\n\nArray dopo costruzione heap:\n");
    
      creaheap(arr,N);
    
      for(i=0;i<8;i++){printf("%i ",arr[i]);}
    
      printf("\n\nArray ordinato con heapsort:\n");
    
      heapsort(arr,N);
    
      for(i=0;i<8;i++){printf("%i ",arr[i]);}
    
      system("PAUSE");
    
      return 0;
    }
    
    void converti(char s[],int a[]){
    
    a[0]=s[0];
    a[1]=s[1];
    a[2]=s[3];
    a[3]=s[4];
    a[4]=s[6];
    a[5]=s[7];
    a[6]=s[8];
    a[7]=s[9];}
    
    int sinistro(int i){
        return (2*i);
    }
    int destro(int i){
        return (2*i+1);
    }
    
    void scambio(int a[],int x,int y){
     int temp;
    
         temp=a[x];
         a[x]=a[y];
         a[y]=temp;
    
    }
    
    void heapify(int a[],int dim,int i){
    
    int l,r,max;
    
    l=sinistro(i);
    r=destro(i);
    
    if (l<dim && a[l]>a[i])
        max=l;
    else
        max=i;
    if(r<dim && a[r]>a[max])
        max=r;
    printf("\ni=%d max=%d",i,max);
    if(max !=i ){
        scambio(a,i,max);
        printf("\ni=%d max=%d",i,max);
        heapify(a,dim,max);}
    
    }
    
    void creaheap(int a[],int dim){
    
     int i;
     for(i=dim/2;i>=0;i--){
    
        heapify(a,dim,i);
    
     }
    }
    
    void heapsort(int a[],int dim){
    
    int i;
    
    for(i=dim-1;i>=1;i--){
    
        scambio(a,0,i);
        dim--;
        heapify(a,dim,0);
    }
    
    }
    
  • Re: Condizione if non rispettata

    Perdonami, che cosa significa non prende il valore di i
  • Re: Condizione if non rispettata

    L'heapify() dovrebbe prendere il valore "i" dalla funzione creaheap()...invece facendo la prova a stampare i mi da i=0;
  • Re: Condizione if non rispettata

    Ascolta... purtroppo non posso compilare e fare debug, però accetta questo consiglio, prova a fare debug mettendo delle stampe supplementari oppure utilizzando un debugger. Imparare a debaggare è una delle qualità che un buon sviluppatore deve possedere. Prima o poi questa competenza pagherà!
  • Re: Condizione if non rispettata

    Non userai mica vero?
Devi accedere o registrarti per scrivere nel forum
8 risposte