1. Estudis d’Informàtica, Multimèdia i Telecomunicació
Programació Pràctica 1
Estudiant
Cognoms: Escriu aquí els teus cognoms
Nom: Escriu aquí el teu nom
2. Exercici 1: Treball amb seqüències d'entrada [20 %]
A un hotel, molts dels turistes estrangers fan canvi de moneda. Les monedes
acceptades estan restringides a USDolars ($), Lliures esterlines(£), Yens(¥), Yuans (Y)
i Rubles (R).
Tots els canvis de moneda efectuats al llarg del dia s’enregistren i constitueixen una
seqüència diària del tipus
<t1 q1 t2 q2 ..... tn qn X> on
ti és un caràcter que indica la moneda, el valor del qual pot ser ‘$’, ‘£’, ‘¥’, ‘Y’ o
‘R’ segons el tipus de moneda canviada a euros
qi és la quantitat de moneda estrangera canviada del tipus ti
X és la lletra 'X' i indica el final de la seqüència
Els canvis vigents dels diferents tipus de moneda són
Moneda
$
£
¥
Y
R
Valor en €
0.73
1.18
0.0075
0.022
0.11
Tasca: Creeu en llenguatge algorísmic el mòdul totalEuros (acció o funció, el més
adequat i justifiqueu el motiu de la tria), que llegeixi del canal estàndard d'entrada la
seqüència diària i escrigui en el canal estàndard de sortida, per a cada tipus de
moneda canviada la quantitat entrada al llarg del dia. També ha d’escriure el total
d’euros que han sortit de la caixa de canvi.
3. Exercici 2: Treball amb seqüències [20 %]
No és gens estrany trobar rellotges o plaques commemoratives que expressen l’hora o
la data en números romans.
Com ja sabeu la numeració romana1 empra lletres per representar les xifres i és un
tant peculiar perquè una xifra romana pot tenir un valor positiu o negatiu segons es
trobi a la dreta o l’esquerra d’una xifra de valor més gran.
Trobar el valor d’un número romà no és complicat si bé ens requereix una sèrie de
còmputs
Tasca: Crear en llenguatge algorísmic el mòdul moles (acció o funció, el més apropiat
i justifiqueu la tria) que rebi una quantitat representada correctament en números
romans i finalitzada en un punt i en retorni el valor representat en numeració
moderna.
Per exemple: Si rep “CDXIX.” retornaria 419. Si rep “MDLXXXVII.” retornaria
1587.
Indicació 1: Cal tenir present que el valor d’una xifra romana no se sap exactament quan es
mira la xifra, perquè pot ser positiu o negatiu segons la xifra següent.
Indicació 2: El número romà que rep el mòdul és un número romà correcte i acaba amb un
punt. No heu de fer cap mena de control d’errors.
1
http://ca.wikipedia.org/wiki/Numeraci%C3%B3_romana
4. Exercici 3: Treball amb seqüències en PHP [20 %]
Disposem d'unes cadenes de text en què s'intercalen xifres i lletres, com ara
"12c4354gy3232z9087r26."
Tasca: Es demana un programa que
sigui capaç de llegir un fitxer que
contingui una cadena de text
d'aquestes característiques i escrigui
en pantalla, a una línia per bloc de
xifres, la suma de totes les xifres que
formen cada bloc. Quan arriba al
punt, escriu Dot found i finalitza
l'execució.
Indicacions preceptives
El fitxer php rebrà el nom prac1_exer3.php
La crida al programa serà del tipus que es mostra i les dades s'entraran en un
fitxer de text
prac1_exer3.php?filename=data30
els fitxers de dades consten d’una única instrucció de php en què la variable
$cadena rep com valor una cadena de text integrada per sèries de xifres que
estan separats per un o més caràcters i conté un punt.
Per exemple el fitxer data30 té el següent contingut
<?php
$cadena="12c4354gy3232z9087r26.";
?>
Podeu comprovar el funcionament del programa que se us demana que escriviu amb
la crida:
http://prog.uoc.edu/prac1/prac1_exer3.php?filename=data30
Podeu provar canviant els noms dels fitxers de dades (data30 a data34).
Les instruccions per carregar el fitxer amb la variable $cadena ja formen part de la
plantilla.
Els fitxers de dades s'hauran d'ubicar a la mateixa carpeta que els php
Altres indicacions
La variable $cadena és una variable de text i les xifres que l'integren, com les
lletres, són caràcters, cosa que s'haurà de tenir en compte a l'hora de fer
comparacions.
També s'haurà de tenir en compte per a fer sumes. Si el contingut de la variable
$a és el caràcter '1', si el volem afegir a $total, la instrucció serà
5. $total = $total + (int)$a; per tal de convertir el caràcter al seu valor numèric
abans de sumar
A les cadenes de text es pot accedir a cadascun dels caràcters individuals que
la formen mitjançant el nom de la variable i un número que indica la posició del
caràcter dins de la cadena:
Si el contingut de $v és "Hola", llavors $v[0] és 'H', $v[1] és 'o', $v[2] és 'l' i $v[3]
és 'a'. Dins de les claus es pot emprar una variable entera, p.e:
for ($i=0; $i<4; $i++) print $v[$i]."<br />";
S'ha de tenir present que al primer caràcter se li assigna l'índex 0.
Per a un plantejament adequat del problema cal tenir present que la seqüència
rebuda està formada per diferents tipus d'unitats: caràcters i blocs de xifres. Un
primer tractament és recórrer aquestes unitats fins trobar el punt. El tractament
de les unitats serà no fer res en el cas dels caràcters i quan s'arriba a una xifra
engegar el tractament del bloc de xifres que ha de donar com resultat escriure
en pantalla el valor de la suma de totes les xifres.
Avaluació
Es valorarà especialment l'aplicació correcta dels esquemes de cerca, recorregut i/o
tractament adequats al problema.
També es tindrà present el disseny i l'aprofitament adequat de funcions i accions, que
resultin útils i que l'estudiant vulgui desenvolupar voluntàriament.
7. Exercici 4: Treball amb seqüències en PHP [20 %]
Tasca: Crear un programa que sigui capaç de mostrar en pantalla totes les figures
d'una màquina escurabutxaques el nom de les quals formi part de un text que es
llegirà d'un arxiu de dades que el carrega a la variable $cadena.
Indicacions preceptives
El fitxer php rebrà el nom prac1_exer4.php
La crida al programa serà del tipus
prac1_exer4.php? filename=nom_arxiu_dades
per la qual cosa s'haurà d'emprar la instrucció $filename=$_GET["filename"];
per carregar el nom del fitxer que incorpora la instrucció que assigna valor a la
variable $cadena. Un cop carregat aquest fitxer, es pot incorporar la instrucció al
programa mitjançant l'ordre include($filename)2; ambdues instruccions ja
formen part de la plantilla i són les primeres del programa principal.
El fitxer example1.php adjunt carrega un d'aquests fitxers i mostra en pantalla el
contingut. La crida ha de ser del tipus
example1.php?filename=data42
Es crearà la function putImg que rebrà el nom d'una figura i posarà en pantalla la
imatge que li correspon. Sempre que s'hagi de posar una imatge en pantalla es
farà amb una crida a aquesta function.
Es crearà la function detectFruit que rebrà com a paràmetres la cadena de text i
un número enter que serà en la posició en que cercarà si hi ha el nom d'una
figura. En el cas que en aquesta posició del text es trobi el nom d'una figura, es
retornarà aquest nom. Altrament es retornarà un zero.
Per exemple, si $cadena="ablemonst" la crida detectFruit($cadena,1) retornaria
0 mentre que la crida detectFruit($cadena,2) retornaria "lemon"
Es faciliten els fitxers d'imatge en format png necessaris per al desenvolupament
de l'exercici
banana
2
bell
grapes
lemon
melon
orange
peach
plum
Els fitxers d'imatge s'hauran d'ubicar a la mateixa carpeta que el php
http://es2.php.net/manual/es/function.include.php
seven
8.
Es faciliten arxius de text de prova amb noms data40, data41, ..., data43. Els
arxius, que són arxius de text, s'hauran d'ubicar a la mateixa carpeta que el fitxer
php.
PHP facilita la funció strlen($cadena)3; que retorna la longitud en caràcters de
la cadena de text $cadena
PHP facilita la funció substr_compare4($main_str, $str , $offset ,$length) que
retorna un 0 si a partir de la posició $offset de la cadena $main_str, coincideixen
$length caràcters amb la cadena $str.
P.e. substr_compare ("caleidoscopio", "idoia", 4, 3 ) retornaria 0 perquè a
partir de la quarta posició de caleidoscopio (recordeu que el primer caràcter està
a la posició zero) trobem 3 lletres iguals a les tres primeres de "idoia"..
Podeu comprovar el funcionament del programa que se us demana que escriviu
amb la crida:
http://prog.uoc.edu/prac1/prac1_exer4.php?filename=data40 o, si voleu, canviant
el nom del fitxer de dades
Consells.
Que un fitxer de dades tingui un contingut molt extens, no assegura que contingui
el nom d'alguna figura.
El programa ha de fer un recorregut per la cadena cercant en cada posició si troba
algun dels noms de les imatges. Com que la imatge que té un nom més curt és la
campana, és inútil fer cerques quan estem a tres posicions del final de la cadena.
Això ho podem aprofitar per a que el nostre programa no doni voltes innecessàries
a la composició iterativa.
Els noms de dos imatges es poden solapar, com ara grapeseven o bellemon en
que una mateixa lletra forma part dels dos noms.
Avaluació
Es valorarà especialment l'aplicació correcta dels esquemes de cerca, recorregut i/o
tractament adequats al problema.
També es tindrà present el disseny i l'aprofitament adequat de funcions i accions, tant
les preceptives per enunciat com aquelles altres que resultin útils i que l'estudiant
vulgui desenvolupar voluntàriament.
3
4
http://es.php.net/manual/es/function.strlen.php
http://php.net/manual/es/function.substr-compare.php
10. Exercici 5: Treball amb seqüències de seqüències a l'entrada en PHP [20 %]
Un addicte al set i mig que es juga al poble anota, cada cop que juga, quines cartes li
han sortit. Per a això fa servir un codi que fa correspondre a cada carta un número del
0 al 39 en què les cartes 0-9 corresponen als oros, 10-19 a les copes, 20-29 a les
espases i 30-39 als bastos i, dins de cada palo es codifiquen les cartes per ordre
numèric.
La seqüència que crea és del tipus
{c11 c12 ... c1n # c21 c22 ... c2n # c31 c32 ... c3n # ... # cm1 cm2 ... cmn .} on
cij : és el codi corresponent a la carta situada en posició j de la partida situada
en posició i.
# és el caràcter ‘#’ que indica la fi de les cartes d’una partida
. és el caràcter '.' que indica la fi de la seqüència
Aquestes tres partides correspondrien
a la seqüència
<21 8 34 # 2 14 22 # 16 28 .>
Tasca: Crear un programa que rebi un fitxer amb la seqüència d’una sèrie de partides i
les mostri en pantalla, a una partida per línia i acompanyades per la puntuació
obtinguda o bé la paraula "Pass"
Indicacions
El fitxer php rebrà el nom prac1_exer5.php
La crida al programa serà del tipus
prac1_exer5.php?filename=nom_arxiu_dades
per la qual cosa s'haurà d'emprar la instrucció $filename=$_GET["filename"];
per carregar el nom del fitxer que incorpora la instrucció que assigna valor a la
variable $cadena. Un cop carregat aquest arxiu, es pot incorporar la instrucció al
programa mitjançant l'ordre include($filename); ambdues instruccions ja
formen part de la plantilla i són les primeres del programa principal.
11. El fitxer example1.php adjunt carrega un d'aquests fitxers i mostra en pantalla el
contingut. La crida ha de ser del tipus
example1.php?filename=data53
Amb els fitxers de l’enunciat, es faciliten 40 fitxers d’imatge en format png
corresponents a l'anvers de les cartes espanyoles.
Per tal de recollir els elements un a un de la seqüència, s'aconsella emprar la
combinació de les instruccions explode i posteriorment array_shift.
Per tal d'obtenir de la cadena $string un a un els números que la formen, on
s'ha fet servir com separador el caracter $c, podeu emprar consecutivament:
$var1 = explode ($c, $string);5
$var2 = array_shift($var1);6
Podeu observar el codi i veure com funciona l'arxiu example2.php que s'adjunta
a l'enunciat. La crida és del tipus
example2.php?
cadena=5,6,7,8,91,2,3,4,5,5,676767,78,8,89 i fa servir com separador una
coma.
Si modifiqueu la instrucció $var1 = explode(',', $cadena); a
$var1 = explode(' ', $cadena); llavors haureu de fer servir com separador
l'espai en blanc en lloc de la coma.
La instrucció
$var2 = array_shift($var1);
equival al que en llenguatge algorísmic escriuríem var2 := readInteger()
considerant que $var1 és el canal d’entrada. Posa a la variable $var2 el valor
que està en la primera posició de $var1 a l’hora que elimina aquest valor de
$var1 de manera que tots els elements de $var1 corren una posició endavant.
5
6
http://es2.php.net/manual/es/function.explode.php
http://es2.php.net/manual/es/function.array-shift.php
12. Un cop carregada la cadena de dades s'emmagatzemarà la llista de dades a la
variable $data. Aquestes instruccions ja formen part de la plantilla.
Podeu comprovar el funcionament del programa que se us demana que escriviu
amb la crida:
http://phppract.comlu.com/prac1/prac1_exer5.php?filename=data50 o canviant el
nom del fitxer de dades.
Es faciliten diversos arxius de dades amb els noms data50 a data53. Són fitxers
de text i podeu obrir-los per comprovar el contingut: una instrucció php.
Els fitxers de dades i d’imatge han se posar-se a la mateixa carpeta que el fitxer
php
S'ha de crear la function putCard que, a partir del número de codi mostrarà una
carta en pantalla.
S’ha de crear la function cardValue que rep el número corresponent a la imatge
d'una carta (només el número) i retorna el seu valor en el joc. Per exemple si rep
32 (3 de bastos) retornaria 3, i si rebés 18 (cavall de copes) retornaria 0.5.
S’ha de crear la funció played que rep la seqüència i extreu d’ella les cartes d’una
partida, les mostra i escriu la puntuació total de la partida. Aquesta function,
retornarà com paràmetre la mateixa seqüència (però sense les dades extretes) i
un valor true o false segons quedin més dades a la seqüència o ja s’hagi acabat.
El programa principal està completament escrit i no s’ha de modificar.