Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

7,243 views

Published on

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

Published in: Education
  • Be the first to comment

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

  1. 1. Estudis d’Informàtica, Multimèdia i TelecomunicacióProgramacióPràctica 1SOLUCIÓIndicacions 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_PRACT1 adreçat a la bústia “Lliurament d’activitats”3. El fitxer comprimit contindrà aquest fitxer amb les respostes als exercicis 1 a 3 i els arxius php corresponents als exercicis 4 i 5. No sha dadjuntar els fitxers dimatges ni de dades4. Data límit per lliurar la solució: dilluns, 28 de novembre de 2011 (a les 23:59 hores).És imprescindible respectar el format i data d’entrega. La no adequació aaquestes especificacions pot suposar la no avaluació de la Pràctica.
  2. 2. Exercici 1: Treball amb seqüències [10 %]Objectius: Donada una seqüència de dades, aplicar l’esquema adequat per construirun algorisme que solucioni un determinat problema.Materials: Mòdul 3: Tractament seqüencial.Tasca: Crear mòdul (acció o funció) que rebi un número sense decimals, calculi, peruna banda, la suma de totes les xifres i per altre el producte de totes les xifres (si unaxifra és un zero no intervindrà en el càlcul del producte), i retorni els dos valors, suma iproducte.P.e. si el número es el 123, es retornarà 6 i 6; si és el 420 es retornarà el 6 i el 8; si ésel 30, es retornarà el 3 i el 3.Com que ha de retornar dos valors el mòdul ha de ser una acció.accio sumProd( ent numero: enter, sor sum: enter, sor prod:enter) var digit: enter; fvar {inicialització de variables} sum := 0; si (numero = 0) llavors prod := 0; {si el número és zero es retorna zero} sino prod:= 1; {per poder fer multiplicacions sinicialitza a 1} fsi mentre (numero>0) fer digit := numero mod 10; {es recull una xifra} sum:= sum + digit; si (digit ≠ 0) llavors prod := prod * digit; fsi numero := numero div 10; {treiem la darrera xifra de numero} fmentrefaccio
  3. 3. Exercici 2: Treball amb seqüències [15 %]Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequatper construir un algorisme que solucioni un determinat problema.Materials: Mòdul 3: Tractament seqüencial.Tasca: Codi ASCII estandard A cada caràcter imprimible estàndard li correspon un codi numèric entre el 32 (espai en blanc) i el 126. Els caràcters que es mostren en vermell tenien funció de control en les comunicacionsUn estudiant dinformàtica vol fer un algorisme que li serveixi per encriptar idesencriptar missatges escrits en anglès en els caràcters del codi ASCII, depenentduna clau secreta (un número entre 1 i 20).El mecanisme dencriptació seria simple: a cada caràcter li correspondria el caràcterque està a clau posicions més enllà (p.e. si clau és 3, a la @ li correspondria la C, al 9li correspondria el símbol <, a la a li correspondria la d, etc). Per aplicar el programasuposarà que després del caràcter ~ (ASCII 126) ve lespai en blanc (ASCII 32).Per desencriptarLalgorisme ha de llegir en primer lloc una lletra e (encriptar) o d (desencriptar),després llegirà la clau, en tercer lloc la longitud de la cadena a codificar i després laseqüència de caràcters per encriptar o desencriptar.Per exemple, per ocultar la cadena "programa en PHP" amb una clau 8, la seqüènciadentrada seria <e 8 15 programa en PHP>
  4. 4. Nota: la funció charToCode(c), retorna el codi ascii del caràcter que conté la variablec. La funció codeToChar(num) retorna el caràcter el codi ascii del qual és num.{Pre: a lentrada hi ha una cadena action key long string action és un caràcter que pot prendre els valors e o d key un número entre 1 i 10 string una seqüència de caracteres long la longitud de string}algorisme secret var key, long: enter; action: caracter; fvar action := readChar(); key := readInteger(); long := readInteger(); si (action = d) llavors key := -key; {així podem emprar encripta per codificar i descodificar} encripta(key, long);falgorismeacció encripta(ent key: enter, ent long: enter) var i, code: enter; c: caracter; fvar per i:=1 fins long fer c := readChar(); code := charToCode(c); code := codi + key; {es codifica una lletra a cada volta} si (code > 126) llavors code := code - 95; {això passa el 127 al 32, el 128 al 33, etc} fsi si (code <32) llavors code := code + 95; {això passa el 31 a 126, el 30 al 125, etc} fsi writeChar(codeToChar(code)); fperfaccio{post: a la sortida està la cadena de caràcters codificada amb la clau key }
  5. 5. Exercici 3: Treball amb seqüències [15 %]Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequatper construir un algorisme que solucioni un determinat problema.Materials: Mòdul 3: Tractament seqüencial.Tasca: als multicinemes Penícules han automatitzat el despatx dentrades de maneraque el registre de vendes dentrades crea una seqüència diària del tipus: <h1 s1 h2 s2 h3 s3 … hm sm X> on hi és un caràcter el valor del qual pot ser m matinal t sessió de tarda n sessió de nit g sessió golfa si és un número que pot tenir un valor entre 1 i 8 1 i 2 són sales 3D la resta són sales normals X és la lletra X i indica el final de la seqüènciaEls preus que sapliquen a les sales varien segons la tipologia i sessió segons lasegüent taula: Tipus / sessió m t n g 3D 7.50 8.50 9.00 8.50 2D 6.00 7.00 7.50 7.00Heu de crear un mòdul (acció o funció) que llegeixi de lentrada estàndard unaseqüència diària i retorni la recaudació total del dia.
  6. 6. funcio dailyAmount(): real const CHEAPPRICE: real = 6.0; MEDIUMPRICE: real = 7.0; CHEAPPRICE: real = 6.0; fconst var total: real; cinema: integer; session : character; fvar total := 0.0; car := readCharacter(); mentre (car ≠ X) fer si (car = m) llavors total := total + 6.0; sino si (car = n) llavors total := total + 7.5; sino total := total + 7.0 fsi fsi cinema := readInteger(); si (cinema < 3) llavors total := total + 1.5; {sobrepreu de 3D} fsi fmentre retorna (total);ffuncio
  7. 7. Exercici 4: Treball amb seqüències [30 %]Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequatper construir un programa en PHP que solucioni un determinat problema.Materials: Mòdul 3: Tractament seqüencial. Guia Bàsica de PHP: mòduls 1 a 4 i mòdul 7.Tasca: Tractar una seqüència de números per obtenir-ne valors singulars i estadístics. A la crida del programa es rep, en el paràmetre filename, el nom dun fitxer que conté una instrucció php del tipus <?php $cadena="50 32 19 53 32 27 51 33 34 34";.?> la variable $cadena conté una cadena de text formada per números duna o dues xifres separats per un espai en blanc. El programa ha de llegir la seqüència i  Al principi: dir quans números integren la seqüència  Durant la lectura: per cada deu números llegits, escriure en una línia, els deu números, la suma i el producte dels 10 números i també la mitjana.  En arribar el darrer grup de números: o El missatge "Darrer grup de números" o La quantitat de números que integra aquest grup o Llista, suma, producte i mitjana del darrer grup de númerosIndicacions El fitxer php rebrà el nom pract1_exer4.php La crida al programa serà del tipus pract1_exer4.php?filename=nom_arxiu_dades per la qual cosa shaurà demprar la instrucció $filename=$_GET["filename"]; per carregar el nom del fitxer que incorpora la instrucció que carrega la variable $cadena. Un cop carregat aquest nom, es pot incorporar la instrucció al programa mitjançant lordre include($filename)1; ambdues instruccions ja formen part de la plantilla i són les primeres del programa principal. El fitxer example.php adjunt carrega un daquests fitxers i nimprimeix el contingut. la crida ha de ser del tipus example.php?filename=data45 Es faciliten diversos arxius de dades amb els noms data40 a data49. Són fitxers de text i podeu obrir-los per comprovar el contingut: una instrucció php.1 http://www.php.net/manual/es/function.include.php
  8. 8.  Per a recollir els números un a un de la seqüència saconsella fer servir la combinació dinstruccions explode i array_shift. Per conèixer la longitud dun array podeu fer servir la funció count($nom_variable);2 Shaurà dimplementar una acció NL() per escriure el salt de línia a la sortida. Shaurà dimplementar una acció block_10(entsor var1, ...) que rebi com a primer paràmetre la variable sobre la que es fa larray_shift (si cal en pot rebre més) i escrigui, en una mateixa línia, totes les dades que es sol·licita per cada bloc de dades. Per exemple pel bloc de dades 1 2 3 4 5 6 7 8 9 1 escriuria 1 2 3 4 5 6 7 8 9 1 46 362880 4.6 Lacció NL() es farà servir sempre que es vulgui fer un salt de línia a la sortida des del PHP. Lacció block_10 semprarà cada cop que shagi descriure les dades corresponents a un bloc de números. Per escriure un número real amb un nombre concret de decimals cal per servir la instrucció printf3AvaluacióEs valorarà especialment laplicació correcta dels esquemes de cerca, recorregut i/otractament adequats al problema.També es tindrà present el disseny i laprofitament adequat de funcions i accions, tantles preceptives per enunciat com aquelles altres que resultin útils i que lestudiantvulgui desenvolupar voluntàriament.2 http://www.php.net/manual/es/function.count.php3 http://materials.cv.uoc.edu/continguts/PID_00149863/web/main/m3/v5_3.html ihttp://materials.cv.uoc.edu/continguts/PID_00149863/web/main/m7/v2_2.html
  9. 9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//ES""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html lang="ES" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"><head><title>Practica 1 - Exercici 4</title></head><body><h3>Practica 1 - Exercici 4</h3><h3>SOLUCIO</h3> <!-- No oblideu posar el nom --><div><?php /* Carrega a la variable filename el nom dun arxiu de text que conté una instrucció que carrega les dades a la variable $cadena. Les dades carregades són una sèrie de números de dues xifres El programa, ha de llegir tots els números i escriure: Al principi : Quants números hi ha. Durant la lectura : Per cada 10 números llegits escriurà en una línia la llista de números la suma, el producte i la mitjana dels números del bloc En arribar al darrer bloc de números: el missatge "Darrer grup de números" la quantitat de números que integra aquest grup suma, producte i mitjana del darrer grup de números PRACTICA 1 - setembre 2011- gener 2012 autor:*//************ FUNCTION *************/ function NL() { //new line print "<br />"; } function block_10(&$list, $counter) { //write writes $counter long list numbers and statistics $sume=0; $prod=1; NL(); for($i=0; $i<$counter; $i++) { $n = array_shift($list); print"$n "; $sume += $n; $prod *= $n; } print " ($sume) ($prod) "; printf ("(%.2f)", $sume / $counter); } /*********** PROGRAMA PRINCIPAL ************/if (isset($_GET["filename"])){ // load data file $filename=$_GET["filename"]; include($filename);
  10. 10. $numeros = explode( , $cadena); // init variables $quantity = count ($numeros); // block sequence treatment while ($quantity>0) { $counter = min(10, $quantity); if ($counter<10) { NL(); print "Darrer grup de n&uacute;meros"; } block_10($numeros, $counter); $quantity = count ($numeros); } } else { print "Falta el nom de larxiu de dades"; NL(); print "la crida és del tipus <b>pract1_exer5.php?filename=<i>nom_darxiu</i></b>"; }?></div></body></html>
  11. 11. Exercici 5: Codificació en PHP [30 %] Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequat per construir un programa en PHP que solucioni un determinat problema. Materials: Mòdul 3: Tractament seqüencial. Guia Bàsica de PHP: mòduls 1 a 4 i mòdul 7. Tasca: Disposem de quatre imatges que representen quatre personatges familiars: mare, pare, noia i noi, en format png i el nom de les quals són les quatre primeres xifres. La tasca plantejada és investigar en una cadena de text laparició de les paraules mum, dad, girl i boy, per tal de fer aparèixer a una pàgina web tantes imatges com cops apareix cadascuna de les paraules. Pàgina corresponent a la cadena 1.png 2.png 3.png 4.png 14mumgfj00girltuicdaddshmumuboyhidadjf A la crida del programa es rep, en el paràmetre filename, el nom dun fitxer que conté una instrucció php del tipus $cadena="14mumgfj00girltuicdaddshmumuboyhidadjf"; la variable $cadena conté la cadena de text on sha de localitzar els noms dels personatges. Indicacions  El fitxer php rebrà el nom pract1_exer5.php  La crida al programa serà del tipus pract1_exer5.php?filename=nom_arxiu_dades per tant, shaurà demprar la sentència $filename=$_GET["filename"]; per carregar el nom del fitxer que incorpora la instrucció que carrega la variable $cadena. Un cop carregat aquest nom, es pot incorporar la instrucció al programa
  12. 12. mitjançant lordre include($filename)4; ambdues instruccions ja formen part de la plantilla i són les primeres del programa principal. El fitxer example.php adjunt carrega un daquests fitxers i nimprimeix el contingut. la crida ha de ser del tipus example.php?filename=data24 Es faciliten diversos arxius de dades amb els noms data50 a data55. Són fitxers de text i podeu obrir-los per comprovar el contingut: una instrucció php. Com que tots els caràcters van seguits, sense cap separador, la funció explode no és daplicació. 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 />"; Sha de tenir present que al primer caràcter se li assigna líndex 0. PHP facilita la funció strlen($cadena)5; que retorna la longitud en caràcters de la cadena de text $cadena Shaurà dimplementar una acció NL() per escriure el salt de línia a la sortida. Shaurà dimplementar el mòdul putImg($image_file) que ha de rebre com a paràmetre el nom dun fitxer en format png i el posarà a la pantalla. P.e. Si rep com paràmetre oasis, posaria en la pàgina web el fitxer dimatge osasis.png. Per tal de localitzar les paraules mum, dad, girl i boy, shaurà de crear el mòdul detectStarring que rebrà la variable que conté la cadena de text y un número (posició) i retornarà o un 1 si a la posició de la cadena comença la subcadena mum. o un 2 si a la posició de la cadena comença la subcadena dad. o un 3 si a la posició de la cadena comença la subcadena girl. o un 4 si a la posició de la cadena comença la subcadena boy. o un 0 en els altres casos. PHP facilita la funció substr_compare6($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".AMPLIACIÓ OPCIONALEs pot crear la function contenida($main_str, $str, $offset) que retorni un 0 si lacadena $str está sin de la cadena $main_str a partir de la posició $ofsset i un -1altrament. De fet vindria a ser una simplificació de la funció substr_compare que4 http://www.php.net/manual/es/function.include.php5 http://es.php.net/manual/es/function.strlen.php6 http://php.net/manual/es/function.substr-compare.php
  13. 13. només serviria per saber si la totalitat duna cadena petita está situada en una determinada posició duna cadena més gran. Si es crea aquesta funció, serà contenida i no pas substr_compare la que es faci servir per localitzar les paraules mum, dad, girl i boy. Avaluació Es valorarà especialment laplicació correcta dels esquemes de cerca, recorregut i/o tractament adequats al problema. També es tindrà present el disseny i laprofitament adequat de funcions i accions, tant les preceptives per enunciat com aquelles altres que resultin útils i que lestudiant vulgui desenvolupar voluntàriament.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//ES""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html lang="ES" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"><head><title>Practica 1 - Exercici 5</title></head><body><h3>Practica 1 - Exercici 5</h3><h3>Nom de lestudiant</h3> <!-- No oblideu posar el nom --><div><?php/* Carrega a la variable filename el nom dun arxiu de text que conté una instrucció que carrega les dades a la variable $cadena. El contingut de la variable cadena és una cadena de text en la qual pot aparèixer les subcadenes "mum", "dad", "girl" i "boy". El programa ha de revisar el contingut de la cadena i mostrar una imatge ("1.png", "2.png", "3.png" o "4.png") cada cop que troba en la cadena la subcadena corresponent. PRACTICA 1 - setembre 2011 - gener 2012 autor:*/ /*********** PROGRAMA PRINCIPAL ************/if (isset($_GET["filename"])){ // load data file $filename=$_GET["filename"]; include($filename); // data file contains $cadena assignation $long= strlen($cadena); //$long contains $cadena length $long -=2; // beyond long-2 they are not coincidences
  14. 14. for ($i=0; $i<$long; $i++) { $starring = detectStarring($cadena, $i); if ($starring!=0) putImg($starring); }}else{ print "Falta el nom de larxiu de dades"; NL(); print "la crida és del tipus <b>pract1_exer5.php?filename=<i>nom_darxiu</i></b>";}/************ FUNCTION *************/ function putImg($image_file) { // put the image print "<img src=".$image_file.".png>"; }//de putImg function NL() { // new line print "<br />"; }// de NL function detectStarring($string, $pos) { switch ($string[$pos]) { case m: if (substr_compare($string, "mum", $pos, 3)==0) $starring=1; break; case d: if (substr_compare($string, "dad", $pos, 3)==0) $starring=2; break; case g: if (substr_compare($string, "girl", $pos, 4)==0) $starring=3; break; case b: if (substr_compare($string, "boy", $pos, 3)==0) $starring=4; break; default: $starring=0; } return ($starring); }//de detectStarring?></div></body>

×