Funzione in C Individuare se il numero sia primo sia numero di Armstrong

di
Anonimizzato29959
il
52 risposte

52 Risposte - Pagina 2

  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Ho provato in questo modo... Anche se nel main non mi da se e' un numero di Armstrong si ferma alla printf("Verificare se il valore intero sia un numero di Armstrong)"
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    A parte il fatto che non si capisce perché restituisci sum (che c'entra? Devi restituire 0 o 1 per capire se è un numero valido o no) e hai eliminato il confronto di sum con il numero iniziale, il valore di k iniziale non è 0 e devi utilizzare un vettore. Più semplicemente, cambiando di poco il codice precedente, puoi utilizzare il logaritmo in base 10 per ottenere le cifre prima di fare la somma, ovvero
    
    int check_Armstrong(int num) {
    	int copia_num = num, sum = 0, rem;
    	int cifre = 1+(int)(log(num)/log(10));
    
    	while (num)
    	{
    		rem = num % 10;
    		sum += (int)pow(rem, cifre);
    		num /= 10;
    	}
    
    	if (sum == copia_num)
    		return 1;
    	else
    		return 0;
    }
    
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define SIZE 50
    
    /*Definizione dei prototipi*/
    int check_primo(int numP);
    int check_Armstrong (int numA);
    
    int main(){
        int N;
        
        printf("Inserire un valore intero: ");
        scanf("%d",&N);
        
        printf("Verificare se il valore intero sia un numero primo\n");
        int cont= check_primo(N);
        if(cont==1){
            printf("Il numero e' primo\n");
        } else printf("Il numero non e' primo\n");   
        
        printf("Verificare se il valore intero sia un numero di Armstrong\n");
        int num=check_Armstrong(N);
        if(num==N){
            printf("%d e' un numero di Armstrong\n",N);
        } else printf("%d non e' un numero di Armstrong\n",N);
        
        return 0;
    }
    
    int check_primo(int numP){
        int div=1,cont=0;
        
        while((div<numP) && !cont){
            if((numP%div)==0){
                cont++;
            } else
            div++;
        }
        
        return cont;
    }
    
    int check_Armstrong(int numA){
        int copia_num=numA,sum=0,rem;
        int cifre=1+(int)(log(numA)/log(10));
        
        while(numA){
            rem=numA%10;
            sum+=(int)pow(rem,cifre);
            numA /=10;
        }
        if(sum==copia_num)
            return 1;
        else 
            return 0;
    }
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Pur con i tuoi sacri consigli, davvero non riesco a comprendere perchè non risulta che 153 sia un numero di Armstrong
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Ma hai capito che la funzione restituisce 1 se è un numero valido o 0 se non lo è?
    Perché nel main confronti quello che ti restituisce la funzione nuovamente con il numero??

    Nel main devi solo controllare se è 1 o 0, come fai con l'altra funzione
    
    	printf("Verificare se il valore intero sia un numero di Armstrong\n");
    	int ris = check_Armstrong(N);
    	if (ris == 1)
    		printf("%d e' un numero di Armstrong\n", N);
    	else 
    		printf("%d non e' un numero di Armstrong\n", N);
    
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Avevo provato anche a farlo in questa maniera prima di postarlo ma si presentava lo stesso problema
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Ecco cosa mi stampa
    Allegati:
    29959_807afc9731e22ef9a242f26a079d9d64.jpg
    29959_807afc9731e22ef9a242f26a079d9d64.jpg
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Non si vede il codice che hai usato dallo screenshot. Probabilmente c'era un errore rispetto a quello che ti ho proposto, non credi?
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    /*Definizione dei prototipi*/
    int check_primo(int numP);
    int check_Armstrong (int numA);
    
    int main(){
        int N;
        
        printf("Inserire un valore intero: ");
        scanf("%d",&N);
        
        printf("Verificare se il valore intero sia un numero primo\n");
        int cont= check_primo(N);
        if(cont==1){
            printf("Il numero e' primo\n");
        } else printf("Il numero non e' primo\n");   
        
        printf("Verificare se il valore intero sia un numero di Armstrong\n");
        int ris=check_Armstrong(N);
        if(ris==1){
            printf("%d e' un numero di Armstrong\n",N);
        } else printf("%d non e' un numero di Armstrong\n",N);
        
        return 0;
    }
    
    int check_primo(int numP){
        int div=1,cont=0;
        
        while((div<numP) && !cont){
            if((numP%div)==0){
                cont++;
            } else
            div++;
        }
        
        return cont;
    }
    
    int check_Armstrong(int numA){
        int copia_num=numA,sum=0,rem;
        int cifre=1+(int)(log(numA)/log(10));
        
        while(numA){
            rem=numA%10;
            sum+=(int)pow(rem,cifre);
            numA/=10;
        }
        if(sum==copia_num)
            return 1;
        else 
            return 0;
    }
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    oregon ha scritto:


    Non si vede il codice che hai usato dallo screenshot. Probabilmente c'era un errore rispetto a quello che ti ho proposto, non credi?
    Assolutamente sono un totale fallimento con le funzioni XD
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Quindi risolto, funziona?
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Persiste sempre lo stesso problema :/
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    No, ho provato e funziona.
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Allora sarà certamente un problema legato al compilatore...
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Ti ringrazio infinitamente per l'aiuto
Devi accedere o registrarti per scrivere nel forum
52 risposte