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

di Anonimizzato29959 il
52 risposte

52 Risposte - Pagina 3

  • No, non credo sia il compilatore. Sicuro di avere ricompilato il codice dopo le modifiche e non ci siano errori?

    Se vuoi posta un file zippato del tuo progetto completo e lo provo.
  • Nel tuo file, alla fine della funzione c'è ancora
    if (sum == numA)
    Perché non fai attenzione?
  • Nemmeno funziona :/
  • Non saprei non vedo nessuno errore
  • Ma che vuoi dire? Quella if è sbagliata, correggila
  • L'ho corretta con copia_num ma nemmeno funziona
  • E no così deve funzionare. Cosa hai scritto esattamente?

    Hai ricompilato?
  • #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;
    }
  • E questo ultimo codice funziona
    Allegati:
    9500_c6c60723c66658fe5d6f43cd44da6e5a.png
    9500_c6c60723c66658fe5d6f43cd44da6e5a.png
  • L'importante che il codice sia corretto... Ti ringrazio nuovamente per il tuo magnifico aiuto
    Allegati:
    29959_ab54f9c82e9695f514298ea42cf85111.jpg
    29959_ab54f9c82e9695f514298ea42cf85111.jpg
  • Ma tu che compilatore utilizzi?

    Per curiosità, prova a scrivere
    printf("%d  %d\n", sum, copia_num);
    prima della if e mostra quali valori sono visualizzati
  • Sto usando Mingw anche se dovrei convertirmi Cygwin... Adesso provo
  • Compilatore obsoleto e mal funzionante
    Allegati:
    29959_8a073cd09c0f984fdb4346e7f82cd5f4.jpg
    29959_8a073cd09c0f984fdb4346e7f82cd5f4.jpg
  • Quindi è un problema di calcolo delle librerie del compilatore che usi.

    E se aggiungi
    		printf("%d\n", (int)pow(rem, cifre));
    prima di
    		sum += (int)pow(rem, cifre);
    quali valori vedi?
Devi accedere o registrarti per scrivere nel forum
52 risposte