PAC 1 Progamació UOC, Apuntes de Lenguaje Audiovisual. Universitat Oberta de Catalunya (UOC)
faranda1984
faranda1984

PAC 1 Progamació UOC, Apuntes de Lenguaje Audiovisual. Universitat Oberta de Catalunya (UOC)

20 páginas
1Número de descargas
22Número de visitas
Descripción
Asignatura: Programació: programes i sistemes d'autor I, Profesor: Antonio Ponce, Carrera: Multimèdia, Universidad: UOC
20 Puntos
Puntos necesarios para descargar
este documento
Descarga el documento
Vista previa3 páginas / 20
Esta solo es una vista previa
3 páginas mostradas de 20 páginas totales
Descarga el documento
Esta solo es una vista previa
3 páginas mostradas de 20 páginas totales
Descarga el documento
Esta solo es una vista previa
3 páginas mostradas de 20 páginas totales
Descarga el documento
Esta solo es una vista previa
3 páginas mostradas de 20 páginas totales
Descarga el documento

Estudis d’Informàtica, Multimèdia i Telecomunicacions

Programació

PAC1 – Document de solucions

SOLUCIONS

Exercici 1: Tipus i expressions [20%]

Tasca: Donades les següents definicions de tipus, constants i variables

const

CNST1: enter = 15;

CNST2: real = 2.5;

fconst

var

i, j: enter;

r1, r2, r3: real;

c, car: caràcter;

b1, b2: booleà;

fvar

a. Avaleu les expressions següents amb possibles errors sintàctics o semàntics.

• Si l’expressió és correcta, indicar quin seria el tipus (no valor) resultant d’avaluar-la.

• Si l’expressió és incorrecta, indicar si l’error és sintàctic o semàntic i, si és possible, la solució introduint o traient parèntesis.

i. enterAReal (i) * r2 div j Incorrecte, error semàntic, la multiplicació dóna per resultat un real, no es pot aplicar la divisió entera.

ii. r1 > r3 = b1 o c = car Correcte, el resultat seria un booleà.

iii. realAEnter(enterAReal(CNST1) / CNST2)div i = j Correcte, el resultat seria un booleà.

iv. CNST2 =enterAReal(r1) / r2 Incorrecte, error semàntic, r1 no és enter i no se li pot aplicar enterAReal

v. r1 < r2 < r3 Incorrecte, error semàntic, n’hi ha dues operacions. El resultat de la primera serà un booleà (cert o fals) i no es poy comparar amb un real.

b. Construïu les expressions següents (heu d’implementar una única expressió):

vi. Expressió per saber si la diferència entre r1 i r2 és superior a la diferència entre r3 i CNST1.

(r1 - r2) > (r3 - enterAReal(CNST1))

vii. Expressió per saber si la variable r3 és superior a 5 o inferior a 3

(realAEnter(r3) > 5) o (realAEnter(r3) < 3) o bé: (r3 > 5.0) o (r3 < 3.0)

Valoració

• Els apartats a) i b) valen 1 punt cadascun.

• Els subapartats i) a v) 0’20 punts cadascun.

• Els subapartats vi) i vii) 0’50 punts cadascun.

Exercici 2: Avaluació d’expressions [10%] Tasca: Donades les definicions de constants, tipus i variables de l’exercici 1

const

CNST1: enter = 15;

CNST2: real = 2.5;

fconst

var

i, j: enter;

r1, r2,r3: real;

c, car: caràcter;

b1, b2: booleà;

fvar

i suposant que les variables tenen els valors següents:

r2 := 10.0

r1 := 1.0

b1 := FALS

b2 := CERT

j := 10

Avaluar el resultat de les expressions següents:

a) enterAReal(CNST1)/5.0 * CNST2 > r2

15.0/5.0 * 2.5 > 10.0

7.5 > 10.0

FALS

b) CNST2 < r2 * enterAReal(CNST1) = FALS i r2 =

enterAReal(CNST1 - 5)

2.5 < 10.0 * enterAReal(15) = FALSO y 10.0 = enterAReal(10)

2.5 < 10.0 * 15.0 = FALS y 10.0 = 10.0

2.5 < 150.0 = FALS y 10.0 = 10.0

CIERTO = FALS y CERT

FALS i CERT

FALS

c) enterAReal(CNST1)/(r1*r2)<enterAReal(j div realAEnter(r2))

15.0/(1.0*10.0)<enterAReal(10 div 10)

15.0/10.0<enterAReal(1)

1.5<1.0

FALS

d) b2 i no (r1 = r2) i CNST2 * CNST2 < r1 * r2

CERT y no FALS y 2.5*2.5 < 1.0*10.0

CERT y CERT y 6.25 < 10.0

CERT y CERT y CERT

CERT

Valoració

• Cada apartat val 0’25 punts.

• Si només s’escriu el resultat final d’un apartat i és erroni, la seva puntuació serà 0.

Exercici 3: Resolució d’algorismes [10%]

Tasca: Resoldre l’algorisme (llenguatge algorísmic) que resolgui el problema següent:

Com ja sabreu ha crescut el nombre de casos d’obesitat en el nostre país i, per a

col·laborar en una campanya de salut, hemo decidit implementar un algorisme que ens calcularà el nostre IMC (índex de massa corporal).

Per fer-lo es demanarà el pes (en kg) i l’estatura de l’usuari (en metres). A partir d’aquestes dades calcularem l’IMC a partir de la fòrmula:

IMC = pes (Kg) / estatura2 (m)

Una vegada calculat l’IMC hem de dir si la persona en té:

Infrapès: IMC < 18.50

Normal: 18.50 <= IMC < 25

Sobrepès: 25 <= IMC < 30

Obesitat: IMC >= 30

Exemplo d’execució:

Introdueix la teva estatura: 1.85

Introdueix el teu pes: 85

El teu IMC: 24.83

Resultat del diagnòstic: Normal

Valoració

• L’exercici es valorarà en 1 punt. La correcta declaració de variables valen 0.2 punts. La correcta lectura (EE) i escriptura (SE) valen 0.2 punts. La resta de l’algorisme val 0.6 punts.

Copiar aquí el codi de la vostra solució

algorisme salut

var

pes, estatura, IMC: real;

fivar

escriureCadena(“Introdueix la teva estatura: “);

estatura:= llegirReal () ;

escriureCadena (“Entra el teu pes: “);

pes := llegirReal () ;

IMC := pes / (estatura * estatura) ;

escriureCadena (“El teu IMC és: “ , IMC) ;

si IMC < 18.50 alehores

escriure (“Resultat del diagnòstic: Infrapés”) ;

sino

si IMC >= 18.50 i IMC < 25 aleshores

escriureCadena (“Resultat del diagnòstic: Normal”) ;

sino

si IMC >= 25 i IMC < 30 aleshores

escriureCadena (“Resultat del diagnòstic: Sobrepès”) ;

sino

escriureCadena (“Resultat del diagnòstic: Obesitat”) ;

fisi

fisi

fisi

falgorisme

Exercici 4: Comprensió i seguiment d’algorismes [20%]

Tasca: Donat l’algorisme següent, const

MAX = 100;

fconst

var

valor, i, c, num, q: enter;

fvar

escriure (“Introduir un número entre l’1 i el 9:”) ;

valor := llegirEnter();

c := 0;

per a i:=1 fins MAX fer

num:=i;

q:=0;

mentre num > 0 fer

si num mod 10 = valor aleshores

q:=q+1;

fsi

num:=num div 10;

fmentre

si q > 1 aleshores

c:=c+1;

fsi

fper

escriure (“N’hi ha ”.enterACadena(c).” números entre 1 i 100 amb dos o més ”.enterACadena(valor)) ;

a. Dir què escriurà l’algorisme si la dada que s’hi introdueix en la lectura que es demana és un 8.

N’hi ha 1 número entre 1 i 100 amb dos o més 8

b. Quin és l’enunciat del problema que deu resoldre aquest algorisme?

Donat un valor, calcular quants números n’hi ha que contenguin dos o més vegades el valor donat.

Valoració

a) 0’5 punts. Si no s’explica cap procés i la resposta es errònia, la seva puntuació serà 0.

b) 1’5 punts. No s’admetrà una descripció literal del que fa l’algorisme. Es demana l’enunciat concret del problema (les dades que dóna i el que ha d’obtenir).

Exercici 5: Problema, algorime i programa en PHP [20%]

Tasca: Implementar en llenguatge PHP l’algorisme de l’exercici 4.

Indicacions:

• El número enter llegit de l’entrada estàndard en l’expressión

valor := llegirrEnter();

s’implementa en PHP amb el mètode $_GET. Així

$valor = $_GET[“v”];

• Per emular la divisió entera en PHP podeu utilitzar l’expressió

$num = (int) ($num / 10);

On l’expressió (int) davant d’un valor o del resultat d’altra expressió converteix el resultat en un enter.

• Heu d’omplir la plantilla pac1_exer5_plantilla.php amb la traducció de l’algorisme a PHP i canviar el seu nom a pac1_exer5.php. La crida serà

pac1_exer5.php?v=8

on 8 és un exemple. Podeu provar amb diferents valors.

• Es pot comprovar el funcionament en

http://prog.uoc.edu/pac1/pac1_exer5.php?v=8

• Escriviu el vostre nom i cognoms en el lloc indicat en el fitxer PHP.

Valoració

• Escriptura correcta del resultat 0.5 punts.

• Traducció correcta de l’algorisme 1.5 punts:

Copiar aquí el códi de la vostra solució

<?php

// Declaració de les constants.

define("MAX", 100);

$c = 0;

// Llegim el número.

$valor = $_GET["v"];

for ($i = 1; $i < MAX; $i++){

$num = $i;

$q = 0;

while ($num > 0){

if ($num % 10 == $valor){

$q = $q + 1;

}

// L’expressión (int) davant d’un valor o del

// resultat d’altra

// expressió, converteix el resultat en un enter. És // una forma de fer

// la divisió entera en PHP

$num = (int)($num / 10);

}

//Si es repeteix el, valor augmentem el comptador:

if ($q > 1){

$c = $c + 1;

}

}

print "N’hi Ha ".$c." números entre 1 i 100 que contenen dos o més ".$valor;

?>

Exercici 6: Problema, algorisme i programa en PHP [20%]

Tasca: Simular una sessió d’un jugador en una màquina escurabutxaques.

El programa rep en la crida una dada, de nom capital, un número enter que indica de quant diner es disposa quan es va a començar a jugar.

El joc implica una quantitat variable de partides. S’acabarà quan el jugador es quedi sense capital o quan hi hagi un guanyador que iguali o ultrapassi el doble del capital inicial (en la imatge d’exemple el capital inicial n’és 1 i el joc finalitza perquè el capital del jugador arriva a 3) Cada aposta té el valor determinat per la constant que es definirà amb el nom BET i el valor 0.5.

A l’iniciar el joc es mostrarà el capital inicial i, en cada tirada el número de jugada, les tres figures obtingudes, el guany de la tirada i el capital total després d’haver pagat l’aposta i, si s’escau, de cobrar els gaunys.

En finalitzar el joc es mostrarà un missatge que indiqui el motiu: per haver perdut tots els diners o per haver guanyat massa.

La taula de premis serà la següent:

Taula de premis Combinació Premi

Tres vegades la figura

100 vegades l’aposta

Tres figures iguals (excepte ) 100 vegades l’aposta

Dues vegades la figura 4 vegades l’aposta

Dues vegades altres figures iguals 2 vegades l’aposta Tres figures diferents 0

• Es pot comprovar el funcionament a

http://prog.uoc.edu/pac1/pac1_exer6.php?capital=1

El programa s’ha d’escriure en la plantilla pac1_exer6_plantilla.php que es canviarà de nom a pac1_exer6.php per al lliurment

Indicacions:

• No oblideu posar el vostre nom en el fitxer PHP.

• Es faciliten les 9 imatges per mostrar les figures

• Els fitxers d’imatge s’han d’ubicar en la mateixa carpeta on estigui el fitxer php i no es poden canviar de nom.

• Les tres imatge que han de sortir en cada tirada s’escolliran a l’atzar.

A tenir en compte

• Per declarar una constant amb nom, en php s’utilitza la funció define($name,$value)1. Per exemple define(“PI”, 3.14); crea la constant PI a la qual se li associa el valor 3.14

• La funció rand (min, max)2 és molt útil per generar valors aleatoris, però tan sols ho fa amb números, de forma que se aconsella utilitzar rand per generar números aleatoris entre 1 i 9 i programar el segment de programa que escolli la imatge a mostrar en funció

del número (per exemple 1→banana, 2→bell, etc. Si es dóna la figura el valor més alt, es pot simplificar alguna condició de les que regeixen les composicions d’accions.

• No oblideu que en cada tirada el capital s’ha de disminuir en el valor de la aposta, independentment de si després es guanya o no.

• En les proves de programació se aconsella utilitzar un capital petit (2, 3) per evitar l’ús molest del scroll del navegador per arribar al missatge final.

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

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

Valoració

• Desenvolupament del programa 2 punts

Copiar aquí el codi de la vostra solució

<?php

define ( "BET", 0.5);

$capitalInicial = (int)$_GET["capital"];

$actualCap = $capitalInicial;

$joc = 0;

print "<h3>Capital inicial: $capitalInicial </h3>";

while (($actualCap >= BET) && ($actualCap < $capitalInicial * 2)){

$uno = rand(1,9);

$dos = rand(1,9);

$tres = rand(1,9);

$juego++;

print "<h3> Joc $joc </h3>";

for ($i=0; $i<3; $i++){

// seleccionar tirada

if ($i == 0) $test = $uno;

else if ($i == 1) $test = $dos;

else $test = $tres;

// seleccionar nom imatge

switch ($test){

case 1: $imatge = "campana"; break;

case 2: $imatge = "cereza"; break;

case 3: $imatge = "ciruela"; break;

case 4: $imatge = "diamante"; break;

case 5: $imatge = "limon"; break;

case 6: $imatge = "naranja"; break;

case 7: $imatge = "racimo"; break;

case 8: $imatge = "trebol"; break;

case 9: $imatge = "siete";

}// del switch

print "<img src='$imatge.jpg'>";

}// del for

$guany = 0;

if (($uno == $dos) && ($uno == $tres)){

if ($uno == 9) $ guany = BET * 100;

else $ guany = BET * 6;

}else if (($uno == $dos) || ($uno == $tres) || ($dos == $tres)){

if (($uno + $dos == 18) || ($uno + $tres == 18) || ($dos + $tres == 18)) $ guany = BET * 4;

else $ guany = BET * 2;

}

$actualCap += ($guany - 0.5);

print "<br /> Guany: <b>$ guany </b>. Capital actual: $actualCap";

}//del while

print "<h3>";

if ($actualCap >= $capitalInicial) print "Has guanyat!";

else print "Has perdut!";

print "</h3>";

?>

No hay comentarios
Esta solo es una vista previa
3 páginas mostradas de 20 páginas totales
Descarga el documento