Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    Problema con tipo float

    Salve a tutti, vi spiego il mio problema :
    Quando eseguo questo programma, mi viene stampato a schermo un risultato decimale e non float, ovvero, quando ad esempio faccio la media tra 12 e 3 il programma mi restituisce sette. Credo di aver sbagliato qualcosa con i tipi...
    codice:
    #include <stdio.h>
    int main(void)
    {
    	
    	float media(int a,int b);
    	int x,y;
    	puts("Inserire i valori: ");
    	scanf("%d %d",&x,&y);
    	printf("Media %d,%d = %f\n",x,y,media(x,y));
    
    }
    
    float media(int a,int b)
    {
    	float c=(a+b)/2;
    	return c;
    }

  2. #2
    L'errore sta nella riga:
    codice:
    	float c=(a+b)/2;
    Indipendentemente dal fatto che tu stia inizializzando un float, l'espressione sulla destra è comunque tutta un'espressione di interi: a e b sono interi (e quindi pure la loro somma), 2 è un intero, per cui viene eseguita una divisione intera (che tronca i decimali). Per ottenere il risultato voluto, devi fare in modo che almeno uno dei due operandi della divisione sia un float; nel tuo caso il modo più semplice e sensato è rendere il 2 un float, quindi scriverai:
    codice:
    	float c=(a+b)/2.f;
    Nota comunque che in genere, salvo necessità di spazio particolari, si usano i double; in tal caso sarebbe:
    codice:
    	double c=(a+b)/2.;
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da MItaly
    L'errore sta nella riga:
    codice:
    	float c=(a+b)/2;
    Indipendentemente dal fatto che tu stia inizializzando un float, l'espressione sulla destra è comunque tutta un'espressione di interi: a e b sono interi (e quindi pure la loro somma), 2 è un intero, per cui viene eseguita una divisione intera (che tronca i decimali). Per ottenere il risultato voluto, devi fare in modo che almeno uno dei due operandi della divisione sia un float; nel tuo caso il modo più semplice e sensato è rendere il 2 un float, quindi scriverai:
    codice:
    	float c=(a+b)/2.f;
    Nota comunque che in genere, salvo necessità di spazio particolari, si usano i double; in tal caso sarebbe:
    codice:
    	double c=(a+b)/2.;
    Grazie mille ! Quindi con solo il punto il due sarà double ?

  4. #4
    Esattamente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Grazie dell'aiuto mi sei stato utilissimo ! A presto

  6. #6
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.