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

Programació
PAC2 — Document d’exercicis

SOLUCIÓ

1
Exercici 1: Declaració d'accions i funcions [15%]
Tasca: Per a cada apartat
i.
decidiu si és millor una acció o una funció i expliqueu el motiu.
ii.
definiu-ne la capçalera (només es demana la capçalera, no cal que dissenyeu cap
algorisme).
Es demana la capçalera d'un mòdul (acció o funció) que:
a) Que rebi tres paraules i les escrigui a la sortida estàndard ordenades per ordre
alfabètic:
i
ii

Acció perquè no retorna res, escriu en la sortida estàndard
acció writeSorted(ent c1:cadena, ent c2:cadena, ent c3:cadena)

b) Que reculli de l'entrada estàndard una llista de números amb decimals i digui quin és
el major i el menor que havia a la llista.
i
ii

Acció perquè ha de retornar dos números
acció maxMin(sor max:real, sor min:real)

c) Que rebi el nom d’un fitxer d’imatge i el codi numèric d’un color i retorni la quantitat
de píxels del dit color que conté el fitxer d’imatge
i
ii

Funció perquè ha de retornar un sol valor: la quantitat de píxels
funció countColorPixel(fileName:cadena, colorCode:enter): enter

d) Que llegeixi de l’entrada estàndard una llista de números i digui si la llista conté
algun 0.
i
ii

Funció perquè ha de retornar un sol valor: l’existència o no de zeros
funció zero( ):booleà

2
Exercici 2: Crides a mòduls i modificadors d'entrada i sortida [15%]
Tasca: Donats l’algorisme i les capçaleres de les següents accions i funcions:
funcio function1( x: enter, y: enter, z: real) : boolea;
funcio function2( x: enter, c: caracter, b: boolea) :enter;
accio action1( ent i: enter, ent j: enter, sor k: enter) ;
accio action2( ent c: caracter, ent x: real, entsor y: enter);
algorisme algorithm
var
i, j, k: enter;
x, y, z : real;
d : caracter;
b: boolea;
fvar

...

...
falgorisme

Responeu a cada apartat si és correcte o no substituir el requadre gris de
l’algorisme algorithm per la instrucció que es dóna i, si no ho és, indiqueu-ne les
causes
a) action1 (function2(i, d, (x>y)), k,j);
Correcte.

b) b := function1(k, k, y) > integerToReal(i*i) + x / 2
Incorrecte. S’intenta fer la divisió d’un real per un enter (x/2). A més, a l’esquerra de la
comparació hi ha un booleà (function1) mentre a la dreta hi ha nombres.

c) i := action2( ‘x’, 3.1416, k * j);
Incorrecte. Les accions no es poden fer servir com valor en assignacions. D’altra banda
el tercer paràmetre de action2 és d’entrada i sortida i hauria de ser obligatòriament una
variable i no una expressió.

3
Exercici 3: Ús de mòduls i paràmetres segons el seu significat i [15%]
Tasca: Amb motiu de la introducció de minijobs, una multinacional demana un algorisme
per calcular la nòmina en els següents termes. El treballador cobra un preu fix per hora i li
retenen un percentatge en concepte de IRPF que depèn de la quantitat que ha de cobrar
al mes. L'algorisme ha de llegir el número d'hores treballades i el preu per hora que cobra
des de l'entrada estàndard (teclat) i ha d'escriure al canal de sortida estàndard (pantalla)
el sou brut, la retenció de IRPF i el sou net. Si el sou brut mensual no supera els 300€ no
hi ha retenció i s'escriurà directament el sou net. Si el sou brut supera els 300€ i no
supera els 600€ la retenció d'IRPF és del 5%. Si supera els 600€ la retenció és del 8%.
En ambdós casos s'escriurà salari brut, retenció i salari net.
Ompliu les caixes, amb una única instrucció o expressió a cada una, per aconseguir el
comportament que us hem descrit. L’algorisme resultant ha d’utilitzar obligatòriament
totes les següents funcions, que no heu d’implementar:

funció que rep es salari brut i el tipus a aplicar d'IRPF i calcula l'import de la
retenció.
funcio calcRetention ( grossSalary: real, irpf: real) : real
funció que rep el salari brut i l'import de la retenció i calcula el salari net
funcio calcTakeHomePay ( grossSalary: real, retention: real) : real

4
algorisme payroll ( )
const
IRPF_low: real = 5.0;
IRPF_high: real = 8.0;
SALARY_THRESHOLD_LOW: real = 300.0;
SALARY_THRESHOLD_HIGH: real = 600.0;
fconst
var
fixedHourPrice, workedHours: real;
grossSalary, retention, takeHomePay: real;
fvar
fixedHourPrice := readReal();
workedHours :=

readReal();

;
;

grossSalary := fixedHourPrice * workedHours;
si

grossSalary > SALARY_THRESHOLD_LOW

llavors

si grossSalary > SALARY_THRESHOLD_HIGH llavors
retention := calcRetention( grossSalary, IRPF high );
sino
retention :=
fsi
sino retention := 0;
fsi
takeHomePay :=
si

;

calcRetention( grossSalary, IRPF_low );

calcTakeHomePay( grossSalary, retention);

takeHomePay >= SALARY_THRESHOLD_LOW

;

llavors

writeReal (grossSalary);
writeReal (retention);
writeReal (takeHomePay);
sino
writeReal (takeHomePay);
fsi
falgorisme

5
Exercici 4: Disseny de mòduls [15%]
Un alpinista viatja sovint amb companys de cultura anglosaxona que estan acostumats a
mesurar les temperatures en graus Fahrenheit, mentre d'altres companys estan
acostumats als centígrads. Existeixen fórmules simples per fer les conversions que es
poden veure a http://ca.wikipedia.org/wiki/Grau_Celsius
Tasca: Crear un mòdul (acció o funció, el més adequat) que serveixi per entrar la
temperatura en una donada escala (escala d'entrada) i obtenir-la en una altra
justifiqueu
el
motiu
de
la
tria.
escala
(escala
de
sortida)
i
El mòdul ha de rebre tres paràmetres, que correspondran a:
•

Escala d'entrada de dades (un caràcter: C o F).

•

Escala de sortida de dades (un caràcter: C o F).

•

Valor de la temperatura d'entrada

S'ha de preveure la possibilitat que les dues escales (entrada i sortida) siguin la
mateixa.

Faria servir una funció perquè ha de retornar només un nombre real, la temperatura de sortida
funcio temperatureConverter( inputType: character, outputType: character, tempIn: real) :real
var
tempOut: real;
fvar
si inputType = outputType llavors
tempOut := tempIn;
sino
si inputType = 'C' llavors
tempOut := tempIn * 1.8 + 32;
sino
tempOut := (tempIn - 32) / 1.8;
fsi
fsi
return tempOut;
ffuncio

6
Exercici 5: Creació d'un programa amb mòduls a PHP [20%]
Tasca: Heu de crear un programa que calculi i escrigui en pantalla una factura detallada
de la companyia de subministrament d'aigua a partir dels litres de consum trimestral.
La factura del subministrament d'aigua inclou diferents conceptes:
•
•
•
•

Consum pròpiament dit (consumption)
Taxa de clavegueram (sewer)
Lloguer del comptador d'aigua (watermeter rent)
Canon d'obres hidràuliques (canon)

cadascun dels qual ve gravat amb l'IVA corresponent
Per tal d'afavorir el consum responsable, s'ha creat una tarificació per blocs, de
manera que quant més gran sigui el consum, major és el preu unitari del metre cúbic
d'aigua. La tarificacio per blocs afecta de manera diferen els conceptes de consum i el
de canon.
El mecanisme de tarificació és com
segueix:
• Consum:
o 1r bloc (0-20m3) : 0.437 €/ m3
o 2n bloc (20-40m3) : 0.6554 €/ m3
o 3n bloc (>40m3) : 0.824 €/ m3
Si un usuari consumeix 65 m3, en
pagaria 20 a 0.437, uns altres 20 a
0.6554 i els restants 25 a 0.824.
•

Clavegueram
Amb aquest concepte es paga el 25%
del que es paga per Consum.

•

Lloguer del comptador
Es paga la quantitat fixa de 1.92€
cada trimestre

•

Canon:
o 1r bloc (0-18m3) : 0.4469 €/ m3
o 2n bloc (18-30m3) : 1.0294 €/ m3
o 3n bloc (>30m3) : 2.57 €/ m3
Si un usuari consumeix 65 m3, en
pagaria 18 a 0.4469, uns altres 12 a
1.0294 i els restants 35 a 2.57.

•

IVA:
Existeix tres tipus d'IVA a aplicar als
diferents conceptes:
o Clavegueram: exempt d'IVA (0%)
o Consum i Canon : tipus reduït (10%)
o lloguer del comptador: tipus normal
(21%)
la crida haurà de ser del tipus http://localhost/pac2_exer5?vol=x on x és la quantitat
de litres consumits en el trimestre.

7
Indicacions:
• Per tal que el programa sigui fàcilment actualitzable, es definiran tantes constants amb
nom com sigui necessari, de manera que si canvien els preus per m3 (de consum o
canon), els volums de cada bloc (de consum o canon), el percentatge que significa la
taxa de clavegueram o els tipus d'IVA, n'hagués prou en modificar les definicions de
les constants perquè el programa quedés actualitzat a la nova situació. Per a la
definició de constants s’ha d’emprar define($name, $value) 1
• S'haurà de crear la function literToM3 que rebrà un volum en litres i retornarà la
quantitat entera de metres cúbics a què equival (per truncament). Per exemple, si es
rep 65789 es retornarà 65.
• S'haurà de crear la function consumption que rebrà la quantitat de m3 consumits i
retornarà, en tres paràmetres, la quantitat de m3 corresponents a cada bloc de
consum. Per exemple, si rep 26, retornaria 20, 6 i 0. Si rebés 65, els retorns serien 20,
20 i 25.
• S'haurà de crear la function canon que rebrà la quantitat de m3 consumits i retornarà,
en tres paràmetres, la quantitat de m3 corresponents a cada bloc de canon. Per
exemple, si rep 26, retornaria 18, 8 i 0. Si rebés 65, els retorns serien 18, 12 i 35.
• S'haurà de crear la function IVA que rebrà la base a cotitzar i el codi tipus a aplicar
(0→ exempció, 1→ normal, 2→ reduït). Per exemple, per a una base de 50, si el tipus
és 0, es retornaria 0 (el 0%), si el tipus fos 1 es retornaria 10.5 (el 21%) i si el tipus fos
2 retornaria 5 (10%).

El programa s'escriurà en el fitxer pac2_exer5_plantilla.php que es canviarà de nom a
pac2_exer5.php pel lliurament
Indicacions per a PHP
Les dades s’entraran pel mètode $_GET en el paràmetre de nom vol. La crida ha de ser
del tipus:
http:// localhost/pac2_exer5.php?vol=65789
Per a comprovar el funcionament podeu fer servir
http://prog.uoc.edu/pac2/pac2_exer5.php?vol=65789
podeu provar el comportament del programa per a diferents valors de l'argument. A la
solució d'exemple, les dades escrites formen part de taules. No és imprescindible que a
les vostres solucions les dades estiguin tabulades sempre que la seva lectura sigui clara i
es respecti el contingut de les línies
Advertiment
La comunicació entre el programa principal i els mòduls o bé entre mòduls, ha de
realitzar-se obligatòriament mitjançant les paràmetres de les crides i de retorn. No es
poden emprar variables de tipus global.
1

http://www.php.net/manual/es/function.define.php

8
Copieu aquí el codi de la vostra solució
<?php
/************* FUNCTION *************/
//Aquí va el codi de les function
function literToM3($liters)
{
return (int)($liters/1000);
}// de literToM3
function consumption($vol, &$block1, &$block2, &$block3)
{//returns contents of each block according consumption classification
if ($vol <= consumptionVol1) $block1 = $vol;
else
{
$block1 = consumptionVol1;
$vol -= consumptionVol1;
if ($vol <= consumptionVol2) $block2 = $vol;
else
{
$block2 = consumptionVol2;
$block3 = $vol - consumptionVol2;
}
}
}// de consumption
function canon($vol, &$block1, &$block2, &$block3)
{ //returns contents of each block according canon classification
if ($vol <= canonVol1) $block1 = $vol;
else
{
$block1 = canonVol1;
$vol -= canonVol1;
if ($vol <= canonVol2) $block2 = $vol;
else
{
$block2 = canonVol2;
$block3 = $vol - canonVol2;

9
}
}
}// de canon
function IVA ($base, $type)
{
//returns total tax according to type
//type 0 --> exemption
//type 1 --> normal
//type 2 --> reduced
//type 3 --> super reduced
switch ($type)
{
case 0: $percent = nullIVA;
break;
case 1: $percent = normalIVA;
break;
case 2: $percent = reducedIVA;
break;
case 3: $percent = superReducedIVA;
}
return ($base * $percent);
}// de IVA
// ********** Named Constants **************
//IVA tax
define("nullIVA", 0);
define("normalIVA", 0.21);
define("reducedIVA", 0.1);
define("superReducedIVA", 0.04);
//Volumes of consumption blocks
define("consumptionVol1", 20);
define("consumptionVol2", 20);
//percent of sewer tax on consumption
define("sewerTax", 0.25);
//Volumes of canon blocks
define("canonVol1", 18);

10
define("canonVol2", 12);
//rate of consumption blocks
define("consumptionRate1", 0.437);
define("consumptionRate2", 0.6554);
define("consumptionRate3", 0.824);
//rate of canon blocks
define("canonRate1", 0.4469);
define("canonRate2", 1.0294);
define("canonRate3", 2.57);
//watermeter rent
define("waterMeterRent", 1.92);
/************* MAIN *************/
//Aquí va el codi del programa principal
//get data & converts to cubic meters
$vol = $_GET["vol"];
$M3 = litertoM3($vol);
//Init print form
print "<h2>WATER SERVICES BILL</h2>";
//Consumption
print "<h3>Consumption</h3>";
print "<table>";
print "<tr><td>Block </td><td>Volume</td><td>Unit price</td><td>&nbsp;</td></tr>";
consumption($M3, $block1, $block2, $block3);
$b1=$block1 * consumptionRate1;
$b2=$block2 * consumptionRate2;
$b3=$block3 * consumptionRate3;
print "<tr><td>(0-20 m<sup>3</sup>)</td><td>$block1</td><td>".consumptionRate1."</td><td>$b1</td></tr>";
print "<tr><td>(20-40 m<sup>3</sup>)</td><td>$block2</td><td>".consumptionRate2."</td><td>$b2</td></tr>";
print "<tr><td>(> 40 m<sup>3</sup>)</td><td>$block3</td><td>".consumptionRate3."</td><td>$b3</td></tr>";
$consumption=$b1+$b2+$b3;
print "<tr><td colspan='3'></td><td><b><font color='red'>$consumption</font></b></td></tr>";
print "</table>";
//Sewer

11
print "<h3>Sewer</h3>";
print "<table>";
$percent = 100 * sewerTax;
$sewer = sewerTax * $consumption;
print "<tr><td>Percent</td><td>consumption</td><td><b>&nbsp</td></tr>";
print "<tr><td>$percent</td><td>$consumption</td><td><b><b><font color='red'>$sewer</font></b></td></tr>";
print "</table>";
//waterMeterRent
print "<h3>Watermeter Rent</h3>";
print "<table>";
print "<tr><td><b><font color='red'>".waterMeterRent."</font></td></tr>";
print "</table>";
//Canon
print "<h3>Canon</h3>";
print "<table>";
print "<tr><td>Block </td><td>Volume</td><td>Unit price</td><td>&nbsp;</td></tr>";
canon($M3, $block1, $block2, $block3);
$c1=$block1 * canonRate1;
$c2=$block2 * canonRate2;
$c3=$block3 * canonRate3;
print "<tr><td>(0-18 m<sup>3</sup>)</td><td>$block1</td><td>".canonRate1."</td><td>$c1</td></tr>";
print "<tr><td>(18-30 m<sup>3</sup>)</td><td>$block2</td><td>".canonRate2."</td><td>$c2</td></tr>";
print "<tr><td>(> 30 m<sup>3</sup>)</td><td>$block3</td><td>".canonRate3."</td><td>$c3</td></tr>";
$canon=$c1+$c2+$c3;
print "<tr><td colspan='3'></td><td><b><font color='red'>$canon</font></b></td></tr>";
print "</table>";
//IVA
$ivaConsumption = reducedIVA * $consumption;
$ivaSewer = nullIVA * $sewer;
$ivaCanon = reducedIVA * $canon;
$ivaWaterMeter = normalIVA * waterMeterRent;
$iva = $ivaConsumption + $ivaSewer + $ivaCanon + $ivaWaterMeter;
print "<h3>IVA</h3>";
print "<table>";
print "<tr><td>Concept </td><td>Type</td><td>Base</td><td>fee</td></tr>";
print "<tr><td>Consumption</td><td>".reducedIVA."</td><td>$consumption</td><td>$ivaConsumption</td></tr>";
print "<tr><td>Sewer</td><td>".nullIVA."</td><td>$sewer</td><td>$ivaSewer</td></tr>";
print "<tr><td>Watermeter Rent</td><td>".normalIVA."</td><td>".waterMeterRent."</td><td>$ivaWaterMeter</td></tr>";

12
print "<tr><td>Canon</td><td>".reducedIVA."</td><td>$canon</td><td>$ivaCanon</td></tr>";
print "<tr><td colspan='3'>Total</td><td><font color='red'>$iva</font></td></tr>";
print "</table>";
//Total
$total = $consumption + $sewer + $canon + waterMeterRent + $iva;
printf ("<h3>
Total : <font color='red'>%.2f €</font>", $total);
?>

13
Exercici 6: Implementar les function d'un programa en PHP [20%]
El programa a construir com exercici 6 haurà és una modificació del programa de la
carta més alta adaptat per a que juguin entre 2 i 5 jugadors cadascun dels quals trïi
una determinada quantitat de cartes (entre 1 i 5). La puntuació que s'assigna a cada
jugador és el valor de la de la carta més alta que ha tret segons la següent puntuació
de les cartes:
Cartes
1a7
Sota, Cavall i Rei

Valor
La puntuació nominal de la carta
10 punts

La crida tindrà la forma
http://localhost/pac2_exer6.php?type=E&gamers=x&qtty=n on
•

type : és un caràcter que indicarà quin tipus de carta es vol mostrar:

o n o N si es vol mostrar cartes napolitanes

o e o E si es vol mostrar cartes espanyoles
•
•

gamers és la quantitat de jugadors, un número entre 2 i 5.
qtty : la quantitat de cartes que tirarà cada jugador, un número entre 1 i 5.

El programa haurà de complir els següents requisits:
• En el cas que type tingui un valor diferent als previstos, es mostrarà la
baralla espanyola.
• En el cas que gamers tingui un valor fora de l'interval marcat pels números
2 i 5, es mostrarà el joc per a 3 jugadors..
• En el cas que qtty tingui un valor fora de l'interval marcat pels números 1 i 5,
es tiraran 5 cartes per jugador.
•

Si les dades són correctes mostrarà, per a cada jugador, les cartes que ha
tirat i la puntuació obtinguda i al final un missatge resum que digui quins
jugadors han obtingut la puntuació més alta.

Tasca: Construir les function del programa per a que que sigui capaç de desenvolupar
el joc previst seguint les següents
Indicacions:
En les següents indicacions es descriuen les function que s'han de programar
indicant el nom dels paràmetres i l'ordre en què han d'anar a la capçalera. No s'indica,
en canvi, si són paràmetres d'entrada o entrada/sortida. Tampoc s'explicita si el
comportament de les function correspon al d'acció o funció. Correspon a l'estudiant,
a partir de la descripció que es fa de cada mòdul, decidir quins paràmetres han de tenir
el nom precedit per & per ser de sortida en un mòdul que actua com a acció, i quan no
hi ha paràmetre per a una sortida perquè el mòdul utilitza com a funció.

14
•

S'ha de crear la function getAllData ($prefix, $gamers, $cards) que llegirà els
arguments, en farà el control de valors i retornarà els valors correctes en els
paràmetres.
La funció, a més de corregir els possibles valors erronis que poden contenir els
arguments rebuts, ha de preveure que l'usuari pot haver oblidat de posar algun o
tots els arguments. Si manca un o més arguments, la funció retornarà els valors per
defecte de dits arguments.
Per conèixer si una variable està definida (o un argument ha rebut valor) es pot
emprar
la function isset 2. Per exemple, per comprovar que ha la crida s'ha
posat l'argument type=E caldria fer servir l'expressió isset($_GET["type"]) que
prendria el valor true si existeix l'argument en la crida o bé false si ens hem
descuidat de posar l'argument o no li hem donat valor.
La forma habitual d'aplicar-ho a un programa és una composició del tipus:
if (!isset($_GET["type"]){

accions a fer si no està posat el paràmetre o no se li ha donat valor;

}

•

S'ha de crear la function putCard($pref, $num) que rebrà com paràmetres
d'entrada una caràcter 'e' o 'n' i el número corresponent a la imatge d'una carta i
mostrarà la carta en pantalla

•

S’ha de crear la function cardValue ($card) que rep el número corresponent a la
imatge d'una carta (només el número) i retorna el seu valor en el joc. Per exemple
si rep 32 (3 de bastos) retornaria 3, i si rebés 18 (cavall de copes) retornaria 10.

•

S’ha de crear la function playerGame($player, $pref, $cards) que executa el joc
per a un jugador. Rebrà el número del jugador, el prefix del tipus de baralla i el
nombre de cartes a jugar.
Aquesta function en una línia identifica el jugador (Player 1, Player 2,...) i a la

2

http://php.net/manual/es/function.isset.php

15
següent mostra les cartes que ha tirat i la seva puntuació.

•

S’ha de construir la function printResult($winnerQtty, $bestScore, $message)
que rep la quantitat de guanyadors que hi ha, la puntuació obtinguda i un missatge
(quins són els jugadors guanyadors) i escriu el missatge final adequat als
guanyadors.
Si hi ha un sol guanyador
o
Si hi ha més d'un
guanyador.

•

El programa principal inicialitza comptadors, recull les dades i engega un bucle en
el qual es fa jugar a un jugador cada cop i s'actualitzen els comptadors i el text que
ha de tenir el missatge final. El codi del programa principal ja forma part de la
plantilla i no s'ha de modificar.

•

Si l’estudiant ho creu convenient pot crear més function en el programa.

Per comprovar el funcionament podeu fer servir
http://prog.uoc.edu/pac2/pac2_exer6.php?type=n&gamers=3&qtty=3
Advertiment
La comunicació entre el programa principal i els mòduls o bé entre mòduls, ha de
realitzar-se obligatòriament mitjançant les paràmetres de les crides i de retorn. No es
poden emprar variables de tipus global.

16
Copieu aquí el codi de la vostra solució
<?php
/************* FUNCTION *************/
//Aquí va el codi de les funcions
//data input
function getData(&$prefix, &$gamers, &$cards)
{
$error = 0;
if (isset($_GET["type"]))
{
$prefix = $_GET["type"];
$prefix = strtolower($prefix); //converts type in lowercase
if (($prefix != "n")&&($prefix != "N")) $prefix = "e";
}
else $prefix = "e";
if (isset($_GET["gamers"]))
{
$gamers = $_GET["gamers"];
if (($gamers < 2)||($gamers > 5)) $gamers = 3;
}
else $gamers = 3;
if (isset($_GET["qtty"]))
{
$cards = $_GET["qtty"];
if (($cards < 1)||($cards > 5)) $cards = 5;
}
else $cards = 5;
}//de dataInput
function putCard($pref, $num)
{
print "<img src='".$pref.$num.".png'>";
}

17
function cardValue($card)
{
$value = $card % 10 + 1;
if ($value > 7) $value = 10;
return ($value);
}// de cardValue
function playerGame($player, $pref, $cards)
{
$valMax = -1;
print "<h4> Player $player</h4>";
for ($i=0; $i<$cards; $i++)
{
$actualCard = rand(0,39);
putCard($pref, $actualCard);
$actualValue = cardValue($actualCard);
$valMax = max($valMax, $actualValue);
}
print "<b>Score: $valMax</b>";
return ($valMax);
}//de playerGame
function printResult($winnerQtty, $bestScore, $message)
{
if ($winnerQtty == 1)
print "<h4> The winner is Player $message: $bestScore points </h4>";
else
print "<h4> Players $message are winners: $bestScore points </h4>";
}//printResult
// *********************MAIN**********************
// init scores
$winnerQtty = 0;
$bestScore = 0;
$message = "";
//get Data

18
getData($type, $gamerQtty, $cardQtty);
//Play
for ($i=1; $i <= $gamerQtty; $i++)
{
$actualScore = playerGame ( $i, $type, $cardQtty);
//update score
if ($actualScore > $bestScore )
{
$bestScore = $actualScore;
$winnerQtty = 1;
$message = $i;
}
else if ($actualScore == $bestScore )
{
$winnerQtty++;
$message = $message.", ".$i;
}
}
//print results
printResult($winnerQtty, $bestScore, $message);
?>

19

More Related Content

Viewers also liked

Programació - PAC 1 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 1 - Multimedia (UOC) - Paquita RibasProgramació - PAC 1 - Multimedia (UOC) - Paquita Ribas
Programació - PAC 1 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Programació - Pràctica 1 correcció - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 correcció - Multimedia (UOC) - Paquita RibasProgramació - Pràctica 1 correcció - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 correcció - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita RibasProgramació - PAC 1 correcció - Multimèdia (UOC) - Paquita Ribas
Programació - PAC 1 correcció - Multimèdia (UOC) - Paquita RibasPaquita Ribas
 
Narrativa interactiva - Pràctica - Lídia Bria
Narrativa interactiva - Pràctica - Lídia BriaNarrativa interactiva - Pràctica - Lídia Bria
Narrativa interactiva - Pràctica - Lídia BriaLidia Bria
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Solució - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pac4 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac4 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Solució - Lidia BriaLidia Bria
 
Programació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaLidia Bria
 
Fonaments i evolució de la Multimèdia - Pac2 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac2 - Lídia BriaFonaments i evolució de la Multimèdia - Pac2 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac2 - Lídia BriaLidia Bria
 
Administració i gestió d'organitzacions - Pac3 - Solució - Lídia Bria
Administració i gestió d'organitzacions - Pac3 - Solució - Lídia BriaAdministració i gestió d'organitzacions - Pac3 - Solució - Lídia Bria
Administració i gestió d'organitzacions - Pac3 - Solució - Lídia BriaLidia Bria
 
Vídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia BriaVídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia BriaLidia Bria
 
Administració i gestió d'organitzacions - Pac2 - Solució - Lidia Bria
Administració i gestió d'organitzacions - Pac2 - Solució - Lidia BriaAdministració i gestió d'organitzacions - Pac2 - Solució - Lidia Bria
Administració i gestió d'organitzacions - Pac2 - Solució - Lidia BriaLidia Bria
 
Programació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaProgramació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia I - Pac3 - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Lidia BriaMatemàtiques per Multimèdia I - Pac3 - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Lidia BriaLidia Bria
 
Fonaments i evolució de la Multimèdia - Pac1 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac1 - Lídia BriaFonaments i evolució de la Multimèdia - Pac1 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac1 - Lídia BriaLidia Bria
 
Programació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaProgramació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaLidia Bria
 
Matemàtiques per Multimèdia I - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Solució - Lidia BriaMatemàtiques per Multimèdia I - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Solució - Lidia BriaLidia Bria
 
Narrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia BriaNarrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia BriaLidia Bria
 
Competència comunicativa per a professionals de les TIC - PS - Lidia Bria
Competència comunicativa per a professionals de les TIC - PS - Lidia BriaCompetència comunicativa per a professionals de les TIC - PS - Lidia Bria
Competència comunicativa per a professionals de les TIC - PS - Lidia BriaLidia Bria
 
Arquitectura de la Información - Pac01 - Lidia Bria
Arquitectura de la Información - Pac01 -  Lidia BriaArquitectura de la Información - Pac01 -  Lidia Bria
Arquitectura de la Información - Pac01 - Lidia BriaLidia Bria
 

Viewers also liked (20)

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ó - Pràctica 1 correcció - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 correcció - Multimedia (UOC) - Paquita RibasProgramació - Pràctica 1 correcció - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 correcció - 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
 
Narrativa interactiva - Pràctica - Lídia Bria
Narrativa interactiva - Pràctica - Lídia BriaNarrativa interactiva - Pràctica - Lídia Bria
Narrativa interactiva - Pràctica - Lídia Bria
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia Bria
 
Matemàtiques per Multimèdia II - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Solució - Lidia Bria
 
Matemàtiques per Multimèdia II - Pac4 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac4 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Solució - 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
 
Fonaments i evolució de la Multimèdia - Pac2 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac2 - Lídia BriaFonaments i evolució de la Multimèdia - Pac2 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac2 - Lídia Bria
 
Administració i gestió d'organitzacions - Pac3 - Solució - Lídia Bria
Administració i gestió d'organitzacions - Pac3 - Solució - Lídia BriaAdministració i gestió d'organitzacions - Pac3 - Solució - Lídia Bria
Administració i gestió d'organitzacions - Pac3 - Solució - Lídia Bria
 
Vídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia BriaVídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia Bria
 
Administració i gestió d'organitzacions - Pac2 - Solució - Lidia Bria
Administració i gestió d'organitzacions - Pac2 - Solució - Lidia BriaAdministració i gestió d'organitzacions - Pac2 - Solució - Lidia Bria
Administració i gestió d'organitzacions - Pac2 - Solució - Lidia Bria
 
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
 
Matemàtiques per Multimèdia I - Pac3 - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Lidia BriaMatemàtiques per Multimèdia I - Pac3 - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Lidia Bria
 
Fonaments i evolució de la Multimèdia - Pac1 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac1 - Lídia BriaFonaments i evolució de la Multimèdia - Pac1 - Lídia Bria
Fonaments i evolució de la Multimèdia - Pac1 - Lídia Bria
 
Programació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaProgramació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia Bria
 
Matemàtiques per Multimèdia I - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Solució - Lidia BriaMatemàtiques per Multimèdia I - Pac3 - Solució - Lidia Bria
Matemàtiques per Multimèdia I - Pac3 - Solució - Lidia Bria
 
Narrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia BriaNarrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia Bria
 
Competència comunicativa per a professionals de les TIC - PS - Lidia Bria
Competència comunicativa per a professionals de les TIC - PS - Lidia BriaCompetència comunicativa per a professionals de les TIC - PS - Lidia Bria
Competència comunicativa per a professionals de les TIC - PS - Lidia Bria
 
Arquitectura de la Información - Pac01 - Lidia Bria
Arquitectura de la Información - Pac01 -  Lidia BriaArquitectura de la Información - Pac01 -  Lidia Bria
Arquitectura de la Información - Pac01 - Lidia Bria
 

Similar to Programació - Pac2 - Solució - Lídia Bria

Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programaciolluís nater
 
Dossier Refredament Substancies
Dossier Refredament SubstanciesDossier Refredament Substancies
Dossier Refredament SubstanciesAgustí Estévez
 
Programació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia BriaProgramació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia BriaLidia Bria
 
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óticaemunoz341
 
Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaLidia Bria
 
Programació - Pràctica 1 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 - Multimedia (UOC) - Paquita RibasProgramació - Pràctica 1 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinadesceedukat
 
Electrònica Digital
Electrònica DigitalElectrònica Digital
Electrònica Digitalclopez64
 
Tema 7_Sistemes Digitals
Tema 7_Sistemes DigitalsTema 7_Sistemes Digitals
Tema 7_Sistemes Digitalsvpastortecno
 
Llindar de rendibilitat
Llindar de rendibilitatLlindar de rendibilitat
Llindar de rendibilitatRosa Domingo
 
eso2 ut3-programacio
eso2 ut3-programacioeso2 ut3-programacio
eso2 ut3-programacioscholl Garbí
 
Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacioscholl Garbí
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaLidia Bria
 
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 practica2Marcos Baldovi
 

Similar to Programació - Pac2 - Solució - Lídia Bria (20)

Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacio
 
Dossier Refredament Substancies
Dossier Refredament SubstanciesDossier Refredament Substancies
Dossier Refredament Substancies
 
Programació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia BriaProgramació - Pac1 - Solució - Lídia Bria
Programació - Pac1 - Solució - Lídia Bria
 
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ó - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia Bria
 
Prog_prac1
Prog_prac1Prog_prac1
Prog_prac1
 
Programació - Pràctica 1 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 - Multimedia (UOC) - Paquita RibasProgramació - Pràctica 1 - Multimedia (UOC) - Paquita Ribas
Programació - Pràctica 1 - Multimedia (UOC) - Paquita Ribas
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinades
 
Electrònica Digital
Electrònica DigitalElectrònica Digital
Electrònica Digital
 
Prog_pac3
Prog_pac3Prog_pac3
Prog_pac3
 
Tema 7_Sistemes Digitals
Tema 7_Sistemes DigitalsTema 7_Sistemes Digitals
Tema 7_Sistemes Digitals
 
Llindar de rendibilitat
Llindar de rendibilitatLlindar de rendibilitat
Llindar de rendibilitat
 
eso2 ut3-programacio
eso2 ut3-programacioeso2 ut3-programacio
eso2 ut3-programacio
 
Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacio
 
PW_pac1
PW_pac1PW_pac1
PW_pac1
 
UD3 PROGRAMACIÓ
UD3 PROGRAMACIÓUD3 PROGRAMACIÓ
UD3 PROGRAMACIÓ
 
| PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio | PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia Bria
 
Sistemes digitals
Sistemes digitalsSistemes digitals
Sistemes digitals
 
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
 

More from Lidia Bria

Gràfics 3D - PS altres anys - Lidia Bria
Gràfics 3D - PS altres anys - Lidia BriaGràfics 3D - PS altres anys - Lidia Bria
Gràfics 3D - PS altres anys - Lidia BriaLidia Bria
 
Gràfics 3D - Pràctica - Lidia Bria
Gràfics 3D - Pràctica - Lidia BriaGràfics 3D - Pràctica - Lidia Bria
Gràfics 3D - Pràctica - Lidia BriaLidia Bria
 
Pac03 - Lidia Bria (A) - Gràfics 3D
Pac03 - Lidia Bria (A) - Gràfics 3DPac03 - Lidia Bria (A) - Gràfics 3D
Pac03 - Lidia Bria (A) - Gràfics 3DLidia Bria
 
Gràfics 3D - Pac03 Test - Lidia Bria
Gràfics 3D - Pac03 Test - Lidia BriaGràfics 3D - Pac03 Test - Lidia Bria
Gràfics 3D - Pac03 Test - Lidia BriaLidia Bria
 
Pac02 - Lidia Bria (B) - Gràfics 3DB
Pac02 - Lidia Bria (B) - Gràfics 3DBPac02 - Lidia Bria (B) - Gràfics 3DB
Pac02 - Lidia Bria (B) - Gràfics 3DBLidia Bria
 
Gràfics 3D - Pac02 Test - Lidia Bria
Gràfics 3D - Pac02 Test - Lidia BriaGràfics 3D - Pac02 Test - Lidia Bria
Gràfics 3D - Pac02 Test - Lidia BriaLidia Bria
 
Gràfics 3D - Pac1 Segona entrega - Lidia Bria
Gràfics 3D - Pac1 Segona entrega - Lidia BriaGràfics 3D - Pac1 Segona entrega - Lidia Bria
Gràfics 3D - Pac1 Segona entrega - Lidia BriaLidia Bria
 
Gràfics 3D - Pac1 Primera entrega - Lidia Bria
Gràfics 3D - Pac1 Primera entrega - Lidia BriaGràfics 3D - Pac1 Primera entrega - Lidia Bria
Gràfics 3D - Pac1 Primera entrega - Lidia BriaLidia Bria
 
Gràfics 3D - Pac01 - Lidia Bria
Gràfics 3D - Pac01 - Lidia BriaGràfics 3D - Pac01 - Lidia Bria
Gràfics 3D - Pac01 - Lidia BriaLidia Bria
 
Arquitectura de la Información - PS Altres anys - Lidia Bria
Arquitectura de la Información - PS Altres anys -  Lidia BriaArquitectura de la Información - PS Altres anys -  Lidia Bria
Arquitectura de la Información - PS Altres anys - Lidia BriaLidia Bria
 
Arquitectura de la Información - Pràctica - Lidia Bria
Arquitectura de la Información - Pràctica -  Lidia BriaArquitectura de la Información - Pràctica -  Lidia Bria
Arquitectura de la Información - Pràctica - Lidia BriaLidia Bria
 
Arquitectura de la Información - Pac03 - Lidia Bria
Arquitectura de la Información - Pac03 -  Lidia BriaArquitectura de la Información - Pac03 -  Lidia Bria
Arquitectura de la Información - Pac03 - Lidia BriaLidia Bria
 
Arquitectura de la Información - Pac02 - Lidia Bria
Arquitectura de la Información - Pac02 -  Lidia BriaArquitectura de la Información - Pac02 -  Lidia Bria
Arquitectura de la Información - Pac02 - Lidia BriaLidia Bria
 
Programació - Exàmens - Solució - Lídia Bria
Programació - Exàmens - Solució - Lídia BriaProgramació - Exàmens - Solució - Lídia Bria
Programació - Exàmens - Solució - Lídia BriaLidia Bria
 
Vídeo - Ps - Lídia Bria
Vídeo - Ps - Lídia BriaVídeo - Ps - Lídia Bria
Vídeo - Ps - Lídia BriaLidia Bria
 
Programació - Exàmen - Lidia Bria
Programació - Exàmen - Lidia BriaProgramació - Exàmen - Lidia Bria
Programació - Exàmen - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pac4 - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Lidia BriaMatemàtiques per Multimèdia II - Pac4 - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pac3 - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Lidia BriaMatemàtiques per Multimèdia II - Pac3 - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pac2 - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Lidia BriaMatemàtiques per Multimèdia II - Pac2 - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pac2 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac2 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Solució - Lidia BriaLidia Bria
 

More from Lidia Bria (20)

Gràfics 3D - PS altres anys - Lidia Bria
Gràfics 3D - PS altres anys - Lidia BriaGràfics 3D - PS altres anys - Lidia Bria
Gràfics 3D - PS altres anys - Lidia Bria
 
Gràfics 3D - Pràctica - Lidia Bria
Gràfics 3D - Pràctica - Lidia BriaGràfics 3D - Pràctica - Lidia Bria
Gràfics 3D - Pràctica - Lidia Bria
 
Pac03 - Lidia Bria (A) - Gràfics 3D
Pac03 - Lidia Bria (A) - Gràfics 3DPac03 - Lidia Bria (A) - Gràfics 3D
Pac03 - Lidia Bria (A) - Gràfics 3D
 
Gràfics 3D - Pac03 Test - Lidia Bria
Gràfics 3D - Pac03 Test - Lidia BriaGràfics 3D - Pac03 Test - Lidia Bria
Gràfics 3D - Pac03 Test - Lidia Bria
 
Pac02 - Lidia Bria (B) - Gràfics 3DB
Pac02 - Lidia Bria (B) - Gràfics 3DBPac02 - Lidia Bria (B) - Gràfics 3DB
Pac02 - Lidia Bria (B) - Gràfics 3DB
 
Gràfics 3D - Pac02 Test - Lidia Bria
Gràfics 3D - Pac02 Test - Lidia BriaGràfics 3D - Pac02 Test - Lidia Bria
Gràfics 3D - Pac02 Test - Lidia Bria
 
Gràfics 3D - Pac1 Segona entrega - Lidia Bria
Gràfics 3D - Pac1 Segona entrega - Lidia BriaGràfics 3D - Pac1 Segona entrega - Lidia Bria
Gràfics 3D - Pac1 Segona entrega - Lidia Bria
 
Gràfics 3D - Pac1 Primera entrega - Lidia Bria
Gràfics 3D - Pac1 Primera entrega - Lidia BriaGràfics 3D - Pac1 Primera entrega - Lidia Bria
Gràfics 3D - Pac1 Primera entrega - Lidia Bria
 
Gràfics 3D - Pac01 - Lidia Bria
Gràfics 3D - Pac01 - Lidia BriaGràfics 3D - Pac01 - Lidia Bria
Gràfics 3D - Pac01 - Lidia Bria
 
Arquitectura de la Información - PS Altres anys - Lidia Bria
Arquitectura de la Información - PS Altres anys -  Lidia BriaArquitectura de la Información - PS Altres anys -  Lidia Bria
Arquitectura de la Información - PS Altres anys - Lidia Bria
 
Arquitectura de la Información - Pràctica - Lidia Bria
Arquitectura de la Información - Pràctica -  Lidia BriaArquitectura de la Información - Pràctica -  Lidia Bria
Arquitectura de la Información - Pràctica - Lidia Bria
 
Arquitectura de la Información - Pac03 - Lidia Bria
Arquitectura de la Información - Pac03 -  Lidia BriaArquitectura de la Información - Pac03 -  Lidia Bria
Arquitectura de la Información - Pac03 - Lidia Bria
 
Arquitectura de la Información - Pac02 - Lidia Bria
Arquitectura de la Información - Pac02 -  Lidia BriaArquitectura de la Información - Pac02 -  Lidia Bria
Arquitectura de la Información - Pac02 - Lidia Bria
 
Programació - Exàmens - Solució - Lídia Bria
Programació - Exàmens - Solució - Lídia BriaProgramació - Exàmens - Solució - Lídia Bria
Programació - Exàmens - Solució - Lídia Bria
 
Vídeo - Ps - Lídia Bria
Vídeo - Ps - Lídia BriaVídeo - Ps - Lídia Bria
Vídeo - Ps - Lídia Bria
 
Programació - Exàmen - Lidia Bria
Programació - Exàmen - Lidia BriaProgramació - Exàmen - Lidia Bria
Programació - Exàmen - Lidia Bria
 
Matemàtiques per Multimèdia II - Pac4 - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Lidia BriaMatemàtiques per Multimèdia II - Pac4 - Lidia Bria
Matemàtiques per Multimèdia II - Pac4 - Lidia Bria
 
Matemàtiques per Multimèdia II - Pac3 - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Lidia BriaMatemàtiques per Multimèdia II - Pac3 - Lidia Bria
Matemàtiques per Multimèdia II - Pac3 - Lidia Bria
 
Matemàtiques per Multimèdia II - Pac2 - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Lidia BriaMatemàtiques per Multimèdia II - Pac2 - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Lidia Bria
 
Matemàtiques per Multimèdia II - Pac2 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac2 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac2 - Solució - Lidia Bria
 

Recently uploaded

transició historia segon de batxiller at
transició historia segon de batxiller attransició historia segon de batxiller at
transició historia segon de batxiller atJuliaBasart1
 
feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555twunt
 
l_absolutisme_a_europa_espanya_i_a_catalunya.pptx
l_absolutisme_a_europa_espanya_i_a_catalunya.pptxl_absolutisme_a_europa_espanya_i_a_catalunya.pptx
l_absolutisme_a_europa_espanya_i_a_catalunya.pptxEDUARDNAVARRODOMENEC
 
Programa Dansa Ara Garraf Les Roquetes Sa
Programa Dansa Ara Garraf Les Roquetes SaPrograma Dansa Ara Garraf Les Roquetes Sa
Programa Dansa Ara Garraf Les Roquetes SaISMAELALVAREZCABRERA
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfISMAELALVAREZCABRERA
 
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERSSuperAdmin9
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfISMAELALVAREZCABRERA
 
Sílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdfSílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdfsilvialopezle
 
Plans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El MusicalPlans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El Musicalalba444773
 
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfErnest Lluch
 

Recently uploaded (10)

transició historia segon de batxiller at
transició historia segon de batxiller attransició historia segon de batxiller at
transició historia segon de batxiller at
 
feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555
 
l_absolutisme_a_europa_espanya_i_a_catalunya.pptx
l_absolutisme_a_europa_espanya_i_a_catalunya.pptxl_absolutisme_a_europa_espanya_i_a_catalunya.pptx
l_absolutisme_a_europa_espanya_i_a_catalunya.pptx
 
Programa Dansa Ara Garraf Les Roquetes Sa
Programa Dansa Ara Garraf Les Roquetes SaPrograma Dansa Ara Garraf Les Roquetes Sa
Programa Dansa Ara Garraf Les Roquetes Sa
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
 
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
 
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdfESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
ESCOLA MEDITERRÀNIA revista Sant Jordi 2024__MOSTRA (1).pdf
 
Sílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdfSílvia_López_Competic3_bloc000002_C8.pdf
Sílvia_López_Competic3_bloc000002_C8.pdf
 
Plans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El MusicalPlans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El Musical
 
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
 

Programació - Pac2 - Solució - Lídia Bria

  • 1. Estudis d’Informàtica, Multimèdia i Telecomunicació Programació PAC2 — Document d’exercicis SOLUCIÓ 1
  • 2. Exercici 1: Declaració d'accions i funcions [15%] Tasca: Per a cada apartat i. decidiu si és millor una acció o una funció i expliqueu el motiu. ii. definiu-ne la capçalera (només es demana la capçalera, no cal que dissenyeu cap algorisme). Es demana la capçalera d'un mòdul (acció o funció) que: a) Que rebi tres paraules i les escrigui a la sortida estàndard ordenades per ordre alfabètic: i ii Acció perquè no retorna res, escriu en la sortida estàndard acció writeSorted(ent c1:cadena, ent c2:cadena, ent c3:cadena) b) Que reculli de l'entrada estàndard una llista de números amb decimals i digui quin és el major i el menor que havia a la llista. i ii Acció perquè ha de retornar dos números acció maxMin(sor max:real, sor min:real) c) Que rebi el nom d’un fitxer d’imatge i el codi numèric d’un color i retorni la quantitat de píxels del dit color que conté el fitxer d’imatge i ii Funció perquè ha de retornar un sol valor: la quantitat de píxels funció countColorPixel(fileName:cadena, colorCode:enter): enter d) Que llegeixi de l’entrada estàndard una llista de números i digui si la llista conté algun 0. i ii Funció perquè ha de retornar un sol valor: l’existència o no de zeros funció zero( ):booleà 2
  • 3. Exercici 2: Crides a mòduls i modificadors d'entrada i sortida [15%] Tasca: Donats l’algorisme i les capçaleres de les següents accions i funcions: funcio function1( x: enter, y: enter, z: real) : boolea; funcio function2( x: enter, c: caracter, b: boolea) :enter; accio action1( ent i: enter, ent j: enter, sor k: enter) ; accio action2( ent c: caracter, ent x: real, entsor y: enter); algorisme algorithm var i, j, k: enter; x, y, z : real; d : caracter; b: boolea; fvar ... ... falgorisme Responeu a cada apartat si és correcte o no substituir el requadre gris de l’algorisme algorithm per la instrucció que es dóna i, si no ho és, indiqueu-ne les causes a) action1 (function2(i, d, (x>y)), k,j); Correcte. b) b := function1(k, k, y) > integerToReal(i*i) + x / 2 Incorrecte. S’intenta fer la divisió d’un real per un enter (x/2). A més, a l’esquerra de la comparació hi ha un booleà (function1) mentre a la dreta hi ha nombres. c) i := action2( ‘x’, 3.1416, k * j); Incorrecte. Les accions no es poden fer servir com valor en assignacions. D’altra banda el tercer paràmetre de action2 és d’entrada i sortida i hauria de ser obligatòriament una variable i no una expressió. 3
  • 4. Exercici 3: Ús de mòduls i paràmetres segons el seu significat i [15%] Tasca: Amb motiu de la introducció de minijobs, una multinacional demana un algorisme per calcular la nòmina en els següents termes. El treballador cobra un preu fix per hora i li retenen un percentatge en concepte de IRPF que depèn de la quantitat que ha de cobrar al mes. L'algorisme ha de llegir el número d'hores treballades i el preu per hora que cobra des de l'entrada estàndard (teclat) i ha d'escriure al canal de sortida estàndard (pantalla) el sou brut, la retenció de IRPF i el sou net. Si el sou brut mensual no supera els 300€ no hi ha retenció i s'escriurà directament el sou net. Si el sou brut supera els 300€ i no supera els 600€ la retenció d'IRPF és del 5%. Si supera els 600€ la retenció és del 8%. En ambdós casos s'escriurà salari brut, retenció i salari net. Ompliu les caixes, amb una única instrucció o expressió a cada una, per aconseguir el comportament que us hem descrit. L’algorisme resultant ha d’utilitzar obligatòriament totes les següents funcions, que no heu d’implementar: funció que rep es salari brut i el tipus a aplicar d'IRPF i calcula l'import de la retenció. funcio calcRetention ( grossSalary: real, irpf: real) : real funció que rep el salari brut i l'import de la retenció i calcula el salari net funcio calcTakeHomePay ( grossSalary: real, retention: real) : real 4
  • 5. algorisme payroll ( ) const IRPF_low: real = 5.0; IRPF_high: real = 8.0; SALARY_THRESHOLD_LOW: real = 300.0; SALARY_THRESHOLD_HIGH: real = 600.0; fconst var fixedHourPrice, workedHours: real; grossSalary, retention, takeHomePay: real; fvar fixedHourPrice := readReal(); workedHours := readReal(); ; ; grossSalary := fixedHourPrice * workedHours; si grossSalary > SALARY_THRESHOLD_LOW llavors si grossSalary > SALARY_THRESHOLD_HIGH llavors retention := calcRetention( grossSalary, IRPF high ); sino retention := fsi sino retention := 0; fsi takeHomePay := si ; calcRetention( grossSalary, IRPF_low ); calcTakeHomePay( grossSalary, retention); takeHomePay >= SALARY_THRESHOLD_LOW ; llavors writeReal (grossSalary); writeReal (retention); writeReal (takeHomePay); sino writeReal (takeHomePay); fsi falgorisme 5
  • 6. Exercici 4: Disseny de mòduls [15%] Un alpinista viatja sovint amb companys de cultura anglosaxona que estan acostumats a mesurar les temperatures en graus Fahrenheit, mentre d'altres companys estan acostumats als centígrads. Existeixen fórmules simples per fer les conversions que es poden veure a http://ca.wikipedia.org/wiki/Grau_Celsius Tasca: Crear un mòdul (acció o funció, el més adequat) que serveixi per entrar la temperatura en una donada escala (escala d'entrada) i obtenir-la en una altra justifiqueu el motiu de la tria. escala (escala de sortida) i El mòdul ha de rebre tres paràmetres, que correspondran a: • Escala d'entrada de dades (un caràcter: C o F). • Escala de sortida de dades (un caràcter: C o F). • Valor de la temperatura d'entrada S'ha de preveure la possibilitat que les dues escales (entrada i sortida) siguin la mateixa. Faria servir una funció perquè ha de retornar només un nombre real, la temperatura de sortida funcio temperatureConverter( inputType: character, outputType: character, tempIn: real) :real var tempOut: real; fvar si inputType = outputType llavors tempOut := tempIn; sino si inputType = 'C' llavors tempOut := tempIn * 1.8 + 32; sino tempOut := (tempIn - 32) / 1.8; fsi fsi return tempOut; ffuncio 6
  • 7. Exercici 5: Creació d'un programa amb mòduls a PHP [20%] Tasca: Heu de crear un programa que calculi i escrigui en pantalla una factura detallada de la companyia de subministrament d'aigua a partir dels litres de consum trimestral. La factura del subministrament d'aigua inclou diferents conceptes: • • • • Consum pròpiament dit (consumption) Taxa de clavegueram (sewer) Lloguer del comptador d'aigua (watermeter rent) Canon d'obres hidràuliques (canon) cadascun dels qual ve gravat amb l'IVA corresponent Per tal d'afavorir el consum responsable, s'ha creat una tarificació per blocs, de manera que quant més gran sigui el consum, major és el preu unitari del metre cúbic d'aigua. La tarificacio per blocs afecta de manera diferen els conceptes de consum i el de canon. El mecanisme de tarificació és com segueix: • Consum: o 1r bloc (0-20m3) : 0.437 €/ m3 o 2n bloc (20-40m3) : 0.6554 €/ m3 o 3n bloc (>40m3) : 0.824 €/ m3 Si un usuari consumeix 65 m3, en pagaria 20 a 0.437, uns altres 20 a 0.6554 i els restants 25 a 0.824. • Clavegueram Amb aquest concepte es paga el 25% del que es paga per Consum. • Lloguer del comptador Es paga la quantitat fixa de 1.92€ cada trimestre • Canon: o 1r bloc (0-18m3) : 0.4469 €/ m3 o 2n bloc (18-30m3) : 1.0294 €/ m3 o 3n bloc (>30m3) : 2.57 €/ m3 Si un usuari consumeix 65 m3, en pagaria 18 a 0.4469, uns altres 12 a 1.0294 i els restants 35 a 2.57. • IVA: Existeix tres tipus d'IVA a aplicar als diferents conceptes: o Clavegueram: exempt d'IVA (0%) o Consum i Canon : tipus reduït (10%) o lloguer del comptador: tipus normal (21%) la crida haurà de ser del tipus http://localhost/pac2_exer5?vol=x on x és la quantitat de litres consumits en el trimestre. 7
  • 8. Indicacions: • Per tal que el programa sigui fàcilment actualitzable, es definiran tantes constants amb nom com sigui necessari, de manera que si canvien els preus per m3 (de consum o canon), els volums de cada bloc (de consum o canon), el percentatge que significa la taxa de clavegueram o els tipus d'IVA, n'hagués prou en modificar les definicions de les constants perquè el programa quedés actualitzat a la nova situació. Per a la definició de constants s’ha d’emprar define($name, $value) 1 • S'haurà de crear la function literToM3 que rebrà un volum en litres i retornarà la quantitat entera de metres cúbics a què equival (per truncament). Per exemple, si es rep 65789 es retornarà 65. • S'haurà de crear la function consumption que rebrà la quantitat de m3 consumits i retornarà, en tres paràmetres, la quantitat de m3 corresponents a cada bloc de consum. Per exemple, si rep 26, retornaria 20, 6 i 0. Si rebés 65, els retorns serien 20, 20 i 25. • S'haurà de crear la function canon que rebrà la quantitat de m3 consumits i retornarà, en tres paràmetres, la quantitat de m3 corresponents a cada bloc de canon. Per exemple, si rep 26, retornaria 18, 8 i 0. Si rebés 65, els retorns serien 18, 12 i 35. • S'haurà de crear la function IVA que rebrà la base a cotitzar i el codi tipus a aplicar (0→ exempció, 1→ normal, 2→ reduït). Per exemple, per a una base de 50, si el tipus és 0, es retornaria 0 (el 0%), si el tipus fos 1 es retornaria 10.5 (el 21%) i si el tipus fos 2 retornaria 5 (10%). El programa s'escriurà en el fitxer pac2_exer5_plantilla.php que es canviarà de nom a pac2_exer5.php pel lliurament Indicacions per a PHP Les dades s’entraran pel mètode $_GET en el paràmetre de nom vol. La crida ha de ser del tipus: http:// localhost/pac2_exer5.php?vol=65789 Per a comprovar el funcionament podeu fer servir http://prog.uoc.edu/pac2/pac2_exer5.php?vol=65789 podeu provar el comportament del programa per a diferents valors de l'argument. A la solució d'exemple, les dades escrites formen part de taules. No és imprescindible que a les vostres solucions les dades estiguin tabulades sempre que la seva lectura sigui clara i es respecti el contingut de les línies Advertiment La comunicació entre el programa principal i els mòduls o bé entre mòduls, ha de realitzar-se obligatòriament mitjançant les paràmetres de les crides i de retorn. No es poden emprar variables de tipus global. 1 http://www.php.net/manual/es/function.define.php 8
  • 9. Copieu aquí el codi de la vostra solució <?php /************* FUNCTION *************/ //Aquí va el codi de les function function literToM3($liters) { return (int)($liters/1000); }// de literToM3 function consumption($vol, &$block1, &$block2, &$block3) {//returns contents of each block according consumption classification if ($vol <= consumptionVol1) $block1 = $vol; else { $block1 = consumptionVol1; $vol -= consumptionVol1; if ($vol <= consumptionVol2) $block2 = $vol; else { $block2 = consumptionVol2; $block3 = $vol - consumptionVol2; } } }// de consumption function canon($vol, &$block1, &$block2, &$block3) { //returns contents of each block according canon classification if ($vol <= canonVol1) $block1 = $vol; else { $block1 = canonVol1; $vol -= canonVol1; if ($vol <= canonVol2) $block2 = $vol; else { $block2 = canonVol2; $block3 = $vol - canonVol2; 9
  • 10. } } }// de canon function IVA ($base, $type) { //returns total tax according to type //type 0 --> exemption //type 1 --> normal //type 2 --> reduced //type 3 --> super reduced switch ($type) { case 0: $percent = nullIVA; break; case 1: $percent = normalIVA; break; case 2: $percent = reducedIVA; break; case 3: $percent = superReducedIVA; } return ($base * $percent); }// de IVA // ********** Named Constants ************** //IVA tax define("nullIVA", 0); define("normalIVA", 0.21); define("reducedIVA", 0.1); define("superReducedIVA", 0.04); //Volumes of consumption blocks define("consumptionVol1", 20); define("consumptionVol2", 20); //percent of sewer tax on consumption define("sewerTax", 0.25); //Volumes of canon blocks define("canonVol1", 18); 10
  • 11. define("canonVol2", 12); //rate of consumption blocks define("consumptionRate1", 0.437); define("consumptionRate2", 0.6554); define("consumptionRate3", 0.824); //rate of canon blocks define("canonRate1", 0.4469); define("canonRate2", 1.0294); define("canonRate3", 2.57); //watermeter rent define("waterMeterRent", 1.92); /************* MAIN *************/ //Aquí va el codi del programa principal //get data & converts to cubic meters $vol = $_GET["vol"]; $M3 = litertoM3($vol); //Init print form print "<h2>WATER SERVICES BILL</h2>"; //Consumption print "<h3>Consumption</h3>"; print "<table>"; print "<tr><td>Block </td><td>Volume</td><td>Unit price</td><td>&nbsp;</td></tr>"; consumption($M3, $block1, $block2, $block3); $b1=$block1 * consumptionRate1; $b2=$block2 * consumptionRate2; $b3=$block3 * consumptionRate3; print "<tr><td>(0-20 m<sup>3</sup>)</td><td>$block1</td><td>".consumptionRate1."</td><td>$b1</td></tr>"; print "<tr><td>(20-40 m<sup>3</sup>)</td><td>$block2</td><td>".consumptionRate2."</td><td>$b2</td></tr>"; print "<tr><td>(> 40 m<sup>3</sup>)</td><td>$block3</td><td>".consumptionRate3."</td><td>$b3</td></tr>"; $consumption=$b1+$b2+$b3; print "<tr><td colspan='3'></td><td><b><font color='red'>$consumption</font></b></td></tr>"; print "</table>"; //Sewer 11
  • 12. print "<h3>Sewer</h3>"; print "<table>"; $percent = 100 * sewerTax; $sewer = sewerTax * $consumption; print "<tr><td>Percent</td><td>consumption</td><td><b>&nbsp</td></tr>"; print "<tr><td>$percent</td><td>$consumption</td><td><b><b><font color='red'>$sewer</font></b></td></tr>"; print "</table>"; //waterMeterRent print "<h3>Watermeter Rent</h3>"; print "<table>"; print "<tr><td><b><font color='red'>".waterMeterRent."</font></td></tr>"; print "</table>"; //Canon print "<h3>Canon</h3>"; print "<table>"; print "<tr><td>Block </td><td>Volume</td><td>Unit price</td><td>&nbsp;</td></tr>"; canon($M3, $block1, $block2, $block3); $c1=$block1 * canonRate1; $c2=$block2 * canonRate2; $c3=$block3 * canonRate3; print "<tr><td>(0-18 m<sup>3</sup>)</td><td>$block1</td><td>".canonRate1."</td><td>$c1</td></tr>"; print "<tr><td>(18-30 m<sup>3</sup>)</td><td>$block2</td><td>".canonRate2."</td><td>$c2</td></tr>"; print "<tr><td>(> 30 m<sup>3</sup>)</td><td>$block3</td><td>".canonRate3."</td><td>$c3</td></tr>"; $canon=$c1+$c2+$c3; print "<tr><td colspan='3'></td><td><b><font color='red'>$canon</font></b></td></tr>"; print "</table>"; //IVA $ivaConsumption = reducedIVA * $consumption; $ivaSewer = nullIVA * $sewer; $ivaCanon = reducedIVA * $canon; $ivaWaterMeter = normalIVA * waterMeterRent; $iva = $ivaConsumption + $ivaSewer + $ivaCanon + $ivaWaterMeter; print "<h3>IVA</h3>"; print "<table>"; print "<tr><td>Concept </td><td>Type</td><td>Base</td><td>fee</td></tr>"; print "<tr><td>Consumption</td><td>".reducedIVA."</td><td>$consumption</td><td>$ivaConsumption</td></tr>"; print "<tr><td>Sewer</td><td>".nullIVA."</td><td>$sewer</td><td>$ivaSewer</td></tr>"; print "<tr><td>Watermeter Rent</td><td>".normalIVA."</td><td>".waterMeterRent."</td><td>$ivaWaterMeter</td></tr>"; 12
  • 13. print "<tr><td>Canon</td><td>".reducedIVA."</td><td>$canon</td><td>$ivaCanon</td></tr>"; print "<tr><td colspan='3'>Total</td><td><font color='red'>$iva</font></td></tr>"; print "</table>"; //Total $total = $consumption + $sewer + $canon + waterMeterRent + $iva; printf ("<h3> Total : <font color='red'>%.2f €</font>", $total); ?> 13
  • 14. Exercici 6: Implementar les function d'un programa en PHP [20%] El programa a construir com exercici 6 haurà és una modificació del programa de la carta més alta adaptat per a que juguin entre 2 i 5 jugadors cadascun dels quals trïi una determinada quantitat de cartes (entre 1 i 5). La puntuació que s'assigna a cada jugador és el valor de la de la carta més alta que ha tret segons la següent puntuació de les cartes: Cartes 1a7 Sota, Cavall i Rei Valor La puntuació nominal de la carta 10 punts La crida tindrà la forma http://localhost/pac2_exer6.php?type=E&gamers=x&qtty=n on • type : és un caràcter que indicarà quin tipus de carta es vol mostrar: o n o N si es vol mostrar cartes napolitanes o e o E si es vol mostrar cartes espanyoles • • gamers és la quantitat de jugadors, un número entre 2 i 5. qtty : la quantitat de cartes que tirarà cada jugador, un número entre 1 i 5. El programa haurà de complir els següents requisits: • En el cas que type tingui un valor diferent als previstos, es mostrarà la baralla espanyola. • En el cas que gamers tingui un valor fora de l'interval marcat pels números 2 i 5, es mostrarà el joc per a 3 jugadors.. • En el cas que qtty tingui un valor fora de l'interval marcat pels números 1 i 5, es tiraran 5 cartes per jugador. • Si les dades són correctes mostrarà, per a cada jugador, les cartes que ha tirat i la puntuació obtinguda i al final un missatge resum que digui quins jugadors han obtingut la puntuació més alta. Tasca: Construir les function del programa per a que que sigui capaç de desenvolupar el joc previst seguint les següents Indicacions: En les següents indicacions es descriuen les function que s'han de programar indicant el nom dels paràmetres i l'ordre en què han d'anar a la capçalera. No s'indica, en canvi, si són paràmetres d'entrada o entrada/sortida. Tampoc s'explicita si el comportament de les function correspon al d'acció o funció. Correspon a l'estudiant, a partir de la descripció que es fa de cada mòdul, decidir quins paràmetres han de tenir el nom precedit per & per ser de sortida en un mòdul que actua com a acció, i quan no hi ha paràmetre per a una sortida perquè el mòdul utilitza com a funció. 14
  • 15. • S'ha de crear la function getAllData ($prefix, $gamers, $cards) que llegirà els arguments, en farà el control de valors i retornarà els valors correctes en els paràmetres. La funció, a més de corregir els possibles valors erronis que poden contenir els arguments rebuts, ha de preveure que l'usuari pot haver oblidat de posar algun o tots els arguments. Si manca un o més arguments, la funció retornarà els valors per defecte de dits arguments. Per conèixer si una variable està definida (o un argument ha rebut valor) es pot emprar la function isset 2. Per exemple, per comprovar que ha la crida s'ha posat l'argument type=E caldria fer servir l'expressió isset($_GET["type"]) que prendria el valor true si existeix l'argument en la crida o bé false si ens hem descuidat de posar l'argument o no li hem donat valor. La forma habitual d'aplicar-ho a un programa és una composició del tipus: if (!isset($_GET["type"]){ accions a fer si no està posat el paràmetre o no se li ha donat valor; } • S'ha de crear la function putCard($pref, $num) que rebrà com paràmetres d'entrada una caràcter 'e' o 'n' i el número corresponent a la imatge d'una carta i mostrarà la carta en pantalla • S’ha de crear la function cardValue ($card) que rep el número corresponent a la imatge d'una carta (només el número) i retorna el seu valor en el joc. Per exemple si rep 32 (3 de bastos) retornaria 3, i si rebés 18 (cavall de copes) retornaria 10. • S’ha de crear la function playerGame($player, $pref, $cards) que executa el joc per a un jugador. Rebrà el número del jugador, el prefix del tipus de baralla i el nombre de cartes a jugar. Aquesta function en una línia identifica el jugador (Player 1, Player 2,...) i a la 2 http://php.net/manual/es/function.isset.php 15
  • 16. següent mostra les cartes que ha tirat i la seva puntuació. • S’ha de construir la function printResult($winnerQtty, $bestScore, $message) que rep la quantitat de guanyadors que hi ha, la puntuació obtinguda i un missatge (quins són els jugadors guanyadors) i escriu el missatge final adequat als guanyadors. Si hi ha un sol guanyador o Si hi ha més d'un guanyador. • El programa principal inicialitza comptadors, recull les dades i engega un bucle en el qual es fa jugar a un jugador cada cop i s'actualitzen els comptadors i el text que ha de tenir el missatge final. El codi del programa principal ja forma part de la plantilla i no s'ha de modificar. • Si l’estudiant ho creu convenient pot crear més function en el programa. Per comprovar el funcionament podeu fer servir http://prog.uoc.edu/pac2/pac2_exer6.php?type=n&gamers=3&qtty=3 Advertiment La comunicació entre el programa principal i els mòduls o bé entre mòduls, ha de realitzar-se obligatòriament mitjançant les paràmetres de les crides i de retorn. No es poden emprar variables de tipus global. 16
  • 17. Copieu aquí el codi de la vostra solució <?php /************* FUNCTION *************/ //Aquí va el codi de les funcions //data input function getData(&$prefix, &$gamers, &$cards) { $error = 0; if (isset($_GET["type"])) { $prefix = $_GET["type"]; $prefix = strtolower($prefix); //converts type in lowercase if (($prefix != "n")&&($prefix != "N")) $prefix = "e"; } else $prefix = "e"; if (isset($_GET["gamers"])) { $gamers = $_GET["gamers"]; if (($gamers < 2)||($gamers > 5)) $gamers = 3; } else $gamers = 3; if (isset($_GET["qtty"])) { $cards = $_GET["qtty"]; if (($cards < 1)||($cards > 5)) $cards = 5; } else $cards = 5; }//de dataInput function putCard($pref, $num) { print "<img src='".$pref.$num.".png'>"; } 17
  • 18. function cardValue($card) { $value = $card % 10 + 1; if ($value > 7) $value = 10; return ($value); }// de cardValue function playerGame($player, $pref, $cards) { $valMax = -1; print "<h4> Player $player</h4>"; for ($i=0; $i<$cards; $i++) { $actualCard = rand(0,39); putCard($pref, $actualCard); $actualValue = cardValue($actualCard); $valMax = max($valMax, $actualValue); } print "<b>Score: $valMax</b>"; return ($valMax); }//de playerGame function printResult($winnerQtty, $bestScore, $message) { if ($winnerQtty == 1) print "<h4> The winner is Player $message: $bestScore points </h4>"; else print "<h4> Players $message are winners: $bestScore points </h4>"; }//printResult // *********************MAIN********************** // init scores $winnerQtty = 0; $bestScore = 0; $message = ""; //get Data 18
  • 19. getData($type, $gamerQtty, $cardQtty); //Play for ($i=1; $i <= $gamerQtty; $i++) { $actualScore = playerGame ( $i, $type, $cardQtty); //update score if ($actualScore > $bestScore ) { $bestScore = $actualScore; $winnerQtty = 1; $message = $i; } else if ($actualScore == $bestScore ) { $winnerQtty++; $message = $message.", ".$i; } } //print results printResult($winnerQtty, $bestScore, $message); ?> 19