SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Estudis d’Informàtica, Multimèdia i Telecomunicació
Programació
Pràctica 2
Estudiant
Cognoms: Baldovi Martínez
Nom: Marcos
Exercici 1: Treball amb taules de taules [20 %]
La colla d'amics que tants problemes ens han causat amb el contingut de les seves
butxaques han decidit ara fer un estudi informatitzat de com evoluciona el contingut de les
seves butxaques al llarg de l'any.
Ja estan acostumats a codificar el contingut en monedes de les seves butxaques
segons el següent mètode:
codi 1 2 3 4 5 6 7 8
valor 0.01 € 0.02 € 0.05 € 0.10 € 0.20 € 0.50 € 1 € 2 €
de manera que han decidit que el contingut d'una butxaca es pot emmagatzemar en una
taula de tipus pocket definit de la següent manera
tipus
pocket: taula [8] de enter;
ftipus
de manera que una taula amb el següent contingut
3 0 1 0 2 0 2 3
contindria 3 monedes d'una cèntim, 1 de 5 cèntims, 2 de 20 cèntims, 2 d'un euro i 3 de dos
euros, és a dir, cada posició es correspon amb el codi d'una moneda i el contingut de la
posició és la quantitat de monedes del tipus en qüestió.
Per acabar amb el disseny de dades han creat una taula que englobaria les dades d'un any
complet:
tipus
pocketYear: taula [365] de pocket;
ftipus
Cada posició de la taula de tipus pocketYear es correspondria al contingut de la butxaca un
dia determinat.
Tasca: Creeu el mòdul maxYear que rebi una taula de tipus pocketYear i
 que escrigui en el canal estàndard el contingut la butxaca de cada dia a mode de
seqüència integrada pel número de dia i, per ordre, les quantitats de monedes de
cada tipus i finalitzada amb '#', com ara:
1* 0 2 3 0 0 4 2 2 2 1 3 2 4 0 1 1 1 ... 365 0 0 1 2 3 0 2 3 #
*en negreta està indicat el número del dia
 i que retorni una taula de tipus pocket on estigui emmagatzemada la quantitat
màxima de monedes de cada tipus que ha arribat a portar al llarg de l'any. És a
dir una taula del tipus
5 8 4 9 9 12 8 9
significaria que el dia que va dur més monedes d'un cèntim a la butxaca, en va dur 5.
El dia que va dur més monedes de 2 cèntims en va dur 8, el que en va dur més de 5
cèntims van ser 4, ... i el dia que va dur més monedes de 2 € en van ser 9.
Valoració
- Determinació correcta del tipus de mòdul: 0.2
- Ús correcte dels paràmetres: 0.4
- Treball correcte amb índex de taules i taules de taules: 1
- Concisió en l'ús de composicions i estalvi de variables: 0.4
//la variable i recorre el vector la variable p es el vector pocket
la variable guardara el datos de tots el pokets per allar el maxim
function maxYear(ent py: pocketYear) : pocket
var:
p: pocket;
i: enter;
j: enter;
py:pocketYear;
fvar
i:=0;
mentre(i<8) fer
p[i]:=0;
i++;
fmentre
i:=0;
mentre(i<365) fer
//imprimir (1 x x x x x..... 365 x x x x x #)
imprimir(i);
j:=0;
mentre(j<8) fer
imprimir(py[i][j]);
j++;
fmentre
//determinar el maxim
j:=0;
mentre (j<8) fer
si(p[j]<py[i][j]) llavors
p[j]=py[i][j];
fsi
j++;
fmentre
i++;
fmentre
imprimir("#");
Exercici 2: Treball taules de taules en PHP [30 %]
Les taules de taules s'empren per treballar amb col·leccions de dades homogènies
cadascuna de les quals és, alhora, una col·lecció de dades.
En aquest exercici treballarem amb una taula de taules (una matriu quadrada) de nombres
enters creada a partir d'una seqüència llegida d'un fitxer. En l'exercici es faran operacions
amb matrius, vectors i matrius i vectors entre ells
El fitxer de dades contindrà una cadena de text amb una seqüència de números el primer
dels quals indica la longitud de les taules i després venen les dades per omplir la taula. El
contingut dels fitxers de dades és una instrucció de PHP que carrega una cadena de text
com ara:
<?php
$cadena="3 3 -1 -1 3 0 0 -2 -1 0";
?>
Aquesta cadena d’exemple contindria les
dades per una matriu de 3x3 (la primera
dada és un 3) i ve seguida de 9 números,
de manera que el resultant seria.
Tasca: Crear un conjunt de functions en php que creïn i manipulin una taula de taules
quadrada de dimensions que determina l'usuari segons les indicacions. També s’haurà
de crear i gestionar una taula lineal per gestionar les dades llegides en el fitxer d’entrada
Algunes de les function hauran de treballar directament amb taules de taules i d'altres
amb taules simples. En general es treballarà sempre amb una sola taula de taules
($square) i algunes taules lineal ($data, $vector).
El programa principal ja forma part de la plantilla i no s’ha de modificar.
S'ha de crear les següents function
 function getData
Aquest mòdul no ha de rebre cap paràmetre.
La crida al programa haurà de ser del tipus:
localhost/prac2_exer2.php?filename=data20
el fitxer de dades consta d’una única instrucció de php en què la variable $cadena rep
com valor una cadena de text integrada per una sèrie de números que estan separats
per un espai en blanc, com ara
$cadena = "3 3 -1 -1 3 0 0 -2 -1 0"
El mòdul recollirà el nom del fitxer de dades del paràmetre filename, l’inclourà
(include1
), i extraurà les dades (explode2
) a un array ($data) que retornarà.
Per exemple, si s’havia rebut la cadena mostrada a dalt com exemple, retornarà la
taula $data:
3 3 -1 -1 3 0 0 -2 -1 0
 function createSquare
Que rebrà com paràmetre l'array lineal de dades rebudes. El primer número (n1)
d'aquest array, serà considerat la dimensió de la taula de taules.
o Crearà un array de n1 files cadascuna de les quals serà un array de n1 posicions
enteres
o Omplirà les posicions de la taula de taules amb les dades que segueixen a n1 de
manera que omplirà, amb les n1 següents dades les posicions de la primera fila,
amb les n1 següents la segona fila, etc. fins omplir els n1 arrays
o Retornarà l'array d'arrays generat. Per exemple si l'array unidimensional rebut
hagués estat:
3 1 2 3 4 5 6 7 8 9
L'array retornat seria
1 2 3
4 5 6
7 8 9
 function printSquare
Que rebrà com paràmetre l'array d'arrays i el mostrarà en pantalla en una taula HTML.
El codi CSS per tal que es mostri contrastat sobre el fons fosc de la pantalla ja forma
part de la plantilla. Per obtenir la dimensió de l’array PHP facilita la function count3
.
1
http://php.net/manual/es/function.include.php
2
http://php.net/manual/es/function.explode.php
3
http://php.net/manual/es/function.count.php
 function printVector
Que rebrà com paràmetre un array lineal i mostrarà els seus elements en la pantalla
organitzats en una taula HTML. El codi CSS per tal que es mostri contrastat sobre el
fons fosc de la pantalla ja forma part de la plantilla. Per obtenir la dimensió de l’array
PHP facilita la function count4
.
 function sumRows
Que rebrà com paràmetre l'array d'arrays i retornarà un array d’una dimensió que en
cada posició té la suma dels elements de la filera corresponent de la matriu. Per
exemple si la matriu té el contingut
1 2 3
4 5 6
7 8 9
l’array retornat seria
6 15 24
 function sumCols
Que rebrà com paràmetre l'array d'arrays i retornarà un array d’una dimensió que en
cada posició té la suma dels elements de la columna corresponent de la matriu. Per
exemple si la matriu té el contingut
1 2 3
4 5 6
7 8 9
l’array retornat seria
12 15 18
 function squareVectorProduct
Que rebrà una matriu d’entrada i un vector de la mateixa longitud i retornarà una
matriu on cada filera estarà composada pels productes de la filera equivalent de la
matriu d’entrada pels elements del vector. Per exemple, si matriu i vector tenen els
continguts
1 2 3
4 5 6 1 2 3
7 8 9
La matriu que es retornarà serà
1 4 9
4 10 18
7 16 27
Indicacions preceptives
 La plantilla prac2_exer2_plantilla.php porta incorporat el programa principal que fa
les crides a les function. El codi que va escrit a la plantilla no s'ha de modificar. És
molt convenient que mireu el programa principal i veieu les crides que es fan a les
function per veure si es corresponen a funcions i retornen mitjançant return o bé són
accions que no retornen res o retornen els valors mitjançant els paràmetres de
sortida o entrada/sortida
 Es faciliten també 6 fitxers de dades data20 a data25.
 Els fitxers de dades s’han d’ubicar a la mateixa carpeta que el fitxer php.
 No es poden emprar variables global. Tampoc es poden emprar functions d'array
incloses a php llevat de count i array_shift.
4
http://php.net/manual/es/function.count.php
Altres indicacions
 Recordeu que, a diferencia de les taules en llenguatge algorísmic que comencen en
la posició 1, en PHP la primera posició dels arrays és la posició 0.
 Podeu emprar functions confeccionades per a exercicis o provinents de solucions
anteriors, ja siguin completes o adaptades a les noves dades estructurades.
 Podeu també crear quantes altres functions cregueu necessari.
Podeu comprovar el funcionament a:
http://prog.uoc.edu/prac2/prac2_exer2.php?filename=data20
o canviant el nom del fitxer de dades
Consells
Cal analitzar ben bé què s'ha de fer en cadascun dels mòduls que es demanen en aquest
programa i mirar quins mòduls de programes anteriors es poden emprar bé directament o bé
amb petites modificacions per adaptar-los a les noves necessitats.
Valoració
- Function getData: 0.5
- Function createSquare: 0.5
- Function printSquare: 0.5
- Function printVector: 0.5
- Function squareVectorProduct: 0.5
- Concisió en l'ús de composicions i estalvi de variables: 0.5
Copieu aquí el codi de la vostra solució
<?php
/************* FUNCTION *************/
function LF()
{ //line feed
print "<br />";
}// de LF
//put your code here
function getData()
{
$filename = $_GET["filename"];
include($filename);
$data = explode(" ",$cadena);
return $data;
}
function createSquare($data)
{
// Llegir dimensió --> primer valor es $recData --> dimensio
$files=0;
$recData=0;
$dimensio=$data[$recData];
$recData++;
while($files<$dimensio)
{
$columnes=0;
while($columnes<$dimensio)
{
$square[$files][$columnes]=$data[$recData];
$recData++;
$columnes++;
}
$files++;
}
return $square;
}
function printSquare($square)
{
echo "<table>";
//recorrer files
$files=0;
$dimensio=sqrt(count($square));
while($files<$dimensio)
{
echo "<tr>";
//recorrer columnes
$columnes=0;
while($columnes<$dimensio)
{
//imprimir valor
echo "<td>".$square[$files][$columnes]."</td>";
$columnes++;
}
echo "</tr>";
$files++;
}
echo "</table>";
}
function printVector($vector)
{
//crea taula
echo "<table>";
// crea la fila
echo "<tr>";
//recorrer el vector
$recData=0;
$dimensio=count($vector);
while($recData<$dimensio)
{
//imprimir valor
echo "<td>".$vector[$recData]."</td>";
$recData++;
}
echo "<tr>";
echo "</table>";
}
function sumRows($square)
{
//recorrer files de square --> i guardara el valor de la suma de la fila
$i=0;
$dimensio=sqrt(count($square));
while($i<$dimensio)
{
$vector[$i]=0;
$i++;
}
$files=0;
// per cada fila: recorrer per columnes
while($files<$dimensio) {
// sumar els valors i emmagatzemar-los a vector[i]
$columnes=0;
while($columnes<$dimensio)
{
$vector[$files]=$vector[$files]+$square[$files][$columnes];
$columnes++;
}
$files++;
}
return $vector;
}
function sumCols($square)
{
//recorrer files de square --> i guardara el valor de la suma de la fila
$i=0;
$dimensio=sqrt(count($square));
while($i<$dimensio)
{
$vector[$i]=0;
$i++;
}
$columnes=0;
// per cada fila: recorrer per columnes
while($columnes<$dimensio) {
// sumar els valors i emmagatzemar-los a vector[i]
$files=0;
while($files<$dimensio)
{
$vector[$columnes]=$vector[$columnes]+$square[$files][$columnes];
$files++;
}
$columnes++;
}
return $vector;
}
function squareVectorProduct($square, $vector)
{
$dimensio=count($vector);
$files=0;
while($files<$dimensio)
{
$columnes=0;
while($columnes<$dimensio)
{
$square2[$files][$columnes]=$square[$files][$columnes]*$vector[$columnes];
$columnes++;
}
$files++;
}
return $square2;
}
/************* MAIN *************/
//main code
$data = getData();
$square = createSquare($data);
print "<h3>SQUARE</h3>";
printSquare($square);
$row = sumRows($square);
$col = sumCols($square);
print "<h3>Sum Cols</h3>";
printVector($col);
print "<h3>Sum Rows</h3>";
printVector($row);
$square2 = squareVectorProduct($square, $row);
print "<h3>Product Square Rows</h3>";
printSquare($square2);
?>
Exercici 3: Disseny i treball amb tuples [20 %]
Un estudiant d'informàtica ha decidit posar en valor els seus coneixements i
informatitzar la discoteca que va fer mentre era jovenet (ara només escolta música en
la seva tablet i no es compra CDs)
Tasca:
 Dissenyeu el tipus de dada estructurada tSong per emmagatzemar les dades
d'una cançó (nom, durada en minuts centesimals [1'30" seria 1.50] , tipus de
música [Acid, Agropop, Ambient, ... Underground, Sarsuela], autor de la
música, autor de la lletra y si la gravació és d'estudi o en directe)
tsongs=tupla
nom:cadena;
durada:decimal;
tipus:cadena;
autor: cadena;
estudi:boolean;
ftupla;
 Dissenyeu el tipus de dada estructurada tAlbum que ha de contenir el nom de
l'album, el nom de l'interpret, la quantitat de cançons, capacitat per
emmagatzemar les dades de fins 20 cançons, el nom de la discogràfica i l'any
d'edició del disc.
tAlbum=tupla
nomAlbum:cadena;
nomInterpret:cadena;
nCançons:enter;
cançons: taula[20] de tSongs;
nomDiscografia:cadena;
any:enter;
ftupla
Te recomptats 223 CDs, però creu que és possible que en tingui algunes desenes
més "despistats". Per mantenir tota la informació que disposa ara i la que tindrà
quan trobi els CDs que té perduts ha creat el tipus tDisco de la següent manera
tDisco = tupla
album: taula [300] de tAlbum; {fitxes dels CDs}
qtty : enter; {número que indica quants CDs ja ha informatitzat }
ftupla
i la variable myDisco del tipus tDisco, on s'ha entrat tota la informació de manera
que totes les fitxes d'àlbums plenes estan posades consecutivament des de la
primera posició (ocupa les primers 223 posicions).
 Escriviu l'expressió que ens indiqui si la última cançó del primer disc introduït a
myDisco va ser gravada en directe
myDisco.album[1].cançons[myDisco.album[1].nCançons-
1].estudi=fals
 Escriviu el mòdul shorter (acció o funció, el més adequat) que rebi myDisco, i
una durada en minuts centesimals, escrigui en la pantalla els títols de totes les
cançons la durada de les quals sigui igual o inferior a la durada rebuda i retorni
la quantitat de cançons que ha escrit.
funcio shorter(ent myDisco:tDisco, ent durada:decimal):enter
var:
i:enter;
j:enter;
n:enter;
fvar
n:=0;
i:=0;
mentre(i<myDisco.qtty) fer
j:=0;
mentre(j<myDisco.album[i].nCançons) fer
si(durada>=myDisco.album[i].cançons[j].durada) llavors
imprime(myDisco.album[i].cançons[j].nom);
n++;
fsi
j++;
fmentre
i++;
fmentre
retorna n;
ffuncio
Valoració
- Definició correcte dels camps de les tuples: 0.5
- Mòdul shorter: 0.5
- Ús correcte de la sintaxi de taules i de tuples: 0.8
- Concisió en l'ús de composicions i estalvi de variables: 0.2
Exercici 4: Treball amb tuples i taules de tuples en PHP [30 %]
Els nostres amics que ens han acompanyat amb les seves butxaques, han fet acte de
presència un altre cop en aquesta pràctica. Ara han decidit que les seves dades
s'emmagatzemin en un tuples que respondrien, en llenguatge algorísmic, a la següent
definició:
tipus
friend = tupla
name : cadena; {conté el nom de l'amic}
birthYear: enter; { conté el seu any de naixement}
pocket : taula [8] de enter; {conté el nombre de monedes que té de
cada tipus,a la manera descrita el
l'exercici 1 d'aquesta pràctica}
total: enter; {conté el valor total de les monedes que té l'amic a
la butxaca}
ftupla
ftipus
A cada amic li correspon una tupla i en el programa es mantenen les dades de tots els
amics en una taula de tuples
team : taula [N] de friend;
on N és la quantitat d'amics que formen el fitxer de dades.
el fitxer de dades conté una única instrucció en PHP, l'assignació a la variable $cadena
de totes les dades del conjunt d'amics.
$cadena és una cadena de text amb un contingut del tipus:
"Gandalf 1225 2 2 0 0 2 4 1 0 Bilbo 1657 3 2 1 0 2 1 1 1 Gollum 1602 0 0 0 0 0 0 3 5 #";
en què per a cada amic trobem la informació del seu nom, l'any de naixement i vuit
enters que signifiquen la quantitat de cadascun dels tipus de moneda des del cèntim
d'€ fins la peça de 2€.
La cadena finalitza amb el caràcter '#'.
La funció getData(), recull les dades i crea i retorna la taula de tuples. Ja forma part de
la plantilla i no l'heu de programar. La function posa un 0 en el camp total perquè
calcular el seu valor és una de les feines a desenvolupar.
Tasca: Recollides les dades en un array de tuples, crear un conjunt de functions en
php que manipulin tuples i taules de tuples segons les indicacions. El programa
principal ja forma part de la plantilla i no s’ha de modificar.
El programa s'escriurà a la plantilla prac2_exer4_plantilla.php que es canviarà
de nom a prac2_exer4.php pel lliurament.
Podeu provar el funcionament del programa a l'enllaç
http://prog.uoc.edu/prac2/prac2_exer4.php?filename=data41
Indicacions preceptives
 Es faciliten les imatges per mostrar el contingut de les butxaques
1c.png 2c.png 5c.png 10c.png 20c.png 50c.png 1e.png 2e.png
 Per a dur a terme aquesta tasca es facilita els fitxers de dades data40 i data41
que han d'esmentar-se a la URL
 Els fitxers de dades i el d'imatge se situaran a la mateixa carpeta de localhost
que el fitxer php.
 La plantilla porta incorporada la instrucció include(“data”) que carrega l’array
de tuples. La variable que conté les tuples té per nom $team, de manera que
per accedir al nom de la primera tupla, haurem de referir-nos a:
$team[0][“name”].
De la mateixa manera, per accedir a la quantitat de monedes de 5 cèntims de
les dades de l'amic que està en 2n lloc, la referència seria:
$team[1][“pocket”][2]5
 Heu de crear la function showOneFriend que rep una tupla i la mostra
repartida en dues línies:
1. Camp “name” de l'amic i camp "birthYear"
2. Conjunt de monedes i el valor total de les monedes de l'amic.
Sempre que s’hagi d’escriure les dades d'un amic es farà servir aquesta
function.
 Heu de crear la function showTeam que rep l’array de tuples i les mostra totes
per pantalla. Per escriure cada tupla farà una crida a showOneFriend.
 Heu de crear la function computesTotal que rep i modifica la taula de tuples
omplint el camp “total” de cada tupla avaluant el valor nominal de totes les
monedes de la "pocket" de la mateixa tupla.
 Heu de crear la function showOlderThan que rep la taula de tuples i un
número corresponent a un any de naixement i mostra en pantalla les dades de
tots aquells amics que van nèixer abans de l'any rebut.
 Heu de crear la function showRichest que rep la taula de tuples i mostra les
dades de l'amic que té més diners. En el cas d'empat en el valor màxim, només
cal que es mostri un dels dos "rics".
Consells
 No es dóna en cap lloc informació de la longitud de cap dels arrays, els haureu
de calcular emprant la function count6
que ja s’ha emprat anteriorment:
count($team) retornaria la quantitat de tuples que formen part de l’array i
count($team[$i][“pocket”]) retornaria la quantitat de dades numèriques
que conté el camp “pocket” de l'amic d’index $i
 Podeu reutilitzar directament o modificant-les functions d'altres pràctiques o
PACs, be siguin vostres o de les solucions.
Valoració
- Function showOneFriend: 0.4
- Function showTeam: 0.4
5
recordeu que en PHP la primera posició dels arrays és la posició 0
6
http://php.net/manual/es/function.count.php
- Function computesTotal: 0.5
- Function showOlderThan: 0.4
- Function showRichest: 0.5
- Ús correcte de la indexació de taules i taules associatives: 0.5
- Concisió en l'ús de composicions i estalvi de variables: 0.3
//Aquí heu de posar el vostre codi
<?php
/*************FUNCTION PLANTILLA ****************/
function getData()
{ //get data File & returns associative data Array
$filename = $_GET["filename"];
include($filename);
$data = explode(" ", $cadena);
$name = array_shift($data); //init sequence
$i=0;
while ($name != '#')
{
$p[$i]["name"] = $name;
$p[$i]["birthYear"] = array_shift($data);
for ($j=0; $j<8; $j++)
$p[$i]["pocket"][$j] = array_shift($data);
$p[$i]["total"]=0; //init al 0 value
//prepare new loop
$name = array_shift($data);
$i++;
}
return $p;
}// de getData
function LF()
{ //line feed
print "<br />";
}
function title($text)
{
print "<h3>$text</h3>";
}
/******************reused FUNCTIONS*********************/
function getCoinValue($c)
{
$valueCoins=array(0.01, 0.02, 0.05, 0.10, 0.20,0.50,1,2,5,10,20,50);
return $valueCoins[$c];
}
function putImage($c)
{
$table_coins=array('1c','2c','5c','10c','20c','50c','1e','2e','5e','10e','20e','50e');
print "<img src='".$table_coins[$c].".png'>";
}
/******************new FUNCTIONS*********************/
function showOneFriend ($t)
{
echo $t['name']." ".$t['birthYear'];
LF();
for($i=0;$i<8;$i++)
{
$monedes=$t['pocket'][$i];
$j=0;
while($j<$monedes)
{
putImage($i);
$j++;
}
}
echo $t['total'];
LF();
}
function showTeam($p)
{
$tamany=count($p);
for($i=0;$i<$tamany;$i++)
{
showOneFriend ($p[$i]);
}
}
function computesTotal(&$p)
{
$tamany=count($p);
for($i=0;$i<$tamany;$i++)
{
computesTotalAmic($p[$i]);
}
}
function computesTotalAmic(&$t)
{
for($i=0;$i<8;$i++)
{
$monedes=$t['pocket'][$i];
$j=0;
while($j<$monedes)
{
$t['total']=$t['total']+getCoinValue($i);
$j++;
}
}
}
function showOlderThan($p, $any)
{
$tamany=count($p);
for($i=0;$i<$tamany;$i++)
{
if($p[$i]['birthYear']<$any) showOneFriend ($p[$i]);
}
}
function showRichest($p)
{
$tamany=count($p);
$maxim=0;
for($i=0;$i<$tamany;$i++)
{
if($p[$maxim]['total']<$p[$i]['total']) $maxim=$i;
}
showOneFriend ($p[$maxim]);
}
/******************MAIN*********************/
$team = getData(); //$team es la taula de tuples
title("Original Data");
showTeam($team);
computesTotal($team);
title("Data with Total");
showTeam($team);
title("Most Rich");
showRichest($team);
title("Older than 1600");
showOlderThan($team, 1600);
title("Older than 1960");
showOlderThan($team, 1960);
?>

Weitere ähnliche Inhalte

Was ist angesagt?

| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz
Ardillita Trepadora
 

Was ist angesagt? (20)

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
 
| PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio | PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio
 
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ó - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia Bria
 
Programació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia BriaProgramació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia Bria
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia Bria
 
| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz
 
Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia Bria
 
Programació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia Bria
 
Programació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia BriaProgramació - Pràctica 2 - Lidia Bria
Programació - Pràctica 2 - Lidia Bria
 
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita RibasMatemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
 
Programació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaProgramació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia Bria
 
Funcions, límits i les seves aplicacions - Mònica Orpí i Mañé
Funcions, límits i les seves aplicacions - Mònica Orpí i MañéFuncions, límits i les seves aplicacions - Mònica Orpí i Mañé
Funcions, límits i les seves aplicacions - Mònica Orpí i Mañé
 
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
 
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
 
Exercicis de selectivitat creixement, extrems
Exercicis de selectivitat creixement, extremsExercicis de selectivitat creixement, extrems
Exercicis de selectivitat creixement, extrems
 
1 Funcions domini i recorregut
1 Funcions domini i recorregut1 Funcions domini i recorregut
1 Funcions domini i recorregut
 
Anàlisi 1
Anàlisi 1Anàlisi 1
Anàlisi 1
 

Andere mochten auch

The-GREAT-way-to-grow1
The-GREAT-way-to-grow1The-GREAT-way-to-grow1
The-GREAT-way-to-grow1
Graham Penson
 

Andere mochten auch (20)

Disseny Gràfic_Pac1
Disseny Gràfic_Pac1Disseny Gràfic_Pac1
Disseny Gràfic_Pac1
 
Evaluation question 1
Evaluation question 1Evaluation question 1
Evaluation question 1
 
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
 
CT-3215
CT-3215CT-3215
CT-3215
 
The-GREAT-way-to-grow1
The-GREAT-way-to-grow1The-GREAT-way-to-grow1
The-GREAT-way-to-grow1
 
Technologies used Evaluation - Question 4
Technologies used   Evaluation - Question 4Technologies used   Evaluation - Question 4
Technologies used Evaluation - Question 4
 
ADG_pac4
ADG_pac4ADG_pac4
ADG_pac4
 
Changes to our horror opening
Changes to our horror openingChanges to our horror opening
Changes to our horror opening
 
DBBDD_pac1
DBBDD_pac1DBBDD_pac1
DBBDD_pac1
 
Aplicacions Interactives multiplataforma_pac3
Aplicacions Interactives multiplataforma_pac3Aplicacions Interactives multiplataforma_pac3
Aplicacions Interactives multiplataforma_pac3
 
OPN-ECCH-02-000017
OPN-ECCH-02-000017OPN-ECCH-02-000017
OPN-ECCH-02-000017
 
Technologies used question 4 redone
Technologies used   question 4 redoneTechnologies used   question 4 redone
Technologies used question 4 redone
 
Camera diagrams
Camera diagramsCamera diagrams
Camera diagrams
 
Grafics3D_PAC1
Grafics3D_PAC1Grafics3D_PAC1
Grafics3D_PAC1
 
Crisis communication
Crisis communicationCrisis communication
Crisis communication
 
Digipak analysis
Digipak analysisDigipak analysis
Digipak analysis
 
Dhea and estrogen
Dhea and estrogenDhea and estrogen
Dhea and estrogen
 
Evaluation question 1 redone
Evaluation question 1 redoneEvaluation question 1 redone
Evaluation question 1 redone
 
ADG_pac2
ADG_pac2ADG_pac2
ADG_pac2
 
Riforma della Partecipazione Popolare - Modifica dello Statuto di Pontecorvo ...
Riforma della Partecipazione Popolare - Modifica dello Statuto di Pontecorvo ...Riforma della Partecipazione Popolare - Modifica dello Statuto di Pontecorvo ...
Riforma della Partecipazione Popolare - Modifica dello Statuto di Pontecorvo ...
 

Ähnlich wie Prog_prac2

Potencies i arrels 2 n
Potencies i arrels 2 nPotencies i arrels 2 n
Potencies i arrels 2 n
cpnapenyal
 

Ähnlich wie Prog_prac2 (9)

PW_pac1
PW_pac1PW_pac1
PW_pac1
 
Programació Web - PAC 4 correcció - Multimèdia (UOC) - Paquita Ribas
Programació  Web - PAC 4 correcció - Multimèdia (UOC) - Paquita RibasProgramació  Web - PAC 4 correcció - Multimèdia (UOC) - Paquita Ribas
Programació Web - PAC 4 correcció - Multimèdia (UOC) - Paquita Ribas
 
PW_pac2
PW_pac2PW_pac2
PW_pac2
 
Treball excel Alex i Dani
Treball excel Alex i DaniTreball excel Alex i Dani
Treball excel Alex i Dani
 
Pw p tema 1 nombres racionals
Pw p tema 1 nombres racionalsPw p tema 1 nombres racionals
Pw p tema 1 nombres racionals
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinades
 
Llenguatges i Estàndards Web - PAC 2 - Multimedia (UOC) - Paquita Ribas
Llenguatges i Estàndards Web - PAC 2 - Multimedia (UOC) - Paquita RibasLlenguatges i Estàndards Web - PAC 2 - Multimedia (UOC) - Paquita Ribas
Llenguatges i Estàndards Web - PAC 2 - Multimedia (UOC) - Paquita Ribas
 
Practica
PracticaPractica
Practica
 
Potencies i arrels 2 n
Potencies i arrels 2 nPotencies i arrels 2 n
Potencies i arrels 2 n
 

Mehr von Marcos Baldovi

Mehr von Marcos Baldovi (20)

Comportament d'Usuaris Marcos baldovi Prova Sintesis 2018
Comportament d'Usuaris Marcos baldovi Prova Sintesis 2018Comportament d'Usuaris Marcos baldovi Prova Sintesis 2018
Comportament d'Usuaris Marcos baldovi Prova Sintesis 2018
 
Comportament d'Usuaris Marcos baldovi Resum Researching UX
Comportament d'Usuaris Marcos baldovi Resum Researching UXComportament d'Usuaris Marcos baldovi Resum Researching UX
Comportament d'Usuaris Marcos baldovi Resum Researching UX
 
Comportament d'Usuaris Marcos baldovi Practica 1
Comportament d'Usuaris Marcos baldovi Practica 1Comportament d'Usuaris Marcos baldovi Practica 1
Comportament d'Usuaris Marcos baldovi Practica 1
 
Comportament d'Usuaris Marcos baldovi PAC2
Comportament d'Usuaris Marcos baldovi PAC2Comportament d'Usuaris Marcos baldovi PAC2
Comportament d'Usuaris Marcos baldovi PAC2
 
Comportament d'Usuaris Marcos baldovi PAC1
Comportament d'Usuaris Marcos baldovi PAC1Comportament d'Usuaris Marcos baldovi PAC1
Comportament d'Usuaris Marcos baldovi PAC1
 
Fotografia Digital Marcos baldovi Prova Sintesis
Fotografia Digital Marcos baldovi Prova SintesisFotografia Digital Marcos baldovi Prova Sintesis
Fotografia Digital Marcos baldovi Prova Sintesis
 
Fotografia Digital Marcos baldovi practica 2
Fotografia Digital Marcos baldovi practica 2Fotografia Digital Marcos baldovi practica 2
Fotografia Digital Marcos baldovi practica 2
 
Fotografia Digital Marcos baldovi practica 1
Fotografia Digital Marcos baldovi practica 1Fotografia Digital Marcos baldovi practica 1
Fotografia Digital Marcos baldovi practica 1
 
Fotografia Digital Marcos baldovi pac3
Fotografia Digital Marcos baldovi pac3Fotografia Digital Marcos baldovi pac3
Fotografia Digital Marcos baldovi pac3
 
Fotografia Digital Marcos baldovi pac2
Fotografia Digital Marcos baldovi pac2Fotografia Digital Marcos baldovi pac2
Fotografia Digital Marcos baldovi pac2
 
Fotografia Digital Marcos baldovi pac1
Fotografia Digital Marcos baldovi pac1Fotografia Digital Marcos baldovi pac1
Fotografia Digital Marcos baldovi pac1
 
Mercat i Legislació Marcos baldovi PAC4
Mercat i Legislació Marcos baldovi PAC4Mercat i Legislació Marcos baldovi PAC4
Mercat i Legislació Marcos baldovi PAC4
 
Mercat i Legislació Marcos baldovi PAC3
Mercat i Legislació Marcos baldovi PAC3Mercat i Legislació Marcos baldovi PAC3
Mercat i Legislació Marcos baldovi PAC3
 
Mercat i Legislació Marcos baldovi PAC2
Mercat i Legislació Marcos baldovi PAC2Mercat i Legislació Marcos baldovi PAC2
Mercat i Legislació Marcos baldovi PAC2
 
Marcos Baldoví Disseny D'interacció Practica FInal
Marcos Baldoví Disseny D'interacció Practica FInalMarcos Baldoví Disseny D'interacció Practica FInal
Marcos Baldoví Disseny D'interacció Practica FInal
 
Marcos Baldoví Disseny D'interacció PAC2
Marcos Baldoví Disseny D'interacció PAC2Marcos Baldoví Disseny D'interacció PAC2
Marcos Baldoví Disseny D'interacció PAC2
 
Marcos Baldoví Disseny D'interacció PAC1
Marcos Baldoví Disseny D'interacció PAC1Marcos Baldoví Disseny D'interacció PAC1
Marcos Baldoví Disseny D'interacció PAC1
 
Metodología i Desenvolupament de Projectes en Xarxa PRACTICA
Metodología i Desenvolupament de Projectes en Xarxa PRACTICAMetodología i Desenvolupament de Projectes en Xarxa PRACTICA
Metodología i Desenvolupament de Projectes en Xarxa PRACTICA
 
Metodología i Desenvolupament de Projectes en Xarxa PAC3
Metodología i Desenvolupament de Projectes en Xarxa PAC3Metodología i Desenvolupament de Projectes en Xarxa PAC3
Metodología i Desenvolupament de Projectes en Xarxa PAC3
 
Metodología i Desenvolupament de Projectes en Xarxa PAC 2
Metodología i Desenvolupament de Projectes en Xarxa PAC 2Metodología i Desenvolupament de Projectes en Xarxa PAC 2
Metodología i Desenvolupament de Projectes en Xarxa PAC 2
 

Prog_prac2

  • 1. Estudis d’Informàtica, Multimèdia i Telecomunicació Programació Pràctica 2 Estudiant Cognoms: Baldovi Martínez Nom: Marcos
  • 2. Exercici 1: Treball amb taules de taules [20 %] La colla d'amics que tants problemes ens han causat amb el contingut de les seves butxaques han decidit ara fer un estudi informatitzat de com evoluciona el contingut de les seves butxaques al llarg de l'any. Ja estan acostumats a codificar el contingut en monedes de les seves butxaques segons el següent mètode: codi 1 2 3 4 5 6 7 8 valor 0.01 € 0.02 € 0.05 € 0.10 € 0.20 € 0.50 € 1 € 2 € de manera que han decidit que el contingut d'una butxaca es pot emmagatzemar en una taula de tipus pocket definit de la següent manera tipus pocket: taula [8] de enter; ftipus de manera que una taula amb el següent contingut 3 0 1 0 2 0 2 3 contindria 3 monedes d'una cèntim, 1 de 5 cèntims, 2 de 20 cèntims, 2 d'un euro i 3 de dos euros, és a dir, cada posició es correspon amb el codi d'una moneda i el contingut de la posició és la quantitat de monedes del tipus en qüestió. Per acabar amb el disseny de dades han creat una taula que englobaria les dades d'un any complet: tipus pocketYear: taula [365] de pocket; ftipus Cada posició de la taula de tipus pocketYear es correspondria al contingut de la butxaca un dia determinat. Tasca: Creeu el mòdul maxYear que rebi una taula de tipus pocketYear i  que escrigui en el canal estàndard el contingut la butxaca de cada dia a mode de seqüència integrada pel número de dia i, per ordre, les quantitats de monedes de cada tipus i finalitzada amb '#', com ara: 1* 0 2 3 0 0 4 2 2 2 1 3 2 4 0 1 1 1 ... 365 0 0 1 2 3 0 2 3 # *en negreta està indicat el número del dia  i que retorni una taula de tipus pocket on estigui emmagatzemada la quantitat màxima de monedes de cada tipus que ha arribat a portar al llarg de l'any. És a dir una taula del tipus 5 8 4 9 9 12 8 9 significaria que el dia que va dur més monedes d'un cèntim a la butxaca, en va dur 5. El dia que va dur més monedes de 2 cèntims en va dur 8, el que en va dur més de 5 cèntims van ser 4, ... i el dia que va dur més monedes de 2 € en van ser 9. Valoració - Determinació correcta del tipus de mòdul: 0.2 - Ús correcte dels paràmetres: 0.4 - Treball correcte amb índex de taules i taules de taules: 1 - Concisió en l'ús de composicions i estalvi de variables: 0.4
  • 3.
  • 4. //la variable i recorre el vector la variable p es el vector pocket la variable guardara el datos de tots el pokets per allar el maxim function maxYear(ent py: pocketYear) : pocket var: p: pocket; i: enter; j: enter; py:pocketYear; fvar i:=0; mentre(i<8) fer p[i]:=0; i++; fmentre i:=0; mentre(i<365) fer //imprimir (1 x x x x x..... 365 x x x x x #) imprimir(i); j:=0; mentre(j<8) fer imprimir(py[i][j]); j++; fmentre //determinar el maxim j:=0; mentre (j<8) fer si(p[j]<py[i][j]) llavors p[j]=py[i][j]; fsi j++; fmentre i++; fmentre imprimir("#");
  • 5. Exercici 2: Treball taules de taules en PHP [30 %] Les taules de taules s'empren per treballar amb col·leccions de dades homogènies cadascuna de les quals és, alhora, una col·lecció de dades. En aquest exercici treballarem amb una taula de taules (una matriu quadrada) de nombres enters creada a partir d'una seqüència llegida d'un fitxer. En l'exercici es faran operacions amb matrius, vectors i matrius i vectors entre ells El fitxer de dades contindrà una cadena de text amb una seqüència de números el primer dels quals indica la longitud de les taules i després venen les dades per omplir la taula. El contingut dels fitxers de dades és una instrucció de PHP que carrega una cadena de text com ara: <?php $cadena="3 3 -1 -1 3 0 0 -2 -1 0"; ?> Aquesta cadena d’exemple contindria les dades per una matriu de 3x3 (la primera dada és un 3) i ve seguida de 9 números, de manera que el resultant seria. Tasca: Crear un conjunt de functions en php que creïn i manipulin una taula de taules quadrada de dimensions que determina l'usuari segons les indicacions. També s’haurà
  • 6. de crear i gestionar una taula lineal per gestionar les dades llegides en el fitxer d’entrada Algunes de les function hauran de treballar directament amb taules de taules i d'altres amb taules simples. En general es treballarà sempre amb una sola taula de taules ($square) i algunes taules lineal ($data, $vector). El programa principal ja forma part de la plantilla i no s’ha de modificar. S'ha de crear les següents function  function getData Aquest mòdul no ha de rebre cap paràmetre. La crida al programa haurà de ser del tipus: localhost/prac2_exer2.php?filename=data20 el fitxer de dades consta d’una única instrucció de php en què la variable $cadena rep com valor una cadena de text integrada per una sèrie de números que estan separats per un espai en blanc, com ara $cadena = "3 3 -1 -1 3 0 0 -2 -1 0" El mòdul recollirà el nom del fitxer de dades del paràmetre filename, l’inclourà (include1 ), i extraurà les dades (explode2 ) a un array ($data) que retornarà. Per exemple, si s’havia rebut la cadena mostrada a dalt com exemple, retornarà la taula $data: 3 3 -1 -1 3 0 0 -2 -1 0  function createSquare Que rebrà com paràmetre l'array lineal de dades rebudes. El primer número (n1) d'aquest array, serà considerat la dimensió de la taula de taules. o Crearà un array de n1 files cadascuna de les quals serà un array de n1 posicions enteres o Omplirà les posicions de la taula de taules amb les dades que segueixen a n1 de manera que omplirà, amb les n1 següents dades les posicions de la primera fila, amb les n1 següents la segona fila, etc. fins omplir els n1 arrays o Retornarà l'array d'arrays generat. Per exemple si l'array unidimensional rebut hagués estat: 3 1 2 3 4 5 6 7 8 9 L'array retornat seria 1 2 3 4 5 6 7 8 9  function printSquare Que rebrà com paràmetre l'array d'arrays i el mostrarà en pantalla en una taula HTML. El codi CSS per tal que es mostri contrastat sobre el fons fosc de la pantalla ja forma part de la plantilla. Per obtenir la dimensió de l’array PHP facilita la function count3 . 1 http://php.net/manual/es/function.include.php 2 http://php.net/manual/es/function.explode.php 3 http://php.net/manual/es/function.count.php
  • 7.  function printVector Que rebrà com paràmetre un array lineal i mostrarà els seus elements en la pantalla organitzats en una taula HTML. El codi CSS per tal que es mostri contrastat sobre el fons fosc de la pantalla ja forma part de la plantilla. Per obtenir la dimensió de l’array PHP facilita la function count4 .  function sumRows Que rebrà com paràmetre l'array d'arrays i retornarà un array d’una dimensió que en cada posició té la suma dels elements de la filera corresponent de la matriu. Per exemple si la matriu té el contingut 1 2 3 4 5 6 7 8 9 l’array retornat seria 6 15 24  function sumCols Que rebrà com paràmetre l'array d'arrays i retornarà un array d’una dimensió que en cada posició té la suma dels elements de la columna corresponent de la matriu. Per exemple si la matriu té el contingut 1 2 3 4 5 6 7 8 9 l’array retornat seria 12 15 18  function squareVectorProduct Que rebrà una matriu d’entrada i un vector de la mateixa longitud i retornarà una matriu on cada filera estarà composada pels productes de la filera equivalent de la matriu d’entrada pels elements del vector. Per exemple, si matriu i vector tenen els continguts 1 2 3 4 5 6 1 2 3 7 8 9 La matriu que es retornarà serà 1 4 9 4 10 18 7 16 27 Indicacions preceptives  La plantilla prac2_exer2_plantilla.php porta incorporat el programa principal que fa les crides a les function. El codi que va escrit a la plantilla no s'ha de modificar. És molt convenient que mireu el programa principal i veieu les crides que es fan a les function per veure si es corresponen a funcions i retornen mitjançant return o bé són accions que no retornen res o retornen els valors mitjançant els paràmetres de sortida o entrada/sortida  Es faciliten també 6 fitxers de dades data20 a data25.  Els fitxers de dades s’han d’ubicar a la mateixa carpeta que el fitxer php.  No es poden emprar variables global. Tampoc es poden emprar functions d'array incloses a php llevat de count i array_shift. 4 http://php.net/manual/es/function.count.php
  • 8. Altres indicacions  Recordeu que, a diferencia de les taules en llenguatge algorísmic que comencen en la posició 1, en PHP la primera posició dels arrays és la posició 0.  Podeu emprar functions confeccionades per a exercicis o provinents de solucions anteriors, ja siguin completes o adaptades a les noves dades estructurades.  Podeu també crear quantes altres functions cregueu necessari. Podeu comprovar el funcionament a: http://prog.uoc.edu/prac2/prac2_exer2.php?filename=data20 o canviant el nom del fitxer de dades Consells Cal analitzar ben bé què s'ha de fer en cadascun dels mòduls que es demanen en aquest programa i mirar quins mòduls de programes anteriors es poden emprar bé directament o bé amb petites modificacions per adaptar-los a les noves necessitats. Valoració - Function getData: 0.5 - Function createSquare: 0.5 - Function printSquare: 0.5 - Function printVector: 0.5 - Function squareVectorProduct: 0.5 - Concisió en l'ús de composicions i estalvi de variables: 0.5
  • 9. Copieu aquí el codi de la vostra solució <?php /************* FUNCTION *************/ function LF() { //line feed print "<br />"; }// de LF //put your code here function getData() { $filename = $_GET["filename"]; include($filename); $data = explode(" ",$cadena); return $data; } function createSquare($data) { // Llegir dimensió --> primer valor es $recData --> dimensio $files=0; $recData=0; $dimensio=$data[$recData]; $recData++; while($files<$dimensio) { $columnes=0; while($columnes<$dimensio) { $square[$files][$columnes]=$data[$recData]; $recData++; $columnes++; } $files++; }
  • 10. return $square; } function printSquare($square) { echo "<table>"; //recorrer files $files=0; $dimensio=sqrt(count($square)); while($files<$dimensio) { echo "<tr>"; //recorrer columnes $columnes=0; while($columnes<$dimensio) { //imprimir valor echo "<td>".$square[$files][$columnes]."</td>"; $columnes++; } echo "</tr>"; $files++; } echo "</table>"; } function printVector($vector) { //crea taula echo "<table>"; // crea la fila echo "<tr>"; //recorrer el vector $recData=0; $dimensio=count($vector);
  • 11. while($recData<$dimensio) { //imprimir valor echo "<td>".$vector[$recData]."</td>"; $recData++; } echo "<tr>"; echo "</table>"; } function sumRows($square) { //recorrer files de square --> i guardara el valor de la suma de la fila $i=0; $dimensio=sqrt(count($square)); while($i<$dimensio) { $vector[$i]=0; $i++; } $files=0; // per cada fila: recorrer per columnes while($files<$dimensio) { // sumar els valors i emmagatzemar-los a vector[i] $columnes=0; while($columnes<$dimensio) { $vector[$files]=$vector[$files]+$square[$files][$columnes]; $columnes++; } $files++; } return $vector; }
  • 12. function sumCols($square) { //recorrer files de square --> i guardara el valor de la suma de la fila $i=0; $dimensio=sqrt(count($square)); while($i<$dimensio) { $vector[$i]=0; $i++; } $columnes=0; // per cada fila: recorrer per columnes while($columnes<$dimensio) { // sumar els valors i emmagatzemar-los a vector[i] $files=0; while($files<$dimensio) { $vector[$columnes]=$vector[$columnes]+$square[$files][$columnes]; $files++; } $columnes++; } return $vector; } function squareVectorProduct($square, $vector) { $dimensio=count($vector); $files=0; while($files<$dimensio) { $columnes=0; while($columnes<$dimensio) { $square2[$files][$columnes]=$square[$files][$columnes]*$vector[$columnes];
  • 13. $columnes++; } $files++; } return $square2; } /************* MAIN *************/ //main code $data = getData(); $square = createSquare($data); print "<h3>SQUARE</h3>"; printSquare($square); $row = sumRows($square); $col = sumCols($square); print "<h3>Sum Cols</h3>"; printVector($col); print "<h3>Sum Rows</h3>"; printVector($row); $square2 = squareVectorProduct($square, $row); print "<h3>Product Square Rows</h3>"; printSquare($square2); ?>
  • 14. Exercici 3: Disseny i treball amb tuples [20 %] Un estudiant d'informàtica ha decidit posar en valor els seus coneixements i informatitzar la discoteca que va fer mentre era jovenet (ara només escolta música en la seva tablet i no es compra CDs) Tasca:  Dissenyeu el tipus de dada estructurada tSong per emmagatzemar les dades d'una cançó (nom, durada en minuts centesimals [1'30" seria 1.50] , tipus de música [Acid, Agropop, Ambient, ... Underground, Sarsuela], autor de la música, autor de la lletra y si la gravació és d'estudi o en directe) tsongs=tupla nom:cadena; durada:decimal; tipus:cadena; autor: cadena; estudi:boolean; ftupla;  Dissenyeu el tipus de dada estructurada tAlbum que ha de contenir el nom de l'album, el nom de l'interpret, la quantitat de cançons, capacitat per emmagatzemar les dades de fins 20 cançons, el nom de la discogràfica i l'any d'edició del disc. tAlbum=tupla nomAlbum:cadena; nomInterpret:cadena; nCançons:enter; cançons: taula[20] de tSongs; nomDiscografia:cadena; any:enter; ftupla Te recomptats 223 CDs, però creu que és possible que en tingui algunes desenes més "despistats". Per mantenir tota la informació que disposa ara i la que tindrà quan trobi els CDs que té perduts ha creat el tipus tDisco de la següent manera tDisco = tupla album: taula [300] de tAlbum; {fitxes dels CDs} qtty : enter; {número que indica quants CDs ja ha informatitzat } ftupla i la variable myDisco del tipus tDisco, on s'ha entrat tota la informació de manera que totes les fitxes d'àlbums plenes estan posades consecutivament des de la primera posició (ocupa les primers 223 posicions).  Escriviu l'expressió que ens indiqui si la última cançó del primer disc introduït a myDisco va ser gravada en directe
  • 15. myDisco.album[1].cançons[myDisco.album[1].nCançons- 1].estudi=fals  Escriviu el mòdul shorter (acció o funció, el més adequat) que rebi myDisco, i una durada en minuts centesimals, escrigui en la pantalla els títols de totes les cançons la durada de les quals sigui igual o inferior a la durada rebuda i retorni la quantitat de cançons que ha escrit. funcio shorter(ent myDisco:tDisco, ent durada:decimal):enter var: i:enter; j:enter; n:enter; fvar n:=0; i:=0; mentre(i<myDisco.qtty) fer j:=0; mentre(j<myDisco.album[i].nCançons) fer si(durada>=myDisco.album[i].cançons[j].durada) llavors imprime(myDisco.album[i].cançons[j].nom); n++; fsi j++; fmentre i++; fmentre retorna n; ffuncio Valoració - Definició correcte dels camps de les tuples: 0.5
  • 16. - Mòdul shorter: 0.5 - Ús correcte de la sintaxi de taules i de tuples: 0.8 - Concisió en l'ús de composicions i estalvi de variables: 0.2
  • 17. Exercici 4: Treball amb tuples i taules de tuples en PHP [30 %] Els nostres amics que ens han acompanyat amb les seves butxaques, han fet acte de presència un altre cop en aquesta pràctica. Ara han decidit que les seves dades s'emmagatzemin en un tuples que respondrien, en llenguatge algorísmic, a la següent definició: tipus friend = tupla name : cadena; {conté el nom de l'amic} birthYear: enter; { conté el seu any de naixement} pocket : taula [8] de enter; {conté el nombre de monedes que té de cada tipus,a la manera descrita el l'exercici 1 d'aquesta pràctica} total: enter; {conté el valor total de les monedes que té l'amic a la butxaca} ftupla ftipus A cada amic li correspon una tupla i en el programa es mantenen les dades de tots els amics en una taula de tuples team : taula [N] de friend; on N és la quantitat d'amics que formen el fitxer de dades. el fitxer de dades conté una única instrucció en PHP, l'assignació a la variable $cadena de totes les dades del conjunt d'amics. $cadena és una cadena de text amb un contingut del tipus: "Gandalf 1225 2 2 0 0 2 4 1 0 Bilbo 1657 3 2 1 0 2 1 1 1 Gollum 1602 0 0 0 0 0 0 3 5 #"; en què per a cada amic trobem la informació del seu nom, l'any de naixement i vuit enters que signifiquen la quantitat de cadascun dels tipus de moneda des del cèntim d'€ fins la peça de 2€. La cadena finalitza amb el caràcter '#'. La funció getData(), recull les dades i crea i retorna la taula de tuples. Ja forma part de la plantilla i no l'heu de programar. La function posa un 0 en el camp total perquè calcular el seu valor és una de les feines a desenvolupar. Tasca: Recollides les dades en un array de tuples, crear un conjunt de functions en php que manipulin tuples i taules de tuples segons les indicacions. El programa principal ja forma part de la plantilla i no s’ha de modificar.
  • 18. El programa s'escriurà a la plantilla prac2_exer4_plantilla.php que es canviarà de nom a prac2_exer4.php pel lliurament. Podeu provar el funcionament del programa a l'enllaç http://prog.uoc.edu/prac2/prac2_exer4.php?filename=data41 Indicacions preceptives  Es faciliten les imatges per mostrar el contingut de les butxaques 1c.png 2c.png 5c.png 10c.png 20c.png 50c.png 1e.png 2e.png
  • 19.  Per a dur a terme aquesta tasca es facilita els fitxers de dades data40 i data41 que han d'esmentar-se a la URL  Els fitxers de dades i el d'imatge se situaran a la mateixa carpeta de localhost que el fitxer php.  La plantilla porta incorporada la instrucció include(“data”) que carrega l’array de tuples. La variable que conté les tuples té per nom $team, de manera que per accedir al nom de la primera tupla, haurem de referir-nos a: $team[0][“name”]. De la mateixa manera, per accedir a la quantitat de monedes de 5 cèntims de les dades de l'amic que està en 2n lloc, la referència seria: $team[1][“pocket”][2]5  Heu de crear la function showOneFriend que rep una tupla i la mostra repartida en dues línies: 1. Camp “name” de l'amic i camp "birthYear" 2. Conjunt de monedes i el valor total de les monedes de l'amic. Sempre que s’hagi d’escriure les dades d'un amic es farà servir aquesta function.  Heu de crear la function showTeam que rep l’array de tuples i les mostra totes per pantalla. Per escriure cada tupla farà una crida a showOneFriend.  Heu de crear la function computesTotal que rep i modifica la taula de tuples omplint el camp “total” de cada tupla avaluant el valor nominal de totes les monedes de la "pocket" de la mateixa tupla.  Heu de crear la function showOlderThan que rep la taula de tuples i un número corresponent a un any de naixement i mostra en pantalla les dades de tots aquells amics que van nèixer abans de l'any rebut.  Heu de crear la function showRichest que rep la taula de tuples i mostra les dades de l'amic que té més diners. En el cas d'empat en el valor màxim, només cal que es mostri un dels dos "rics". Consells  No es dóna en cap lloc informació de la longitud de cap dels arrays, els haureu de calcular emprant la function count6 que ja s’ha emprat anteriorment: count($team) retornaria la quantitat de tuples que formen part de l’array i count($team[$i][“pocket”]) retornaria la quantitat de dades numèriques que conté el camp “pocket” de l'amic d’index $i  Podeu reutilitzar directament o modificant-les functions d'altres pràctiques o PACs, be siguin vostres o de les solucions. Valoració - Function showOneFriend: 0.4 - Function showTeam: 0.4 5 recordeu que en PHP la primera posició dels arrays és la posició 0 6 http://php.net/manual/es/function.count.php
  • 20. - Function computesTotal: 0.5 - Function showOlderThan: 0.4 - Function showRichest: 0.5 - Ús correcte de la indexació de taules i taules associatives: 0.5 - Concisió en l'ús de composicions i estalvi de variables: 0.3
  • 21. //Aquí heu de posar el vostre codi <?php /*************FUNCTION PLANTILLA ****************/ function getData() { //get data File & returns associative data Array $filename = $_GET["filename"]; include($filename); $data = explode(" ", $cadena); $name = array_shift($data); //init sequence $i=0; while ($name != '#') { $p[$i]["name"] = $name; $p[$i]["birthYear"] = array_shift($data); for ($j=0; $j<8; $j++) $p[$i]["pocket"][$j] = array_shift($data); $p[$i]["total"]=0; //init al 0 value //prepare new loop $name = array_shift($data); $i++; } return $p; }// de getData function LF() { //line feed print "<br />"; } function title($text) { print "<h3>$text</h3>";
  • 22. } /******************reused FUNCTIONS*********************/ function getCoinValue($c) { $valueCoins=array(0.01, 0.02, 0.05, 0.10, 0.20,0.50,1,2,5,10,20,50); return $valueCoins[$c]; } function putImage($c) { $table_coins=array('1c','2c','5c','10c','20c','50c','1e','2e','5e','10e','20e','50e'); print "<img src='".$table_coins[$c].".png'>"; } /******************new FUNCTIONS*********************/ function showOneFriend ($t) { echo $t['name']." ".$t['birthYear']; LF(); for($i=0;$i<8;$i++) { $monedes=$t['pocket'][$i]; $j=0; while($j<$monedes) { putImage($i); $j++; } } echo $t['total']; LF(); } function showTeam($p) {
  • 23. $tamany=count($p); for($i=0;$i<$tamany;$i++) { showOneFriend ($p[$i]); } } function computesTotal(&$p) { $tamany=count($p); for($i=0;$i<$tamany;$i++) { computesTotalAmic($p[$i]); } } function computesTotalAmic(&$t) { for($i=0;$i<8;$i++) { $monedes=$t['pocket'][$i]; $j=0; while($j<$monedes) { $t['total']=$t['total']+getCoinValue($i); $j++; } } } function showOlderThan($p, $any) { $tamany=count($p); for($i=0;$i<$tamany;$i++) { if($p[$i]['birthYear']<$any) showOneFriend ($p[$i]); } }
  • 24. function showRichest($p) { $tamany=count($p); $maxim=0; for($i=0;$i<$tamany;$i++) { if($p[$maxim]['total']<$p[$i]['total']) $maxim=$i; } showOneFriend ($p[$maxim]); } /******************MAIN*********************/ $team = getData(); //$team es la taula de tuples title("Original Data"); showTeam($team); computesTotal($team); title("Data with Total"); showTeam($team); title("Most Rich"); showRichest($team); title("Older than 1600"); showOlderThan($team, 1600); title("Older than 1960"); showOlderThan($team, 1960); ?>