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

di il
52 risposte

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

Salve a tutti... Qualcuno potrebbe aiutarmi a capire come comportarsi con le funzioni e darmi qualche consiglio per questo esercizio? Grazie mille

/*Scrivere un programma che riceve un valore intero in input da tastiera e
verifichi se il numero è primo e se è un numero di Armstrong.
- Utilizzare due funzioni
– check_Primo e check_Armstrong
- Numero di Armstrong= numeri per i quali la somma delle k cifre che li
costituiscono, ognuna elevata a k, equivale al numero di partenza*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/*Definizione dei prototipi*/
int check_primo(int n);
int check_Armstrong(int num);

int main(){
    int N;
    
    printf("Inserire un valore intero: ");
    scanf("%d",&N);
   
    printf("Verificare se il valore intero sia un numero primo\n");
    if(check_primo(N)==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");
    if(check_Armstrong(N)==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 n){
    int div=1,cont=0;
    
    while(cont<=1 && div<n/2){
        if(n%div==0){
            cont++;
        }
        div++;
    }
    if(cont==1){
        return 1;
    }
    
    return 0;
}

int check_Armstrong(int num){
    int copia_num,sum=0,rem;
    
    copia_num=num;
    
    while(num!=0){
        rem=num%10;
        sum=sum+(pow(rem,3));
        num=num/10;
        
        if(sum == num){
            return 1;
    } 
        return 0;
}
}

52 Risposte

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

    Hai un esercizio e un codice. Qual è la domanda? Fra l'altro il titolo del thread è troppo generico ...
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Ho cercato di risolvere l'esercizio ma non capisco dove sbaglio.. forse nell'impostare le funzioni
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Nella funzione "check_primo" passi la variabile "primo", che però dopo non adoperi: usi invece la variabile N che non è inizializzata. Lo stesso fai nella funzione "check_Armstrong".
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Ho aggiornato il codice... però lo stesso non funziona... Forse dovrei aggiungere return 1 e return 0?
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Nelle funzioni non devi usare il printf per dare risultati a video. Le funzioni devono solo restituire vero o falso.
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Ho seguito il tuo prezioso consiglio però lo stesso non funziona... :/ Non capisco l'errore
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Magari mostra il codice modificato dopo che hai seguito i consigli (ma NON modificare il post iniziale o non si capisce più nulla)
  • 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 n);
    int check_Armstrong(int num);
    
    int main(){
        int N;
        
        printf("Inserire un valore intero: ");
        scanf("%d",&N);
       
        printf("Verificare se il valore intero sia un numero primo\n");
        if(check_primo(N)==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");
        if(check_Armstrong(N)==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 n){
        int div=1,cont=0;
        
        while(cont<=1 && div<n/2){
            if(n%div==0){
                cont++;
            }
            div++;
        }
        if(cont==1){
            return 1;
        }
        
        return 0;
    }
    
    int check_Armstrong(int num){
        int copia_num,sum=0,rem;
        
        copia_num=num;
        
        while(num!=0){
            rem=num%10;
            sum=sum+(pow(rem,3));
            num=num/10;
            
            if(sum == num){
                return 1;
        } 
            return 0;
    }
    }
    
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Sempre lo stesso errore... Il numero non e' ne' primo ne' di Armstrong
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Con quale numero stai provando? Comunque la funzione è sbagliata in quanto il test lo devi fare fuori dal ciclo, ovvero dopo che hai completato la somma. E poi il confronto va fatto con la copia del numero dato che num è diventato zero
    
    int check_Armstrong(int num) {
    	int copia_num, sum = 0, rem;
    
    	copia_num = num;
    
    	while (num)
    	{
    		rem = num % 10;
    		sum += (int)pow(rem, 3);
    		num /= 10;
    	}
    	
    	if (sum == copia_num)
    		return 1;
    	else
    		return 0;
    }
    
    Ma ATTENZIONE ... dai per scontato che il numero sia sempre a 3 cifre dato che elevi sempre a 3 con la pow, ma il numero non è detto che sia sempre a 3 cifre
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    "dai per scontato che il numero sia sempre a 3 cifre dato che elevi sempre a 3 con la pow, ma il numero non è detto che sia sempre a 3 cifre"
    E come dovrei fare?
  • 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 n);
    int check_Armstrong(int num);
    
    int main(){
        int N;
        
        printf("Inserire un valore intero: ");
        scanf("%d",&N);
       
        printf("Verificare se il valore intero sia un numero primo\n");
        if(check_primo(N)==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");
    
        if(check_Armstrong(N)==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 n){
        int div=1,cont=0;
        
        while(cont<=1 && div<n/2){
            if(n%div==0){
                cont++;
            }
            div++;
        }
        if(cont==1){
            return 1;
        }
        
        return 0;
    }
    
    int check_Armstrong(int num){
        int copia_num,sum=0,rem;
        
        copia_num=num;
        
        while(copia_num!=0){
            rem=copia_num%10;
            sum=sum+(pow(rem,3));
            copia_num=copia_num/10;
            
    }
        return copia_num;
    }
    
  • Re: Funzione in C Individuare se il numero sia primo sia numero di Armstrong

    Andiamo ... ragiona un po'. Se facessi il test di 8208 cosa dovresti fare? Ovviamente prima devi calcolare quante cifre ha il numero (in questo caso 4) e usare tale valore nella pow. Naturalmente il "numero di cifre" da usare nella pow deve essere contenuto in una variabile.

    Come si calcola il numero di cifre di un numero?
  • 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 sum2 = check_Armstrong(N);
        if(N==sum2){
            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,sum=0,rem,i,V[SIZE],k;
        
        copia_num=numA;
        
        for(i=0;copia_num!=0;i++){
            V[i]=copia_num%10;
            copia_num=copia_num%10;
            k++;
        }
        
        for(i=0;i<k;i++){
            sum=sum+pow(V[i],k);
        }
        
        return sum;
    }
Devi accedere o registrarti per scrivere nel forum
52 risposte