AIUTO FUNZIONE IN C

di il
5 risposte

AIUTO FUNZIONE IN C

Salve a tutti, complimenti per il sito.
Avrei bisogno di un aiuto riguardo la scrittura di una funzione in linguaggio C.
L'esercizio è il seguente:

Scrivere una funzione int ones(int a, int b, int k) che ritorna il numero di interi compresi tra a e b che nella rappresentazione binaria hanno esattamente k uno.
Si assuma che b >= a >= 0 e che k >= 0.
Ad esempio, se a = 0, b = 7 e k = 2, la funzione ritorna 3; se a = 0, b = 15, k = 3, ritorna 4; se a = 12, b = 67, k = 3, ritorna 19; se a = 12, b = 67, k = 7, ritorna 0.

Se qualcuno sà come scriverla, gentilmente potrebbe scrivere qui il codice ?

So che non si dovrebbero chiedere esercizi sui forum, ma vi chiedo ugualmente questo piccolo favore!

Grazie.

5 Risposte

  • Re: AIUTO FUNZIONE IN C

    Io invece di chiedo un altra cosa. Fai uno sforzo e metti il codice che sei riuscito a scrivere fino ad adesso. Anche se fa schiffo e non funziona fa lo stesso, almeno dimostri che ti stai impegnando.
  • Re: AIUTO FUNZIONE IN C

    #include <stdio.h>
    
    int main () {
        int a, b;
        printf("Inserisci 0 o un intero positivo a : ");
        scanf("%d", &a);
        printf("Inserisci 0 o un intero positivo b maggiore o uguale ad a : ");
        scanf("%d", &b);
        int k;
        printf("Inserisci k uguale a 0 o a un numero positivo : ");
        scanf("%d", &k);
        
        int i; int n1=0; int numbers=0;
        
        for(i=a; i<=b; i++){
            
            
            
            int n=i, r;
            
            for( ;n>0; ){
                r=n%2;
                if(r==1) n1++;
                n=n/2;
                
                        }
         
        
        
        if(n1==k) numbers++;
        }
        
        printf("Tra %d e %d convertiti in binario %d numeri hanno k 1\n", a, b, numbers);
        
        system("PAUSE");
        return 0;
    }
    




    Skynet, eccoti il codice che ho scritto fino ad ora... Questo però non è il codice della funzione, ma il codice di un programma che fà la stessa cosa richiesta dalla funzione. Il fatto è che alla fine del programma la variabile numbers non ha il valore che dovrebbe avere...
    Qualcuno sa dirmi il perchè?
  • Re: AIUTO FUNZIONE IN C

    
    #include <stdio.h>
    
    int main () {
        int a, b;
        printf("Inserisci 0 o un intero positivo a : ");
        scanf("%d", &a);
        printf("Inserisci 0 o un intero positivo b maggiore o uguale ad a : ");
        scanf("%d", &b);
        int k;
        printf("Inserisci k uguale a 0 o a un numero positivo : ");
        scanf("%d", &k);
       
        int i; int n1=0; int numbers=0;
       
        for(i=a; i<=b; i++){
           
           
           
            int n=i, r;
           n1 = 0;  //azzerra n1 ad ogni iterazione e sei a posto.
            for( ;n>0; ){
                r=n%2;
                if(r==1) n1++;
                n=n/2;
               
                        }
         
       
       
        if(n1==k) numbers++;
        }
       
        printf("Tra %d e %d convertiti in binario %d numeri hanno k 1\n", a, b, numbers);
       
        system("PAUSE");
        return 0;
    }
    
    vedi la modifica. Se l'hai fatto tu bravo.
  • Re: AIUTO FUNZIONE IN C

    Ed eccoti la tua funzione.
    
    #include <stdio.h>
    
    int ones(int a,int b, int k)
    {
        int i; int n1=0; int numbers=0;
       
        for(i=a; i<=b; i++)
    	{
    		int n=i, r;
    		n1 = 0;
            while(n > 0)
    		{
                r=n%2;
                if(r==1)
    				n1++;
                n=n/2;
               
            }
    		if(n1==k) 
    			numbers++;
        }
    	return numbers;
    }
    
    
    int main ()
    {
        int a, b;
        printf("Inserisci 0 o un intero positivo a : ");
        scanf("%d", &a);
        printf("Inserisci 0 o un intero positivo b maggiore o uguale ad a : ");
        scanf("%d", &b);
        int k;
        printf("Inserisci k uguale a 0 o a un numero positivo : ");
        scanf("%d", &k);
        
        printf("Tra %d e %d convertiti in binario %d numeri hanno k 1\n", a, b, ones(a,b,k));
       
        system("PAUSE");
        return 0;
    }
    
    
  • Re: AIUTO FUNZIONE IN C

    Ma che stupidaggine !!! Bastava mettere la variabile n1=0 nel ciclo for più esterno al posto di metterla fuori dal for !!!

    Cmq si, l'ho scritto io il programma, ma era da stamattina che non riuscivo a capire perchè funzionava male...
    Quell' errore non l'avevo proprio visto...

    Grazie mille skynet !!!
    E grazie anche a questo fantastico forum !!!
Devi accedere o registrarti per scrivere nel forum
5 risposte