SlideShare a Scribd company logo
1 of 24
Estudis d’ Informàtica, Multimèdia i Telecomunicació




                                                                                         Pro
                                                                                         gra
                                                                                         ma
                                                                                         ció
                                                                                         Prá
                                                                                         ctic
                                                                                         a2

Cognoms: Ortiz Valor
Nom: Maria del Mar


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 1 i 4, 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ó: dilluns, 16 de maig de 2012 (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) sonTriangles que rebi tres
taules petit, mitja i gran de 100 nombres reals cadascuna i retorni una taula de 100
booleans; en les posicions figurarà true o false segons si els números que ocupen la posició
en petit, mitja i gran poden constituir un triangle o no.
                                                                                            .
(Per exemple si els valors de les primeres posicions de petit, mitja i gran fossin
index      0       1     2      3      4       5      6    7        8      9      10  …
petit     2.0     2.0   2.8    3.1    3.2     3.5    4.3  4.6      1.6    2.1     1.1 …
mitja     2.0     3.1   5.3    3.3    4.2     4.1    4.5  5.3      4.6    7.0     1.1 …
gran      2.0     4.0 14.0 7.1        7.4     8.0    6.1 10.0 5.9 10.1 11.1

els valors retornats serien
inde     0     1     2      3    4      5     6      7     8      9     10     …
x
valor tru tru       fals fals   fals   fals   tru   fals   tru   fals   fals   …
         e     e     e      e    e      e      e     e      e     e      e

Perquè es pot construir un triangle de costats 2.0, o amb els costats(2.0, 3.1 i 4.0) però no
amb els costats 2.8, 5.3 i 14.0)

Indicacions:
    • Disposem del tipus tReal definit com una taula [100] de real
    • Disposem del tipus tBool definit com una taula [100] de booleà
    • Tres números poden constituir un triangle si la suma dels dos més petits és mes
       gran que el número major.

       funcio sonTriangles(petit: taula [100] de reals, mitja: taula [100]
       de reals, gran: taula [100] de reals): taula [100] de booleà
       {rep 3 arrays de 100 numeros i retorna un array de 100 booleans en
       que es diu si els numeros de la mateixa posició de cada array poden
       formar un triangle}

              var
                     i: enter;
                     triangle: booleà;
                     taulaTriangles: taula [100] de booleà
              fvar

              per i:= 1 fins 100 fer
                          llegirReal(petit[i]);
                          llegirReal(mitja[i]);
                          llegirReal(gran[i]);
                          si (petit[i] + mitja[i] > gran[i]) llavors
                                taulaTriangle[i] := cert
                          fsi


                                                                                     2
retorna taulaTriangles
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 Cartró del bingo que crea, aleatòriament un cartró de bingo
segons les normes establertes:
   •   Els números que poden sortir al cartró van del 01 al 80.
   •   El cartró té 4 fileres de 5 números cadascuna
           o la primera filera conté 5 números entre 01 i 20
           o la segona filera conté 5 números entre 21 i 40
           o la tercera filera conté 5 números entre 41 i 60
           o la quarta filera conté 5 números entre 61 i 80
   •   En cada filera els números es mostraran ordenats de petit a gran.
Pe: si la crida és http://localhost/pract2_exer02.php la pantalla pot mostrar




Recursos: Per a la realització de l’exercici es faciliten 19 imatges en format png
   •   0_.png a 8_.png amb les parts esquerre dels cercles numerats
   •   _0.png a _9.png amb les parts dretes dels cercles numerats
   Si es volgués mostrar la bola amb el número 38, s’hauria de format amb la imatge
   3_.png immediatament seguida de la imatge _8.png




                                                                                     4
Consells

Sortejar 20 números entre 1 i 80 no és un problema complicat, es tracta de fer 20 sortejos,
ara bé, tenim certes limitacions:

      •   No pot sortir cap número repetit
      •   Cada fila conté 5 números que provenen d’una vintena determinada (1 a 20 a la
          primera, 21 a 40 a la segona, 41 a 60 a la tercera i 61 a 80 a la quarta)

La segona limitació se supera fent 5 sortejos independents per als números de cada filera.

La primera es pot solucionar mitjançant un array que indiqui si el número es pot emprar o no
es pot emprar perquè ja ha sortit anteriorment i no pot tornar a sortir. Aquest array, que
nomenarem $free ha de tenir una posició de tipus booleà per cada número 1 a 80. Si el
contingut és true es pot emprar el número. Si és false, no es pot agafar perquè ja ha sortit.
Caldrà mantenir aquest array: quan s'agafi un número (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.
      •   Els fitxers d’imatge .png se situaran a la mateixa carpeta que el fitxer .php.
      •   Una estructura de dades bàsica serà la taula $free de 81 posicions de tipus boolean.
          Cadascuna de les posicions de l’array de la 1 a la 80 correspondran a un número
          dels que poden aparèixer en el cartró. Si el contingut d’una posició de l’array és true
          significa que el número encara no s'ha agafat i el valor false voldrà dir que el número
          ja ha sortit.
      •   Una altra serà la taula $lines que representarà les quatre línies de 5 posicions que
          constitueixen el cartró de 20 números. Podeu optar lliurement per fer un únic array de
          20 posicions o un array bidimensional ([4][5]). En funció d’aquesta decisió la resta de
          funcions podrà tenir lleus diferencies d’implementació.
      •   S’ha de construir la function initArray(&$vector, $long, $valor) que rep com
          paràmetres un array ($vector), la seva longitud ($long) i un valor ($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 numberDraw($number) que rep un número enter entre
          1 i 80 ($number) i dibuixa en la pantalla la bola que conté aquest número a base de
          posar consecutivament les imatges que constitueixen la bola corresponent. P.e. si rep
          el número 38, ha de posar la imatge 3_.png immediatament seguida de la imatge
          _8.png
      •   S’ha de crear la funció createLine que rebrà el vector $free, l’array $lines (o en el
          cas de ser bidimensional l’array que representa una línia) i els valors $minvalue i
          $maxvalue que representen els números mínim i màxim que poden aparèixer a la
          línia. Si ho creieu convenient podeu posar més paràmetres.
          Aquesta funció calcularà aleatòriament els 5 números que formaran la línia y els
          emmagatzemarà a l’array. Per decidir quin número 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
          $free corresponent a cada número seleccionat, s’ha de posar a false.
1
    http://php.net/manual/es/function.rand.php


                                                                                             5
Com que els array $free i $lines (o el que representa la línia si es decideix per l’array
          bidimensional) es modificaran, han de ser paràmetres d’entrada i sortida.

          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 un
                   número que no hagi sortit amb anterioritat (es corre el risc d’haver de fer molt
                   sortejos perquè van sortint números repetits).
              o    Si surt un número ja obtingut amb anterioritat, recórrer la taula $free en un
                   sentit fins a trobar una posició a true i donar aquesta posició com a obtinguda
                   pel sorteig.
                   Si s’implementa aquest mètode, penseu que si estem sortejant números de 21
                   al 40 i hem decidit recórrer l’array en sentit ascendent, i surt el 39 que ja està
                   usat, mirarem el 40 i, si està ocupat, s’hauria de passar a mirar el 21.
                   Altrament miraríem el 41 que no pot sortir en la línia que s’està construint.
                   Aquest mètode assegura fer només un sorteig per cada número encara que al
                   recórrer en un sentit determinat tendeix a fer aparèixer números contigus.
      •   Abans d’escriure el cartó en la pantalla haureu d’ordenar els números de manera que
          s’escriguin de menor a major. PHP facilita la function sort($taula)2 que rep una taula
          i la retorna amb els seus elements ordenats de menor a major.
      Podeu comprovar el funcionament a
          comoras.uoc.edu/~jgilm/pract2/pract2_exer02.php




2
    http://php.net/manual/es/function.sort.php




                                                                                             6
<!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>Cartró de bingo</h3>
<h3>Maria del Mar Ortiz Valor</h3>
<div>
<?php
/* Reparteix, de manera aleatòria, les 40 cartes
   del joc de póquer, sense repetir-ne niguna
l'ordre d'aparició de les cartes es desa a la
taula $cards
el control per evitar repeticions es fa amb l'array $not_used
*/
         //AQUI VA EL VOSTRE CODI
         /***********definició de constants***********/
         /***********declaració de funcions***********/
         function NL() { print "<br />"; }
         function putImg($image_file) {
                  print "<img src="$image_file.png">";
         }
         function numberDraw($number) {
                          $unitats = $number % 10;
                          $imgUnitats = "_".$unitats;
                          $decenes = ($number /10 )% 10;
                          $imgDecenes = $decenes."_";
                          putImg($imgDecenes);
                          putImg($imgUnitats);
         }
         function initArray(&$vector, $long, $valor) {
                  $i = 0;
                  while ($i<$long) {
                          $vector[$i] = $valor;
                          $i++;
                  }
         }
         function createLine(&$lines, &$free, $minvalue, $maxvalue) {
/* Aquesta no es la manera més optima de que els nombres sortejats s'enmagatzenen
en l'array $lines sense maxacar els anteriors, però de moment tots les proves m'han fallat*/

              if ($minvalue == 1) {
                      for ($i = 1; $i <= 5; $i++) {
                      $sortejat = rand($minvalue,$maxvalue);
                               while (!$free[$sortejat]) {
                                       $sortejat++;
                                       if ($sortejat == $maxvalue) {
                                                $sortejat = $minvalue;
                                       }
                               }
                               $free[$sortejat] = false;
                               $lines[$i] = $sortejat;
                               }


                                                                                      7
}
       if ($minvalue == 21) {
               for ($i = 6; $i <= 10; $i++) {
               $sortejat = rand($minvalue,$maxvalue);
                        while (!$free[$sortejat]) {
                                $sortejat++;
                                if ($sortejat == $maxvalue) {
                                         $sortejat = $minvalue;
                                }
                        }
                        $free[$sortejat] = false;
                        $lines[$i] = $sortejat;
                        }
       }
       if ($minvalue == 41) {
               for ($i = 11; $i <= 15; $i++) {
               $sortejat = rand($minvalue,$maxvalue);
                        while (!$free[$sortejat]) {
                                $sortejat++;
                                if ($sortejat == $maxvalue) {
                                         $sortejat = $minvalue;
                                }
                        }
                        $free[$sortejat] = false;
                        $lines[$i] = $sortejat;
                        }
       }
       if ($minvalue == 61) {
               for ($i = 16; $i <= 20; $i++) {
               $sortejat = rand($minvalue,$maxvalue);
                        while (!$free[$sortejat]) {
                                $sortejat++;
                                if ($sortejat == $maxvalue) {
                                         $sortejat = $minvalue;
                                }
                        }
                        $free[$sortejat] = false;
                        $lines[$i] = $sortejat;
                        }
       }
}

function escriureCartro($lines) {
        for ($i = 1; $i <= 5; $i++) {
                 numberDraw($lines[$i]);
        }
        NL();
        for ($i = 6; $i <= 10; $i++) {
                 numberDraw($lines[$i]);
        }
        NL();
        for ($i = 11; $i <= 15; $i++) {
                 numberDraw($lines[$i]);
        }
        NL();


                                                                  8
for ($i = 16; $i <= 20; $i++) {
                      numberDraw($lines[$i]);
             }
             NL();
      }


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

      initArray($free, 81, true);
      initArray($lines, 20, 0);
      createLine($lines, $free, 1, 20);
      NL();
      createLine($lines, $free, 21, 40);
      NL();
      createLine($lines, $free, 41, 60);
      NL();
      createLine($lines, $free, 61, 80);
      NL();

      sort($lines);
      foreach ($lines as $key => $val) {
      }
      escriureCartro($lines);
      NL();

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




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


Objectius: Donades sèries de dades, organitzar-les en taules 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 que un conjunt de jugadors juguen a guanyar una línia en un Bingo. Cada
Jugador té una línia que consta de 8 números diferents (però dos jugadors poden tenir
números coincidents).
El programa rep un paràmetre gamers que indica el nombre de jugadors (si no se escriu el
paràmetre gamers s'ha de considerar dos jugadors) i mostra tres blocs d'informació en
pantalla:
    • 1r Bloc: els noms dels jugadors (JUGADOR 1, JUGADOR 2,...) i la línia de cada
        jugador (que genera el programa)
    • 2n Bloc: el conjunt de números sortejats. Va sortejant números fins que un jugador
        guanya
    • 3r Bloc: el nom del jugador o jugadors guanyadors

P.e. a la crida: http://localhost/pract2_exer03.php?gamers=2, un resultat seria




El programa que es demana aprofita mòduls de l'exercici 2 i també els fitxers d'imatge.

Recursos: Disposeu dels mateixos fitxers d'imatge que per l'exercici anterior.



                                                                                     10
Indicacions i requisits d’implementació
    • La crida al programa serà del tipus pract2_exer03.php o pract2_exer03.php?
       gamers=X on X és un número enter. Si no es posa paràmetre la simulació es farà
       per dos jugadors.
      •   Es farà servir l'array $free amb el mateix significat que en l'exercici anterior. S'ha de
          tenir en compte que l'array s'haurà d'inicialitzar a true en totes les seves posicions
          cada cop que s'hagi de generar un línia i abans de començar a sortejar.
      •   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 els
          números de la seva línia.
          La matriu $gamer corresponent a la captura de pantalla de l'exemple tindria aquest
          aspecte

    $gamer        $gamer     $gamer     $gamer     $gamer     $gamer     $gamer     $gamer     $gamer
                   [ ][0]     [ ][1]     [ ][2]     [ ][3]     [ ][4]     [ ][5]     [ ][6]     [ ][7]
    $gamer [0]      10         23         27         29         44         47         73         77
    $gamer [1]       3          7         26         41         47         48         71         75


          Recordeu que no cal declarar les matrius especialment, es poden crear mitjançant un
          bucle i en qualsevol moment se'ls pot afegir caselles3.
      •   Podeu emprar les funcions function init_array, numberDraw i createLine amb el
          mateix significat que en l'exercici anterior.
      •   S'ha de crear la funció draw que rep per modificar l'array $free, sorteja un número i el
          retorna. [En PHP una function pot retornar valors en paràmetres i simultàniament en
          una instrucció return comportant-se d'una manera mixta d'acció i funció].
      •   S'ha de crear la function lineCheck que rep un número sortejat i la línia d'un jugador i
          retorna 1 si el número està a la línia o 0 si no hi és.


      Consells
      •   Hi ha diverses maneres de comprovar si un jugador ha guanyat amb la seva línia:
            o Cada cop que s’hagi de fer una comprovació, es mira si les posicions de $free
                que corresponen als números del jugador estan en false. Si això passa, aquest
                jugador ha completat la seva línia.
            o Dur un comptador per a cada jugador inicialitzat a 0 i, cada cop que surt un
                número mirem si és igual a un dels del jugador. Si ho és, incrementem el
                comptador. Si el comptador arriba a 8, el jugador te plena la línia. Aquest
                mecanisme comporta comparar un sol número per jugador cada cop que se’n
                sorteja un de nou, mentre que l’anterior comporta comparar els 8 números.
      •   Heu de tenir present que tot i que amb línies diferents, pot ser que guanyin dos o més
          jugadors a l’hora. El programa els ha de detectar tots.
      •   No intenteu posar directament una posició d'un array dins d'una cadena de text de la
          instrucció print.
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]00$matriu[1]02$matriu[2]04$matriu[3]08de manera que en
                   $matriu[2][1] hi ha emmagatzemat un 4 i en $matriu[1][0] hi ha un 0


                                                                                               11
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";



   Podeu comprovar el funcionament a
comoras.uoc.edu/~jgilm/pract2/pract2_exer03.php o
   Podeu comprovar el funcionament a
comoras.uoc.edu/~jgilm/pract2/pract2_exer02.php?gamers=X (X és un número enter)




                                                                                    12
<!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_Exer3</title>
</head>
<body>
<h3>Joc en linia</h3>
<h3>Maria del Mar Ortiz Valor</h3>
<div>
<?php

  //AQUI VA EL VOSTRE CODI

  /***********definició de constants***********/
  /***********declaració de funcions***********/

  function NL() { print "<br />"; }

  function putImg($image_file) {
     print "<img src="$image_file.png">";
  }

  function numberDraw($number) {
        $unitats = $number % 10;
        $imgUnitats = "_".$unitats;
        $decenes = ($number /10 )% 10;
        $imgDecenes = $decenes."_";
        putImg($imgDecenes);
        putImg($imgUnitats);
  }

  function initArray(&$vector, $long, $valor) {
     $i = 0;
     while ($i<$long) {
        $vector[$i] = $valor;



                                                                  13
$i++;
    }
}

function createLine(&$lines, $free) {
      initArray($free, 81, true);
      for ($a = 1; $a <= 8; $a++) {        //deixa la posicio 0 lliure per fer de comptador
      $sortejat = rand(1,80);
          while (!$free[$sortejat]) {
              $sortejat++;
              if ($sortejat == 80) {
                  $sortejat = 1;
              }
          }
          $free[$sortejat] = false;
          $lines[$a] = $sortejat;
          }
}

function escriureCartro($lines) {
   for ($i = 1; $i <= 8; $i++) { //deixa la posicio 0 lliure per fer de comptador
      numberDraw($lines[$i]);
   }
}

    function draw(&$free, &$sortejat) {
       $sortejat = rand(1,80);
          while (!$free[$sortejat]) {
             $sortejat++;
             if ($sortejat == 80) {
                 $sortejat = 1;
             }
          }
          $free[$sortejat] = false;
          return $sortejat;
    }



                                                                                      14
function lineCheck($sortejat, $gamer) {
      if (array_search("$sortejat", $gamer)) {
         return 1;
      }
      else {
          return 0;
      }
   }

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

   if ($gamers = $_GET["gamers"]) {
   }
   else {
       $gamers = 2;
   }
   print "$gamers JUGADORS";
   NL();

    initArray($lines, 8, 0);
//iniciar la matriu amb una posicio inicial 0
for ($i = 1; $i <= $gamers; $i++) {
    $gamer[$i]= array(0);
}

//sortejar 8 nombres per a cada jugador
for ($i = 1; $i <= $gamers; $i++) {
   createLine($gamer[$i], $free);
}

for ($i = 1; $i <= $gamers; $i++) {
   print "<h3>JUGADOR $i</h3>";
   sort($gamer[$i]);
              foreach ($lines as $key => $val) {
              }



                                                   15
escriureCartro($gamer[$i]);
}
print "<h3>NOMBRES SORTEJATS</h3>";
//array free dels nombres sortejats
initArray($free, 81, true);

$contador[$i] = 0;
$guanyador = 0;
while ($guanyador<1) {

       draw($free, $sortejat);
       print "$sortejat - ";

       for ($i = 1; $i <= $gamers; $i++) {
          if (lineCheck($sortejat, $gamer[$i]) == 1) {
               $gamer[$i][0] = $gamer[$i][0] + 1;
               $contador[$i]++;
               if ($contador[$i] == 8) {
                   $guanyador++;
               }
          }
       }
   }

print "<h3>HA GUANYAT</h3>";
for ($i = 1; $i <= $gamers; $i++) {
   if ($contador[$i] == 8) {
       print "jugador $i";
       NL();
   }
}

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



                                                         16
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: Un col·leccionista de monedes vol informatitzar les seves peces per a un millor
control.
Per a cada moneda de la col·lecció vol emmagatzemar: país (text), unitat (text), el valor
nominal (real), l'any d’emisió (enter), l’aliatge (text), la data d’adquisició (tData), si té
certificat d’atenticació o no i el valor de tasació (real)..

•   Definir el tipus tCoin adequat per emmagatzemar aquest tipus de dades.

       tCoin = tupla
         pais: text;
         unitat: text;
         valoN: real;
         any: enter;
         aliatge: text;
         dataAdq: tData;
         autentificacio: booleà;
         valorT: real;
       ftupla

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

       tData = tupla
         dia: enter;
         mes: enter;
         any: enter;
       ftupla


Es preveu que la col·lecció pugui tenir fins 10.000 monedes, tot i que en aquest moment
només en té 4312, per aquest motiu l'informàtic ha creat el tipus de data tCollect. En el
primer camp s'emmagatzemarà la quantitat d'elements actual (ara 4312) i al segon les dades
de cadascuna de les peces a partir de la posició 1 i consecutivament.

tCollect = tupla
     qtty: enter;
     item: Taula[10000] de tCoin;
ftupla

i, per acabar, ha creat una variable que contindrà els valors

var
       collection: tCollect;



                                                                                    17
fvar

•   Escriure l’expressió que ens permet saber si la última moneda entrada a la base de
    dades és d’or i val actualment més de 500 €. [Suposeu que els elements de tipus text es
    poden comparar amb l’operador = com es fa amb els altres tipus simples]

    collection.item[collection.qtty].aliatge = “or” i
    collection.item[collection.qtty].valorT > 500

•   Escriu la funció valorDate que rep una data (tres paràmetres: dia, mes i any) i la variable
    collection, escriu per pantalla país, any d’emisió, valor nominal i unitat de cada moneda i
    retorna el valor total de tasació de les monedes adquirides amb posterioritat a la data
    entrada..


funcio valorDate(dia: enter, mes: enter, any: enter, collection:
tCollect): real
   var
         i, j: enter;
     valorTotal: real;
   fvar

       per i: = 1 fins collection.qtty fer
             si(collection.item[i].dataAdq.any = any)
             i (collection.item[i].dataAdq.mes = mes) i
             (collection.item[i].dataAdq.dia ≥ dia)(1) llavors
             j: = i;
     fper

   valorTotal := 0;
   per collection.item[j] fins collection.item[collection.qtty] fer
      escriureText(collection.item[j].pais);
      escriureText(collection.item[j].unitat);
      escriureReal(collection.item[j].valorN);
      escriureEnter(collection.item[j].any);
      valorTotal := valorTotal + (collection.item[j].valorT)
   fper
        retorna valorTotal;
ffuncio


(1) Suposant que les entrades estan ordenades per data, si no troba una data exacta a la data entrada agafará la
següent data trobada posterior.




                                                                                                      18
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:
•   withFirstLetter que rep com a paràmetre la taula d’estudiants i un caràcter x i escriu:
        o    El títol "Estudiants que comencen per x" on x és el caràcter rebut
        o    Els noms de tots els estudiants el nom dels quals comenci pel caràcter


•   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 "Assignatura i qualificació màxima 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
                 l’assignatura millor puntuada i la qualificació obtinguda en ella
        o    Si no hi ha estudiants amb el nom, el missatge "No hi ha estudiants de nom SS".



•   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 dos decimals, obtinguda d'amitjanar les qualificacions mitjanes dels
        estudiants. És a dir, heu de calcular les mitjanes de cada estudiant i després fer la
        mitjana d’aquests valors.



                                                                                      19
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 (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 es crida en el programa mitjançant la instrucció include ("data"); i
          incorpora al programa la variable $student que conté totes les dades de 50
          estudiants. Aquest fitxer servirà per a les proves i s’haurà d’ubicar a la mateixa
          carpeta que el fitxer php de la pràctica. 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 withFirstLetter($list, $letter)
       El parámetre $list serà la llista d’estudiants rebuda
       El paràmetre $letter serà la lletra inicial dels noms a mostrar
       [Recordeu que la primera lletra de una cadena de text $cadena es pot obtenir amb
       $cadena[0]]

      •   function matterOf($list, $name)
          El parámetre $list serà la llista d’estudiants rebuda
          El parámetre $name el nom dels estudiants a buscar.
          [Recordeu que les cadenes de text de més d’un caràcter no s’han de comparar amb
          l’operador ==. Pot usar-se la funció interna del PHP strcmp4 que retorna un 0 si les
          dues cadenes que rep són iguals].

      •   function gradeAverage($list)
          El parámetre $list serà la llista d’estudiants rebuda
          [Recordeu que per mostrar una quantitat exacta de decimals heu de fer servir printf
          amb l’especificador d’amplada de camp %.xf on x és el nombre de decimals a
          mostrar]




4
    http://es2.php.net/manual/es/function.strcmp.php


                                                                                          20
<!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>Schola</title>
</head>
<body>
<!-- Comentari -->
<h1>Schola </h1>
<h3>Maria del Mar Ortiz Valor</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
        sex       => booleà que indica el sexe true-> dona i false->home
        age       => enter que conté l'edat de l'estudiant
        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
        febrer - juny 2012
*/
      /***********************FUNCTION**********************************/

     function withFirstLetter($list, $letter)
     { /* escriu els noms dels estudiants el nom dels quals comença per $letter */
        //AQUÍ VA EL VOSTRE CODI

        print "<h3>Estudiants que començen per $letter</h3>";
        $long = count($list);
        $i = 0;
        do {
           $find = substr_compare($list[$i]['name'], $letter, 0, strlen($letter));
           $i++;

                                                                                     21
}
   while (($find != 0) && ($i < $long));
   if ($find == 0) {
   }

    for ($i = 0; $i < $long; $i++) {
       if (substr_compare($list[$i]['name'], $letter, 0, strlen($letter)) == 0) {
           print $list[$i]['name'];
           NL();
       }
    }
}// de withFirstLetter

function matterOf($list, $name)
{ /* mostra per pantalla edat, l'assignatura millor qualificada
       i la qualificació obtinguda en ella de tots estudiants
       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
   */

   //AQUÍ VA EL VOSTRE CODI

   $comptadorEstudiant = 0;
   $long = count($list);

   print "<h3>Assigantura i qualificació maxima de $name</h3>";
   for ($i = 0; $i < $long; $i++) {
      if (strcmp($name, $list[$i]['name']) == 0) {
          $comptadorEstudiant++;
          asort($list[$i]['grade']);              //ordene les notes per tindre la nota major al final
              foreach ($list[$i]['grade'] as $key => $val) {
              }
      $notaF = end($list[$i]['grade']);           // em situe en la darrera posicio y guarde la nota a una variable
      $key = key($list[$i]['grade']);              //guarde la key de la darrera posicio a una variable

                                                                                    22
print "<p>Edat: ".$list[$i]['age'].", ";
            print ($list[$i]['matter'][$key]).": ".($list[$i]['grade'][$key]);    // com que la key de la nota es la mateixa que la del nom de
l'assignatura la faig servir ara per obtindre el nom corresponent de la nota mes alta

           if (prev($list[$i]['grade']) == $notaF) {             // compare la nota anterior amb la darrera per si es igual
               $key2 = key($list[$i]['grade']);

              print ", ".($list[$i]['matter'][$key2]).": ".($list[$i]['grade'][$key2]);
            }
            print "</p>";
            } // del if
         } // del bucle inicial
            if ($comptadorEstudiant == 0) {
                print "No hi ha estudiants de nom $name";
                NL();
            }

     }// de matterOf

     function gradeAverage($list)
     { /* mostra per pantalla la qualificació mitjana de
           les mitjanes dels estudiants
        */

        //AQUÍ VA EL VOSTRE CODI

        print "<h3>Mitjanes de notes dels estudiants</h3>";
        $long = count($list);
        $sumaMitjanes = 0;
        for ($i = 0; $i < $long; $i++) {
           $comptadorMateria = count($list[$i]['matter']);
           $sumaNotes = 0;
           for ($j = 0; $j <= ($comptadorMateria-1); $j++) {
               $aux = $list[$i]['grade'][$j];
               $sumaNotes = $sumaNotes + $aux;

                                                                                            23
//             print "sumatori notes $sumaNotes"; // sumatori de notes de cada estudiant
//             NL();
            }
//          print "suma notes estudiant $sumaNotes"; //suma total de cada estudiant
//          NL();
            $mitjanaEstudiant = $sumaNotes / $comptadorMateria;
//          print "mitjana estudiant $mitjanaEstudiant"; // nota mitjana de cada estudiant
//          NL();
            $sumaMitjanes = $sumaMitjanes + $mitjanaEstudiant;
          }
//        print "suma mitjanes $sumaMitjanes"; // suma de totes les mitjanes
//        NL();
          $mitjanaGen = $sumaMitjanes / $long;
          printf ("<b> %.2f</b>",$mitjanaGen);
      }// de gradeAverage

      function NL() { print "<br />"; }

        /***********************Programa Principal**********************************/
     // s'incorporen les dades dels estudiants
        include ("data");
        //ja es disposa de la variable $student, l'array de tuples que conté totes les dades
        // es criden les accions
        withFirstLetter($student, 'J');
        withFirstLetter($student, 'W');
        withFirstLetter($student, 'B');
        matterOf($student, "Joan");
        matterOf($student, "Manolo");
        matterOf($student, "Anne");
        matterOf($student, "Ludving");
        gradeAverage($student);
?>
</div>
</body>
</html>

                                                                                         24

More Related Content

What's hot

Programació - Pràctica 2 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 2 - Multimedia (UOC) - Paquita RibasProgramació - Pràctica 2 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 2 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Programació - PAC 2 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 2 - Multimedia (UOC) - Paquita RibasProgramació - PAC 2 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 2 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Programació - PAC 2 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 2 correcció - Multimèdia (UOC) - Paquita RibasProgramació - PAC 2 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 2 correcció - Multimèdia (UOC) - Paquita RibasPaquita Ribas
 
Programació - PAC 1 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 1 - Multimedia (UOC) - Paquita RibasProgramació - PAC 1 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 1 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita RibasProgramació - PAC 1 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita RibasPaquita Ribas
 
Programació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia BriaProgramació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia BriaLidia Bria
 
4 potències i arrels 2n eso
4 potències i arrels 2n eso4 potències i arrels 2n eso
4 potències i arrels 2n esoAlbert Sola
 
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àctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia BriaProgramació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia BriaLidia Bria
 
Polinomis 4t ESO
Polinomis 4t ESOPolinomis 4t ESO
Polinomis 4t ESOAlbert Sola
 
Potencies i arrels 2 n
Potencies i arrels 2 nPotencies i arrels 2 n
Potencies i arrels 2 ncpnapenyal
 
Matematiques estiu 2019
Matematiques estiu 2019Matematiques estiu 2019
Matematiques estiu 2019cpnapenyal
 
3 Polinomis Part 1 3r ESO
3 Polinomis Part 1 3r ESO3 Polinomis Part 1 3r ESO
3 Polinomis Part 1 3r ESOAlbert Sola
 
04 Monomis i Polinomis 3r ESO
04 Monomis i Polinomis 3r ESO04 Monomis i Polinomis 3r ESO
04 Monomis i Polinomis 3r ESOAlbert Sola
 
Ma fraccions 1_i_2
Ma fraccions 1_i_2Ma fraccions 1_i_2
Ma fraccions 1_i_2cpnapenyal
 
Derivades 2n de Batxillerat CCSS
Derivades 2n de Batxillerat CCSSDerivades 2n de Batxillerat CCSS
Derivades 2n de Batxillerat CCSSAlbert Sola
 
Arrels 3r ESO. Versió 1.0
Arrels 3r ESO. Versió 1.0Arrels 3r ESO. Versió 1.0
Arrels 3r ESO. Versió 1.0Albert Sola
 

What's hot (20)

Prog_pac1
Prog_pac1Prog_pac1
Prog_pac1
 
Programació - Pràctica 2 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 2 - Multimedia (UOC) - Paquita RibasProgramació - Pràctica 2 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 2 - Multimedia (UOC) - Paquita Ribas
 
Programació - PAC 2 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 2 - Multimedia (UOC) - Paquita RibasProgramació - PAC 2 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 2 - Multimedia (UOC) - Paquita Ribas
 
Programació - PAC 2 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 2 correcció - Multimèdia (UOC) - Paquita RibasProgramació - PAC 2 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 2 correcció - Multimèdia (UOC) - Paquita Ribas
 
Programació - PAC 1 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 1 - Multimedia (UOC) - Paquita RibasProgramació - PAC 1 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 1 - Multimedia (UOC) - Paquita Ribas
 
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita RibasProgramació - PAC 1 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita Ribas
 
Programació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia BriaProgramació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia Bria
 
Prog_pac2
Prog_pac2Prog_pac2
Prog_pac2
 
4 potències i arrels 2n eso
4 potències i arrels 2n eso4 potències i arrels 2n eso
4 potències i arrels 2n eso
 
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àctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia BriaProgramació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia Bria
 
Polinomis 4t ESO
Polinomis 4t ESOPolinomis 4t ESO
Polinomis 4t ESO
 
Potencies i arrels 2 n
Potencies i arrels 2 nPotencies i arrels 2 n
Potencies i arrels 2 n
 
Matematiques estiu 2019
Matematiques estiu 2019Matematiques estiu 2019
Matematiques estiu 2019
 
3 Polinomis Part 1 3r ESO
3 Polinomis Part 1 3r ESO3 Polinomis Part 1 3r ESO
3 Polinomis Part 1 3r ESO
 
04 Monomis i Polinomis 3r ESO
04 Monomis i Polinomis 3r ESO04 Monomis i Polinomis 3r ESO
04 Monomis i Polinomis 3r ESO
 
Ma fraccions 1_i_2
Ma fraccions 1_i_2Ma fraccions 1_i_2
Ma fraccions 1_i_2
 
Derivades 2n de Batxillerat CCSS
Derivades 2n de Batxillerat CCSSDerivades 2n de Batxillerat CCSS
Derivades 2n de Batxillerat CCSS
 
Decimals
DecimalsDecimals
Decimals
 
Arrels 3r ESO. Versió 1.0
Arrels 3r ESO. Versió 1.0Arrels 3r ESO. Versió 1.0
Arrels 3r ESO. Versió 1.0
 

Similar to | programacion | PRACTICA 2 - Madel Ortiz

Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaLidia Bria
 
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ó - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaLidia Bria
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinadesceedukat
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - 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
 
Àlgebra i Equacions de 1r Grau 2n ESO
Àlgebra i Equacions de 1r Grau 2n ESOÀlgebra i Equacions de 1r Grau 2n ESO
Àlgebra i Equacions de 1r Grau 2n ESOAlbert Sola
 
Els nombres naturals
Els nombres naturalsEls nombres naturals
Els nombres naturalscpnapenyal
 
Problemas resueltos de matrices
Problemas resueltos de matricesProblemas resueltos de matrices
Problemas resueltos de matricesMelanie Nogué
 
Proporcionalitat i percentatges
Proporcionalitat i percentatgesProporcionalitat i percentatges
Proporcionalitat i percentatgescpnapenyal
 
AraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitats
AraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitatsAraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitats
AraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitatsCREAMAT
 

Similar to | programacion | PRACTICA 2 - Madel Ortiz (20)

Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia Bria
 
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ó - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia Bria
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinades
 
PW_pac1
PW_pac1PW_pac1
PW_pac1
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia Bria
 
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è
 
Pw p tema 1 nombres racionals
Pw p tema 1 nombres racionalsPw p tema 1 nombres racionals
Pw p tema 1 nombres racionals
 
Divisibilitat 1r eso
Divisibilitat 1r esoDivisibilitat 1r eso
Divisibilitat 1r eso
 
Àlgebra i Equacions de 1r Grau 2n ESO
Àlgebra i Equacions de 1r Grau 2n ESOÀlgebra i Equacions de 1r Grau 2n ESO
Àlgebra i Equacions de 1r Grau 2n ESO
 
Els nombres naturals
Els nombres naturalsEls nombres naturals
Els nombres naturals
 
Fraccions
FraccionsFraccions
Fraccions
 
Fraccions
FraccionsFraccions
Fraccions
 
YDC_pract1
YDC_pract1YDC_pract1
YDC_pract1
 
Problemas resueltos de matrices
Problemas resueltos de matricesProblemas resueltos de matrices
Problemas resueltos de matrices
 
Proporcionalitat i percentatges
Proporcionalitat i percentatgesProporcionalitat i percentatges
Proporcionalitat i percentatges
 
AraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitats
AraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitatsAraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitats
AraMat. Mòdul 1. Sessió 4. Patrons i relacions. Altres activitats
 
Tema 1
Tema 1Tema 1
Tema 1
 
Resum t2
Resum t2Resum t2
Resum t2
 

Recently uploaded

SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,
SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,
SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,Lasilviatecno
 
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfErnest Lluch
 
XARXES UBANES I LA SEVA PROBLEMÀTICA.pptx
XARXES UBANES I LA SEVA PROBLEMÀTICA.pptxXARXES UBANES I LA SEVA PROBLEMÀTICA.pptx
XARXES UBANES I LA SEVA PROBLEMÀTICA.pptxCRIS650557
 
MECANISMES I CINEMÀTICA 1r DE BATXILLERAT
MECANISMES I CINEMÀTICA 1r DE BATXILLERATMECANISMES I CINEMÀTICA 1r DE BATXILLERAT
MECANISMES I CINEMÀTICA 1r DE BATXILLERATLasilviatecno
 
Plans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El MusicalPlans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El Musicalalba444773
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfISMAELALVAREZCABRERA
 
ELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdf
ELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdfELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdf
ELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdfMarinaRiera1
 
Sílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdfSílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdfsilvialopezle
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfISMAELALVAREZCABRERA
 

Recently uploaded (11)

SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,
SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,
SISTEMA DIÈDRIC. PLANS, PAREL·LELISME,PERPENDICULARITAT,
 
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
 
XARXES UBANES I LA SEVA PROBLEMÀTICA.pptx
XARXES UBANES I LA SEVA PROBLEMÀTICA.pptxXARXES UBANES I LA SEVA PROBLEMÀTICA.pptx
XARXES UBANES I LA SEVA PROBLEMÀTICA.pptx
 
itcs - institut tècnic català de la soldadura
itcs - institut tècnic català de la soldaduraitcs - institut tècnic català de la soldadura
itcs - institut tècnic català de la soldadura
 
MECANISMES I CINEMÀTICA 1r DE BATXILLERAT
MECANISMES I CINEMÀTICA 1r DE BATXILLERATMECANISMES I CINEMÀTICA 1r DE BATXILLERAT
MECANISMES I CINEMÀTICA 1r DE BATXILLERAT
 
Plans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El MusicalPlans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El Musical
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
 
ELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdf
ELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdfELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdf
ELS DÉUS DE LA MITOLOGIA GREGA (Catalán).pdf
 
Sílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdfSílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdf
 
HISTÒRIES PER A MENUTS II. CRA Serra del Benicadell.pdf
HISTÒRIES PER A MENUTS II. CRA  Serra del Benicadell.pdfHISTÒRIES PER A MENUTS II. CRA  Serra del Benicadell.pdf
HISTÒRIES PER A MENUTS II. CRA Serra del Benicadell.pdf
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
 

| programacion | PRACTICA 2 - Madel Ortiz

  • 1. Estudis d’ Informàtica, Multimèdia i Telecomunicació Pro gra ma ció Prá ctic a2 Cognoms: Ortiz Valor Nom: Maria del Mar 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 1 i 4, 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ó: dilluns, 16 de maig de 2012 (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) sonTriangles que rebi tres taules petit, mitja i gran de 100 nombres reals cadascuna i retorni una taula de 100 booleans; en les posicions figurarà true o false segons si els números que ocupen la posició en petit, mitja i gran poden constituir un triangle o no. . (Per exemple si els valors de les primeres posicions de petit, mitja i gran fossin index 0 1 2 3 4 5 6 7 8 9 10 … petit 2.0 2.0 2.8 3.1 3.2 3.5 4.3 4.6 1.6 2.1 1.1 … mitja 2.0 3.1 5.3 3.3 4.2 4.1 4.5 5.3 4.6 7.0 1.1 … gran 2.0 4.0 14.0 7.1 7.4 8.0 6.1 10.0 5.9 10.1 11.1 els valors retornats serien inde 0 1 2 3 4 5 6 7 8 9 10 … x valor tru tru fals fals fals fals tru fals tru fals fals … e e e e e e e e e e e Perquè es pot construir un triangle de costats 2.0, o amb els costats(2.0, 3.1 i 4.0) però no amb els costats 2.8, 5.3 i 14.0) Indicacions: • Disposem del tipus tReal definit com una taula [100] de real • Disposem del tipus tBool definit com una taula [100] de booleà • Tres números poden constituir un triangle si la suma dels dos més petits és mes gran que el número major. funcio sonTriangles(petit: taula [100] de reals, mitja: taula [100] de reals, gran: taula [100] de reals): taula [100] de booleà {rep 3 arrays de 100 numeros i retorna un array de 100 booleans en que es diu si els numeros de la mateixa posició de cada array poden formar un triangle} var i: enter; triangle: booleà; taulaTriangles: taula [100] de booleà fvar per i:= 1 fins 100 fer llegirReal(petit[i]); llegirReal(mitja[i]); llegirReal(gran[i]); si (petit[i] + mitja[i] > gran[i]) llavors taulaTriangle[i] := cert fsi 2
  • 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 Cartró del bingo que crea, aleatòriament un cartró de bingo segons les normes establertes: • Els números que poden sortir al cartró van del 01 al 80. • El cartró té 4 fileres de 5 números cadascuna o la primera filera conté 5 números entre 01 i 20 o la segona filera conté 5 números entre 21 i 40 o la tercera filera conté 5 números entre 41 i 60 o la quarta filera conté 5 números entre 61 i 80 • En cada filera els números es mostraran ordenats de petit a gran. Pe: si la crida és http://localhost/pract2_exer02.php la pantalla pot mostrar Recursos: Per a la realització de l’exercici es faciliten 19 imatges en format png • 0_.png a 8_.png amb les parts esquerre dels cercles numerats • _0.png a _9.png amb les parts dretes dels cercles numerats Si es volgués mostrar la bola amb el número 38, s’hauria de format amb la imatge 3_.png immediatament seguida de la imatge _8.png 4
  • 5. Consells Sortejar 20 números entre 1 i 80 no és un problema complicat, es tracta de fer 20 sortejos, ara bé, tenim certes limitacions: • No pot sortir cap número repetit • Cada fila conté 5 números que provenen d’una vintena determinada (1 a 20 a la primera, 21 a 40 a la segona, 41 a 60 a la tercera i 61 a 80 a la quarta) La segona limitació se supera fent 5 sortejos independents per als números de cada filera. La primera es pot solucionar mitjançant un array que indiqui si el número es pot emprar o no es pot emprar perquè ja ha sortit anteriorment i no pot tornar a sortir. Aquest array, que nomenarem $free ha de tenir una posició de tipus booleà per cada número 1 a 80. Si el contingut és true es pot emprar el número. Si és false, no es pot agafar perquè ja ha sortit. Caldrà mantenir aquest array: quan s'agafi un número (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. • Els fitxers d’imatge .png se situaran a la mateixa carpeta que el fitxer .php. • Una estructura de dades bàsica serà la taula $free de 81 posicions de tipus boolean. Cadascuna de les posicions de l’array de la 1 a la 80 correspondran a un número dels que poden aparèixer en el cartró. Si el contingut d’una posició de l’array és true significa que el número encara no s'ha agafat i el valor false voldrà dir que el número ja ha sortit. • Una altra serà la taula $lines que representarà les quatre línies de 5 posicions que constitueixen el cartró de 20 números. Podeu optar lliurement per fer un únic array de 20 posicions o un array bidimensional ([4][5]). En funció d’aquesta decisió la resta de funcions podrà tenir lleus diferencies d’implementació. • S’ha de construir la function initArray(&$vector, $long, $valor) que rep com paràmetres un array ($vector), la seva longitud ($long) i un valor ($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 numberDraw($number) que rep un número enter entre 1 i 80 ($number) i dibuixa en la pantalla la bola que conté aquest número a base de posar consecutivament les imatges que constitueixen la bola corresponent. P.e. si rep el número 38, ha de posar la imatge 3_.png immediatament seguida de la imatge _8.png • S’ha de crear la funció createLine que rebrà el vector $free, l’array $lines (o en el cas de ser bidimensional l’array que representa una línia) i els valors $minvalue i $maxvalue que representen els números mínim i màxim que poden aparèixer a la línia. Si ho creieu convenient podeu posar més paràmetres. Aquesta funció calcularà aleatòriament els 5 números que formaran la línia y els emmagatzemarà a l’array. Per decidir quin número 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 $free corresponent a cada número seleccionat, s’ha de posar a false. 1 http://php.net/manual/es/function.rand.php 5
  • 6. Com que els array $free i $lines (o el que representa la línia si es decideix per l’array bidimensional) es modificaran, han de ser paràmetres d’entrada i sortida. 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 un número que no hagi sortit amb anterioritat (es corre el risc d’haver de fer molt sortejos perquè van sortint números repetits). o Si surt un número ja obtingut amb anterioritat, recórrer la taula $free en un sentit fins a trobar una posició a true i donar aquesta posició com a obtinguda pel sorteig. Si s’implementa aquest mètode, penseu que si estem sortejant números de 21 al 40 i hem decidit recórrer l’array en sentit ascendent, i surt el 39 que ja està usat, mirarem el 40 i, si està ocupat, s’hauria de passar a mirar el 21. Altrament miraríem el 41 que no pot sortir en la línia que s’està construint. Aquest mètode assegura fer només un sorteig per cada número encara que al recórrer en un sentit determinat tendeix a fer aparèixer números contigus. • Abans d’escriure el cartó en la pantalla haureu d’ordenar els números de manera que s’escriguin de menor a major. PHP facilita la function sort($taula)2 que rep una taula i la retorna amb els seus elements ordenats de menor a major. Podeu comprovar el funcionament a comoras.uoc.edu/~jgilm/pract2/pract2_exer02.php 2 http://php.net/manual/es/function.sort.php 6
  • 7. <!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>Cartró de bingo</h3> <h3>Maria del Mar Ortiz Valor</h3> <div> <?php /* Reparteix, de manera aleatòria, les 40 cartes del joc de póquer, sense repetir-ne niguna l'ordre d'aparició de les cartes es desa a la taula $cards el control per evitar repeticions es fa amb l'array $not_used */ //AQUI VA EL VOSTRE CODI /***********definició de constants***********/ /***********declaració de funcions***********/ function NL() { print "<br />"; } function putImg($image_file) { print "<img src="$image_file.png">"; } function numberDraw($number) { $unitats = $number % 10; $imgUnitats = "_".$unitats; $decenes = ($number /10 )% 10; $imgDecenes = $decenes."_"; putImg($imgDecenes); putImg($imgUnitats); } function initArray(&$vector, $long, $valor) { $i = 0; while ($i<$long) { $vector[$i] = $valor; $i++; } } function createLine(&$lines, &$free, $minvalue, $maxvalue) { /* Aquesta no es la manera més optima de que els nombres sortejats s'enmagatzenen en l'array $lines sense maxacar els anteriors, però de moment tots les proves m'han fallat*/ if ($minvalue == 1) { for ($i = 1; $i <= 5; $i++) { $sortejat = rand($minvalue,$maxvalue); while (!$free[$sortejat]) { $sortejat++; if ($sortejat == $maxvalue) { $sortejat = $minvalue; } } $free[$sortejat] = false; $lines[$i] = $sortejat; } 7
  • 8. } if ($minvalue == 21) { for ($i = 6; $i <= 10; $i++) { $sortejat = rand($minvalue,$maxvalue); while (!$free[$sortejat]) { $sortejat++; if ($sortejat == $maxvalue) { $sortejat = $minvalue; } } $free[$sortejat] = false; $lines[$i] = $sortejat; } } if ($minvalue == 41) { for ($i = 11; $i <= 15; $i++) { $sortejat = rand($minvalue,$maxvalue); while (!$free[$sortejat]) { $sortejat++; if ($sortejat == $maxvalue) { $sortejat = $minvalue; } } $free[$sortejat] = false; $lines[$i] = $sortejat; } } if ($minvalue == 61) { for ($i = 16; $i <= 20; $i++) { $sortejat = rand($minvalue,$maxvalue); while (!$free[$sortejat]) { $sortejat++; if ($sortejat == $maxvalue) { $sortejat = $minvalue; } } $free[$sortejat] = false; $lines[$i] = $sortejat; } } } function escriureCartro($lines) { for ($i = 1; $i <= 5; $i++) { numberDraw($lines[$i]); } NL(); for ($i = 6; $i <= 10; $i++) { numberDraw($lines[$i]); } NL(); for ($i = 11; $i <= 15; $i++) { numberDraw($lines[$i]); } NL(); 8
  • 9. for ($i = 16; $i <= 20; $i++) { numberDraw($lines[$i]); } NL(); } /***********Programa principal*************/ initArray($free, 81, true); initArray($lines, 20, 0); createLine($lines, $free, 1, 20); NL(); createLine($lines, $free, 21, 40); NL(); createLine($lines, $free, 41, 60); NL(); createLine($lines, $free, 61, 80); NL(); sort($lines); foreach ($lines as $key => $val) { } escriureCartro($lines); NL(); ?> </div> </body> </html> 9
  • 10. Exercici 3: Treball amb taules en PHP [20%] Objectius: Donades sèries de dades, organitzar-les en taules 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 que un conjunt de jugadors juguen a guanyar una línia en un Bingo. Cada Jugador té una línia que consta de 8 números diferents (però dos jugadors poden tenir números coincidents). El programa rep un paràmetre gamers que indica el nombre de jugadors (si no se escriu el paràmetre gamers s'ha de considerar dos jugadors) i mostra tres blocs d'informació en pantalla: • 1r Bloc: els noms dels jugadors (JUGADOR 1, JUGADOR 2,...) i la línia de cada jugador (que genera el programa) • 2n Bloc: el conjunt de números sortejats. Va sortejant números fins que un jugador guanya • 3r Bloc: el nom del jugador o jugadors guanyadors P.e. a la crida: http://localhost/pract2_exer03.php?gamers=2, un resultat seria El programa que es demana aprofita mòduls de l'exercici 2 i també els fitxers d'imatge. Recursos: Disposeu dels mateixos fitxers d'imatge que per l'exercici anterior. 10
  • 11. Indicacions i requisits d’implementació • La crida al programa serà del tipus pract2_exer03.php o pract2_exer03.php? gamers=X on X és un número enter. Si no es posa paràmetre la simulació es farà per dos jugadors. • Es farà servir l'array $free amb el mateix significat que en l'exercici anterior. S'ha de tenir en compte que l'array s'haurà d'inicialitzar a true en totes les seves posicions cada cop que s'hagi de generar un línia i abans de començar a sortejar. • 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 els números de la seva línia. La matriu $gamer corresponent a la captura de pantalla de l'exemple tindria aquest aspecte $gamer $gamer $gamer $gamer $gamer $gamer $gamer $gamer $gamer [ ][0] [ ][1] [ ][2] [ ][3] [ ][4] [ ][5] [ ][6] [ ][7] $gamer [0] 10 23 27 29 44 47 73 77 $gamer [1] 3 7 26 41 47 48 71 75 Recordeu que no cal declarar les matrius especialment, es poden crear mitjançant un bucle i en qualsevol moment se'ls pot afegir caselles3. • Podeu emprar les funcions function init_array, numberDraw i createLine amb el mateix significat que en l'exercici anterior. • S'ha de crear la funció draw que rep per modificar l'array $free, sorteja un número i el retorna. [En PHP una function pot retornar valors en paràmetres i simultàniament en una instrucció return comportant-se d'una manera mixta d'acció i funció]. • S'ha de crear la function lineCheck que rep un número sortejat i la línia d'un jugador i retorna 1 si el número està a la línia o 0 si no hi és. Consells • Hi ha diverses maneres de comprovar si un jugador ha guanyat amb la seva línia: o Cada cop que s’hagi de fer una comprovació, es mira si les posicions de $free que corresponen als números del jugador estan en false. Si això passa, aquest jugador ha completat la seva línia. o Dur un comptador per a cada jugador inicialitzat a 0 i, cada cop que surt un número mirem si és igual a un dels del jugador. Si ho és, incrementem el comptador. Si el comptador arriba a 8, el jugador te plena la línia. Aquest mecanisme comporta comparar un sol número per jugador cada cop que se’n sorteja un de nou, mentre que l’anterior comporta comparar els 8 números. • Heu de tenir present que tot i que amb línies diferents, pot ser que guanyin dos o més jugadors a l’hora. El programa els ha de detectar tots. • No intenteu posar directament una posició d'un array dins d'una cadena de text de la instrucció print. 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]00$matriu[1]02$matriu[2]04$matriu[3]08de manera que en $matriu[2][1] hi ha emmagatzemat un 4 i en $matriu[1][0] hi ha un 0 11
  • 12. 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"; Podeu comprovar el funcionament a comoras.uoc.edu/~jgilm/pract2/pract2_exer03.php o Podeu comprovar el funcionament a comoras.uoc.edu/~jgilm/pract2/pract2_exer02.php?gamers=X (X és un número enter) 12
  • 13. <!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_Exer3</title> </head> <body> <h3>Joc en linia</h3> <h3>Maria del Mar Ortiz Valor</h3> <div> <?php //AQUI VA EL VOSTRE CODI /***********definició de constants***********/ /***********declaració de funcions***********/ function NL() { print "<br />"; } function putImg($image_file) { print "<img src="$image_file.png">"; } function numberDraw($number) { $unitats = $number % 10; $imgUnitats = "_".$unitats; $decenes = ($number /10 )% 10; $imgDecenes = $decenes."_"; putImg($imgDecenes); putImg($imgUnitats); } function initArray(&$vector, $long, $valor) { $i = 0; while ($i<$long) { $vector[$i] = $valor; 13
  • 14. $i++; } } function createLine(&$lines, $free) { initArray($free, 81, true); for ($a = 1; $a <= 8; $a++) { //deixa la posicio 0 lliure per fer de comptador $sortejat = rand(1,80); while (!$free[$sortejat]) { $sortejat++; if ($sortejat == 80) { $sortejat = 1; } } $free[$sortejat] = false; $lines[$a] = $sortejat; } } function escriureCartro($lines) { for ($i = 1; $i <= 8; $i++) { //deixa la posicio 0 lliure per fer de comptador numberDraw($lines[$i]); } } function draw(&$free, &$sortejat) { $sortejat = rand(1,80); while (!$free[$sortejat]) { $sortejat++; if ($sortejat == 80) { $sortejat = 1; } } $free[$sortejat] = false; return $sortejat; } 14
  • 15. function lineCheck($sortejat, $gamer) { if (array_search("$sortejat", $gamer)) { return 1; } else { return 0; } } /***********Programa principal*************/ if ($gamers = $_GET["gamers"]) { } else { $gamers = 2; } print "$gamers JUGADORS"; NL(); initArray($lines, 8, 0); //iniciar la matriu amb una posicio inicial 0 for ($i = 1; $i <= $gamers; $i++) { $gamer[$i]= array(0); } //sortejar 8 nombres per a cada jugador for ($i = 1; $i <= $gamers; $i++) { createLine($gamer[$i], $free); } for ($i = 1; $i <= $gamers; $i++) { print "<h3>JUGADOR $i</h3>"; sort($gamer[$i]); foreach ($lines as $key => $val) { } 15
  • 16. escriureCartro($gamer[$i]); } print "<h3>NOMBRES SORTEJATS</h3>"; //array free dels nombres sortejats initArray($free, 81, true); $contador[$i] = 0; $guanyador = 0; while ($guanyador<1) { draw($free, $sortejat); print "$sortejat - "; for ($i = 1; $i <= $gamers; $i++) { if (lineCheck($sortejat, $gamer[$i]) == 1) { $gamer[$i][0] = $gamer[$i][0] + 1; $contador[$i]++; if ($contador[$i] == 8) { $guanyador++; } } } } print "<h3>HA GUANYAT</h3>"; for ($i = 1; $i <= $gamers; $i++) { if ($contador[$i] == 8) { print "jugador $i"; NL(); } } ?> </div> </body> </html> 16
  • 17. 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: Un col·leccionista de monedes vol informatitzar les seves peces per a un millor control. Per a cada moneda de la col·lecció vol emmagatzemar: país (text), unitat (text), el valor nominal (real), l'any d’emisió (enter), l’aliatge (text), la data d’adquisició (tData), si té certificat d’atenticació o no i el valor de tasació (real).. • Definir el tipus tCoin adequat per emmagatzemar aquest tipus de dades. tCoin = tupla pais: text; unitat: text; valoN: real; any: enter; aliatge: text; dataAdq: tData; autentificacio: booleà; valorT: real; ftupla • Definir el tipus tData que permeti emmagatzemat en format numèric una data tData = tupla dia: enter; mes: enter; any: enter; ftupla Es preveu que la col·lecció pugui tenir fins 10.000 monedes, tot i que en aquest moment només en té 4312, per aquest motiu l'informàtic ha creat el tipus de data tCollect. En el primer camp s'emmagatzemarà la quantitat d'elements actual (ara 4312) i al segon les dades de cadascuna de les peces a partir de la posició 1 i consecutivament. tCollect = tupla qtty: enter; item: Taula[10000] de tCoin; ftupla i, per acabar, ha creat una variable que contindrà els valors var collection: tCollect; 17
  • 18. fvar • Escriure l’expressió que ens permet saber si la última moneda entrada a la base de dades és d’or i val actualment més de 500 €. [Suposeu que els elements de tipus text es poden comparar amb l’operador = com es fa amb els altres tipus simples] collection.item[collection.qtty].aliatge = “or” i collection.item[collection.qtty].valorT > 500 • Escriu la funció valorDate que rep una data (tres paràmetres: dia, mes i any) i la variable collection, escriu per pantalla país, any d’emisió, valor nominal i unitat de cada moneda i retorna el valor total de tasació de les monedes adquirides amb posterioritat a la data entrada.. funcio valorDate(dia: enter, mes: enter, any: enter, collection: tCollect): real var i, j: enter; valorTotal: real; fvar per i: = 1 fins collection.qtty fer si(collection.item[i].dataAdq.any = any) i (collection.item[i].dataAdq.mes = mes) i (collection.item[i].dataAdq.dia ≥ dia)(1) llavors j: = i; fper valorTotal := 0; per collection.item[j] fins collection.item[collection.qtty] fer escriureText(collection.item[j].pais); escriureText(collection.item[j].unitat); escriureReal(collection.item[j].valorN); escriureEnter(collection.item[j].any); valorTotal := valorTotal + (collection.item[j].valorT) fper retorna valorTotal; ffuncio (1) Suposant que les entrades estan ordenades per data, si no troba una data exacta a la data entrada agafará la següent data trobada posterior. 18
  • 19. 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: • withFirstLetter que rep com a paràmetre la taula d’estudiants i un caràcter x i escriu: o El títol "Estudiants que comencen per x" on x és el caràcter rebut o Els noms de tots els estudiants el nom dels quals comenci pel caràcter • 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 "Assignatura i qualificació màxima 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  l’assignatura millor puntuada i la qualificació obtinguda en ella o Si no hi ha estudiants amb el nom, el missatge "No hi ha estudiants de nom SS". • 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 dos decimals, obtinguda d'amitjanar les qualificacions mitjanes dels estudiants. És a dir, heu de calcular les mitjanes de cada estudiant i després fer la mitjana d’aquests valors. 19
  • 20. 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 (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 es crida en el programa mitjançant la instrucció include ("data"); i incorpora al programa la variable $student que conté totes les dades de 50 estudiants. Aquest fitxer servirà per a les proves i s’haurà d’ubicar a la mateixa carpeta que el fitxer php de la pràctica. 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 withFirstLetter($list, $letter) El parámetre $list serà la llista d’estudiants rebuda El paràmetre $letter serà la lletra inicial dels noms a mostrar [Recordeu que la primera lletra de una cadena de text $cadena es pot obtenir amb $cadena[0]] • function matterOf($list, $name) El parámetre $list serà la llista d’estudiants rebuda El parámetre $name el nom dels estudiants a buscar. [Recordeu que les cadenes de text de més d’un caràcter no s’han de comparar amb l’operador ==. Pot usar-se la funció interna del PHP strcmp4 que retorna un 0 si les dues cadenes que rep són iguals]. • function gradeAverage($list) El parámetre $list serà la llista d’estudiants rebuda [Recordeu que per mostrar una quantitat exacta de decimals heu de fer servir printf amb l’especificador d’amplada de camp %.xf on x és el nombre de decimals a mostrar] 4 http://es2.php.net/manual/es/function.strcmp.php 20
  • 21. <!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>Schola</title> </head> <body> <!-- Comentari --> <h1>Schola </h1> <h3>Maria del Mar Ortiz Valor</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 sex => booleà que indica el sexe true-> dona i false->home age => enter que conté l'edat de l'estudiant 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 febrer - juny 2012 */ /***********************FUNCTION**********************************/ function withFirstLetter($list, $letter) { /* escriu els noms dels estudiants el nom dels quals comença per $letter */ //AQUÍ VA EL VOSTRE CODI print "<h3>Estudiants que començen per $letter</h3>"; $long = count($list); $i = 0; do { $find = substr_compare($list[$i]['name'], $letter, 0, strlen($letter)); $i++; 21
  • 22. } while (($find != 0) && ($i < $long)); if ($find == 0) { } for ($i = 0; $i < $long; $i++) { if (substr_compare($list[$i]['name'], $letter, 0, strlen($letter)) == 0) { print $list[$i]['name']; NL(); } } }// de withFirstLetter function matterOf($list, $name) { /* mostra per pantalla edat, l'assignatura millor qualificada i la qualificació obtinguda en ella de tots estudiants 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 */ //AQUÍ VA EL VOSTRE CODI $comptadorEstudiant = 0; $long = count($list); print "<h3>Assigantura i qualificació maxima de $name</h3>"; for ($i = 0; $i < $long; $i++) { if (strcmp($name, $list[$i]['name']) == 0) { $comptadorEstudiant++; asort($list[$i]['grade']); //ordene les notes per tindre la nota major al final foreach ($list[$i]['grade'] as $key => $val) { } $notaF = end($list[$i]['grade']); // em situe en la darrera posicio y guarde la nota a una variable $key = key($list[$i]['grade']); //guarde la key de la darrera posicio a una variable 22
  • 23. print "<p>Edat: ".$list[$i]['age'].", "; print ($list[$i]['matter'][$key]).": ".($list[$i]['grade'][$key]); // com que la key de la nota es la mateixa que la del nom de l'assignatura la faig servir ara per obtindre el nom corresponent de la nota mes alta if (prev($list[$i]['grade']) == $notaF) { // compare la nota anterior amb la darrera per si es igual $key2 = key($list[$i]['grade']); print ", ".($list[$i]['matter'][$key2]).": ".($list[$i]['grade'][$key2]); } print "</p>"; } // del if } // del bucle inicial if ($comptadorEstudiant == 0) { print "No hi ha estudiants de nom $name"; NL(); } }// de matterOf function gradeAverage($list) { /* mostra per pantalla la qualificació mitjana de les mitjanes dels estudiants */ //AQUÍ VA EL VOSTRE CODI print "<h3>Mitjanes de notes dels estudiants</h3>"; $long = count($list); $sumaMitjanes = 0; for ($i = 0; $i < $long; $i++) { $comptadorMateria = count($list[$i]['matter']); $sumaNotes = 0; for ($j = 0; $j <= ($comptadorMateria-1); $j++) { $aux = $list[$i]['grade'][$j]; $sumaNotes = $sumaNotes + $aux; 23
  • 24. // print "sumatori notes $sumaNotes"; // sumatori de notes de cada estudiant // NL(); } // print "suma notes estudiant $sumaNotes"; //suma total de cada estudiant // NL(); $mitjanaEstudiant = $sumaNotes / $comptadorMateria; // print "mitjana estudiant $mitjanaEstudiant"; // nota mitjana de cada estudiant // NL(); $sumaMitjanes = $sumaMitjanes + $mitjanaEstudiant; } // print "suma mitjanes $sumaMitjanes"; // suma de totes les mitjanes // NL(); $mitjanaGen = $sumaMitjanes / $long; printf ("<b> %.2f</b>",$mitjanaGen); }// de gradeAverage function NL() { print "<br />"; } /***********************Programa Principal**********************************/ // s'incorporen les dades dels estudiants include ("data"); //ja es disposa de la variable $student, l'array de tuples que conté totes les dades // es criden les accions withFirstLetter($student, 'J'); withFirstLetter($student, 'W'); withFirstLetter($student, 'B'); matterOf($student, "Joan"); matterOf($student, "Manolo"); matterOf($student, "Anne"); matterOf($student, "Ludving"); gradeAverage($student); ?> </div> </body> </html> 24