[C] problema con programma ricorsivo

di il
5 risposte

[C] problema con programma ricorsivo

Ecco il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void ricorsione_div(int *, int, int, int , int);
void ricorsione(int *, int , int m, int, int);
long conta=0;

int main(int argc, char *argv[])
{
    int i,j,dim, *vet;
    float t0,t1;

    if(argc<2)
    {
        printf("Errore numero argomenti: %s N\n\n",argv[0]);
        exit(EXIT_FAILURE) ;
    }
    dim=atoi(argv[1]);
    vet=malloc((dim+1)*sizeof(int));

    for(i=0; i<dim; i++)
    {
        vet[i]=rand()%100;
        printf("elemento %d: %d\n",i+1,vet[i]);
        // scanf("%d", &vet[i]);
    }
    printf("\n");

    t0 = ((float)clock())/CLOCKS_PER_SEC;

    ricorsione_div(vet,0,dim,i, dim);

    t1 = ((float)clock())/CLOCKS_PER_SEC;
    printf("\ncoppie trovate e': %lu\n", conta);

    printf("\nTempo di esecuzione in secondi: %f\n", t1-t0);
    return 0;
}
void ricorsione_div(int *vet,int l,int r, int i, int dim)
{
    int m;
    m=(l+r)/2;
    if(r<=l)
    {
        return;
    }
    ricorsione_div(vet,l,m,i ,dim);
    ricorsione_div(vet,m+1,r, i, dim);
    ricorsione(vet,l,m,r, dim);
    return;
}
void ricorsione(int* A ,int l, int m, int r, int dim)
{
    int i, j, k;
    i = m;
    for (k = i; k < dim; k++)
    {
        if ( A[i]> A[k] && i<k)
            conta++;
    }
}
return;
}

5 Risposte

  • Re: [C] problema con programma ricorsivo

    Ma guarda, è esattamente uguale al primo esercizio di laboratorio del mio corso di questa settimana... e guardacaso è un esercizio valutato... ma che strano..........
  • Re: [C] problema con programma ricorsivo

    dvaosta ha scritto:


    Ma guarda, è esattamente uguale al primo esercizio di laboratorio del mio corso di questa settimana... e guardacaso è un esercizio valutato... ma che strano..........
    e quindi? non ti va di risolverlo?
  • Re: [C] problema con programma ricorsivo

    Io l'ho risolto per conto mio. Dal momento che è valutato, non sarebbe giusto che tu lo risolvessi chiedendo in un forum di programmatori, non ti pare?
  • Re: [C] problema con programma ricorsivo

    dvaosta ha scritto:


    Io l'ho risolto per conto mio. Dal momento che è valutato, non sarebbe giusto che tu lo risolvessi chiedendo in un forum di programmatori, non ti pare?
    beh se hai visto ho messo una soluzione scritta da me. sto solo chiedendo consigli per migliorarla se poi ci sono ci sono persone come te che riescono a risolvere questi problemi tranquillamente, e non vogliono aiutare chi chiede aiuto per me va bene. se ti va potresti anche dirmi come migliorare il mio algoritmo anche perchè non riesco a trovare una soluzione migliore di quella scritta.
  • Re: [C] problema con programma ricorsivo

    Allora intanto guarda la tua funzione di merging:
    -a cosa serve dim (immagino sia la dimensione del vettore) se hai già gli estremi destro e sinistro (tra l'altro, vuoi dim anche nella funzione di divisione, anche se di fatto non lo usi mai, se non nelle chiamate dell'altra funzione);
    -sempre su questa scia, serve a qualcosa il parametro i nella funzione di divisione?
    -nella funzione di merging, a cosa serve nell'if la condizione i<k se tanto nel for poni che k va da i fino alla fine del vettore (che è >= di i per come richiami la funzione di merging in quella di divisione); anche se i 2 indici fossero uguali, la condizione A> A[k] sarebbe sufficiente no? Se invece quella condizione è necessaria, devi aver sbagliato a monte;

    Per finire, c'è un errore di battitura che impedisce la compilazione. Da questo deduco che il codice non l'hai scritto tu (altrimenti l'avresti almeno provato, anche perché l'errore è davvero facile da trovare), quindi non provare a impietosirmi.

    Adesso si tratta solo di un paio di trentesimi, ma magari un domani copierai a degli esami e ti laureerai con un punteggio più alto di me, fregandomi magari il lavoro. Quindi no, non te ne passo neanche una.

    ciao
Devi accedere o registrarti per scrivere nel forum
5 risposte