Errore invalid operands of types float and double to binary operator

di il
50 risposte

Errore invalid operands of types float and double to binary operator

Non riesco a risolvere il problema, devo semplicemente fare l'area del cerchio. (l'errore mi viene dato nella riga in cui, in fondo, faccio la moltiplicazione per l'area del cerchio, raggio^2*3.14)

 #include <stdio.h>
int main ()
{
    int figura=0;
    float area=0;
    float perimetro=0;
    printf("\n inserisci 1 se la figura e\' il triangolo \n inserisci 2 se la figura e\' il quadrato \n inserisci 3 se la figura e\' il cerchio \n inserisci 4 se la figura e\' il rettangolo");
    printf("\ninserisci il numero che indica la figura che ti interessa %d", figura);
    scanf("%d",&figura);

    switch (figura)
    {
    case 1: {
            float base=0;
            float altezza=0;
            float latouno=0;
            float latodue=0;
            printf("\ninserisci il valore della base");
            scanf("%f",&base);
            printf("\ninserisci il valore dell'altezza");
            scanf("%f",&altezza);
            printf("\ninserisci il valore del primo lato");
            scanf("%f",&latouno);
            printf("\ninserisci il valore del secondo lato");
            scanf("%f",&latodue);
            area=base*altezza/2;
            printf("\nil valore dell'area e\' %f",area);
            perimetro=base+latouno+latodue;
            printf("\nIl valore del perimetro e\' %f \n", perimetro);
            }
            break;
    case 2: {
            float lato=0;
            printf("\ninserisci il valore del lato");
            scanf("%f",&lato);
            area=lato*lato;
            printf("\nil valore dell'area e\' %f",area);
            perimetro=lato*4;
            printf("\nIl valore del perimetro e\' %f \n", perimetro);
            }
            break;
    case 3: {
            float raggio=0;
            printf("\ninserisci il valore del raggio");
            scanf("%f",&raggio);
            area=raggio^2*3.14;
            printf("\nil valore dell'area e\' %f",area);
            perimetro=2*raggio*3.14;
            printf("\nIl valore del perimetro e\' %f \n", perimetro);
            }
            break;
    }


return 0.0;
} 

50 Risposte

  • Re: Errore invalid operands of types float and double to binary operator

    In c non esiste l'operatore elevazione a potenza e ^ rappresenta l'operatore bit a bit XOR (se vuoi sapere il motivo per cui il codice non compila o il significato di tale operatore possiamo dirtelo, in ogni per il momento ti basti sapere che ^ non ha nulla a che vedere con le potenze).

    Nella libreria math.h esiste la funzione pow() per calcolare le potenze. Se non sai cosa sono le funzioni ignora quest'ultima cosa che ho detto.

    In ogni caso puoi risolvere il problema scrivendo semplicemente area=raggio*raggio*3.14.

    Un paio di osservazioni:
    - perchè ritorni 0.0 se il main si aspetta un int?
    - perchè inizializzi tutte le variabili a 0?
  • Re: Errore invalid operands of types float and double to binary operator

    Il ^ è un operatore bit wise, non è l'elevamento a potenza! Puoi usare raggio*raggio*3.14f
  • Re: Errore invalid operands of types float and double to binary operator

    Grazie mille, si userò pow, purtroppo non ero a conoscenza del fatto che ^ non indicasse una potenza.

    Nippolo, per quanto riguarda le domande che mi poni:
    -Hai ragione, ho sbagliato, non ho ben chiaro a cosa serva il return (mi è stato spiegato in modo molto frettoloso, farò qualche ricerca) e pensavo fosse necessario 0.0 in questo caso, invece ho appena constatato che non è così
    -Mi hanno insegnato che devo sempre inizializzare... non devo? E' un errore oppure è inutile e basta?
  • Re: Errore invalid operands of types float and double to binary operator

    .
  • Re: Errore invalid operands of types float and double to binary operator

    Complimenti al genio di turno, tanti applausi!
    Sono una ragazza che va al liceo e ho appena iniziato a fare programmazione, la teoria la si sta facendo in modo graduale (se hai studiato informatica a scuola sai benissimo che si fa tutto per gradi, funzione per funzione, o perlomeno noi stiamo facendo in questo modo); nel momento in cui mi danno degli esercizi di compito io presumo di avere tutti gli strumenti a disposizione per poterli fare. A quanto pare non li ho proprio perchè molte cose, tra cui questa, non mi sono state spiegate, altrimenti non sarei qui a chiedere a che cosa è dovuto l'errore.
    Quindi si, non ne ero a conoscenza.
    Hai altro da aggiungere? No, perchè sai, lo scopo del forum è aiutare chi è in difficoltà, non sicuramente cercare di smascherare quelle che tu chiami "scuse ridicole", perciò evitiamo perdite di tempo a chiunque stia leggendo questo topic.
  • Re: Errore invalid operands of types float and double to binary operator

    .
  • Re: Errore invalid operands of types float and double to binary operator

    -Mi hanno insegnato che devo sempre inizializzare... non devo? E' un errore oppure è inutile e basta?
    La seconda (inutile e basta).
    Di solito si inizializza una variabile ad un valore quando tale valore viene poi utilizzato.
  • Re: Errore invalid operands of types float and double to binary operator

    .
  • Re: Errore invalid operands of types float and double to binary operator

    Grazie mille @nippolo, ne terrò conto.

    @migliorabile, innanzitutto non mi conosci quindi non puoi sputare sentenze sul fatto che io usi i libri o meno. Detto questo, la discussioni che porti avanti è inutili ai fini di questo forum, perciò risparmiala a tutti noi, anche perchè non ho molto tempo da perdere. Grazie.
  • Re: Errore invalid operands of types float and double to binary operator

    migliorabile ha scritto:


    @nippolo, sbagli.
    E' assolutamente buona pratica inizializzare SEMPRE le variabili, almeno fino a che si e' alle prime armi.
    Anche quando si è alle "seconde".
  • Re: Errore invalid operands of types float and double to binary operator

    Questa "buona pratica" serve solo per scongiurare l'utilizzo di una variabile non inizializzata o ci sono anche altri motivi?

    Una curiosità... perché aspettare che venga venga chiesta esplicitamente una spiegazione prima di argomentare le proprie risposte?
  • Re: Errore invalid operands of types float and double to binary operator

    .
  • Re: Errore invalid operands of types float and double to binary operator

    giuli ha scritto:


    -Mi hanno insegnato che devo sempre inizializzare... non devo? E' un errore oppure è inutile e basta?
    giuli,

    come hai visto, è facile scatenare una guerra su questo tema. La verità è, come spesso, che non c'è o nero o bianco. Ci sono casi dove conta l'inizzializzazione:
        int numerofisso;   // essendo sullo stack, potrebbe 'ereditare' un qualsiasi valore
        ...
        perimetro=base+latouno+latodue+numerofisso;   // probabilmente il risultato non è un granché...
    Chiaro, giusto? Per fortuna, il compilatore dice "warning #2116: Local 'numerofisso' is used without being initialized".
    Quindi, se capisci il rischio, e leggi i warnings, fai come ti pare.

    P.S.: Complimenti che ti sai difendere contro le maniere migliorabili del tifoso della NSA - mi sono divertito leggerlo
  • Re: Errore invalid operands of types float and double to binary operator

    Burdel la questione è semplice.
    siete abituati a programmini ridicoli, di dimensioni e complessità ridicole.
    quelli, per capirci, che usualmente si scrivevano attorno ai 12 anni.

    Quando si ha a che fare con progetti complessi, che già di per sé sono complicati e rischiosi, si iniziano a mettere in campo accorgimenti, pattern e anti pattern, derivanti dalla esperienza.
    Esperienza per inciso significa sbagliare e imparare dagli errori.

    Esattamente come, salendo in auto, si allacciano le cinture, analogamente si inizializzano le variabili (puntatori assolutamente) come buona pratica.
    costa poco ma può salvare la giornata.

    Soprattutto quando si lavora sul serio, cioè i propri programmi spostano ad esempio denaro vero e, in caso di bug, qualcuno potrebbe venire a chiedervi i danni.

    Si può vivere senza inizializzare le variabili? (senza allacciare le cinture)
    certo
    È cosa saggia farlo?
    No

    Aggiungo che perfino la sequenza di definizione delle variabili è importante (ad esempio in C) per la qualità e resilienza del codice.
    definire prima A e poi B potrebbe essere meno sicuro di definire B e poi A

    Come accennato sono cose che si imparano nei decenni
Devi accedere o registrarti per scrivere nel forum
50 risposte