2 Problemi con le funzioni

di il
7 risposte

2 Problemi con le funzioni

Ragazzi aiutatemi che mi sto rimbambendo a capire perchè questi 2 programmi non funzionano come si deve, vi posto i codici e i risultati strani ottenuti.

Funzione pari o dispari.
#include <stdio.h>
#include <stdlib.h>

int pod (int);

main()
{
    int a = 0, b = 0, c = 0;
printf ("Digita 3 numeri interi:\n");
printf ("1: ");
scanf ("%d", &a);
printf ("2: ");
scanf ("%d", &b);
printf ("3: ");
scanf ("%d", &c);

printf ("Il numero %d e' ",a ,pod(a));
printf ("Il numero %d e' ",b ,pod(b));
printf ("Il numero %d e' ",c ,pod(c));
}

int pod (int x)
{
if ( x % 2 == 0)
printf ("pari.\n");
else
printf ("dispari.\n");
}
e questo è il risultato
Digita 3 numeri interi:
1: 3
2: 4
3: 5
dispari.  /*Perchè me lo scrive qui il dispari ??????*/
Il numero 3 e' pari.
Il numero 4 e' dispari.
Il numero 5 e'
Process returned 15 (0xF)   execution time : 2.543 s
Press any key to continue.
e questo e l'altro che non capisco.
#include <stdio.h>
#include <stdlib.h>
/*Conversioni di Temperatura */

float celsius (float);

main()
{
float fahrenheit;
printf ("Digita i Fahrenheit:");
scanf ("%f", &fahrenheit);
printf ("I Fahrenheit %.3f convertiti in Celsius sono: %.3f",fahrenheit, celsius(fahrenheit));
}

float celsius (float x)
{
return (5/9) * (x - 32);
}
ed ecco il risultato strano...
Digita i Fahrenheit:67.4
I Fahrenheit 67.400 convertiti in Celsius sono: 0.000 /* Perchè esce 0.000 ?????????? */
Process returned 53 (0x35)   execution time : 3.484 s
Press any key to continue.
C'è qualcosa che mi sono perso quando studiavo le funzioni ??
Avvertenza: non adoperate i puntatori per favore, non li ho ancora studiati.

7 Risposte

  • Re: 2 Problemi con le funzioni

    Ti parlo del primo.
    
    printf ("Il numero %d e' ",a ,pod(a));
    
    In C e C++ non è garantito l'ordine di scrittura su stream. E "implementation defined". Quindi dipende dal compilatore. Quindi il programma prima valuta l'espressione pod(a) e poi il printf. Per questo che tu vedi prima il dispari e poi il resto.
  • Re: 2 Problemi con le funzioni

    Ah...e come potrei ridefinire la funzione in modo corretto ?
  • Re: 2 Problemi con le funzioni

    Aspetta però. Il printf è fatto male. Hai solo un identificatore %d e li passi due parametri. Quindi soluzione:
    
    printf ("Il numero %d e' ",a);
    pod(a);
    
  • Re: 2 Problemi con le funzioni

    2° problema
    
    float celsius (float x)
    {
    return (5./9) * (x - 32.);
    }
    
    devi specificare che stai lavorando con i float se no 5 è un intero il quale diviso per 9 ti da 0.
  • Re: 2 Problemi con le funzioni

    Praticamente quando il "return" dovrebbe ritornare un float, tutti i valori della formula al suo interno devono essere ridotti in virgola mobile ?
  • Re: 2 Problemi con le funzioni

    Solo i valori che servono per le divisioni ovvero il numeratore.
    Maggiori info li trovi anche quà:
  • Re: 2 Problemi con le funzioni

    Grazie Skynet...come sempre
Devi accedere o registrarti per scrivere nel forum
7 risposte