Your SlideShare is downloading. ×
Programació - Pràctica 2 - Multimedia (UOC) - Paquita Ribas
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Programació - Pràctica 2 - Multimedia (UOC) - Paquita Ribas

1,198
views

Published on

Pràctica 2 de l'assignatura de Programació del Grau Multimèdia de la UOC. Per a descarregar-se els arxius PHP, visita la meva wiki: http://raco-vermell.wikispaces.com/PROGRAMACI%C3%93

Pràctica 2 de l'assignatura de Programació del Grau Multimèdia de la UOC. Per a descarregar-se els arxius PHP, visita la meva wiki: http://raco-vermell.wikispaces.com/PROGRAMACI%C3%93

Published in: Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,198
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Estudis d’ Informàtica, Multimèdia i TelecomunicacióProgramacióPráctica 2Cognoms: Ribas TurNom: PaquitaIndicacions generals:Llegiu amb detall les tasques encomanades a cada exercici i també les indicacions isuggeriments de resolució.Per a dubtes i aclariments sobre l’enunciat, adreceu-vos al consultor responsable de lavostra aula.Lliurament:1. Els exercicis en llenguatge algorísmic han de resoldre’s en aquest mateix document2. Cal lliurar la solució d’aquesta pràctica en un fitxer comprimit en format zip o rar nomenat CognomsNom_P_PRACT2 adreçat a la bústia “Lliurament d’activitats”3. El fitxer comprimit contindrà aquest mateix arxiu amb les respostes a les preguntes 1 i 4 i els arxius php corresponents als exercicis 2, 3 i 5. No s’han d’adjuntar els fitxers d’imatge ni de dades.4. Data límit per lliurar la solució: dimecres, 21 de desembre de 2011 (a les 23:59 hores).És imprescindible respectar el format, el nom dels fitxers php i data de lliurament. Lano adequació a aquestes especificacions pot suposar la no avaluació de la Pràctica. 1
  • 2. Exercici 1: Treball amb taules [15%]Objectius: Donat un conjunt de dades organitzat en una taula, aplicar l’esquemaadequat per construir un algorisme que solucioni un determinat problema el resultatdel qual té forma de taulaMaterials: Mòdul 4: Tipus estructurats de dadesTasca: Dissenyar el mòdul (acció o funció, el més adequat) sonQuadrats que rebi una taulacandidats de 100 nombres enters i retorni una taula de 100 booleans; en les posicionsfigurarà true o false segons si el número que ocupa la posició en candidats sigui un quadratperfecte o no ho sigui. .(Per exemple si els valors de les primeres posicions de candidats fossinindex 0 1 2 3 4 5 6 7 8 9 10 …valor 7 9 13 6 29 55 256 80 81 4 22 …els valors retornats serienindex 0 1 2 3 4 5 6 7 8 9 10 …valor false true false false false false true false true false false …Perquè el 9, 256, 81 i 4 són quadrats perfectes i 7, 13, 6, 29, 55, 80 i 22 no ho són).Indicacions:  Un nombre és quadrat perfecte si la seva arrel quadrada és un nombre enter.  El llenguatge algorísmic no disposa de cap funció que faci l’arrel quadrada d’un nombre.funcio esQuadrat(n: enter): boolea {Pre: n ≥ 0} var i : enter; trobat, perfecte: boolea; fvar trobat := trobat; perfecte := fals; i := 1; mentre no trobat fer trobat := (i * i) > n; si no trobat llavors i := i + 1 fsi mentre i := i – 1; 2
  • 3. { i * i és menor o igual a n, i (i + 1) per (i + 1) és major que n } perfecte = (i * i) = n; {post: si n és arrel perfecte i “i” al quadrat és igual a n, en cas contrari “i” al quadrat és diferent de n } retorna perfecte;ffunciofuncio sonQuadrats(candidats: taula[100] de enters): taula[100] de boolea {rebem un array candidats amb 100 enters i retornem una talua amb 100 boleans amb valor verdader si cada un dels enters correlatius son arrels quadrades perfectes i fals en cas contrari } var resultats:taula[100] de boolea; i: enter; fvar per i := 1 fins 100 fer resultats[i] := esQuadrat(resultats[i]); fper retorna resultats;ffuncio 3
  • 4. Exercici 2: Treball amb taules en PHP [20%]Objectius: Construir un algorisme que solucioni un determinat problema amb l’ús detaules.Materials: Mòdul 4: Tipus estructurats de dades Guia bàsica de PHP: Mòdul 5 Tipus estructurats de dades en PHPTasca: Crear el programa Repartidor de cartes que reparteix aleatòriament, una darreralaltra les 40 cartes de pòquer (no hi són 8, 9 ni 10). En la pantalla hauran de mostrar-se les40 cartes sense que en falti cap ni que hi hagi repeticions.Pe: si la crida és http://localhost/pract2_exer02.php la pantalla pot mostrarRecursos: Per a la realització de l’exercici es faciliten 40 imatges en format jpg  0.jpg, 1.jpg, …,9.jpg amb els anversos de les cartes 1-7 i les figures de diamants  10.jpg, …, 19.jpg amb els anversos de les cartes 1-7 i les figures de piques  20.jpg, …, 29.jpg amb els anversos de les cartes 1-7 i les figures de cors  30.jpg, …, 39.jpg amb els anversos de les cartes 1-7 i les figures de trèvols 4
  • 5. ConsellsPosar aleatòriament 40 cartes no és cap problema complicat. Es tracta de fer 40 sortejos denúmeros entre 0 i 39. Però fer-ho així no ens assegura que no hi hagi repeticions i que surtinles 40 cartes diferents.Quan es fa amb una baralla de veritat no hi ha problema perquè quan s’ha tret una carta jano pot tornar a sortir. En el programa s’ha de simular aquesta situació, i això es pot fermitjançant un array que indiqui si una carta pot sortir o ja no. Aquest array ha de tenir unaposició per carta de tipus booleà. Si el contingut és true es pot agafar la carta. Si és false,no es pot agafar perquè ja ha sortit. Caldrà mantenir aquest array: quan sagafi una carta(perquè la seva posició està en true) caldrà posar la posició en false.Indicacions i requisits d’implementació  El fitxer php rebrà el nom pract2_exer02.php i la crida serà del tipus pract2_exer2.php, sense paràmetres.  Declareu la constant NUMCARDS i doneu-li el valor 40. Tots els bucles i referències a les cartes poden fer-se respecte NUMCARDS en lloc de fer-ho directament respecte 40.  Una estructura de dades bàsica serà la taula $not_used de NUMCARDS posicions de tipus boolean. Cada posició de l’array (de la 0 a la 39) correspondrà a una carta de la baralla (0.jpg a 39.jpg). Si el contingut d’una posició de l’array és true significa que la carta encara no sha mostrat i el valor false voldrà dir que la carta ja ha sortit.  Una altra serà la taula $cards de 40 posicions enteres i que representarà lordre en que es mostraran les cartes.  S’ha de construir la function init_array(&$vector, $valor) que rep com paràmetres un array i un valor i omple amb aquest valor totes les posicions de l’array. Aquesta funció es farà servir per inicialitzar tots els arrays que convingui.  S’ha de construir la function card_draw, que rebrà el vector $not_used, i retornarà el número de la carta extreta. Per decidir quina carta sagafa pot usar-se rand (a, b)1 que retorna un nombre enter entre a i b (ambdós inclosos). La casella de la taula $not_used corresponent a la carta sortejada, s’ha de posar a false2. Heu de treballar amb compte perquè és possible que el nombre aleatori que s’obtingui en un sorteig ja s’hagi obtingut amb anterioritat. En aquest cas s’haurà de seguir alguna estratègia per evitar l’efecte d’aquestes repeticions. Entre les estratègies alternatives possibles tenim: o Tornar a sortejar tantes vegades com sigui necessari fins que s’obtingui una carta que no hagi sortit amb anterioritat (la quantitat de sortejos que es realitzen poden ser uns quants centenars i fins i tot milers atès que al final només quedarà una carta per treure i la probabilitat que rand retorni aquell valor és molt petita). o Si surt una carta ja obtinguda amb anterioritat, recórrer la taula en un sentit fins a trobar una posició a true i donar aquesta posició com a obtinguda pel sorteig. Aquest mètode assegura fer només un sorteig per cada carta encara que al recórrer en un sentit determinat tendeix a fer aparèixer cartes contigües.1 http://php.net/manual/es/function.rand.php2 PHP permet que una function rebi paràmetres i els modifiqui i, a més, retorni un valor amb lainstrucció return. En aquest sentit la function es comporta com acció i funció alhora. 5
  • 6.  Sha de construir la function put_cards, que mostrarà per pantalla les 40 cartes per lordre en que estan disposades en $cards. Lesquema de treball serà sortejar un rera laltre els quaranta números entre 0 i 39 i emmagatzemar-los per ordre de sortida en $cards. Un cop finalitzat el sorteig es mostraran amb put_cards Opcionalment pot construir-se la function put_row que farà que les cartes es mostrin en fileres de 8 cartes d’amplada (com la imatge d’exemple). 6
  • 7. Exercici 3: Treball amb taules bidimensionals en PHP [20%]Objectius: Donades sèries de dades, organitzar-les en taules bidimensionals iaplicar l’esquema adequat per resoldre el problema donat.Materials: Mòdul 4: Tipus estructurats de dades Guia bàsica de PHP: Mòdul 5 Tipus estructurats de dades en PHPTasca: Simular una taula on entre 2 i 5 jugadors fan una partida de Back Jack senseapostes. En fer la crida al programa es mostraran les cartes de cada jugador, la suma depunts de cadascú i un missatge que indicarà qui és guanyador.P.e. a la crida: http://localhost/pract2_exer03.php?n=3, amb 3 jugadors, un resultat seriaEl programa que es demana aprofita mòduls de lexercici 2 i també els fitxers dimatge.El Black Jack és una variant del joc del 7 i mig en què cada jugador sha daproximar, peròsense passar-se, a sumar 21 punts. Una altra diferència amb el 7 i mig és que les cartes,però, es donen de dues en dues.La crida al programa anirà acompanyada del paràmetre n que serà el nombre de jugadors.Sacceptaran entre 2 i 5 jugadors, altrament no sentrarà en el joc i es mostrarà un missatgedel tipus :Poden jugar entre 2 i 5 jugadors.La crida hauria de ser pract2_exer03.php?n=x, on x pertany a {2,3,4,5} 7
  • 8. Per a la nostra versió reduïda del Black Jack farem servir només les cartes 1 a 7 i lesfigures. El valor de cada carta és:  10 punts per a las i les figures  el valor nominal propi de la carta per a les cartes de 2 a 7Recursos: Disposeu dels mateixos fitxers dimatge que per lexercici anterior.Indicacions i requisits d’implementació  La crida al programa serà del tipus pract2_exer03.php?n=X on X és una xifra del conjunt {2, 3, 4, 5} i significa el nombre de jugadors de la partida simulada.  La partida de Black Jack es jugarà amb dues baralles de cartes, cosa que es representarà mitjançant larray $not_used de longitud 80 i amb el mateix significat que lexercici anterior. Les posicions 0 a 39 signifiquen una baralla i les posicions 40 a 79 representaran laltre.  Els jugadors quedaran representats per la matriu bidimensional $gamer, de manera que cada filera representa un jugador i les cel·les duna filera representen o La primera casella els punts del jugador o La resta de caselles seran les cartes que ha extret el jugador La matriu $gamer corresponent a la captura de pantalla de lexemple tindria aquest aspecte $gamer $gamer[ ][0] $gamer[ ][1] $gamer[ ][2] $gamer[ ][3] $gamer[ ][4] $gamer[ ][5] $gamer [ ][6] $gamer [0] 23 30 15 21 13 $gamer [1] 28 3 6 11 12 8 31 $gamer [2] 27 24 17 14 26 (En php les fileres duna matriu bidimensional no han de ser obligatòriament de la mateixa longitud) Recordeu que no cal declarar les matrius especialment, es poden crear mitjançant un bucle i en qualsevol moment sels pot afegir caselles3.  Heu demprar les funcions NL() i function init_array amb el mateix significat que en lexercici anterior.  Heu de crear la funció value($number) que rebrà el número que representa la imatge de la carta i retornarà la seva puntuació. Per exemple, al número 0 ( ) li correspondria un retorn 10 i al 33 ( ) li correspondria un retorn 4.3 El codi for ($i=0; $i<4; $i++){ $matriu[$i] = array (0,$i*2);} genera un array bidimensional $matriu[4][2] amb el següent contingut $matriu $matriu[ ][0] $matriu[ ][1] $matriu[0] 0 0 $matriu[1] 0 2 $matriu[2] 0 4 $matriu[3] 0 8 de manera que a $matriu[2][1] hi ha emmagatzemat un 4 i a $matriu[1][0] hi ha un 0 8
  • 9.  Heu de crear lacció play que rebrà dos paràmetres: o larray que representa un jugador (on es posaran els punts en la posició [0] i les cartes en les següents). o larray $not_used Aquesta funció anirà extraient les cartes de dues en dues i posant-les a les seves posicions de larray a lhora que actualitza els punts del jugador. Per extreure cada carta podeu fer servir la function card_draw de lexercici anterior. En aquesta funció sha de simular la intel·ligència del jugador: cada vegada ha de decidir demanar dues cartes o plantar-se. Els croupiers dels casinos treuen cartes fins arribar o ultrapassar els 17 punts. Si la banca dels casinos ho fa així, sembla adequat implementar aquesta intel·ligència a lalgorisme. Podeu, no obstant, decidir que el valor per plantar-se sigui un altre (15, 16 o 18). Recordeu que els dos paràmetres que rebi la acció play han de ser dentrada sortida perquè en ambdós arrays sescriuen valors que empren el programa principal o altres functions..  Heu de crear lacció put_gamer que rebrà la matriu bidimensional $gamer i un enter (el jugador) i escriurà en pantalla els resultats del jugador. Per exemple, si la crida és put_gamer($gamer, 2) sescriuria en pantalla els resultats del jugador 2.Consells  Si definim la constant NUMCARDS i li assignem el valor 80, les funcions que sheretin de lexercici anterior, si estan referides a NUMCARDS, funcionaran directament sense necessitat de canvis.  card_draw treballa amb $not_used que té 79 posicions i retornarà un valor entre 0 i 79 si es manté el codi de lexercici anterior. No obstant les cartes tenen noms que van del 0 al 39. Es podria duplicar el nombre de fitxers dimatge i numerar les còpies del 40 al 79. Però hi ha una solució més simple: en rebre la carta retornada per card_draw es pot corregir el valor rebut per deixar només valors de linterval [0, 39].  No intenteu posar directament una posició dun array dins duna cadena de text de la instrucció print. P.e. en un programa es vol imprimir el contingut duna taula amb la instrucció print "el preu és $vector[$i] euros"; Aquesta forma no treurà en la pantalla el que es desitja. Sha de fer servir loperador de concatenació: print "el preu és ".$vector[$i]." euros"; 9
  • 10. Exercici 4: Treball amb Tuples [25%]Objectius: Donada una família de dades relacionades, dissenyar les estructures dedades adients per al seu emmagatzematge i crear expressions i mòduls de programaper al seu tractamentMaterials: Mòdul 4: Tipus estructurats de dadesTasca: Una bibliomediateca municipal vol informatitzar el seu fons per a un millor control.Per a cada element de la bibliomediateca volen emmagatzemar: el tipus (un caràcter que pottenir els valors {L, C, D, V o J} amb els significats Llibre, CD, DVD, Videollibre, videoJoc),lautor (que denotarem de tipus text), leditorial (text), el nombre de pàgines (enter), ladurada en minuts (enter), si es pot prestar o està exclòs de préstec, número de soci a quisha prestat (un enter entre 0 i 10000; el 0 indica que no està prestat) i la data dedevolució(tData). Definir el tipus tElement adequat per emmagatzemar aquest tipus de dades. tElement = tupla tipus: caracter; autor: text; editorial: text; pagines: enter; durada: enter; disponible: boolea; soci: enter; devolucio: tData; ftupla Definir el tipus tData que permeti emmagatzemat en format numèric una data tData = tupla dia: enter; mes: enter; any: enter; ftupla 10
  • 11. Per a cada soci volen emmagatzemar el nom (text), cognoms (text), data de naixement,adreça (tAdress) Definir el tipus tPersona adequat per emmagatzemar aquest tipus de dades. tPersona = tupla nom: text; cognoms: text; naixement: tData; adress: tAdress; ftupla Definir el tipus tAdress adequat per emmagatzemar una adreça. tAdress = tupla via: text; num: enter; planta: text; porta: text; localitat: text; cp: enter; país: text; ftupla;Es preveu que la bibliomediateca pugui tenir fins 100.000 elements, tot i que en aquestmoment només en té 12368, per aquest motiu linformàtic ha creat el tipus de data tBiblio.En el primer camp semmagatzemarà la quantitat delements actual (ara 12368) i al segon lesdades de cadascun dels elements a partir de la posició 1 i consecutivament.Es preveu que la bibliomediateca pugui arribar a tenir fins 5000 socis (ara nhi ha 1300) i peraquest motiu també ha creat el tipus tSoci. Els camps de tSoci tenen els significatsequivalents als de tBiblioi, per acabar, ha creat dues variables que contindran els valors 11
  • 12.  Escriure l’expressió que ens permet saber si el darrer element entrat a la base de dades és un DVD que es pot deixar (BMedia.item[BMedia.en_fons ].tipus == “D”) i (BMedia.item[BMedia.en_fons ].disponible) Escriu la funció quantsDeixats que rep nom i cognoms dun soci i les variables BMedia i Poblacio i retorna la quantitat delements que té deixats. (Suposeu que disposeu de la funció textEqual(cad1: text, cad2:text) que retorna cert si les dues cadenes són iguals i fals en cas contrari) funcio quantsDeixats(nom: text, cognoms: text, biblio: tBiblio, socis: tSoci) : enter var i, num, id: enter; fvar num := 0; id := 0; per i := 1 fins i ≤ socis.actuals fer si (socis.soci[i].nom = nom i socis.soci[i].cognoms = cognoms) llavors id = i; fsi fper per i := 1 fins biblio.en_fons fer si (biblio.item[i].soci = id) llavors num = num + 1; fsi fper retorna num; ffuncio 12
  • 13. Exercici 5: Treball amb tuples en PHP [20%]Objectius: Localitzar i treballar amb informació emmagatzemada en un esquemacombinat de taules i tuples en PHP.Materials: Mòdul 4: Tipus estructurats de dades Guia bàsica de PHP: Mòdul 5 Tipus estructurats de dades en PHPTasca: Donat un conjunt de dades emmagatzemat en un esquema combinat detaules i tuples, localitzar, seleccionar i calcular amb aquestes dades .En una escola tenen les dades d’alumne emmagatzemades en una taula de tuples de nom$student. Cada tupla consta dels següents camps:  name que emmagatzema el nom de pila de l’estudiant  sex que pren el valor true per les dones i false pels homes  age que emmagatzema la seva edat  matter, una taula on s’emmagatzemen els noms de les assignatures que cursa l’estudiant  grade, una taula, de la mateixa longitud que l’anterior, que emmagatzema les qualificacions obtingudes en les assignaturesEs demana que es construeixin 3 accions: countSex que rep com a paràmetre la taula d’estudiants i escriu: o El títol "Sexes dels estudiants" o La frase "Hi ha X dones" on X és el nombre de dones o La frase "Hi ha Y homes" on Y és el nombre dhomes o Els noms de totes les dones separats per comes o Els noms de tots els de tots els homes separats per comes matterOf que rep com a paràmetre la taula d’estudiants i una cadena de text que significarà un nom i escriu en pantalla: o Un títol que indiqui "Assignatures i qualificació mitjana de SS" on SS és el nom rebut. o Si hi ha estudiants de nom SS, en una línia per estudiant  l’edat de l’estudiant  la llista de les assignatures  la qualificació mitjana, amb dos decimals, de l’estudiant SS o Si no hi ha estudiants amb el nom, el missatge "No hi ha estudiants de nom SS". 13
  • 14.  gradeAverage que rep com a paràmetre la taula d’estudiants i escriu en pantalla: o Un títol que indiqui "Mitjanes de notes dels estudiants" o La mitjana, amb tres decimals, obtinguda damitjanar les qualificacions mitjanes dels estudiants.Indicacions i requisits d’implementacióEs facilita la plantilla pract2_exer05_pla.php que ha de renomenar-se per lliurar compract2_exer05.php, i que conté parts programades que no s’han de modificar i altres queheu d’escriure vosaltres:  Capçaleres de les 3 function que heu de programar vosaltres. Les capçaleres no s’han de modificar..  Programa principal, format per o unes instruccions d’escriptura. Heu de canviar les paraules NOM_ESTUDIANT pel vostre nom de manera que es mostri en pantalla en les execucions. o una sentència que carrega les dades de l’arxiu extern data.php (l’arxiu es facilita amb l’enunciat i ha de copiar a la mateixa carpeta que el programa). No s’ha de modificar. o una sèrie de crides a les function que comproven el seu funcionament en diversos casos i que no s’han de modificar.El fitxer data.php es crida en el programa mitjançant la instrucció include ("data.php"); iincorpora al programa la variable $student que conté totes les dades de 35 estudiants..Aquest fitxer servirà per a les proves. Per a la correcció de la pràctica es farà servir un altrefitxer amb el mateix nom i estructura, però amb altres continguts.Característiques de les accions  function countSex($list) El parámetre $list serà la llista d’estudiants rebuda (La funció count4 us serà útil per esbrinar la quantitat d’elements que té una matriu)  function matterOf($list, $name) El parámetre $list serà la llista d’estudiants rebuda El parámetre $name el nom dels estudiants a buscar. (Es recorda que les cadenes de text de més d’un caràcter no han de comparar-se amb l’operador ==. Pot usar-se la funció interna del PHP strcmp5 que retorna un 0 si les dues cadenes que rep són iguals). (Es recorda que per escriure un número amb una quantitat exacta de decimals és aconsellable l’ús de l’ordre printf6.)  function gradeAverage($list) El parámetre $list serà la llista d’estudiants rebuda4 http://es2.php.net/manual/es/function.count.php5 http://es2.php.net/manual/es/function.strcmp.php6 http://es.php.net/manual/es/function.printf.php 14