Enrere Mòdul 2
Fonaments de Programació. Llenguatge C/C++---
Pràctica  Resum teòric Exercicis
Pràctica d'ampliació

 
Operacions amb fraccions

En aquesta pràctica veurem l'ús de variables globals i com una funció les pot modificar. Més endavant veurem com una funció pot modificar variables sense que aquestes siguin globals. L'ús de variables globals és sempre un últim recurs que s'ha d'evitar sempre que es pugui.

 

Desenvolupament de la pràctica

Creeu un nou arxiu del tipus C anomenat m2pa1.c. Escriviu el següent codi:

//m2pa1.c - Operacions amb fraccions  -

#include <stdio.h>

void suma();
void resta();
void producte();
void quocient();

int num1,den1;          //variables globals
int num2,den2;
int nums,dens;

int main(){

    printf("introduïu la primera fracció (num/den)...\n");
    scanf("%d/%d",&num1, &den1);

    printf("introduïu la segona fracció (num/den)...\n");
    scanf("%d/%d",&num2, &den2);

    suma();
    printf("%d/%d + %d/%d = %d/%d\n\n",
        num1,den1,num2,den2,nums,dens);

    resta();
    printf("%d/%d - %d/%d = %d/%d\n\n",
        num1,den1,num2,den2,nums,dens);

    producte();
    printf("%d/%d * %d/%d = %d/%d\n\n",
        num1,den1,num2,den2,nums,dens);

    quocient();
    printf("%d/%d / %d/%d = %d/%d\n\n",
        num1,den1,num2,den2,nums,dens);

    return 0;

}

//definició de la funció suma()
void suma(){

    dens=den1*den2;
    nums=num1*den2+num2*den1;

}

 

//definició de la funció resta()
void resta(){

    dens=den1*den2;
    nums=num1*den2-num2*den1;

}

 

//definició de la funció producte
void producte(){

    dens=den1*den2;
    nums=num1*num2;

}

 

//definició de la funció quocient
void quocient(){

    dens=den1*num2;
    nums=num1*den2;

}

 

Captura de l'execució del programa.

 

Explicació del programa

En aquest programa s'han creat quatre funcions anomenades suma(), resta(), producte(), i quocient(), aquestes funcions no retornen valors, s'han declarat del tipus void, només modifiquen variables globals.

La declaració de les variables es fa abans de la definició de totes les funcions, incloent la funció main(). Aquestes funcions no retornen cap valor ni accepten cap argument:

 
void suma();
void resta();
void producte();
void quocient();

A continuació, i abans també de la definició de la funció main(), es declaren les variables globals:

 
int num1,den1;          //variables globals
int num2,den2;
int nums,dens;

corresponen al numerador i denominador de dues fraccions, i el numerador i el denominador del resultat corresponent.

Veiem, per exemple, com funciona la funció suma():

 

//definició de la funció suma()
void
suma(){

    dens=den1*den2;
    nums=num1*den2+num2*den1;

}

Aquesta funció utilitza directament les variables globals sense haver de declarar-les. Tampoc hi ha cap sentència return. Les modificacions que es fan a les variables globals ja seran vistes fora de la funció.

És interessant fer notar en aquest programa l'ús del primer argument de la funció scanf():

 
scanf("%d/%d",&num1, &den1);

Exactament, la cadena de control:  "%d/%d" significa que es llegeix un enter, s'ignora el caràcter '/' i es torna a llegir un altre enter. Quan es demani la introducció de la fracció s'ha de fer de la següent forma: num/den, per exemple: 3/4.