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

 
Triangles rectangles. Introducció a les funcions

En aquesta pràctica començarem a crear funcions pròpies.

 

Desenvolupament de la pràctica

Creeu un nou arxiu del tipus C anomenat m2p08.c i escriviu el següent codi:

//m2p08.c -  triangles rectangles -

#include <stdio.h>
#include <math.h>  // recorda  -lm

double hipotenusa(double , double);
double catet (double, double);

int main(){

  double a,b;

  printf("introduïu els dos catets d'un triangle rectangle...\n");
  scanf("%lf %lf",&a,&b);
  printf("\nla hipotenusa del triangle és %lf\n",hipotenusa(a,b));

  printf("\n\nintroduïu la hipotenusa i un catet\n");
  printf("assegureu-vos que la hipotenusa sigui més gran...\n");
  scanf("%lf %lf",&a,&b);
  printf("\nl'altre catet del triangle és %lf\n",catet(a,b));

  return 0;

}

//definició de la funció hipotenusa

double hipotenusa(double c1, double c2 ){

    return sqrt(c1*c1+c2*c2);

}

//definició de la funció catet

double catet(double h, double c){

    return sqrt(h*h-c*c);

}

Captura de l'execució del programa.

 

Explicació del programa

Una funció és una part de codi independent del programa principal i d'altres funcions. A una funció se la pot cridar enviant-li dades i la funció retornarà un valor. De fet, les funcions poden fer més coses que retornar un sol valor, però això serà tema d'un mòdul posterior.

En aquesta pràctica es creen i es fan servir dues funcions: hipotenusa i catet. Ambdues funcions reben dos paràmetres del tipus double i retornen un valor, també del tipus double. 

Per tal de poder fer servir funcions, aquestes s'han de definir. La definició d'una funció consisteix en el codi necessari per tal que realitzi la tasca  encomanada. La definició de la funció hipotenusa() és:

 

double hipotenusa(double c1, double c2 ){

    return(sqrt(c1*c1+c2*c2));

}

La primera línia rep el nom d'encapçalament (header). Consisteix en el tipus de dada que retorna, en aquest cas double, el nom de la funció i, entre parèntesis i separats per comes, la llista d'arguments amb els tipus corresponents. En aquest cas, el nom de la funció és hipotenusa i té dos arguments del tipus double anomenats c1 i c2. Aquests arguments, anomenats arguments formals han de coincidir en tipus i número (no amb nom) amb els arguments actuals que són els arguments que conté una crida a la funció.

La crida a una funció es fa incloent el nom en una expressió o sentència del programa principal o bé d'altra funció. La crida a la funció hipotenusa es fa en aquesta línia:

 
printf("\nla hipotenusa del triangle és %lf\n",hipotenusa(a,b));

El segon argument d'aquesta funció de la llibreria estàndard printf() és una crida a la funció creada hipotenusa(). Els dos arguments actuals a i b són dues variables del tipus double, els valors de les quals han estat introduïts amb la funció estàndard scanf() en la línia:

 
scanf("%lf %lf",&a,&b)

Quan es crida a la funció hipotenusa(), els valors de les variables a i b són copiades en les variables formals c1 i c2 de la definició de la funció.

La sentència return permet tornar el control al programa que faci la crida. En aquest cas, la paraula return va seguida d'una expressió del tipus double. El valor d'aquesta expressió serà el valor de retorn. El valor de retorn és un valor únic del tipus declarat en la línia d'encapçalament. En aquest cas, el valor de retorn és el valor de la hipotenusa d'un triangle rectangle de catets c1 i c2, calculada mitjançant el conegut teorema de Pitàgores:

 

return sqrt(c1*c1+c2*c2);

Per tal de poder fer servir la funció hipotenusa, s'ha de declarar prèviament. La declaració de la funció es fa mitjançant el prototipus de la funció. Es fa normalment fora de la funció main(). C++ obliga a declarar explícitament una funció abans de cridar-la. El prototipus de la funció hipotenusa() és:

 
double hipotenusa(double , double);

El prototipus d'una funció consisteix en el tipus de valor de retorn, el nom de la funció i una llista de tipus d'arguments (sense identificadors o noms). Si es posen identificadors, aquests són ignorats pel compilador.

El mateix que s'ha dit de la funció hipotenusa es pot dir també de la funció catet.