SlideShare a Scribd company logo
1 of 19
Download to read offline
Estudis d’ Informàtica, Multimèdia i Telecomunicació




Programació
Práctica 2

SOLUCIO




Indicacions generals:
Llegiu amb detall les tasques encomanades a cada exercici i també les indicacions i
suggeriments de resolució.
Per a dubtes i aclariments sobre l’enunciat, adreceu-vos al consultor responsable de la
vostra aula.
Lliurament:
1. Els exercicis en llenguatge algorísmic han de resoldre’s en aquest mateix document
2. 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. La
no adequació a aquestes especificacions pot suposar la no avaluació de la Pràctica.




                                                                                        1
Exercici 1: Treball amb taules [15%]


Objectius: Donat un conjunt de dades organitzat en una taula, aplicar l’esquema
adequat per construir un algorisme que solucioni un determinat problema el resultat
del qual té forma de taula


Materials: Mòdul 4: Tipus estructurats de dades

Tasca: Dissenyar el mòdul (acció o funció, el més adequat) sonQuadrats que rebi una taula
candidats de 100 nombres enters i retorni una taula de 100 booleans; en les posicions
figurarà true o false segons si el número que ocupa la posició en candidats sigui un quadrat
perfecte o no ho sigui.
                                                                   .
(Per exemple si els valors de les primeres posicions de candidats fossin
index      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 serien
index     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.




                                                                                          2
La solució a l'exercici s'ha estructurat amb dues funcions, una que determina si un nombre
és quadrat perfecte (esQuadrat) i l'altre, sonQuadrats, sol·licitada en l'enunciat, que treballa
amb els arrays i fa crides a esQuadrat.

funcio esQuadrat(n :enter):booleà
{retorna cert si el número rebut és quadrat perfecte i fals en cas
contrari}
var
  i: enter;
  quadrat : booleà;
fvar

  i := 1;

  mentre (i * i < n) fer
      i := i +1
  fmentre

  retorna (i*i = n);

ffuncio


funcio sonQuadrats(n: taula[100] de enters): taula[100] de boolea
{rep un array de 100 números i retorna un array de 100 booleans en què es
diu si és quadrat o no cadascun dels números rebuts. Fa servir la funció
esQuadrat}

var
  hoSon:taula[100] de boolea;
  i: enter;
fvar

  per i := 1 fins 100 fer
    hoSon[i] := esQuadrat(n[i]);
  fper

  retorna hoSon;
ffuncio




                                                                                        3
Exercici 2: Treball amb taules en PHP [20%]


Objectius: Construir un algorisme que solucioni un determinat problema amb l’ús de
taules.


Materials: Mòdul 4: Tipus estructurats de dades
           Guia bàsica de PHP: Mòdul 5 Tipus estructurats de dades en PHP
Tasca: Crear el programa Repartidor de cartes que reparteix aleatòriament, una darrera
l'altra les 40 cartes de pòquer (no hi són 8, 9 ni 10). En la pantalla hauran de mostrar-se les
40 cartes sense que en falti cap ni que hagi repeticions.
Pe: si la crida és http://localhost/pract2_exer02.php la pantalla pot mostrar




Recursos: 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
Consells

Posar aleatòriament 40 cartes no és cap problema complicat, es tracta de fer 40 sortejos de
números entre 0 i 39. Però fer-ho així no ens assegura que no hagi repeticions i que surtin
les 40 cartes diferents.

Quan es fa amb una baralla de veritat no hi ha problema perquè quan s’ha tret una carta ja
no pot tornar a sortir. En el programa s’ha de simular aquesta situació, i això es pot fer
mitjançant un array que indiqui si una carta pot sortir o ja no. Aquest array ha de tenir una
posició 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 s'agafi 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 s'ha 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à l'ordre 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 s'agafa 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.php
2
  PHP permet que una function rebi paràmetres i els modifiqui i, a més, retorni un valor amb la
instrucció return. En aquest sentit la function es comporta com acció i funció alhora.


                                                                                          5
   S'ha de construir la function put_cards, que mostrarà per pantalla les 40 cartes per
       l'ordre en que estan disposades en $cards.
      L'esquema de treball serà sortejar un rera l'altre 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 la function put_row que farà que, si l’amplada de la pantalla és
       suficient, les cartes es mostrin en fileres de 8 cartes d’amplada (com la imatge
       d’exemple).

<!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>PR2_Exer2_Card_dealer</title>
</head>
<body>
<h3>Repartidor de cartes</h3>
<h3>SOLUCIÓ</h3>
<div>
<?php

  /*definició de constants*/
   define("NUMCARDS", 40);

  /*declaració de funcions*/
  function NL()
  { //new line
    print "<br />";
  } //de NL

  function init_array(&$token, $valor)
  {//inicialitza l'array amb $valor en totes les posicions
    for($i=0; $i<NUMCARDS; $i++) $token[$i]=$valor;
  }//de init_array

  function card_draw(&$token)
  {//sorteja una carta en l'interval adequat
     $azar = rand (0, NUMCARDS-1);

   //correcció perquè sigui una no usada
     while (!$token[$azar])
        {
          $azar++;
          //si arriba al final torna al principi
          if ($azar==NUMCARDS) $azar=0;
        }
     //s'ha arribat a una posició true
     $token[$azar]=false;
     //retorna el número de la carta
     return $azar;
  }// de card_draw

  function put_cards($inicial, $token)
  { //posa en pantalla una fila de cartes cap_amunt o cap_avall
     //segons els valors true o false de les posicions de l'array
     //$token
    for ($i = 0; $i<8; $i++)
     {
        $actual = $inicial + $i;
        $card = $token[$actual];
        print "<img src="$card.jpg">";
     }
     NL();
  }




                                                                                     6
/*Programa principal*/
  //inicialitza els arrays
  init_array($cards, -1);
  init_array($not_used, true);

  NL();

    //es sortegen les cartes
    for ($i=0; $i<NUMCARDS; $i++) $cards[$i]= card_draw($not_used);
     //es mostren les cartes
    for ($i=0; $i<NUMCARDS; $i+=8) put_cards($i, $cards);
?>
</div>
</body>
</html>




                                                                      7
Exercici 3: Treball amb taules bidimensionals en PHP [20%]


Objectius: Donades sèries de dades, organitzar-les en taules bidimensionals i
aplicar 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 PHP


Tasca: Simular una taula on entre 2 i 5 jugadors fan una partida de Back Jack sense
apostes. En fer la crida al programa es mostraran les cartes de cada jugador, la suma de
punts 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 seria




El programa que es demana aprofita mòduls de l'exercici 2 i també els fitxers d'imatge.
El Black Jack és una variant del joc del 7 i mig en què cada jugador s'ha d'aproximar, però
sense passar-se, a sumar 21 punts. 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.
S'acceptaran entre 2 i 5 jugadors, altrament no s'entrarà en el joc i es mostrarà un missatge
del 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}


                                                                                      8
Per a la nostra versió reduïda del Black Jack farem servir només les cartes 1 a 7 i les
figures. El valor de cada carta és:
         10 punts per a l'as i les figures
         el valor nominal propi de la carta per a les cartes de 2 a 7

Recursos: Disposeu dels mateixos fitxers d'imatge que per l'exercici 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 l'array $not_used de longitud 80 i amb el mateix significat
          que l'exercici anterior. Les posicions 0 a 39 signifiquen una baralla i les posicions 40
          a 79 representaran l'altre.
         Els jugadors quedaran representats per la matriu bidimensional $gamer, de manera
          que cada filera representa un jugador i les cel·les d'una 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 l'exemple 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 d'una 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 se'ls pot afegir caselles3.
         Heu d'emprar les funcions NL() i function init_array amb el mateix significat que en
          l'exercici 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 en $matriu[2][1] hi ha emmagatzemat un 4 i en $matriu[1][0] hi ha un 0




                                                                                                                   9
   Heu de crear l'acció play que rebrà dos paràmetres:
          o   l'array que representa un jugador (on es posaran els punts en la posició [0] i
              les cartes en les següents).
           o l'array $not_used
       Aquesta funció anirà extraient les cartes de dues en dues i posant-les a les seves
       posicions de l'array a l'hora que actualitza els punts del jugador. Per extreure cada
       carta podeu fer servir la function card_draw de l'exercici anterior.
       En aquesta funció s'ha 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 l'algorisme. 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 d'entrada sortida
       perquè en ambdós arrays s'escriuen valors que empren el programa principal o altres
       functions..
      Heu de crear l'acció 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) s'escriuria en pantalla els resultats del jugador 2.




Consells
    Si definim la constant NUMCARDS i li assignem el valor 80, les funcions que
      s'heretin de l'exercici 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 l'exercici anterior. No obstant les cartes tenen noms que
      van del 0 al 39. Es podria duplicar el nombre de fitxers d'imatge 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 l'interval [0, 39].
   No intenteu posar directament una posició d'un array dins d'una cadena de text de la
      instrucció print.
       print "el preu és $vector[$i] euros";
       no treurà en la pantalla el que desitgem. Heu de fer servir l'operador de concatenació:
       print "el preu és ".$vector[$i]." euros";




                                                                                       10
<!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>PR2_Exer2 Black Jack</title>
</head>
<body>
<h3>Black Jack</h3>
<h3>SOLUCIÓ</h3>
<div>
<?php

  /*************definició de constants*************/
   define("NUMCARDS", 80);

  /*************declaració de funcions*************/
  function NL()
  { //new line
    print "<br />";
  } //de NL

  function init_array(&$token, $valor)
  {//inicialitza l'array amb $valor en totes les posicions
    for($i=0; $i<NUMCARDS; $i++) $token[$i]=$valor;
  }//de init_array

  function value($number)
  {//retorna el valor de una carta de Black Jack
     $valor=1+$number%10;
     if (($valor>1) && ($valor<8)) return $valor;
     else return 10;
  }// de value

  function card_draw(&$token)
  {//sorteja una carta en l'interval adequat
     $azar = rand (0, NUMCARDS-1);
   //correcció perquè sigui una no usada
     while (!$token[$azar])
        {
          $azar++;
          //si arriba al final torna al principi
          if ($azar==NUMCARDS) $azar=0;
        }
     //s'ha arribat a una posició true
     $token[$azar]=false;
     //retorna el número de la carta
     return $azar;
  }// de card_draw

  function play(&$playgamer, &$token)
  {//rep l'array d'un jugador i l'omple amb les cartes en les posicions 1
   // en endavant i els punts en posició 0
     $points=0;
     $i=1;
     while ($points<17)
     {
        for($j=0; $j<2; $j++)
        {
           $carta = card_draw($token); //escollida una carta entre 0 y 79
           $playgamer[$i]= $carta%40;        //es corregeix a una sola baralla
           $points += value($playgamer[$i]);
           $i++;
        }//del for
     }//del while
     $playgamer[0] = $points;
   //en acabar l'array del jugador té en la posició 0 els punts totals i en les
   //altres posicions les cartes que ha tret per l'ordre que les ha obtingut
  }//de play



                                                                           11
function put_gamer($gamer,$numgamer)
  { //posa en pantalla una fila de cartes corresponent a un jugador
     $long = count($gamer[$numgamer]);
     //l'array té en posició 0 els punts, no és una carta
     for ($i = 1; $i<$long; $i++)
     {
        $card = $gamer[$numgamer][$i];
        print "<img src="$card.jpg">";
     }
     //i escriu la puntuació
     print "Puntuació ".$gamer[$numgamer][0]." punts";
     NL();NL();NL();
  }

  /*************Programa principal*************/

   //entra els jugadors
      $n = $_GET["n"];
      NL();
   //si el nombre de jugadors no és correcte es treu el missatge
      if (($n<2)||($n>5))
      {
         print "Poden jugar entre 2 i 5 jugadors.";
         NL();
         print "La crida hauria de ser pract2_exer03.php?n=x, on <b>x</b> pertany a
{2,3,4,5}";
      }
   //si és correcte es juga
      else
      {
         //inicialització de l'array de control de cartes
         init_array($not_used, true);

          //creació de l'array bidimensional de jugadors $gamer, de longitud $n
          //on cada $gamer[i] és un array amb una primera posició (comptador)
          //amb el valor 0
          for ($i=0; $i<$n; $i ++) $gamer[$i]=array(0);

          //els jugadors juguen un rera l'altre
          for ($i=0; $i<$n; $i ++) play($gamer[$i], $not_used);

        //i es mostren els resultats
        for ($i=0; $i<$n; $i ++)
        {
           print "<b>Jugador $i ";
           put_gamer($gamer, $i);
           NL();
        }
        //es calcula el guanyador i el missatge de sortida
        $missage = "Tots han perdut.";
        $max = 0;
        for ($i=0; $i<$n; $i++)
        {
           $points = $gamer[$i][0];
           if (($points>$max)&&($points<22)) {
              $max=$points;
              $missage = "el jugador ".$i;
           }
           else if ($gamer[$i][0]==$max) $missage = $missage." i el jugador ".$i;
        }
        print "<h3>Guanyador: ".$missage;
     }//del else

?>
</div>
</body>
</html>



                                                                              12
Exercici 4: Treball amb Tuples [25%]


Objectius: Donada una família de dades relacionades, dissenyar les estructures de
dades adients per al seu emmagatzematge i crear expressions i mòduls de programa
per al seu tractament


Materials: Mòdul 4: Tipus estructurats de dades



Tasca: 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 pot
tenir els valors {L, C, D, V o J} amb els significats Llibre, CD, DVD, Videollibre, videoJoc),
l'autor (que denotarem de tipus text), l'editorial (text), el nombre de pàgines (enter), la
durada en minuts (enter), si es pot prestar o està exclòs de préstec, número de soci a qui
s'ha prestat (un enter entre 0 i 10000; el 0 indica que no està prestat) i la data de
devolució(tData).

 Definir el tipus tElement adequat per emmagatzemar aquest tipus de dades.




 Definir el tipus tData que permeti emmagatzemat en format numèric una data




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.




                                                                                      13
 Definir el tipus tAdress adequat per emmagatzemar una adreça.




Es preveu que la bibliomediateca pugui tenir fins 100.000 elements, tot i que en aquest
moment només en té 12368, per aquest motiu l'informàtic ha creat el tipus de data tBiblio.
En el primer camp s'emmagatzemarà la quantitat d'elements actual (ara 12368) i al segon les
dades 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 n'hi ha 1300) i per
aquest motiu també ha creat el tipus tSoci. Els camps de tSoci tenen els significats
equivalents als de tBiblio




i, per acabar, ha creat dues variables que contindran els valors




 Escriure l’expressió que ens permet saber si el darrer element entrat a la base de dades
  és un DVD que es pot deixar



 Escriu la funció quantsDeixats que rep nom i cognoms d'un soci i les variables BMedia i
  Poblacio i retorna la quantitat d'elements 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)




                                                                                      14
15
Exercici 5: Treball amb tuples en PHP [20%]


Objectius: Localitzar i treballar amb informació emmagatzemada en un esquema
combinat 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 PHP


Tasca: Donat un conjunt de dades emmagatzemat en un esquema combinat de
taules 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 assignatures


Es 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 d'homes
        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".




                                                                                 16
   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 d'amitjanar 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 com
pract2_exer05.php, i que conté parts programades que no s’han de modificar i altres que
heu 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"); i
incorpora 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 altre
fitxer 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 rebuda

4
  http://es2.php.net/manual/es/function.count.php
5
  http://es2.php.net/manual/es/function.strcmp.php
6
  http://es.php.net/manual/es/function.printf.php




                                                                                        17
<!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>Escola</title>
</head>
<body>
<!-- Comentari -->
<h1>Escola </h1>
<h3>Solució</h3>
<div>

<?php
/* incorpora l'arxiu de dades "data.php" que defineix l'array $student
   i mostra seleccions de dades de l'arxiu en diferents function.
    L'array $student està formats per tuples (arrays associatius) amb la següent
    definició:
      name     => string que tconté el nom de l'estudiant
      age      => enter que conté l'edat de l'estudiant
      sex      => booleà que indica el sexe true-> dona i false->home
      matter   => array que conté els noms de les assignatures de l'estudiant
      grade    => array que conté les qualificacions numériques de les assignatures de
                  l'estudiant
*/

    /***********************FUNCTION**********************************/
     function countSex($list)
     { /* recompte quants estudiants hi ha per sexes i escriu el resultat
           també llista els noms de les dones i després els dels homes
         */
        $numFemale = 0;
        $numMale = 0;
        $male = array();
        $female = array();
        $long = sizeof($list);

        print "<h3>Sexes dels estudiants</h3><p>";
        for ($i=0; $i<$long; $i++)
        {
           if ($list[$i]['sex'])
           {
              $female[$numFemale]=$list[$i]['name'];
              $numFemale++;
           }
           else
           {
              $male[$numMale]=$list[$i]['name'];
              $numMale++;
           }
        }
        print "<p>Hi ha $numFemale dones </p>";
        print "<p>Hi ha $numMale homes </p>";
        //l'escriptura de la llista de noms es deixa a una altra acció
        writeSex ("Dones", $female);
        writeSex ("Homes", $male);
     }//de countSex


     function writeSex($title, $vector)
     {//escriu una llista de noms
        $long=count($vector);
        print "<p><b>$title:</b> ";
        for ($i=0; $i<$long; $i++)
        {
           if ($i != 0) print ", ";
           print $vector[$i];
        }
        print"</p>";
     }// de writeSex

     function matterOf($list, $name)
     { /* mostra per pantalla edat, les assignatures i la
           mitjana de notes de tots els que s'anomenen com
           el segon paràmetre
           Si no hi ha cap estudiant amb el nom s'escriu una frase
           que així ho indica
         */



                                                                                         18
$numStudent = 0;
          $long = count($list);
          print "<h3>Assignatures i qualificació mitjana de $name</h3><p>";
          for ($i=0; $i<$long; $i++)
          {
            if (strcmp($name, $list[$i]['name'])==0)
            {
              $numStudent++;
               print $list[$i]['age'];
               $averageStudent=0;
               $numMatter = sizeof($list[$i]['matter']);
               for($j=0; $j<$numMatter; $j++)
               {
                  print ", ".$list[$i]['matter'][$j];
                  $averageStudent+=$list[$i]['grade'][$j];
               }
               $averageStudent/=$numMatter;
               printf ("; mitjana de notes %.2f",$averageStudent);
               print "<br />";
               print "</pre>";
            }
        }
        if ($numStudent == 0) print "No hi ha estudiants de nom $name";
        print"</p>";
     }// de matterOf


     function gradeAverage($list)
     { /* mostra per pantalla la qualificació mitjana de
           les mitjanes dels estudiants                    */
        $long = sizeof($list);
        print "<h3>Mitjana de les notes dels estudiants</h3><p>";
        $average=0;
        for ($i=0; $i<$long; $i++)
        {
           $numMatter = sizeof($list[$i]['matter']);
           $averageStudent=0;
           for($j=0; $j<$numMatter; $j++)
           {
              $averageStudent += $list[$i]['grade'][$j];
           }
           $averageStudent /= $numMatter;
           $average += $averageStudent;
        }
        $average /= $long;
        printf("<b> %.3f</b>",$average);
        print "<br />";
        print"</p>";
     }// de gradeAverage



     /***********************Programa Principal**********************************/

    // s'incorporen les dades dels estudiants
     include ("data.php");
     //ja es disposa de la variable $student, l'array de
     // tuples que conté totes les dades

     // es criden les accions
     countSex($student);
     matterOf($student, "Joan");
     matterOf($student, "Manolo");
     matterOf($student, "Anne");
     matterOf($student, "Ludving");
     gradeAverage($student);


?>
</div>
</body>
</html>




                                                                                     19

More Related Content

What's hot

Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaLidia Bria
 
Programació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaLidia Bria
 
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita RibasMatemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaLidia Bria
 
| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel OrtizArdillita Trepadora
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaLidia Bria
 
Funcions 4t eso matemàtiques
Funcions 4t eso matemàtiquesFuncions 4t eso matemàtiques
Funcions 4t eso matemàtiquesrbnterrassa
 
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...Paquita Ribas
 
Mates codificacio criptografia_compressio
Mates codificacio criptografia_compressioMates codificacio criptografia_compressio
Mates codificacio criptografia_compressioPaquita Ribas
 
Funciones
FuncionesFunciones
FuncionesEVAMASO
 
Repàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESORepàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESOrbnterrassa
 
Power mates 2on
Power mates 2onPower mates 2on
Power mates 2onHermiprofe
 

What's hot (20)

Prog_pac2
Prog_pac2Prog_pac2
Prog_pac2
 
Prog_pac1
Prog_pac1Prog_pac1
Prog_pac1
 
Prog_pac3
Prog_pac3Prog_pac3
Prog_pac3
 
Prog_prac1
Prog_prac1Prog_prac1
Prog_prac1
 
Prog_prac2
Prog_prac2Prog_prac2
Prog_prac2
 
Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia Bria
 
Programació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia Bria
 
| PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio | PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio
 
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita RibasMatemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia Bria
 
| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia Bria
 
Funcions
Funcions Funcions
Funcions
 
Funcions 4t eso matemàtiques
Funcions 4t eso matemàtiquesFuncions 4t eso matemàtiques
Funcions 4t eso matemàtiques
 
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
 
Mates codificacio criptografia_compressio
Mates codificacio criptografia_compressioMates codificacio criptografia_compressio
Mates codificacio criptografia_compressio
 
Funciones
FuncionesFunciones
Funciones
 
Funcions
FuncionsFuncions
Funcions
 
Repàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESORepàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESO
 
Power mates 2on
Power mates 2onPower mates 2on
Power mates 2on
 

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

Programació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaProgramació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaLidia Bria
 
Programació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia BriaProgramació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia BriaLidia Bria
 
Matemàtiques 3r i 4t eso
Matemàtiques 3r i 4t esoMatemàtiques 3r i 4t eso
Matemàtiques 3r i 4t esoAlbert Sola
 
Unitat 1 6è
Unitat 1   6èUnitat 1   6è
Unitat 1 6èElisabet
 
Programació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaProgramació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaLidia Bria
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinadesceedukat
 
Potencies i arrels 2 n
Potencies i arrels 2 nPotencies i arrels 2 n
Potencies i arrels 2 ncpnapenyal
 
Electrònica Digital
Electrònica DigitalElectrònica Digital
Electrònica Digitalclopez64
 
Nombres racionals 2n ESO
Nombres racionals 2n ESONombres racionals 2n ESO
Nombres racionals 2n ESOAlbert Sola
 
Programació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia BriaProgramació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia BriaLidia Bria
 
Els nombres naturals
Els nombres naturalsEls nombres naturals
Els nombres naturalscpnapenyal
 
Programació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaProgramació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaLidia Bria
 

Similar to Programació - Pràctica 2 correcció - Multimedia (UOC) - Paquita Ribas (20)

Programació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaProgramació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia Bria
 
Programació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia BriaProgramació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia Bria
 
PW_pac1
PW_pac1PW_pac1
PW_pac1
 
Matemàtiques 3r i 4t eso
Matemàtiques 3r i 4t esoMatemàtiques 3r i 4t eso
Matemàtiques 3r i 4t eso
 
Unitat 1 6è
Unitat 1   6èUnitat 1   6è
Unitat 1 6è
 
Programació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaProgramació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia Bria
 
Fraccions
FraccionsFraccions
Fraccions
 
Fraccions
FraccionsFraccions
Fraccions
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinades
 
Potencies i arrels 2 n
Potencies i arrels 2 nPotencies i arrels 2 n
Potencies i arrels 2 n
 
Electrònica Digital
Electrònica DigitalElectrònica Digital
Electrònica Digital
 
Nombres racionals 2n ESO
Nombres racionals 2n ESONombres racionals 2n ESO
Nombres racionals 2n ESO
 
Programació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia BriaProgramació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia Bria
 
YDC_pract1
YDC_pract1YDC_pract1
YDC_pract1
 
Els nombres naturals
Els nombres naturalsEls nombres naturals
Els nombres naturals
 
Pw p tema 1 nombres racionals
Pw p tema 1 nombres racionalsPw p tema 1 nombres racionals
Pw p tema 1 nombres racionals
 
Tema 1
Tema 1Tema 1
Tema 1
 
Practica
PracticaPractica
Practica
 
Programació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaProgramació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia Bria
 
Tema 1
Tema 1Tema 1
Tema 1
 

More from Paquita Ribas

Tipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasTipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasPaquita Ribas
 
Tipografia · Resum llibre
Tipografia · Resum llibreTipografia · Resum llibre
Tipografia · Resum llibrePaquita Ribas
 
Taller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasTaller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasPaquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Paquita Ribas
 
Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Paquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Tractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumTractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumPaquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Paquita Ribas
 
Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Paquita Ribas
 
Tractament i publicació d'Àudio - Resum modul 1
Tractament i publicació d'Àudio -  Resum modul 1Tractament i publicació d'Àudio -  Resum modul 1
Tractament i publicació d'Àudio - Resum modul 1Paquita Ribas
 
Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Paquita Ribas
 
Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Paquita Ribas
 
Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Paquita Ribas
 
Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Paquita Ribas
 

More from Paquita Ribas (20)

Tipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasTipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita Ribas
 
Tipografia · Resum llibre
Tipografia · Resum llibreTipografia · Resum llibre
Tipografia · Resum llibre
 
Taller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasTaller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita Ribas
 
Licencias
LicenciasLicencias
Licencias
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3
 
Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Tractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumTractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resum
 
Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6
 
Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5
 
Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4
 
Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3
 
Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2
 
Tractament i publicació d'Àudio - Resum modul 1
Tractament i publicació d'Àudio -  Resum modul 1Tractament i publicació d'Àudio -  Resum modul 1
Tractament i publicació d'Àudio - Resum modul 1
 
Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8
 
Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7
 
Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6
 
Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5
 

Recently uploaded

JFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdf
JFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdfJFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdf
JFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdfErnest Lluch
 
presentació treball i energia 1 Batx.pptx
presentació treball i energia 1 Batx.pptxpresentació treball i energia 1 Batx.pptx
presentació treball i energia 1 Batx.pptxcarleslucmeta
 
LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)
LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)
LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)nfulgenc
 
JOCS FLORALSCatalà 6è - Isak Arenas.pdf
JOCS FLORALSCatalà 6è - Isak Arenas.pdfJOCS FLORALSCatalà 6è - Isak Arenas.pdf
JOCS FLORALSCatalà 6è - Isak Arenas.pdfErnest Lluch
 
II BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓ
II BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓII BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓ
II BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓLasilviatecno
 
Català parelles 1r -Natalia i LunaHORIZONTAL.pdf
Català parelles 1r -Natalia i LunaHORIZONTAL.pdfCatalà parelles 1r -Natalia i LunaHORIZONTAL.pdf
Català parelles 1r -Natalia i LunaHORIZONTAL.pdfErnest Lluch
 
Presentació bloc 3 Perspectiva gènere.pptx
Presentació bloc 3 Perspectiva gènere.pptxPresentació bloc 3 Perspectiva gènere.pptx
Presentació bloc 3 Perspectiva gènere.pptxRosabel UA
 
INFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdf
INFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdfINFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdf
INFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdfErnest Lluch
 

Recently uploaded (9)

Díptic CFGM cfgm cfgm cfgm cfgm cfgm .pdf
Díptic CFGM cfgm cfgm cfgm cfgm cfgm .pdfDíptic CFGM cfgm cfgm cfgm cfgm cfgm .pdf
Díptic CFGM cfgm cfgm cfgm cfgm cfgm .pdf
 
JFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdf
JFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdfJFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdf
JFCatalà 5è - EmmaVAZQUEZRODRIGUEZ.pdf
 
presentació treball i energia 1 Batx.pptx
presentació treball i energia 1 Batx.pptxpresentació treball i energia 1 Batx.pptx
presentació treball i energia 1 Batx.pptx
 
LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)
LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)
LES COMARQUES DE CATALUNYA( Plana, costa, muntanya)
 
JOCS FLORALSCatalà 6è - Isak Arenas.pdf
JOCS FLORALSCatalà 6è - Isak Arenas.pdfJOCS FLORALSCatalà 6è - Isak Arenas.pdf
JOCS FLORALSCatalà 6è - Isak Arenas.pdf
 
II BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓ
II BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓII BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓ
II BLOC ACTIVITATS APP INVENTOR PROGRAMACIO I DIGITALITZACIÓ
 
Català parelles 1r -Natalia i LunaHORIZONTAL.pdf
Català parelles 1r -Natalia i LunaHORIZONTAL.pdfCatalà parelles 1r -Natalia i LunaHORIZONTAL.pdf
Català parelles 1r -Natalia i LunaHORIZONTAL.pdf
 
Presentació bloc 3 Perspectiva gènere.pptx
Presentació bloc 3 Perspectiva gènere.pptxPresentació bloc 3 Perspectiva gènere.pptx
Presentació bloc 3 Perspectiva gènere.pptx
 
INFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdf
INFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdfINFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdf
INFORME_BAREM_PROVISIONAL_BAREMELLUCH.pdf
 

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

  • 1. Estudis d’ Informàtica, Multimèdia i Telecomunicació Programació Práctica 2 SOLUCIO Indicacions generals: Llegiu amb detall les tasques encomanades a cada exercici i també les indicacions i suggeriments de resolució. Per a dubtes i aclariments sobre l’enunciat, adreceu-vos al consultor responsable de la vostra aula. Lliurament: 1. Els exercicis en llenguatge algorísmic han de resoldre’s en aquest mateix document 2. 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. La no 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’esquema adequat per construir un algorisme que solucioni un determinat problema el resultat del qual té forma de taula Materials: Mòdul 4: Tipus estructurats de dades Tasca: Dissenyar el mòdul (acció o funció, el més adequat) sonQuadrats que rebi una taula candidats de 100 nombres enters i retorni una taula de 100 booleans; en les posicions figurarà true o false segons si el número que ocupa la posició en candidats sigui un quadrat perfecte o no ho sigui. . (Per exemple si els valors de les primeres posicions de candidats fossin index 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 serien index 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. 2
  • 3. La solució a l'exercici s'ha estructurat amb dues funcions, una que determina si un nombre és quadrat perfecte (esQuadrat) i l'altre, sonQuadrats, sol·licitada en l'enunciat, que treballa amb els arrays i fa crides a esQuadrat. funcio esQuadrat(n :enter):booleà {retorna cert si el número rebut és quadrat perfecte i fals en cas contrari} var i: enter; quadrat : booleà; fvar i := 1; mentre (i * i < n) fer i := i +1 fmentre retorna (i*i = n); ffuncio funcio sonQuadrats(n: taula[100] de enters): taula[100] de boolea {rep un array de 100 números i retorna un array de 100 booleans en què es diu si és quadrat o no cadascun dels números rebuts. Fa servir la funció esQuadrat} var hoSon:taula[100] de boolea; i: enter; fvar per i := 1 fins 100 fer hoSon[i] := esQuadrat(n[i]); fper retorna hoSon; ffuncio 3
  • 4. Exercici 2: Treball amb taules en PHP [20%] Objectius: Construir un algorisme que solucioni un determinat problema amb l’ús de taules. Materials: Mòdul 4: Tipus estructurats de dades Guia bàsica de PHP: Mòdul 5 Tipus estructurats de dades en PHP Tasca: Crear el programa Repartidor de cartes que reparteix aleatòriament, una darrera l'altra les 40 cartes de pòquer (no hi són 8, 9 ni 10). En la pantalla hauran de mostrar-se les 40 cartes sense que en falti cap ni que hagi repeticions. Pe: si la crida és http://localhost/pract2_exer02.php la pantalla pot mostrar Recursos: 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. Consells Posar aleatòriament 40 cartes no és cap problema complicat, es tracta de fer 40 sortejos de números entre 0 i 39. Però fer-ho així no ens assegura que no hagi repeticions i que surtin les 40 cartes diferents. Quan es fa amb una baralla de veritat no hi ha problema perquè quan s’ha tret una carta ja no pot tornar a sortir. En el programa s’ha de simular aquesta situació, i això es pot fer mitjançant un array que indiqui si una carta pot sortir o ja no. Aquest array ha de tenir una posició 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 s'agafi 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 s'ha 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à l'ordre 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 s'agafa 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.php 2 PHP permet que una function rebi paràmetres i els modifiqui i, a més, retorni un valor amb la instrucció return. En aquest sentit la function es comporta com acció i funció alhora. 5
  • 6. S'ha de construir la function put_cards, que mostrarà per pantalla les 40 cartes per l'ordre en que estan disposades en $cards.  L'esquema de treball serà sortejar un rera l'altre 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 la function put_row que farà que, si l’amplada de la pantalla és suficient, les cartes es mostrin en fileres de 8 cartes d’amplada (com la imatge d’exemple). <!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>PR2_Exer2_Card_dealer</title> </head> <body> <h3>Repartidor de cartes</h3> <h3>SOLUCIÓ</h3> <div> <?php /*definició de constants*/ define("NUMCARDS", 40); /*declaració de funcions*/ function NL() { //new line print "<br />"; } //de NL function init_array(&$token, $valor) {//inicialitza l'array amb $valor en totes les posicions for($i=0; $i<NUMCARDS; $i++) $token[$i]=$valor; }//de init_array function card_draw(&$token) {//sorteja una carta en l'interval adequat $azar = rand (0, NUMCARDS-1); //correcció perquè sigui una no usada while (!$token[$azar]) { $azar++; //si arriba al final torna al principi if ($azar==NUMCARDS) $azar=0; } //s'ha arribat a una posició true $token[$azar]=false; //retorna el número de la carta return $azar; }// de card_draw function put_cards($inicial, $token) { //posa en pantalla una fila de cartes cap_amunt o cap_avall //segons els valors true o false de les posicions de l'array //$token for ($i = 0; $i<8; $i++) { $actual = $inicial + $i; $card = $token[$actual]; print "<img src="$card.jpg">"; } NL(); } 6
  • 7. /*Programa principal*/ //inicialitza els arrays init_array($cards, -1); init_array($not_used, true); NL(); //es sortegen les cartes for ($i=0; $i<NUMCARDS; $i++) $cards[$i]= card_draw($not_used); //es mostren les cartes for ($i=0; $i<NUMCARDS; $i+=8) put_cards($i, $cards); ?> </div> </body> </html> 7
  • 8. Exercici 3: Treball amb taules bidimensionals en PHP [20%] Objectius: Donades sèries de dades, organitzar-les en taules bidimensionals i aplicar 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 PHP Tasca: Simular una taula on entre 2 i 5 jugadors fan una partida de Back Jack sense apostes. En fer la crida al programa es mostraran les cartes de cada jugador, la suma de punts 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 seria El programa que es demana aprofita mòduls de l'exercici 2 i també els fitxers d'imatge. El Black Jack és una variant del joc del 7 i mig en què cada jugador s'ha d'aproximar, però sense passar-se, a sumar 21 punts. 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. S'acceptaran entre 2 i 5 jugadors, altrament no s'entrarà en el joc i es mostrarà un missatge del 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} 8
  • 9. Per a la nostra versió reduïda del Black Jack farem servir només les cartes 1 a 7 i les figures. El valor de cada carta és:  10 punts per a l'as i les figures  el valor nominal propi de la carta per a les cartes de 2 a 7 Recursos: Disposeu dels mateixos fitxers d'imatge que per l'exercici 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 l'array $not_used de longitud 80 i amb el mateix significat que l'exercici anterior. Les posicions 0 a 39 signifiquen una baralla i les posicions 40 a 79 representaran l'altre.  Els jugadors quedaran representats per la matriu bidimensional $gamer, de manera que cada filera representa un jugador i les cel·les d'una 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 l'exemple 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 d'una 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 se'ls pot afegir caselles3.  Heu d'emprar les funcions NL() i function init_array amb el mateix significat que en l'exercici 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 en $matriu[2][1] hi ha emmagatzemat un 4 i en $matriu[1][0] hi ha un 0 9
  • 10. Heu de crear l'acció play que rebrà dos paràmetres: o l'array que representa un jugador (on es posaran els punts en la posició [0] i les cartes en les següents). o l'array $not_used Aquesta funció anirà extraient les cartes de dues en dues i posant-les a les seves posicions de l'array a l'hora que actualitza els punts del jugador. Per extreure cada carta podeu fer servir la function card_draw de l'exercici anterior. En aquesta funció s'ha 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 l'algorisme. 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 d'entrada sortida perquè en ambdós arrays s'escriuen valors que empren el programa principal o altres functions..  Heu de crear l'acció 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) s'escriuria en pantalla els resultats del jugador 2. Consells  Si definim la constant NUMCARDS i li assignem el valor 80, les funcions que s'heretin de l'exercici 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 l'exercici anterior. No obstant les cartes tenen noms que van del 0 al 39. Es podria duplicar el nombre de fitxers d'imatge 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 l'interval [0, 39].  No intenteu posar directament una posició d'un array dins d'una cadena de text de la instrucció print. print "el preu és $vector[$i] euros"; no treurà en la pantalla el que desitgem. Heu de fer servir l'operador de concatenació: print "el preu és ".$vector[$i]." euros"; 10
  • 11. <!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>PR2_Exer2 Black Jack</title> </head> <body> <h3>Black Jack</h3> <h3>SOLUCIÓ</h3> <div> <?php /*************definició de constants*************/ define("NUMCARDS", 80); /*************declaració de funcions*************/ function NL() { //new line print "<br />"; } //de NL function init_array(&$token, $valor) {//inicialitza l'array amb $valor en totes les posicions for($i=0; $i<NUMCARDS; $i++) $token[$i]=$valor; }//de init_array function value($number) {//retorna el valor de una carta de Black Jack $valor=1+$number%10; if (($valor>1) && ($valor<8)) return $valor; else return 10; }// de value function card_draw(&$token) {//sorteja una carta en l'interval adequat $azar = rand (0, NUMCARDS-1); //correcció perquè sigui una no usada while (!$token[$azar]) { $azar++; //si arriba al final torna al principi if ($azar==NUMCARDS) $azar=0; } //s'ha arribat a una posició true $token[$azar]=false; //retorna el número de la carta return $azar; }// de card_draw function play(&$playgamer, &$token) {//rep l'array d'un jugador i l'omple amb les cartes en les posicions 1 // en endavant i els punts en posició 0 $points=0; $i=1; while ($points<17) { for($j=0; $j<2; $j++) { $carta = card_draw($token); //escollida una carta entre 0 y 79 $playgamer[$i]= $carta%40; //es corregeix a una sola baralla $points += value($playgamer[$i]); $i++; }//del for }//del while $playgamer[0] = $points; //en acabar l'array del jugador té en la posició 0 els punts totals i en les //altres posicions les cartes que ha tret per l'ordre que les ha obtingut }//de play 11
  • 12. function put_gamer($gamer,$numgamer) { //posa en pantalla una fila de cartes corresponent a un jugador $long = count($gamer[$numgamer]); //l'array té en posició 0 els punts, no és una carta for ($i = 1; $i<$long; $i++) { $card = $gamer[$numgamer][$i]; print "<img src="$card.jpg">"; } //i escriu la puntuació print "Puntuació ".$gamer[$numgamer][0]." punts"; NL();NL();NL(); } /*************Programa principal*************/ //entra els jugadors $n = $_GET["n"]; NL(); //si el nombre de jugadors no és correcte es treu el missatge if (($n<2)||($n>5)) { print "Poden jugar entre 2 i 5 jugadors."; NL(); print "La crida hauria de ser pract2_exer03.php?n=x, on <b>x</b> pertany a {2,3,4,5}"; } //si és correcte es juga else { //inicialització de l'array de control de cartes init_array($not_used, true); //creació de l'array bidimensional de jugadors $gamer, de longitud $n //on cada $gamer[i] és un array amb una primera posició (comptador) //amb el valor 0 for ($i=0; $i<$n; $i ++) $gamer[$i]=array(0); //els jugadors juguen un rera l'altre for ($i=0; $i<$n; $i ++) play($gamer[$i], $not_used); //i es mostren els resultats for ($i=0; $i<$n; $i ++) { print "<b>Jugador $i "; put_gamer($gamer, $i); NL(); } //es calcula el guanyador i el missatge de sortida $missage = "Tots han perdut."; $max = 0; for ($i=0; $i<$n; $i++) { $points = $gamer[$i][0]; if (($points>$max)&&($points<22)) { $max=$points; $missage = "el jugador ".$i; } else if ($gamer[$i][0]==$max) $missage = $missage." i el jugador ".$i; } print "<h3>Guanyador: ".$missage; }//del else ?> </div> </body> </html> 12
  • 13. Exercici 4: Treball amb Tuples [25%] Objectius: Donada una família de dades relacionades, dissenyar les estructures de dades adients per al seu emmagatzematge i crear expressions i mòduls de programa per al seu tractament Materials: Mòdul 4: Tipus estructurats de dades Tasca: 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 pot tenir els valors {L, C, D, V o J} amb els significats Llibre, CD, DVD, Videollibre, videoJoc), l'autor (que denotarem de tipus text), l'editorial (text), el nombre de pàgines (enter), la durada en minuts (enter), si es pot prestar o està exclòs de préstec, número de soci a qui s'ha prestat (un enter entre 0 i 10000; el 0 indica que no està prestat) i la data de devolució(tData).  Definir el tipus tElement adequat per emmagatzemar aquest tipus de dades.  Definir el tipus tData que permeti emmagatzemat en format numèric una data 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. 13
  • 14.  Definir el tipus tAdress adequat per emmagatzemar una adreça. Es preveu que la bibliomediateca pugui tenir fins 100.000 elements, tot i que en aquest moment només en té 12368, per aquest motiu l'informàtic ha creat el tipus de data tBiblio. En el primer camp s'emmagatzemarà la quantitat d'elements actual (ara 12368) i al segon les dades 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 n'hi ha 1300) i per aquest motiu també ha creat el tipus tSoci. Els camps de tSoci tenen els significats equivalents als de tBiblio i, per acabar, ha creat dues variables que contindran els valors  Escriure l’expressió que ens permet saber si el darrer element entrat a la base de dades és un DVD que es pot deixar  Escriu la funció quantsDeixats que rep nom i cognoms d'un soci i les variables BMedia i Poblacio i retorna la quantitat d'elements 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) 14
  • 15. 15
  • 16. Exercici 5: Treball amb tuples en PHP [20%] Objectius: Localitzar i treballar amb informació emmagatzemada en un esquema combinat 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 PHP Tasca: Donat un conjunt de dades emmagatzemat en un esquema combinat de taules 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 assignatures Es 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 d'homes 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". 16
  • 17. 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 d'amitjanar 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 com pract2_exer05.php, i que conté parts programades que no s’han de modificar i altres que heu 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"); i incorpora 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 altre fitxer 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 rebuda 4 http://es2.php.net/manual/es/function.count.php 5 http://es2.php.net/manual/es/function.strcmp.php 6 http://es.php.net/manual/es/function.printf.php 17
  • 18. <!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>Escola</title> </head> <body> <!-- Comentari --> <h1>Escola </h1> <h3>Solució</h3> <div> <?php /* incorpora l'arxiu de dades "data.php" que defineix l'array $student i mostra seleccions de dades de l'arxiu en diferents function. L'array $student està formats per tuples (arrays associatius) amb la següent definició: name => string que tconté el nom de l'estudiant age => enter que conté l'edat de l'estudiant sex => booleà que indica el sexe true-> dona i false->home matter => array que conté els noms de les assignatures de l'estudiant grade => array que conté les qualificacions numériques de les assignatures de l'estudiant */ /***********************FUNCTION**********************************/ function countSex($list) { /* recompte quants estudiants hi ha per sexes i escriu el resultat també llista els noms de les dones i després els dels homes */ $numFemale = 0; $numMale = 0; $male = array(); $female = array(); $long = sizeof($list); print "<h3>Sexes dels estudiants</h3><p>"; for ($i=0; $i<$long; $i++) { if ($list[$i]['sex']) { $female[$numFemale]=$list[$i]['name']; $numFemale++; } else { $male[$numMale]=$list[$i]['name']; $numMale++; } } print "<p>Hi ha $numFemale dones </p>"; print "<p>Hi ha $numMale homes </p>"; //l'escriptura de la llista de noms es deixa a una altra acció writeSex ("Dones", $female); writeSex ("Homes", $male); }//de countSex function writeSex($title, $vector) {//escriu una llista de noms $long=count($vector); print "<p><b>$title:</b> "; for ($i=0; $i<$long; $i++) { if ($i != 0) print ", "; print $vector[$i]; } print"</p>"; }// de writeSex function matterOf($list, $name) { /* mostra per pantalla edat, les assignatures i la mitjana de notes de tots els que s'anomenen com el segon paràmetre Si no hi ha cap estudiant amb el nom s'escriu una frase que així ho indica */ 18
  • 19. $numStudent = 0; $long = count($list); print "<h3>Assignatures i qualificació mitjana de $name</h3><p>"; for ($i=0; $i<$long; $i++) { if (strcmp($name, $list[$i]['name'])==0) { $numStudent++; print $list[$i]['age']; $averageStudent=0; $numMatter = sizeof($list[$i]['matter']); for($j=0; $j<$numMatter; $j++) { print ", ".$list[$i]['matter'][$j]; $averageStudent+=$list[$i]['grade'][$j]; } $averageStudent/=$numMatter; printf ("; mitjana de notes %.2f",$averageStudent); print "<br />"; print "</pre>"; } } if ($numStudent == 0) print "No hi ha estudiants de nom $name"; print"</p>"; }// de matterOf function gradeAverage($list) { /* mostra per pantalla la qualificació mitjana de les mitjanes dels estudiants */ $long = sizeof($list); print "<h3>Mitjana de les notes dels estudiants</h3><p>"; $average=0; for ($i=0; $i<$long; $i++) { $numMatter = sizeof($list[$i]['matter']); $averageStudent=0; for($j=0; $j<$numMatter; $j++) { $averageStudent += $list[$i]['grade'][$j]; } $averageStudent /= $numMatter; $average += $averageStudent; } $average /= $long; printf("<b> %.3f</b>",$average); print "<br />"; print"</p>"; }// de gradeAverage /***********************Programa Principal**********************************/ // s'incorporen les dades dels estudiants include ("data.php"); //ja es disposa de la variable $student, l'array de // tuples que conté totes les dades // es criden les accions countSex($student); matterOf($student, "Joan"); matterOf($student, "Manolo"); matterOf($student, "Anne"); matterOf($student, "Ludving"); gradeAverage($student); ?> </div> </body> </html> 19