Docstoc

prob-prog

Document Sample
prob-prog Powered By Docstoc
					                          
                    PROGRAMACIÓ 
                          
                   Diplomatura d'Estadística  
                               
        (Facultat de Matemàtiques i Estadística, FME) 
                               
                               
                               
                               
                               
                               
                       Problemes 
                               
                               
                               
                               
                               
                   Miquel Sànchez i Marrè 
                               



                                   
    Departament de Llenguatges i Sistemes Informàtics 
 
                       Febrer de 2009 
 
2 
 
1. L'ENTORN DE DESENVOLUPAMENT DE PROGRAMES 
  
1.1 Comproveu si les següents sentències Java provocaren o no errors sintàctics en el procés 
de  compilació.  Suposeu  que  tots  els  objectes  necessaris  han  estat  declarats  i  definits  de 
forma correcta. 
   
    a) while ( x < 1 & y != 2)  System.in.read (ch); 
    b) for (i=1;i=n; i+)  sum = sum+ i 
    c) if (testflag & i<=n) 
        b = i * 2; 
        else io.writeln('done') 
    d) circlearea = pi'r"2; 
   
1.2 Comproveu si les següents sentències Java provocarien o no errors sintàctics en el procés 
de  compilació.  Suposeu  que  tots  els  objectes  necessaris  han  estat  declarats  i  definits  de 
forma correcta. 
   
      a) do 
             { 
                        x = y; y = z; z = x+y; 
             } 
          while z>10000; 
   
      b) root = ‐b + sqrt(disc)/2a 
   
      c) if count = 0 
                      io.writeln(“empty file”); 
   
      d) io.writeln(); io.writeln(); io.writeln(); 
   
1.3 Comproveu si les següents sentències Java provocarien o no errors sintàctics en el procés 
de  compilació.  Suposeu  que  tots  els  objectes  necessaris  han  estat  declarats  i  definits  de 
forma correcta. 
   
      a) int i,j,k = = 8; 
   
      b) switch (i)  
                     { 
                     case 0: case 1:  
                             j= j+1; k= k+1; break; 
                     case 2: j=sqrt(j+k); k=0; break; 
                     case 3,4: j= Math.abs(j+k); k=‐1 
                     } 
   
      c) if count < 15 
             a=a+1; 
          else  
                   b=b+1 
   


                                                  3 
1.4  Trobeu  i  corregiu  tots  els  errors  del  següent  programa  Java.  Classifiqueu‐los  en  errors 
sintàctics, errors d'execució o errors lògics. 
    
       Class sample 
       /* Aquest programa calcula la suma dels enters des de 1 fins a k. 
          k es llegeix com una dada */ 
          {   private static inout io = new inout(); 
                     public static void main (String args[]) throws Exception 
                       { 
                          int k, sum; 
                   io.readln(k); 
                   sum = 1; 
                   for (i=1;i<k; i+)  
                               sum == k; 
                   io.writeln(“La suma des de 1 fins a k és” + sum); 
                       } 
          }                                                                                                                                                                
    
1.5  Trobeu  i  corregiu  tots  els  errors  del  següent  programa  Java.  Classifiqueu‐los  en  errors 
sintàctics, errors d'execució o errors lògics. 
    
       Class Fibonacci 
       /* El programa intenta calcular tots els números de la successió 
             de Fibonacci, fins a un límit superior especificat per l'usuari  
          {   private static inout io = new inout(); 
                     public static void main (String args[]) throws Exception 
                       { 
                   int i, x, y, z, linit; 
                            io.readln(limit); io.writeln('Index superior dels números de Fibonacci'); 
                            i=0; x=1; io.writeln(“i:6”, x:15); 
                            i=1; y=1; io.writeln(i:6, y:15); 
                            while (z<limit)  
                              { 
                                 z=x+y 
                                 i=i+1; io.writeln(i:6, z:15); 
                                 y=z; 
                                 x=y 
                              } 
                            io.writeln(“Fi de la seqüència dels nombres de Fibonacci”); 
                            io.writeln(“S''han generat un total de” + i + “números) 
                } 
         }                                                                                                                                                                
    
                                                                                                                                                                                                   




                                                                                   4 
 
2. DISSENY DESCENDENT  I DISSENY ORIENTAT A CLASSES I OBJECTES 
  
2.1.1 Definiu un nou tipus per a cadascuna de les següents situacions: 
   
    a) La collita de blat, civada, ordi, blat de moro i soja. 
    b) Les autonomies de l'estat. 
    c) Les possibles classes de solucions d'una equació quadràtica. 
    d) Els dies de la setmana. 
    e) Els elements que s'utilitzen per a parar la taula.  
   
2.1.2 Definiu un tipus escalar subrang per a cadascuna de les següents situacions: 
   
    a) Tots els enters no negatius. 
    b) Les lletres de l'alfabet. 
    c) Les collites de blat de moro i soja de l'exercici anterior. 
    d) Els números compresos entre ‐40 i +2, ambdós inclosos. 
   
2.1.3 Quines de les següents declaracions són vàlides ? Corregiu les errades. 
   
    a) tipus color és vermell, blau, verd, groc ftipus 
        var item és vector [color] de enter fvar 
   
    b) var mostra és vector [100] de booleà; 
           reg1 és tupla 
                          nom és vector [1..10] de caràcter; 
                          numero és 0 .. 50 
                       ftupla 
        fvar 
   
    c) tipus elem és 5 .. 10; 
            rang és 0 .. 100; 
            familia és (mare, pare, fill) 
         ftipus 
        var vector1 és vector [rang] de rang; 
           vector2 és vector [conj1] de familia; 
           vector3 és vector [rang, rang] de elem 
        fvar 
   
2.1.4 Per a cadascuna de les següents estructures, escriviu les corresponents declaracions i 
codificacions necessàries: 
   
  a) Un vector anomenat preu serveix per a guardar els preus de cadascun dels 300 elements 
  en stock en un magatzem. Inicialitzeu totes les entrades a 0. 
   
  b) Una matriu de 10 x 10 inicialitzada a 1 en la diagonal i zeros a la resta. 
   
  c) Un vector de 26 enters, indexats pels caràcters del 'A' al 'Z', inicialitzats a 0. 
 



                                             5 
2.1.5  Escriviu  les  declaracions  necessàries  i  les  sentències  adequades  per  a  definir  una 
baralla estàndard de cartes. 
   
2.1.6 Escriviu una declaració tupla que pugui fer‐se servir en una biblioteca per a mantenir 
informació referent a cada llibre. La informació ha d'incloure: 
   
      1. Títol 
      2. Autor 
               a. Nombre d'autors 
               b. Noms dels autors 
      3. Informació sobre la publicació 
               a. Nom de la persona o entitat que publica 
               b. Any de la publicació 
      4. Número de catàleg 
   
Usant  l'anterior  declaració  de  la  tupla,  escriviu  un  programa  complet  que  llegeixi  la 
informació referent a un nombre variable de llibres (sense passar de 20); classifiqui els llibres 
segons l'any de publicació (els més antics primer) i imprimeixi tota la informació dels llibres 
en un format intel∙ligible. 
 
                                   —————————————— 
 
2.2.1 Sigui n un nombre enter de quatre xifres, en el qual no totes són iguales. Definim: 
   
     gran ( n ) = el major número que és possible formar amb les mateixes xifres de n. 
     petit ( n ) = el  menor   número   que  és possible  formar  amb  les  mateixes xifres de n. 
    dif ( n ) = gran ( n ) ‐ petit ( n ) 
   
    Per exemple: per a n = 1992               gran ( 1992 ) = 9921 
                                              petit ( 1992 ) = 1299 
                                              dif ( 1992 ) = 8622 
   
Dissenyeu  un  algorisme  que  llegeixi  un  número  n,  comprovi  que  satisfà  les  condicions 
demanades i calculi i imprimeixi la successió: 
   
      dif ( n ), 
      dif ( dif ( n ) ), 
      dif ( dif ( dif ( n ) ) ), 
      . . . 
fins a trobar un número m tal que:  dif ( m ) = m. 
     
Nota: S'intueix que m és sempre el mateix, 6174. 
 
2.2.2 En una cinta de caràcters tenim una seqüència de frases. Cada frase consta de lletres 
minúscules  i  blancs  i  té  com  a  màxim  100  caràcters.  Les  frases  estan  separades  per  un 
asterisc. La frase final de la cinta és la frase buida (que no conté cap paraula). 
Direm que una frase és palíndroma quan es pot llegir d'igual forma d'esquerra a dreta que 
de dreta a esquerra independentment dels blancs i dels accents. Dissenyeu un algorisme que 
escrigui totes les frases palíndromes que hi ha a la cinta. 
   


                                                 6 
2.2.3 Una paraula w és un anagrama de la paraula v, si w s'obté de v canviant l'ordre de les 
lletres.  Per  exemple,  CAPA  és  un  anagrama  de  PACA  i  ACAP.  En  una  cinta  tenim  una  frase 
acabada en un punt. Les paraules tenen com a màxim 20 lletres i hi ha almenys una paraula. 
Dissenyeu un algorisme que compti el nombre de paraules de la frase que són anagrames de 
la primera paraula. 
   
2.2.4  Els  telegrames.  En  una  cinta  de  caràcters  tenim  una  seqüència  de  telegrames, 
cadascun  d'ells  acabat  amb  el  mot  FITEL.  Cadascun  dels  telegrames  està  format  per  mots 
separats per un o més blancs. Els mots estan dividits en dues classes: mots a facturar i mots 
de servei (no facturables) que són FITEL i STOP. 
La seqüència de telegrames acaba en un telegrama buit (no té cap mot o només conté mots 
STOP).  Dissenyeu  un  algorisme  que  permeti,  per  a  cada  telegrama,  imprimir  el  text  del 
telegrama respectant les següents condicions: 
   
     1) Els mots estiguin separats per només un blanc, i aquests mots no poden  sobrepassar 
     la longitud de 20 caràcters; els mots massa llargs han de ser truncats per la dreta. 
     2) El text anirà seguit del nombre de mots a facturar i del nombre de mots massa llargs. 
     El mot FITEL pot escriure's o no a la fi de cada telegrama. 
 
2.2.5 El poema (2). Donat un text que representa un poema on els versos esta separats pel 
caràcter '/', dissenyeu un algorisme que examini les combinacions de la rima (escrigui cada 
vers i el tipus de rima que té: A, B, C, etc.) seguint les següents consideracions: 
   
     1) Els versos estan acabats en paraules agudes, i per tant la rima s'ha de considerar a 
     partir de l'últim grup vocàlic. 
    2) Considerarem la rima consonant (sons idèntics). 
     3) Un grup vocàlic té com a màxim 2 vocals i un consonàntic 2 consonants com a molt. 
    4) No hi ha més de 26 rimes diferents. 
    5) No hi ha versos de més de 60 caràcters. 
    6) Hi ha si més no 1 vers. 
    7) A cada vers hi ha una paraula com a mínim. 
    8) A cada paraula hi ha una vocal com a mínim. 
   
Per exemple, la sortida generada per la corresponent entrada seria: 
 
        Els teus ulls son de color de mel                                 A 
        i el teu cabell, ros com un fil d’or                              B 
        Aixi la teva presencia em transporta al cel                       A 
        i em sento com el bandoler amb el seu tresor                      B 
        No hi ha paraules per a descriure el meu goig                     C 
      .  .  .  .                                                         … 
 
2.2.6 Dissenyeu un algorisme que generi la representació decimal exacta de les fraccions  1 / 
n  per a  n = 2, 3, ..., 50  sense utilitzar variables reals. La representació ha de satisfer: 
   
    a)  La  seqüència  de  dígits  conclourà  tan  aviat  com  s'hagi  completat  el  període  de  la 
    representació. 
    b) Un espai en blanc precedirà al primer dígit del període. 
   
La sortida de l'algorisme ha de ser: 


                                                  7 
   
                                n                          1 / n        
   
                                 2                         0.5 0 
                                 3                         0. 3 
                                 4                         0.25 0 
                                 5                         0.2 0 
                                 6                         0.1 6 
                                 7                         0. 142857 
                                 ...                       ... 
                                 50                        0.02 0 
   
Nota:  Teniu  en  compte  que  al  fer  la  divisió  de  1  /  n  només  poden  aparèixer  n  residus 
diferents,  i  per  tant  es  poden  usar  dos  vectors,  un  vector  d  que  contingui  els  dígits  de  la 
representació i un altre vector r tal que r[j] = k signifiqui que el residu j ha sortit en el k‐èssim 
pas de la divisió. Aquest últim permetrà definir la fi de la representació i la posició de l'espai 
en blanc. 
                                                       
2.2.7 El joc de la vida és una simulació brillant creada pel matemàtic John Horton Conway de 
la Universitat de Cambridge. El seu propòsit és doble: la diversió i la simulació d'un model del 
cicle  de  vida  de  les  societats  d'organismes  vivents.  El  joc  és  juga  en  un  gran  tauler 
(suposadament infinit). Cada casella o cel∙la en el tauler representa un lloc possible per a un 
organisme vivent (els organismes els representarem pel caràcter '*'). Cada cel∙la té 8 cel∙les 
adjacents  exceptuant  les  dels  límits  del  tauler  (nosaltres  limitarem  el  tauler  a  50  x  50 
caselles). 
Les  tres  regles  bàsiques  de  Conway,  o  lleis  genètiques  com  ell  les  anomena,  són  força 
simples: 
   
  1) Naixement: Cada cel∙la buida, adjacent a tres cel∙les veïnes ocupades exactament, tindrà 
  un naixement  en la propera generació. 
   
  2) Mort: Cada cel∙la ocupada, amb 1 o cap veí mor per soledat. Cada cel∙la ocupada amb 4 
  o més veïns mor per superpoblació. 
   
  3) Supervivència: Cada cel∙la ocupada, amb 2 o 3 veïns sobreviu a la propera generació. 
   
Tots  els  naixements  i  morts  passen  simultàniament  i  per  tant  s'han  de  mantenir  dues 
configuracions: l'actual i la propera. L'aplicació d'aquestes lleis genètiques a tot un tauler per 
a produir una nova estructuració de la societat d'organismes vivents s'anomena generació. 
El joc s'acaba quan la població mor (tots els organismes moren) o quan s'arriba a un estat 
estacionari (generació(n+1) = generació(n)), o bé quan s'arriba a un límit màxim de generació 
especificat per l'usuari. 
Dissenyeu  un  algorisme  que  implementi  aquest  joc:  llegeixi  una  configuració  inicial  i  vagi 
calculant les noves generacions segons les lleis genètiques i les dibuixi. 
   
2.2.8  Repetiu  l'exercici  anterior  però  ara  considerant  que  el  tauler  és  cíclic.  És  a  dir, 
considerant que tota cel∙la té sempre 8 cel∙les veïnes. Compareu els resultats obtinguts. 
   
2.2.9  Dissenyeu  un  algorisme  que  simuli  el  joc  de  vaixells  entre  el  computador  i  l'usuari. 
Considereu  un  tauler  de  10  x  10  posicions  i  que  els  vaixells  a  situar/destruir  són:  un  de  5 


                                                     8 
posicions,  2  de  4  posicions,  3  de  3  posicions,  4  de  2  posicions  i  5  de  1  posició.  Utilitzeu  la 
funció random per a generar números pseudo‐aleatoris en l'interval (0,1). 
   
2.2.10 La paciència del rellotge és un solitari que es juga amb una baralla anglosaxona de 52 
cartes.  Aquestes  es  distribueixen  en  13  piles  de  quatre  cartes  cadascuna.  Les  12  primeres 
piles  es  col∙loquen  simulant  les  hores  d'un  rellotge  i  l'ultima  es  posa  en  el  centre.  El  joc 
s'inicia  agafant  la  carta  superior  de  la  pila  central  i  col∙locant‐la  a  sota  de  la  pila  que  li 
correspongui segons la numeració (Jack = 11, Queen = 12, King en el centre). Aquesta pila 
dóna la carta (superior de la pila) per al següent moviment. El joc acaba quan els quatre Reis 
han estat col∙locats en el centre, i es considera acabat amb èxit si totes les cartes han estat 
situades correctament. 
Dissenyeu un algorisme  que simuli la paciència del rellotge i ens digui si el joc ha tingut èxit 
o no, utilitzant la funció random per a generar aleatòriament el repartiment de les cartes. 
   
2.2.11  Ordenació  per  comptabilització  de  freqüències.  Suposeu  que  en  un  vector  A  de  n  
components  tenim  emmagatzemada  la  informació  de  cert  nombre  de  persones.  Les 
components  del  vector  són  tuples  del  tipus  persona,  un  dels  seus  camps  és  edat  que  se 
suposa definida sobre 1..m (m per tant és un número petit). Si disposem d'espai de memòria 
suficient,  podem  considerar  un  vector  F  sobre  1..m  i  un  vector  B  sobre  1..n.  És  possible 
llavors ordenar A en el vector B seguint tres fases: 
   
      a) En F emmagatzemem per a cada edat la seva freqüència en el vector A. Per exemple 
      F[20] = 250 indicaria que 250 persones del vector A tenen 20 anys. 
   
      b)  Fem  un  recorregut  de  F,  acumulant  cada  element  en  el  seu  successor  (freqüències 
      acumulades),  per  a  obtenir  a  la  fi  de  la  fase,  en cada F[i] el nombre de persones amb 
      edat inferior o igual a i. 
   
      c) S'efectua un recorregut d'A, partint de l'element d'índex més elevat, per a col∙locar‐
      los  en  B  de  forma  ordenada.  Cada  element  A[i]  és  situat  en  la  posició  indicada  per  el 
      valor  de  l'element  de  F  que  correspon  al  seu  camp  edat,  F[A[i].edat];  després 
      F[A[i].edat] es decrementa en una unitat per a indicar la posició del proper valor d'igual 
      camp edat. 
   
Dissenyeu un algorisme que ho faci. Discutiu l'eficàcia i estabilitat de l'algorisme. Compareu‐
lo amb altres algorismes d'ordenació. En quines situacions es pot implementar ? 
 
2.2.12  El  circuit  de  Catalunya.  L’encarregat  de  les  curses  del  circuit  de  Montmeló  està 
intentant automatitzar la preparació de les graelles de sortida dels diferents Grans Premis, ja 
sigui  de  motociclisme  o  bé  d’automobilisme.  En  una  cursa  no  participen  mai  més  de  60 
pilots.  Els  pilots  de  cada  cursa  són  diferents  als  de  les  altres.  Les  graelles  de  sortida  estan 
formades per una sèrie de línies de sortida. Cadascuna de les línies de sortida està formada 
per 4 pilots en les curses de motociclisme i per 2 pilots en les d’automobilisme. A la primera 
línea de sortida hi han els pilots que han obtingut els millors temps en els entrenaments, a la 
segona els pilots amb els següents millors temps, etc., fins els de la darrera línia, que són els 
que han obtingut els pitjors temps. Dins de cada línia, els pilots també s’ordenen de millor a 
pitjor  temps.  La  configuració  de  les  graelles  de  sortida  es  realitza  a  partir  dels  temps  dels 
entrenaments.  Durant  els  entrenaments  un  pilot  va  fent  un  nombre  variable  de  temps, 
resultants  de  la  cronometració  del  seu  pas per l’arribada, a cada volta. Així, per cada pilot 



                                                       9 
s’escull  el  temps  millor  (el  més  ràpid)  dels  que  ha  efectuat,  i  és  el  que  s’utilitzarà  per  a 
decidir la configuració de les diferents línies en la graella de sortida. 
 
Dissenyeu un algorisme que rebi com a dades d'entrada un codi de la cursa (un caràcter) per 
saber  si  la  cursa  és  de  motociclisme  (‘M’)  o  d’automobilisme  (‘A’)  i  la  seqüència 
d'informacions sobre els diferents temps fets en els entrenaments pels diferents pilots, que 
constarà del nom del pilot, el número del pilot, el temps efectuat (cada unitat d'informació 
en una línia) separats per espais en blanc, en aquest format: 
 
      <codi cursa> 
[<número del pilot> <nom del pilot> <minuts> <segons> <centèsimes de segon>]* 
 
El número del pilot pot ser qualsevol valor enter (> 0), el nom del pilot és una seqüència de 
caràcters, els minuts i els segons són valors enters (≥ 0  i < 60), i les centèsimes és també un 
valor  enter  (≥  0  i  <  100).  La  seqüència  finalitzarà  amb  un  número  de  pilot  igual  a  0.  Per 
exemple, 
 
                                  M 
                                  8   Checa  1 02 56 
                                  4   Crivillé 1 01 34 
                                  8   Checa  1 01 87 
                                  1   Doohan  1 01 47 
                                  21 Biaggi  1 00 97 
                                  4   Crivillé 0 59 98 
                                  … 
                                  2  Harada  1 00 15 
                                  0 
 
El resultat ha de ser un llistat per pantalla on hi hagi la configuració de la graella de sortida 
(classificació dels pilots segons el seu millor temps), especificant per a cada línia de sortida, 
el número d’ordre del pilot a la sortida, el nom i el número del pilot i el seu millor temps en 
els  entrenaments.  Suposarem  que  no  hi  ha  cap  mena  d'error  en  les  dades  d’entrada:  els 
minuts, segons i centèsimes són correctes, etc. 
 
2.2.13 El concurs de calçots de Valls. L'organitzador del concurs anual de calçots de Valls vol 
controlar  informàticament  els  resultats  del  concurs.  El  concurs  consisteix  en  què  els 
diferents participants van menjant plats de calçots mentre poden. Cada plat de calçots té un 
nombre de calçots especificat pel concursant. És a dir, que unes vegades en pot menjar més i 
d'altres menys, segons el seu estat d'ànim i el seu estómac. Hi ha un jurat que va puntuant 
cadascun dels plats que es mengen els participants. El jurat valora no només la quantitat de 
calçots  que  mengen  a  cada  plat,  sinó  també  l'elegància  en  el  menjar,  el  ritme 
d'endrapament, etc. En el concurs no participen mai més de 40 concursants. Cadascun dels 
concursants té un dorsal amb el seu número. El concursant que guanya és aquell que obté 
una millor puntuació mitjana dels plats que s'ha menjat, i en cas d'empat es té en compte el 
nombre total de calçots endrapats. 
 
Dissenyeu un algorisme que rebi com a dades d'entrada la seqüència d'informacions sobre 
les  diferents  puntuacions  dels  diferents  plats  de  calçots  que  mengen  els  diferents 
concursants.  Aquesta  informació  constarà  del  número  del  concursant,  el  nom  del 



                                                     10 
concursant, el nombre de calçots del plat i la puntuació del plat (cada unitat d'informació en 
una línia) separats per espais en blanc, en el següent format: 
 
          [<nº concursant> <nom concursant> <nº calçots del plat> <puntuació plat>]* 
 
El número del concursant pot ser qualsevol valor enter (> 0 i ≤ 40), el nom del concursant és 
una seqüència de caràcters, el nombre de calçots d'un plat pot ser qualsevol enter (> 0), i la 
puntuació del plat és un valor real (≥ 0.0 i ≤ 10.0). La seqüència finalitzarà amb un número 
de concursant igual a 0. Per exemple, 
 
                    3   Miquel  8 7.5 
                    2    Maria   10  8.5 
                    17   Carme  6   7.0 
                    1   Josep   5    5.5 
                    9    Anna   7  6.5 
                    3   Miquel  12  9.5 
                    17  Carme  10  9.0 
                    … 
                    2   Maria  5  6.0 
                    0 
 
El resultat ha de ser un llistat per pantalla on hi hagi la classificació final del concurs (llistat 
de tots els concursants segons la puntuació mitjana, i en cas d'empat segons el nombre total 
de calçots), especificant per a cada línia de sortida, el número d’ordre de la classificació, el 
nom i el número del concursant, la seva puntuació mitjana i el nombre de total de calçots. 
Suposarem  que  no  hi  ha  cap  mena  d'error  en  les  dades  d’entrada:  els  noms,  números, 
puntuacions són correctes, etc.  
 
2.2.14  La  lotto  6/49.  L’entitat  de  Jocs  i  Apostes  de  la  Generalitat  està  buscant  un  nou 
programa per a fer un resum estadístic de cada sorteig i gestionar el càlcul de premis de la 
lotto 6/49 per a cada sorteig, que com tothom sap consisteix en mirar d’encertar mitjançant 
una aposta de 6 números, els 6 nombres (més el complementari) que surten aleatòriament 
d’un bombo d’entre els 49 possibles (de l’u al quaranta‐nou). El procediment de repartiment 
dels  premis  és  el següent. De la quantitat recaptada en totes les apostes per a un sorteig, 
només el 80% es destina a premis. Hi ha 5 categories d’encerts que donen dret a premi: Els 
de 6 encerts es reparteixen uniformement el 30% de la quantitat destinada a premis. Els de 
5 encerts més el número complementari (5 + C) es reparteixen uniformement el 25% de la 
quantitat  destinada  a  premis.  Els  de  5  encerts  es  reparteixen  uniformement  el  20%  de  la 
quantitat  destinada  a  premis.  Els  de  4  encerts  es  reparteixen  uniformement  el  15%  de  la 
quantitat  destinada  a  premis.  Els  de  3  encerts  es  reparteixen  uniformement  el  10%  de  la 
quantitat destinada a premis. Una aposta només dóna lloc a un premi, el més gran de tots 
els que conté. La recaptació per cada aposta és de 1 Euro. 
 
Dissenyeu  un  algorisme  que  rebi  com  a  dades  d'entrada  mitjançant  el  teclat  la  següent 
informació:  a  la  primera  línia  la  combinació  guanyadora  (ordenada  creixentment)  formada 
per 6 nombres enters més el número complementari (un altre enter), i  a partir de la segona 
línia, la seqüència d’apostes fetes per la gent per a un determinat sorteig. Cada aposta està 
formada  per  6  números  enters  ordenats  creixentment.  La  seqüència  finalitzarà  amb  un 
número igual a 0. Per exemple una entrada podria ser la següent, 


                                                  11 
 
                                          12 15 25 27 29 39 32  
                                          2 7 14 15 28 39                             
                                          3 11 18 25 27 31  
                                          … 
                                          5 21 27 30 38 47 
                                          0 
 
El  resultat  ha  de  ser  la  recaptació  del  sorteig  i  una  taula  resum  amb  les  estadístiques  del 
sorteig per a cada categoria d’encerts (fins i tot les que no tenen premi): categoria del premi, 
nombre d’apostes encertades, el percentatge d’encerts, la quantitat a repartir i el premi per 
aposta.  Finalment  hi  haurà  una  línia  final  amb  els  totals  d’apostes  i  el  total  de  quantitat  a 
repartir. Podeu suposar que no hi ha cap mena d'error en les dades d’entrada: els números 
de les apostes són correctes (entre 1 i 49), el valor de la recaptació no provoca problemes 
d’overflow, etc. Per exemple un resultat podria ser, 
 
Recaptació del sorteig: 700.087.500 
 
  
         Categoria  Nº Encertants  % Encertants Quant. a repartir Premi per aposta 
               6                1          0,000021           168.021.000         168.021.000 
            5 + C               3          0,000064           140.017.500          46.672.500 
               5                7           0,00015           112.014.000          16.002.000 
               4              660            0,014             84.010.500            127.288 
               3            13.024            0,28             56.007.000              4.300 
               2         1.295.171           27,75                  0                    0 
               1         1.631.200           34,95                  0                    0 
               0         1.727.184              37                  0                    0 
          TOTALS         4.667.250            100             560.070.000                  
 
 
2.2.15  Eurovisió.  Els  organitzadors  del  concurs  de  la  Cançó  Europea,  anomenat  Eurovisió, 
volen disposar d’una eina automàtica que permeti fer el recompte de vots de forma gairebé 
immediata després del concurs. Tanmateix volen poder fer certes anàlisis de les tendències 
dels vots. En aquest concurs hi ha un màxim de 24 països participants. Cada país participant 
té un representant que canta una cançó. Cada país també disposa d’un jurat, que emet unes 
puntuacions,  per  a  cada  cançó  participant  en  el  concurs,  tret  de  la  del  seu  propi  país.  Les 
puntuacions que es donen són de 1 punt, 2 punts, 3 punts, 4 punts, 5 punts, 6 punts, 7 punts, 
8  punts,  10  punts  i  12  punts.  La  cançó  guanyadora  és  la  que  aconsegueix,  després  de  les 
votacions, el nombre més gran de punts. En cas d’empat, la guanyadora és la que ha assolit 
la puntuació màxima (12 punts) el major nombre de vegades.  
 
Dissenyeu un algorisme que rebi com a dades d'entrada, mitjançant el teclat, la seqüència de 
votacions  emeses  pels  diferents  països,  en  qualsevol  ordre,  que  s’han  rebut  per  Internet. 
Cada votació està formada per una tripleta de valors: 
 
                  <nom del país votant> <nom del país votat> <número de punts> 



                                                     12 
 
on  els  noms  dels  països,  que  no  se  saben  quins  són  a  priori,  són  cadenes  de  caràcter,  i  el 
número de punts, és un valor enter (1, 2, 3, 4, 5, 6, 7, 8, 10 o 12). La seqüència finalitzarà 
amb un nom de país igual a ‘Imaginari’. Per exemple una entrada podria ser la següent, 
 
                                         Estònia  Letònia  10                       
                                         Letònia  Estònia  12 
                                         Catalunya Malta 8 
                                         Lituània  Estònia  7 
                                         Malta  Catalunya  4 
                                         … 
                                         Letònia Catalunya 8 
                                         Imaginari 
 
El resultat ha de ser: 
 
• Quin país ha guanyat el concurs, segons les normes habituals. 
• Quin  país  hauria  guanyat  el  concurs,  si  el  guanyador  fos  el  país  amb  mitjana  de  punts 
    més alta. 
• Un llistat, on per a cada país, s’especifiquin per ordre decreixent, les puntuacions que ha 
    rebut dels altres països. 
• Un llistat, on per a cada país, s’especifiquin per ordre decreixent, les puntuacions que ha 
    atorgat als altres països. 
 
Podeu suposar que no hi ha cap mena d'error en les dades d’entrada: les puntuacions són 
correctes, els països no repeteixen puntuacions, etc. 
 
2.2.16  TravCat.  L’Entitat  de  Jocs  i  Apostes  de  la  Generalitat  (EJAG)  vol  llençar  un  nou 
mecanisme de travesses de futbol anomenat TravCat. Serà molt similar al que ja existeix a 
l’estat espanyol, amb la variació de que la travessa estarà formada per 20 partits de futbol, 
que els apostants han d’encertar amb els típics signes 1 (guanya l’equip local), X (hi ha un 
empat), 2 (guanya l’equip visitant). L’EJAG està buscant un nou programa per a fer un resum 
estadístic de cada jornada i gestionar el càlcul de premis per a cada jornada. El pronòstic dels 
apostants  consisteix  en  mirar  d’encertar  mitjançant  una  aposta  de  20  pronòstics,  els  20 
resultats dels partits de futbol de la jornada que formen part de la travessa. El procediment 
de repartiment dels premis és el següent. De la quantitat recaptada en totes les apostes per 
a  una  jornada,  només  el  80%  es  destina  a  premis.  Hi  ha  4  categories  d’encerts  que  donen 
dret a premi:  
 
• Els  de  20  encerts  es  reparteixen  uniformement  el  40%  de  la  quantitat  destinada  a 
    premis.  
• Els  de  19  encerts  es  reparteixen  uniformement  el  25%  de  la  quantitat  destinada  a 
    premis.  
• Els  de  18  encerts  es  reparteixen  uniformement  el  20%  de  la  quantitat  destinada  a 
    premis.  
• Els  de  17  encerts  es  reparteixen  uniformement  el  15%  de  la  quantitat  destinada  a 
    premis.  


                                                    13 
 
Una travessa només dóna lloc a un premi, el més gran de tots els que conté. La recaptació 
per cada aposta és de 2 EUROS. 
 
Dissenyeu  un  algorisme  que  rebi  com  a  dades  d'entrada  mitjançant  el  teclat  la  següent 
informació: a la primera línia els resultats reals dels partits (ordenats segons el número de 
partit) formada per 20 caràcters (‘1’, ’X’, ‘2’) separats com a mínim per un espai, i a partir de 
la segona línia, la seqüència de travesses fetes per la gent per a una determinada jornada. 
Cada travessa està formada per els 20 pronòstics dels resultats dels partits (ordenats segons 
el número de partit). La seqüència finalitzarà amb un caràcter igual a ‘0’. Per exemple una 
entrada podria ser la següent, 
 
                         1 X X 2 1 1 X 1 X 2 1 1 2 1 X  1 2 1 1 1  
                         2 1 X 2 X 1 1 2 1 X 1 1 2 1 1  X X 1 1 X 
                         X 1 1 1 1 X 1 1 2 X 1 X 1 X  1 2 X 1 X 1 
                         … 
                         X X 1 2 1 2 1 1 X 1 1 1 X X 1  1 X 1 2 1 
                         0 
 
El resultat ha de ser la recaptació de la jornada i una taula resum amb les estadístiques de la 
jornada  per  a  cada  categoria  d’encerts  (fins  i  tot  les  que  no  tenen  premi):  categoria  del 
premi, nombre de travesses de la categoria, el percentatge de travesses de cada categoria, la 
quantitat a repartir a cada categoria i el premi per travessa a cada categoria. Finalment hi 
haurà una línia final amb els totals de travesses, de percentatge de travesses (serà sempre 
100) i el total de quantitat a repartir. Podeu suposar que no hi ha cap mena d'error en les 
dades d’entrada: els símbols dels pronòstics de les travesses són correctes (‘1’, ‘X’ o ‘2’), el 
valor de la recaptació no provoca problemes d’overflow, etc. Per exemple un resultat podria 
ser: 
 
Recaptació del sorteig: 700.087.500 
  
                             Nº             %             Quant. a 
            Categoria                                                   Premi per travessa 
                         Travesses  Travesses              repartir 
                20           1           2.9E‐07        224028000           224028000 
                19           5           1.4E‐06        140017500            28003500 
                18           43          1.2E‐05        112014000           2604976.74 
                17          767         0.00022          84010500            109531.29 
                16         13024         0.0037               0                  0 
                15         201432         0.058               0                  0 
                14         456345          0.13               0                  0 
                13         671298          0.19               0                  0 
                12         867000          0.25               0                  0 
                11        1578900          0.45               0                  0 
                10        3345697          0.96               0                  0 
                 9        7876532          2.25               0                  0 
                 8       14912036          4.26               0                  0 
                 7       25657302          7.33               0                  0 


                                                   14 
                 6         37890715         10.82              0                   0 
                 5         59628143         17.03              0                   0 
                 4         89300210         25.51              0                   0 
                 3         41722034         11.92              0                   0 
                 2         33988543         9.71               0                   0 
                 1         21639027         6.18               0                   0 
                 0         10294696         2.94               0                   0 
              TOTALS      350043750          100           560070000                
 
2.2.17  Forum'2004.  L'ajuntament  de  Barcelona us vol encarregar la confecció d'un sistema 
informàtic  que  analitzi  estadísticament  els  moviments  de  persones  al  recinte  del 
Forum'2004. El recinte disposa de 4 zones d'accés (nord, est, sud i oest). Cada zona consta de 
20 punts d'entrada i 20 punts de sortida. Per cada punt, en un moment donat hi pot entrar o 
sortir  una  sola  persona.  De  manera  automàtica,  es  van  guardant  els  moviments  dels 
diferents  punts  d'entrada  i  dels  de  sortida  a  totes  les  4  zones  durant  el  dia.  L'entrada  al 
recinte val 20 €. Al vespre, un cop ja no pot entrar ningú més i ja ha sortit tothom, llavors 
s'engega el sistema informàtic automàtic d'anàlisi estadística. 
 
Dissenyeu un algorisme que rebi com a dades d'entrada, mitjançant el teclat, la seqüència 
d'entrades  i  sortides  fetes  per  la  gent  durant  la  jornada.  Cada  moviment  està  format  per 
tripletes que consisteixen en el nombre del punt d'accés (un enter entre 1 i 20),  el tipus de 
punt  (una  lletra  on  'E'  significa  entrada  i  'S'  sortida),  i  la  zona  d'accés  (una  cadena).  La 
seqüència finalitzarà amb un nombre enter igual a 0. Per exemple una seqüència d'entrada 
d'un dia qualsevol podria ser la següent: 
 
                           4 E Nord 
                           7 S Sud 
                           13 E Est 
                           7 E Nord 
                           20 S Oest 
                           7 S Nord 
                           4 E Nord 
                           … 
                           20 S Oest 
                           0 
 
El resultat ha de ser el nombre de persones total que han entrat al recinte durant el dia, la 
recaptació  aconseguida  i  una  taula  resum  amb  les  estadístiques  de  la  jornada  per  a  cada 
zona d'accés: nombre d'entrades (persones que han entrat), nombre de sortides (persones 
que han sortit), la mitjana d'entrades per punt d'entrada, la mitjana de sortides per punt de 
sortida,  el  màxim  d'entrades  de  tots  els  punts  d'entrada  i  el  màxim  d'entrades  de  tots  els 
punts de sortida.  
 
Un exemple podria ser: 
 
Nº Total de Persones: 20.000  
Recaptació del dia: 400.000 € 


                                                     15 
  
                                       Mitjana             Mitjana        Màxim Nº  Màxim Nº 
          Nº        Nº 
                                     Entrades per        Sortides per     d'entrades  d'entrades 
 Zona  Entrades  Sortides 
                                         punt               punt          dels punts  dels punts de 
       per zona  per zona 
                                      d'entrada           de sortida      d'entrada      sortida 
                                                                                              
 Nord       4800         5100            240                 255             246           264 
  Est       5200         4900            260                 245             268           259 
 Sud        4500         4000            225                 200             237           224 
 Oest       5500         6000            275                 300             289           317 
 
Podeu  suposar  que  no  hi  ha  errors  a  les  dades  d'entrada:  els  nombres  dels  punts  són 
correctes, els noms de les zones també, etc. 
 
 
2.2.18  El  Pàrking  de  Molló.  L'Ajuntament  de  Molló  us  vol  encarregar  la  confecció  d'un 
sistema  informàtic  que  analitzi  estadísticament  la  ocupació  i  la  recaptació  diària  del  nou 
pàrking  subterrani  que  han  construït.  El  pàrking  consta  de  4  plantes  subterrànies,  i  cada 
planta disposa de 50 places. El pàrking obre a les 7h del matí i tanca a les 23:30h del vespre. 
El  preu  del  pàrking  és  de  3  €  per  cada  hora,  i  les  fraccions  d’hora  es  paguen 
proporcionalment als minuts transcorreguts. Cada plaça està equipada amb un sensor que 
detecta  la  ocupació  o  desocupació  de  la  plaça,  així  com  la  hora  en  que  es  produeix.  Totes 
aquestes dades es van guardant durant el dia, per a ser processades després. 
Al vespre, un cop ja no pot entrar cap cotxe i ja han sortit tots, llavors s'engega el sistema 
informàtic d'anàlisi estadística. 
 
Dissenyeu un algorisme que rebi com a dades d'entrada, mitjançant el teclat, la seqüència 
d’ocupacions  i  desocupacions  fetes  pels  cotxes  dels  clients  del  pàrking  durant  la  jornada. 
Cada informació està formada per quíntuples que consisteixen en el número de la planta (un 
enter entre ‐1 i ‐4), el número de la plaça (un número enter entre 1 i 50), la hora del dia en 
que es produeix la ocupació/desocupació (un nombre enter entre 7 i 23), el minut del dia en 
que  es  produeix  la  ocupació/desocupació  (un  nombre  enter  entre  0  i  59),  el  codi  del 
moviment  (una  lletra  on  'O'  significa  ocupació  i  'D'  desocupació).  La  seqüència  finalitzarà 
amb  un  nombre  enter  igual  a  0.  Per  exemple  una  seqüència  d'entrada  d'un  dia  qualsevol 
podria ser la següent: 
 
                          ‐1 2 7 12 O 
                          ‐3 10 7 18 O 
                          ‐1 1 7 22 O 
                          ‐1 2 7 42 D 
                          ‐4 27 7 48 O 
                          ‐3 10 8 3 D 
                          ‐1 2 8 10 O 
                          ‐1 1 8 24 D 
                          ‐4 50 8 24 O 
                          … 
                           ‐2 33 23 28 D 



                                                   16 
                            0 
 
El resultat ha de ser els diners recaptats durant tot el dia al pàrking, el nombre de vehicles 
totals que han utilitzat el pàrking, i un llistat resum amb les estadístiques de la jornada per a 
cada plaça de pàrking: nombre de cotxes que han aparcat a aquella plaça, el temps total que 
la plaça ha estat ocupada (en hores i minuts) i el temps mitjà d’estada a aquella plaça (en 
hores i minuts). Podeu suposar que no hi ha errors a les dades d'entrada: tot cotxe que entra 
després surt, els números de planta i plaça són correctes, etc. 
 
2.2.19  El  gerent  del  supermercat  TOTBO  us  vol  encarregar  la  confecció  d'un  sistema 
informàtic que analitzi estadísticament la utilització de les diverses caixes, la facturació i el 
nombre de clients que venen durant el dia al nou supermercat que han construït a la zona 
universitària.  El  supermercat  té  20  caixes.  A  cada  caixa  es  van  guardant  les  dades  de  cada 
compra que els clients fan a aquella caixa. Totes aquestes dades es van guardant durant el 
dia, per a ser processades després per l’encarregat de la botiga. 
Al vespre, un cop ja ha tancat l’establiment i ja han sortit tots els clients, llavors s'engega el 
sistema informàtic d'anàlisi estadística. 
 
Dissenyeu  un  algorisme  que  rebi  com  a  dades  d'entrada,  que  introduirà  l’encarregat 
mitjançant el teclat, la seqüència de compres fetes pels diversos clients a les diverses caixes 
del supermercat durant l’horari d’obertura. Cada informació relativa a la compra d’un client 
a una caixa està formada per un parell de valors que consisteixen en el número de la caixa 
(un  enter  entre  1  i  20)  i  l’import  gastat  per  aquell  client  a  aquella  caixa  (un  número  real 
positiu,  expressat  en  euros).  La  seqüència  finalitzarà  amb  un  nombre  enter  igual  a  0.  Per 
exemple una seqüència d'entrada d'un dia qualsevol podria ser la següent: 
 
                           4 53.45 
                           17 23.78 
                           6 10.0 
                           1 17.89 
                           4 34.67 
                           10  78.6 
                           17 42.2 
                           … 
                           6 35.27 
                           0 
 
El resultat ha de ser una taula resum on apareixi, per a cada caixa, el nombre de clients que 
han comprat a aquella caixa, l’import total facturat a aquella caixa (en euros), la mitjana del 
import facturat a aquella caixa, el màxim import facturat a aquella caixa i el mínim import 
facturat a aquella caixa. Podeu suposar que no hi ha errors a les dades d'entrada. 
 
2.2.20 El catering. El gerent de la nova empresa de catering BO‐i‐FET us vol encarregar la confecció 
d'un  sistema  informàtic  que  analitzi  estadísticament  la  venda  dels  diferents  productes  que 
comercialitza  (plats  principals,  begudes,  entrants,  postres,  aperitius,  etc.)  als  diferents  clients  que 
està  començant  a  tenir.  De  moment  tenen  una  gamma  de  20  productes,  i  com  a  molt  tenen  15 
clients,  ara  per  ara.  Durant  el  dia  es  van  rebent  les  diferents  comandes  de productes dels diversos 
clients, per a l’endemà. Aquestes comandes s’apunten en una llibreta. Al vespre, s'engega el sistema 


                                                       17 
informàtic  d'anàlisi  estadística.  Totes  aquestes  dades  es  processen,  i  així  ja  tenen  feta  l’anàlisi 
estadística i tenen la planificació per al repartiment dels encàrrecs per a l’endemà. 
 
Dissenyeu un algorisme que rebi com a dades d'entrada, que introduirà l’encarregat de l’empresa pel 
teclat,  la  seqüència  de  comandes  dels  diversos  productes  fetes  pels  diversos  clients  durant  l’horari 
d’obertura de la botiga de BO‐i‐FET. Cada informació relativa a la comanda d’un client està formada 
per una tripleta de valors que consisteixen en el nom del client (una cadena), el codi de producte (un 
enter entre 1 i 20), i el nombre d’unitats que vol del producte (un enter, que potser positiu o negatiu). 
Un  nombre  d’unitats  negatiu  significa  que  vol  unitats  de  menys  de  la  seva  comanda  anterior.  La 
seqüència  finalitzarà  amb  la  cadena  “FI”.  Per  exemple,  una  seqüència  d'entrada  d'un  dia  qualsevol 
podria ser la següent: 
 
                                      FME‐UPC 4 80 
                                      FME‐UPC 10 80 
                                      La‐Caixa  7 400 
                                      La‐Caixa  2 400 
                                      ZurichSA  1  130 
                                      La‐Caixa 4 400 
                                      ZurichSA 3 130 
                                      Planeta 14 300 
                                      Planeta 17 280 
                                      ZurichSA 3 70 
                                      Planeta  14 ‐20 
                                      FME‐UPC 4 ‐10 
                                      … 
                                      AGBAR  5  600 
                                      FI 
 
Els resultats de l’anàlisi han de ser dos llistats per pantalla:  
          ‐  Un  llistat  que  descrigui,  per  a  cada  producte,  el  nombre  total  d’unitats  d’aquell  producte 
          demanades per a l’endemà, entre tots els clients.  
          ‐  Un  llistat  ordenat  que  descrigui,  per  a  cada  client,  tots  els  productes  i  les  quantitats 
          respectives demanades per a l’endemà, per aquell client, ordenats decreixentment segons la 
          quantitat demanada. 
                            
Podeu suposar que no hi ha errors a les dades d'entrada. 
 
 
                                       —————————————— 
 
2.3.1  Dissenyeu  les  classes  i  mètodes  adients  per  a  implementar  el  concepte  de  fracció 
(nombre  racional  o  parell  ordenat  de  nombres  enters),  i  que  permeti  fer  les  operacions 
d’inicialitzar una fracció, fer un duplicat d’una fracció, sumar fraccions, multiplicar fraccions, 
dividir fraccions, calcular el quocient real de la fracció, etc. 
 
2.3.2  Dissenyeu  les  classes  i  mètodes  adients  per  a  implementar  el  concepte  de  nombre 
complex  (parell  ordenat  de  nombres  reals),  i  que  permeti    efectuar  les  operacions 
d’inicialitzar un complex, fer un duplicat d’un complex, obtenir la part imaginària, obtenir la 
part  real,  sumar,  restar,  multiplicar  i  dividir  dos  complexos,  calcular  el  conjugat  d’un 
complex, etc. 

                                                        18 
 
2.3.3 Dissenyeu les classes i mètodes adients per a implementar una calculadora senzilla de 
butxaca i que permeti  efectuar les operacions bàsiques, sumar, multiplicar, dividir i restar 
dos nombres, així com esborrar el visor de la calculadora. 
 
2.3.4  Es  desitja  analitzar  un  text  (seqüència  de  caràcters  acabada  amb  el  caràcter 
finalitzador '/') per a avaluar l'estil d'escriptura de l'autor. Això es realitza comptabilitzant la 
freqüència amb que apareix cadascuna de les paraules del text. 
El  resultat  ha  de  ser  una  llista  ordenada  alfabèticament  de  totes  les  paraules  del  text 
juntament amb la seva freqüència. 
Els caràcters de que consta el text són lletres i caràcters especials (' ', '.',',', ...). Dissenyeu un 
algorisme que permeti efectuar aquest anàlisi. 
 
2.3.5 Es vol construir un paquet informàtic d'anàlisi estadística descriptiva. En concret es vol 
que donada una seqüència de valors numèrics (que representa una mostra de una variable 
aleatòria) ens doni la següent informació: 
 
    N = Nombre d'observacions de la mostra   
    MIN = Valor mínim de la mostra 
    MAX = Valor màxim de la mostra 
    MITJ = Mitjana de la mostra 
    DESV‐STA = Desviació estàndar de la mostra 
    MED = Mediana (valor central) de la mostra 
    Q1 = Primera quartila 
    Q3 = Tercera quartila 
   
    HISTOGRAMA de la mostra segons el següent format, 
   
                 Interval                 Núm. Obs. 
                 ‐30 — ‐20                       1      | *** 
                 ‐20 — ‐10                       2      | **   
                 ‐10 — 0                         3      | *** 
                    0 — 10                       3      | *** 
                  10 — 20                        5      | ***** 
                  20 — 30                        10     | ********** 
                  30 — 40                        15     | *************** 
                  40 — 50                        9      | ********* 
                  50 — 60                        6      | ****** 
                  60 — 70                        2      | ** 
 
L'amplada  dels  intervals  la  podrà  especificar  l'usuari.  Per  defecte  s'agafarà  el  10%  del 
recorregut de la mostra.  
Si  el  nombre  d'observacions  fos  tan  gran  que  no  cabessin  a  la  mateixa  línia,  llavors 
automàticament  cada  asterisc  passarà  a  representar  una  observació  més.  En  principi  cada 
asterisc representarà una observació.  
 
Dissenyeu un algorisme que implementi l'esmentat paquet estadístic. 
 




                                                  19 
2.3.6  El  Rally  UPC.  Els  organitzadors  del  famós  Rally  UPC  necessiten  un  sistema  informàtic 
que els permeti portar el control del temps emprat per cadascun dels pilots en els diferents 
trams  de  la  prova,  i  posteriorment,  generar  les  classificacions  parcials  (per  trams)  i  la 
definitiva (tots els trams).  
                                           RALLY



                                            UPC
 
Concretament,  el  sistema  rebrà  la  informació  de  tot  el  rally  de  forma  desordenada.  Cada 
unitat  d'informació  consta  del  nom  del  pilot,  el  número  del  tram  i  el  temps  (expressat  en 
minuts i segons) emprat. 
 
Per exemple, si les dades d'entrada fossin: 
 
Joan   1  4.15  Pere  2  3.13  Joan  2  3.15  Pere  1  4.16  Pere 3  16.45  Joan  3  16.42  
 
El resultat hauria de ser: 
 
  Classificació tram 1 
  Joan  4.15 
  Pere  4.16 
 
  Classificació tram 2 
  Pere  3.13 
  Joan  3.15 
 
  Classificació tram 3 
  Joan  16.42 
  Pere  16.45 
 
  Classificació definitiva Rally UPC 
  Joan  24.12 
  Pere  24.14 
 
2.3.7  L'empresa que lidera el mercat informàtic aplicat a l'estadística, VIPEST, vol ampliar les 
prestacions  del  seu  paquet  estadístic  d'anàlisi  descriptiva,  famós  arreu  del  món.  Els  seus 
directius volen afegir una comanda que permeti dibuixar plots bivariants de dues mostres. 
 
L'entrada  de  les  dades  consistirà  en  una  seqüència  de  punts,  Xi  Yi  (cada  punt  en  una  línia 
diferent). Cada punt serà un parell de nombres reals. 
 
El resultat de la comanda ha de ser la representació planar en la pantalla dels punts. Cada 
punt es representarà amb el caràcter '*'. Les posicions on no hi hagi punts es representaran 
amb el caràcter ' ' (tret de que coincideixin amb els eixos de coordenades). S'hauran de tenir 
en compte els següents aspectes: 


                                                   20 
 
    • El eix d'abcises (Y=0) i el d'ordenades (X=0) han d'aparèixer en el dibuix. L'eix d'abcises 
    es representarà amb el caràcter '‐' i el de ordenades amb el '|'. 
     
    •  El dibuix ha de caber en la pantalla. Per tant, s'hauran de escalar convenientment els 
    punts a representar. 
     
    • La comanda ha de funcionar correctament, independentment de la mida de la pantalla. 
     
    • Suposarem, que no hi ha mai dos punts iguals. 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
2.3.8  La  gelateria  del  Pilar  té  força fama per la qualitat dels seus productes: gelats, polos, 
granissats,  barres  de  gelat,  orxata,  llet  merengada,  etc.  Com  a  conseqüència  de  la  seva 
merescuda fama, la comptabilitat del negoci és cada vegada més complicada. Al llarg del dia 
es van apuntant les comandes que els hi van fent, i al vespre, després de tancar la botiga, fan 
una estadística per a saber quants productes han venut i de quina mena. Així poden analitzar 
les preferències dels seus clients i fer les previsions dels productes que necessiten, per a fer 
front  a  la  demanda.  Els  amos  de  la  gelateria  han  pensat  en  informatitzar‐se  i  voldríen  un 
programa que tenint com a dades d'entrada una seqüència de parells de valors (cada parell 
en  una  línia  diferent),  on  el  primer  indica  el  nom  del  producte  i  el  segon,  les  unitats  del 
producte venut. Per exemple: 
 
                                            gelat‐llimona        1 
                                              polo‐menta     3 
                                            granissat‐cafè      2 
                                                  orxata  5 
                                          barra‐gelat‐3‐gustos    1 
                                              gelat‐llimona   3 
                                                orxata        1 
                                                     . . . 
 
El resultat ha de ser:  
 
    1) Un llistat ordenat alfabèticament pel nom del producte, on apareix‐hi primer el nom del 
    producte, i després, la quantitat total d'unitat venudes durant tot el dia. 
     
    2) Un altre llistat ordenat de forma decreixent per la quantitat total d'unitats venudes de 
    cada producte durant el dia, on apareix‐hi primer la quantitat total d'unitats, i després, el 
    nom del producte. 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
2.3.9  La  pizzeria  PIZZAUNIC  pertany  a  una  nova  cadena  de  pizzeries  que  es  caracteritzen 
perquè només fan una sola mida de pizza, ja que els seus estudis estadístics de mercat, els hi 
han permès dissenyar el diàmetre ideal de les pizzes, segons les preferències del públic. Això 
sí, disposen de una gran varietat de pizzes: 4‐estacions, margarita, tonyina, romana, tropical, 
mexicana, catalana, 4‐formatges, napolitana, americana, oriental i especial. El preu de les 4 
primeres pizzes és de 1500 ptes, el de les 4 següents és de 2000 ptes i el de les 4 darreres és 


                                                    21 
de  2500  ptes.  L’empresa  disposa  d’un  parc  de  20  motoristes  que  serveixen  les  pizzes  a 
domicili. També venen les pizzes directament a l’establiment. Al llarg del dia es van apuntant 
les  comandes  que  els  hi  van  fent  (tant  a  l’establiment  com  a  casa),  i  al  vespre,  després  de 
tancar la botiga, fan una estadística per a saber quantes pizzes han venut i de quina mena 
són, quants diners han facturat, quins motoristes han fet més viatges, així com per analitzar 
les  preferències  dels  seus  clients  i  dissenyar/eliminar  noves  pizzes  de  la  seva  oferta.  El 
director  de  tecnologia  ha  pensat  en  automatitzar  tot  el  procés.  Concretament  vol  un 
programa que tenint com a dades d'entrada una seqüència de parells de valors (cada parell 
en una línia diferent), on el primer indica el nom de la pizza i el segon, el motorista que l’ha 
portat (entre 0 i 20; el 0 indica una pizza venuda al propi establiment). Per exemple: 
 
                                                4‐formatges  1 
                                                  romana    3 
                                                 catalana   18 
                                                   tropical  11 
                                                 mexicana   7 
                                                  romana   0 
                                                   tropical   5 
                                                       . . . 
 
El resultat ha de ser:  
 
    1) Càlcul de la facturació total del dia. 
    2) Un llistat de tots els tipus de pizzes ordenat decreixentment pel nombre de vendes del 
        dia. 
    3)  Un  altre  llistat  de  tots  els  motoristes  ordenat  decreixentment  pel  nombre  de  serveis 
        que han realitzat (el motorista 0 representarà els serveis al propi establiment). 
    4) Poder fer la consulta de quantes pizzes de tipus X ha servit el motorista Y ? 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
2.3.10  El  bar  de  la FME vol fer una anàlisi exhaustiva de les preferències dels seus clients. 
Així  doncs,  vol  estudiar  quins  productes  li  demana  amb  més  freqüència  cadascun  dels 
col∙lectius de la facultat: alumnes, professors, personal administratiu, personal de sistemes i 
visitants,  per  a  establir  una  política  de  preus  raonable.  També  volen  saber  quins  són  els 
productes  de  major  venda,  per  tal  de  fer‐ne  una  previsió  a  l’hora  de  fer  les  comandes  als 
seus  proveïdors  (cafè,  sucre,  pa,  cervesa,  pernil,  etc.).  El  nombre  de  tipus  diferents  de 
productes  és  de  25.  L’automatització  d’aquest  procés  els  hi  permetrà,  en  acabar  el  dia, 
agilitzar  el  procés  que  ara  fan  manualment:  tenir  una  relació  de  quin  tipus  de  persona  ha 
consumit quin tipus de producte. Volen un programa que tenint com a dades d'entrada una 
seqüència de tripletes de valors (cada tripleta en una línia diferent), on el primer valor indica 
el  nom  del  producte  (una  seqüència  de  caràcters),  el  segon  el  tipus  de  persona  (alumne, 
professor, administratiu, sistemes o visitant), i el tercer la quantitat consumida (un nombre 
enter). Per exemple, 
 
cafè  professor  1 
cafè‐amb‐llet  alumne  2 
entrepà‐anxoves  professor  1 
suc‐taronja  professor  1 
tallat  administratiu  3 


                                                    22 
cafè‐amb‐llet  sistemes  4 
tè  visitant  1 
suc‐pinya   alumne  1 
cervesa  administratiu  2 
cafè visitant  2 
.  .  . 
 
El resultat ha de ser:  
 
1)  Un  llistat  de  tots  els  tipus  de  productes  ordenats  decreixentment  pel  nombre  d’unitats 
consumides . 
 
2) Un altre llistat que agrupi a cinc subllistats (un per cada tipus de persona) dels tipus de 
producte  consumits  per  cada  tipus  de  persona  i  ordenats  decreixentment  pel  nombre 
d’unitats consumides. 
 
3) Poder fer la consulta de quants productes de tipus X ha consumit el tipus de persona Y ? 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
2.3.11  La  cadena  de  supermercats  DETOT  S.A.  vol  informatitzar  els  processos  de  venda  i 
facturació  dels  seus  productes  per  portar  un  control  més  estricte  de  la  feina  que  fan  els 
caixers/les  caixeres  dels  seus  supermercats,  i  per  preveure  les  comandes  que  han  de  fer 
mensualment, tot i analitzant les preferències dels seus clients. De moment, volen fer una 
experiència pilot en un dels seus supermercats de mida mitjana. Així han triat la botiga que 
tenen  al  Campus  de  la  UPC,  per  a  instal∙lar  el  prototipus  de  sistema  informàtic.  Aquest 
supermercat  consta  de  10  caixes,  i  s’hi  venen  30  productes  diferents.  Volen  fer  un  estudi 
comparatiu  del  volum  de  facturació  de  totes  les  caixes  i  també  volen  saber  quins  són  els 
productes  de  major  venda,  per  tal  de  fer‐ne  una  previsió  a  l’hora  de  fer  les  comandes  als 
seus  proveïdors  (aigua,  sucre,  vi,  iogurt,  tomàquet,  enciam,  lluç,  pernil,  etc.). 
L’automatització  d’aquest  procés  els  hi  permetrà,  en  acabar  el  dia,  agilitzar  el  procés 
d’anàlisi de la facturació, tant per producte com per caixa.  
Volen un programa que tenint com a dades d'entrada una seqüència de tripletes de valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
del producte (una seqüència de caràcters), el segon el número de la caixa (un nombre enter 
entre 1 i 10) on s’ha venut el producte, i el tercer el preu del producte facturat (un nombre 
real) expressat en euros, per exemple, 
 
 
cafè  4  8.0 
sucre   3  4.2   
iogurt  10  6.2 
lluç  3   4.1 
sucre  8  2.3 
pernil  2  7.2 
cafè  1  2.5 
.  .  . 
 
permeti efectuar ‐en qualsevol ordre‐ les següents operacions:  
 


                                                   23 
1) Obtenir un llistat de tots els productes ordenats decreixentment pel volum de facturació. 
 
2) Obtenir un llistat de totes les caixes ordenades decreixentment pel volum de facturació. 
 
3)  Calcular  la  facturació  mitjana  diària  de  les  caixes  i  la  facturació  mitjana  diària  dels 
productes  
 
4) Poder fer la consulta de quina facturació ha realitzat la caixa X del producte Y ? 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
2.3.12  L’empresa  INTERTEX  S.A.,  està  dedicada  a  la  intermediació  tèxtil.  Compra  en  grans 
quantitats  les  diferents  peces  de  roba  (pantalons,  jerseis,  jaquetes,  armilles,  tops,  faldilles‐
curtes,  etc.)  a  diversos  fabricants  (Borsace,  Escorpion,  Burberry’s,  Aninoto,  Lacoste,  Jocavi, 
etc.), per a posteriorment, vendre‐les als minoristes, fent un important negoci. Per a portar 
un control eficient del seu stock de peces de roba, i poder servir el material als seus clients 
minoristes, cada dia van rebent les comandes que els hi fan els minoristes, per a servir‐les el 
dia  següent.  Volen  un  sistema  informàtic  que  els  hi  permeti  tant  analitzar  les  preferències 
dels seus clients per a optimitzar els stock de roba que tenen i planificar la seva política de 
compres als fabricants, així com també per a planificar millor les comandes dels minoristes 
pel dia següent. 
 
Per a provar el sistema han triat el seu centre de distribució de Gràcia, que està servit per 20 
fabricants  diferents,  i  que  rep  15  productes  diferents.  Al  llarg  del  dia  van  rebent  les 
comandes dels minoristes per al dia següent. Al final del dia volen processar informàticament 
aquesta informació. 
 
Volen un programa que tenint com a dades d'entrada una seqüència de tripletes de valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
de  la  peça  de  roba  (una  seqüència  de  caràcters),  el  segon  el  nom  del  fabricant  (una 
seqüència de caràcters) de la peça de roba, i el tercer la quantitat de peces demanades (un 
nombre enter), per exemple, 
 
pantalons  aninoto  4  
jersei  jocavi  3 
top  borsace   14 
brusa   jocavi   5 
faldilla‐curta    burberry’s  2  
jersei borsace  3 
jersei jocavi 8 
pantalons aninoto 7 
faldilla‐llarga escorpion 6 
faldilla‐curta  lacoste  4 
pantalons old‐reidel  5 
.  .  . 
 
permeti  efectuar,  en  qualsevol  ordre  i  un  nombre  il∙limitat  de  vegades,  les  següents 
operacions:  


                                                   24 
 
    1)  Obtenir  un  llistat  de  totes  les  peces  de  roba  ordenades  decreixentment  pel volum de 
        comandes. 
    2)  Obtenir  un  llistat  de  tots  els  fabricants  ordenats  decreixentment  pel  volum  de 
        comandes. 
    3)  Per  a  tots  els  fabricants,  un  a  un,  generar  un  llistat  de  totes  les  peces  de  roba  seves 
        demanades i el seu volum de comandes. 
    4) Poder fer la consulta de quina demanda hi ha de la peça de roba X del fabricant Y ? 
 
2.3.13  L’empresa  STRESSANT.  L’empresa  de  petita  escala  STRESSANT,  que  té  una  política 
flexible d’horaris tant en les hores d’entrada i sortida com en els dies de treball, vol portar 
un  control  estricte  dels  horaris  laborals  dels  seus  empleats,  per  a  detectar  fraus,  així  com 
saber quins són els seus millors empleats. L’empresa té 100 empleats. De moment no estan 
gaire  informatitzats,  i  el  control  d’horaris  l’efectua  un/a  administratiu/va  que  controla  els 
fulls d’horaris dels empleats. En els fulls d’horaris, els treballadors apunten cada dia la hora 
d’arribada i la hora de sortida junt amb el seu número d’empleat, el seu nom i el dia de la 
setmana.  Cada  certs  temps  (setmanal,  quinzenal,  etc.),  l’administratiu  fa  un  cert  control 
d’horaris a petició del cap de personal de la empresa. Les hores treballades els dissabtes i els 
diumenges són considerades hores extres. El gerent, però, vol informatitzar el procés per a 
fer‐ne  un  control  més  estricte.  Podeu  suposar  que  els  empleats  treballant  totes  les  hores 
d’un  mateix dia seguides.  
 
Dissenyeu un algorisme que rebi com a dades d'entrada la seqüència d'informacions sobre 
els  diferents  horaris  laborals  diaris  dels  diferents  empleats  de  l’empresa  durant  un  cert 
període de temps. Aquesta informació constarà del número d’empleat, el nom de l’empleat, 
l’hora d’arribada (hora i minut), l’hora de sortida (hora i minut) i el dia de la setmana (cada 
unitat d'informació en una línia) separats per espais en blanc, en el següent format: 
 
<nº empleat> <nom empleat> <hora d’arribada > <hora de sortida> <dia de la setmana> 
 
El número d’empleat pot ser qualsevol valor enter (> 0 i ≤ 100), el nom de l’empleat és una 
seqüència de caràcters, l’hora d’arribada són un parell d’enters que expressen la hora i els 
minuts de l’arribada a l’empresa (0 ≤ hora ≤ 23 i 0 ≤ minuts < 60), l’hora de sortida són un 
parell d’enters que expressen la hora i els minuts de la sortida de l’empresa (0 ≤ hora ≤ 23 i 0 
≤ minuts < 60) i el dia de la setmana és un valor alfabètic (dilluns, dimarts, ... diumenge). La 
seqüència finalitzarà amb un número d’empleat igual a 0. Per exemple, 
 
                                   32  Joan  8 45  17 45 dimarts  
                                   21    Maria 8 58  19 27 dilluns    
                                   74   Elisenda  7 50  20 0 dilluns 
                                   89   Hipòlit  7 47  13  53 dimecres 
                                   32     Joan 8 40 17 59 dilluns 
                                   21  Maria  8 35  19 5 dissabte 
                                   … 
                                   74   Elisenda  10 5  13 47 diumenge 
                                   0 
 
El  resultat  ha  de  ser  un  llistat  per  pantalla  on  hi  hagi  el  ranking  descendent  dels  empleats 
segons el promig diari d’hores totals treballades, i en cas d'empat segons el nombre d’hores 


                                                      25 
extres  treballades,  durant  un  cert  període  de  temps.  Per  a  cada  línia  de  sortida 
s’especificarà, el número d’ordre del ranking, el total d’hores treballades durant el període, 
el nom de l’empleat, el seu promig diari d’hores treballades, el nombre de dies treballats i el 
nombre  d’hores  extres  treballades.  Podeu  suposar  que  no  hi  ha  cap  mena  d'error  en  les 
dades d’entrada: els noms, números, hores, dies són correctes, etc. 
 
2.3.14 Un nou programa mensual de televisió anomenat elmes‐in de la cadena de televisió 
Tele‐Anuncis,  vol  fer  un  seguiment  de  l’aparició  dels  personatges  públics  pseudo‐famosos, 
que  ells  anomenen  com  a  famos‐ins,  com  per  exemple,  risbo‐guirreiza,  chesu‐lina,  see‐
flowers,  tonpare,  dau‐lequi,  ami‐plini,  la‐motllos,  etc.,  a  la  premsa  del  cor:  revistes  i  diaris 
especialitzats, com per exemple, lola, quinzena, el‐diari‐cor, qmvd, deu‐segons, escriptures, 
etc.. Diàriament els guionistes i altra gent que treballa en el programa, recullen les dades del 
nombre  d’aparicions  dels  famos‐ins  a  la  premsa  del  cor  durant  tot  un  mes.  Ara  però, 
necessiten  un  sistema  informàtic  que  els  hi  permeti  fer  una  certa  anàlisi  estadística  dels 
famos‐ins més populars per a portar‐los al seu programa i també per  temes de publicitat. 
 
De moment només faran els primers programes de televisió tenint en compte les dades de 
com  a  molt  20  famos‐ins  diferents,  i  com  a  molt  volen  consultar  25  revistes  o  diaris  de  la 
premsa del cor. Si funciona bé, després ja ampliaran la seva cobertura. Al cap del més volen 
processar tota aquesta informació, i desitgen que els ajudeu a fer‐ho. 
 
Les  dades  d'entrada  al  programa  seran  una  seqüència  (il∙limitada)  de  tripletes  de  valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
del  famos‐in  (una  cadena  de  caràcters),  el  segon  el  nom  de  la  publicació  (una  cadena  de 
caràcters) de la premsa del cor, i el tercer la quantitat d’aparicions (un nombre enter) en una 
publicació. Per exemple, 
 
see‐flowers quinzena 3 
la‐motllos deu‐segons 4 
ami‐plini el‐diari‐cor  6 
see‐flowers lola 3 
dau‐lequi lola 2 
tonpare escriptures 7 
la‐motllos escriptures 3 
dau‐lequi lola 4 
chesu‐lina escriptures 1 
ami‐plini deu‐segons 5 
ro‐llito quinzena 1 
tonpare escriptures 3 
.  .  . 
 
El programa ha de permetre efectuar, en qualsevol ordre i un nombre il∙limitat de vegades, 
les següents operacions:  
 
     1)  Obtenir  per  pantalla  un  llistat  de  tots  els  famos‐ins  ordenats  decreixentment  pel 
         nombre d’aparicions a la premsa del cor durant el mes. 
     2) Obtenir per pantalla un llistat de totes les publicacions de la premsa del cor ordenades 
         decreixentment pel nombre d’aparicions de famos‐ins que han tingut durant el mes. 


                                                     26 
   3)    Per  a  tots  els  famos‐ins,  un  a  un,  generar  per  pantalla  un  llistat  de  totes  les 
       publicacions on han aparegut i el nombre de vegades que hi han sortit. 
   4)  Poder fer la consulta de quantes vegades ha sortit el famos‐in X a la publicació Y ? 
 
Noteu que els noms dels famos‐ins i les publicacions no se saben a priori quins són. 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
2.3.15 Un nou programa de televisió anomenat OT de la cadena de Televisió ImperialTV ha 
tingut  molt  èxit.  Es  tracta  d’un  concurs  on  participen  com  a  molt  16  concursants  finalistes 
que aspiren a guanyar‐lo. El concurs consisteix  a cantar cançons setmanalment, i el públic 
vota per telèfon quins concursants els hi agraden més a diferents demarcacions territorials. 
Els directius de la cadena, ja pensen en fer la segona edició. Volen automatitzar tot el procés 
de recompte de vots telefònics setmanals a cadascuna de les demarcacions que corresponen 
a les comunitats autònomes i nacions que integren l’estat.  
Setmanalment,  a  cada  demarcació  (Catalunya,  Aragó,  País‐Basc,  Illes‐Balears,  etc.)  es  van 
recollint  els  vots  per  a  cadascun  dels  concursants  (Anna, Laura, Rosa, David, Manuel, etc.). 
Fins ara, ho feien tot a mà. Ara però, necessiten un sistema informàtic que els hi permeti fer 
una  certa  anàlisi  estadística  dels  concursants  més  votats  per  a  l’evolució  del  seu  programa 
(van eliminant un concursant a cada setmana) i també  a quines demarcacions es vota més, 
per  temes de publicitat. 
Les dades a tenir en compte són: com a molt 16 concursants finalistes diferents, i com a molt 
les 16 nacions o comunitats autònomes de l’estat. Al cap de la setmana volen processar tota 
aquesta informació, i desitgen que els ajudeu a fer‐ho. 
 
Les  dades  d'entrada  al  programa  seran  una  seqüència  (il∙limitada)  de  tripletes  de  valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
del concursant (una cadena de caràcters), el segon el nom de la demarcació (una cadena de 
caràcters) territorial, i el tercer la quantitat de vots (un nombre enter) per a un concursant 
en aquella demarcació durant un cert període de temps. Per exemple, 
 
Rosa Catalunya 54 
David Aragó 23 
Laura Catalunya 20 
Anna Castella‐La‐Manxa  10 
Laura Illes‐Balears 39 
David Illes‐Balears 28 
Rosa Aragó 34 
David Aragó 12 
Rosa Catalunya 24 
Laura Illes‐Balears 15 
         .  .  . 
 
El programa ha de permetre efectuar, en qualsevol ordre i un nombre il∙limitat de vegades, 
les següents operacions:  
 




                                                   27 
   1)    Obtenir  per  pantalla  un  llistat  de  tots  els  concursants  ordenats  decreixentment  pel 
       nombre de vots obtinguts durant la setmana. 
   2)    Obtenir  per  pantalla  un  llistat  de  totes  les  demarcacions  territorials  ordenades 
       decreixentment pel nombre vots emesos durant la setmana. 
   3)    Per  a  tots  els  concursants,  un  a  un,  generar  per  pantalla  un  llistat  de  totes  les 
       demarcacions on els han votat i el nombre de vots obtinguts. 
   4)  Poder fer la consulta de quants vots ha rebut el concursant X a la demarcació Y ? 
 
Noteu que els noms dels concursants i les demarcacions no se saben a priori quins són. 
 
2.3.16  La  organització  de  consumidors  (OCU)  vol  fer  un  estudi  en  profunditat  de  les 
prestacions,  serveis,  avantatges  i  desavantatges  comparatius  entre  diferents  models  de 
cotxes tot terreny (CTT). Aquest estudi el vol fer per a incloure’l en el proper número de la 
revista que edita. El que volen els responsables de la OCU és veure quins cotxes tot terrenys 
són  millors  segons  diferents  especialistes  de  diferents  revistes  de  cotxes.  Alhora,  també 
volen  analitzar  certes  sospites  dels  consumidors  que  apunten  que  certes  revistes  valoren 
incondicionalment certs models de certes marques per sobre dels altres de manera no gaire 
objectiva.  Per  això  partiran  de  les  valoracions  dels  diferents  models  de  cotxe  tot  terreny 
(Toyota‐Rav4,  Subaru‐Forester,  Honda‐CRV,  Hyundai‐SantaFe,  Mitsubishi‐Montero,  Honda‐
HRV,  Volvo‐X7C,  Opel‐Frontera,  Suzuki‐Vitara,  Toyota‐LandCruiser,  Volkswagen‐Tuareg, 
LandRover‐Discovery,  Nissan‐Xtrail,  BMW‐X3,  Suzuki‐GrandVitara,  LandRover‐Freelander, 
Volvo‐X9C,  Renault‐Scenic4x4,  Nissan‐TerranoII,  Mercedes‐ML90,  etc.)  proporcionades  per 
cadascuna de les principals revistes especialitzades en el món del motor de cotxes tot terreny 
per  a  cadascun  dels  models  (Nomes‐Auto,  Quatrexquatre,  Tot‐terreny,  Autopista,  Cotxe‐
actual, Off‐road, etc.). Fins ara, ho feien tot a mà. Ara però, necessiten un sistema informàtic 
que els hi permeti fer una certa anàlisi estadística dels models de cotxe tot terrenys més ben 
valorats,  i  de  les  valoracions  de  cada  revista  als  diferents  models  per  a  detectar  fraus  i/o 
diferències significatives en les valoracions. 
Les  dades  a  tenir  en  compte  són:  com  a  molt  s’utilitzaran  20  models  de  cotxe  tot  terreny 
diferents, i com a molt 10 revistes especialitzades de cotxes tot terrenys. Tots els models de 
cotxe tot terreny analitzats seran valorats per totes les revistes. 
 
Les  dades  d'entrada  al  programa  seran  una  seqüència  (il∙limitada)  de  tripletes  de  valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
del  model  de  cotxe  tot  terreny  (una  cadena  de  caràcters),  el  segon  el  nom  de  la  revista 
especialitzada  (una  cadena  de  caràcters),  i  el  tercer  la  valoració  global  (un  nombre  real, 
entre 0 i 10) del model de cotxe tot terreny havent tingut en compte diversos criteris com 
són les prestacions, el motor, la conducció al camp (trial), la conducció en pistes forestals, la 
conducció a l’asfalt, l’habitabilitat, l’equipament, el consum, l’acabat, el preu, etc.  
 
Per exemple, 
 
Honda‐CRV Nomes‐Auto  7.3  
LandRover‐Freelander  Quatrexquatre  7.6  
Toyota‐Rav4  Tot‐Terreny  8.4 
Hyundai‐SantaFe Autopista 6.8 
Mitsubishi‐Montero Quatrexquatre  7.8 



                                                    28 
Toyota‐Rav4 Nomes‐Auto  8.1 
LandRover‐Freelander Autopista  7.9 
Honda‐CRV Quatrexquatre  7.6 
Hyundai‐SantaFe Tot‐Terreny  7.1 
Mitsubishi‐Montero Tot‐Terreny  8.1 
 .  .  . 
 
El programa ha de permetre efectuar, en qualsevol ordre i un nombre il∙limitat de vegades, 
les següents operacions:  
 
     1)    Obtenir  per  pantalla  un  llistat  de  tots  els  models  de  cotxe  tot  terreny  ordenats 
          decreixentment  per  la  valoració  mitjana  de  les  puntuacions  atorgades  per  totes  les 
          revistes. 
     2) Obtenir  per  pantalla  un  llistat  de  totes  les  revistes  ordenades  decreixentment  per  la 
           valoració mitjana de les puntuacions atorgades als diferents models. 
     3) Per a tots els models de cotxe tot terreny, un a un, generar per pantalla un llistat de 
           totes les valoracions que han obtingut a totes les revistes. 
     4)    Poder  fer  la  consulta  de  quina  valoració  ha  obtingut  un  cert  model  de  cotxe  tot 
          terreny a una revista concreta. 
 
Noteu que els noms dels models de cotxe tot terreny i les revistes no se saben a priori quins 
són. 
 
2.3.17  La  administració  del  govern  del  petit  país  de  Catalaquistà,  vol  implantar  un  model 
informatitzat per al recompte de vots de les eleccions parlamentàries que es realitzen cada 4 
anys  al  parlament  de  Catalaquistà.  Volen  automatitzar  el  recompte  dels  vots  als  diferents 
partits en les diferents seus electorals. Volen poder treure els resultats acumulats de quants 
vots ha tret cadascun dels partits. 
Per això partiran dels nombres de vots de cada partit a cada seu electoral en l'ordre en que 
es vagin produint els recomptes electorals. Els partits polítics que concorren a les urnes són: 
PSE‐PSE,  Poti‐Poti,  EROD,  CIUTA,  INIVE,  PLIB,  FF,  PCOM,  DDESC,  etc.  Les  seus  electorals 
(Gerunda,  Barcino,  Ilerda,  Tarraco,  Emporio,  ...)  van  transmeten  al  centre  electoral  del 
govern, el recompte de vots de tots els partits a la seva seu. 
Fins ara, ho feien tot a mà. Ara però, necessiten un sistema informàtic que els hi permeti fer 
una certa anàlisi estadística dels resultats de les eleccions. 
 
Les dades a tenir en compte són: com a molt es presenten 15 partits polítics diferents, i com 
a  molt  hi  haurà  20  seus  electorals.  Tots  els  partits  polítics  analitzats  seran  recomptats  a 
totes les seus, encara que el seu nombre de vots sigui 0. 
Les  dades  d'entrada  al  programa  seran  una  seqüència  (il∙limitada)  de  tripletes  de  valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
del partit polític (una cadena de caràcters), el segon el nom de la seu electoral (una cadena 
de caràcters), i el tercer, el nombre de vots obtinguts (un nombre enter, major o igual a 0) pel 
partit polític a la seu electoral.  
 
Per exemple, 
 



                                                   29 
PSE‐PSE Gerunda  23 
CIUTA Barcino 45 
ERCA Barcino 22 
EROD Ilerda 37 
PCOM Gerunda 1 
PSE‐PSE Ilerda 0 
CIUTA Gerunda 78 
PLIB Tarraco 5 
.  .  . 
 
El programa ha de permetre efectuar, en qualsevol ordre i un nombre il∙limitat de vegades, 
les següents operacions:  
 
     1)  Obtenir per pantalla un llistat de tots els partits polítics ordenats decreixentment pel 
         nombre  de  vots  acumulats  a  totes  les  seus  electorals,  per  a  saber  qui  ha  guanyat  les 
         eleccions.  
     4) Donada  una  seu  electoral,  obtenir  per  pantalla  un  llistat  de  tots  els  partits  polítics 
          ordenatss decreixentment pel nombre de vots obtinguts a aquella seu electoral. 
     5) Per  a  totes  les  seus  electorals,  una  a  una,  generar  per  pantalla  un  llistat  de  tots  els 
          partits polítics amb els vots que han obtingut a la seu electoral. 
     4)    Poder  fer  la  consulta  de  quants  vots  ha  obtingut  un  cert  partit  polític  a  una  seu 
     electoral concreta. 
 
Noteu que els noms dels partits polítics i les seus electorals no se saben a priori quins són. 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
2.3.18 La nova empresa de menjar ràpid, especialitzada en entrepans de tota mena, Entrepà‐
Calent, vol informatitzar tot el seu procés d’anàlisi de les comandes dels clients, als diferents 
locals que té per les diferents zones de Barcelona. Volen fer una anàlisi estadística detallada 
de quins entrepans són els més venuts, i a quines zones es ven més, de cara a establir la seva 
política d’expansió de nous locals. 
Durant  el  dia  es  van  emmagatzemant  les  comandes  d’entrepans  dels  diferents  clients  als 
diferents  locals.  Els  locals  que  actualment  té  l’empresa  són  5:  Esquerra‐Eixample,  Gràcia, 
Sant‐Gervasi,  Dreta‐Eixample  i  Ciutat‐Vella,  però  es  volen  expandir  a  altres  zones  com  ara 
Sarrià,  Sant‐Andreu,  Sant‐Martí,  Sants,  Les‐Corts,  etc.  Fins  a  un  màxim  de  15.  Actualment 
tenen  una  oferta  de  10  entrepans  (alsacià,  truita‐patates,  montanyès,  vegetal,  escalivada, 
bavaria,  pernil‐serrà,  llom‐i‐formatge,  pollastre  i  xoriç),  però  en  el  futur  creuen  que 
ampliaran la oferta fins a 20 entrepans diferents.  
El gerent de l’empresa ha encarregat al seu estadístic més espavilat ‐que havia estudiat a la 
UPC‐  un  sistema  informàtic  que  efectuï  una  certa  anàlisi  estadística  dels  resultats  de  les 
comandes  al  final  del  dia.  El  sistema  s’ha  de  dissenyar  amb  visió  de  futur,  i  per  tant,  ha 
d’estar preparat per a analitzar les noves seus, i els nous entrepans que tindrà l’empresa en 
el futur. 
 
Les dades a tenir en compte són: com a molt poden haver‐hi 15 locals diferents, i com a molt 
hi haurà 20 entrepans diferents.  



                                                      30 
Les  dades  d'entrada  al  programa  seran  una  seqüència  (il∙limitada)  de  tripletes  de  valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
de l’entrepà (una cadena de caràcters), el segon el nom del local on s’ha venut (una cadena 
de caràcters), i el tercer, el nombre d’entrepans sol∙licitats (un nombre enter, major que 0) 
de l’entrepà al local especificat.  
 
Per exemple, 
 
alsacià Gràcia 2 
llom‐i‐formatge Sant‐Martí 3 
truita‐patates Gràcia  3 
alsacià Ciutat‐Vella 1 
vegetal Esquerra‐Eixample 4 
alsacià Gràcia 3 
vegetal Ciutat‐Vella 5 
.  .  . 
 
El programa ha de permetre efectuar, en qualsevol ordre i un nombre il∙limitat de vegades, 
les següents operacions:  
 
     1)  Obtenir per pantalla un llistat de tots els entrepans (actualment en oferta) ordenats 
         decreixentment  pel  nombre  d’entrepans  venuts  a  tots  els  locals,  per  a  saber  quin 
         entrepà és el més venut, de cara a fer‐ne de nous, semblants als més venuts.  
     6) Obtenir  per  pantalla  un  llistat  de  tots  els  locals  (existents  actualment)  ordenats 
          decreixentment pel nombre de vendes a aquell local, per a veure quines zones són les 
          millors per a expandir‐se . 
     7) Per  a  tots  els  locals  ,  un  a  un,  generar  per  pantalla  un  llistat  de  tots  els  entrepans 
          venuts a aquell local , amb el nombre d’unitats venudes al local, que permet analitzar 
          un a un els diferents locals i comparar les seves vendes.  
     4)    Poder  fer  la  consulta  de  quantes  unitats  s’han  venut  d’un  cert  entrepà  a  un  local 
     concret. 
 
Noteu que els noms dels entrepans i dels locals no se saben a priori quins són, ja que poden 
canviar en el futur. 
 
2.3.19 El nou gerent que gestiona la circulació de trens a les Rodalies de Barcelona vol posar 
en  marxa  un  programa  estadístic  d’anàlisi  de  les  dades  sobre  els  endarreriments  dels 
diferents tipus de trens, a les diverses estacions de Barcelona i Rodalies. 
 
Vol saber quins tipus de tren i a quines estacions es donen els endarreriments més grans, vol 
saber  quin  és  l’endarreriment  total  a  cadascuna  de  les  estacions  i  obtenir  llistats  ordenats 
dels  endarreriments  acumulats  per  a  cada  tipus  de  tren,  i  altres  consultes  globals.  A  partir 
d’aquesta  anàlisi  estadística  esperen  dirigir  els  esforços  i  les  inversions  als  lloc  més 
prioritaris,  encara  que  segons  la  opinió  dels  usuaris,  tota  la  xarxa  de  rodalies  està  igual  de 
malament ! 
 




                                                      31 
Durant el dia es van emmagatzemant els endarreriments dels diferents tipus de trens a les 
diferents estacions. Les estacions que s’inclouran inicialment a l’estudi pilot són Barna‐Sants, 
Viladecans,  Gavà,  Castelldefels,  Vilanova‐i‐la‐Geltrú,  Cornellà,  Molins‐de‐Rei,  Martorell, 
Badalona,  El‐Masnou,  Montcada‐i‐Reixac,  Sabadell‐centre,  Granollers.  Després  s’inclouran 
d’altres fins a cobrir la majoria de les estacions de la xarxa de rodalies de Barcelona. Com a 
molt hi hauran 20 estacions. 
Actualment,  els  tipus  de  trens  més  habituals  que  circulen  per  la  xarxa  de  rodalies  són: 
regional,  regional‐exprés  catalunya‐exprés,  talgo,  euromed,  arco,  etc.,  però  en  el  futur 
creuen que ampliaran la cobertura de tipus de tren fins a 10 tipus de trens diferents.  
El gerent de l’empresa ha encarregat al seu estadístic/a més espavilat/da, que havia estudiat 
a  la  UPC,  un  sistema  informàtic  que  faci  una  certa  anàlisi  estadística  dels  resultats  dels 
endarreriments dels trens de rodalies al final del dia. Els endarreriments de cada tren es van 
acumulant,  per  tipus  de  tren  a  cada  estació  de  rodalies,  en  un  servidor  local  que  s’ha 
instal∙lat a cada estació. Al final del dia es transfereixen totes les dades dels endarreriments, 
els  tipus  de  trens  i  les  estacions  a  l’ordinador  central  de  la  UPC  per  a  que  es  processin.  El 
sistema ha de ser un sistema obert, és a dir, un sistema que s’ha de dissenyar amb visió de 
futur, i per tant, ha d’estar preparat per a analitzar les dades de noves estacions afegides a 
l’estudi, i dels nous tipus de tren que podran circular per la xarxa de Rodalies de Barcelona en 
el proper futur. 
 
Les dades a tenir en compte són: com a molt poden haver‐hi 20 estacions diferents, i com a 
molt hi haurà 15 tipus de trens diferents.  
Les  dades  d'entrada  al  programa  seran  una  seqüència  (il∙limitada)  de  tripletes  de  valors 
entrades des del teclat (cada tripleta en una línia diferent), on el primer valor indica el nom 
de  l’estació  (una  cadena  de  caràcters),  el  segon  el  nom  del  tipus  de  tren  (una  cadena  de 
caràcters), i el tercer, l’endarreriment produït (un nombre enter, major que 0) que expressa 
el temps de demora expressat en minuts.  
 
Per exemple, 
 
Viladecans  regional 28 
Vilanova‐i‐la‐Geltrú regional‐expres 41 
Barna‐Sants euromed 105 
Martorell regional 14 
Viladecans catalunya‐exprés 19 
Granollers catalunya‐exprés 25 
Barna‐Sants regional‐exprés 64 
Viladecans regional 19 
El‐Masnou talgo 26  
.  .  . 
 
El  programa  ha  de  permetre  efectuar,  una  vegada  que  ja  s’han  processat  les  dades 
d’entrada, en qualsevol ordre i un nombre il∙limitat de vegades, les següents operacions:  
 
     1) Obtenir  per  pantalla  un  llistat  de  totes  les estacions (incloses en l’estudi) amb el seu 
         corresponent  temps  d’endarreriment  acumulat  a  l’estació,  per  a  saber  en  quines  el 
         sistema funciona pitjor. 


                                                      32 
   2) Obtenir per pantalla un llistat de tots els tipus de trens (existents actualment) ordenats 
       decreixentment pel temps d’endarreriment acumulat a totes les estacions, per a veure 
       quins tipus de trens funcionen pitjor. 
   3) Per a totes les estacions, una a una, generar per pantalla un llistat de tots els temps 
       d’endarreriment  per  a  cada  tipus  de  tren,  i  així  es  pot  analitzar  i  comparar  el 
       funcionament global de totes les estacions i tots els tipus de trens. 
   4) Poder consultar al sistema quant temps d’endarreriment ha patit un cert tipus de tren 
       a una estació en concret. 
   5) Calcular  quin  tipus  de  tren  i  en  quina  estació  s’ha  produït  el  màxim  endarreriment 
       durant aquell dia. 
 
Noteu que els noms de les estacions i dels tipus de trens no se saben a priori quins són, ja 
que poden canviar en el futur. 
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
                                    —————————————— 
 
2.4.1  Descriviu  l'àmbit  de  les  variables  del  següent  fragment  d’algorisme,  suposant  que  la 
visibilitat és estàtica segons la següent estructura de blocs: 
   
      algorisme exterior és 
          var a, b són enter fvar 
   
          acció p1 és 
             var b, c són enter fvar 
              . . . 
          facció; 
   
          acció p2 és 
             var c, d són enter fvar 
                acció p3 és 
                   var e és enter fvar 
                    . . . 
                facció; 
             . . .  
          facció 
          . . . 
      falgorisme 
 
                                    —————————————— 
 
2.5.1*  Dissenyeu  un  algorisme  que  donat  un  enter  positiu  obtingui  totes  les  seves 
descomposicions possibles en suma d'enters compresos entre 1 i 6. 
   
Per exemple si n = 7, llavors tenim:             6 + 1 
                                                 5 + 2 
                                                 4 + 3 
                                                 . . . 


                                                  33 
                                          1 + 1 + 1 + 1 + 1 + 1 + 1 
 
2.5.2*  Donats  n  elements,  dissenyeu  un  algorisme  que  calculi  i  escrigui  les  seves 
permutacions en ordre lexicogràfic creixent.  
 
2.5.3* Dissenyeu un algorisme que trobi totes les maneres possibles de col∙locar 8 reines en 
un tauler d'escacs de manera que no es matin entre elles. 
 




                                             34 
 
 
3. INTRODUCCIÓ ALS FITXERS 
  
3.1 Dissenyeu un algorisme que llegeixi d'un fitxer "MATRIUS.DAT", que conté les dades de 
la matriu en el següent format: 
    
       número de files 
       número de columnes 
       { matriu per files } 
    
i escrigui en el fitxer "MATRIUS.RES" la transposta de la matriu llegida. 
    
3.2  Donat  un  fitxer  de  text  anomenat  "CLAU.TXT"  format  per  seqüències  de  parelles  de 
paraules: 
                                      p1  p1'  p2  p2'  . . .  pn  pn' 
    
tals que com a molt n'hi ha 100 (de parelles) i donat un altre fitxer de text "TEXT.TXT" que 
conté  un  text  (seqüència  de  paraules),  dissenyeu  un  algorisme  que  generi  un  fitxer 
"TRADUCCIO.TXT" on cada paraula del fitxer "TEXT.TXT" que coincideixi amb alguna paraula 
pi del fitxer "CLAU.TXT" es canviï per pi' i si no hi és, es deixi igual. 
    
3.3 Una companyia té un fitxer de rebuts definit de la següent manera: 
    
       tipus 
                  data és tupla 
                                dia, mes, any són enter 
                          ftupla; 
                  rebut és tupla 
                                clientid, facturaid són enter; 
                                datafact és data; 
                                import és real 
                             ftupla 
       ftipus; 
       var 
                  frebuts és fitxer de rebut 
       fvar; 
    
Suposant  que  la  companyia  té  com  a  molt  n  clients  diferents  (n  ≤  500),  vol  generar‐se  un 
llistat  dels  clients  que  deuen  a  l'empresa  factures  de  més  de  90  dies  amb  un  valor  total 
(entre  totes),  superior  a  50  000  ptes.  En  el  llistat  ha  d'aparèixer  el  codi  del  client  i  la 
quantitat  total  endeutada.  Dissenyeu  un  algorisme  per  a  resoldre  aquest  problema 
suposant: 
    
        a) El fitxer està ordenat pel camp clientid i secundàriament pel camp datafact (de més 
           antiga a més actual). 
        b) El fitxer està ordenat cronològicament. 
        c) El fitxer està ordenat pel camp facturaid. 
    
3.4 Un important banc disposa d'un fitxer amb els registres de la següent forma: 


                                                    35 
   
      tipus 
                moviment és tupla 
                                     client, numcompte són enter; 
                                     operacio és caràcter; 
                                     import és real 
                                ftupla 
      ftipus 
   
Aquest  fitxer  guarda  les  operacions  efectuades  pels  clients  durant  un  període  determinat. 
Cada registre descriu una operació i indica el seu tipus de forma que l'operació és un ingrés 
si operacio = 'I', i és un reintegrament si operacio = 'R'. Dissenyeu un algorisme que permeti 
fer: 
   
    a) Calcular el balanç de les operacions (suma d'ingressos menys suma de reintegraments. 
    b) Separar el fitxer de moviments en dos fitxers: els de moviments 'I' i el de moviments 
        'R'. 
    c)  Suposant  que  el  fitxer  està  ordenat  de  forma  creixent  pel  camp  numcompte  i  que 
        poden  existir  per  a  un  mateix  compte,  diferents  operacions,  calcular  la  mitjana  del 
        nombre d'operacions realitzades per a cada compte. 
   
3.5 Donat un fitxer seqüencial definit de la següent manera: 
   
      tipus 
                dades és tupla 
                              x és real;   { x, variable explicativa } 
                              y és real;  { y, variable de resposta } 
                              valides és booleà 
                           ftupla 
      ftipus 
      var 
                fdades és fitxer de dades 
      fvar 
   
Dissenyeu un algorisme que calculi els coeficients de regressió a i b (y = a + b * x) segons les 
fórmules habituals: 
 
                                ∑
                            b =   (yi ‐ ym) (xi ‐ xm)    /∑    (xi ‐ xm)2 
                                 1≤i ≤n                  1 ≤i ≤n 
   
                           a = ym ‐ b * xm 
   
on ym i xm són les mitjanes corresponents. 
 
3.6  Baseu‐vos  en  l'exercici  anterior  per  a  dissenyar  un  algorisme  que  havent  calculat  els 
coeficients de regressió, a i b, creï un fitxer amb els residus de l'ajust mínimo‐quadràtic, ei: 
   
                           ei = yi ‐ y'i,   on        y'i = a + b * xi 
  



                                                   36 
3.7 Baseu‐vos en els dos exercicis anteriors per a dissenyar un algorisme que generi el plot 
bivariant: ei envers y'i. 
   
3.8  Donats  dos  fitxers  seqüencials  que  contenen  informació  sobre  els  mateixos  individus 
d'una  mostra,  però  de  característiques  diferents  (diferents  variables  aleatòries),  dissenyeu 
un algorisme que creï un tercer fitxer amb tota la informació del mateix individu junta (en el 
mateix registre). Els fitxers no tenen perquè està ordenats. 
   
3.9 Repetiu l'exercici anterior, però ara suposant que sí que estan ordenats. 
                                                          
3.10  Es  vol  crear  i  mantenir  un  sistema  d'informació  permanent  per  a  ajudar  a  prendre 
decisions en l'àmbit de la indústria automobilística. Es pretén disposar d'una eina automàtica 
d'ajuda  als  clients  que  es  volen  comprar  un  cotxe  nou.  La  informació  mínima  que  es  vol 
guardar per a cadascun dels cotxes és: 
 
                    ‐ Marca del cotxe 
                    ‐ Model del cotxe 
                    ‐ Cilindrada (en cm3) 
                    ‐ Número de cilindres 
                    ‐ Potència (en CV) 
                    ‐ Velocitat màxima (en km/h) 
                    ‐ Acceleració de 0 a 100 km/h (en seg.) 
                    ‐ Consum a 90 km/h (en litres) 
                    ‐ Consum a 120 km/h (en litres) 
                    ‐ Consum Urbà (en litres) 
                    ‐ Longitud (en cm) 
                    ‐ Amplada (en cm) 
                    ‐ Alçada (en cm) 
                    ‐ Capacitat del maleter (en litres) 
                    ‐ Pes (en quilograms) 
                    ‐ Preu, amb IVA i transport inclòs (en pessetes) 
 
Sobre el sistema es podran fer les següents operacions de forma interactiva: 
 
    1 ‐ Inicialització o càrrega inicial de les dades del sistema. 
    2 ‐ Consulta de les dades d'un model de cotxe específic. 
    3 ‐ Llistat per pantalla de tots els models de cotxe existents ordenats alfabèticament. 
    4 ‐ Llistat per pantalla dels models de cotxe existents d'una marca determinada ordenats 
        alfabèticament. 
    5  ‐  Generació  d'un  fitxer  de  text  on  hi  hagi  tots  els  models  de  cotxe  entre  dos  preus 
        determinats. 
    6 ‐ Generació d'un fitxer de text on hi hagi tots els models de cotxe entre dues potències 
        especificades. 
    7 ‐ Generació d'un fitxer de text on hi hagi tots els models de cotxe ordenats pel consum 
        promig. 
    8 ‐ Actualització del sistema. Alta / Baixa / Modificació d'un model concret de cotxe 
 
Dissenyeu les estructures de dades i els algorismes necessaris, per a mantenir tota aquesta  
informació i poder efectuar totes les operacions. 
   


                                                   37 
3.11  La  coneguda  entitat  bancària  Caixa  Forta  s'està  engrandint  mitjançant  una  filial. 
Aquesta entitat filial, anomenada Caixa Segura, s'està informatitzant d'una manera diferent 
i que esperen sigui més eficient, rentable i segura. 
   
De moment només s'han obert 2 oficines bancàries tret de l'oficina central, però totes elles 
han  d'estar  interconnectades.  El  sistema  informàtic  permanent  ha  de  poder  manegar  els 
diferents  comptes  bancaris  dels  clients  i  la  seva  informació  associada:  titulars  del  compte, 
número del compte, saldo, adreces dels titulars, oficina en que s'ha obert el compte, tipus 
de compte (llibreta d'estalvi o compte corrent), etc. 
   
Les  operacions  comptables  que  s'efectuen  durant  tot  el  dia  es  van  desant  en  un  suport 
informàtic,  per  tal  de  generar,  a  la  nit,  el  balanç  diari  d'operacions  comptables  i  altres 
informacions estadístiques.  
   
Concretament,  en  període  de  prova,  els  directius  de  Caixa  Segura  volen  poder  fer  les 
següents operacions: 
   
     a) Obertura d'un nou compte bancari. 
     b) Cancel∙lació d'un compte bancari especificat. 
     c)  Efectuar  les  diferents  operacions  comptables  possibles  (ingressos  i  reintegraments) 
         des de qualsevol de les oficines. 
     d) Per la nit, calcular i treure per la pantalla el balanç diari, total i per a cada oficina, de 
         les    operacions    comptables    efectuades    (suma    d'ingressos    menys    suma    de 
         reintegraments). 
     e) Per la nit, generació d'un fitxer de text que contingui per a cada oficina, el nombre 
         d'ingressos i el de reintegraments, el nombre d'obertures i cancel∙lacions de comptes 
         bancaris 
       
Dissenyeu les estructures de dades i els algorismes necessaris, per a mantenir tota aquesta 
informació i poder efectuar totes les operacions de forma segura i legal. 
 
3.12  Es  vol  crear  i  mantenir  un  sistema  d'informació  permanent  per  a  ajudar  en  la  gestió 
d'una biblioteca. Es pretén disposar d'una eina automàtica que permeti als lectors consultar 
els  diferents  llibres  de  que  disposa,  consultar  els  autors,  etc.,  i  facilitar‐ne  el  seu 
manteniment.  La  informació  mínima  que  s'ha  de  guardar  per  a  cadascun  dels  llibres  o 
revistes és: 
 
                  – Número de catàleg (donat per la biblioteca) 
                  – Títol del llibre o revista 
                  – Autor(s) del llibre o del exemplar d'una revista 
                  – Tema del llibre o revista 
                  – Editor/ial 
                  – Any de publicació 
                  – Número de volum 
                  – Número d'exemplar dins el volum 
                  – ISBN 
                  – Número de còpies existents d'un llibre o revista 
                  – Ubicació dins la biblioteca 
 
Sobre el sistema es podran fer les següents operacions de forma interactiva: 


                                                   38 
 
    1 – Inicialització o càrrega inicial de les dades del sistema. 
    2 – Consulta de llibres o revistes per número de catàleg. 
    3 – Consulta de llibres o revistes per títol. 
    4 – Llistat per pantalla de tots els llibres o revistes d'un autor determinat. 
    5 – Llistat per pantalla de tots els llibres o revistes d'un tema específic. 
    6  –  Llistat  per  pantalla  de  tots  els  llibres  o  revistes  existents  ordenats  per  número  de 
        catàleg. 
    7 – Generació d'un fitxer de text amb tots els llibres o revistes existents ordenats per títol 
        alfabèticament. 
    8  –  Generació  d'un  fitxer  de  text  amb  tots  els  llibres  o  revistes  existents  ordenats  per 
        temes. 
    9 – Actualització del sistema. Alta / Baixa / Modificació d'un llibre o revista concret 
           
Dissenyeu  les  estructures  de  dades  adients  i  els  algorismes  necessaris  per  a  gestionar  el 
sistema de forma correcta i eficient. 
 
3.13  La  companyia  Life  Music  Inc.  és  un  grup  multinacional  que  gestiona  les  actuacions 
musicals  dels  principal  grups  i  intèrprets  del  món  sencer.  La  seva  associada  a  Barcelona, 
PASMO  (PASqual  Music  Operator),  és  una  de  les  més  innovadores  del  grup  i  s'està 
plantejant  la  possibilitat  de  millorar  el  sistema  informàtic  que  estan  utilitzant  (per  a  la 
programació de concerts, reserva i venda d'entrades, la gestió dels diferents grups musicals, 
etc.), doncs és força obsolet. 
 
Per això els seus directius s'han posat en contacte amb la FME, ja que tenen constància de la 
gran  quantitat  de  treballs  pràctics  que  realitzen  els  seus  alumnes  de  la  Diplomatura 
d'Estadística  i pensen que tenen un molt bon nivell informàtic. En concret pensen contractar 
de  forma  temporal  a  l'alumne  que  presenti  el  millor  disseny  per  a  satisfer  els  seus 
requeriments.  En  concret,  el  director  de  projectes  de  PASMO  vol  guardar  la  informació 
sobre els concerts programats i sobre les entrades venudes: 
 
     ‐ Respecte als concerts, com a mínim vol tenir constància del seu número, la data en que 
     es  celebrarà,  el  lloc  o  recinte,  el  grup  musical  que  actua,  així  com  de  la  capacitat 
     disponible per a aquell concert. 
 
     ‐ Respecte a les entrades, contindran necessàriament la següent informació: el concert 
     pel qual són vàlides, el nº de seient, el tipus de seient (general, platea, tribuna), així com 
     les dades del comprador, per evitar possibles abusos (revenda, etc.). 
 
Les operacions que es volen tenir disponibles són: 
 
    1 – La programació de concerts futurs. 
    2 – La desprogramació o anul∙lació de concerts previstos. 
    3  –  Un  llistat  de  tots  els  concerts  previstos  ordenats  creixentment  segons  la  data  de 
        celebració, a partir de la data actual. 
    4 – La venda d’entrades per un concert determinat en qualsevol dels punts de venda. 
    5 – L’accés de persones al recinte, el dia del concert, comprovant que l’entrada és vàlida i 
        impedint qualsevol ús fraudulent i enganyós de les entrades. 




                                                    39 
   6 – La generació d’un balanç diari, en un fitxer(s) de text, del nº d’entrades venudes i la 
      quantitat  de  diners  ingressats.  El  balanç  ha  de  ser  total,  parcial  per  a  cada  concert  i 
      parcial per a cada punt de venda. 
 
Els punts de venda actualment utilitzats són: Plaça Catalunya, Plaça Lesseps, Plaça Llucmajor 
i Plaça de Sants. Tots ells interconnectats informàticament.  
 
Els tipus de seient estan repartits de forma equitativa (1/3 de la capacitat per a cadascun) i 
amb uns preus respectius de 1500, 3000 i 6000 ptes. 
 
Dissenyeu  les  estructures  de  dades  adients  i  els  algorismes  necessaris  per  a  mantenir  tota 
aquesta informació de forma útil (per tant, de forma permanent) i poder efectuar totes les 
operacions de forma correcta i legal. 
 
3.14 En Hipòlit des de ja fa temps que pensa en la possibilitat de tenir emmagatzemades tot 
un  conjunt  de  receptes  de  cuina,  per  tal  de  facilitar‐ne  el  seu  ús  (consultar  les  receptes, 
actualitzar‐les, etc.). 
 
Per a cada recepta de cuina vol guardar, com a mínim, informació referent a: el nom del plat 
o  recepta,  el  autor  de  la  recepta,  els  ingredients  (quins  i  quina  quantitat),  la  descripció  de 
com fer el plat, una puntuació (entre 1 i 10) del plat, el número de racions, el preu total del 
plat i informació sobre si ja l'ha tastat o no. 
 
Entre ell i l'Elisenda han considerat que les operacions que volen tenir disponibles són: 
 
    1 – Afegir nous plats a la col∙lecció de receptes. 
    2 – Treure les receptes que ja hagin tastat i no siguin gaire bones (puntuació inferior a 5). 
    3 – Consultar les receptes d'un autor determinat. 
    4 – Modificació de les dades d'un plat (ja sigui el preu, la puntuació, etc.). 
    5  –  Generar  un  llistat  de  totes  les  receptes  ordenades  creixentment  segons  el  preu 
        (unitari per ració). 
    6 – La generació d’un fitxer de text, on hi hagi totes les receptes amb puntuació superior a 
        7, que tinguin un cert ingredient i amb un preu (unitari per recció) inferior a 250 ptes. 
 
Dissenyeu  les  estructures  de  dades  adients  i  els  algorismes  necessaris  per  a  mantenir  tota 
aquesta informació de forma útil (per tant, de forma permanent) i poder efectuar totes les 
operacions de forma correcta. 
 
3.15 L'hospital. El gerent d'un hospital, vol renovar el sistema de gestió manual que es porta 
fins  ara  en  l'hospital.  Després  de  fer  uns  estudis  sobre  la  informació  que  necessiten  dels 
malalts,  ha  arribat  a  la  conclusió  que  els  hi  cal  saber  –com  a  mínim–  per  a  cada  malat  la 
següent: el NIF (que suposarem que és un identificador clau), el nom del malalt, la adreça on 
viu, la malaltia que pateix, l'habitació que se li assigni i el pis on és l'habitació. 
 
Suposarem  que  totes  les  habitacions  tenen  1  sol  llit  (encara  que  no  és  un  fet  realista). 
L'hospital  té  8  pisos  i  a  cadascun  dels  pisos  hi  ha  30  habitacions.  Els  tractaments  que  es 
necessiten per a la gestió integral de l'hospital són: 
 
    • L'ingrés d'un malalt a l'hospital. Aquesta operació ha d'assignar una habitació lliure al 
        nou malalt. 


                                                     40 
   •  La  sortida  d'un  malalt  de  l'hospital.  Al  contrari  que  l'operació  anterior,  ha  d'alliberar 
       l'habitació que ocupava per a posteriors ingressos. 
   •  La  consulta  per  nom  dels  malalts.  Aquesta  consulta serà molt útil a la recepció, per a 
       adreçar a les visites del malalt cap a l'habitació on és. 
   • El càlcul de la taxa d'ocupació de l'hospital (relació entre el nombre de llits ocupats i el 
       nombre total de llits), per al resum que envien setmanalment a l'Institut Català de la 
       Salut.  
   • La generació d'un fitxer de text de tots els malalts ordenats per malalties. 
 
Dissenyeu  un  sistema  d'informació  permanent  que  permeti  efectuar  totes  aquestes 
operacions de forma correcta i eficient. 
 
3.16 L'agència immobiliària Lletra Petita S.A. es vol informatitzar de cara a portar una millor 
gestió de la venda dels pisos que tramiten. A més a més, volen facilitar als possibles clients, 
el procés d'elecció de pisos segons les seves necessitats.  
 
Així,  el  gerent  creu  que  necessitaria  un  sistema  d'informació  permanent  que  com  a  mínim 
guardés  la  següent  informació  sobre  cada  immoble  que  tenen  per  a  vendre:  el  número 
d'immoble (NI, número donat pel sistema que identifica l'immoble), la zona on és l'immoble 
(Sants, Les Corts, Eixample, etc.), l'adreça de l'immoble, el preu, el número d'habitacions que 
té, l'extensió de l'immoble (en m2) i el número de pis. 
 
Les operacions que es necessiten són les següents: 
 
   1) Donar d'alta un nou immoble (posar‐lo a la venda). 
   2) Donar de baixa un immoble (quan s'ha venut). 
   3) Consultar per número d'immoble (NI), tota la informació referent a un immoble. 
   4) Llistar per la pantalla tots els immobles que tinguin un preu inferior a l'especificat i un 
        número  d'habitacions  superior  al  indicat  i  una  extensió  (en  m2)  superior  a  la 
        especificada. 
   5) Generar un fitxer de text, amb tots els immobles ordenats per zones 
 
Dissenyeu  un  sistema  d'informació  permanent  que  permeti  efectuar  totes  aquestes 
operacions de forma correcta i eficient. 
 
3.17 Es vol crear i mantenir un sistema d'informació permanent que faci les funcions d'una 
agenda  personal.  Es  pretén  disposar  d'una  agenda  electrònica  que  permeti  a  l'usuari 
consultar  les  dades  referents  a  les  diferents  persones    (adreça,  telèfon,  aniversaris,  sants, 
etc.)  i  facilitar‐ne  el  seu  manteniment.  La  informació  mínima  que  s'ha  de  guardar  per  a 
cadascuna de les persones és: 
 
      – Número d'identificació personal –NIP– (donat pel sistema) 
      – Nom de la persona 
      – Adreça 
      – Codi postal 
      – Població 
      – Telèfon 
      – Data de naixement 
      – Data del sant 
      – Data del casament 


                                                    41 
 
Sobre el sistema es podran fer les següents operacions de forma interactiva: 
 
           1 – Inicialització o càrrega inicial de les dades del sistema. 
           2 – Consulta de persones per nom. 
           3 – Llistat per pantalla de tots els esdeveniments (sants, aniversaris de naixement, 
               aniversaris de casament, dia del naixement i dia del casament) entre dues dates 
               determinades, ordenats per data. 
           4  –  Generació  d'un  fitxer  de  text  amb  totes  les  persones  existents  ordenades  pel 
               NIP. 
           5 – Actualització del sistema: Alta / Baixa / Modificació de les dades d'una persona. 
 
3.18  Una  empresa  dedicada  a  fer  enquestes  ha  encarregat  a  la  recentment  creada 
Universitat de l'Alt Maresme (UdAM), que els hi dissenyi un sistema informàtic permanent 
per a gestionar i processar unes enquestes que ells ja han fet sobre les 5 millors pel∙lícules de 
la història –segons les persones enquestades– per encàrrec d'una productora de vídeos.  
 
Les enquestes, però, les tenen en paper, i volen passar‐les a un fitxer per tal de processar‐
les.  Volen  crear  un  fitxer  anomenat  ENQUESTES.DAT  on  cadascun  dels  registres  es 
correspongui amb la resposta d'una persona. A cada persona se li ha preguntat quines eren 
les 5 millors pel∙lícules, per ordre de preferència, segons el seu parer.  
 
Per tant, es necessita que el sistema permeti efectuar els següents tractaments : 
 
  • Introduir les dades d'una enquesta (per a crear el fitxer). 
  • Esborrar les dades d'una enquesta (per si s'equivoquen). 
    •  Generar  un  fitxer  de  text  amb  l'anàlisi  de  les  enquestes.  Aquesta  anàlisi  inclou:  una 
    taula  resum,  on  apareix‐hi  per  cadascuna  de  les  pel∙lícules,  quantes  vegades  ha  estat 
    votada,  per  cada  lloc  de  preferència  (del  1  al  5);  i  a  continuació,  un  llistat  de  totes  les 
    pel∙lícules ordenades pel nombre total de vots que han tingut (independentment del lloc 
    de preferència). 
     
L'empresa  els  hi  ha  dit  als  de  la  UdAM,  que  com  a  molt  surten  50  pel∙lícules  en  totes  les 
enquestes  que  han  fet.  Però  com  encara  no  tenen  gaire  experiència,  ni  han  fet  tantes 
pràctiques com vosaltres, no ho veuen gens clar. Els podeu ajudar ? 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  (l'estructura  dels  registres  del 
fitxer, etc.) per a resoldre el problema plantejat. 
 
3.19  Gestió  dels  aparcaments  municipals  a  Montmany.  L'alcalde  de  la  coneguda  vila  de 
Montmany creu intensament en les noves tecnologies. Per això vol encarregar al dept. tècnic 
de l'ajuntament, el disseny i la implementació d'un sistema automàtic de control i gestió de 
les places d'aparcament públiques de la vila.   
 
Els  carrers  del  poble  venen  identificats  per  números  enters  positius:  1,  2, 3, etc. Cadascun 
dels  carrers  té  un  nombre  de  places  d'aparcament,  que  venen  identificades  també  per 
números  enters  positius.  A  cada  plaça  d'aparcament  hi  ha  un  sensor  que  detecta  quan  un 
vehicle hi estaciona o l'abandona. Les dades del sensor s'envien per ràdio a la computadora 
central  de  l'ajuntament,  que  les  emmagatzema  en  un  nou  registre  –amb  3  camps–  d'un 
fitxer anomenat 'MOVIMENTS.DAT': 


                                                      42 
 
                <Nº de carrer>  <Nº de plaça d'aparcament>  <codi de moviment> 
 
on el codi de moviment pot ser 0 o 1:  0 ≡ plaça lliure (s'ha buidat) i 1 ≡ plaça ocupada (s'ha 
omplert). 
 
A  més  a  més,  també  vol  que  el  sistema  funcioni  correctament  encara  que  variï  la 
configuració de la vila (més o menys carrers, més o menys places d'aparcament als carrers). 
Per això en un fitxer de text anomenat 'POBLE.TXT', hi ha la configuració actual del poble en 
el següent format: 
 
                                           <Nº Total de carrers> 
                         <Nº de carrer>  <Nº Total de places d'aquest carrer> 
                                                      . . . 
                         <Nº de carrer>  <Nº Total de places d'aquest carrer> 
 
Dissenyeu un algorisme i les estructures de dades adients, que tenint en compte el fitxer de 
configuració (ja creat), processi –a la fi del dia– el fitxer de moviments generats durant el dia 
(ja  creat),  per  a  obtenir,  per  pantalla,  una  estadística  d'utilització  de  les  diferents  places 
d'aparcament dels diferents carrers de la vila (quantes vegades ha estat ocupada cada plaça 
durant  tot  el  dia).  Just  després  ha  de  generar  un  llistat  de  totes  les  places  ordenades  per 
número de vegades que han estat ocupades.  
 
Suposarem  que  a  l'inici  del  dia  totes  les  places  estan  buides  i  que  els  moviments  són  tots 
correctes. 
 
3.20  Una  petita  agència  de  viatges  anomenada  VESHI  S.A.  vol  informatitzar‐se  per  a  fer  la 
competència a les altres agències més grans. A l'agència es formalitzen una sèrie de reserves 
dels diferents viatges que tenen en catàleg.  
 
Fins  ara,  per  a  cada  reserva  obren  un  expedient  amb  un  full  on  hi  consten  les  següents 
dades: un número de reserva (per a la seva identificació), el nom i el telèfon del client, un 
codi  del  viatge  que  vol  fer,  la  data  de  sortida  del  viatge,  el  preu  del  viatge  i  la  quantitat 
abonada com a paga i senyal. 
 
Els directius volen un sistema informàtic permanent que els hi faci les següents operacions 
de la forma més eficient possible: 
 
  • Donar d'alta una nova reserva 
  • Cancel∙lar una reserva 
  • Consultar les dades d'una reserva, per a un client determinat 
    • Llistar per pantalla totes les reserves que tenen ordenades per codi de viatge 
    • Generar un fitxer de text, amb totes les reserves amb data de sortida posterior a la data 
    actual, ordenades per la data de sortida 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  (l'estructura  dels  registres  del 
fitxer, etc.) per a resoldre el problema plantejat. 
 
3.21  Ha  arribat  el  moment  en  que  en  Hipòlit  ja  no  pot  controlar  la  seva  gran  col∙lecció de 
discos,  cassets  i  compact‐discs.  Cada  dia  somia  amb  poder  automatitzar  la  gestió  de 


                                                      43 
l'Audioteca  (com  ell  l'anomena).  Així  doncs,  vol  crear  i  mantenir  un  sistema  d'informació 
permanent que li permeti gestionar totes les dades sobre els seus àlbums de música.  
Vol  disposar  d'una  Audioteca  que  li  permeti  consultar  les  dades  referents  als  diferents 
àlbums  (títol,  intèrpret  o  grup  musical,  casa  discogràfica  editora,  etc.)  i  facilitar‐ne  el  seu 
manteniment. La informació mínima que desitja guardar per a cadascun dels àlbum musicals 
és: 
 
      – Número d'identificació d'àlbum –NIA– (donat pel sistema) 
      – Títol de l'àlbum 
      – Intèrpret o grup musical 
      – Número d'àlbum 
      – Any de publicació de l'àlbum 
      – Tipus d'àlbum (casset, disc o compact) 
      – Casa discogràfica editora 
      – Nombre de cançons o temes  
 
Sobre el sistema vol poder fer les següents operacions de forma interactiva: 
 
      1 – Donar d'alta un nou àlbum 
      2 – Donar de baixa un àlbum 
      3 – Consulta de tota la informació corresponent  a l'àlbum especificat 
           4 – Llistat per pantalla de tots els àlbum que té d'un cert intèrpret o grup musical. 
           5 – Generació d'un fitxer de text amb tots els àlbums existents, ordenats per tipus 
           d'àlbum, i dins de cada tipus, ordenats alfabèticament per títol. 
                  
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
3.22 La Pizzeria. L’encarregat de PizzaNet, una nova empresa de venda de pizzes a domicili, 
vol informatitzar el procés de venda i lliurament de les pizzes per a facilitar‐ne la gestió. El 
gerent vol anar guardant informació sobre les diferents comandes que els hi fan durant el 
dia, en un fitxer.  
 
Per a cada comanda vol guardar ‐com a mínim‐ informació sobre el tipus de pizza (hi ha 15 
tipus  diferents  de  pizza:  margarita,  4‐estacions,  mexicana,  tropical,  etc.),  la  mida  (petita, 
mitjana, gran), el nom del client, l’adreça del client, el telèfon del client, la data, l’hora de la 
comanda, el motorista que ha portat la pizza (tenen 20 motoristes diferents), etc. 
 
El gerent vol que el sistema assigni automàticament un motorista lliure per a cadascuna de 
les noves comandes, i que un cop s’hagi entregat la pizza, i torni el motorista, el sistema el 
torni a tenir disponible per atendre noves comandes. 
 
Per tant, es necessita que el sistema permeti efectuar els següents tractaments : 
 
  • Registrar una nova comanda. 
  • Controlar el retorn del motorista (pizza lliurada al client). 
   •  Al  final  del  dia,  generar  un  fitxer  de  text  on  apareix‐hi  els  diferents  tipus  de  pizza 
   (independentment de la mida) ordenades decreixentment segons el número de vendes. 
 




                                                    44 
Podeu suposar que cada comanda està formada per una sola pizza. Dissenyeu un algorisme i 
les estructures de dades adients (l'estructura dels registres del fitxer, etc.) per a resoldre el 
problema plantejat. 
 
3.23  L’empresa  Radiomàtic  Taxi,  és  una  empresa  que  ofereix  servei  de  taxi  per  telèfon. 
Disposa d’un parc de 25 taxis que són conduïts cadascun per un xofer diferent. L’empresa vol 
portar a terme un control estricte dels serveis que fan els diferents taxistes durant el dia, per 
tal de controlar el treball dels seus empleats i d’evitar possibles irregularitats. Per això han 
instal∙lat  uns  sensors  electrònics  en  el  taxímetre  que  detecten  quan  s’aixeca  i  s’abaixa  la 
bandera del taxi.  
 
Les dades del sensor s'envien per ràdio a la computadora central de Radiomàtic Taxi, que les 
va emmagatzemant en un fitxer, anomenat ‘SERVEIS.DAT’ en un nou registre format per dos 
camps: 
 
                                    <Nº de taxi>  <Codi de bandera> 
 
on  el  codi  de  bandera  pot  ser  A  o  V:    A  ≡  bandera  amunt  (taxi  lliure/fi  de  servei)  i  V  ≡ 
bandera avall (taxi ocupat/inici de servei). 
 
Dissenyeu un algorisme i les estructures de dades adients, que processi –a la fi del dia– el 
fitxer  de  serveis  generat  durant  el  dia  (ja  creat),  per  a  obtenir,  per    pantalla,  un  llistat 
d'ocupació dels diferents taxistes (quants serveis ha fet cada taxista durant tot el dia). Just 
després ha de generar un altre llistat de tots els taxistes ordenat decreixentment segons el 
número de serveis que hagi fet cadascun. 
 
Suposarem que a l'inici del dia tots els taxis estan lliures i que els serveis són tots correctes. 
 
3.24 Una petita empresa de lloguer de cotxes, anomenada LLOGUERCAR, vol informatitzar‐
se  i  abaratir  costos  per  a  fer  la  competència  a  les  altres  empreses  més  grans.  L’empresa 
ofereix una sèrie de lloguers dels diferents cotxes de que disposen. Els cotxes poden ser de 
tres categories: A, B o C. La categoria A correspon als cotxes petits, la B als mitjans, i la C als 
grans. Tenen 20 cotxes de categoria A, 15 cotxes de categoria B i 10 cotxes de categoria C. 
 
Per  a  cada  lloguer  necessiten  les  següents  dades:  un  número  de  lloguer  (per  a  la  seva 
identificació), el nom, adreça, NIF i el telèfon del client, el tipus de cotxe que vol llogar (A, B 
o  C),  el  nombre  de  dies  que  es  vol  llogar,  la  data  d’inici  del  lloguer,  el  preu  del  lloguer,  el 
cotxe que se li assigna, etc. 
 
El preu del lloguer depèn del tipus de cotxe i dels dies de lloguer. Els preus de lloguer per dia, 
incloent l’IVA i l‘assegurança a tot risc són:  
 
                                   1‐3 dies         4‐6 dies           ≥ 7 dies 
                      
                     Tipus A       5800             5400               5000 
                     Tipus B       6800             6400               6000 
                     Tipus C       7800             7400               7000 
 
El  sistema  ha  de  calcular  automàticament  el  preu  amb  les  dades  del  lloguer  i  assignar  un 
cotxe  disponible,  si  n’hi  ha  algun,  de  la  categoria  demanada.  El  gerent  vol  un  sistema 


                                                       45 
informàtic  permanent  que  els  hi  faci  les  següents  operacions  de  la  forma  més  eficient 
possible: 
 
  • Llogar un nou cotxe (assignant el cotxe i calculant el preu) 
  • Cancel∙lar un lloguer (tornar  el cotxe) 
   • Llistar per pantalla tots els lloguers que tenen ordenats per tipus de cotxe 
   • Generar un fitxer de text, amb tots els lloguers amb data d’inici del lloguer posterior a la 
   data actual, ordenades creixentment per la data d’inici de lloguer 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat. 
 
3.25  La  recentment  creada  Associació  de  Científics  d'Arreu  del  Món  (ACAM),  vol 
informatitzar tots els seus procediments administratius. Així doncs, vol crear i mantenir un 
sistema d'informació permanent que li permeti gestionar totes les dades sobre els seus socis. 
Hi ha 3 tipus de socis: estudiant, ordinari i institucional amb 3 quotes anuals diferents que 
són respectivament: 2.000, 5.000 i 20.000. 
L'associació  vol  disposar  d'una  aplicació  informàtica  que  li  permeti  consultar  les  dades 
referents als diferents socis (nom del soci, adreça del soci, tipus de soci, etc) i facilitar‐ne el 
seu manteniment. La informació mínima que desitja guardar per a cadascun dels socis és: 
 
      – Número de soci –NS– (donat pel sistema) 
      – Nom del soci 
      – Adreça on viu el soci (carrer, nº del carrer, pis, porta) 
      – Ciutat on viu 
      – Codi postal 
      – Data d'alta del soci 
      – Tipus de soci (estudiant, ordinari o institucional) 
      – Nº del compte bancari per a efectuar els càrrecs (20 dígits) 
 
Sobre el sistema volen poder fer les següents operacions, de forma interactiva: 
 
      1 – Donar d'alta un nou soci 
      2 – Donar de baixa un soci 
      3 – Consultar tota la informació corresponent  al soci especificat 
          4 – Generar la previsió de la facturació anual del cobrament de les quotes dels socis. 
          5 – Generació d'un fitxer de text amb tots els socis existents, ordenats per tipus de 
          soci, i dins de cada tipus, ordenats alfabèticament pel nom. 
                  
 
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
3.26 L’empadronament. L’encarregat del padró municipal de Barcelona vol informatitzar el 
procés  de  confecció  i  manteniment  permanent  del  padró  municipal  per  a  facilitar‐ne  la 
gestió.  El  padró  es  va  confeccionant,  a  partir  de  la  informació  en  paper  que  recullen  a 
l’Ajuntament,  provinent  de  les  diferents  llars  de  la  ciutat.  La  unitat  bàsica  en  que  es 
configura el padró és la llar. Una llar és aquell espai on habita una unitat familiar. Per tant, 
pot ser un pis, un tros d’un pis, una casa, etc. 
 



                                                  46 
Per a cada llar vol guardar ‐com a mínim‐ informació sobre el tipus d’ubicació (carrer, plaça, 
passeig, passatge, avinguda, etc.), el nom de la ubicació, el tipus de llar (casa, pis, tros‐de‐pis, 
etc.),  número, lletra, pis, porta, districte postal, quants membres composen la família, i per 
a cada membre de la família: nom, DNI, edat, lloc de naixement, llengua materna, professió, 
tipus d’estudis (primaris, secundaris, universitaris), etc. 
 
L’encarregat  vol  que  el  sistema  permeti  efectuar  els  següents  tractaments  bàsics,  en  la 
primera fase del projecte : 
 
    • Registrar una nova llar (empadronar). 
    • Canvi de llar (canvi d’empadronament dins la mateixa ciutat). 
    • Esborrar una llar (canvi d’empadronament per abandó de la ciutat) 
    •  Generar  un  fitxer  de  text  on  apareguin  les  diferents  llars  ordenades  creixentment  pel 
      districte postal, i dins de cada districte ordenades decreixentment segons el nombre de 
      membres de cada llar. 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat. 
 
3.27 El concurs. La Generalitat de Catalunya ha decidit convocar un concurs per a premiar el 
millor investigador d’arreu del país. El nombre d’investigadors que s’han presentat és de 50. 
El guanyador es decidirà en base a les valoracions que n’efectuïn uns experts internacionals. 
La  valoració  és  una  puntuació  que  atorguen  els  experts  a  cadascun  dels  candidats  del 
concurs. El nombre de experts internacionals que han intervingut en el concurs és molt gran.  
 
Per cada valoració d’un expert a un dels candidats se’n ha guardat la informació en una tupla 
formada  per  dos  camps:  en  un  s’hi  guarda  el  nom  del  candidat,  que  és  una  cadena  de 
caràcters, i en l’altre la puntuació atorgada, que és un valor real entre 0 i 10. Amb les dades 
de totes les valoracions obtingudes s’ha creat un fitxer ‘VALORACIONS.DAT’, amb un tipus de 
registre igual a la tupla esmentada anteriorment. 
 
Dissenyeu les estructures de dades adients i un algorisme que tenint com a dades d’entrada 
el  fitxer  ‘VALORACIONS.DAT’  ja  creat,  calculi  la  puntuació  mitjana  de  cadascun  dels 
candidats,  i  generi  un  llistat  de  tots  els  candidats  ordenat  de  major  a  menor  puntuació 
mitjana, tot indicant‐ne el guanyador. 
 
3.28  L’empresa  Improvisa  S.A.  està  dedicada  a  organitzar  congressos  científics.  A  hores 
d’ara,  el  seu  merescut  èxit  mundial  provoca  que  hagi  arribat  el  moment  en  que  necessita 
informatitzar  tots  els seus procediments administratius. Així doncs, vol crear i mantenir un 
sistema  d'informació  permanent  que  li  permeti  gestionar  totes  les  dades  sobre  els 
participants  en  els  congressos  que  organitzen.  Hi  ha  3  tipus  de  participants:  estudiants, 
ponents (fan alguna xerrada), assistents (no fan xerrades) i convidats amb 4 quotes diferents 
d’inscripció al congrés que són respectivament: 15.000, 40.000, 50.000 i 0 ptes. 
L'empresa  vol  disposar  d'una  aplicació  informàtica  que  li  permeti  consultar  les  dades 
referents  als  diferents  participants  (nom  del  participant,  adreça  del  participant,  tipus  del 
participant,  tipus  d’hotel  que  desitja,  etc)  i  facilitar‐ne  el  seu  manteniment.  La  informació 
mínima que desitja guardar per a cadascun dels participants és: 
 
      – Número de participant –NP– (donat pel sistema) 
      – Nom del participant 


                                                   47 
      – Organització/universitat/institut/empresa a la que pertany el participant 
      – Adreça del participant (carrer, nº del carrer, pis, porta) 
      – Ciutat 
      – Codi postal 
      – País del participant 
      – Tipus del participant (estudiant, ponent, assistent o convidat) 
      – Data d'arribada a la ciutat on es fa el congrés 
      – Data de sortida de la ciutat on es fa el congrés 
      – Tipus d’hotel que desitja (econòmic‐ **, normal‐***, luxe‐****) 
      – Nº de la targeta de crèdit per a efectuar els càrrecs (20 dígits) 
 
Sobre el sistema volen poder fer les següents operacions, de forma interactiva: 
 
           1 – Donar d'alta un nou participant 
           2 – Donar de baixa un participant 
           3 – Consultar tota la informació corresponent  al participant especificat 
           4 – Generar la previsió del ingrés que s’obtindrà amb les quotes d’inscripció 
           5  –  Generació  d'un  fitxer  de  text  amb  tots  els  participants  existents,  ordenats  pel 
               tipus  d’hotel  que  desitja,  i  dins  de  cada  tipus,  ordenats  cronològicament  per  la 
               data d’arribada. 
            
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
3.29  L’Hostal  de  Ribes  de  Freser.  L’encarregat  de  l’Hostal  vol  informatitzar  el  procés 
d’allotjament, facturació i desallotjament dels clients de l’Hostal per a facilitar‐ne la gestió. 
Vol un sistema informàtic permanent i versàtil segons la configuració de pisos, habitacions i 
tipus d’habitacions de l’Hostal, que controli la ocupació i la alliberació de les habitacions. Hi 
ha quatre tipus d’habitacions: individuals, dobles, triples i quàdruples. L’Hostal té en aquests 
moments  4  pisos,  i  cada  pis  té  10  habitacions.  Les  habitacions  1  i  2  de  cada  pis  són 
individuals. Les habitacions 3, 4, 5, 6 i 7 de cada pis són dobles. Les habitacions 8 i 9 de cada 
pis  són  triples,  i  les  habitacions  10  de  cada  pis  són  quàdruples.  El  règim  alimentici  pot  ser 
pensió completa (6000 ptes per persona i dia), mitja pensió (4500 ptes per persona i dia) o 
només allotjament amb esmorzar (3000 ptes per persona i dia). 
 
Per  a  cada  client  vol  guardar  ‐com  a  mínim‐  informació  sobre  el  nom  del  client,  el  nif,  la 
adreça  del  client,  el  tipus  d’habitació  que  desitja,  el  nombre  d’ocupants,  l’habitació 
assignada, el règim alimentici i la data d’arribada a l’hotel, etc. 
 
L’encarregat  vol  que  el  sistema  permeti  efectuar  els  següents  tractaments  bàsics,  en  la 
primera fase del projecte : 
 
•  Registrar  un  nou  client  (allotjar  a  un  nou  client).  Automàticament  el  sistema  li  haurà 
d’assignar una habitació lliure (si és que existeix) del tipus que demana. 
•  Facturació  d’un  client  a  partir  de  la  data  de  sortida  del  hotel  especificada,  que  calcularà 
l’import a pagar pel client en la data especificada (Es facturen dies complets sense tenir en 
compte les hores d’entrada i d’arribada, essent el mínim 1 dia de facturació). 
• Esborrar un client (desallotjar a un client). Automàticament els sistema haurà de tornar a 
tenir lliure la habitació fins ara ocupada. 
 



                                                     48 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat. 
 
3.30 El Mundial França’98 de regularitat. La FIFA (Federació Internacional d’Associacions de 
Futbol) ha decidit establir el campió mundial de regularitat de futbol de França’98, en base a 
la  totalitat  dels  partits  que  han  jugat  totes  les  seleccions mundials de futbol al llarg dels 4 
anys des del darrer Mundial. D’aquesta forma es mesurarà la regularitat dels equips i no tant 
sols l’encert o sort que poden tenir en unes eliminatòries. Així es considerarà que el millor 
equip  ‐el  campió  mundial  de  regularitat‐  és  aquell  que  tingui  un  major  ràtio  de  punts 
aconseguits  per  partit,  i  en  cas  d’empat,  es  tindrà  en  compte  la  diferència  de  gols  (gols 
marcats – gols encaixats). També volen saber quin és el millor àrbitre ‐el més regular‐ que 
serà  aquell  que  hagi  xiulat  més  partits.  Per  cada  partit  guanyat  s’aconsegueixen  3  punts, 
mentre  que  en  un  empat  se’n  aconsegueix  1,  i  cap  en  una  derrota.  El  nombre  màxim 
d’àrbitres internacionals federats és de 60, mentre que el de seleccions afiliades a la FIFA és 
de  150.  Evidentment,  el  nombre  de  partits  que  ha  jugat  cada  selecció  no  té  perquè  ser  el 
mateix.  
 
Durant aquests darrers 4 anys la FIFA ha anat guardant tota la informació necessària sobre 
cada  partit  jugat  durant  aquest  període  en  una  tupla  formada  per  5  camps:  el  nom1  d’un 
equip (cadena de caràcters), el nom2 de l’altre equip (cadena de caràcters), els gols1 que ha 
marcat  un  equip  (valor  enter  positiu),  els  gols2  que  ha  marcat  l’altre  equip  (valor  enter 
positiu) i l’àrbitre que ha xiulat el partit (cadena de caràcters). Les dades de tots els partits 
disputats s’han guardat en un fitxer anomenat ‘PARTITS.DAT’, amb un tipus de registre igual 
a la tupla esmentada anteriorment. 
 
Dissenyeu les estructures de dades adients i un algorisme que tenint com a dades d’entrada 
el fitxer ‘PARTITS.DAT’ ja creat, generi un fitxer de text ‘EQUIPS.TXT’ amb tots els equips que 
surten  al  fitxer  original  ordenats  decreixentment  pel  ràtio  de  punts  per  partit,  i  en  cas 
d’igualtat, per la diferència de gols, tot indicant‐ne el/s campió/ns mundial/s de regularitat. 
També  s’ha  de  generar  un  altre  fitxer  ‘ARBITRES.TXT’  amb  els  àrbitres  ordenats 
decreixentment segons el nombre de partits xiulats, tot indicant‐ne el/s millor/s. 
 
3.31  L’empresa  Fustots,  S.A.  està  dedicada  a  la  fabricació  i  venda  de  mobles.  El  tècnic 
comercial vol informatitzar tots els procediments relatius a la venda dels mobles. Així doncs, 
vol  crear  i  mantenir  un  sistema  d'informació  permanent  que  li  permeti  gestionar  totes  les 
dades  sobre  els  diferents  models  de  mobles  que  fabriquen,  per  a  poder  atendre  més 
fàcilment als clients. Hi ha 4 categories de mobles: rústic, econòmic, clàssic i modern. 
L'empresa  vol  disposar  d'una  aplicació  informàtica  que  li  permeti  consultar  les  dades 
referents als diferents mobles (nom del moble, categoria del moble, tipus del moble, mides 
del  moble,  tipus  de  material,  etc)  i  facilitar‐ne  el  seu  manteniment.  La  informació  mínima 
que desitja guardar per a cadascun dels mobles és: 
 
      – Número del moble –NM– (donat automàticament pel sistema) 
      – Nom del moble (rebedor‐titanic, taula‐titanic, sofà‐orion, etc.) 
      – Categoria del moble (rústic, econòmic, clàssic o modern) 
      – Tipus de moble (rebedor, sofà, taula, llit, cadira, tocador, llibreria, etc.) 
      – Tipus de material (melamina, xapat de fusta o lacat) 
      – Color (cirerer, faig, blanc, negre, etimoe, pi, roure, etc.) 
      – Mides del moble (llargària, amplada o fondària i alçada, en cm) 
      – Preu del moble 


                                                   49 
      – Unitats disponibles 
 
Sobre el sistema volen poder fer qualsevol de les següents operacions, de forma interactiva: 
 
1 – Donar d'alta un nou moble 
2 – Donar de baixa un moble 
3 – Consultar tota la informació corresponent  al moble especificat 
4 – Generació d'un fitxer de text amb tots els mobles existents, ordenats per la categoria del 
moble, i dins de cada categoria, ordenats pel tipus de moble. 
                      
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema.  
 
3.32  El  circuit  de  Catalunya  (2).  L’encarregat  del  circuit  de  Montmeló  vol  informatitzar  el 
procés de registre de les escuderies, i del lloguer dels boxes a les diferents escuderies que 
participen  en  el  campionat  mundial  d'automobilisme  (Ferrari,  McLaren,  Minardi,  Prost‐
Renault, Arrows, Beneton, etc.). Els boxes són els locals on hi ha els equips de mecànics, els 
directius,  els  cotxes  de  reposició,  etc.  de  cada  escuderia  durant  la  cursa  i  durant  els 
entrenaments.  L'encarregat  vol  un  sistema  informàtic  permanent  i  versàtil  segons  la 
configuració dels boxes, la seva ubicació al circuit i el tipus de boxes del circuit, que controli 
el  registre  de  les  escuderies  i  la  ocupació  i  l'alliberació  dels  boxes.  Els  boxes  es  lloguen 
normalment la setmana abans de la cursa i s'abandonen just després de la cursa. 
 
Hi ha 2 tipus de boxes al circuit de Montmeló: normals i dobles. El circuit disposa en aquests 
moments  de  4  zones  de  boxes  (tribuna‐pral‐est,  tribuna  pral‐oest,  recta‐est,  recta‐oest),  i 
cada zona té 10 boxes. Els boxes 1, 2, 3 i 4 de cada zona són normals. Els boxes 5, 6, 7, 8, 9 i 
10 de cada zona són dobles. El règim de lloguer és el següent: 1000 EUR al dia per un box 
normal i 1800 EUR al dia per un box doble. 
 
Per a cada escuderia vol guardar ‐com a mínim‐ informació sobre el nom de l'escuderia, el nif 
de  l'escuderia,  la  seu  social  de  l'escuderia,  el  tipus  de  box  que  desitja,  el  box  assignat,  i  la 
data d’arribada al circuit. 
 
L’encarregat vol que el sistema permeti efectuar qualsevol dels següents tractaments bàsics: 
 
    •  Registrar  una  nova  escuderia  (allotjar  a  una  nova  escuderia  en  el  circuit). 
        Automàticament el sistema li haurà d’assignar un box lliure (si és que existeix) del tipus 
        que demana. 
    •  Facturació  a  una  escuderia  a  partir  de  la  data  de  sortida  del  circuit  especificada,  que 
        calcularà  l’import  a  pagar  per  l'escuderia  en  la  data  especificada  (Es  facturen  dies 
        complets sense tenir en compte les hores d’entrada i d’arribada, essent el mínim 1 dia 
        de facturació). 
    •  Esborrar  una  escuderia  (desallotjar  una  escuderia  del  circuit).  Automàticament  els 
        sistema haurà de tornar a tenir lliure el box ocupat fins ara. 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat. 
 
3.33  La  Unió  Europea.  Les  autoritats  de  la  Unió  Europea  estan  força  preocupades  pels 
problemes sanitaris dels productes alimentaris que han aparegut darrerament. Per mirar de 
controlar la lliure circulació de mercaderies dins els països de la Unió Europea, han obligat a 


                                                       50 
qualsevol exportador de productes alimentaris, a informar a les autoritats europees de tots 
els carregaments que exporten a altres països. Així, per cada carregament informen del nom 
de  l'empresa  exportadora  fabricant  del  producte  (Cola‐loca,  Pinsos‐Trans,  etc.),  el  tipus  de 
producte  (sac  de  pinso  de  20  Kg,  botella  de  cola  de  50  cl.,  etc.)  i  el  nombre  d'unitats  del 
producte (un valor enter positiu). Tota aquesta informació la va guardant la Unió Europea en 
un fitxer seqüencial, anomenat 'EXPORTACIONS.DAT', que té una estructura de registre amb 
els tres camps esmentats anteriorment. No hi ha més de 40 tipus de productes diferents, ni 
més  de  50  empreses  exportadores  diferents.  Evidentment  una  mateixa  empresa  pot 
exportar diferents productes, i un mateix producte pot ser exportat per diferents empreses. 
 
 Les  autoritats  volen  un  algorisme  que  processi  el  fitxer  'EXPORTACIONS.DAT'  que  ja  s'ha 
anat  creant  amb  les  dades  de  totes  les  exportacions  que  s'han  anat  produint  a  la  Unió 
Europea fins a un moment determinat. Les dades de cada una de les exportacions són en un 
registre del fitxer. Un cop processat el fitxer, volen poder fer les següents consultes: 
 
    • Generar un llistat per pantalla amb totes les empreses que han exportat un determinat 
        tipus de producte. 
     
    •  Generar  un  llistat  en un fitxer de text anomenat 'EMPRESA.TXT' de tots els productes 
        exportats  per  una  empresa  determinada  ordenats  decreixentment  segons  el  nombre 
        d'unitats dels productes. 
 
a) Dissenyeu les estructures de dades adients i un algorisme que resolgui el problema de la 
Unió Europea. 
 
b)  Com  modificaríeu  les  estructures  de  dades  necessàries  per  a  resoldre  el  problema,  si  a 
més  a  més  hi  hagués  informació  als  registres  del  fitxer  'EXPORTACIONS.DAT'  de  l'empresa 
importadora del producte (un 4rt camp), i es volgués poder consultar, a més a més, a quines 
empreses  han  anat  a  parar  cert  tipus  de  productes.  Suposeu  que  el  nombre  d'empreses 
importadores és com a molt de 50. 
 
3.34 La divisió tècnica d'un conegut club esportiu, TecBar, vol un nou sistema informàtic per 
a  controlar  tots  els  procediments  relatius  a  la  compravenda  dels  esportistes  professionals. 
Així doncs, vol un sistema d'informació permanent que li permeti gestionar totes les dades 
sobre els diferents jugadors que hi ha al mercat internacional. 
TecBar vol disposar d'una aplicació informàtica que li permeti consultar les dades referents 
als diferents jugadors (edat del jugador, pes del jugador, país del jugador, esport al que juga, 
club actual, preu de venda, etc.) i facilitar‐ne el seu manteniment. La informació mínima que 
desitja guardar per a cadascun dels jugadors és: 
 
– Número del jugador –NJ– (generat automàticament pel sistema informàtic) 
– Nom del jugador 
– Edat del jugador 
– Pes del jugador (en kg) 
– Alçada del jugador (en cm) 
– País d'origen 
–  Esport  que  practica  (futbol,  futbol‐americà,  handbol,  rugbi,  bàsquet,  hoquei‐patins, 
    waterpolo, etc.) 
– Club al que pertany (Barcelona, Santboiana, Espanyol, Bologna, Ajax, Inter, Badel, Joventut, 
    Manchester, Vic, etc.) 


                                                     51 
– Posició que ocupa a l'equip (defensa, davanter, pivot, aler, porter, extrem, interior, base, 
    etc.) 
– Categoria del jugador (crack, molt‐bo, bo) 
– Preu de venda del jugador (en milers d'euros) 
 
Sobre  el  sistema  s'ha  de  poder  fer  qualsevol  de  les  següents  operacions,  de  forma 
interactiva: 
 
1 – Donar d'alta un nou jugador 
2 – Donar de baixa un jugador 
3 – Consultar tota la informació corresponent al jugador especificat (consulta per nom) 
4 – Donat un esport concret, la generació d'un fitxer de text amb tots els jugadors existents 
     d'aquell  esport,  ordenats  per  la  posició  dels  jugadors,  i  dins  de  cada  posició,  ordenats 
     per la seva categoria. 
                     
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema.  
 
3.35 El Videoclub. L’amo d’un petit videoclub, que està augmentant cada vegada més el seu 
volum de negoci, vol informatitzar el procés de gestió del videoclub. S’ha especialitzat en el 
lloguer de pel∙lícules amb taxa única, independentment del nombre de dies de lloguer (entre 
1 i 4 dies). Vol controlar millor quines pel∙lícules té i quines no, quins socis tenen les diferents 
còpies  de  cada  pel∙lícula,  etc.  L’amo  del  videoclub  vol  un  sistema  informàtic  permanent  i 
versàtil segons les diferents pel∙lícules que tingui en cada moment, que li gestioni de forma 
correcte els préstecs de les diferents còpies de les pel∙lícules. 
 
De cada pel∙lícula en tenen exactament 3 còpies. Per a poder emportar‐se una pel∙lícula cal 
ser soci del videoclub. Els socis estan identificats per un número de soci (nº enter > 0). Les 
pel∙lícules les tenen classificades segons els gèneres (comèdia, drama, ciència‐ficció, thriller, 
aventura,  eròtica‐porno,  històrica,  musical,  inclassificable).  A  cada  pel∙lícula  li  assignen  un 
codi que la identifica format pel tipus de gènere i un número (nº enter > 0), per exemple: 
comèdia 23, drama 36, etc. Les pel∙lícules estan classificades segons el tipus de públic que les 
pot veure/llogar (tothom, majors de 9 anys, majors de 13 anys i majors de 18 anys).  
 
Per  a  cada pel∙lícula vol guardar ‐com a mínim‐ informació sobre el títol de la pel∙lícula, el 
gènere de la pel∙lícula, el codi de la pel∙lícula, l’any de filmació, el director de la pel∙lícula, el 
tipus  de  públic  que  la  pot  veure/llogar,  i  la  informació  de  quin  soci  del  videoclub  té  cada 
còpia de la pel∙lícula. 
 
L’encarregat vol que el sistema permeti efectuar qualsevol dels següents tractaments bàsics 
en qualsevol ordre: 
 
    •  Registrar  una  nova  pel∙lícula  (compra  d’una  nova  pel∙lícula  per  part  del  videoclub). 
     Automàticament el sistema li haurà d’assignar un codi de pel∙lícula. 
    • Consultar per pantalla totes les pel∙lícules d’un cert gènere donat, de les quals en tingui 
     com a mínim una còpia lliure. 
    • Llogar una pel∙lícula a un determinat soci. Li assignarà una còpia de la pel∙lícula si es que 
     n’hi ha alguna. 



                                                    52 
   •  Tornar  una  pel∙lícula  per  part  d’un  soci.  La  còpia  tornarà  a  quedar  a  disposició  del 
    videoclub. 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat. 
 
3.36  Les  enquestes  esportives.  En  la  coneguda  república  de  Barzaquistà  estan  a  punt  de 
realitzar eleccions esportives per a determinar el nou president del seu club de futbol més 
emblemàtic: el F. C. Barzaquistà, famós a nivell mundial. Un conegut mitjà de comunicació 
esportiu ha realitzat unes enquestes a la població per mirar de saber l’estat actual d’opinió 
de la gent del país, i la posició actual dels candidats: Ñanli, Partgas, Radollau, Ssatba, Tellscas, 
etc. Es presenten 10 candidats. A la gent, els hi han preguntat a quin candidat votarien, quin 
candidat els hi provoca un major rebuig, i quin candidat té la millor imatge, sempre segons 
les seves opinions. Evidentment hi ha gent que ha respost un nom de candidat i altres que no 
sabien o no han contestat. El nombre d’enquestes realitzades és molt gran. 
 
Les  dades  de  cada  enquesta  s’han  guardat  en  un  fitxer  seqüencial  anomenat 
‘ENQUESTES.DAT’, on els registres estan formats per tuples amb 3 camps corresponents a les  
3  preguntes  de  l’enquesta:  intenció  de  vot,  candidat  amb  major  rebuig,  i  el  candidat  amb 
millor imatge. 
 
La gent del diari esportiu volen un algorisme que processi el fitxer ‘ENQUESTES.DAT’ que ja 
està creat amb les dades de totes les enquestes,  i en faci una anàlisi estadística simple.  
 
Un cop processat el fitxer, volen poder fer les següents consultes: 
 
    • Generar un llistat per pantalla amb la informació obtinguda per a cada candidat: vots 
        assolits  (intenció  de  vot)  en  números  absoluts  i  en  percentatge,  vots  de  rebuig 
        obtinguts en números absoluts i en percentatge, i vots de millor imatge obtinguts en 
        números  absoluts  i  en  percentatge.  També  haurà  de  sortir  al  final  de  llistat,  la 
        informació total acumulada dels vots en números absoluts i percentatge. 
    • Generar  un  llistat  en  un  fitxer  de  text  anomenat  ’ENQUESTES.TXT’  de  tots  els 
        candidats  ordenats  decreixentment  segons  el  nombre  de  vots  assolits,  i  en  cas 
        d’empat, segons els vots de rebuig. 
 
a) Dissenyeu les estructures de dades adients i un algorisme que resolgui el problema del F. 
     C. Barzaquistà. 
 
b) Com  modificaríeu  les  estructures  de  dades  necessàries  per  a  resoldre  el  problema,  si  a 
     més a més hi hagués informació als registres del fitxer ‘ENQUESTES.DAT’ de si la persona 
     enquestada és soci o no del club (un 4rt camp), i es volgués poder fer, a més a més, una 
     anàlisi estadística separada pels socis, pels no socis i conjunta. 
 
3.37  L’agència  de  viatges  FUIG  vol  un  nou  sistema  informàtic  per  a  controlar  tots  els 
procediments  relatius  a  la  gestió  dels  seus  viatges.  Així  doncs,  vol  un  sistema  d'informació 
permanent que li permeti gestionar totes les dades sobre els diferents viatges que hi ha al 
mercat nacional i internacional dels diferents operadors turístics. 


                                                   53 
FUIG vol disposar d'una aplicació informàtica que li permeti consultar les dades referents als 
diferents  viatges  (nom  del  viatge,  zona  geogràfica,  tipus  de  viatge,  durada  del  viatge,  preu 
per persona etc.) i facilitar‐ne el seu manteniment. La informació mínima que desitja guardar 
per a cadascun dels viatges és: 
 
   – Número del viatge –NV– (generat automàticament pel sistema informàtic) 
   – Nom del viatge (Tot Méxic, Grècia al complet, Europa romàntica, Itàlia, Illes Maldives, 
       Canadà costa est, Set illes en set dies, etc.) 
   – Zona  geogràfica  del  viatge  (Méxic,  Carib,  Amèrica  del  Nord,  Sudamèrica,  Europa 
       central, Àfrica, Mediterrani, etc.) 
   – Tipus de viatge (creuer, avió, circuit‐terrestre, combinat, aventura) 
   – Durada del viatge (en dies) 
   – Data de sortida 
   – Preu per persona en habitació/camarot doble (en euros) 
   – Nombre de places disponibles (un valor enter positiu) 
   – Operador  turístic  (Julià  Tours,  Ambassador,  Politours,  Travelplan,  Royal  Caribbean, 
       Costa creuers, Lufthansa, Iberia, etc.) 
 
Sobre  el  sistema  s'han  de  poder  fer  les  següents  operacions  en  qualsevol  ordre,  de  forma 
interactiva: 
 
    1 – Donar d'alta un nou viatge 
    2 – Donar de baixa un viatge 
    3 – Consultar tota la informació corresponent al viatge especificat (consulta pel nom del 
       viatge) 
    4  –  Donada  una  data  concreta,  la  generació  d'un  fitxer  de  text  amb  tots  els  viatges 
       existents a partir d’aquella data de sortida, ordenats per la zona geogràfica, i dins de 
       cada zona, ordenats per tipus de viatge. 
            
Dissenyeu un algorisme i les estructures de dades adients per a resoldre aquest problema. 
 
3.38  L’Hipermercat.  L’Hipermercat  Bon  Servei  vol  controlar  i  gestionar  el  seu  estoc  de 
productes  dia  a  dia.  Per  això  esperen  que  la  informatització  del  seu  procés  de  gestió  de 
productes (nous productes, vendre unitats de certs productes, reposar unitats de productes, 
etc.) millori el funcionament de l’hipermercat. El gerent vol un sistema informàtic permanent 
i  versàtil  segons  els  diferents  productes  que  tenen  en  estoc,  i  que  li  gestioni  de  forma 
correcte les vendes i reposicions dels diferents productes que ofereixen. 
 
Per a cada producte vol guardar, com a mínim, informació sobre un codi d’identificació del 
producte  (un  nombre  enter  positiu),  el  nom  del  producte  (fa‐llimona,  llauna‐coca‐cola, 
mitjanes‐xai,  etc.),  la  categoria  del  producte  (neteja,  beguda,  carn,  peix,  etc.),  el  tipus  del 
producte (xampú, suavitzant, sabó‐pastilla, xai, lluç, refresc‐cola, etc.), la marca del producte 
(henkel, coca‐cola, etc.) i el número d’unitats disponibles del producte. 
 
El gerent vol que el sistema permeti efectuar qualsevol dels següents tractaments bàsics en 
qualsevol ordre i qualsevol dia de l’any: 
 



                                                    54 
   •  Afegir  un  nou  producte.  Afegir  un  nou  producte  en  estoc  a  l’hipermercat. 
    Automàticament el sistema li haurà d’assignar un codi identificador de producte. 
   •  Venda  d’unitats  d’un  producte.  Efectuar  la  venda  a  un  client  d’alguna  unitat  d’un 
    producte. 
   • Reposició d’unitats d’un producte. Afegir unitats d’algun producte proporcionades per 
    un proveïdor. 
   • Consulta de productes. Llistat per pantalla de tots els productes amb un estoc inferior a 
    50 unitats, ordenats alfabèticament per categoria del producte. 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat. 
 
3.39  Els  taxis.  L’empresa  DIGITALTAXI  és  la  primera  a  tot  el  país  que  ha  implantat  la 
tecnologia informàtica a tota la seva flota de taxis. La flota actual de taxis de la companyia és 
de  30  taxis.  L’empresa  té  contractats  25  taxistes.  Hi  ha,  per  tant,  5  taxis  de  reserva  per  si 
s’espatllen  els  altres  durant  el  dia  i  per  a  efectuar  tasques  de  manteniment  preventiu.  Els 
taxis  son  cotxes  de  diferents  marques  i  diferents  models.  L’empresa  els  ha  comprat 
d’aquesta forma, per a provar quins són els que els hi donen millor resultat, i quins utilitzen 
més els clients. 
 
Depenent  dels  torns  (matí,  tarda,  nit)  i  de  la  disponibilitat  de  cada  taxista  (tots  els  torns, 
només algun, etc.), diàriament se’ls hi assigna un taxi concret per a un torn. Així, durant el 
mateix dia un taxista pot conduir diferents taxis.  
 
L’empresa  té  un  sistema  informàtic  via  satèl∙lit  que  genera  unes  dades  per  a  cada  carrera 
(viatge)  de  cadascun  dels  taxis.  D’aquesta  forma  poden  controlar  quantes  carreres  fa  cada 
taxista, i el nivell d’utilització dels diferents taxis. 
 
Les  dades  de  cada  carrera  es  van  guardant  en  un  fitxer  seqüencial  anomenat 
‘CARRERES.DAT’, que consta de registres formats per tuples amb 3 camps: el nom del taxista 
(una  cadena  de  caràcters),  el  número  del  taxi  (en  enter  entre  1  i  30),  i  els  quilòmetres 
realitzats en una carrera (un valor real positiu). 
 
La mobilitat dels taxistes és molt alta, i fins i tot, la plantilla pot variar considerablement d’un 
dia per l’altre. Per tant, a priori no se saben els taxistes que treballen cada dia a l’empresa 
fins que no es processa el fitxer de carreres. 
 
Diàriament, a final del dia es vol poder processar les dades de les carreres emmagatzemades 
en  el  fitxer  ‘CARRERES.DAT’,  ja  creat,  per  a  generar  unes  estadístiques  de  control  de 
funcionament de l’empresa. 
 
Un cop processat el fitxer, es vol poder fer les següents consultes de forma indeterminada i 
un nombre il∙limitat de vegades: 
 
   • Generar  un  fitxer  de  text  anomenat  ‘TAXISTES.TXT’ que contingui un llistat amb tots 
        els  taxistes  que  han  treballat  aquell  dia  ordenats  decreixentment  segons  el 
        quilometratge total efectuat durant el dia. 


                                                     55 
   •   Generar  un  fitxer  de  text anomenat ’TAXIS.TXT’ que contingui un llistat amb tots els 
       taxis usats aquell dia ordenats decreixentment segons el quilometres totals efectuats 
       durant el dia. 
   •   Consultar  per  pantalla  un  llistat  on  apareguin  els  quilòmetres  efectuats  per  cada 
       taxista a cadascun dels taxis en que ha treballat durant el dia. 
 
a) Dissenyeu  les  estructures  de  dades  adients  i  un  algorisme  que  resolgui  el  problema  de 
     DIGITALTAXI. 
 
b) Calculeu el cost de l’algorisme que heu dissenyat. 
 
c) Calculeu el cost de l’algorisme corresponent a la tercera consulta (llistat per pantalla). 
 
d) Com  modificaríeu  les  estructures  de  dades  necessàries  per  a  resoldre  el  problema,  si  a 
     més  a més hi hagués informació als registres del fitxer ‘CARRERES.DAT’ de si la carrera 
     efectuada  s’ha  fet  en  un  determinat  torn,  un  4rt  camp  (matí,  tarda,  nit),  i  es  volgués 
     poder fer, a més a més de les consultes i llistats anteriors, uns llistats estadístics separats 
     per a cada tipus de torn. 
 
Evidentment un taxista durant el dia fa moltes carreres, i les pot fer en diversos taxis de la 
companyia. Podeu suposar que totes les dades d’entrada són correctes. 
 
3.40  FAMOCU  S.A.  La  fàbrica  de  mobles  de cuina FAMOCU S.A. vol controlar i gestionar el 
seu catàleg de mobles de cuina. Per això esperen que la informatització del seu procés de 
fabricació de productes (disseny de nous mobles, eliminació de mobles antiquats, generació 
de catàlegs impresos, etc.) millori el funcionament de la fàbrica i l’atenció al client. El gerent 
vol  un  sistema  informàtic  permanent  i  versàtil  segons  els  diferents  mobles  de  cuina  que 
tenen en estoc, i que li gestioni de forma correcte les variacions i consultes del catàleg de 
mobles del que disposen. 
 
Per a cada moble de cuina vol guardar, com a mínim, informació sobre un codi d’identificació 
del  moble  (un  nombre  enter  positiu),  el  nom  de  la  sèrie  (provençal,  marina,  chic,  clàssic, 
funcional), la categoria del moble (armari‐una‐porta, armari‐dues‐portes, raconer, cantoner, 
vitrina,  columna,  boteller,  calaixos),  el  tipus  de  moble  (moble‐baix,  moble‐alt),  el  material 
del  moble  (melamina,  xapat‐fusta,  fusta‐massisa),  el  color  del  moble  (roure,  cirerer,  faig, 
blanc,  negre,  blau,  vermell),  l’amplada  del  moble  (en  cm),  la  fondària  del  moble  (en  cm)  i 
l’alçada del moble (en cm). 
 
El gerent vol que el sistema permeti efectuar qualsevol de les següents operacions bàsiques 
en qualsevol ordre, i qualsevol dia de l’any: 
 
    • Afegir un nou moble de cuina al catàleg. Afegir un nou disseny de moble al catàleg de la 
      fàbrica. Automàticament el sistema li haurà d’assignar un codi identificador del moble. 
    • Eliminar un moble antiquat del catàleg. Donar de baixa un moble que ja no es fabrica 
      més. 
    • Consulta de mobles del catàleg. Visualitzar per pantalla tots els mobles existents d’una 
      determinada sèrie i una determinada categoria. 



                                                   56 
   • Generació del catàleg imprès. Generar un fitxer de text amb tots els mobles disponibles 
    al catàleg, ordenats alfabèticament per sèrie del moble, i dins la mateixa sèrie, ordenats 
    per tipus de moble, i dins el mateix tipus de moble, ordenats per la categoria del moble. 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat. 
 
3.41 L’empadronament (2). L’encarregat del padró municipal de Barcelona vol informatitzar 
el  procés  de  confecció  i  manteniment  permanent  del  padró  municipal  per  a  facilitar‐ne  la 
gestió.  El  padró  es  va  confeccionant,  a  partir  de  la  informació  en  paper  que  recullen  a 
l’Ajuntament,  provinent  de  les  diferents  llars  de  la  ciutat.  La  unitat  bàsica  en  que  es 
configura el padró és la llar. Una llar és aquell espai on habita una unitat familiar. Per tant, 
pot ser un pis, un tros d’un pis, una casa, etc. 
 
Per a cada llar vol guardar ‐com a mínim‐ informació sobre el tipus d’ubicació (carrer, plaça, 
passeig, passatge, avinguda, etc.), el nom de la ubicació, el tipus de llar (casa, pis, tros‐de‐pis, 
etc.),  número, lletra, pis, porta, districte postal, quants membres composen la família, i per 
a cada membre de la família: nom, DNI, edat, lloc de naixement, llengua materna, professió, 
tipus d’estudis (primaris, secundaris, universitaris), etc. 
 
L’encarregat  vol  que  el  sistema  permeti  efectuar  els  següents  tractaments  bàsics,  en  la 
primera fase del projecte : 
 
    • Registrar una nova llar (empadronar). 
    • Canviar de llar (canvi d’empadronament dins la mateixa ciutat). 
    • Esborrar una llar (canvi d’empadronament per abandó de la ciutat) 
 
    a) Indiqueu  una  possible  clau  per  identificar  una  llar,  i  justifiqueu  breument  que 
        efectivament ho és. 
    b) Dissenyeu un algorisme i les estructures de dades adients per a resoldre el problema 
        plantejat,  que  permeti  efectuar  les  tres  operacions  (registrar,  canviar  i  esborrar)  en 
        qualsevol ordre i un nombre indefinit de vegades. 
 
3.42  El  concessionari.  El  cap  de  vendes  d'un  concessionari  d'una  determinada  marca 
d'automòbils vol informatitzar el procés de gestió, consulta i manteniment de les comandes 
dels  seus  clients,  quan  encarreguen  un  cotxe,  per  a  facilitar‐ne  la  gestió.  Vol  un  sistema 
informàtic permanent. Al concessionari es necessita poder gestionar les diferents comandes 
que fan els clients al llarg del temps. 
Per a cada comanda vol guardar ‐com a mínim‐ informació sobre el  nom del client, el seu 
DNI,  la  seva  adreça,  el  model  de  cotxe  que  vol,  el  cubicatge  del  motor,  tipus  de  motor, 
l'acabat del cotxe (base, sport, luxe), el nº de portes del cotxe, el color del cotxe, la data de 
la comanda, etc. 
 
El cap de vendes vol que el sistema permeti efectuar els següents tractaments bàsics, en la 
primera fase del projecte: 
 
    • Registrar una nova comanda (encarregar el cotxe al concessionari). 



                                                   57 
   • Esborrar una comanda (cancel∙lar una comanda a petició del client) 
   • Llistar totes les comandes (controlar les comandes que tenen) ordenades creixentment 
    per model de cotxe, i dins del mateix model, ordenades per la data de la comanda. 
 
a)  Indiqueu  una  possible  clau  per  identificar  una  comanda,  i  justifiqueu  breument  que 
efectivament ho és. 
b)  Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat, que permeti efectuar les tres operacions (registrar, esborrar i llistar) en qualsevol 
ordre i un nombre indefinit de vegades. 
 
3.43  El  CAP.  El  gestor  d’un  Centre  d’Assistència  mèdica  Primària  (CAP)  vol  informatitzar  el 
procés de gestió, consulta i manteniment de les visites mèdiques programades dels pacients 
al CAP, per a facilitar‐ne la gestió. El nombre de pacients que ha de gestionar el CAP és molt 
gran, i això en dificulta la seva gestió. El gestor del CAP vol un sistema informàtic permanent. 
Al CAP es necessita poder gestionar les diferents visites mèdiques programades dels pacients 
per les properes dates. 
Per a cada visita mèdica vol guardar ‐com a mínim‐ informació sobre el nom del pacient, el 
seu NIF, un telèfon de contacte, el nom del metge que el visitarà, la especialitat del metge 
(medicina‐general, cirurgia‐general, cardiologia, etc.), la data de la visita, la hora de la visita, 
etc. 
 
El gestor del CAP vol que el sistema permeti efectuar els següents tractaments bàsics: 
 
    • Concertar una nova visita mèdica (programar una nova visita). 
    •  Cancel∙lar  una  visita  mèdica  (esborrar  una  visita  mèdica  ja  programada  a  petició  del 
      pacient) 
    • Llistar per pantalla totes les visites mèdiques que tindrà un metge concret, a partir de la 
      data actual durant els propers 7 dies. 
 
a)  Indiqueu  una  possible  clau  per  identificar  una  visita  mèdica,  i  justifiqueu  breument  que 
efectivament ho és. 
b)  Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  per  a  resoldre  el  problema 
plantejat, que permeti efectuar les tres operacions en qualsevol ordre i un nombre indefinit 
de vegades. 
 
3.44 El Restaurant d’en Hipòlit. En Hipòlit vol informatitzar el procés d’anàlisi del treball dels 
serveis  que  efectuen  els  seus  cambrers  i  cambreres  a  les  diferents  taules  del  seu  nou 
restaurant  que  acaba  d’obrir,  juntament  amb  la  seva  parella  Elisenda,  a  Barcelona.  El 
restaurant  té  30  taules,  i  tenen  contractats  a  15  cambrers  i  cambreres.  Na  Elisenda  i  en 
Hipòlit  han  col∙locat  un  ordinador  central  que  va  recollint  les  dades  de  cada  servei  dels 
cambrers a cada taula. Quan els cambrers registren el compte de cada servei a una de les 
caixes,  aquesta  informació  s’envia  per  una  xarxa  inalàmbrica  al  nou  ordinador  central. 
Aquest ordinador les va guardant en un nou registre –amb 2 camps– d'un fitxer anomenat 
'SERVEIS.DAT': 
 
                         <Nom del cambrer/de la cambrera>  <Nº de taula> 
 



                                                   58 
on el nom del cambrer o cambrera és una cadena de caràcters, i el nº de taula és un enter 
(entre 1 i 30). Normalment els cambrers i cambreres van canviant força sovint al restaurant 
ja  que  el  seu  sou  no  és  gaire  alt,  i  per  tant,  a  priori  no  se  saben  qui  són  fins  que  no  es 
processa el fitxer. 
 
Dissenyeu un algorisme, i les estructures de dades adients, que processi –a la fi del dia– el 
fitxer de serveis generats durant el dia (ja creat), per a obtenir, per pantalla, una estadística 
d'utilització  de  les  diferents  taules  del  restaurant  (quantes  vegades  ha  estat  ocupada  cada 
taula durant tot el dia), i de la ocupació dels diferents cambrers o cambreres (quants serveis 
han fet cadascú). 
Concretament  es  volen  dos  llistats  per  pantalla:  un  on  apareguin  les  diverses  taules 
ordenades  decreixentment  pel  nombre  de  vegades  que  han  estat  ocupades,  i  l’altre,  on 
apareguin  els  diversos  cambrers  o  cambreres  ordenats  decreixentment  segons  els  nombre 
de serveis que han realitzat al llarg del dia. 
 
3.45  La  Videoteca.  El  director  d’una  nova  videoteca  vol  controlar  els  lloguers  de  les  seves 
pel∙lícules en DVD que lloga per uns períodes determinats als socis de la videoteca. Així, per 
cada  lloguer  d’una  pel∙lícula  de  la  videoteca  es  guarda  la  informació  sobre  el  títol  de  la 
pel∙lícula (una cadena), el nombre de dies que estarà en possessió del soci (un enter), i el codi 
del soci (un enter entre 1 i 50) que s’emporta el DVD. Tota aquesta informació es va guardant 
en  un  fitxer  seqüencial,  anomenat  'LLOGUERS.DAT',  que  té  una  estructura  de  registre  amb 
els tres camps esmentats anteriorment. Els DVDs es poden llogar entre 1 i 8 dies com a molt. 
Hi ha com a molt 50 socis, de moment a la videoteca. Evidentment una mateixa pel∙lícula es 
pot llogar diverses vegades, per períodes iguals o diferents al llarg del temps. 
 
El  director  vol  un  algorisme  que  processi  el  fitxer  'LLOGUERS.DAT'  que  ja  s'ha  anat  creant 
amb  les  dades  de  tots  els  lloguers  que  s'han  anat  produint  a  la  videoteca  durant  tota  la 
setmana. Les dades de cadascun dels lloguers són en un registre del fitxer. Un cop processat 
el  fitxer,  volen  poder  fer  les  següents  consultes,  un  nombre  il∙limitat  de  vegades  i  en 
qualsevol ordre: 
 
    • Generar un llistat per pantalla que indiqui quants lloguers ha fet cadascun dels socis 
        del videoclub durant la setmana. 
    • Generar  un  llistat  per  pantalla  de  tots  els  lloguers  efectuats  durant  la  setmana, 
        ordenats decreixentment segons el nombre de dies de durada del lloguer. 
 
Dissenyeu  les  estructures  de  dades  adients  i  un  algorisme  que  resolgui  el  problema  de  la 
Videoteca. Podeu suposar que no hi ha errors a les dades d’entrada. 
 
3.46 El Congrés iEMSs’2008. En Hipòlit és l’encarregat d’organitzar un congrés a Barcelona el 
proper  juliol  de  2008,  que  la  societat  científica  iEMSs  (http://www.iemss.org)  li  ha 
encarregat. Hi ha moltes tasques a fer, i una de les més complicades, és la gestió econòmica 
de les quotes d’inscripció dels participants al congrés.  
Els  diferents  participants  poden  provenir  de  fins  a  40  països  diferents  de  tot  el  món.  Les 
quotes  d’inscripció  al  congrés  són  de  tres  tipus  diferents  depenen  de  la  tipologia  del 
participant: estudiant (que paga 275 €), membre de la societat (que paga 420 €), i el que no 
és ni membre de la societat ni estudiant (que paga 480 €). 
 


                                                      59 
Les dades de les inscripcions dels diferents participants que es van fent al web del congrés 
(http://www.iemss.org/iemss2008)  durant  cada  dia  es  van  recollint  a  un  servidor. 
Concretament,  les  dades  de  cada  nova  inscripció  al  congrés  es  van  guardant  en  un  nou 
registre –amb 3 camps– d'un fitxer anomenat “INSCRIPCIONS.DAT”: 
 
                 <Nom del participant> <Tipus de participant> <Nom del país> 
 
on el nom del participant és una cadena de caràcters, el tipus de participant és un caràcter 
(‘E’ pels estudiants, ‘M’ pels membres de la societat i ‘N’ pels no estudiants ni membres), i el 
nom del país és una cadena de caràcters. Els noms dels participants i els noms dels països 
d’on provenen els participants no se saben quins són fins que no es processa el fitxer. 
 
Dissenyeu un algorisme, i les estructures de dades adients, que processi –a la fi del dia– el 
fitxer d’inscripcions generats durant el dia (ja creat), per a obtenir, per pantalla, una taula 
resum  de  les  quotes  d’inscripció  realitzades  aquell  dia,  desglossada  per  país  i  per  tipus  de 
quota, i calculant el total per cada tipus de participant i per país, així com el total de totes les 
inscripcions. D’aquesta manera es pot anar controlant els ingressos del congrés, dia a dia, i 
prendre les accions oportunes. Per exemple, una possible taula resum podria ser: 
                                                                             

                                         Itàlia    USA     ...    Austràlia     Total 

                         Estudiant       825       1375    ...      275          ... 

                          Membre         1680      2940    ...      1260         ... 

                        No membre        960       1440    ...      2400         ... 

                           Total         3465      5755    ...      3935         ... 

 




                                                    60 
61 
 
 
4. INTRODUCCIÓ A L'ANÀLISI DE L'EFICIÈNCIA 
  
4.1.1 Demostreu que O(1) ⊂ O(log n) ⊂ O(n) ⊂ O(n log n) ⊂ O(n2) ⊂ O(n3) ⊂ O(2n) ⊂ O(3n) 
             ⊂ O(n!) ⊂ O(nn). 
 
4.1.2  Dissenyeu  i  analitzeu  el  cost  associat  a  l'algorisme  que  troba  el  valor  màxim  en  un 
vector d'enters de dimensió n. 
    
4.1.3 Dissenyeu i analitzeu el cost associat a l'algorisme de cerca dicotòmica d'un valor en un 
vector ordenat creixentment d'enters de dimensió n. 
    
4.1.4  Dissenyeu  i  analitzeu  el  cost  associat  a  l'algorisme  del  producte  de  dues  matrius 
quadrades d'ordre n. I si són d'ordres diferents ? 
    
4.1.5 Dissenyeu i analitzeu el cost associat a l'algorisme d'ordenació d'un vector d'enters de 
dimensió n pel mètode de la bombolla (bubblesort). 
    
4.1.6 Dissenyeu i analitzeu el cost associat a l'algorisme de suma de dues matrius quadrades 
d'ordre n. I si són d'ordres diferents ? 
    
4.1.7 Dissenyeu i analitzeu el cost associat a l'algorisme que ens digui si un vector d'enters 
de dimensió n està ordenat creixentment o no. 
 
4.1.8 Resoleu els dos apartats següents: 
    
   a) Demostreu que el cost del següent algorisme ∈ O(log2(n)), essent n la mida de les dades 
   d’entrada: 
 
     {(n ≥ 0) ∧ (n = N) ∧ (a = A) ∧ (x = X)} 
     funció cerca_dicotòmica (ent a és vector [1:n] de enter; ent n, x són enter) retorna  
                booleà és 
                                                                                                                         
        var i, j, puntmig són enter; trobat és booleà fvar 
       i ←1; 
       j ← n; 
       trobat ← fals; 
       mentre  (i ≤ j)  i  no trobat  fer 
         puntmig ← (i + j) div 2; 
         opció 
           cas a [puntmig] = x fer  trobat ← cert 
           cas a [puntmig] < x fer  i ← puntmig + 1 
           cas a [puntmig] > x fer  j ← puntmig ‐ 1 
         fopció 
       fmentre; 
       retorna (trobat) 
     ffunció 
     {trobat = (∃k : 1≤ k ≤n : a[k] = x) ∧ (n = N) ∧ (x = X) ∧ (a = A)} 
 


                                                          62 
4.1.9 Calculeu el cost associat a l’algorisme del problema 2.2.13 
 
4.1.10 Calculeu el cost associat a l’algorisme del problema 3.28 




                                              63 
 
 
5. DISSENY RECURSIU 
 
5.1  Dissenyeu  un  algorisme  que  calculi  recursivament  el  factorial  d’un  enter  no  negatiu 
donat. 
 
5.2  Dissenyeu  un  algorisme  recursiu  que  calculi  el  màxim  comú  divisor  de  dos  enters 
positius. 
 
5.3 Dissenyeu un algorisme recursiu que calculi el producte de dos enters no negatius a i b 
donats, usant només sumes i restes. 
 
5.4 Dissenyeu un algorisme recursiu que calculi el quocient i el residu de la divisió entera per 
defecte  de  dos  enters  a  i  b  donats,  el  primer  essent  no  negatiu  i  el  segon  positiu,  usant 
només sumes i restes. 
 
5.5 Dissenyeu un algorisme recursiu que donats dos enters positius a i b, calculi ab. Intenteu 
trobar dues solucions amb costos diferents. 
 
5.6 Dissenyeu un algorisme recursiu que calculi la part entera del logaritme en base b d’un 
enter positiu. 
 
5.7 Dissenyeu un algorisme recursiu que donat un vector d’enters a[1:n] amb n > 0, calculi el 
valor màxim del seus components. 
  
5.8 Dissenyeu un algorisme recursiu que donat un vector d’enters a[1:n] amb n > 0, calculi 
alhora el valor màxim i el valor mínim del seus components. 
 
5.9 Dissenyeu un algorisme recursiu que donat un vector d’enters a[1:n] amb n ≥ 0, calculi la 
suma de tots els seus components. 
 
5.10  Dissenyeu  un  algorisme  recursiu  que  donat  un  vector  d’enters  a[1:n]  amb  n  ≥  0, 
decideixi si el vector està ordenat. 
 
5.11  Dissenyeu  un  algorisme  recursiu  que  donat  un  vector  d’enters  a[1:n]  amb  n  ≥  0, 
decideixi  si  el  vector  és  capicua.  Un  vector  és  capicua  si  els  elements  equidistants  dels 
extrems són iguals. 
 
5.12  Dissenyeu  un  algorisme  recursiu  que  donat  un  vector  d’enters  a[1:n]  amb  n  ≥  0  i  un 
enter x, trobi si el valor x és al vector i a quina posició es troba. Feu‐ne dues versions. Una 
suposant que el valor x és al vector, i l’altra sense suposar‐ho. 
 
5.13 Repetiu l’exercici anterior però aquest cop suposeu que el vector està ordenat en ordre 
creixent  i  apliqueu  el  mètode  de  cerca  dicotòmica.  Feu‐lo  amb  les  dues  suposicions 
anteriors. 
 
5.14  Dissenyeu  un  algorisme  recursiu  que  donada  una  matriu  quadrada  d’elements  reals 
a[1:n, 1:n] amb n ≥ 0, decideixi si la matriu és simètrica. 



                                                   64 
5.15  Dissenyeu  un  algorisme  recursiu  que  calculi  l’n‐èssim  terme  de  la  successió  de 
Fibonacci. Mireu de trobar solucions que només facin una sola crida recursiva. 
 
5.16 Dissenyeu un algorisme recursiu que calculi el nombre combinatori, 

                                                  ⎛ m⎞
                                                  ⎜ ⎟
                                                  ⎜n⎟
                                                  ⎝ ⎠
 
Recordeu que, 
 
                                            ⎛ m⎞       m!
                                            ⎜ ⎟=
                                            ⎜ n ⎟ n! * (m − n)!
                                            ⎝ ⎠
 
Mireu  de  trobar  dues  solucions  diferents  que  tinguin  recursivitat  simple.  No  utilitzeu 
variables reals. 
 
5.17  Dissenyeu  un  algorisme  recursiu  que  donat  un  vector  d’enters  a[1:n]  amb  n  ≥  0, 
decideixi  si  existeix  algun  element  del  vector  que  coincideixi  amb  la  suma  de  tots  els 
elements que el precedeixen. 
 
5.18 Dissenyeu un algorisme recursiu que calculi el producte escalar de dos vectors d’enters 
a[1:n] i b[1:n] amb n ≥ 0. 
 
5.19  Dissenyeu  un  algorisme  recursiu  que  donat  un  vector  d’enters  a[1:n]  amb  n  ≥  0, 
decideixi  si  existeix  una  manera  de  descomposar‐lo  en  una  part  esquerra  i  una  part  dreta 
que sumin el mateix. Evidentment, aquestes parts poden ser de mides diferents. 
 
5.20  Dissenyeu  un  algorisme  recursiu  que  donats  dos  vectors  d’enters  ordenats 
creixentment, a[1:n] i b[1:m] amb n i m diferents, n ≥ 0 i m ≥ 0, que representen dos conjunts 
d’enters, decideixi si la seva intersecció és buida o no. 
 
5.21  El  culé.  Direm  que  un  vector  és  bicolor  si  està  format  per  només  dos  colors:  c1  i  c2,  i 
aquests estan disposats de forma alternativa, començant per c1. Donat un vector d’elements 
de  tipus  color  a[1:n]  amb  n  ≥  0,  dissenyeu  un  algorisme  recursiu  que  ens  retorni  cert  si  el 
vector  és  bicolor  començant  per  blau,  i  fals  en  cas  contrari.  El  tipus  de  color  tindrà  dos 
valors: blau i grana. 
 
5.22 Les rotacions. Dissenyeu un algorisme recursiu que donats dos vectors d’enters a[1:n] i 
b[1:n] amb n ≥ 0 i un valor natural k, determini si un d’ells s’obté rotant k vegades l’altre cap 
a la dreta. 
 
Per exemple, si n=5, donat el vector <5, 3, 8, 2, 7>, el vector <2, 7, 5, 3, 8> és una rotació de 
dues posicions cap a la dreta del primer. 
 
5.23 L’Eixample. Com tothom sap, L’Eixample barceloní és un districte format per nombroses 
illes quadrades de cases. En Hipòlit és un nadiu de l’Esquerra de L’Eixample que cada dia fa 
molts recorreguts a peu, per anar a veure a la seva xicota Elisenda. En Hipòlit es pregunta de 
quantes formes diferents es deu poder anar d’una cruïlla a una altra sense retrocedir mai. 
 


                                                      65 
Nosaltres  modelitzarem  el  tros  de  L’Eixample  a  considerar,  com  una  matriu  de  cruïlles  de 
dimensions m * n (m files i n columnes). Així doncs, es vol dissenyar un algorisme recursiu 
que  calculi  el  nombre  de  camins  possibles  diferents,  per  a  anar des de la posició (1,1) a la 
(m,n), on m ≥ 1 i n ≥ 1. 
 
 
 




                                                  66 
67 
 
 
6. FORTRAN, UN LLENGUATGE IMPERATIU 
  
6.1 Dissenyeu un programa en Fortran que calculi la suma de dues matrius. 
   
6.2 Dissenyeu un programa en Fortran que resolgui equacions de segon grau, ax2+bx+c = 0. 
   
6.3 Dissenyeu un programa en Fortran que calculi el producte de dues matrius. 
   
6.4  Dissenyeu  una  subrutina  en  Fortran  que  permeti  dibuixar  histogrames  de  variables 
qualitatives o bé ordinals, tot donant el nombre d'efectius de cada modalitat, el % en forma 
d'histograma i el total d'efectius de la mostra. 
   
6.5 Dissenyeu 3 funcions en Fortran que calculin tres aproximacions diferents del número 
π, segons sumes de sèries infinites degudes a Leibnitz (1673), Sharp (1673) i Euler (1736): 
   
    a)  π / 4  =  1/1  ‐  1/3  +  1/5  ‐  1/7  +  . . . 
    b)  ( 31/2 * π ) / 6  =  1/(30 * 1)  ‐  1/(31 * 3)  +  1/(32 * 5)  ‐  1/(33 * 7)  +  . . . 
    c)  π 2 / 6  =  1/12  +  1/22  +  1/32  +  1/42  +  .  .  . 
   
Després  dissenyeu  un  programa  que  faci  ús  de  les  tres  funcions  i  compari  els  resultats 
obtinguts. Quina aproximació és millor ? 
 
6.6 Es vol poder integrar funcions contínues f(x) reals i de variable real, entre dos punts a i b, 
segons  dos  mètodes  diferents.  Integrar  una  funció  vol  dir  trobar  l'àrea  total  entre  aquests 
dos punts per sota de la corba. Una forma de fer‐ho és aproximar la integral mitjançant la 
suma de les àrees de certes figures geomètriques. Empreu els següents mètodes: 
 
 
                                                       
 
 
 
             f(x     )
                                                                                      f(x)
                 i+1
 
 
            f(x )
               i
 
 
 
 
                             a                 x                 x    b
                                                i                 i+1
                                                       
        •  Mètode  dels  rectangles:  es  sumen  les  àrees  dels  rectangles  delimitats  per  cada 
        parell de punts d'integració consecutius, xi i xi+1, i les imatges. 
 



                                                   68 
         • Mètode del trapezi: es sumen les àrees dels trapezis delimitats per cada parell de 
         punts d'integració consecutius, xi i xi+1, i per les seves imatges, f(xi) i f(xi+1). 
 
Dissenyeu un programa en Fortran que implementi els dos mètodes i compari els resultats 
obtinguts. 
       
6.7  Dissenyeu  les  estructures  de  dades  adients  i  un  programa  en  Fortran  que  resolgui  el 
sistema d’equacions lineal (es a dir que trobi el valor de x), A*x = b, on la matriu A és una 
matriu  triangular  superior  quadrada  d’ordre  n  de  valors  reals,  el  vector  x  és  un  vector  de 
dimensió n que conté les incògnites del sistema i el vector b és un vector de dimensió n que 
conté  els  termes  independents  (valors  reals).  Es  pressuposa  que  el  sistema  lineal  és 
compatible. 
 
El programa llegirà del teclat la dimensió de la matriu (n) i tot seguit les dades de la matriu 
introduïdes per files (A). Finalment llegirà els termes independents (b). 
 
6.8 Dissenyeu un programa en Fortran que calculi els coeficients de regressió lineal simple a 
i b (y = a + b * x) segons les fórmules habituals: 
                                                        
                                  ∑                        /∑
                              b =   (yi ‐ ym) (xi ‐ xm)     (xi ‐ xm)
                                                                          2
                                                                            
                                   1≤i ≤n                   1≤i ≤n 
  
                              a = ym ‐ b * xm 
 
Les dades d'entrada seran les dues mostres de les variables explicativa (X) i de resposta (Y), 
en  forma  de  parells  <Xi  Yi>  (un  parell  a  cada  línia).  El  final  de  la  seqüència  d'entrada  serà 
marcat  pel  parell  ‐1  ‐1.  Les  dades  de  les  variables  seran  sempre  valors  reals  positius.  Per 
exemple: 
 
                                                  0.76 5.22 
                                                   3.0 20.1 
                                                       … 
                                                 43.1 60.25 
                                                     ‐1 ‐1 
 
El resultat ha de ser els valors de a i b. 
 
6.9  Un  del  mètodes  iteratius  emprats  en  la  solució  de  sistemes  d'equacions  lineals  és  el 
mètode de Jacobi. El sistema, A*x = b es resol en base a la equació recurrent, 
 
                                             xk+1 = B * xk + c 
                                                         
que  permet  anar  calculant  la  successió  de  solucions  aproximades  partint  d'un  cert  valor 
inicial: x0, x1, x2, ..., xk, xk+1, ... 
 
L'equació recurrent prové de la descomposició de la matriu del sistema (A) en suma de tres 
matrius: A=L+D+U on L és la matriu triangular inferior amb la diagonal plena de zeros (amb 
els elements provinents de A), on D és una matriu diagonal (amb la diagonal provinent de A) 



                                                     69 
i  U  és  una  matriu  triangular  superior  amb  la  diagonal  plena  de  zeros  (amb  els  elements 
provinents de A). 
 
Així doncs, tenim que (L+D+U) * x = b i per tant, D‐1  * (L+U) * x + I * x = D‐1  * b. Aïllant el 
vector d'incògnites (x) arribem a  
 
                                     x = ‐D‐1 * (L+U) * x + D‐1 * b 
                                                     
que és l'equació de recurrència esmentada amb  
 
                                  B = ‐D‐1 * (L+U)      i      c = D‐1 * b 
                                                     
Finalment tenim, 
 
                               xk+1 = ‐D‐1 * (L+U) * xk + D‐1 * b,   k≥0 
                                                     
o en termes dels components del vector x, 
                             n 
                    xi(k+1) = 1/aii * ( ‐∑ aij * xj(k) + bi )  i=1÷n    k=0, 1, ... 
                            j=1 
                            j≠i 
sempre i quan ∀i: aii ≠ 0 
                                                                               n      
Es pot demostrar que si la matriu A és diagonal dominant (∀i: |aii| > ∑ |aij|),  
                                                                              j=1 
                                                                              j≠i 
llavors el mètode és convergent ∀x      (0). 
                  
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  que  implementin  el  mètode  de 
Jacobi per a la resolució de sistemes lineals. L'algorisme llegirà les dades en el següent ordre: 
la dimensió del sistema (n), la matriu del sistema (A) entrada per files, el terme independent 
(b), la solució inicial (x(0)), el nombre màxim d'iteracions (kmax) i en darrer lloc l'error permès 
en l'aproximació (ε). 
El mètode acabarà quan  (||xk ‐ xk‐1|| / ||xk||) < ε o bé quan arribem al màxim d'iteracions 
permès.  Les  dades  de  sortida  de  l'algorisme  seran:  el  valor  aproximat  de  la  solució,  el 
nombre d'iteracions emprades i l'error de l'aproximació. 
 
6.10  Un  del  mètodes  iteratius  emprats  en  la  solució  d'equacions  no  lineals,  f(x)  =  0,  és  el 
mètode de la bisecció. El mètode es fonamenta en el teorema de Bolzano: 
 
Si f(x) es una funció real continua en l'interval [a, b], i f(a) * f(b) < 0 llavors l'equació, f(x) = 0, 
té almenys una solució (o zero) real, α, dins l'interval (a, b) . 
 
El mètode parteix d'un interval inicial (a0, b0), tal que f(a0) * f(b0) < 0. Llavors calcula el punt 
mig de l'interval, pm0, 
 
                                           pm0 = (a0 + b0) / 2 
 



                                                    70 
Si per casualitat f(pm0) = 0 (o millor dit, |f(pm0)| < ε), ja tenim l'arrel. Si no construïm el nou 
interval (a1, b1) de la següent forma: 
 
                               (a1, b1) = (a0, pm0)    si f(a0) * f(pm0) < 0 
                              (a1, b1) = (pm0, b0)    si f(b0) * f(pm0) < 0 
                                            pm1 = (a1 + b1) / 2 
 
i així successivament va fent iteracions construint els següents intervals (k > 0): 
 
                           (ak, bk) = (ak‐1, pmk‐1)    si   f(ak‐1) * f(pmk‐1) < 0 
                           (ak, bk) = (pmk‐1, bk‐1)    si   f(bk‐1) * f(pmk‐1) < 0 
                                            pmk = (ak + bk) / 2 
 
fins que trobi un punt mig pmn, tal que |f(pmn)| < ε. Llavors tenim,   α = pmn ±  rn,      on  

                                   b0 − a0
                            rn =
                                    2 n +1
 
que és una fita de l'error absolut comès en l'aproximació de α. 
 
Dissenyeu un algorisme i les estructures de dades adients que implementin el mètode de la 
bisecció per a la resolució d'equacions no lineals. L'algorisme llegirà les dades en el següent 
ordre: Els valor inicials a0 i b0, i l'error permès en l'aproximació (ε). L'algorisme comprovarà 
que efectivament f(a0) * f(b0) < 0. Si no fos així, pararà, tot i indicant‐ho. 
El  mètode  acabarà  quan  (|f(pmn)|)  <  ε.  Les  dades  de  sortida  de  l'algorisme  seran:  el  valor 
aproximat de la solució, el nombre d'iteracions emprades i l'error de l'aproximació. 
 
Proveu‐lo per diverses funcions, per exemple amb les següents funcions: 
 
                                   f(x) = x4 – 4x3 + 2x2 ‐ 8 
                                   f(x) = x – e1/x    
                                   f(x) = 2x3 – x2 + x 
 
6.11 Dissenyeu un algorisme i les estructures de dades adients per que calculi Am, ∀m ≥ 0, 
essent A una matriu de valors reals, de dimensions n x n. L'algorisme llegirà la dimensió de la 
matriu n, els valors de la matriu introduïts per files i la potència desitjada m. 
 
6.12  Un  mètode  per  a  la  resolució  de  sistemes  lineals  A*x  =  b,  és  la  descomposició  de  la 
matriu A com a producte de dues matrius triangulars, A = L*U, on L és una matriu triangular 
inferior  i  U  és  una  matriu  triangular  superior.  Així  doncs,  La  resolució  del  sistema  A*x  =  b 
equival a la resolució de dos sistemes triangulars: 
 
                                                      A*x = b 
                                                  (L*U)*x = b 
                                       L*(U*x) = b, i prenent U*x = y 
                     queda la resolució dels dos sistemes:    L*y = b     i     U*x = y 
 
Dissenyeu un algorisme que calculi la descomposició d'una matriu quadrada A de dimensió n 
(A no singular) pel mètode directe de Doolittle. El mètode de Doolittle consisteix en fixar els 



                                                    71 
elements  diagonals  de  L  a  la  unitat:  lkk  =  1,  k=1..n,  i  procedir  amb  el  següent  càlcul  dels 
elements: 
 
                        k‐1 
       ukj = akj ‐ ∑  lkr urj                               j=k..n 
                              r=1 
                                             k‐1 
       lik = (1/ukk ) * (aik ‐ ∑  lir urk)                           i=k+1..n 
                                              r=1 
       per tot  k=1..n 
 
L'ordre de càlcul dels elements uij i lij és molt important: 
 
          u1j    j=1..n                         (1ª fila d'U) 
          li1    i=2..n                         (1ª columna de L) 
          u2j    j=2..n                         (2ª fila d'U) 
          li2    i=3..n                         (2ª columna de L) 
                            .  .  . 
          un‐1,j  j=n‐1..n                      (penúltima fila d'U) 
          ln,n‐1                                (darrera columna de L) 
          unn                                   (darrera fila d'U) 
 
En primer lloc l’usuari donarà la dimensió de la matriu A, n, i després els valors reals de la 
matriu introduïts per files. El sistema calcularà i imprimirà la descomposició de A en les dues 
matrius: L triangular inferior amb uns a la diagonal i U triangular superior. 
 
Per exemple, 
                                     8   4                                 1     0                     8      4 
          si                A =                                            
                                                , llavors L =                              U =  
                                     3   1                             3/8      1                  0   ‐4/8 
 
6.13 Un dels mètodes iteratius més emprats per a la resolució d’equacions no lineals 
 
                                                                    f(x) = 0 
 
és  el  mètode  de  Newton.  Consisteix  en  començar  per  una  aproximació  inicial  x0 
(suficientment  a  prop  de  l’arrel  de  l’equació  que  estem  buscant  α,  t.q.  f(α)  =  0)  i  anar 
construint una successió de valors x1, x2, x3, …, xn on el següent valor xn+1  es calcula com la 
intersecció de la recta tangent a la funció f(x) en el punt xn, amb l’eix y = 0. 




                                                      72 
                            f(xn)



                                                                  f(x)




                                                                xn+1          xn


 
Per tant, tenim que, 
 
                                                     f ( xn ) − f ( xn +1 )
                                      f ' ( xn ) =
                                                          xn − xn +1
                                                           
i com f(xn+1) = 0 tenim, 
 
                                    f ' ( x n ) ∗ ( x n − x n +1 ) = f ( x n )
 
llavors, 
                                                           f ( xn )
                                        x n +1 = x n −
                                                           f ' ( xn )
 
que ens proporciona el mètode iteratiu de càlcul. 
 
La  iteració  pot  aturar‐se  quan  la  diferència  entre  dos  valors  successius  és  més  petita  que 
l’error ε que es vol obtenir, ε  > 0: 
 
Dissenyeu  un  algorisme  que  resolgui  equacions  no  lineals,  f(x)  =  0,  pel  mètode  iteratiu  de 
Newton.  L’usuari  donarà la fita d’error que desitja,  ε,  ε > 0, el nombre màxim d’iteracions 
permeses n, pel cas que el mètode no sigui convergent, i l’aproximació inicial a la solució x0. 
 
El  resultat  indicarà  el  valor  aproximat  de  la  solució,  el  nombre  d’iteracions  emprades,  així 
com  l’estimació  de  l’error  comès.  Comproveu  el  funcionament  del  programa  amb  diverses 
funcions. 
 
6.14  Un  del  mètodes  iteratius  emprats  en  la  solució  de  sistemes  d'equacions  lineals  és  el 
mètode de Jacobi. El sistema,  A ⋅ x = b  es resol en base a la equació recurrent, 


                                                         73 
                                               x ( k +1) = B ⋅ x ( k ) + c  
que  permet  anar  calculant  la  successió  de  solucions  aproximades  partint  d'un  cert  valor 
inicial: 
                                      x ( 0) , x (1) , x ( 2 ) ,..., x ( k ) , x ( k +1) ,...  
                                                                  
L'equació recurrent prové de la descomposició de la matriu del sistema (A) en suma de tres 
matrius:  A = L + D + U on L és la matriu triangular inferior amb la diagonal plena de zeros 
(amb els elements provenint de A), on D és una matriu diagonal (amb la diagonal provenint 
de A) i U és una matriu triangular superior amb la diagonal plena de zeros (amb els elements 
provenint de A). 
 
Així doncs, tenim que  ( L + D + U ) ⋅ x = b i per tant,  D −1 ⋅ ( L + U ) ⋅ x + I ⋅ x = D −1 ⋅ b . Aïllant el 
vector d'incògnites x arribem a  
                                     x = − D −1 ⋅ ( L + U ) ⋅ x + D −1 ⋅ b  
que és l'equació de recurrència esmentada amb  
                                  B = − D −1 ⋅ ( L + U )      i       c = D −1 ⋅ b  
Finalment tenim, 
                        x ( k +1) = − D −1 ⋅ ( L + U ) ⋅ x ( k ) + D −1 ⋅ b ∀k , k > 0  
 
o en termes dels components del vector x, 

                                     1      ⎛        n                           ⎞
                     xi( k +1) =           ⋅⎜−
                                            ⎜      ∑a x        ij
                                                                    (k )
                                                                    j       + bi ⎟ i = 1 ÷ n k = 0,1,2,...
                                                                                 ⎟
                                     aii    ⎝    j =1, j ≠ i                     ⎠
sempre i quan  ∀i, aii ≠ 0  
 
Un  altre  mètode  utilitzat  és  el  mètode  de  Gauss‐Seidel,  que  deriva  del  de  Jacobi.  L’única 
diferència és que el mètode de Gauss‐Seidel per a calcular  xi( k +1) utilitza els valors ja calculats 
en  el  propi  pas  x (jk +1) ,  en  lloc  dels  valors  del  pas  anterior  x (k ) ,  j  <  i.  Per  tant,  l’equació  de 
                                                                                          j
recurrència és  
 
                                 x ( k +1) = − D −1 ⋅ L ⋅ x ( k +1) − D −1 ⋅ U ⋅ x ( k ) + D −1 ⋅ b  
i, definitivament 
                                     x ( k +1) = −( D + L) −1 ⋅ U ⋅ x ( k ) + ( D + L) −1 ⋅ b  
 
o en termes dels components del vector x, 

                              1        ⎛ i −1                                n                          ⎞
                xi( k +1) =          ⋅ ⎜ − ∑ a ij x (jk +1) −
                                       ⎜                                   ∑a         ij   x (jk ) + bi ⎟ i = 1 ÷ n k = 0,1,2,...
                                                                                                        ⎟
                              a ii     ⎝ j =1                              j = i +1                     ⎠
 
sempre i quan  ∀i, aii ≠ 0  
Es pot demostrar que si la matriu A és estrictament diagonal dominant  
                                                                                           n
                                           ∀i, i = 1 ÷ n                   aii > ∑ aij
                                                                                           j =1
                                                                                           j ≠i



                                                                                      74 
llavors ambdós mètodes són convergents  ∀x ( 0) . 
 
Dissenyeu  un  algorisme  i  les  estructures  de  dades  adients  que  implementin  el  mètode  de 
Jacobi  i  el  mètode  de  Gauss‐Seidel  per  a  la  resolució  de  sistemes  lineals,  i  els  compari. 
L'algorisme llegirà les dades en el següent ordre: la dimensió del sistema (n), la matriu del 
sistema  (A)  entrada  per  files,  el  terme  independent  (b),  la  solució  inicial  ( x ( 0) ),  el  nombre 
màxim d'iteracions (kmax), i en darrer lloc, l'error permès en l'aproximació (ε).  
                                                        x k − x k −1
                                                                       <ε
                                                            xk
El mètode acabarà quan l’error comès en l’aproximació sigui inferior a  ε, o bé quan arribem 
al màxim d'iteracions permès. Les dades de sortida de l'algorisme seran: el valor aproximat 
de la solució, el nombre d'iteracions emprades i l'error de l'aproximació, per cadascun dels 
dos mètodes. 
 
6.16  Una  forma  de  resoldre  les  equacions  no  lineals  f(x)  =  0  és  utilitzant  els  mètodes 
iteratius de punt fix. Donada l’equació f(x) = 0 es pot expressar de la forma x = g(x), on g és 
una funció contínua. Llavors, a partir d’una aproximació inicial x0 es pot generar la successió 
 
                                                                                       xn+1 = g(xn) 
 
Si (xn) → α, llavors α = lim xn+1 = lim g(xn) = g(α). 
         n→∞                                       n→∞                n→∞                         
Per tant, direm que α és un zero de la funció f, o també, que és un punt fix de g. 
 
Malgrat tot, la successió (xn) pot no convergir cap a α malgrat que x0 sigui molt pròxima a α, 
depenent de l’elecció de g. 
 
Però es pot demostrar que si l’equació x = g(x) té una solució α i en un cert entorn de α (Jα), 
existeix g’(x), i |g’(x)| ≤ m < 1, llavors 
 
∀xo ∈ Jα, si s’aplica el mètode iteratiu simple xn = g(xn‐1), tenim que 
 
       1) xn ∈ Jα, per n= 0, 1, 2, ... 
       2) lim xn = α 
           n→∞
                    
       3) α és l’única arrel de x = g(x) dins de l’entorn Jα 
 
Per  exemple,  si  tenim  l’equació  x3  –  x  –  5  =  0,  la  podem  escriure  de  moltes  maneres 
equivalents, x = gi(x), com són: 
 
          g1(x) = x3 – 5                                          g2(x) = (x + 5)1/3                 g3(x) = 5 / (x2 – 1) 
         
Aquesta  equació  té  una  arrel  pròxima  a  x0  =  1.9.  Comproveu  que  només  una  de  les  tres 
funcions anteriors compleix les hipòtesis, i dóna lloc a una successió convergent. 
 


                                                           75 
El mètode iteratiu pot aturar‐se quan la diferència entre dos valors successius és més petita 
que l’error ε que es vol obtenir, ε  > 0:  |xn – xn‐1| < ε 
 
Dissenyeu  un  algorisme  que  resolgui  equacions  no  lineals,  f(x)  =  0,  pel  mètode  iteratiu  de 
punt  fix.  L’usuari  donarà  la  fita  d’error  que  desitja  ε,  ε  >  0,  el  nombre  màxim  d’iteracions 
permeses n, pel cas que el mètode no sigui convergent, i l’aproximació inicial a la solució x0. 
 
El  resultat  indicarà  el  valor  aproximat  de  la  solució,  el  nombre  d’iteracions  emprades,  així 
com  l’estimació  de  l’error  comès.  Comproveu  el  funcionament  del  programa  amb  diverses 
funcions. 
 
 
6.15 Codifiqueu tots els exercicis senars dels capítols 2 i 3 en Fortran. 




                                                    76 

				
DOCUMENT INFO