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

    [c]Divide et Impera

    Salve a tutti,ho appena sviluppato uno dei miei primi programmi con l'approccio Divide et Impera per la somma di n numeri...però ho un problema se voglio cambiare la quantità dei numeri ho un problema!ovvero devo cambiare il sorgente per inserire il logaritmo in base 2 del totale dei numeri!
    nn so se sono stato chiaro...cmq mi servirebbe un fanction che calcola il log in base 2 di n!vi posto il mio sorgente:
    //Approccio Divide et Impera

    #include <stdio.h>
    #include <math.h>

    #define MAX_SIZE 100

    int somm_radd(int [],int,int);

    void main()
    {
    int array[8],i;
    char ris;

    do
    {


    for (i=0;i<8;i++)
    {
    printf("inserisci numero di indice %d\n",i);
    scanf("%d",&array[i]);
    }
    printf("La somma e' %d\n",somm_radd(array,8,3));

    printf("Vuoi ripetere il programma?(s/n)\t");
    scanf(" %c",&ris);
    fflush(stdin);
    }while(ris=='s' || ris=='S');

    }


    int somm_radd(int a [],int n,int log2)
    {
    int k,i;
    for (k=log2;k>0;k--)
    {
    for(i=0;i<=pow(2,(k-1));i++)
    a[i-1]=a[2*i]+a[2*(i-1)];
    }
    return a[0];
    }

    grazie per l'attenzione spero che possiate darmi una mano!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Un esempio per il calcolo del log in base 2

    codice:
       int x, y;
    	
       x = 8;
       y = (int)(log((double)x)/log(2.0));
    
       printf("%d\n", y);
    adattalo al tuo problema ...

  3. #3
    Ciao ti ringrazio per la tua risposta!però ho ancora un problema nn so perchè ma se uso visual c++ il logaritmo nn viene calcolato bene e di conseguenza anche la somma invece in turbo c++ il logaritmo viee calcolato bene ma la somma no!posto le due function che ho creato quella del log (postata da te e modificata)e quella della somma con approccio divide et impera

    int somm_radd(int a [],int n)
    {
    int k,i;
    for (k=log2(n);k>0;k--)
    {
    for(i=0;i<=pow(2,(k-1));i++)
    a[i-1]=a[2*i]+a[2*(i-1)];
    }
    return a[0];
    }
    int log2 (int n) //prende in input il size dell'array
    {

    return (int)(log((double)n)/log(2.0));

    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Che vuol dire "il logaritmo non viene calcolato bene"?

    Se lo dici, saprai dare maggiori dettagli ...

  5. #5
    nel senso che con turbo c++ il logaritmo in base 2 di 8 è 3(quindi funziona) e la somma però e totalmente sbagliata!Invece in visual c++ il logaritmo in base 2 di 8 è 2!!ed in più mi da una somma sballatissima! VVoVe:

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Veramente a me risulta 3 ed uso Visual C++ ....

  7. #7
    ok, problema risolto!praticamente nn funziona perchè c'è un bug nella versione 6 di viual c++. Questo bug praticambente fa il cast da double a int di 3.000 in 2!!! e lo fa solo con questo valore!!infatti in visual.net e turbo c++ il programma funziona bene!Grazie mille epr il tuo aiuto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.