Enrere Mòdul 5
Fonaments de Programació. Llenguatge C/C++---
Exercicis

 

1. Rotar tres variables.

Feu un programa en el qual es faci servir la funció:

void rota(int *a, int *b, int *c)

Aquesta funció ha de rotar els valors de les variables enteres a, b, i c, és a dir: el contingut d'a passarà a b, el contingut de b passarà a c i el contingut de c passarà a a. Per exemple, si els valors d'a, b i c abans de la crida a la funció són: 

a=2        b=3      c=10

després de la crida haurà de ser:

a=10      b=2      c=3

Evidentment, com volem que la funció modifiqui els seus arguments, aquests han de ser punters.

Anomeneu l'arxiu font: m5e1.cpp.

 

2. Valor màxim d'un vector

Feu un programa en el qual es faci servir la funció:

 double maxim(double * vector)

Aquesta funció ha de tornar el màxim del vector de nombres reals vector.

Anomeneu l'arxiu font: m5e2.cpp.

 

3. Transposada d'una matriu nxm

Un dels problemes que es pot plantejar després de fer la pràctica 7 és: què passa si la matriu no és quadrada. Això suposa un problema pel fet que no es pot convertir una matriu de dimensió nxm en una matriu de dimensió mxn. Una forma de resoldre aquest problema és fer servir una única dimensió, és a dir, declarar la matriu com:

double a[MAX_FILES*MAX_FILES];

Ara, si anomenem n al nombre de files i m al nombre de columnes, tot el codi és semblant al de la pràctica canviant:  a[i][j]  per a[i*n+j], i canviant n per m a la comprovació del segon bucle. Per exemple, la part del codi que demana els elements de la matriu seria:

  //introducció dels elements d’A

    for (i=0;i<n;i++){
        for(j=0;j<m;j++){
            printf("\na[%d,%d]=",i,j);
            scanf("%lf",&a[i*n+j]);
        }
    }

També s'ha de fer modificacions a la funció  transposada(a,n), afegint-li un argument que correspongui al nombre de columnes.

Anomeneu l'arxiu font: m5e3.cpp.

 

4. La llei d'Hondt

Modifiqueu el programa de la pràctica 8 perquè el nombre d'escons i de partits es pugui entrar per teclat. Feu també aquesta important modificació per perfeccionar el programa:
En el programa de la pràctica 8 hi ha un cas que no s'ha tingut en compte, i és que quan s'avalua la funció nou_esc per assignar un nou escó, en el cas que dos partits tinguin el mateix valor de vots[]/(esc[]+1), l'escó s'hauria d'assignar al partit més votat. Modifiqueu el que sigui necessari del programa de la pràctica 7 per tal de considerar aquesta circumstància. Proveu amb tres partits i quatre escons, i que els vots dels tres partits siguin 40,50 i 120.

Anomeneu l'arxiu font: m5e4.cpp.

 

(En el cas de que els partits que tenen el mateix valor de vots[]/(esc[]+1) tenen també el mateix nombre de vots (cosa molt poc probable), l'assignació es fa per sorteig la primera vegada que hagi l'empat i la resta de cops que es produeixi l'empat s'assigna alternativament.)