Accedi

Ho dimenticato la password

Ultimi argomenti
» argomento
Dom Giu 02, 2013 4:30 pm Da ruggiero98

» problema con la funzione SE aiutoooo x favore?????
Dom Giu 02, 2013 4:18 pm Da ruggiero98

» aiuto in programma con if
Dom Mag 26, 2013 5:39 pm Da ruggiero98

»  CALCOLO PERCENTUALE IN C
Sab Apr 20, 2013 8:22 pm Da ruggiero98

» Costruire un temporizzatore software per accensione luci a led
Lun Mar 25, 2013 2:34 pm Da Cristina Shady

» Ciao a tutti!
Gio Mar 22, 2012 4:19 am Da cosmos91

» Virtualbox VS le periferiche USB
Mar Apr 06, 2010 1:49 pm Da dandeciani

» PROGRAMMA: BINARY CODE
Mar Dic 23, 2008 7:28 pm Da Thalionwen

» saluti a tutti
Mar Dic 23, 2008 7:12 pm Da Thalionwen

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Prima Parte]
Sab Nov 29, 2008 11:44 am Da ya89

» un semplice ciao
Sab Nov 29, 2008 11:38 am Da ya89

» Aiuto per alice 7 mega
Ven Nov 14, 2008 4:03 pm Da root

» FORUM: I nuovi banner
Ven Nov 14, 2008 2:48 pm Da Thalionwen

» Zooming Ricorsivo, questo sconosciuto.
Ven Nov 14, 2008 2:43 pm Da Thalionwen

» GUIDA : LEZIONE 4 : UTILIZZARE GLI ARRAY IN C#
Ven Nov 14, 2008 1:54 pm Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Terza e Ultima Parte]
Ven Nov 14, 2008 12:41 am Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Seconda Parte]
Mer Nov 12, 2008 12:59 am Da ab89

» [PS2] Dark Cloud
Mar Nov 11, 2008 6:50 pm Da ab89

» [PC] Sacred 2
Lun Nov 10, 2008 10:49 pm Da ab89

» GUIDA : CAP 1 LEZIONE 3 INTRODUZIONE AGLI ARRAY
Lun Nov 10, 2008 1:37 pm Da ab89

Flusso RSS


Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 



PROGRAMMA : Trasformare un numero reale in frazione

Andare in basso

PROGRAMMA : Trasformare un numero reale in frazione

Messaggio Da ab89 il Lun Ott 20, 2008 12:03 am

Il programma che passo ad illustrare ha la funzionalità di trasformare un numero Reale (ossia con virgola) in una frazione (quindi composta da numeratore e denominatore entrambi interi).
L'utilità? Di per sè non vi è una grossa utilità, ma potrebbe servire del caso di applicazioni dove si richiede di operare con le frazioni e dovete convertire quindi un numero con virgola in una frazione.

Il programma è composto da 3 funzioni :

  • int f_mcd(int a, int b); //calcola mcd
  • int f_clc_moltiplicatore(double x); //calcola moltiplicatore
  • int f_pow (int x, int y); //calcola potenza
la prima calcola l'mcd fra 2 numeri.
la seconda si occupa di calcolare un coefficiente che moltiplicato per il numero inserito fa si che tal numero diventi intero.
la terza (f_pow) calcola la potenza di un numero composto da esponente e base interi, non ho utilizzato le librerie matematiche perché altrimenti avrei dovuto utilizzare un altro compilatore e anche perchè il risultato finale mi serve intero.

Codice:

//////////////////////////////////////////////////////////////////////////////////////////////////
//                                                //
//    Programma che dato un valore reale in input lo trasforma in una frazione        //
//    ridotta e quindi passa da un numero con virgola ad un frazione di interi        //
//                                                //
//    Autore : Bertin Andrea [ab89]                                //
//    Ultima Modifica : 19/10/2008 22:51                            //   
//    Versione : 1.0                                        //
//                                                //
//////////////////////////////////////////////////////////////////////////////////////////////////


#include <stdio.h>

int f_mcd(int a, int b); //calcola mcd
int f_clc_moltiplicatore(double x); //calcola moltiplicatore
int f_pow (int x, int y); //calcola potenza

main()
{
    int mcd = 0;
    int moltiplicatore = 0;
    int num, den;
    double x ;
   
    //leggere il valore
   
    printf("Inserisci il valore : ");
    scanf("%lf", &x);
   
    //calcola la potenza di 10 per la quale
    //moltiplicare x e successivamente calcola mcd
    //tra x per il moltiplicatore ed il moltiplicatore
    //stesso per ottenere numeratore e denominatore
    //della frazione   
   
    moltiplicatore = f_clc_moltiplicatore(x);
    num = x * moltiplicatore;
    den = moltiplicatore;
    mcd = f_mcd(num,den);
   
    printf("num = %d\nden = %d\nmcd = %d\n",num,den, mcd);
   
    num = num / mcd;
    den = den / mcd;
   
    printf("num = %d\nden = %d\n",num,den);
}

int f_mcd(int a, int b)
{
    int minAB, maxAB, resto = 0;
   
    //determina il numero più piccolo
   
    minAB = a < b? a:b;
    maxAB = a > b? a:b;
   
    //finchè il resto rimane diverso
    //da 0 continua a dividere
   
    while(maxAB % minAB != 0)
    {
        resto = maxAB % minAB;
        maxAB = minAB;
        minAB = resto;
    }
   
    return minAB;
}

int f_clc_moltiplicatore(double x)
{
    int k = 1;
    while(((int)(x * (f_pow(10,k)))) % 10 != 0)
        k++;
    return k*10;
}
int f_pow(int x, int y)
{
    int i = 0;
    int pw = 1;
    for (i = 0; i < y; i++)
        pw *= x;
   
    return pw;
}


Lo scopo del programma è chiaro. Alla richiesta di introdurre un valore non fate altro che scrivere il valore reale desiderato ed ecco che vi appare il valore del numeratore e del denominatore subito sotto Very Happy

Per dubbi e/o chiarimenti sono a disposizione Very Happy

NB
Il codice è liberamente usufruibile a patto di citarne la fonte Informatica Programmabile
(http://infonprog.forumattivo.it)


Ultima modifica di ab89 il Lun Ott 20, 2008 3:35 pm, modificato 2 volte

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA : Trasformare un numero reale in frazione

Messaggio Da Eine The Phantom il Lun Ott 20, 2008 12:34 pm

Bella idea, complimenti Very Happy

_________________
avatar
Eine The Phantom
Admin
Admin

Numero di messaggi : 37
Data d'iscrizione : 28.09.08

Visualizza il profilo http://infonprog.forumattivo.it

Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum