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


Programació
Pràctica 1

SOLUCIÓ

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_PRACT1 adreçat a la bústia “Lliurament d’activitats”
3. El fitxer comprimit contindrà aquest fitxer amb les respostes als exercicis 1 a 3 i els
   arxius php corresponents als exercicis 4 i 5. No s'ha d'adjuntar els fitxers d'imatges
   ni de dades
4. Data límit per lliurar la solució: dilluns, 28 de novembre de 2011 (a les 23:59
   hores).


És imprescindible respectar el format i data d’entrega. La no adequació a
aquestes especificacions pot suposar la no avaluació de la Pràctica.
Exercici 1: Treball amb seqüències [10 %]


Objectius: Donada una seqüència de dades, aplicar l’esquema adequat per construir
un algorisme que solucioni un determinat problema.


Materials: Mòdul 3: Tractament seqüencial.




Tasca: Crear mòdul (acció o funció) que rebi un número sense decimals, calculi, per
una banda, la suma de totes les xifres i per altre el producte de totes les xifres (si una
xifra és un zero no intervindrà en el càlcul del producte), i retorni els dos valors, suma i
producte.
P.e. si el número es el 123, es retornarà 6 i 6; si és el 420 es retornarà el 6 i el 8; si és
el 30, es retornarà el 3 i el 3.

Com que ha de retornar dos valors el mòdul ha de ser una acció.

accio sumProd( ent numero: enter, sor sum: enter, sor prod:enter)
  var
     digit: enter;
  fvar

      {inicialització de variables}
   sum := 0;

   si (numero = 0) llavors
     prod := 0; {si el número és zero es retorna zero}
   sino
       prod:= 1; {per poder fer multiplicacions s'inicialitza a 1}
   fsi

   mentre (numero>0) fer
     digit := numero mod 10; {es recull una xifra}
     sum:= sum + digit;
     si (digit ≠ 0) llavors
         prod := prod * digit;
     fsi
     numero := numero div 10; {treiem la darrera xifra de numero}
   fmentre

faccio
Exercici 2: Treball amb seqüències [15 %]


Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequat
per construir un algorisme que solucioni un determinat problema.


Materials: Mòdul 3: Tractament seqüencial.




Tasca:

                                                          Codi ASCII estandard

                                                 A cada caràcter imprimible estàndard li
                                                 correspon un codi numèric entre el 32
                                                 (espai en blanc) i el 126.
                                                 Els caràcters que es mostren en vermell
                                                 tenien funció de control en les
                                                 comunicacions




Un estudiant d'informàtica vol fer un algorisme que li serveixi per encriptar i
desencriptar missatges escrits en anglès en els caràcters del codi ASCII, depenent
d'una clau secreta (un número entre 1 i 20).
El mecanisme d'encriptació seria simple: a cada caràcter li correspondria el caràcter
que està a clau posicions més enllà (p.e. si clau és 3, a la @ li correspondria la C, al 9
li correspondria el símbol <, a la a li correspondria la d, etc). Per aplicar el programa
suposarà que després del caràcter ~ (ASCII 126) ve l'espai en blanc (ASCII 32).
Per desencriptar

L'algorisme ha de llegir en primer lloc una lletra e (encriptar) o d (desencriptar),
després llegirà la clau, en tercer lloc la longitud de la cadena a codificar i després la
seqüència de caràcters per encriptar o desencriptar.
Per exemple, per ocultar la cadena "programa en PHP" amb una clau 8, la seqüència
d'entrada seria <e 8 15 programa en PHP>
Nota: la funció charToCode(c), retorna el codi ascii del caràcter que conté la variable
c. La funció codeToChar(num) retorna el caràcter el codi ascii del qual és num.


{Pre: a l'entrada hi ha una cadena action key long string
       action és un caràcter que pot prendre els valors e o d
       key un número entre 1 i 10
       string una seqüència de caracteres
       long la longitud de string}

algorisme secret
   var
      key, long: enter;
      action: caracter;
   fvar

   action := readChar();
   key := readInteger();
   long := readInteger();

   si (action = 'd') llavors key := -key; {així podem emprar encripta per codificar i
                                             descodificar}
   encripta(key, long);
falgorisme

acció encripta(ent key: enter, ent long: enter)
  var
     i, code: enter;
     c: caracter;
  fvar

   per i:=1 fins long fer
      c := readChar();
      code := charToCode(c);
      code := codi + key;
      {es codifica una lletra a cada volta}
      si (code > 126) llavors
          code := code - 95; {això passa el 127 al 32, el 128 al 33, etc}
      fsi
      si (code <32) llavors
          code := code + 95; {això passa el 31 a 126, el 30 al 125, etc}
      fsi
      writeChar(codeToChar(code));
   fper
faccio

{post: a la sortida està la cadena de caràcters codificada amb la clau key }
Exercici 3: Treball amb seqüències [15 %]


Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequat
per construir un algorisme que solucioni un determinat problema.


Materials: Mòdul 3: Tractament seqüencial.


Tasca: als multicinemes Penícules han automatitzat el despatx d'entrades de manera
que el registre de vendes d'entrades crea una seqüència diària del tipus:
        <h1 s1 h2 s2 h3 s3 … hm sm X> on
        hi és un caràcter el valor del qual pot ser
                m matinal
                t sessió de tarda
                n sessió de nit
                g sessió golfa
        si és un número que pot tenir un valor entre 1 i 8
                1 i 2 són sales 3D
                la resta són sales normals
        X és la lletra 'X' i indica el final de la seqüència

Els preus que s'apliquen a les sales varien segons la tipologia i sessió segons la
següent taula:
    Tipus / sessió           m              t            n              g
          3D                7.50          8.50          9.00          8.50
          2D                6.00          7.00          7.50          7.00

Heu de crear un mòdul (acció o funció) que llegeixi de l'entrada estàndard una
seqüència diària i retorni la recaudació total del dia.
funcio dailyAmount(): real

    const
      CHEAPPRICE: real = 6.0;
      MEDIUMPRICE: real = 7.0;
      CHEAPPRICE: real = 6.0;
    fconst

    var
      total: real;
      cinema: integer;
      session : character;
    fvar

    total := 0.0;
    car := readCharacter();

    mentre (car ≠ 'X') fer
      si (car = 'm') llavors
        total := total + 6.0;
      sino si (car = 'n') llavors
                total := total + 7.5;
            sino
                total := total + 7.0
            fsi
      fsi
      cinema := readInteger();
      si (cinema < 3) llavors
          total := total + 1.5; {sobrepreu de 3D}
      fsi
    fmentre
    retorna (total);
ffuncio
Exercici 4: Treball amb seqüències [30 %]


Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequat
per construir un programa en PHP que solucioni un determinat problema.


Materials: Mòdul 3: Tractament seqüencial.
               Guia Bàsica de PHP: mòduls 1 a 4 i mòdul 7.


Tasca: Tractar una seqüència de números per obtenir-ne valors singulars i estadístics.
     A la crida del programa es rep, en el paràmetre filename, el nom d'un fitxer que
     conté una instrucció php del tipus
              <?php $cadena="50 32 19 53 32 27 51 33 34 34";.?>
     la variable $cadena conté una cadena de text formada per números d'una o dues
     xifres separats per un espai en blanc.
     El programa ha de llegir la seqüència i
         Al principi: dir quans números integren la seqüència
         Durant la lectura: per cada deu números llegits, escriure en una línia, els deu
          números, la suma i el producte dels 10 números i també la mitjana.
         En arribar el darrer grup de números:
              o El missatge "Darrer grup de números"
              o La quantitat de números que integra aquest grup
              o Llista, suma, producte i mitjana del darrer grup de números
Indicacions
      El fitxer php rebrà el nom pract1_exer4.php
      La crida al programa serà del tipus
                      pract1_exer4.php?filename=nom_arxiu_dades
       per la qual cosa s'haurà d'emprar la instrucció $filename=$_GET["filename"];
       per carregar el nom del fitxer que incorpora la instrucció que carrega la variable
       $cadena. Un cop carregat aquest nom, es pot incorporar la instrucció al programa
       mitjançant l'ordre include($filename)1; ambdues instruccions ja formen part
       de la plantilla i són les primeres del programa principal.
       El fitxer example.php adjunt carrega un d'aquests fitxers i n'imprimeix el
       contingut. la crida ha de ser del tipus         example.php?filename=data45
      Es faciliten diversos arxius de dades amb els noms data40 a data49. Són fitxers
       de text i podeu obrir-los per comprovar el contingut: una instrucció php.




1
    http://www.php.net/manual/es/function.include.php
   Per a recollir els números un a un de la seqüència s'aconsella fer servir la
    combinació d'instruccions explode i array_shift.
   Per conèixer la longitud           d'un    array   podeu     fer   servir   la   funció
    count($nom_variable);2
   S'haurà d'implementar una acció NL() per escriure el salt de línia a la sortida.
   S'haurà d'implementar una acció block_10(entsor var1, ...) que rebi com a primer
    paràmetre la variable sobre la que es fa l'array_shift (si cal en pot rebre més) i
    escrigui, en una mateixa línia, totes les dades que es sol·licita per cada bloc de
    dades.
    Per exemple pel bloc de dades 1 2 3 4 5 6 7 8 9 1 escriuria 1 2 3 4 5 6 7 8 9 1 46
    362880 4.6
   L'acció NL() es farà servir sempre que es vulgui fer un salt de línia a la sortida des
    del PHP.
    L'acció block_10 s'emprarà cada cop que s'hagi d'escriure les dades
    corresponents a un bloc de números.
   Per escriure un número real amb un nombre concret de decimals cal per servir la
    instrucció printf3


Avaluació
Es valorarà especialment l'aplicació correcta dels esquemes de cerca, recorregut i/o
tractament adequats al problema.

També es tindrà present el disseny i l'aprofitament adequat de funcions i accions, tant
les preceptives per enunciat com aquelles altres que resultin útils i que l'estudiant
vulgui desenvolupar voluntàriament.




2
 http://www.php.net/manual/es/function.count.php
3
 http://materials.cv.uoc.edu/continguts/PID_00149863/web/main/m3/v5_3.html i
http://materials.cv.uoc.edu/continguts/PID_00149863/web/main/m7/v2_2.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//ES"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="ES" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Practica 1 - Exercici 4</title>
</head>
<body>
<h3>Practica 1 - Exercici 4</h3>
<h3>SOLUCIO</h3>           <!-- No oblideu posar el nom -->
<div>
<?php
 /* Carrega a la variable filename el nom d'un arxiu de text que conté una
              instrucció que carrega les dades a la variable $cadena.
              Les dades carregades són una sèrie de números de dues xifres
              El programa, ha de llegir tots els números i escriure:
              Al principi : Quants números hi ha.
              Durant la lectura : Per cada 10 números llegits escriurà en una línia
                    la llista de números la suma, el producte i la mitjana
                    dels números del bloc
              En arribar al darrer bloc de números:
                    el missatge "Darrer grup de números"
                    la quantitat de números que integra aquest grup
                    suma, producte i mitjana del darrer grup de números

           PRACTICA 1 - setembre 2011- gener 2012
           autor:
*/


/************ FUNCTION *************/
 function NL()
           { //new line
             print "<br />";
           }

           function block_10(&$list, $counter)
           { //write writes $counter long list numbers and statistics
              $sume=0;
              $prod=1;
              NL();
              for($i=0; $i<$counter; $i++)
              {
                 $n = array_shift($list);
                 print"$n ";
                 $sume += $n;
                 $prod *= $n;
              }
              print " ($sume) ($prod) ";
              printf ("(%.2f)", $sume / $counter);
           }

 /*********** PROGRAMA PRINCIPAL ************/

if (isset($_GET["filename"]))
{
            // load data file
  $filename=$_GET["filename"];
            include($filename);
$numeros = explode(' ', $cadena);

          // init variables
          $quantity = count ($numeros);

          // block sequence treatment
          while ($quantity>0)
          {
             $counter = min(10, $quantity);
             if ($counter<10)
             {
                NL();
                print "Darrer grup de n&uacute;meros";
             }
             block_10($numeros, $counter);
             $quantity = count ($numeros);
          }
 }
 else
 {
          print "Falta el nom de l'arxiu de dades";
          NL();
          print "la crida és del tipus <b>pract1_exer5.php?filename=<i>nom_d'arxiu</i></b>";
 }

?>
</div>
</body>
</html>
Exercici 5: Codificació en PHP [30 %]


        Objectius: Donada una seqüència de dades a l’entrada, aplicar l’esquema adequat
        per construir un programa en PHP que solucioni un determinat problema.


        Materials: Mòdul 3: Tractament seqüencial.
                      Guia Bàsica de PHP: mòduls 1 a 4 i mòdul 7.
        Tasca: Disposem de quatre imatges que representen quatre personatges familiars:
          mare, pare, noia i noi, en format png i el nom de les quals són les quatre primeres
          xifres.
          La tasca plantejada és investigar en una cadena de text l'aparició de les paraules
          mum, dad, girl i boy, per tal de fer aparèixer a una pàgina web tantes imatges com
          cops apareix cadascuna de les paraules.




                                                         Pàgina corresponent a la cadena
             1.png       2.png      3.png     4.png
                                                      14mumgfj00girltuicdaddshmumuboyhidadjf

             A la crida del programa es rep, en el paràmetre filename, el nom d'un fitxer que
             conté una instrucció php del tipus
                         $cadena="14mumgfj00girltuicdaddshmumuboyhidadjf";
             la variable $cadena conté la cadena de text on s'ha de localitzar els noms dels
             personatges.
        Indicacions
              El fitxer php rebrà el nom pract1_exer5.php
              La crida al programa serà del tipus
                             pract1_exer5.php?filename=nom_arxiu_dades
               per tant, s'haurà d'emprar la sentència $filename=$_GET["filename"]; per
               carregar el nom del fitxer que incorpora la instrucció que carrega la variable
               $cadena. Un cop carregat aquest nom, es pot incorporar la instrucció al programa
mitjançant l'ordre include($filename)4; ambdues instruccions ja formen part
    de la plantilla i són les primeres del programa principal.
    El fitxer example.php adjunt carrega un d'aquests fitxers i n'imprimeix el
    contingut. la crida ha de ser del tipus         example.php?filename=data24
   Es faciliten diversos arxius de dades amb els noms data50 a data55. Són fitxers
    de text i podeu obrir-los per comprovar el contingut: una instrucció php.
   Com que tots els caràcters van seguits, sense cap separador, la funció explode
    no és d'aplicació. A les cadenes de text es pot accedir a cadascun dels caràcters
    individuals que la formen mitjançant el nom de la variable i un número que indica
    la posició del caràcter dins de la cadena. Si el contingut de $v és "Hola", llavors
    $v[0] és 'H', $v[1] és 'o', $v[2] és 'l' i $v[3] és 'a'. Dins de les claus es pot emprar
    una variable entera p.e:
    for ($i=0; $i<4; $i ++) print $v[$i]."<br />";
    S'ha de tenir present que al primer caràcter se li assigna l'índex 0.
   PHP facilita la funció strlen($cadena)5; que retorna la longitud en caràcters de
    la cadena de text $cadena
   S'haurà d'implementar una acció NL() per escriure el salt de línia a la sortida.
   S'haurà d'implementar el mòdul putImg($image_file) que ha de rebre com a
    paràmetre el nom d'un fitxer en format png i el posarà a la pantalla. P.e. Si rep
    com paràmetre oasis, posaria en la pàgina web el fitxer d'imatge osasis.png.
   Per tal de localitzar les paraules mum, dad, girl i boy, s'haurà de crear el mòdul
    detectStarring que rebrà la variable que conté la cadena de text y un número
    (posició) i retornarà
           o un 1 si a la posició de la cadena comença la subcadena mum.
           o un 2 si a la posició de la cadena comença la subcadena dad.
           o un 3 si a la posició de la cadena comença la subcadena girl.
           o un 4 si a la posició de la cadena comença la subcadena boy.
           o un 0 en els altres casos.


   PHP facilita la funció substr_compare6($main_str, $str , $offset ,$length) que
    retorna un 0 si a partir de la posició $offset de la cadena $main_str, coincideixen
    $length caràcters amb la cadena $str.
    P.e. substr_compare ("caleidoscopio", "idoia", 4, 3 ) retornaria 0 perquè a
    partir de la quarta posició de caleidoscopio (recordeu que el primer caràcter està
    a la posició zero) trobem 3 lletres iguals a les tres primeres de "idoia".


AMPLIACIÓ OPCIONAL
Es pot crear la function contenida($main_str, $str, $offset) que retorni un 0 si la
cadena $str está sin de la cadena $main_str a partir de la posició $ofsset i un -1
altrament. De fet vindria a ser una simplificació de la funció substr_compare que

4
  http://www.php.net/manual/es/function.include.php
5
  http://es.php.net/manual/es/function.strlen.php
6
  http://php.net/manual/es/function.substr-compare.php
només serviria per saber si la totalitat d'una cadena petita está situada en una
        determinada posició d'una cadena més gran.
        Si es crea aquesta funció, serà contenida i no pas substr_compare la que es faci
        servir per localitzar les paraules mum, dad, girl i boy.


        Avaluació
        Es valorarà especialment l'aplicació correcta dels esquemes de cerca, recorregut i/o
        tractament adequats al problema.

        També es tindrà present el disseny i l'aprofitament adequat de funcions i accions, tant
        les preceptives per enunciat com aquelles altres que resultin útils i que l'estudiant
        vulgui desenvolupar voluntàriament.




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//ES"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="ES" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Practica 1 - Exercici 5</title>
</head>
<body>
<h3>Practica 1 - Exercici 5</h3>
<h3>Nom de l'estudiant</h3>           <!-- No oblideu posar el nom -->
<div>
<?php
/* Carrega a la variable filename el nom d'un arxiu de text que conté una
  instrucció que carrega les dades a la variable $cadena.
  El contingut de la variable cadena és una cadena de text en la qual
  pot aparèixer les subcadenes "mum", "dad", "girl" i "boy".
  El programa ha de revisar el contingut de la cadena i mostrar una imatge
   ("1.png", "2.png", "3.png" o "4.png") cada cop que troba en la
  cadena la subcadena corresponent.
  PRACTICA 1 - setembre 2011 - gener 2012
  autor:
*/



 /*********** PROGRAMA PRINCIPAL ************/

if (isset($_GET["filename"]))
{
          // load data file
 $filename=$_GET["filename"];

 include($filename);


  // data file contains $cadena assignation

 $long= strlen($cadena);          //$long contains $cadena length

 $long -=2; // beyond long-2 they are not coincidences
for ($i=0; $i<$long; $i++)
 {
     $starring = detectStarring($cadena, $i);

     if ($starring!=0) putImg($starring);
 }
}
else
{
   print "Falta el nom de l'arxiu de dades";
   NL();
   print "la crida és del tipus <b>pract1_exer5.php?filename=<i>nom_d'arxiu</i></b>";
}

/************ FUNCTION *************/
  function putImg($image_file)
  { // put the image
    print "<img src=".$image_file.".png>";
  }//de putImg

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

 function detectStarring($string, $pos)
 {
   switch ($string[$pos])
   {
     case 'm': if (substr_compare($string,   "mum", $pos, 3)==0) $starring=1;
               break;
     case 'd': if (substr_compare($string,   "dad", $pos, 3)==0) $starring=2;
              break;
     case 'g': if (substr_compare($string,   "girl", $pos, 4)==0) $starring=3;
               break;
     case 'b': if (substr_compare($string,   "boy", $pos, 3)==0) $starring=4;
              break;
     default: $starring=0;
   }

    return ($starring);
  }//de detectStarring
?>
</div>
</body>

More Related Content

What's hot

| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz
Ardillita Trepadora
 
Funcions 4t eso matemàtiques
Funcions 4t eso matemàtiquesFuncions 4t eso matemàtiques
Funcions 4t eso matemàtiques
rbnterrassa
 
Algorismes
AlgorismesAlgorismes
Algorismes
mferre7
 

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
 
Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia Bria
 
Prog_prac1
Prog_prac1Prog_prac1
Prog_prac1
 
Prog_prac2
Prog_prac2Prog_prac2
Prog_prac2
 
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
 
| PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio | PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio
 
Programació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia 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
 
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
 
Funcions 4t eso matemàtiques
Funcions 4t eso matemàtiquesFuncions 4t eso matemàtiques
Funcions 4t eso matemàtiques
 
Funcions
Funcions Funcions
Funcions
 
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
 
Funciones
FuncionesFunciones
Funciones
 
Algorismes
AlgorismesAlgorismes
Algorismes
 
YDC_pract1
YDC_pract1YDC_pract1
YDC_pract1
 

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

Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacio
lluís nater
 
Guia d'estils jordi
Guia d'estils jordiGuia d'estils jordi
Guia d'estils jordi
La Salle
 
Pac2 Matematiques per a multimedia 2
Pac2 Matematiques per a multimedia 2Pac2 Matematiques per a multimedia 2
Pac2 Matematiques per a multimedia 2
Joan Ignasi
 
Fonaments de programació; intro
Fonaments de programació; introFonaments de programació; intro
Fonaments de programació; intro
Melanie Nogué
 

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

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
 
Programem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robóticaProgramem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robótica
 
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
 
UD3 Programació
UD3 ProgramacióUD3 Programació
UD3 Programació
 
Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacio
 
Programació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia BriaProgramació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia Bria
 
Programació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaProgramació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia Bria
 
Guia d'estils jordi
Guia d'estils jordiGuia d'estils jordi
Guia d'estils jordi
 
Tractament i publicació d'imatge i vídeo practica2
Tractament i publicació d'imatge i vídeo practica2Tractament i publicació d'imatge i vídeo practica2
Tractament i publicació d'imatge i vídeo practica2
 
UD3 PROGRAMACIÓ
UD3 PROGRAMACIÓUD3 PROGRAMACIÓ
UD3 PROGRAMACIÓ
 
Python
PythonPython
Python
 
Pac2 Matematiques per a multimedia 2
Pac2 Matematiques per a multimedia 2Pac2 Matematiques per a multimedia 2
Pac2 Matematiques per a multimedia 2
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinades
 
Fonaments de programació; intro
Fonaments de programació; introFonaments de programació; intro
Fonaments de programació; intro
 
formules-rstudio.pdf
formules-rstudio.pdfformules-rstudio.pdf
formules-rstudio.pdf
 
formules-rstudio.pdf
formules-rstudio.pdfformules-rstudio.pdf
formules-rstudio.pdf
 
Luis Crespo
Luis CrespoLuis Crespo
Luis Crespo
 

More from Paquita 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
 

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

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