Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C]Errore compilazione

  1. #1

    [C]Errore compilazione

    Ciao,
    devo fare un programma che inserit 2 numeri 'a' e 'b' faccia a seconda della scelta dell'utente:
    1)a^b
    2)b^a
    3)MCD tra 'a' e 'b'
    4)mcm tra 'a' e 'b'

    Solo che riscontro 2 problemi in fase di compilazione:
    1)Nella funzione 'potenza' la variabile dello switch 'scelta' viene data come errore in quanto no ha valori ma, quindi come faccio a far ritornare i valori a 'scelta'?
    2)Nella funzione MCD l'operazione
    codice:
    rest=a%b;
    mi viene data errata e scrive:
    invalid operands to binary %
    quindi cosa devo modificare al fine di far spaire l'errore?

    codice:
    #include <stdio.h>
    float potenza(float a,float b);
    float MCD(float a,float b);
    float mcm(float a,float b);
    int main()
    {
        float a, b; //Variabili globali
        int scelta;
        do
        {
        printf("Inserisci il primo termine maggiore o uguale a zero:");
        scanf("%f", &a);
        printf("Inserisci il secondo termine maggiore o uguale a zero:");
        scanf("%f", &b);
        }
        while(a<0 && b<0);
        printf("Cosa vuoi vedere?");
        printf(" 1) a^b\n");
        printf(" 2) b^a\n");
        printf(" 3) MCD tra 'a' e 'b'\n");
        printf(" 4) mcm tra 'a' e 'b'\n");
        scanf("%d", &scelta);
        switch(scelta)
        {
                      case 1:
                      printf("%4.1f elevato alla %4.1f da come risultato: %4.1f",a,b,potenza(a,b));
                      break;
                      case 2:
                      printf("%4.1f elevato alla %4.1f da come risultato: %4.1f",b,a,potenza(a,b));
                      break;
                      case 3:
                      printf("Il MCD tra %4.1f e %4.1f e\': %4.1f ",a,b,MCD(a,b));
                      break;
                      default:
                      printf("Il mcm tra %4.1f e %4.1f e\': %4.1f ",a,b,mcm(a,b));        
        }
        system("pause");
    }
    //Implementazione della funzione potenza
    float potenza(float a,float b)
    {
          float c=0,ele=0;
          int i=0;
          switch (scelta)
          {
                 case 1:
                 if(b==0)
                 ele=1;
                 else
                 { 
                     for(i=0; i<b; i++)
                     ele=a*a;
                 }
                 break;
                 default:
                 if(a==0)
                 ele=1;
                 else
                 {
                    c=a;
                    a=b;
                    b=c;
                    for(i=0; i<b; i++)
                    ele=a*a;
                 }
          }
          return ele;
    }
    //Implementazione della funzione MCD con il metodo di Euclide
    float MCD(float a, float b)
    {
          float MCD1=0, rest=0;
          while(b>0)
          {
                        rest=a%b; //operazione per trovare il resto
                        a=b; //scambio le variabili
                        b=rest; 
          }
          MCD1=a;
          return MCD1;
    }
    //Implementazione della funzione mcm
    float mcm(float a, float b)
    {
          float mcm1;
          mcm1=a*b;
          return mcm1;
    }
    P.S. Se ci sono degli altri errori fatemelo sapere.

    Ciao e grazie in anticipo
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [C]Errore compilazione

    Originariamente inviato da 21Edoardo96
    1)Nella funzione 'potenza' la variabile dello switch 'scelta' viene data come errore in quanto no ha valori ma, quindi come faccio a far ritornare i valori a 'scelta'?
    La variabile scelta non esiste nella funzione potenza ma nel main.
    E' una scelta logicamente sbagliata quella di usare la variabile scelta nella funzione potenza perché quella deve solamente fare un calcolo e restituirlo.
    Sarà nel main che deciderai di chiamare potenza(a,b) oppure potenza(b,a) a seconda del valore di scelta.

    L'operatore % vale solamente per gli interi e non per i float.
    Per i flaot e i double devi usare la funzione fmod

    http://www.cplusplus.com/reference/clibrary/cmath/fmod/

    Se ci sono degli altri errori fatemelo sapere.
    Non compilo il programma ... lo vedrai dopo tu se ci sono altri errori.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ciao,
    ho sistemato il codice solo che mcm mi da come risultato sempre il numero maggiore e non il numero giusto.
    codice:
    int mcm(int a, int b)
    {
          int mcm1=0, max=0, min=0, i=1;
          if(a>=b)
          {
          max=a;
          min=b;
          mcm1=max;
          }
          else
          {
          max=b;
          min=a;
          mcm1=max;
          }
          while((max*i)%min==0)
          {
              mcm1=mcm1+max;
              i++;
          }
          return mcm1;
    }
    Vi posto anche il codice completo
    codice:
    #include <stdio.h>
    int potenza(int,int);
    int MCD(int,int);
    int mcm(int,int);
    int main()
    {
        int a, b,scelta;
        do
        {
        printf("Inserisci il primo termine (intero) maggiore o uguale a zero:");
        scanf("%d", &a);
        printf("Inserisci il secondo termine (intero) maggiore o uguale a zero:");
        scanf("%d", &b);
        }
        while(a<0 && b<0);
        printf("Cosa vuoi vedere?\n");
        printf(" 1) a^b\n");
        printf(" 2) b^a\n");
        printf(" 3) MCD tra 'a' e 'b'\n");
        printf(" 4) mcm tra 'a' e 'b'\n");
        printf("Scelta:");
        scanf("%d", &scelta);
        switch(scelta)
        {
                      case 1:
                      printf("%d elevato alla %d da come risultato: %d\n",a,b,potenza(a,b));
                      break;
                      case 2:
                      printf("%d elevato alla %d da come risultato: %d\n",b,a,potenza(b,a));
                      break;
                      case 3:
                      printf("Il MCD tra %d e %d e\': %d\n",a,b,MCD(a,b));
                      break;
                      default:
                      printf("Il mcm tra %d e %d e\': %d\n",a,b,mcm(a,b));        
        }
        system("pause");
    }
    //Implementazione della funzione potenza
    int potenza(int base,int esp)
    {
          int ele=1;
          int i=0;
          for(i=0; i<esp; i++)
          ele=ele*base;
          return ele;
    }
    //Implementazione della funzione MCD con il metodo di Euclide
    int MCD(int a, int b)
    {
          int MCD1=0, rest=0;
          while(b>0)
          {
                        rest=a%b; //operazione per trovare il resto di variabili intere
                        a=b; //scambio le variabili
                        b=rest; 
          }
          MCD1=a;
          return MCD1;
    }
    //Implementazione della funzione mcm
    int mcm(int a, int b)
    {
          int mcm1=0, max=0, min=0, i=1;
          if(a>=b)
          {
          max=a;
          min=b;
          mcm1=max;
          }
          else
          {
          max=b;
          min=a;
          mcm1=max;
          }
          while((max*i)%min==0)
          {
              mcm1=mcm1+max;
              i++;
          }
          return mcm1;
    }

    Ciao e grazie mille
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

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.