Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Programació - Pràctica 2 - Lidia Bria

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 12 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (13)

Andere mochten auch (20)

Anzeige

Weitere von Lidia Bria (20)

Anzeige

Aktuellste (20)

Programació - Pràctica 2 - Lidia Bria

  1. 1. Estudis d’Informàtica, Multimèdia i Telecomunicació Programació Pràctica 2 Cognoms: Posa aquí els teus cognoms Nombre: Posa aquí el teu nom
  2. 2. Exercici 1: Cerques en taules de taules [20 %] Un observatori meteorològic emmagatzema les dades de temperatura en una dada estructurada. tipus dia: taula[24] de real;{representa les 24 hores del dia} mes30: taula[30] de dia; {representa els dies del mes} ftipus A més, s’ha creat les següents variables: var abril, juny, setembre, novembre: mes30; {guarda les temperatures dels mesos assenyalats} fvar En cada posició de les taules de taules hi ha la temperatura mesurada en una hora concreta. P.e. en abril[3][18] estaria la temperatura que feia el 3 d’abril a les 6 de la tarda Tasca: Crear el mòdul average (acció o funció, el més adequat) que rebi la taula corresponent a un mes, i retorni  en una taula les temperatures mitjanes de cada hora del dia del mes (la temperatura mitjana que ha fet en cadascuna de les hores, ha de retornar les 24 temperatures) i  en una variable la temperatura mitjana del mes.
  3. 3. Exercici 2: Treball taules de taules en PHP [30 %] El joc minesweeper es un joc tradicional d’ordinador en què el jugador ha de descobrir en quines posicions d’un tauler es troben les mines que el jugador identifica amb la imatge . Les caselles interiors tenen 8 caselles veïnes, però les laterals o d’un vèrtex en tenen menys Aspecte d’un joc finalitzat amb èxit Quan el joc finalitza, es mostren les mines i, a cadascuna de les altres caselles, el nombre de mines que estan al seu veïnatge (el veïnatge d’una casella està constituït per totes les caselles amb qui comparteix una aresta o un vèrtex). Si en el veïnatge d’una casella no hi ha cap mina no apareix cap xifra. Es fa servir una taula de taules per emmagatzemar els nombres enters que representen les dades de un tauler del joc minesweeper de manera que la taula de la imatge anterior seria una taula de 8 x 8 on hauria un 9 en les caselles que representen una mina i a les altres caselles el número corresponent al veïnatge. P.e 00190022001 9 representa Tasca: Crear un conjunt de functions en php que creïn i manipulin taules de taules segons les indicacions. El programa principal ja forma part de la plantilla. Per a dur a terme aquesta tasca es faciliten els fitxers d'imatge que poden mostrar les caselles del camp de mines. 0.png 1.png 2.png 3.png 4.png 5.png 6.png 9.png Indicacions preceptives  El programa rebrà un paràmetre filename que és el nom del fitxer de dades en què s’indiquen les mides del tauler i les coordenades de cada mina. El contingut del fitxer és una cadena de text on podem veure una seqüència de nombres que respon a l’esquema: files columnes f1 c1 f2 c2 .... fn cn on files indica l’alçada del camp de mines columnes indica l’amplada del camp de mines fi ci indiquen la posició de la mina i
  4. 4. per exemple la cadena de text “3 4 0 3 2 3” correspondria a la imatge del costat. S’ha de tenir present que la posició inicial és la 0 0.  La plantilla prac2_exer2_plantilla.php porta incorporat el programa principal que fa les crides a les function. El codi que va escrit a la plantilla no s'ha de modificar.  Es faciliten arxius de dades (data20 a data24) per a les proves.  Els fitxers d'imatge s'han d'ubicar a la mateixa carpeta de localhost que el fitxer php.  S'ha de crear la function createTable que rep dos paràmetres numèrics ($height, $width) que són la quantitat de files de quadres ($row) i quants quadres hi ha per fila ($col), genera un array bidimensional que correspon a les fitxes sol·licitades, l’omple de zeros i el retorna.  S’ha de crear la function putCell que rep un número i mostra la imatge corresponent. El número rebut pot ser un 9 (i es mostrarà la imatge d'una mina), un 0 (i es mostrarà la casella en blanc) o un número entre 1 i 6 (i mostrarà el quadre amb el número dins). Els números es corresponen amb el nom de les imatges.  S’ha de crear la function drawLine que rep un array unidimensional (que correspon a una filera de la taula) i mostra les caselles en pantalla. Per mostrar cadascuna de les caselles, haurà d’emprar la function putCell.  S’ha de crear la function drawMinefield que rep l’array bidimensional com paràmetre i mostra totes les caselles en pantalla. Per mostrar cadascuna de les files de fitxes, haurà d’emprar la function drawLine.  S'ha de crear la function loadMinefieldData que rep dos paràmetres: o $minefield, la taula plena de zeros de les dimensions adequades i que actualitzarà posant un 9 a les caselles on vagi una mina i, en les altres caselles, el valor del seu veïnatge. o $data, un array unidimensional on figuren les coordenades de les mines  Per obtenir la dimensió d'una taula, es pot fer servir la funció count1 de php. En el cas de taules de taules la funció count aplicada a la variable (la taula de taules) retornarà quantes fileres té la taula i aplicada a una filera, indicarà quantes columnes té la filera.  No es poden emprar variables global.  En les instruccions print no es pot posar una posició d'array directament dins d'una cadena constant. Cal emprar l'operador de concatenació · (punt). per exemple, la instrucció print td width='80' $oneDog[$i] /td escriuria una casella d'una taula amb el contingut exacte $oneDog[$i] en lloc del continguts d'aquesta casella de l'array. Per obtenir el resultat desitjat s'ha d'emprar la concatenació print td width='80'.$oneDog[$i]./td   1 Recordeu que, a diferencia de les taules en llenguatge algorísmic que comencen en la posició 1, en PHP la primera posició dels arrays és la posició 0. Podeu emprar functions de les emprades en exercicis o solucions anteriors, ja siguin completes o adaptades a les noves dades estructurades. http://php.net/manual/es/function.count.php
  5. 5. Podeu comprovar el funcionament a: http://prog.uoc.edu/prac2/prac2_exer2.php?filename=data20 Consells Potser la part més conflictiva de l’exercici és el càlcul del veïnatge de cada casella en la function loadMinefieldData. Una primer aproximació a la solució podria ser: 1. Llegir les dades de cada mina i posar un 9 en el minefield. 2. Fer un recorregut per minefield i per a cada casella mirar quants 9 té al seu voltant Però es pot mirar també d’una altra manera:  Cada cop que posem una mina actualitzem els seus veïns incrementant en una unitat el valor de veïnatge (sempre i quan no sigui un 9). Aquesta segona visió fa que la solució sigui més àgil perquè en lloc de calcular el veïnatge de totes les caselles només hem hagut de mirar el veïnatge de les mines, amb la qual cosa els còmputs són menors. A més, aprofitem el fet que el tauler hagi estat inicialitzat a zeros, perquè abans de posar cap mina totes les caselles tenen veïnatge 0, que és el que correspon. Un altre aspecte a tenir en compte és a quines caselles valorar el veïnatge? Posem pel cas que volem valorar el veïnatge de la mina de posició [$x][$y]. La situació més habitual serà que aquesta mina està rodejada per altres 8 caselles formant una minitaula de 3 x 3, la coordenada de la primera casella d’aquesta minitaula serà [$x-1][$y-1] i la de la última serà [$x+1][$y+1]. Un doble bucle serà de molta utilitat. De totes maneres caldrà tenir en compte que aquesta no és la única possible situació, perquè hi ha mines que poden estar en una cantonada o en un costat i en aquest cas té menys cel·les veïnes que actualitzar. Evidentment mai s’actualitzarà en coordenades que no pertanyin al tauler, és a dir, ni en coordenades negatives ni coordenades que igualin el valor de $height o $width. Avaluació Es valorarà especialment l'aplicació correcta dels esquemes de cerca, recorregut i/o tractament adequats al problema conjuntament amb l'ús adequat dels índex de les taules.
  6. 6. Copieu aquí el codi de la vostra solució ?php ?
  7. 7. Exercici 3: Disseny i treball amb tuples [20 %] Un pirata informàtic vol crear la seva Pirateleaks per informatitzar les seves dades de gestió de tots els documents que ha aconseguit i que emmagatzema en un conjunt de servidors de fitxers. Pretén mantenir fins 10 milions de documents. Amb aquest objectiu us demana que creeu les dades estructurades adequades Tasca:  Dissenyeu la dada estructurada date adequada per mantenir una data exposada en format numèric  Dissenyeu la dada estructurada form_doc capaç d'emmagatzemar la informació d'un document: nom del document, tipus (e-mail, txt, sms, pict, sound, video ...), data del document, data de gravació, font (codi de qui l’ha facilitat, un número de 10 xifres), volum del fitxer en MB, nacionalitats a què es refereix (molts documents poden afectar a més d’un país, es considera que com a màxim afecta 10 països) i el nom del servidor on està gravat (als servidors el nomena mitjançant una lletra majúscula i empra l’ordre alfabètic per anar posant nous servidors). Per mantenir tota la informació de la col·lecció de documents s'ha creat la tupla leaks de la següent manera leaks = tupla doc: taula [10000000] de form_doc; {fitxes dels documents} qtty : enter; {número que indica quantes fitxes estan plenes} ftupla i la variable pirateLeaks del tipus leaks, on s'ha entrat tota la informació de manera que totes les fitxes plenes estan posades consecutivament des de la primera posició.  Escriviu l'expressió que digui si el fitxer del darrer document entrat és un vídeo i mesura més de 50 MB
  8. 8.  Escriviu el mòdul freshNews (acció o funció, el més adequat) que rebi pirateLeaks, un any i un mes i escrigui en el canal de sortida estàndard els noms, tipus i servidors on estan els documents que van poder ser gravats el mateix dia en què es van originar i que pertanyin a l'any i al mes dit.
  9. 9. Exercici 4: Treball amb tuples i taules de tuples en PHP [30 %] S’ha emmagatzemat les dades d’una partida de la carta més alta en una sèrie de tuples de manera que si $t és una tupla $t[“name”] és el nom del jugador $t[card] és un array que conté els codis de les cartes del jugador la dada que porta la informació original de les partides és una seqüència del tipus: {ng b nc name1 c1·1 c1·2 ... c1·nc name2 c2·1 c2·2 ... c2nc ... nameng cng·1 cng·2 ... cng·nc } on  ng : és el nombre de jugadors  b: és l’aposta unitària.  nc: es el nombre de cartes que juga cada jugador  namei és el nom del jugador i.  ci·j és la carta j del jugador de posició i. Els jugadors han apostat cadascun una certa quantitat (es determina en cada partida) i, en acabar, aquests diners se'ls queda qui ha tret la màxima puntuació (o es reparteix a parts iguals entre els jugadors de màxima puntuació si n'hi ha més d'un) Tasca: Recollides les dades en variables discretes i un array de tuples, crear un conjunt de functions en php que manipulin taules de tuples segons les indicacions. El programa principal i la function per carregar les dades des d'arxiu a la taula de tuples ja formen part de la plantilla. El programa s'escriurà a la plantilla prac2_exer4_plantilla.php que es canviarà de nom a prac2_exer4.php pel lliurament. Podeu provar el funcionament a l'enllaç http://prog.uoc.edu/prac2/prac2_exer4.php?filename=data40 Indicacions preceptives   Els fitxers de dades i d'imatge s'han d'ubicar a la mateixa carpeta de localhost que el fitxer php.  La plantilla porta incorporada la function getData que llegeix el paràmetre de nom filename, carrega les dades i crea l'array de tuples i també calcula el muntant de les apostes. Ambdos valors es retornen en paràmetres de sortida. Per exemple, si $game és l'array de tuples, per saber el nom del primer jugador de la partida, l'expressió seria $game[0][name]2 Per saber quina ha estat la segona carta jugada pel jugador de posició 3 l’expressió seria $game[3][“card”][1]2  El codi que va escrit a la plantilla no s'ha de modificar.  2 Per a dur a terme aquesta tasca es faciliten els fitxers de seqüències amb el nom data40 a data44. S'ha de crear la function putCard que rep el codi d’una carta i posa la imatge de la carta espanyola corresponent en pantalla. Aquesta function ha de ser la única manera de mostrar les imatges de carta en la pantalla recordeu que en PHP la primera posició dels arrays és la posició 0
  10. 10.  S’ha de crear la function cardValue que rep el codi d’una carta i retorna el valor nominal de la carta (les figures valen 10, 11 i 12 respectivament).  S'ha de crear la function showTable que rep un array que conté la sèrie de cartes d’un jugador i les mostra en la pantalla en una filera. Per mostrar-les cridarà putCard.  S’ha de crear la funtion computeScore que rep un array que conté la sèrie de cartes d’un jugador i retorna el valor suma de les cartes. Per dur a terme la seva tasca cridarà cardValue  S’ha de crear la function showGame que rep el valor total apostat (entre tots els jugadors) i la taula de tuples $game i o calcula la puntuació de cada jugador (que emmagatzema en un array) o de l'array anterior obté quina és la puntuació màxima de tots els jugadors i quants jugadors l'han obtingut o calcula el que s'haurà de pagar a cada guanyador o per a cada jugador escriu:    En una línia Gamer i el nom del jugador En la línia següent mostra les cartes del jugador i escriu la puntuació obtinguda i el que li toca cobrar S'ha de crear la function extractGame que rep un número $n i la taula de tuples $game i retorna una nova taula de tuples en què cada jugador té les $n primeres cartes que tenia en $game. Per exemple. Si $game contenia name card name card Shaw 23 Kelly 32 17 8 15 4 22 0 9 14 la crida extractGame(3, $game) retornaria una taula de tuples name card name card Shaw 23 Kelly 32 17 8 22 0 En el cas que el número de cartes que es demana que s'extregui sigui superior al de cartes que havia, es retornarà el nombre de cartes original. Per exemple, la crida extractGame(7, $game) retornaria, un array de tuples igual a $game. name card name card Shaw 23 Kelly 32 17 8 15 4 22 0 9 14 Consells  Observareu que getData no dóna informació de la quantitat de jugadors ni de la quantitat de cartes que juguen a la partida. No és necessari. La quantitat de
  11. 11. jugadors es pot obtenir del mateix array de tuples emprant la funció count3 passant com paràmetre la taula de tuples (count ens dirà quantes tuples hi ha) i la quantitat de cartes que ha jugat cadascun s’haurà d’obtenir de la mateixa manera del l'array [card] del primer jugador count ($game[0][card])  Podeu reutilitzar directament o modificant-les functions d'altres pràctiques o PACs, be siguin vostres o de les solucions. Avaluació Es valorarà especialment l'aplicació correcta dels esquemes de cerca, recorregut i/o tractament adequats al problema conjuntament amb l'ús adequat dels índex de les taules. 3 http://us2.php.net/manual/es/function.count.php
  12. 12. //Aquí heu de posar el vostre codi ?php ?

×