FONAMENTS D'INFORMÀTICA - cs.upc.edumiquel/fi/prob.pdf · en l'entorn Windows/DOS. 1.2.1 Convertiu...

79
FONAMENTS D'INFORMÀTICA 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 Setembre de 2008

Transcript of FONAMENTS D'INFORMÀTICA - cs.upc.edumiquel/fi/prob.pdf · en l'entorn Windows/DOS. 1.2.1 Convertiu...

 FONAMENTS D'INFORMÀTICA 

 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 

 Setembre de 2008 

1. INTRODUCCIÓ A LA INFORMÀTICA 

    Un usuari d'un entorn  informàtic té estructurada  la seva zona de treball (directori) tal  i com s'indica en el següent gràfic:  

W:\f7945694 

FI  AL  AN1  PROB  EN 

P1   P2  P3   P4

    Suposant que per a cadascun dels exercicis  següents  sempre es parteix de  la mateixa situació original: el directori per defecte  (on està  situat  l'usuari) és  l'arrel de  la  jerarquia, escriviu les comandes (en Unix i en DOS) que li permetran realitzar les següents tasques:  1.1.1 Crear un nou subdirectori de nom 'PROVA'.  1.1.2 Copiar els fitxers de text del subdirectori 'AN' al subdirectori 'P1'.  1.1.3 Esborrar el fitxer 'DADEST.DAT' del subdirectori 'EN'.  1.1.4 Canviar el nom del fitxer 'C.DAT' pel de 'CC.DAT', que està situat en el directori 'AL'.  1.1.5  Imprimir  3  còpies  del  fitxer  'RES1.TXT'  a  la  cua  'RALPH1',  sabent  que  el  fitxer  és  al subdirectori 'P2'.  1.1.6 Canviar el directori per defecte al subdirectori 'P1'. I després canviar al 'AL'?.  1.1.7 Executar un programa de nom 'JOC.EXE' que està situat al directori 'W:\FME\DE'.  1.1.8  Veure el contingut del subdirectori 'CP'.  1.1.9  Eliminar les versions anteriors del fitxer 'GUAI.PAS' que no se sap on és.  

1.1.10  Copiar els fitxers de programes Fortran del subdirectori 'P1' al directori arrel.  1.1.11  Repetiu  tots  els  exercicis  anteriors,  però  ara  sense  partir  de  la mateixa  situació original.  És  a  dir,  inicialment  esteu  situats  al  directori  arrel,  però  la  situació  inicial  d'un exercici es correspon amb la final de l'exercici anterior.  1.1.12 Practiqueu els exercicis anteriors, els que es puguin, tan en  l'entorn Linux/Unix com en l'entorn Windows/DOS. 

 ——————————————

 1.2.1 Convertiu els següents números decimals al sistema binari: 1984, 4000, 8192, 1992.  1.2.2 Una  targeta  perforada  ordinària  té  80  columnes  de  12  posicions  cadascuna. Quina mida ha de tenir el conjunt de caràcters representables si es vol que cadascun es representi amb una columna que tingui com a molt 3 perforacions?.  1.2.3 Quin número és 10001101001  (en binari) en el sistema decimal ?.  I en base 8?.  I en base 16?.  1.2.4 Estimeu quants caràcters conté un llibre, incloent els espais. Quants bits es necessiten per a codificar un  llibre en codi ASCII amb bit de paritat ?. Quantes cintes magnètiques de 1600 bpi de densitat  i 2400 peus (1 peu = 12 polsades) es necessiten per a emmagatzemar una biblioteca de 106 llibres ?.  1.2.5 Quants enters positius es poden expressar amb k dígits usant números en base r ?.  1.2.6  Feu  una  estimació  de  la  capacitat màxima  d’emmagatzemament  del  cervell  humà usant les següents suposicions:       * Tota la memòria es codifica en forma de molècula d'ADN.     * Una molècula d'ADN és una seqüència lineal de nucleòtids.     * Hi ha 4 nucleòtids: A, C, G i T.  Donat el pes mig d'un nucleòtid (10‐20 grams) i el pes mig del cervell (1500 grams), deduïu la capacitat en bits del cervell per a aquesta forma de codificació.  Nota: Aquest càlcul és només una fita superior de la capacitat d'informació, perquè el cervell té moltes cèl∙lules que realitzen funcions diferents a la de la memòria i a més a més, no tota la seva matèria és ADN.  1.2.7 Feu els següents càlculs en números de 8 bits en complement a 2:      a) 00101101 + 01101111 =  ?      b) 11111111 + 11111111 =  ?  

    c) 00000000 ‐  11111111 =  ?      d) 11110111 ‐  11110111 =  ?  1.2.8 Suposant que treballem amb un sistema de representació binari, on els valors enters ocupen 2 bytes, efectueu els següents càlculs:    a) Convertiu el número 23412 al sistema binari.  

b)  Convertiu  el  número  binari  1011  0101  1100  1001  al  valor  enter  sense  signe  que representa, en el sistema decimal.  c)  Convertiu  el  número  binari  1011  0101  1100  1001  al  valor  enter  amb  signe  (en complement a 2) que representa, en el sistema decimal.  d) Efectueu els següents càlculs amb números enters amb signe (en complement a 2):  

      • 0110 1111 0101 0001 +  1001 0000 1101 1000 = ?       • 1001 1110 1011 0101 ‐ 0111 1111 0110 0010 = ?  1.2.9 Suposant que treballem amb un sistema de representació binari, on els valors enters ocupen 2 bytes, efectueu els següents càlculs:    a) Convertiu el número 17013 al sistema binari.  

b) Convertiu el número binari 1000 1110 0101 0011 en el número que representa en el sistema decimal, interpretant‐lo com si fos un valor enter sense signe.  c) Convertiu el número binari 1000 1110 0101 0011 en el número que representa en el sistema  decimal,  interpretant‐lo  com  si  fos  un  valor  enter  amb  signe  (i  per  tant,  en complement a 2).  d) Efectueu els següents càlculs amb números enters amb signe (en complement a 2):  

  • 0111 1001 0000 1101 +  0101 1110 1110 1010 = ?   • 1011 0011 0110 0001 ‐  1100 0010 1001 1001 = ?    e) Convertiu el número 21731 al sistema octal (base 8).  1.2.10  Quines  de  les  següents memòries  principals  són  possibles  en  un  computador  ?. Quines són raonables ?. Expliqueu‐ho.      a) 10 bits en el MAR (Memory Address Register)         1024 paraules de memòria         8 bits per paraula       b) 10 bits en el MAR  

        1024 paraules de memòria         12 bits per paraula       c) 9 bits en el MAR          1024 paraules de memòria         10 bits per paraula       d) 11 bits en el MAR          1024 paraules de memòria         10 bits per paraula       e) 10 bits en el MAR          10 paraules de memòria         1024 bits per paraula       f) 1024 bits en el MAR          10 paraules de memòria         10 bits per paraula   1.2.11    Convertiu  aquests  números  decimals  al  sistema  binari  en  complement  a  2:  ‐321, +467, +666, ‐1234, +90, ‐556.  1.2.12 L'empresa Softest S. A., dedicada a les aplicacions estadístiques ha decidit encarregar a la casa Chip Inc. la construcció d'un computador per a processar eficientment les dades de les enquestes: sí, no i no sap‐no contesta, basat en una memòria ternària, on la unitat bàsica d'informació és el trit que pot adoptar els estats 0, 1 o 2. Quants trits es necessiten per a emmagatzemar  un  número  de  6  bits  ?  Obteniu  una  expressió  per  al  nombre  de  trits necessaris per a representar n bits.  1.2.13 Un computador està equipat amb 262 144 bytes de memòria principal. Per què ha escollit aquest nombre el fabricant, en lloc d'un més normal i fàcil de 250 000 ?.  1.2.14 Mediu  la  vostre  velocitat de  lectura  i  compareu‐la  amb  la  velocitat de  transmissió d'una línia telefònica de 300 bps.  1.2.15 El director del LCFIB ha decidit retirar definitivament les perforadores de targetes i les lectores de  targetes. Abans però,  vol  copiar  tots els paquets de  fitxes perforades en una cinta magnètica.   Si  l'espai  entre  enregistraments  físics  o  blocs  de  les  cintes  de  1600  bpi  és  de  0.25 polsades  i s'escriuen 15  targetes de 80 columnes per enregistrament  físic o bloc. Quantes caixes de 2000 targetes caben en una cinta de 2400 peus ?.  1.2.16 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:    a) Convertiu el nombre enter 9592 del sistema decimal al sistema binari.  

b) Convertiu el nombre binari 1010 1100 1000 0101 al número que representa en base 10,  interpretant‐lo  com  si  fos  un  valor  enter  sense  signe.  Feu  el  mateix,  però  ara interpretant‐lo com un valor enter amb signe (i per tant, expressat en complement a 2).  c) Efectueu  les operacions  següents  interpretant els números  com a valors enters amb signe (i per tant, en complement a 2):    • 0110 1010 0111 0001 + 1001 1100 0101 1111 = ??   • 0111 0001 1011 1101 – 1111 0001 1010 0110 = ??  d)  Donada  la  configuració  següent  d'un  computador,  expliqueu  raonadament  si  és possible o si és raonable o cap de les dues opcions:  

14 bits en el MAR (Memory Address Register, o registre d'adreces de memòria), 12 bits en el MBR (Memory Buffer Register, o registre de dades de memòria), 4096 paraules de memòria i 14 bits d'amplada de memòria. 

 1.2.17 Donades  les  característiques  següents d'un  computador, expliqueu  raonadament  si aquesta configuració és possible o no, si és raonable o no, etc.:  

20 bits en el MAR (Memory Address Register, o registre d'adreces de memòria) 22 bits en el MBR (Memory Buffer Register, o registre de dades de memòria) 

  1 024 000 paraules de memòria   20 bits d'amplada de memòria 

 1.2.18 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre enter sense signe 28365, del sistema decimal al sistema binari.  

b) Convertiu el nombre binari 1101 0101 1001 1101 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1101 0101 1001 1101 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números com a valors enters amb signe (i per tant, en complement a 2):    * 1101 0010 0101 1001 + 1000 1110 1101 0011 = ??   * 0101 1101 0001 1000 – 1011 1011 0010 1001 = ?? 

 1.2.19 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 28365 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1010 1111 0001 1010 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1010 1111 0001 1010 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números com a valors enters amb signe (i per tant, en complement a 2):    * 1000 1111 0111 1011 + 1110 0101 1000 1011 = ??   * 1100 0001 1001 1001 – 0111 0011 1110 1000 = ?? 

 1.2.20 Donades  les  característiques  següents d'un  computador, expliqueu  raonadament  si aquesta configuració és possible o no, si és raonable o no, etc.:    18 bits en el MAR (Memory Address Register, o registre d'adreces de memòria)   18 bits en el MBR (Memory Buffer Register, o registre de dades de memòria)   64 K paraules de memòria   Les paraules de memòria tenen 2 bytes d'amplada  1.2.21 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 9592 del  sistema decimal  al  sistema binari,  com a enter  sense signe. 

 b) Convertiu el nombre binari 1100 0011 1001 0110 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1100 0011 1001 0110 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números com a valors enters amb signe (i per tant, en complement a 2):    * 1001 1001 1000 0011 + 1000 1111 0010 0010 = ??   * 1000 1001 1010 0110 – 0110 0001 1100 1101 = ?? 

 1.2.22 Donades  les  característiques  següents d'un  computador, expliqueu  raonadament  si aquesta configuració és possible o no, si és raonable o no, etc.:    10 bits en el MAR (Memory Address Register, o registre d'adreces de memòria) 

  12 bits en el MBR (Memory Buffer Register, o registre de dades de memòria)   2 K paraules de memòria   Les paraules de memòria tenen 12 bits d'amplada  1.2.23 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 17584 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1011 0101 0111 1010 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1011 0101 0111 1010 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números com a valors enters amb signe (i per tant, en complement a 2):    * 1100 1101 1001 1001 + 0010 1011 1010 1010 = ??   * 0110 1100 0001 1010 – 1100 1001 0010 0101 = ?? 

 1.2.24 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu  el nombre  2198 del  sistema decimal  al  sistema binari,  com  a enter  sense signe. 

 b) Convertiu el nombre binari 1011 1111 0101 1010 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1011 1111 0101 1010 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números  com a valors enters amb signe (i per tant, en complement a 2):    * 0011 0101 1010 0101 + 0110 1010 0110 1000 = ??   * 0010 1001 1010 0110 – 1110 1000 1100 1101 = ?? 

 1.2.25 Donades  les  característiques  següents d'un  computador, expliqueu  raonadament  si aquesta configuració és possible o no, si és raonable o no, etc.: 

 12 bits en el MAR (Memory Address Register, o registre d'adreces de memòria) 14 bits en el MBR (Memory Buffer Register, o registre de dades de memòria) 

  16 K paraules de memòria   Les paraules de memòria tenen 12 bits d'amplada  

1.2.26 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 29998 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1100 1100 1101 0001 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1100 1100 1101 0001 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números  com a valors enters amb signe (i per tant, en complement a 2):    * 0110 0101 0110 0101 + 0111 0011 0011 0110 = ??   * 1010 1111 1001 1110 – 1010 1000 1011 0001 = ?? 

 1.2.27 Donades  les  característiques  següents d'un  computador, expliqueu  raonadament  si aquesta configuració és possible o no, si és raonable o no, etc.:  

12 bits en el MAR (Memory Address Register, o registre d'adreces de memòria) 12 bits en el MBR (Memory Buffer Register, o registre de dades de memòria) 

  8 K paraules de memòria   Les paraules de memòria tenen 8 bits d'amplada 

 1.2.28 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu  el nombre  9915 del  sistema decimal  al  sistema binari,  com  a enter  sense signe. 

 b) Convertiu el nombre binari 1100 1010 1110 0001 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1100 1010 1110 0001 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números  com a valors enters amb signe (i per tant, en complement a 2):    * 0100 1101 0011 1101 + 1100 1110 1000 0010 = ?? 

10 

  * 1110 0111 0110 1001 – 0101 0001 1010 0001 = ??  1.2.29 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 17592 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1011 1011 0001 1011 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1011 1011 0001 1011 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números  com a valors enters amb signe (i per tant, en complement a 2):    * 0010 1101 0111 0100 + 0101 1010 1010 1011 = ??   * 0100 1010 1000 1010 – 0110 1001 0011 1001 = ?? 

 1.2.30 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 14100 del sistema decimal al sistema binari, com a enter sense signe.  b) Convertiu el nombre binari 1001 0001 0101 1000 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1001 0001 0101 1000 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números com a valors enters amb signe (i per tant, en complement a 2):   * 1001 0101 1010 0101 + 0111 1010 0010 1001 = ??   * 1010 0101 1100 1110 – 0111 1000 1000 1001 = ?? 

 1.2.31 Donades  les  característiques  següents d'un computador, expliqueu  raonadament  si aquesta configuració és possible o no, si és raonable o no, etc.:  

* 17 bits en el MAR (Memory Address Register, o registre d'adreces de memòria) * 16 bits en el MBR (Memory Buffer Register, o registre de dades de memòria) * 64 K paraules de memòria * Les paraules de memòria tenen 12 bits d'amplada  

11 

1.2.32 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 6666 del  sistema decimal al  sistema binari,  com a enter  sense signe.  b) Convertiu el nombre binari 1000 1100 1111 1111 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Convertiu el nombre binari 1000 1100 1111 1111 al número que representa en base 10, però  ara  interpretant‐lo  com  un  valor  enter  amb  signe  (i  per  tant,  expressat  en complement a 2).  d) Efectueu  les operacions  següents  interpretant els números com a valors enters amb signe (i per tant, en complement a 2):   * 1011 0100 1010 1011 + 1000 1111 0010 0001 = ??   * 0101 1111 1011 0110 – 0111 1101 1101 0011 = ?? 

 1.2.33 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 28082 del sistema decimal al sistema binari, com a enter sense signe.  b) Convertiu el nombre binari 1100 1010 1000 1110 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.  

 1.2.34 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 19645 del sistema decimal al sistema binari, com a enter sense signe.  b) Convertiu el nombre binari 1010 0111 0000 1001 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.  

 1.2.35 Suposant que treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 32178 del sistema decimal al sistema binari, com a enter sense signe.  b) Convertiu el nombre binari 1001 1101 0100 0101 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Expliqueu breu i precisament què és i de què està composat el hardware.  

12 

d) Expliqueu breu i precisament què és un perifèric, i doneu algun exemple.  1.2.36 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 27064 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1101 0001 1101 0001 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c)  Expliqueu  breu  i  precisament  quins  nivells  es  poden  distingir  típicament  en l’arquitectura d’un computador?.  d) Expliqueu breu i precisament què és un paràmetre  i quins tipus de paràmetres hi ha. 

 1.2.37 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 21012 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1000 1101 0001 1011 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Expliqueu breu i precisament què és una acció i què és una funció. Expliciteu les seves semblances i les seves diferències.  d) Expliqueu breu  i precisament en què consisteix el disseny descendent,  i poseu‐ne un exemple. 

 1.2.38 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 40004 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1010 0001 1000 0100 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Expliqueu breu i precisament què és un paràmetre i quins tipus hi ha.   d) Expliqueu breu i precisament en què consisteix un sistema operatiu.  

1.2.39 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

13 

a) Convertiu el nombre 27182 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1111 0000 1011 0101 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Expliqueu breu i precisament què és internet   d) Expliqueu breu i precisament en què consisteix la memòria d’un computador. És volàtil o permanent ?  

1.2.40 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 17592 del sistema decimal al sistema binari, com a enter sense signe. 

 b) Convertiu el nombre binari 1011 0000 1110 0101 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Definiu breu i precisament el concepte de tipus d’una variable.  d) Expliqueu breu i precisament què és internet, i expliqueu 2 dels serveis que ofereix.  

1.2.41 Suposant que  treballéssiu amb un computador on els valors enters ocupen 2 bytes, efectueu els següents càlculs i respongueu les següents qüestions:  

a) Convertiu el nombre 16108 del sistema decimal al sistema binari, com a enter sense signe.  b) Convertiu el nombre binari 1100 1001 0000 1001 al número que representa en base 10, interpretant‐lo com si fos un valor enter sense signe.   c) Definiu breu  i precisament els  conceptes dels dos  serveis d’internet  següents: blog  i wiki.  d) Expliqueu breu  i precisament què és una acció  i què és una funció,  i expliqueu‐ne  les diferències. 

   

14 

2. INTRODUCCIÓ A L’ALGORÍSMICA   2.1.1 Dissenyeu un algorisme que descrigui el  treball a  realitzar, per a pelar  les  suficients patates per a fer un sopar, sabent que es tenen com a accions primàries o elementals:        pelar_una_patata       omplir_cistell  i com a condicions lògiques:        cistell_buit?       prou_patates? .  2.1.2 Dissenyeu un algorisme que descrigui el treball a realitzar per a fregar el terra d'un pis, tenint com a accions primàries:        fregar_troç       omplir_cubell_d'aigua       buidar_cubell       tirar_lleixiu_al_cubell       nova_habitació  i les condicions lògiques:        pis_fregat?       aigua_bruta?       cubell_buit?       habitació_fregada? .  2.1.3 Dissenyeu un algorisme que codifiqui  la tasca que seguiu per anar de casa vostre a la Facultat, tenint les primitives següents:        agafar_bus       agafar_metro       agafar_cotxe       baixar_autobus       baixar_metro       baixar_cotxe       esperar       caminar       . . .  i les condicions lògiques:        línia_autobus_correcta?       línia_metro_correcta? 

15 

      meu_cotxe?       Facultat?       correspondència_amb_línia_X?       parada_baixada?       estació_baixada?       .  .  .  2.1.4 Dissenyeu un algorisme que descrigui com trobar un llibre en una biblioteca, tenint en compte que pot estar o no a  la biblioteca, estar o no als prestatges, estar en préstec o no, etc. Utilitzeu les accions primitives i condicions lògiques que creieu necessàries.  2.1.5 Dissenyeu un algorisme que descrigui el procés de matriculació que heu seguit aquest any. Utilitzeu les accions primitives i condicions lògiques que creieu necessàries.  2.1.6  Dissenyeu  un  algorisme  que  descrigui  com  obtenir  una  conferència  telefònica internacional, tenint en compte que podeu saber o no el número de  l'abonat, hi ha  línia o no,  la  línia està ocupada o no, etc. Utilitzeu  les accions primitives  i condicions  lògiques que creieu necessàries.  2.1.7 Dissenyeu un algorisme que descrigui el procés d'elaboració d'una  truita de patata  i ceba,  per  a  10  invitats.  Utilitzeu  les  accions  primitives  i  condicions  lògiques  que  creieu necessàries. 

 ——————————————

 2.2.1  Poseu  parèntesis  a  les  següents  expressions  de  forma  que  es  mantingui  l'ordre d'avaluació:      x + y + z      x ‐ y * z      x div y div z     x * y + z      ‐x + y div z      x div y * y + x mod y     x + y * z      x * y div z      x div y + z + w  

2.2.2 Avalueu les següents expressions:      2 * 3 ‐ 4 * 5    15 div 4 * 4    3 * 1 div 3     1 div 3 * 3      80 div 5 div 3    2 div 3 * 2     cert i fals o cert i no cert     cert i (fals o cert) i no (cert o fals)     no (cert i fals o (cert o fals) i fals) o cert i fals 

 2.2.3 Avalueu les següents expressions:        a) 3 * 5 + 6 div 2 mod 3 + 4       b) no (3 < 2) i no (25 > 4) o ('a' en ['b'..'e'])       c) 9 = 27 div 3 = (13 ≤ 51 mod 14)       d) [3,2,1] * [4,5,6] + [1..10] = [1..20] ‐ [11..19]  

16 

2.2.4 Escriviu les negacions de les següents expressions (on a, b, c són variables enteres i p, q, r són variables booleanes):      p i q o r      p i (p o r)      no p i q o no r     (a = b) o (a = 0)    (a < b) i (b < c)    no (a ≠ b) o (a + b = 7)     no p o no q o (a = b + c)        (a div b = 0) o (a = c) 

 2.2.5 Avalueu les següents expressions:    a)  7 * 5 div 4 + 8 mod 3 ‐ 1   b)  60 mod 3 < 5 * ( 90 div 4 ) = ( 'a' < succ('b') )   c)  24 div 6 = 23 mod 5 =  ( 17 ≤ ( codi('3') ‐ codi('0') ) )   d)  not ( 'a' = pred('b') ) or ( ( 4 * 3 > 35 mod 11 ) <  ( 3 = 5 mod 2) ) and true  2.2.6 Donats els valors inicials de les següents variables enteres i booleanes, { a = 3, b = 5, c = 7, p = cert, q = fals, r = cert }, indiqueu els valors que tindran aquestes variables després de les següents assignacions:          a  ←  3 * b ;         b  ←  a + c ;         p  ←  p i (c > b) ;         q ←  p o q ;         r  ←  a = b ;         a  ←  a + 1 ;         b ←  b ‐ 2 ;         a ←  ‐ a ;         b  ←  b div 2 + c mod 3  

2.2.7 Essent a, b, c, d variables numèriques, escriviu l'expressió lògica corresponent a:      a) Els valors de b i c són tots dos superiors al valor de d.     b) Els valors d'a, b i c són idèntics.     c) Els valors d'a, b i c són idèntics però diferents del valor de d.     d) El valor de b està comprès, estrictament, entre els valors de c i d. 

e) El valor de b està comprès, estrictament, entre els valors de c i d, i el valor de c és més petit que el valor de d. 

    f) Hi ha, com a mínim, dos valors idèntics entre a, b i c.     g) Hi ha dos valors idèntics entre a, b i c, i tan sols dos.     h) Hi ha, com a màxim, dos valors idèntics entre a, b i c.  

2.2.8 En un algorisme que analitza els  resultats d'exàmens, hi ha 5  variables definides:  la variable OPCIO, de  tipus  caràcter,  indica el  tipus de  l'alumne  ('c' per  a  ciències  i  'l' per  a lletres)  i  les variables NL, NC, NM, NF que  indiquen  respectivament    (per a un alumne en particular)  les  notes  de  literatura,  català,  matemàtiques  i  física.  Totes  les  notes  estan calculades  sobre  10  i  totes  tenen  el mateix  coeficient.  Escriviu  les  expressions  lògiques corresponents a:   

17 

  a) La mitjana de les quatre notes és superior a 5. b) Les notes de matemàtiques i català són superiors a la mitjana de les quatre notes. 

  c) Hi ha, com a mínim, una nota superior a 5.   d) Totes les notes són superiors a 5.   e) La mitjana de les notes de l'opció és superior a 5 (NL i NC / NM i NF). 

f) La mitjana de  les 4 notes és superior o  igual a 5  i  la mitjana de  les notes de  l'opció també. 

 2.2.9 Siguin a, b, c i d variables enteres. Donada la següent construcció:        si  (((a > 0) o (b > a)) i (c ≠ d))  llavors  a  ←  c;                                  b  ←  0                              sinó  c  ←  d+c;                                si  c = 0  llavors  c  ←  c+b                                 sinó  c ←  c‐a                                fsi;                                b  ←  a+c+d       fsi  

Calculeu els valors finals d'a, b, c i d per a cada situació inicial següent:      1) { a = 0, b = 0, c = 5, d = 3 }     2) { a = 2, b = 1, c = 5, d = 3 }     3) { a = 2, b = 1, c = 2, d = 2 }     4) { a = 2, b = 1, c = 0, d = 0 }  

2.2.10 Simplifiqueu la següent estructura si és possible:        si  x mod 3 = 0  llavors  n ← x;                       y ← x div 3;                       i ← i+y;                       x ← 3*i;                       k ← x*x                  sinó  n ← x;                    y ← −y;                   i ← i+y;                    x ← x*3+1;                    k ← x*x       fsi  

2.2.11 Simplifiqueu, en la mesura que sigui possible, les següents estructures algorísmiques, on les variables han estat definides de la següent forma,      var a, b, c, d són enter fvar:      a)  a  ←  3;       b  ←  a + 2; 

18 

      c  ←  a * b;       a  ←  a div 2;       b  ←  c;       a  ←  c;       c  ←  4 div 3;       a  ←  80 div 5;       b  ←  c + 1      b)  si  a mod 2 = 0  llavors             b  ←  2 * a;             c  ←  3 * c;             d  ←  d div 2 + b                   sinó             b  ←  2 * a;             c  ←  3 * c;             d  ←  d * 2 + b       fsi      c)  a  ←  20;       b  ←  1;       mentre (a < 40) i (b ≤ 50) fer         a  ←  a + 1;         b  ←  b + 2       fmentre  

2.2.12  Calculeu  l'estat  final  de  l'entorn  en  executar  les  següents  instruccions,  partint  de l'estat  inicial,  {  i = 2,  j = 4,  k = 1  },  i  suposant que  les  variables han estat definides de  la següent forma,      var i, j, k, a, b, c són enter fvar:      mentre i < 40 fer       a ←  2 * i;        j  ←  i;       mentre j < 20 fer         b  ←  2 * j + 1;         k  ←  i + j;         mentre k ≤ 10 fer           c  ←  a + b;           k  ←  k + 1         fmentre;         j  ←  j + 1       fmentre;       i  ←  i * 2     fmentre  

19 

2.2.13 Calculeu  l'estat  final de  l'entorn en executar  les següents  instruccions suposant que les variables han estat definides de la següent forma, var x,y,a,j són enter fvar:      mentre x > 0 fer       y ←  x div 2;        j  ←  y;       si  y mod 2 = 1  llavors  j ←  y+1  fsi;       a ← 7;       mentre j < x fer         a ←  a * j;         j ←  j + 1       fmentre;       x ← y     fmentre  2.2.14  Resoleu els següents apartats:  

a) Avalueu les següents expressions:   7 * 8 mod 3 < succ(codi('5') ‐ codi('2')) div 2   no ('a' > succ('h')) i (3 = 7 div 2) o (cert = fals)  b)  Calculeu  l'estat  final  de  l'entorn,  suposant  que  les  variables  han  estat  definides correctament com,     var a,b,c,j,k són enter fvar    mentre  j < 10 fer     a ← b+3;     c ← a div 2;     k ← j;     mentre  k > 0 fer       k ← k‐1     fmentre;     j ← j+1   fmentre   

 2.2.15  Resoleu els següents apartats:  

a) Avalueu les següents expressions:    20 div 4 mod 3 < (codi('5') ‐ codi('2')) div 2 = (24.0 / 3.0 ≤ 8.0)   no (no ('c' > car (codi('c') + 1)) i (3 = 7 div 2)) o ( 7 < 14 div 2 = fals)  b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri és 

20 

    const vi val 0; fi val 0 fconst        var n, mx, my, s, c són enter fvar      s ← vi;     c ← vi;     escriure‐saltar ('Doneu una seqüència de nombres enters finalitzada                       amb un zero:');       llegir (n);     mx ← n;     my ← n;           mentre n ≠ fi fer       si n > mx llavors mx ← n fsi;       si n < my llavors my ← n fsi;                s ← s+n;       c ← c+1;       llegir (n)     fmentre;     si c > 0 llavors escriure (c, my, mx, s/c) fsi   falgorisme   { R ?? } 

 2.2.16 Resoleu els següents apartats:    a) Avalueu les següents expressions:    (40 * 3 mod 5 > (49 mod 7 + (codi('B') ‐ codi('A'))) div 2) i (12.0 / 6.0 ≥ 2.0)   (succ('y') > 'a') i no (4 = 8 div 9) = (pred('1') = '9') o fals < (8 mod 3 = 2)      b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri96 és     const vi val 0; marca val '.'; espai val ' ' fconst        var c és caràcter; nll, npp són enter fvar      escriure‐saltar ('Doneu un text (seqüència de caràcters: espais en blanc o                       lletres), finalitzat amb un punt:');       nll ← vi;     npp ← vi;     llegir (c);     sb(c, espai);              mentre c ≠ marca fer       tp(c, nll, npp, espai, marca);       sc(c, espai)     fmentre;     opció       cas npp > 0 fer escriure (nll/npp) 

21 

      cas npp = 0 fer escriure (npp)     fopció   falgorisme   { R ?? }    acció sc (ent/sort car és caràcter; ent tc és caràcter) és     mentre car = tc fer       llegir (car)     fmentre   facció    acció tp (ent/sort car és caràcter; ent/sort nl, np són enter;            ent esp, mar són caràcter) és                                                  mentre (car ≠ esp) i (car � mar) fer       nl ← nl+1;       llegir (car)     fmentre;     np ← np+1   facció    c) Dissenyeu un algorisme que satisfaci la següent especificació:     Q ≡ { n ≥ 0 ∧ n = N }              algorisme              n 

   R ≡ { r = ∑ (1/i!) ∧ n = N }             

i=1              2.2.17  Resoleu els següents apartats: 

 a) Avalueu la següent expressió:        (20 div 2 mod 4 < (codi(‘d’) ‐ codi(‘b’))) o no (18.0 / 3.0 ≥ 4.0)    b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri97 és     const vi val 0; marca val '.'; cb val 'o' fconst        var c és caràcter; cmp són enter fvar      escriure‐saltar ('Doneu un text (seqüència de caràcters: espais en blanc o                       lletres), finalitzat amb un punt:');       cmp ← vi;     llegir (c);            mentre c ≠ marca fer 

22 

      si tr?(c,cb) llavors cmp ← cmp + 1 fsi;       llegir(c)     fmentre;     escriure (cmp)   falgorisme   { R ?? }    funció tr? (ent car, carb és caràcter) retorna booleà és     retorna (car = carb)   ffunció  c) Quin valor final tenen les variables enteres a, b i c ?   { Q }   algorisme algorisme_qualsevol és       var a, b, c són enter fvar     .  .  .     a ← 7; b ← 12; c ← 4;           caixa_negra(a,b,c)   falgorisme   { a= ??, b= ??, c= ?? }    acció caixa_negra (ent p1 és enter; ent/sort p2 és enter; sort p3 és enter) és     p3 ←  0;     p1 ←  p2 + p3;     p2 ←  20;     p3 ←  p1 + p2   facció 

 2.2.18  Resoleu els següents apartats: 

   a) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri97bis és     const vi val 0; marca val ‘.’; sep val ‘ ‘ fconst        var c és caràcter; cmp és enter fvar     escriure‐saltar ('Doneu un text (seqüència de caràcters: espais en blanc o                       lletres), finalitzat amb un punt:');       cmp ← vi;     llegir (c);            mentre c ≠ marca fer       sl_bln(sep, c);       sl_crt(sep, marca, c, cmp)     fmentre;     escriure (cmp)   falgorisme   { R ?? } 

23 

   acció sl_bln (ent sep és caracter; ent/sort car és caràcter) és     mentre car = sep fer  llegir(car)  fmentre   facció  

acció sl_crt (ent sep, fi és caracter; ent/sort car és caràcter; ent/sort cmp és enter) és     si car ≠ fi llavors  cmp ←  cmp + 1 fsi;     mentre (car ≠ sep) i (car ≠ fi) fer       llegir(car)     fmentre;   facció  b) Quin valor final tenen les variables a, b, c  i d ?   { Q }   algorisme algorisme_qualsevol és       var a, b són enter; c,d són booleà fvar     .  .  .     a ←  7; b ←  12; c ←  fals; d ←  cert;           caixa_negra2(a,b,c,d);     a ←  b + 3;           d ←  no d o c   falgorisme   { a= ??, b= ??, c= ??, d= ?? } 

 acció  caixa_negra2  (sort  p1  és  enter;  ent  p2  és  enter;  ent/sort  p3,  p4  són  booleà)         és 

    p1 ←  10;     p3 ←  no p3;     p1 ←  p2 ‐ p1;     p4 ←  p3 o p4;     p2 ←  p2 * 2;     p3 ←  p4 i p3   facció 

 2.2.19  Resoleu els següents apartats:  

a) Avalueu la següent expressió:        (60 div (2 + 3) mod 5 < (codi(‘9’) ‐ codi(‘7’))) i no (27.0 / 9.0 ≥ 3.0) o          (‘a’ = car(codi(‘A’)))    b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri98 és     const vi val 0; marca val '.'; vc val 'e' fconst        var c1,c2 són caràcter; cmp és enter fvar 

24 

    escriure‐saltar ('Doneu un text (seqüència de caràcters: espais en blanc o                       lletres), finalitzat amb un punt:');       cmp ← vi;        c1 ← ' ‘ ;     llegir (c2);           mentre c2 ≠ marca fer       si tr?(c1,vc) i (c2 = ‘ ‘) llavors cmp ← cmp + 1 fsi;       c1 ← c2;       llegir(c2)     fmentre;     si tr?(c1,vc) llavors cmp ← cmp + 1 fsi     escriure (cmp)   falgorisme   { R ?? }   funció tr? (ent car, carb és caràcter) retorna booleà és     retorna (car = carb)   ffunció  d) Quin valor final tenen les variables enteres a, b i c ?   { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     a ← 13; b ← 5; c ← 7;           caixa_negra1(a,b,c)   falgorisme   { a= ??, b= ??, c= ?? }    acció caixa_negra1 (ent p1 és enter; ent/sort p2 és enter; sort p3 és enter) és     p3 ←  5;     p1 ←  p2 + p3;     p2 ←  caixa_negra2(p1, p3);     p3 ←  p1 + p2;            facció    funció caixa_negra2 (ent p11, p22 són enter) retorna enter és     var aux és enter fvar     aux ←  p11 * 2;           retorna (aux + p22)   ffunció 

 2.2.20  Resoleu els següents apartats: 

   a) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri98bis és 

25 

    const marca val 0 fconst        var cr és booleà; n1,n2 són enter fvar     escriure‐saltar ('Doneu una seqüència de nombres enters                                          finalitzada amb un valor igual a 0:');       in(cr,n1,n2);            mentre cr i (n2 ≠ marca) fer       act(n1,n2,cr);       sgn(n1,n2)     fmentre;     escriure (cr)   falgorisme   { R ?? }    acció in(sort cr és booleà; sort n1,n2 són enter) és     cr ← cert;     llegir (n1);     si n1≠0 llavors llegir(n2)                           sinó n2 ← n1     fsi;   facció    acció act (ent n1,n2 són enter; sort cr és booleà) és     cr ← n1 ≤ n2   facció    acció sgn (sort n1 és enter; ent/sort n2 és enter) és     n1 ← n2;     llegir(n2)   facció  b) Quin valor final tenen les variables a, b, c  i d ?    { Q }   algorisme algorisme_qualsevol és       var a, b són enter; c,d són booleà fvar     .  .  .     a ←  5; b ←  3; c ←  cert; d ←  fals;            caixa_negra(b,a,c,d);     a ←  b + a;           d ←  no c o d   falgorisme   { a= ??, b= ??, c= ??, d= ?? }  

acció caixa_negra (sort p1 és enter; ent p2 és enter; ent/sort p3, p4 són booleà) és     p1 ←  7;     p3 ←  no p4;     p1 ←  p2 ‐ p1; 

26 

    p4 ←  p3 o p4;     p2 ←  p2 + 5;     p3 ←  p4 i p3   facció 

 2.2.21  Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

   no (24 * (7 mod 3) div 6 > codi(‘b’) – codi(‘a’) + 2) o (‘9’ = car(codi(‘/’)) i       (3.0 * 4.0 / 6.0 > 1.8)    b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri99 és     const marca val '.' fconst        var c, pll són caràcter; ok és booleà fvar     escriure‐saltar ('Doneu un text (seqüència de caràcters: espais en blanc o                       lletres), finalitzat amb un punt:');        ok ← cert;     llegir (c);     sb(c);     pll ← c;          mentre (c ≠ marca) i ok fer       sc(marca,c);       sb(c);       ok ← (c=pll) o (c=marca)     fmentre;     escriure (ok)   falgorisme   { R ?? } 

   acció sb (ent/sort car és caràcter) és     mentre car = ‘ ‘ fer llegir(car) fmentre   facció    acció sc (ent mfs és caràcter; ent/sort car és caràcter) és     mentre (car ≠ ‘ ‘) i (car ≠ mfs) fer llegir(car) fmentre   facció  c) Quin valor final tenen les variables enteres a, b i c ?   { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     a ← 1; b ← 3; 

27 

          caixa_negra1(a+b,b,c)   falgorisme   { a= ??, b= ??, c= ?? }    acció caixa_negra1 (ent p1 és enter; ent/sort p2 és enter; sort p3 és enter) és     p3 ←  5;     p2 ←  caixa_negra2(p3, p1);     p3 ←  caixa_negra2(p2, p3) + p1;        p1 ←  p3 – p2;        facció    funció caixa_negra2 (ent p11, p22 són enter) retorna enter és     var aux és enter fvar     aux ←  p11 * 2;           retorna (aux ‐ p22)   ffunció 

 2.2.22 Resoleu els següents apartats: 

   a) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri99bis és     const marca val 0 fconst        var cm és booleà; n1,n2 són enter fvar     escriure‐saltar ('Doneu una seqüència de nombres enters                                          finalitzada amb un valor igual a 0:');       in(cm,n1,n2);           mentre cm i (n2 ≠ marca) fer       act(n1,n2,cm);       sgn(n1,n2)     fmentre;     escriure (cm)   falgorisme   { R ?? }    acció in(sort cm és booleà; sort n1,n2 són enter) és     cm ← cert;     llegir (n1);     si n1≠0 llavors llegir(n2)                         sinó n2 ← n1     fsi;   facció    acció act (ent n1,n2 són enter; sort cm és booleà) és     cm ←  (n2 = 2*n1)   facció 

28 

   acció sgn (sort n1 és enter; ent/sort n2 és enter) és     n1 ← n2;     llegir(n2)   facció  b) Quin valor final tenen les variables a, b, c  i d ?    { Q }   algorisme algorisme_qualsevol és       var a, b són enter; c,d són booleà fvar     .  .  .     a ←  4; b ←  2; c ←  fals; d ←  cert;           caixa_negra(b,a,c,d);     a ←  b ‐ a;           d ←  no c o d   falgorisme   { a= ??, b= ??, c= ??, d= ?? }    acció caixa_negra (sort p1 és enter; ent p2 és enter; ent/sort p3, p4 són booleà) és     p1 ←  3;     p4 ←  no p3;     p1 ←  p2 ‐ p1 + 5;     p3 ←  p3 o p4;     p2 ←  (p2 + 4) mod 3;     p4 ←  p4 i p3   facció 

 2.2.23  Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

   no (48 * (30 mod 3) div 6 > codi(‘d’) – codi(‘a’) + 2) o (‘7’ = car(codi(‘&’))) i      (6.0 * 4.0 / 2.0 > 12.0)    b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2000 és     const marca val 0 fconst        var n, pr són enter; ok és booleà fvar     escriure‐saltar ('Doneu una seqüència de nombres enters finalitzada amb un                                        zero:');        llegir(n);     pr  ←  n;     ok  ←  cert;     mentre (n ≠ marca) i ok fer 

29 

      llegir(n);       ok  ←  ig(pr,n,marca)     fmentre;     escriure (ok)   falgorisme   { R ?? } 

   funció ig (ent n1,n2, mfs són enter) retorna booleà és     retorna ((n1=n2) o (n2=mfs))   ffunció 

 c) Quin valor final tenen les variables enteres a, b i c ?    { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     b ← 2; c ← 7;            a  ←  caixa_negra1(b+c, c‐b, 2*b*c);            caixa_negra2_(a, b, c)   falgorisme   { a= ??, b= ??, c= ?? }    acció caixa_negra2 (ent p11 és enter; ent/sort p22 és enter; sort p33 és enter) és     p22 ←  p11 * 3 + p22;     p33 ←  p11;     p33 ←  5 * p33;           p11 ←  p33 – p22   facció    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 és enter fvar     aux1 ← p1 * p2 – p3;           caixa_negra2(p2‐p1, aux1, aux2);           retorna (aux2 + aux1 ‐ p2)   ffunció 

 2.2.24  Resoleu els següents apartats: 

   a) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2000bis és     const marca val '.' fconst        var c, ull, ull2 són caràcter; ok és booleà fvar     escriure‐saltar ('Doneu un text (seqüència de caràcters: espais en blanc o                       lletres), finalitzat amb un punt:'); 

30 

       ok ← cert;     llegir (c);     sb(c);     sc(marca,c,ull);           mentre (c ≠ marca) i ok fer       sb(c);       si c ≠ marca llavors sc(marca,c,ull2);                                          ok ← (ull2=ull)                  fsi     fmentre;     escriure (ok)   falgorisme 

  { R ?? }    acció sb (ent/sort car és caràcter) és     mentre car = ‘ ‘ fer llegir(car) fmentre   facció    acció sc (ent mfs és caràcter; ent/sort car és caràcter; sort ll és caràcter) és     mentre (car ≠ ‘ ‘) i (car ≠ mfs) fer ll ← car; llegir(car) fmentre   facció 

 b) Quin valor final tenen les variables a, b, c  i d ?    { Q }   algorisme algorisme_qualsevol és       var a, b són enter; c,d són booleà fvar     .  .  .     a ←  3; b ←  ‐1; c ←  cert; d ←  cert;           caixa_negra(b‐2,a,c,d);     a ←  b * a ‐ 2;           d ←  no c i d   falgorisme   { a= ??, b= ??, c= ??, d= ?? }    acció caixa_negra (ent p1 és enter; sort p2 és enter; ent/sort p3, p4 són booleà) és     p2 ←  1;     p4 ←  no p3;     p1 ←  p2 ‐ p1 ‐ 2;     p3 ←  p3 i p4;     p2 ←  (p1 + 4) mod 2;     p4 ←  p4 o p3   facció 

 2.2.25 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

31 

   (‘:’ = car(codi(‘;’)))  i  no (48 * (31 mod 3) div 6 > codi(‘5’) – codi(‘1’) + 4)         o  ((8.0 + 4.0) / 2.0 < 6.0) 

   b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2001 és     const marca val 0 fconst        var n és enter; ok és booleà fvar     escriure‐saltar ('Doneu una seqüència de nombres enters finalitzada amb un                                      zero:');       llegir(n);     ok  ←  cert;     mentre (n ≠ marca) i ok fer       ok  ←  pr(n);       llegir(n)     fmentre;     escriure (ok)   falgorisme   { R ?? }    funció pr (ent n1 és enter) retorna booleà és     retorna (n1 mod 2 = 0)   ffunció  c) Quin valor final tenen les variables enteres a, b i c ?   { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     b ← 3; c ← 4;          a  ←  caixa_negra1(4, c+b, b*c*2);         caixa_negra2(a, b, c)   falgorisme   { a= ??, b= ??, c= ?? }    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 són enter fvar        aux1 ←  2* p1 * p2 – p3;             aux2  ←  p1 + p3;             retorna (aux2 + aux1 – p2)   ffunció    acció caixa_negra2 (ent p11 és enter; ent/sort p22 és enter; sort p33 és enter) és      p22 ←  p11 * 2 – p22;      p33 ←  p22; 

32 

     p33 ←  4 * p33 – 2 * p11;           p11 ←  p22 – 2 * p33 + p11   facció 

 2.2.26 Resoleu els següents apartats: 

   a) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2001bis és     const marca val 0 fconst        var n és enter; ok és booleà fvar     escriure‐saltar ('Doneu una seqüència de nombres enters finalitzada amb un                                       zero:');        llegir(n);     ok  ←  cert;     mentre (n ≠ marca) i ok fer       ok  ←  pr(n);       llegir(n)     fmentre;     escriure (ok)   falgorisme   { R ?? } 

   funció pr (ent n1 és enter) retorna booleà és         var mt, compt és enter fvar     mt ← n1 div 2;            compt ← 2;          mentre (n1 mod compt ≠ 0) i (compt ≤ mt) fer               compt ←  compt +1     fmentre;     retorna (n1 mod compt ≠ 0)   ffunció 

 b) Quin valor final tenen les variables a, b, c  i d ?    { Q }   algorisme algorisme_misteri2001bis és       var a, b són enter; c,d són booleà fvar     .  .  .     a ←  2; b ←  ‐3; c ←  cert; d ←  fals;            caixa_negra(b+8,a,d,c);     a ←  b * a div 2;           d ←  no c i d   falgorisme   { a= ??, b= ??, c= ??, d= ?? }  

33 

  acció caixa_negra (ent p1 és enter; sort p2 és enter; ent/sort p3, p4 són booleà) és     p2 ←  10;     p4 ←  no p3;     p1 ←  p2 * p1 + 2;     p3 ←  p3 o p4;     p2 ←  (p1 + p2) mod 2;     p4 ←  p4 i p3 

  facció  2.2.27 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

  no  (‘$’ = car(codi(‘€’)))    i    ((2.0 + 3.0) / 2.5 < 2.0)   o  (10 * 14 div 7 mod 6 > codi(‘5’) – codi(‘2’) – 1)    b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2002 és     const marca val ‘.’; maxc val 20 fconst     tipus p és vector [1..maxc] de caràcter ftipus        var m és p; c és caràcter; ln és enter fvar     escriure‐saltar ('Doneu un text (espais i lletres) finalitzat amb un punt:');        llegir(c);     ln ←  0;     sb(c);     mentre c ≠ marca fer       mt(marca,c,m,ln);       sb(c)     fmentre;     si ln ≠ 0 llavors esc (p,ln) fsi   falgorisme   { R ?? } 

   acció sb (ent/sort car és caràcter) és     mentre car = ‘ ‘ fer llegir(car) fmentre   facció     acció mt (ent mfs és caràcter; ent/sort car és caràcter; sort m és p; sort ln és enter) és          ln  ←  0; 

  mentre (car ≠ ‘ ‘) i (car ≠ mfs) fer       m[ln+1] ← car; llegir(car); ln ←  ln+1        fmentre 

  facció  

34 

  acció esc (ent m és p; ent ln és enter) és     per i  ←  1 ascendent fins a ln fer escriure(m[i]) fper   facció 

 c) Quin valor final tenen les variables enteres a, b i c ?    { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     a ← 5; b ← 3; c ← 2;           a  ←  caixa_negra1(2, a‐b, b*c);           caixa_negra2(a, b, c)   falgorisme   { a= ??, b= ??, c= ?? }    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 són enter fvar     aux1 ←   p1 * p2 – 2 * p3;           aux2  ←  p1 –  p2;           retorna (aux2 * aux1 – p3)   ffunció    acció caixa_negra2 (ent p11 és enter; ent/sort p22 és enter; sort p33 és enter) és     p33 ←  p11 * 2 – p22;     p11 ←  p33 – 2 * p22 – p11     p22 ←  p33 + 1;     p22 ←  2 * p33 –  p11;   facció 

 2.2.28 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

   (codi(‘4’) –  codi(‘1’) – 1 < 12 * 5 div 6 mod 6)   o  ((5.0  ‐ 1.0)  / 2 ≤ 2.0)    i   no  (‘#’ = car(codi(‘@’)))     b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2003 és     const marca val ‘.’ fconst     var c,ul és caràcter fvar     ul ←  ‘ ‘;     escriure‐saltar ('Doneu un text (espais i lletres) finalitzat amb un punt:');        llegir(c);     mentre c ≠ marca fer 

35 

      sb(c);       tp(marca,c,,ul);     fmentre;     si  ul ≠ ‘ ‘ llavors escriure (ul)            sinó escriure (‘el text no té paraules’)     fsi   falgorisme   { R ?? } 

   acció sb (ent/sort car és caràcter) és     mentre car = ‘ ‘ fer            llegir(car)      fmentre   facció    acció tp (ent mfs és caràcter; ent/sort car és caràcter; ent/sort u és caràcter) és     mentre (car ≠ ‘ ‘) i (car ≠ mfs) fer             u ← car;        llegir(car)       fmentre   facció  c) Quin valor final tenen les variables enteres a, b i c ?    { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     a ← 2; b ← 5; c ← 4;           caixa_negra2(b, c, a);     b ←  caixa_negra1(3, a+c, b*a)   falgorisme   { a= ??, b= ??, c= ?? }    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 són enter fvar     aux1 ←   p3 * p1 – 3 * p2;            aux2  ←  2* (p2 –  p3);           retorna (aux2 + aux1 * p2)   ffunció    acció caixa_negra2 (ent p11 és enter; ent/sort p22 és enter; sort p33 és enter) és     p33 ←  p22 + 1;     p22 ←  p11 – 2 * p33 – p22;     p11 ←  p33 * 2 – p22;     p22 ←  3 * p11 –  p22   facció 

36 

 2.2.29 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

   no (car(codi(‘/’)) = ‘\’)  i  (codi(‘9’) – codi(‘5’) – 1 < (3 + 4) * (8 + 2) div 7 mod 7)  o  (6.0 / 2.0 ≤ 2.0)    b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2004 és     const marca val ‘.’ fconst     var c, pr és caràcter fvar     pr ← ‘ ‘;     escriure‐saltar ('Doneu un text (espais i lletres) finalitzat amb un punt:');        llegir(c);     mentre c ≠ marca fer       sb(c);       tp(marca,c,pr);     fmentre;     si  pr ≠ ‘ ‘ llavors escriure (pr)              sinó escriure (‘el text és buit’)     fsi   falgorisme   { R ?? } 

   acció sb (ent/sort car és caràcter) és     mentre car = ‘ ‘ fer            llegir(car)      fmentre   facció    acció tp (ent mfs és caràcter; ent/sort car és caràcter; ent/sort p és caràcter) és     si  (car ≠ ‘ ‘) i (car ≠ mfs)  llavors  p ← car  fsi;     mentre (car ≠ ‘ ‘) i (car ≠ mfs) fer             llegir(car)       fmentre   facció  c) Quin valor final tenen les variables enteres a, b i c ?    { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     a ← 1; b ← ‐1; c ← 2; 

37 

    b ← caixa_negra1(2, a+c, b*a);           caixa_negra2(b, c, a)   falgorisme   { a= ??, b= ??, c= ?? }    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 són enter fvar     aux1 ←  p3 * p1 – 3 * p2;          aux2 ← 2* (p2 –  p3);           retorna (aux2 + aux1 * p2)   ffunció    acció caixa_negra2 (ent p1 és enter; ent/sort p2 és enter; sort p3 és enter) és     p3 ← p2 + 1;     p2 ← p1 – 2 * p3 – p2;     p1 ← p3 * 2 – p2;     p2 ← 3 * p1 –  p2   facció 

 2.2.30 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

   (codi(‘C’) – codi(‘A’) < (3 + 2) * (9 + 1) div 5 mod 5)  o  no (car(codi(‘€’)) = ‘€’)  i  (18.0 / 9.0 ≤ 2.0)    b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2005 és     const marca val ‘.’ fconst     var  c és caràcter; nm és enter  fvar     nm ← 0;     escriure‐saltar ('Doneu un text (espais i lletres) finalitzat amb un punt:');        llegir(c);     mentre c ≠ marca fer       sb(c);       si c ≠ marca llavors nm ← nm + 1 fsi;       sp(marca,c)     fmentre;     escriure (nm)   falgorisme   { R ?? } 

   acció sb (ent/sort car és caràcter) és     mentre car = ‘ ‘ fer            llegir(car)  

38 

    fmentre   facció    acció sp (ent mfs és caràcter; ent/sort car és caràcter) és     mentre (car ≠ ‘ ‘) i (car ≠ mfs) fer             llegir(car)       fmentre   facció 

 2.2.31 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

   no (no ('c' > car (codi('c') + 1)) i (3 = 7 div 2)) o ( 7 < 14 div 2 = fals) i (3.0 * 4.0 / 2.0 ≥ 6.0)    b) Calculeu la precondició i la postcondició d'aquest algorisme: 

   { Q ?? }   algorisme misteri2006 és     const marca val 0 fconst        var n, pr són enter; ok és booleà fvar     escriure‐saltar ('Doneu una seqüència de nombres enters finalitzada amb un                                        zero:');        llegir(n);     pr ← n;     ok ←  cert;     mentre (n ≠ marca) i ok fer       llegir(n);       ok ←  ig(pr,n,marca)     fmentre;     escriure (ok)   falgorisme   { R ?? } 

   funció ig (ent n1,n2, mfs són enter) retorna booleà és     retorna ((n1=n2) o (n2=mfs))   ffunció 

 c) Quin valor final tenen les variables enteres a, b i c ? 

   { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .     a ← ‐3; b ← 4; c ← ‐2;     caixa_negra2(b, c, a); 

39 

    a ← caixa_negra1(2*a‐c, a+c, b*a)   falgorisme   { a= ??, b= ??, c= ?? }    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 són enter fvar     aux1 ←  p3 * p1 – p2 mod 2;            aux2 ← (p2 –  p3) div 2;         retorna (aux2 + aux1 * p2)   ffunció    acció caixa_negra2 (sort p1 és enter; ent/sort p2 és enter; ent p3 és enter) és     p3 ← p2 ‐ 4;     p2 ← p1 – p3 mod 3 – p2;     p1 ← p3 * 3 – p2;     p2 ← 4 * p1 –  p2   facció 

 2.2.32 Resoleu els següents apartats: 

   a) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2006bis és     const marca val '.' fconst        var c són caràcter; spr, ssn són enter; pr és booleà fvar     escriure‐saltar ('Doneu un text (seqüència de caràcters: espais en blanc o                       lletres), finalitzat amb un punt:');        pr ← cert;     spr ← 0;     ssn ← 0;     llegir (c);     sb(c);     mentre c ≠ marca fer       tc(marca,c, cmp);       pr ← no pr;       si pr llavors spr ← spr + cmp            sinó      ssn ← ssn + cmp               fsi;       sb(c);     fmentre;     escriure (spr, ssn)   falgorisme 

  { R ?? }    acció sb (ent/sort car és caràcter) és     mentre car = ‘ ‘ fer llegir(car) fmentre 

40 

  facció    acció sc (ent mfs és caràcter; ent/sort car és caràcter; sort nl és enter) és     nl ← 0;     mentre (car ≠ ‘ ‘) i (car ≠ mfs) fer nl ← nl+1; llegir(car) fmentre   facció 

 b) Quin valor final tenen les variables a, b, c  i d ?    { Q }   algorisme algorisme_qualsevol_2006 és       var a, b són enter; c,d són booleà fvar     .  .  .     a ← 3;      b ← 4;      c ← fals;      d ← cert;           caixa_negra(b‐2,a,c,d);     a ← b * a ‐ 6;     c ← no c i d   falgorisme   { a= ??, b= ??, c= ??, d= ?? } 

   acció caixa_negra (ent p1 és enter; sort p2 és enter; ent/sort p3, p4 són booleà) és     p2 ← 5;     p4 ← no p3;     p1 ← p2 ‐ p1 + 4;     p4 ← p3 i p4;     p2 ← (p1 + 1) mod 2;     p4 ← p4 o p3   facció 

 2.2.33 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

        (‘:’ = car(codi(‘;’)))  i  no (48 * (31 mod 3) div 6 > codi(‘E’) – codi(‘A’) + 4)  o  ((8.0 + 4.0) / 2.0 ≤ 6.0)  

b) Calculeu la precondició i la postcondició d'aquest algorisme:    { Q ?? }   algorisme misteri2007 és     const marca val 0 fconst        var n és enter; ok és booleà fvar     escriure‐saltar ('Doneu una seqüència de nombres enters finalitzada amb un                                          zero:'); 

41 

       llegir(n);     ok ← cert;     mentre (n ≠ marca) i ok fer       ok ← sn(n);       llegir(n)     fmentre;     escriure (ok)   falgorisme   { R ?? } 

   funció sn (ent n1 és enter) retorna booleà és     retorna (n1 mod 2 = 1)   ffunció 

 c) Quin valor final tenen les variables enteres a, b i c ?   { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .         b ← 3; c ← 4;            a ← caixa_negra1(4, c+b, b*c*2);            caixa_negra2(a, b, c)   falgorisme   { a= ??, b= ??, c= ?? }    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 són enter fvar       aux1 ← 2* p1 * p2 – p3;             aux2 ← p1 + p3;             retorna aux2 ‐ aux1 – p2   ffunció    acció caixa_negra2 (ent p11 és enter; ent/sort p22 és enter; sort p33 és enter) és     p22 ← p11 * 2 – p22;     p33 ← p22;     p33 ← 4 * p33 – 2 * p11;           p11 ← p22 – 2 * p33 + p11   facció 

 2.2.34 Resoleu els següents apartats: 

 a) Avalueu la següent expressió: 

        (‘!’ = car(codi(‘=’)))  o  no (18 * (31 mod 3) div 6 > codi(‘6’) – codi(‘0’) ‐ 3)  o  ((9.0 + 5.0) / 2.0 ≤ 3.0)  

b) Calculeu la precondició i la postcondició d'aquest algorisme: 

42 

   { Q ?? }   algorisme misteri2008 és     const marca val 0 fconst        var n és enter; ok és booleà fvar     escriure‐saltar ('Doneu una seqüència de nombres enters finalitzada amb un zero:');        llegir(n);     ok ← cert;     mentre (n ≠ marca) i ok fer       ok ← pr(n);       llegir(n)     fmentre;     escriure (ok)   falgorisme   { R ?? } 

   funció pr (ent n1 és enter) retorna booleà és     retorna n1 mod 2 = 0   ffunció 

 c) Quin valor final tenen les variables enteres a, b i c ?   { Q }   algorisme algorisme_qualsevol és     var a, b, c són enter fvar     .  .  .        b ← 1; c ← 1;           a ← caixa_negra1(10, c+b, b*c*2);           caixa_negra2(a, b, c)   falgorisme   { a= ??, b= ??, c= ?? }    funció caixa_negra1 (ent p1, p2, p3 són enter) retorna enter és     var aux1, aux2 són enter fvar       aux1 ← 2* p1 * p2 – p3;             aux2 ← p1 + p3;             retorna aux2 ‐ aux1 – p2   ffunció    acció caixa_negra2 (ent p11 és enter; ent/sort p22 és enter; sort p33 és enter) és     p22 ← p11 * 2 – p22;     p33 ← p22;     p33 ← 4 * p33 – 2 * p11;           p11 ← p22 – p33 div 2 + p11   facció 

 ——————————————

 

43 

2.3.1 Dissenyeu un algorisme que intercanviï els valors de 2 variables enteres.  

2.3.2 Repetiu l'exercici anterior, però sense utilitzar una variable auxiliar.  

2.3.3 Dissenyeu un algorisme que donades tres variables enteres x, y i z amb valors inicials a, b i c respectivament, permuti els seus valors de forma circular.  

2.3.4 Dissenyeu un algorisme que calculi el reste  i el quocient de  la divisió de  l'enter A per l'enter B.  

2.3.5 Dissenyeu un algorisme que calculi  l'equivalent en hores, minuts  i  segons d'un valor que expressa una quantitat de temps en segons.  

2.3.6 Dissenyeu un algorisme que calculi el valor més gran d'entre els de 2 variables enteres.  

2.3.7 Dissenyeu un algorisme que calculi el valor més petit d'entre els de 3 variables enteres.  

2.3.8* Dissenyeu un algorisme que calculi el nombre de valors iguals d'entre quatre variables enteres A, B, C i D.  

2.3.9 Dissenyeu un algorisme que calculi el factorial d'un nombre enter n, n ≥ 0.  

2.3.10 Dissenyeu un algorisme que calculi les potències positives d'un enter donat ab (ab, b ≥ 0).  

2.3.11  Les  taxes  actuals  d'una  companyia  ferroviària  pel  1992  consideren  que  els  nens menors de 4 anys viatgen sense bitllet  i que els nens de 4 a 11 (inclusiu) han de pagar mig bitllet.  Aquesta  reducció  del  50%  és  acumulativa  a  les  possibles  reduccions "targeta_familiar" i "família_nombrosa" que tot seguit es detallen:  

"Targeta_familiar":  tota  família  que  té  com  a mínim  un  fill  pot  gaudir‐ne.  Aquesta targeta dóna dret, en viatges de varis membres de la família a aquestes reduccions: 

 * la primera persona paga el seu bitllet amb taxa normal (si hi ha adults la primera persona és obligatòriament un adult).  * les altres persones tenen una reducció del 50% sobre el preu que haurien de pagar normalment. 

 "Família_nombrosa": cada membre d'una  família   de  tres o més  fills pot beneficiar‐se d'una  reducció  del  30%  sobre  el  preu  que  hauria  de  pagar  normalment  (encara  que viatgi sol). 

   Per un mateix viatge, una família de tres o més fills no pot acumular les avantatges de la "Targeta_familiar" i de la "Família_nombrosa" i per tant ha d'escollir la taxa que li resulti més avantatjosa.  Per  exemple,  si  un  membre  de  la  família  viatja  sol,  adoptarà  la  taxa  de 

44 

"Família_nombrosa";  però  una  família  amb  tres  nens  de  5,  7  i  9  anys  preferirà  la "Targeta_familiar".  

  Dissenyeu  un  algorisme  que  dialogui  (faci  preguntes  sobre  el  nombre  de  viatgers  de cada  tipus) amb  famílies de  tres o més  fills  i els  indiqui  la  taxa més profitosa  (els viatgers poden ser des d'un fins a tots els membres de  la família). Feu‐ho per un preu base de 100 pessetes el viatge.  

2.3.12 Dissenyeu un algorisme que permeti resoldre equacions de segon grau.  

2.3.13 Dissenyeu un algorisme que calculi el producte de dos enters sense usar  l'operació producte.  

2.3.14 Dissenyeu un algorisme que calculi x div y, i x mod y sense usar ni l'operació div ni la mod.  

2.3.15 Dissenyeu un algorisme que calculi tots els divisors d'un nombre enter.  

2.3.16 Dissenyeu un algorisme que determini si un nombre enter positiu és primer o no.  

2.3.17 Els nombres de Fibonacci. Dissenyeu un algorisme que calculi el n‐èssim terme de  la successió de Fibonacci definida tal i com segueix:        f0 = 1       f1 = 1       fn = fn‐1 + fn‐2,   n ≥ 2  L’usuari especificarà el valor n, que indica el terme de la successió a calcular. Per exemple, si n = 7 el resultat ha de ser 21.  2.3.18 Dissenyeu un algorisme que determini la part entera de l'arrel quadrada d'un nombre natural donat.  

2.3.19 Repetiu l'exercici anterior sabent que la suma dels n primers nombres senars és n2.  2.3.20 L’invers. Dissenyeu un algorisme, que donat un nombre enter positiu n, calculi el seu invers,  inv(n). L'invers d'un nombre és un altre nombre que té  les mateixes xifres, però en ordre invers.  Per exemple, si n = 2653 llavors inv(n) = 3562  2.3.21 La popular cerveseria Heidelberg es coneguda arreu del món per la qualitat de la seva cervesa  i per  la gran quantitat de varietats que n'ofereix. A més a més és única pel fet que guarden  les  copes  de  cervesa  en  unes  piles  triangulars  que  els  hi  facilita  el  servei  de  la cervesa, i dóna un toc d'originalitat al local:    

45 

Y Y Y Y Y Y  

Però tenen un problema a l'hora de colocar‐les, doncs no qualsevol nombre de copes poden apilar‐se triangularment. Per exemple, 9 copes no es poden apilar. Ajudeu‐los tot dissenyant un algorisme, que donat un nombre enter positiu de copes calculi si poden apilar‐se o no.   2.3.22 Dissenyeu un  algorisme que  calculi el màxim  comú divisor de dos nombres enters positius,  tot  i  utilitzant  l’algorisme  d’Euclides,  que  es  basa  en  l’aplicació  de  les  següents propietats:    P1) si a ≥ b, mcd (a , b) = mcd (b , r)  on  a = b * q + r,  amb  0 ≤ r < b   P2) mcd (a , 0) = a   P3) mcd (a , b) = mcd (b , a)  Per exemple, si els nombres fossin 44 i 60, llavors el mcd (44 , 60) = 4   2.3.23  El  gran  parell.  Dissenyeu  un  algorisme  que  donat  un  nombre  enter  positiu  que introduirà l’usuari, ens digui si el nombre és un gran parell. Un nombre és un gran parell si té totes  les  seves  xifres parells.  Intenteu  cercar una  solució que  superi el possible problema d’overflow.  Per exemple, si el nombre fos 7481 ens diria que no, i en canvi, si fos 24628 ens diria que sí.   2.3.24  El  doble  parell.  Dissenyeu  un  algorisme  que  donat  un  nombre  enter  positiu  que introduirà l’usuari, ens digui si el nombre és un doble parell. Un nombre és un doble parell si és parell  i a més  té un nombre parell de  xifres.  Intenteu  cercar una  solució que  superi el possible problema d’overflow.  Per exemple, si el nombre fos 8213 ens diria que no, si fos 74432 ens diria que no, i en canvi, si fos 746282 ens diria que sí.   2.3.25 Els múltiples. Dissenyeu un algorisme que calculi tots els nombres enters més grans que 1 i més petits que 10000, que siguin cap‐i‐cua i múltiples de 13.  2.3.26 HB.  La més  popular  cerveseria  de München,  anomenada HoffBrau  (HB),  vol  fer  la competència  a  la  seva  gran  rival  anomenada  Heidelberg.  Ambdues  cerveseries  són conegudes arreu del món per la gran qualitat i varietat de les cerveses que ofereixen. Però a la cerveseria Heidelberg  tenen  l’especialitat de guardar  les copes de cervesa en unes piles triangulars que els hi facilita el servei de la cervesa, i li dóna un toc d’originalitat al local i un punt més d’atracció per a la clientela.   Per això, a HB volen fer‐li la competència, i han decidit que ells també apilaran les copes de cervesa, però en lloc de triangles, ells formaran quadrats:   

46 

Y Y Y Y Y Y Y Y Y 

 Però  se’ls hi presenta un problema  semblant  al de  la  cerveseria Heidelberg. No qualsevol nombre de  copes poden  apilar‐se de  forma quadrangular. Per exemple 9  copes  sí que es poden apilar, però en canvi 8 no. Ajudeu‐los dissenyant un algorisme que donat un nombre enter  positiu  de  copes  que  donarà  l’usuari,  calculi  quantes  i  quines  agrupacions quadrangulars diferents es poden formar amb el nombre de copes especificat.   Per exemple, amb 11 copes es poden formar 3 agrupacions diferents: de 1 copa, de 4 copes o  de  9  copes.  Només  es  poden  utilitzar  els  operadors  aritmètics  bàsics:  suma,  resta, multiplicació, quocient i residu de la divisió.  2.3.27  HB  (2).  La  més  popular  cerveseria  de  München,  anomenada  HoffBrau  (HB)  és coneguda  arreu  del món  per  la  gran  qualitat  i  varietat  de  les  cerveses  que  ofereix.  A  la cerveseria  HB  tenen  l’especialitat  de  guardar  les  copes  de  cervesa  en  unes  piles quadrangulars  (amb el nombre de copes > 1), que els hi  facilita el servei de  la cervesa,  i  li dóna un toc d’originalitat al local i un punt més d’atracció per a la clientela. Per exemple:  

Y Y   Y Y Y Y Y  Y Y Y     Y Y Y 

 Però se’ls hi presenta un problema. No qualsevol nombre de copes poden apilar‐se de forma quadrangular. Per exemple 9 copes sí que es poden apilar, però en canvi 8 no. Ajudeu‐los dissenyant un algorisme que donat un nombre enter positiu de copes que donarà  l’usuari, calculi quantes  i quines agrupacions quadrangulars es poden formar amb el nombre exacte de copes especificat que minimitzin el nombre d'agrupacions a efectuar i maximitzi el nombre de copes utilitzades, tot calculant el nombre de copes sobrants. Per exemple, amb 11 copes es pot  formar 1 agrupació de 9 copes,  i en sobren 2. Amb 24 copes, es pot formar 1 agrupació de 16 copes i 2 agrupacions de 4 copes, i no en sobre cap. Si us cal podeu utitilitzar  la  funció ent, que donat un nombre  real, calcula  la part entera del nombre.  2.3.28 Els múltiples variables. Dissenyeu un algorisme que donat un nombre enter n (n > 0) que proporcionarà l’usuari, calculi tots els nombres enters més grans que 1 i més petits que 100000, que siguin cap‐i‐cua i múltiples de n.   

47 

48 

3. ALGORISMES SEQÜENCIALS i ANÀLISI DESCENDENT   Per  als  exercicis  que  tracten  dues  o més  seqüències  podeu  suposar  que  cadascuna  està emmagatzemada en un dispositiu perifèric d'entrada diferent. Així doncs, es pot  llegir   de qualsevol  dispositiu,  utilitzant  les  instruccions  de  lectura  d'aquesta  forma:  llegir (Seq1,<variable1>), llegir (Seq2,<variable2>), etc.  

3.1.1 Donada una  seqüència de nombres enters acabada en  zero, dissenyeu un algorisme que calculi la seva suma.  

3.1.2 Donada una seqüència de valors d'una variable aleatòria X, dissenyeu un algorisme que compti el nombre d'elements mancants o invàlids (missing values) que venen identificats pel codi 99999, i el nombre d'elements vàlids o útils.  

3.1.3 Donada una seqüència de caràcters acabada en un punt  ('.'), dissenyeu un algorisme que compti el nombre de caràcters 'A' que hi apareixen.        3.1.4 Donada una seqüència de caràcters acabada en un punt, dissenyeu un algorisme que trobi la primera vocal que apareix en el text.  

3.1.5 Donada una seqüència de nombres reals positius acabada per un zero, dissenyeu un algorisme que calculi la mitjana, la variància i la desviació tipus dels mateixos.   

3.1.6 Donada una seqüència de caràcters acabada en un punt, dissenyeu un algorisme que compti el nombre de parelles ('L', 'A') que hi ha en el text.  

3.1.7 Donada una seqüència de caràcters acabada en un punt, dissenyeu un algorisme que calculi el nombre de mots que hi apareixen.  

3.1.8 Donada una seqüència de nombres enters acabada en 0, dissenyeu un algorisme que calculi la seqüència de les sumes parcials.  

3.1.9 Dissenyeu un algorisme que faci la còpia d'un text acabat en un punt, eliminant tots els espais en blanc que contingui.  

3.1.10 Donada una seqüència de nombres enters acabada en 0, dissenyeu un algorisme que determini si només està formada per nombres positius.  

3.1.11 Donada una  seqüència de  valors d'una  variable  aleatòria X de  tipus  categòric, que indica el sexe en codificació alfanumèrica ('M' o 'F'), dissenyeu un algorisme que la reponderi en una seqüència on la codificació sigui numèrica (1 o 2).  

3.1.12 Donada una seqüència d'enters acabada en 0:  

a)  Escriviu  un  algorisme  que  decideixi  si  un  valor  donat  v  pertany  o  no  a  la seqüència. 

49 

     b) Resoleu l'apartat anterior suposant que la seqüència és creixent.  

3.1.13 Dissenyeu un algorisme que calculi el nombre de caràcters que segueixen a un donat en un text. S'ha de mostrar un missatge especial en cas que aquest caràcter no pertanyi a la seqüència.  

3.1.14  Dissenyeu  un  algorisme  que  decideixi  si  una  seqüència  d'enters  acabada  en  0 compleix alguna de les següents propietats:        a) És creixent.       b) És estrictament monòtona.       c) És monòtona.  

3.1.15 Dissenyeu un algorisme que determini si totes  les paraules d'un text  (acabat en  '.'), comencen per la mateixa lletra.  

3.1.16  Dissenyeu  un  algorisme  que  calculi  el  nombre  de  valors  diferents  que  té  una seqüència creixent de nombres enters (acabada en 0).  

3.1.17 Dissenyeu un algorisme que calculi el nombre de paraules d'un text que acaben en 'S'.  

3.1.18 Dissenyeu un algorisme que elimini tots els espais en blanc inútils d'un text. Un blanc no és necessari quan en precedeix a un altre, o bé si es troba a l'inici o a la fi del text.  

3.1.19 Donada una seqüència de caràcters acabada en un punt, dissenyeu un algorisme que compti el nombre de vegades que apareix el mot LES.  

3.1.20 Donada una seqüència de caràcters acabada en un punt, dissenyeu un algorisme que compti el nombre de mots que acaben en ‐CIO.  

3.1.21 Donades les seqüències de caràcters S1 i S2, dissenyeu un algorisme que determini si són iguales.  

3.1.22 Dissenyeu un algorisme que faci el següent tractament a un text:   •  Elimini  les  vocals  tret  d'aquelles  que  formin  part  d'un  grup  de  vocals  consecutives  a l'inici de paraula.  • Col∙lapsi els segments formats per una mateixa consonant de longitud més gran que 1, en un de longitud 1.  

 Suposarem que una consonant és un caràcter que no és una vocal, ni és un '.' ni un ' '.  3.1.23 Dissenyeu un algorisme que determini si dues seqüències numèriques creixents tenen cap element en comú.  

50 

3.1.24 Siguin F i G dues seqüències estrictament creixents de nombres enters. Dissenyeu un algorisme que calculi el nombre de valors que apareixen a ambdues seqüències.  

3.1.25 Siguin F i G dues seqüències estrictament creixents de nombres enters. Dissenyeu un algorisme que determini si existeixen f ∈ F i g ∈ G tal que |f–g|<9.  

3.1.26 Siguin F i G dues seqüències creixents de nombres enters. Dissenyeu un algorisme que calculi la distància entre F i G. Definim la distància entre dues seqüències com:              mín { |f – g|: f ∈ F, g ∈ G }  

3.1.27 Repetiu l'exercici anterior, però ara sense suposar que siguin creixents.    

3.1.28 Donades tres seqüències creixents de nombres enters F, G i H que tenen si més no un element comú, dissenyeu un algorisme que calculi el mínim comú.  

3.1.29 Donada  una  seqüència  d'enters,  dissenyeu  un  algorisme  que  calculi  el  nombre  de segments creixents maximals de la mateixa (un segment és una tira d'elements consecutius de  la  seqüència;  un  segment  és  creixent maximal  quan  no  està  inclòs  en  cap  segment creixent més llarg).  

3.1.30 Donada una seqüència d'enters, dissenyeu un algorisme que calculi  la  longitud més gran dels segments (veure exercici anterior) formats pel mateix valor. Exemple: Si la seqüència fos 3, 4, 4, 4, 1, 5, 5, 5, 5, 0 llavors la longitud màxima seria 4.  

3.1.31 Considerem la successió de potències de 2: 1, 2, 4, 8, ... Dissenyeu els algorismes que permetin resoldre els següents problemes:  

a) Donats x i y tal que 0 ≤ x ≤ y, escriure les potències de 2 que estiguin compreses entre aquests dos valors. 

 b) Per un cert x > 0 donat, calcular la part entera de log2(x), és a dir, l'enter m tal que 2m 

≤ x < 2m+1.  

3.1.32 En una cinta tenim una seqüència xn  xn‐1  ...  x1  x0  ‐1  de zeros i uns acabada per un ‐1. Aquesta seqüència és la representació binària del número            xn 2n + xn‐1 2n‐1 + ... + x1 2 + x0  

Dissenyeu un algorisme que calculi el número representat sense utilitzar vectors.  

3.1.33 Dissenyeu  un  algorisme  que  determini  si  un  enter  positiu  és  perfecte,  és  a  dir,  si coincideix amb  la  suma dels  seus divisors  (diferents al valor donat). Per exemple, 6 és un número perfecte perquè 1 + 2 + 3 = 6.  

3.1.34 Dissenyeu un algorisme que donada una  seqüència de valors enters acabada en 0, determini si tots els elements són cap‐i‐cua. No es poden utilitzar vectors. 

51 

 3.1.35 Dissenyeu un  algorisme que donat un  text  (seqüència de  caràcters  acabada en un punt), calculi la llargària mitjana de les paraules del text. El text només conté espais en blanc i lletres de l'alfabet.  3.1.36 Dissenyeu un  algorisme que donat un  text  (seqüència de  caràcters  acabada en un punt), calculi quantes paraules hi ha que tinguin la mateixa longitud de la primera paraula. El text només conté espais en blanc i lletres de l'alfabet. Es pot suposar que com a mínim hi ha una paraula.  3.1.37  Anàlisi  estadística  descriptiva  simple.  Dissenyeu  un  algorisme  que  donada  una seqüència de nombres reals  finalitzada amb un 9999.0,  i que representa una mostra d'una variable aleatòria, faci unà anàlisi estadística descriptiva simple de  la seqüència. S'haurà de calcular  el  valor mínim,  el  valor màxim,  el  nombre  de  valors  de  la  seqüència  i  la mitjana mostral de la seqüència.  

——————————————  

3.2.1 El poema (1). Donada una seqüència de caràcters acabada en un punt tal que els seus caràcters representen un poema, dissenyeu un algorisme que calculi si tots els versos tenen el mateix nombre de síl∙labes.   Considerarem que una síl∙laba és un grup de vocals consecutives o bé una vocal    i que l'accentuació no  influeix. Així mateix  tampoc hi ha  sinalefes. Els versos estan  separats pel caràcter '/'.  

3.2.2 Donada una seqüència d'enters acabada per 0, dissenyeu un algorisme que calculi  la suma dels nombres primers i la dels no primers.  

3.2.3 Dissenyeu un algorisme que implementi el joc de l'oca (per a 6 jugadors) amb un nivell d'abstracció adequat.  

3.2.4 Dissenyeu un algorisme que calculi el factorial dels nombres primers d'una seqüència d'enters acabada en 0.  

3.2.5 Dissenyeu una funció que donat un número natural, proporcionat per l'usuari, calculi la seva arrel digital. Per a obtenir aquesta arrel digital es procedeix de  la següent manera: es calcula un nou nombre natural resultant de sumar els dígits que el componen i el procés es repeteix fins que el resultat obtingut té un sol dígit.    Per exemple, Arrel_Digital (761365) = 1    3.2.6 Dissenyeu una funció que calculi la suma dels n primers termes de la successió:               (ai) = i,  i ≥ 0.  

3.2.7 Dissenyeu una funció que calculi la suma dels n primers termes de la successió:               (ai) = i2,  i ≥ 0.  

52 

3.2.8 Dissenyeu una funció que calculi el producte dels n primers termes de la successió:               (ai) = i,  i ≥ 1.  

3.2.9 Dissenyeu una funció que calculi la suma dels n primers termes de la successió:               (ai) = 1/(i!),  i ≥ 0.  

3.2.10 Dissenyeu una funció que calculi la suma dels n primers termes de la successió:               (ai) = 1/i,  i ≥ 0.  

3.2.11 Dissenyeu funcions per als dos exercicis anteriors que sumin la successió en un ordre diferent ( d'esquerra a dreta o de dreta a esquerra).   Per què s'obtenen resultats diferents per a grans valors de n. Quin dels procediments és el més adequat?  

3.2.12 Els codis secrets. Durant  la Segona guerra mundial es va  tornar a posar de moda el tema  de  la  criptografia  (codis,  codificacions,  xifrats,  descodificacions,  ...).  Els  agents  de cadascun  dels  bàndols  usaven  missatges  xifrats  en  un  codi  secret  ‐en  principi‐  per  a comunicar‐se  sense  que  l'altre  bàndol  el  podés  descodificar.  Però  heus  ací  que  amb  els esforços de Jean Moulin, etc. els aliats van descobrir el codi dels alemanys i aquestos el dels aliats.     Dissenyeu un algorisme que permeti xifrar una seqüència de codis  i missatges que rep com a entrada i generi la seqüència de missatges (un a cada línia) ja codificats, com a sortida.    La seqüència de codis i missatges començarà i acabarà amb el caràcter '*'. Cada parell de codi  i missatge associat estan separats del següent parell pel caràcter  '/'. Cada codi  i el seu missatge associat estan separats pel caràcter '#'.   Un missatge  pot  estar  format  per  lletres,  espais  en  blanc  i  els  signes  de  puntuació següents ('.', ',', ';', '?'). També pot ser buit, i per tant, generarà una línia en blanc a la sortida.    La  codificació  es  farà  canviant  cadascuna  de  les  lletres  del missatge  per  la  lletra  que s'obté desplaçant tantes posicions (segons indiqui el codi associat corresponent) a la dreta o a l'esquerra de la lletra original dins l'alfabet (ABCDEFGHIJKLMNOPQRSTUVWXYZ) de forma cíclica. Els espais en blanc i els signes de puntuació es deixaran tal cual.    Els codis poden ser:               R       —> Indica 1 desplaçament cap a la dreta (Right)           RR    —> Indica 2 desplaçaments cap a la dreta            RRR  —> Indica 3 desplaçaments cap a la dreta            L  —> Indica 1 desplaçament cap a l'esquerra(Left)           LL  —> Indica 2 desplaçaments cap a l'esquerra           LLL   —> Indica 3 desplaçaments cap a l'esquerra  També pot haver‐hi un  codi buit, el qual  voldrà dir que el missatge  corresponent  s'ha de deixar tal i com està.    Per exemple,      

53 

 *R#TROPES  I  MATERIAL  DE  GUERRA?/LL#MOVIMENT  DE  SOLDATS.  ANEU  A   NORMANDIA/RRR#/#                   ADEU.*    Ha de generar,                 ———————————————————————           USPQFT J NBUFSJBM  EF HVFSSB?           KMTGKCLR BC QMJBYRQ. YLCS Y LMPKYLBGY                               ADEU.              ———————————————————————  3.2.13 La calculadora. Es vol que dissenyeu un algorisme que permeti fer càlculs senzills com una  calculadora  de  butxaca.  Es  tracta  de  que  es  pugui  avaluar  una  sèrie  d'expressions numèriques (concretament de tipus enter) que l'usuari donarà. Un cop avaluada cadascuna de  les  expressions,  s'ha  de  donar  el  resultat  de  la  seva  avaluació  (tal  i  com  ho  feria  una calculadora).   Cada expressió finalitza amb el caràcter #. Hi haurà una expressió especial –no numèrica– que  consisteix  en  la  paraula  FI,  que  indica  que  s'ha  acabat  la  seqüència  d'expressions  a avaluar.   Les expressions numèriques enteres estan en notació infixa. Tots els operadors tindran la mateixa prioritat,  i per  tant, s'avaluaran d'esquerra a dreta. Pot ser que  l'expressió només consisteixi en un valor enter (sense cap operador). Els quatre operadors binaris que poden aparèixer són:               +  (suma entera)             –  (diferència entera)             *  (producte enter)              :  (quocient de la divisió entera)  Per exemple:      13    # –> 13 15    +    4# –> 19   2 : 3  *   4  – 5 *   3 +  30  # –> 15    4 + 7  : 2   # –> 5    FI   #  Podeu suposar que els números seran prou petits i no hi haurà overflow. Així mateix, també suposarem que no hi haurà cap error en la sintaxi de les expressions.  

54 

3.2.14 El Doble o res. Darrerament, els jugadors del Casino de Montecarlo juguen a un nou joc que està  causant un gran  impacte aquesta  temporada: el Doble o  res, on els  jugadors aposten gran quantitat de diners (en forma de fitxes), i sempre han de doblar l'aposta de la jugada anterior, o bé deixar el  joc. Per tal de controlar que  la seqüència d'apostes que fan segueix  les  normes  del  joc,  dissenyeu  un  algorisme  que  donat  un  text  (seqüència  de caràcters acabada en un punt) que representa les fitxes apostades per un jugador, verifiqui si el text segueix o no les normes del joc.  El  text està  format únicament per espais en blanc  i  '*'. El  text  consisteix en una  sèrie de seqüències formades per caràcters '*' consecutius (les fitxes apostades en una jugada), que estan separades entre elles per un o més espais en blanc. L'algorisme ha de analitzar el text i decidir si es compleix  la normativa del  joc,  facilitant així  la  feina dels croupiers del Casino. Per exemple, pels dos textos següents els resultats haurien de ser:     ***  ******    ************   ************************.      Sí *  **  ***  ****    ********    .              No  3.2.15 La codificació *. Dissenyeu un algorisme que permeti recodificar un text  (seqüència de  caràcters  finalitzada  amb  un  punt)  que  estarà  format  per  parelles  de  números  enters positius (entre 0  i 9)  i  les paraules següents, que vindran afectades per  la recodificació que indica  el  número.  El  número  indicarà  la  posició  de  la  lletra  corresponent  de  la  paraula següent, que ha de ser substituïda per un ‘*’ en el text recodificat.  Els números i les paraules estaran separades per un o més blancs. Si el número és més gran que  la  longitud de  la paraula, no es  realitzarà  cap  canvi en  la paraula  corresponent.  Si el número fos 0, tampoc es realitzarà cap canvi.  Per exemple, si la seqüència d’entrada fos:     2 el  7 dissabte  1 a  5 les    3  quatre  2 de  1 la  5 tarda  1 és  1 un 2 bon 3 dia  0 i  1 una 4 bona 1 hora  4 per 1 a 3 fer 6 exàmens    .  La sortida seria:  e* dissab*e * les cu*tre d* *a tard* *s *n b*n di* i *na bon* *ora per * fe* exáme*s .  3.2.16  Els parèntesis. Dissenyeu un algorisme tal que, donada una expressió, que es  llegeix del dispositiu d’entrada per defecte, ens indiqui si l’expressió està ben parentitzada. Es a dir, si els parèntesis estan ben posats. L’expressió vindrà finalitzada amb un punt.  Per exemple, són expressions vàlides:  

(a) ((a + 1) * (8 ‐ b)) (f(a) + f(b)) / 2  

i en canvi aquestes altres no ho són:  

55 

((x + y) (4 * 3) (f(x))) ‐ (7 ‐ b * 2) g(y ‐ 2) * 4) )b( 

 3.2.17 El text creixent. Dissenyeu un algorisme que permeti decidir si un text (seqüència de caràcters finalitzada amb un punt) és un text creixent o no. Un text es diu que és creixent si la  longitud de cadascuna de  les paraules forma una seqüència de nombres creixent. El text estarà format per lletres,  i espais en blanc.  Per exemple:    la taula   estava trencada  .        →   És creixent   la  bicicleta era    blanca .      →   No és creixent el   gos  era    molt  ferotge  .          →   És creixent  3.2.18  El text enllaçat. Dissenyeu un algorisme tal que donat un text (seqüència de  lletres  i espais) finalitzat amb un punt, ens indiqui si el text està enllaçat o no. Un text està enllaçat si la primera lletra de cada paraula coincideix amb la darrera lletra de la paraula anterior.    Per exemple,  

 Un noi il∙luminava amb la lot.   →  No Un noi il∙luminava amb bombetes  . →  Sí El camí estava desert . →  No El lloro oferia ametlles   .  →  Sí  3.2.19  Els  telegrames. Dissenyeu un  algorisme que  calculi  i  imprimeixi  la  facturació d’una seqüència de telegrames. La seqüència de telegrames és un text que finalitza amb un punt, i els telegrames estan separats amb el caràcter ‘*’. Els telegrames estan formats per paraules i espais  en  blanc.  L’algorisme  ha  d’escriure  per  cada  telegrama  la  següent  informació:  el número del  telegrama, el nombre de paraules que  té  i el preu del  telegrama. El preu del telegrama  es  comptarà  a  partir  del  nombre  de  paraules  de  que  consta.  El  preu  de  cada paraula serà de 0.12 euros. Al final de processar tots els telegrames, ha de donar un resum de la facturació que constarà del nombre total de telegrames, el nombre total de paraules i el preu total en euros.  Per exemple, si la seqüència fos:    HOLA   MARIA     TINC     MOLTA FEINA  *JOAN PLEGARÉ   TARD   * ENS VEÏEM   DEMÀ  .  Donaria lloc a:  Telegrama 1  No. de paraules: 5  Preu: 0.6 EUR Telegrama 2  No. de paraules: 3  Preu: 0.36 EUR Telegrama 3  No. de paraules: 3  Preu: 0.36 EUR  

56 

TOTAL No. de telegrames: 3 No. de paraules:  11  Preu: 1.32 EUR  3.2.20  El  text  cap‐i‐cua.  Dissenyeu  un  algorisme  tal  que  donat  un  text  sense  accents (seqüència de lletres i espais) finalitzat amb un punt, ens indiqui si el text és cap‐i‐cua o no. Un text és cap‐i‐cua si la primera lletra de la primera paraula coincideix amb la darrera lletra de la darrera paraula.    Per exemple,  

 Això es massa.   →  Sí Avui fa calor  . →  No La Facultat ampliara la superficie . → No En Ramon no ho te .  → Sí  3.2.21  Les  síl∙labes.  Dissenyeu  un  algorisme  que  donada  una  frase,  l’analitzi  i  compti  el nombre de  síl∙labes de cada paraula de  la  frase,  i del  total de  la  frase. La  frase és un  text (format per lletres i espais en blanc) que finalitza amb un punt. Considereu que una síl∙laba és un grup de vocals (una o més) consecutives. L’algorisme ha d’escriure per cada paraula la següent informació: el número correlatiu de la paraula i el nombre de síl∙labes que té. Al final de  processar  totes  les  paraules,  ha  de  donar  el  nombre  total  de  paraules  de  la  frase,  el nombre total de síl∙labes de la frase, i el nombre promig de síl∙labes per paraula.  Per exemple, si la seqüència fos:     Endevina quantes síllabes tindrà aquesta frase tan eixerida.  La sortida hauria de ser:  Paraula 1  No. de síl∙labes: 4   Paraula 2  No. de síl∙labes: 2   Paraula 3  No. de síl∙labes: 3 Paraula 4  No. de síl∙labes: 2   Paraula 5  No. de síl∙labes: 3   Paraula 6  No. de síl∙labes: 2   Paraula 7  No. de síl∙labes: 1   Paraula 8  No. de síl∙labes: 4      

 TOTAL  No. de paraules: 8  No. de síl∙labes: 21  No. promig de síl∙labes: 2.625    3.2.22  El  text  ordenat.  Dissenyeu  un  algorisme  tal  que  donat  un  text  sense  accents (seqüència de lletres i espais), però amb lletres en majúscules o minúscules que finalitza amb un punt, ens  indiqui si el text és ordenat o no. Un text és ordenat si  les primeres  lletres de 

57 

cada  paraula  formen  una  seqüència  de  lletres  ordenada  lexicogràficament  creixent  o decreixent.    Per exemple,  

 Això es massa.   →  Sí Vigila que fas . →  Sí En Ignasi  va a Viena. →  No Mira qui ve  . →  Sí Tira el paper. →  No Avui fa calor  . →  No Això agrada a Amelia . →  Sí  3.2.23 La paraula més gran. Dissenyeu un algorisme que calculi quina és la paraula més gran d’un text i quina és aquesta longitud màxima. El text està format per lletres i espais en blanc, i  finalitza  amb  un  punt.  Les  paraules  tenen  com  a molt  20  caràcters.  Si  hi  ha més  d’una paraula d’igual longitud, l’algorisme donarà com a resultat la primera que hagi trobat.  Per exemple, si la seqüència fos:    No sabem quin és el mot més llarg de la frase  .  La sortida hauria de ser:    Paraula més llarga: sabem   Longitud: 5   3.2.24  El  text  cap‐i‐cua  (2).  Dissenyeu  un  algorisme  tal  que  donat  un  text  sense  accents (seqüència de lletres i espais) finalitzat amb un punt, ens indiqui si el text és cap‐i‐cua o no. Un text és cap‐i‐cua si totes  les seves paraules són cap‐i‐cua. Una paraula és cap‐i‐cua si  la primera i la darrera lletra de la paraula coincideixen.    Per exemple,   Apa.   →  Sí Apa quina calor que fa . →  No Pep ampliara superficies . → Sí No ho tinc. → No  3.2.25 El text cap‐i‐cua (3). Dissenyeu un algorisme que calculi si un text és cap‐i‐cua o no. El text està format per lletres i espais en blanc, i finalitza amb un punt. Un text és cap‐i‐cua si la primera i la darrera paraula tenen la mateixa longitud. Com a mínim hi ha una paraula en el text.     Per exemple:  La guerra sembla inevitable  .           → NO Quan vindrà en Joan .             →  SÍ 

58 

La casa es molt maca.           → NO Doncs no crec que pugui venir.        →  SÍ Avui acabarem la feina    .          → NO Senyores i senyors estigueu atents a la pantalla .    →  SÍ  3.2.26 El text homosil∙làbic. Dissenyeu un algorisme que calculi si un text és homosil∙làbic o no, i en el cas que ho sigui, ens digui cuantes síl∙labes tenen. El text està format per lletres, sense accents, i espais en blanc, i finalitza amb un punt. Un text és homosil∙làbic si totes les paraules tenen el mateix nombre de síl∙labes. Considereu que una síl∙laba és una agrupació de una o més vocals consecutives. Com a mínim hi ha una paraula en el text. Tota paraula té com a mínim 1 síl∙laba. Per exemple:  Que tingueu sort  .         → NO és homosil∙làbic Cap nen té son .         →  SÍ és homosil∙làbic. Totes tenen 1 síl∙laba La casa es molt maca.     → NO és homosil∙làbic Moltes capses estan netes   .   →  SÍ és homosil∙làbic. Totes tenen 2 síl∙labes  3.2.27 El  text homovocàlic. Dissenyeu un algorisme que calculi si un  text és homovocàlic o no,  i en el cas que ho sigui, ens digui cuantes vocals tenen. El text està format per  lletres,  i espais en blanc, i finalitza amb un punt. Un text és homovocàlic si totes les paraules tenen el mateix nombre de vocals. Per exemple:      Hola  noi   .           → SÍ és homovocàlic. Totes tenen 2 vocals   Que  tingueu    sort  .         → NO és homovocàlic Cap   nen  té  son .           → SÍ és homovocàlic. Totes tenen 1 vocal     La  casa  és molt    maca.      → NO és homovocàlic   Moltes    capses  estan netes   .    → SÍ és homovocàlic. Totes tenen 2 vocals  3.2.28  El  text  sil∙làbic  creixent.  Dissenyeu  un  algorisme  que  calculi  si  el  text  és  sil∙làbic creixent. És a dir,  si  la  seqüència  formada pels nombres de  síl∙labes  corresponents a  cada paraula formen una seqüència creixent. Considereu que una síl∙laba és un grup d’una o més vocals consecutives i que l'accentuació no influeix. Així mateix tampoc hi ha sinalefes. El text està format per lletres, i espais en blanc, i finalitza amb un punt. Per exemple:      El noi està tranquil   .         → SÍ és sil∙làbic creixent   Que  tingueu    sort avui .         → NO és sil∙làbic creixent Cap   nen  té  son .           → SÍ és sil∙làbic creixent       La  casa  és molt    maca.      → NO és sil∙làbic creixent   Vindreu vosaltres seguidament.    → SÍ és sil∙làbic creixent.   3.2.29  El  text  bicreixent.  Dissenyeu  un  algorisme  tal  que  donat  un  text  sense  accents (seqüència de lletres i espais), que finalitza amb un punt, ens indiqui si el text és bicreixent o no. Un text és bicreixent si tant  la seqüència  formada per  les  longituds de cada paraula en posició parell com  la seqüència formada per  les  longituds de cada paraula en posició parell són seqüències creixents.    Per exemple,  amb les següents entrades, les sortides serien: 

59 

 Aixo es massa.   →  Sí Vigila que fas . →  No En Jan ve ara. →  Sí El noi està dret   →  Sí El nen voldria anar deslligat sempre . →  Sí Na Maria està sola . →  No Aixo agrada a Amelia . →  No  3.2.30  El  poema  homoestròfic.  Dissenyeu  un  algorisme  que  calculi  si  un  poema  és homoestròfic. És a dir, si totes  les estrofes del poema tenen el mateix nombre de síl∙labes. Les síl∙labes d’una estrofa estan constituïdes per les síl∙labes de tots els versos que la formen. El poema està organitzat en estrofes, i les estrofes en versos. Considereu que una síl∙laba és un grup d’una o més vocals consecutives i que l'accentuació no influeix. Així mateix tampoc hi ha  sinalefes. El  text està  format per  lletres, comes,  i espais en blanc,  i  finalitza amb un punt. Els versos estan separats pel caràcter ‘/’ i les estrofes pel caràcter ‘*’. Per exemple:  El meu somni lent  /  de la gran pau blanca / sota el cel clement * Passo pels camins / encalmats que porten / la claror dels cims  *  És un temps parat  / a les vinyes altes,   / per damunt del mar  *  He parat el temps / i records que estimo / guardo de l'hivern   .         → NO és homoestròfic  Adéu siau, turons, per sempre adéu‐ siau / oh serres desiguals que allí en la pàtria mia / dels núvols e del cel de lluny vos distingia / per lo repòs etern, per lo color més blau  * Adéu tu, vell Montseny, que, des ton alt palau / com guarda vigilant, cobert de boira e neu / guaites per un forat la tomba del jueu / e almig del mar immens la mallorquina nau.        → SÍ és homoestròfic 

60 

4. CONSTRUCTORS DE TIPUS i ALGORISMES   

4.1.1 Considereu les dues accions següents:    acció swap1(ent x, y són real) és   acció swap2(ent/sort x, y són real) és      var t és real fvar           var t és real fvar      t ← x; x ← y; y ← t            t ← x; x ← y; y ← t   facció            facció              

Si a té el valor 1.2 i b té el valor 1.5, quin és el resultat de les dues crides següents ?        swap1(a,b)         swap2(a,b)  

4.1.2 Donada  la següent acció:        acció silly(ent x és enter; ent/sort y és enter) és          var z és enter fvar         x ← 5; y ← 6; z ← 7       facció  

Quina és la sortida que es produeix a l'executar les tres línies de codi següents ?      x ← 1; y ← 2; z ← 3;     silly(y,x);     writeln(x,y,z)  

4.1.3 Considereu la següent funció:      funció  F(ent/sort x és enter) retorna enter és        retorna (x) ;       x ← x+1     ffunció  Són iguals els valors de les expressions lògiques: x = F(x)  i  F(x) = x  ?  

4.1.4  Escriviu  un  subprograma  que  calculi  el  valor  d'una  inversió  I,  després  de  N  anys d’interès a un R per cent compost. Que ha de ser el subprograma; una acció o una funció ? Els paràmetres s'han de passar per valor o per referència ?  4.1.5 Dissenyeu una funció parametritzada que donat un vector que conté una seqüència de caràcters  (com  a molt  20  i  finalitzada  en  un  punt),  i una  variable de  tipus  caràcter  (car), retorni:    a) 0, si el contingut de car no apareix en la seqüència.   b) i, essent i la primera aparició del contingut de car en la seqüència.  

4.1.6 Dissenyeu una funció amb paràmetres n, x que retorni el valor de la següent suma:  

61 

            ∑    (‐1)i   x2i / (2i)!                   0≤i≤n  4.1.7 Dissenyeu una funció que calculi una aproximació de la integral:          x   

      ∫    e‐u2  du = x  ‐  x3 / 3 * 1!  +  x5 / 5 * 2!  ‐  x7 / 7 * 3!  + . . .        0 

 4.1.8 Dissenyeu una funció que calculi una aproximació d'ex. Recordeu que:          ex = 1 + x + x2 / 2! + x3 / 3! + x4 / 4! + . . . 

 4.1.9 Dissenyeu  una  funció  dig(n,k)  que  retorni  el  valor  del  k‐èssim  dígit  de  la  dreta  del número n. Per exemple:                dig(32534,3) = 5               dig(321,6) = 0 

 4.1.10 Dissenyeu  una  funció  que  integri  una  funció  F(x)  real  i  de  variable  real,  entre dos punts a i b. Integrar una funció vol dir trobar l'àrea total entre aquests dos punts per sota de la corba.   Una forma de fer‐ho és aproximant l'àrea mitjançant una sèrie de rectangles. La funció ha de poder integrar una funció arbitrària F, entre dos punts qualsevol a i b.  

——————————————  

4.2.1 Dissenyeu un algorisme que compti el nombre de vegades que apareix el primer mot d'una seqüència de caràcters acabada en un punt ('.'), utilitzant només un vector.  

4.2.2 Dissenyeu un algorisme que donada una seqüència d'enters acabada en 0 (com a molt constituïda  per  50  números),  llegeixi  la  seqüència,  la  posi  en  un  vector  i  doni  la  volta  al vector.  

4.2.3 Dissenyeu un algorisme que donada una frase o text (seqüència de caràcters acabada en un punt) calculi el nombre de mots palíndroms (cap‐i‐cua) que conté. Un mot és cap‐i‐cua si es llegeix igual d'esquerra a dreta que de dreta a esquerra.  

4.2.4 Donat un vector  f d'enters definit  sobre 1..n, dissenyeu un algorisme que escrigui  la seqüència d'elements de f suprimint els redundants. Un element de f és redundant si és igual a  un  element  anterior  del  vector.  No  podeu  utilitzar  un  vector  intermig  per  a  crear  la seqüència.    a) Estudieu el cas suposant que f no està ordenat.   b) Suposeu ara que f està ordenat creixentment.   c) Repetiu els dos apartats anteriors escrivint la seqüència en el mateix vector.  

4.2.5 Donat un text, dissenyeu un algorisme que compti el nombre de cops que es repeteix cada lletra de l'alfabet (freqüències). 

62 

 4.2.6  Repetiu  l'exercici  anterior,  però  ara  per  a  qualsevol  caràcter  que  apareixi  al  text. Considereu els caràcters en codi ASCII estès, on hi ha 256 caràcters diferents.  4.2.7  Siguin  a  i  b  dos  vectors  que  representen  dos  conjunts  A  i  B  de  nombres  enters. Dissenyeu un algorisme que emmagatzemi en un altre vector:    a) La intersecció de A i B. 

  b) La unió de A i B. c) Repetiu els apartats anteriors però ara suposant que els vectors estan ordenats. 

 4.2.8  Siguin A  i B  vectors  de  nombres  enters  sobre  1..n  i  1..m  respectivament  que  estan ordenats creixentment. Dissenyeu un algorisme que calculi el nombre de components i,j tal que A[i] + B[j] > 0.  

4.2.9 Dissenyeu un programa que generi quadrats màgics d'un nombre senar de dimensions, m. Un quadrat màgic és un tauler on a cadascuna de les caselles hi ha un número natural n diferent, 1 ≤ n ≤ m2, amb la propietat que cada fila i cada columna sumen el mateix i les dues diagonals també. Seguiu l'algorisme de Batcher:     1. Poseu un 1 a la casella superior a la central 

4. Avanceu posant el número següent (2, 3, 4, ...) a la casella situada a la dreta i amunt de l'actual. 3.  Si  la  casella  fos  ocupada,  reboteu  a  partir  de  la  casella  ocupada  cap  amunt  i  a l'esquerra. 

  4. Si s'escau, considereu que el tauler és cíclic.   5. Mai es rebotarà dues vegades. 

 4.2.10  Dissenyeu  un  algorisme  que  transformi  un  vector  de  caràcters  a  l'enter  que representen (el deixi en una variable entera).  

4.2.11  Dissenyeu  un  algorisme  que  transformi  un  enter  en  un  vector  de  caràcters  que representen els dígits de l'enter.  

4.2.12  Dissenyeu  un  algorisme  que  donat  un  valor  n  enter,  0  ≤  n  ≤  9999,  el  passi  a  la codificació en caràcters romans (I, II, III, IV, V, ..., X, ..., L, ..., C, ..., D, ..., M, ..., N, ..., P), on N representa el 5000 i P el 10000.  

4.2.13 Dissenyeu un algorisme que donat un número en caràcters romans el passi a  l'enter equivalent.  

4.2.14 Dissenyeu un algorisme que calculi el producte de dues matrius A (m x n) i B (r x s) de nombres reals.  

4.2.15 Sigui A un vector sobre 1..n que pren només els valors 0 i 1. Dissenyeu una acció que ordeni A en sentit creixent; l'única operació que es permet sobre el vector és l'intercanvi de dues components. Resoleu el problema realitzant un únic recorregut del vector.  

63 

4.2.16 Dissenyeu una acció que generi en ordre creixent  sobre un vector, els 500 primers números naturals que en  la seva descomposició en  factors primers només hi apareixin els números 2, 3 i 5.  

4.2.17 Donats n valors enters ordenats continguts en un vector A, dissenyeu un algorisme que escrigui tots els valors diferents continguts al vector.  

4.2.18 Dissenyeu un algorisme que calculi tots els números múltiples de 7 i cap‐i‐cua entre 0 i 10000.  4.2.19 Dissenyeu un algorisme que calculi An, ∀n ≥ 0, essent A una matriu de dimensions m x m.  

4.2.20 Dissenyeu  un  algorisme  que  calculi  exp(A) = ∑ Ai / i !,  essent  A  una                             1≤i≤n

     matriu quadrada de dimensions m x m.     4.2.21 Donada una seqüència de 100 valors numèrics que representen una variable aleatòria X  amb  valors mancants, dissenyeu un  algorisme que  imputi  als  valors mancants, el  valor: mitjana dels valors útils.  

4.2.22 Donada una seqüència de 100 valors numèrics que representen una variable aleatòria contínua X, dissenyeu un  algorisme que  la  recodifiqui en una  variable ordinal  segons uns límits  fixats  interactivament per  l'usuari  i que compti quantes observacions cauen en cada interval.  4.2.23 Dissenyeu un algorisme que donat un text, recodifiqui els caràcters segons el codi:        'A'   ——>   'C'     'J'    ——>   'R'      'S'    ——>   'P'       'B'   ——>   'N'     'K'   ——>   'H'     'T'    ——>   'E'       'C'   ——>   'U'     'L'    ——>   'S'      'U'   ——>   'Z'       'D'   ——>   'G'     'M'   ——>   'X'      'V'   ——>   'K'       'E'    ——>   'M'    'N'   ——>   'J'      'W'  ——>   'Y'       'F'    ——>   'V'     'O'   ——>   'O'     'X'   ——>   'Q'       'G'   ——>   'A'     'P'   ——>   'B'      'Y'    ——>   'W'       'H'   ——>   'F'     'Q'   ——>   'I'      'Z'    ——>   'D'       'I'    ——>   'L'      'R'   ——>   'T'    

4.2.24 Dissenyeu un algorisme que donat un text calculi el nombre de mots que són prefixos del primer.  

4.2.25 Dissenyeu un algorisme que cerqui en un vector d'enters de 50 posicions, el màxim d'entre ells.  

4.2.26 Repetiu l'exercici anterior però suposant ara que el vector està ordenat creixentment.  

4.2.27 Sigui A una matriu de nombres enters de n files i m columnes que verifica:        ∀j  :  1 ≤ j ≤ m  :  A[i, j] ≥ A[i+1, j]  per  i = 1 .. n‐1 

64 

      ∀i  :  1 ≤ i ≤ n  :  A[i, j] ≤ A[i, j+1]  per  j = 1 .. m‐1  

Sigui x un número enter per al que existeixen r i s tal que x = A[r, s]. Dissenyeu un algorisme que donat x com a entrada calculi r i s.  

4.2.28 Dissenyeu algorismes que determinin per a una matriu donada de números enters, A,  amb n  files  i m  columnes, el nombre de  components que  són positives o nul∙les,  sota  les següents consideracions:    a) No sabeu res més d'A.   b) A[i, j] és decreixent com s funció de i, i creixent com a funció de j.  

4.2.29 Donat  un  vector A  sobre  1..n de nombres  enters  tal que ∀i  :  1 ≤  i ≤ n  : A[i]  >  0, dissenyeu un algorisme que calculi el nombre de parelles j i k, que verifiquin:  

          ∑  A[i] = ∑   A[i]                                         1≤i≤j             k≤i≤n         

 4.2.30  Sigui  S  una  seqüència  de  nombres  enters.  Dissenyeu  un  algorisme  que  calculi  la longitud màxima dels segments si si+1 ... sn‐1 sn tal que ∀ j :  i ≤ j ≤ n :  si ≤ sj.  

4.2.31 Dissenyeu un algorisme que llegeixi fila a fila, una matriu de n x n elements on n és un paràmetre d'entrada.  L'algorisme ha de determinar  si  la matriu  s'ajusta a algun d'aquests casos:      a) Simètrica:       Aij = Aji  ∀i,j      b) Triangular superior:   Aij = 0   per  j = 1, ..., n‐1                           i = j+1, ..., n      c) Diagonal:      Aij = 0  sempre que i ≠ j  

4.2.32 Una matriu dispersa o espaiada (sparse matrix) es defineix com una matriu en la que la majoria d'elements són 0. Queda clar que s'està utilitzant molt espai de memòria, per a emmagatzemar elements amb informació molt poc significativa.   Un  sistema més eficient per a  representar una matriu dispersa de m x n elements és una matriu de k x 3 components  (representació  reduïda) en  la que es emmagatzema  la  fila,  la columna i els valors diferents de zero de la matriu original.  Dissenyeu  un  algorisme  que  llegeixi  una  matriu  dispersa,  fila  a  fila,  obtingui  la  seva representació reduïda i la imprimeixi en el format adequat.  

4.2.33 Dissenyeu un algorisme que  llegeixi una matriu, A, de valors enters per  files  (on  les dimensions, m  files  i n  columnes,  seran valors a  llegir prèviament)  i  calculi  si  la matriu és columna‐ordenada. És a dir, 

 (∀j : 1 ≤ j ≤ n : (∀i : 1 ≤ i < m : Ai,j ≤ Ai+1,j)). 

 

65 

4.2.34 Donat un  text  constituït per  frases  (seqüència de mots)  separades pel  caràcter  '*', dissenyeu un algorisme que escrigui  la  frase que conté més mots. Una  frase com a màxim conté 100 caràcters.  

4.2.35 Donada una seqüència de valors numèrics de 100 elements, dissenyeu un algorisme que calculi el valor mínim, el valor màxim, la mediana, i el primer i el tercer quartil (Q1 i Q3).  

4.2.36 Dissenyeu un algorisme que  recodifiqui  la seqüència numèrica de  l'exercici anterior segons els límits: Vmín, Q1, mediana, Q3 i Vmàx.  

4.2.37  Dissenyeu  un  algorisme  que  prenent  com  a  entrada  la  seqüència  recodificada  de l'exercici anterior, calculi per a cada tram de la nova variable definida, la mitjana dels valors originals.  

4.2.38 Dissenyeu un algorisme que sumi dues matrius donades de dimensions n x m.  

4.2.39 Un segment [p, q] d'un vector A definit sobre 1..n diem que és un segment "suau" si verifica:  

1 ≤ p < q ≤ n, ∀i,j :  p ≤ i, j ≤q  :  |A[i]–A[j]| ≤ 1  

Dissenyeu un algorisme que calculi la longitud màxima dels segments suaus d'A.  

4.2.40 Donat un vector creixent de nombres enters A definit sobre 1..n i un número enter k, k ≥ 0, dissenyeu un algorisme que calculi el nombre de parelles (i,j) tal que:            1 ≤ i ≤ j ≤ n,  A[j] – A[i] ≤ k  

4.2.41 Donada una matriu A de números enters de n x m components que és estrictament creixent per files i per columnes, dissenyeu una funció que calculi el nombre de components A[i, j] que verifiquen:  0 ≤ A[i, j] < 25.  

4.2.42 Donada una  seqüència S de nombres enters de  longitud n, dissenyeu un algorisme que calculi la suma màxima dels segments de S.  

4.2.43 Dissenyeu un algorisme que calculi la longitud màxima dels segments monòtons d'una seqüència S de nombres enters de longitud n.  4.2.44 Els polinomis. Dissenyeu les estructures de dades adients i un algorisme que calculi el producte de 2 polinomis  (de grau  inferior o  igual a n) amb  coeficients enters. L’algorisme haurà de llegir els dos polinomis segons el format,     [<signe>] <coeficient> X <grau> {<signe> <coeficient> X <grau>}*  per exemple,    +8x3‐2x1 que representa el polinomi 8 x3 ‐ 2 x    3x2‐1x0 que representa el polinomi 3 x2 ‐ 1  i calcular el producte donant el polinomi resultant. En el cas de l’exemple,  

66 

     24x5‐14x3+2x1 que representa el polinomi 24x5 ‐ 14 x3 + 2 x   4.2.45 Producte de números. Dissenyeu un algorisme que calculi el producte a*b, per a uns valors   enters positius donats, a  i b. Els valors enters a  i b s'especificaran  i  llegiran amb el següent format:     a#B1     b#B2   Els números a  i b, podran ser donats en qualsevol base Bi (1 < Bi ≤ 10). El resultat s'ha de donar en base 10.    Per exemple,  2102#3         106#7   Ha de donar  3575#10  Podeu  suposar  que  no  hi  haurà  problemes  d'overflow  en  efectuar  el  càlcul.  Si  no  féssim aquesta suposició, expliqueu com ho resoldríeu.  4.2.46 El barquer de Puigcerdà. El barquer del  llac de Puigcerdà,  ja  fa  temps que  rumia si amb  les noves  tecnologies  informàtiques,  el  seu  treball  seria una mica més  fàcil.  La  seva feina consisteix en llogar i vigilar les seves 20 barques, durant tot el dia. El barquer s'apunta en un quadern  les hores de sortida  i d'arribada de cadascuna de  les barques, per tal de fer una estadística –en acabar el dia– del  temps d'ocupació de cadascuna de  les barques  i de totes en conjunt. Evidentment una mateixa barca es pot llogar vàries vegades el mateix dia.    Dissenyeu un algorisme que rebi com a dades d'entrada  la seqüència d'informacions de les  hores  de  sortida  i  arribada  de  les  barques  (cada  unitat  d'informació  en  una  línia),  en aquest format:  

<número de la barca> <hora> <minut> <arribada/sortida>  El número de  la barca  (entre 1  i 20)  i  l'hora  i el minut  (de sortida o arribada) seran valors enters. L'arribada o sortida es codificarà amb un caràcter: 'A' per l'arribada i 'S' per la sortida. La seqüència finalitzarà amb un codi de barca igual a 0. Per exemple,  

3 9 0 S 12 9 10 S 3 9 30 A 5 9 43 S 

… 7 20 56 A 

0  El resultat ha de ser el càlcul del temps d'ocupació de cada barca  i el de totes, en conjunt. Suposarem que no hi ha cap mena d'incoherències: una barca no pot sortir/tornar si abans no ha tornat/sortit, les hores i minuts són correctes, etc.  4.2.47 La calculadora polonesa. Certes marques de calculadores de butxaca fan servir, per a representar i avaluar les expressions numèriques, la notació polonesa inversa (RPN). Aquesta consisteix en col∙locar els operadors en notació post‐fixa  (és a dir, després dels operands), 

67 

contràriament a la notació infixa habitual, on els operadors són enmig dels operands. Així les expressions en notació infixa següents serien equivalents en notació post‐fixa a:  

7 + 3  ≡ 7 3 +  (7 + 3) * (4 ‐ 2) ≡ 7 3 + 4 2 ‐ * 7 + (3 * 4) ‐ 2 ≡ 7 3 4 * + 2 ‐

 Fixeu‐vos que  amb  aquesta notació no  calen mai parèntesis. Dissenyeu un  algorisme que avaluï  expressions  numèriques  enteres  –que  l'usuari  introduirà–  formades  per  operands sempre positius  i sense signe,  i per operadors binaris, en notació polonesa  inversa  (RPN o post‐fixa).   Les expressions només podran tenir els 4 operadors numèrics binaris bàsics:           + –– suma         ‐  –– diferència          * –– multiplicació         / –– quocient de la divisió entera  Quan l'usuari ja no vulgui avaluar més introduirà el mot FI. Per exemple:  CLC>    7          3 + 10 CLC> 7   3 +   4 2 ‐ * 20 CLC> 8 4 /  5 ‐ 1 + ‐2 CLC> 7 3   4 * + 2 ‐ 17 ... CLC>    FI  Podeu suposar que les expressions són correctes i que no hi haurà overflow.  4.2.48 La loteria prehistòrica. Una de les primeres loteries de les que es tenen notícies és la loteria prehistòrica, que ha arribat fins a nosaltres gràcies a unes pintures rupestres trobades a  la  localitat de Santa  Lot de  la Roca. Pel que  sembla, aquesta  loteria es  jugava  la nit del solstici d’estiu en la tribu prehistòrica de l’esmentada vila, que estava formada per unes 100 persones. Per a poder jugar, les persones de la tribu interessades havien de donar una certa quantitat de diners,  joies  i altres productes valuosos al cap de  la tribu. Els participants (m) s’anaven numerant  (1,2,3, etc.)  i es posaven  formant un cercle al voltant del  foc  i anaven ballant. Llavors el bruixot de la tribu els hi comunicava el nombre màgic de la nit (n). Llavors, començaven a comptar a partir del primer,  i cada n participants eren eliminats del  joc. El procés es repetia fins que només en quedava un, que era el guanyador i rebia de mans del cap de la tribu tots els diners, joies, etc. Per exemple, per a m = 11 i n = 4,  la successió del joc seria: 4   8   1   6  11  7  3  2  5  10  9. Dissenyeu  un  algorisme  que  donats  els  valors  de m  i  n,  calculi  la  successió  del  joc,  i  la imprimeixi, tot indicant qui és el guanyador.  

68 

4.2.49 La tenda dels patins. L’encarregat de la famosa tenda de patins SKATE‐OLÍMPIC creu que es pot  informatitzar  força  feina de  la que  realitza en  la botiga,  i que a més a més, es poden fer anàlisis estadístiques, molt profitoses per al negoci. A la botiga lloguen patins per un cert temps. Hi ha patins de 4 tipus, i de cada tipus en disposen de 30. Per a poder fer un control  del  desgast  dels  patins,  fa  poc  que  han  instal∙lat  un  comptaquilòmetres per  cada parell de patins. Així podran saber exactament quan un patí arriba a la fi de la seva vida útil. També  els  hi  interessa  quantes  hores  lloguen  els  patins,  quins  tipus  de  patins  són més sol∙licitats, etc. L’encarregat s'apunta en un quadern les hores de sortida i d'arribada, el que marca el comptaquilòmetres per a cadascun dels patins en ser llogats i en ser retornats a la botiga,  per  tal  de  fer  una  estadística  –en  acabar  el  dia–  del  temps  d'utilització  i quilometratge  de  cadascun  dels  patins,  temps  d’utilització  de  tots  en  conjunt  i  el quilometratge total per cada tipus de patí. Evidentment els mateixos patins es poden llogar vàries vegades el mateix dia.  Dissenyeu un algorisme que rebi com a dades d'entrada la seqüència d'informacions sobre el tipus  de  patí,  les hores de  sortida o  arribada dels patins,  el  valor del  comptaquilòmetres (cada unitat d'informació en una línia), en aquest format:  <tipus de patí> <número del patí> <hora> <minut> <comptaquilòmetres> <arribada/sortida>  El tipus de patí (1 o 2 o 3 o 4), el número del patí (entre 1 i 30), l'hora i el minut (de sortida o arribada),  i  el  valor  del  comptaquilòmetres  seran  valors  enters.  L'arribada  o  sortida  es codificarà amb un caràcter: 'A' per l'arribada i 'S' per la sortida. La seqüència finalitzarà amb un codi de patí igual a 0. Per exemple,  

2 3 9 0 0 S 1 12 9 10 0 S 2 3 9 30 6 A 4 5 9 43 0 S 

… 1 12 20 56 64 A 

0  El resultat ha de ser el càlcul del temps d'utilització i quilometratge de cadascun dels patins, temps  d’utilització  de  tots  en  conjunt  i  el  quilometratge  total  per  cada  tipus  de  patí. Suposarem  que  no  hi  ha  cap mena  d'incoherències:  uns  patins  no  poden  sortir/tornar  si abans  no  ha  tornat/sortit,  les  hores  i  minuts  són  correctes,  el  comptaquilòmetres  està inicialitzat a 0 a l’inici del dia, etc.  4.2.50  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ínia 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, 

69 

resultants de  la cronometració del seu pas per  l’arribada, a cada volta. Així, per cada pilot 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èssimes 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èssimes é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 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èssimes són correctes, etc.  4.2.51 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 

70 

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 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.   4.2.52  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>  

71 

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  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  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.  4.2.53  Anàlisi  de  freqüència.  Dissenyeu  un  algorisme  que  analitzi  la  freqüència  de  les longituds de les paraules que formen un text, per a propòsits estadístics. El text està format per  lletres  i  espais  en  blanc,  i  finalitza  amb  un  punt.  No  hi  ha  paraules  de més  de  20 caràcters.  L’algorisme donarà  com a  resultat una  taula on apareixerà, per a  cada possible longitud, el nombre de vegades que s’ha donat en el text.  Per exemple, si el text d’entrada fos:  A Europa es viu la febre de la moneda única amb una eufòria notable  .  La sortida hauria de ser:  No. paraules de longitud 1: 1   No. paraules de longitud 2: 4   No. paraules de longitud 3: 3   No. paraules de longitud 4: 0   No. paraules de longitud 5: 2   No. paraules de longitud 6: 2 No. paraules de longitud 7: 2 .   .   . No. paraules de longitud 20: 0    

72 

4.2.54 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 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. 

73 

74 

5. JAVA, UN LLENGUATGE ORIENTAT ALS OBJECTES I DISTRIBUÏT   

5.1 Expresseu en la sintaxi de Java les següents constants:      a) π        b) e        c) 16/32     d) 6.02 1023    e) el número 7    d) el caràcter 7  

5.2  Quines  de  les  següents  declaracions  de  constants  són  correctes  ?  Identifiqueu  el(s) error(s) en cadascuna de les declaracions incorrectes:      a) static final int highvalue = 200;     b) const lowvalue = 0 | 1 | 2;     c) static final char firstchar : 'A';     d) static final float  greatest = 200.0;             least = 100.0;  

5.3 Escriviu una declaració de constants per a cadascun dels següents valors:      a) El caràcter finalitzador '.'.     b) La constant entera 80 que representa la màxima longitud d'una línia. 

c) Les constants reals 0 i 100 que representen el rang de les notes d'un examen.  

5.4  Quines  de  les  següents  declaracions  són  correctes  ?  Identifiqueu  el(s)  error(s)  en cadascuna de les declaracions incorrectes:      a) char 1a,  2a, 3a ;     b) char a1=’0’, a2, a3; real b1; integer a3;     c) int a; int b; int c ; float abc;     d) double resulta, resultb; int count; char ci; real x=1., y=1.;   

5.5  Escolliu  noms  raonables  i  escriviu  una  sola  declaració  per  a  cadascun  dels  següents valors:      a) Els tres coeficients reals d'una equació quadràtica.     b) Les dues arrels reals d'aquesta equació.     c) Un valor que indiqui si té solució o no. 

d) Un valor enter que indiqui el nombre de conjunts de dades a processar.  

5.6  Escolliu  noms  raonables  i  escriviu  una  sola  declaració  per  a  cadascun  dels  següents valors:      a) Un número d'identificació de 6 dígits, per als estudiants.     b) Un codi d'un sol dígit que indiqui el curs ( 1= 1er, ...).     c) L'any de llicenciatura/diplomatura.     d) La nota mitjana.     e) Una variable que indiqui si les taxes de matrícula s'han pagat o no. 

75 

 5.7 Quin és  l'objectiu d'un comentari en un programa en Java? Com s'escriu un comentari? Afegiu els comentaris apropiats a les declaracions var dels dos exercicis anteriors per a que algú no relacionat amb el tema pugui entendre la funció de cadascuna de les variables.  

5.8 Avalueu cadascuna de les següents expressions en Java:      a) 3 > (9 % 2) ‐ 5     b) (1.6 + 1.9/2.0 + 3.0)     c) 1 ‐ 2 ‐ 3 ‐ 4 ‐ 5     d) ((9 / 3) + (9 / 4) + (9 / 5)) % 4                             

5.9 Suposeu que les següents variables han estat declarades i tenen els següents valors:       { a = 7, b = ‐6, c = 30, d = 10.8600, e = 1.E3, f = '*', g = true }.   

Quin és el valor de cadascuna de les següents expressions ?      a) a b / (d) + 3     b) d ‐ 0.75 / (e 140.0) 70.0     c) math.sqrt (math.abs (b ‐ a) + c ‐ 20)     d) 10 * a % math.pow(b,2)     e) ! ((a >= b) & g)     f) ((b>=a) | (math.pow(b,2) > c)) & (g & ! ( math.abs(b) != 6))  

5.10 Siguin a, b i c variables booleanes que tenen els següents valors:          { a = true, b = false, c = true }.   Avalueu les següents expressions:      a) a & (b | c)     b) (a & b) | (a & c)     c) (! a) | (! c)     d) a & ! b | ! c  

5.11 Determineu si  les següents expressions Java són  la traducció correcte de  les següents expressions matemàtiques. Si no ho són, corretgiu‐les.      a) ((a + b) / c)1/2        ——>   math.sqrt(a+b/c)     b) ax2 + bx + c        ——>   a * x * x + b * x + c     c) (6.02 x 1027) (ln (1 + e(x‐1.)))  ——>      6.02E27(math.ln(1+math.exp(x)‐1.))  

5.12 Traduïu a Java les següents expressions, mitjançant sentències d'assignació correctes:      a) La base imposable bruta és sou brut ‐ 11$ x núm. de dependents ‐ 14$     b) La contingència és  (X2 / (N + X2))1/2     c) La mitjana ponderada és (k * suma de notes) / ( N ‐ valors invàlids)     d) L'amplada és A/2 sinus(2 π (fc + fm) t ‐ π/2) 

76 

    e) TEST és cert si VALOR està entre 1 i 10 inclosiu. D'altra forma és fals.  

5.13 Suposem que tenim tres targetes de dades (o tres línies) amb els següents valors:         53  78  6           110    Z         59     ‐8 

i les declaracions:      int x, y, z;     char ch;  

Quins valors assignaran a les variables les següents operacions d'entrada:      a) x=System.in.read(); y=System.in.read(); ch=System.in.read();     b) x=System.in.readln(); y=System.in.readln(); ch=System.in.readln();     c) x=System.in.readln(); y=System.in.read(); ch=System.in.readln();                z=System.in.read();     d) ch=System.in.read(); x=System.in.readln(); x=System.in.read();  

5.14 Escriviu les instruccions d'entrada necessàries per a llegir les següents dades:      

a) Una targeta que conté el núm. de seguretat social i un identificador del departament (valors enters sobre un empleat). Després segueix una altra targeta d'horaris que indica el número total d'hores treballades durant la setmana (real). 

 b)  Una  targeta  d'estudiant  que  tingui  les  seves  notes  i  quatre  lletres  separades  per blancs que indiquin les notes (E=Excel.lent, N=Notable, ...) 

 5.15 Què imprimiran les següents sentències, partint dels valors inicials:  { x = 1.0, y = 2, z = 3.0 } ?      a) System.out.println(x,y,z)     b) System.out.print(x); System.out.println(y); System.out.println(z)     c) System.out.println(x,y); System.out.println(z)  

5.16  Escriviu  un  programa  complet  en  Java  que  calculi  totes  les  solucions  enteres  de l'equació:             3X + 2Y ‐ 7Z = 5  

per a tots els valors 0 ≤ x, y, z ≤ 100.  

5.17  Siguin  V1  i  V2  dues  variables  booleanes  i  S1,  S2  i  S3  sentències  Java.  Aquestes seqüències seran executades segons els valors de V1 i V2 tal i com mostra la taula:  

77 

V2 

true           false

true   

false

S1  S3

S2 

S3V1

                     

Dissenyeu una sentència condicional/alternativa que aconsegueixi aquests fets.  

5.18  Escriure  un  programa  complet  en  Java  que  calculi  el  mínim  nombre  de  bitllets  i monedes necessàries per a tornar el canvi respecte d'una quantitat determinada. El cost de l'article comprat  i  la quantitat  lliurada per al seu pagament s'han de  llegir com a dades. El programa ha d'indicar quantes monedes i bitllets de cada tipus són necessàries per a tornar el canvi.  Disposarem de les següents monedes i bitllets:      Monedes : 1, 2, 5, 10, 20, 50 cèntims i 1, 2 euros     Bitllets : 5, 10, 20, 50, 100, 200 i 500 euros                        

5.19 L'àrea d'un cercle de radi 1 és π  i  l'àrea del quadrat que el conté és  justament 4. Per tant si escollim a l'atzar un gran nombre de punts del quadrat, la fracció de punts que caiguin dins  el  cercle  serà  aproximadament  π/4.  Suposada  l'existència  d'una  funció  random,  que dóna com a  resultat un número pseudoaleatori uniformement distribuït en  l'interval  (0,1), dissenyeu un programa en Java que calculi una aproximació de π.  

5.20  Suposant  que  random  és  la  funció  definida  en  l’exercici  anterior,  dissenyeu  un programa que calculi, per aproximació, les probabilitats d'aconseguir els números del 2 al 12 amb dos daus.      

5.21 Quins  identificadors  respecten  la  sintaxi  de  la  següent  gramàtica  BNF  (Backus Naur Form),       <identificador> ::= <P> | <Q> | <PQ>      <PQ> ::= Ø | a <PQ> b     <P> ::= a <P> | Ø      <Q> ::= <Q> b | Ø           ?  

5.22 Dissenyeu un programa en llenguatge Java que permeti jugar al nombre màgic. Aquest joc  consisteix  en  endevinar  un  número  (entre MIN  i MAX)  seleccionat  aleatòriament  pel computador,  en  el mínim nombre de passos.  El  computador dóna  informació per  a  cada tirada de si el nombre màgic és més petit o més gran que  la aproximació del  jugador. Els 

78 

79 

límits MIN  i MAX els ha de fixar  interactivament  l'usuari. El programa ha d'informar al final del nombre de passos emprats.  5.23 Donada  la  següent gramàtica BNF que descriu  la  sintaxi dels  identificadors d'un  cert llenguatge de programació d'alt nivell, obteniu el conjunt d'aquests identificadors vàlids:    <IDENT> ::= a <E> | <D> z | a <ED> z   <E> ::= a <E> | Ø   <D> ::= <D> z | Ø   <ED> ::= a <ED> z | <DIGIT> | Ø   <DIGIT> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9  5.24 Codifiqueu els algorismes corresponents als exercicis parells del capítol 2 en llenguatge Java.