PAC 1 de l'assignatura de Programació del Grau Multimèdia de la UOC. Per a baixar-se els arxius de PHP, visitar la meva wiki: http://raco-vermell.wikispaces.com/PROGRAMACI%C3%93
1. Estudis d’Informàtica, Multimèdia i Telecomunicació
Programació
PAC1 — Primera Prova d'Avaluació Continuada
Cognoms: Ribas Tur
Nom: Paquita
Indicacions generals:
Raoneu i justifiqueu totes les respostes.
Les respostes incorrectes no disminueixen la nota.
Per a dubtes i aclariments sobre l’enunciat, adreceu-vos al consultor responsable de la
vostra aula.
Lliurament:
1. S'ha de respondre les preguntes al mateix document de l'enunciat que rebrà el nom
CognomsNomP_PAC1.doc (o CognomsNomP_PAC1.odt)
2. S'ha d'enviar la codificació de les preguntes 9 i 10 mitjançant els arxius
PAC1_Exer09.php PAC1_Exer10.php que es construiran sobre les plantilles
adjunta. És especialment important respectar el nom d'aquests arxius php.
3. Els tres fitxers es comprimiran en un únic arxiu de format zip o rar de nom
CognomsNomP_PAC1.zip (o CognomsNomP_PAC1.rar) que es lliurarà a la bústia
de "Lliurament i registre d'AC"
4. Data límit per lliurar la solució: dia, 17 d'octubre de 2011 (a les 23:59 hores).
És imprescindible respectar el format i data d’entrega. La no adequació a
aquestes especificacions pot suposar la no avaluació de la PAC.
1
2. Exercici 1: Identificació de tipus [10%]
Objectius: Mostrar coneixements elementals sobre els tipus, com manipular-los i
identificar els tipus resultants d’efectuar operacions entre objectes elementals del
llenguatge algorísmic.
Materials: M1 i M2 fins M2.1
Tasca: Donades les següents definicions de tipus, constants i variables
tipus
category = {junior, senior, veteran, master, absolute};
ftipus
const
CONSTA: real = 10.0;
fconst
var
c: caracter;
isIt: boolea;
cat: category;
x, y, z: enter;
r: real;
fvar
indiqueu quin es el tipus resultant d’avaluar les expressions següents (recordeu que
l'operador = és de relació):
i) x div realToInteger(r*integerToReal(3*x) )
enter div realToInteger(real*integerToReal(3*enter))
enter div realToInteger(real*integerToReal(enter))
enter div realToInteger(real*real)
enter div realToInteger(real)
enter div enter
enter
ii) islt = fals i c = 'C' o c='c'
És un booleà, perquè té i com operador intern i valor fals.
iii) integerToReal(x mod charToInteger(c))/CONSTA
integerToReal(enter mod charToInteger(caràcter))/10.0
integerToReal(enter mod enter)/real
integerToReal(enter)/real
real/real
real
2
3. iv) realToInteger(r) > x o junior > senior
És un booleà perquè té o com operador i els valors cert o fals.
3
4. Exercici 2: Sintaxi d’expressions [10%]
Objectius: Mostrar l’habilitat en la confecció d’expressions en llenguatge algorísmic.
Utilització apropiada d’objectes elementals del llenguatge algorísmic per a la confecció
de les expressions donades unes declaracions prèvies d’objectes elementals.
Materials: M1 i M2 fins M2.1
Tasca: Donades les definicions de tipus, constants i variables de l’exercici 1, escriviu,
en llenguatge algorísmic, les expressions següents:
a) Expressió que calculi el percentatge, en tant per cent, de x respecte d’y.
percentatge:= (x/y)*100
b) Expressió que ens doni un real, calculat a partir de dividir x entre y, fer-li el
quadrat i multiplicar-lo per z.
x, y, z: enter
{ Pre: x=X i y=Y i z=Z}
expressioReal:= ((x/Y) 2 * Z)
{ Post: ((X/Y)2)*Z=real}
c) Expressió que determini si el valor de cat es junior o senior.
(cat==junior) o (cat==senior)
d) Expressió que determini si x és múltiple d’y.
(x mod y =0)
4
5. Exercici 3: Avaluació d’expressions [10%]
Objectius: Mostrar l’habilitat en la manipulació d’expressions en llenguatge algorísmic.
Donades unes declaracions prèvies d’objectes elementals, saber explicar-ne com
efectuar la seva avaluació i donar-ne el resultat correcte.
Materials: M1 i M2 fins M2.1
Tasca: Donades les definicions de tipus i variables de l’exercici 1 i suposant que les
variables tenen els valors següents:
x:= 2; y:= 10; cat := vetera; c := '5'; r := 30.5;
Calculeu el resultat de les expressions següents:
a) integerToReal (x) * r * 60.0
integerToReal (2)* 30.5 * 60.0
2.0 * 30.5 * 60.0
3660
b) x*y mod realToInteger (r/CONSTA) + charToInteger ('0')
2 * 10 mod realToInteger (30.5/10.0) + charToInteger (‘0’)
/*He calculat primerament el que està dintre del parèntesi*/
2 * 10 mod realToInteger (3,05) + charToInteger (‘0’)
/*He calculat en segon lloc el canvi de tipus*/
2 * 10 mod 3 + 0
/*He calculat el producte*/
20 mod 3
2
c) cat < vetera i CONSTA = r
vetera < veterà i 10.0 = 30.5
fals
d) (x mod y) * 20 div (realToInteger(r) * 2 div ((y+2) div (x+4)))
(2 mod 10) * 20 div (realToInteger(30.5) * 2 div ((10+2) div (2+4)))
/*He calculat primerament el que està dintre dels parèntesi*/
2 * 20 div (30 * 2 div (12 div 6))
5
6. /*He calculat en segon lloc el canvi de signe*/
2 * 20 div (30 * 2 div 2)
/*He calculat el producte*/
40 div (60 div 2)
40 div 30
1
6
7. Exercici 4: Correctesa d’expressions [10%]
Objectius: Mostrar l’habilitat en la manipulació d’expressions en llenguatge algorísmic.
Donades unes declaracions prèvies d’objectes elementals, raonar la correctesa de
l’expressió, argumentant els motius d’incorrecció si n’hi ha.
Materials: M1 i M2 fins M2.1
Tasca: Donades les definicions de tipus, constants i variables de l’exercici 1, digueu si
són correctes o no les expressions següents, independentment del que pretenguin
calcular. En cas que no ho siguin, especifiqueu-ne la raó o raons.
a) (cat > junior) i ((c = '0') o (charToInteger(c) + x = 'c'))
No és correcte, ja que c és un caràcter, x és un enter. Amb charToInteger(c)
passem de caràcter a enter. Si sumem enter + enter no pot donar un caràcter.
b) (r * CONSTA) div realToInteger(x)
No és correcte.
L’argument realToInteger(x) ja és un enter.
L’expressió hauria de ser:
(r * CONSTA) div integerToReal(x)
c) 2 * x + 5 = 0 > isIt
És correcte:
Si fem les operacions, primer aniria *, després la suma, després l’igual i
finalment els símbols > <.
d) realToInteger(integerToReal(y*y)/r) + 2
És correcte, ja que:
realToInteger(integerToReal(enter*enter)/real) + enter
realToInteger(integerToReal (enter)/real) + enter
realToInteger(real/real) + enter
realToInteger(real) + enter
enter + enter
enter
7
8. e) IntegerToChar (charToInteger( IntegerToChar( CONSTA ) ) ) = ‘C’
No és correcte, ja que:
IntegerToChar (charToInteger (IntegerToChar(real))) = caràcter
IntegerToChar (charToInteger (aquí està incorrecte, ja que CONSTA és real, no
enter)...
L’expressió hauria de ser:
IntegerToChar (charToInteger (realToChar(real))) = caràcter
IntegerToChar (charToInteger (caràcter)) = caràcter
IntegerToChar (enter) = caràcter
caràcter = caracter
f) (y>= 2 o x = 0) i (cat = absoluta)
No és correcte, “absoluta” no és cap del tipus enumerats en category.
L’expressió està escrita incorrectament.
Seria correcte:
(y ≥ 2 o x = 0) i (cat = absolute)
8
9. Exercici 5: Algorisme en llenguatge natural i especificacions [10%]
Objectius:Descriure un algorisme en paraules (llenguatge natural) i donar les
especificacions (pre i postcondicions). Tan sols es pretén detectar l’habilitat en
identificar els continguts dels diferents elements així com mostrar un coneixement
bàsic de l’algorisme descrit.
Materials: M1 i M2 fins M2.2
Tasca: Descriviu i especifiqueu l’algorisme a seguir per tal imprimir un document que
teniu desat en el disc dur de l’ordinador (evidentment no hi haurà solució única. Podeu
suposar que teniu la impressora ben configurada, i que la teniu connectada a
l’ordinador)
{ Pre: L’ordinador està connectat al corrent i a la impressora, amb el document desant
en el disc dur. L’ordinador funciona perfectament i té instal·lat el programa adequat per
a obrir el document que volem imprimir. L’ordinador té la impressora ben configurada.
La impressora està connectada al corrent i a l’ordinador. Té prou tinta per a imprimir el
document i té suficient paper en la safata d’alimentació de paper. La llum elèctrica
funciona perfectament.}
Encendre l’ordinador
Encendre la impressora
Seleccionar el document de la llista dels documents que tenim dintre l’ordinador
Obrir-lo amb el programa adequat
Seleccionar l’opció d’imprimir des del programa
Comprovar les propietats d’impressió
Polsar definitivament el botó d’imprimir
{ Post: El document que teníem desat dintre de l’ordinador s’ha imprès.}
9
10. Exercici 6: Declaració de variables i especificació [10%]
Objectius: Donada la descripció d’un problema, declarar les variables necessàries i
donar les especificacions (les precondicions i els postcondicions) de l’algorisme.
Materials: M1 i M2 fins M2.2
Tasca: Declareu les variables necessàries i doneu les especificacions d’un algorisme
que resolgui el problema següent (no s'ha d'escriure l'algorisme):
“Donats dos valors numèrics reals i majors que zero, determineu la deferència entre la
mitjana aritmètica i la mitjana geomètrica.”
En concret, es demana que definiu les variables necessàries per representar les dades
del problema (apartat var…fvar d’un algorisme) i que doneu la precondició i la
postcondició.
x, y: real
mA, mG, dAG: real
{ Pre: x=X i y =Y i X;Y >0 }
mitjanaAritmetica //calcular la mitjana aritmètica
mitjanaGeometrica //calcular la mitjana geomètrica
diferenciaAritmeticaGeometrica:= mitjanaAritmetica - mitjanaGeometrica
{ Post: mA=X+Y/2 i mG=√2 (X*Y) i dAG= mA-mG}
10
11. Exercici 7: Comprensió d’algorismes [10%]
Objectius: Avaluar coneixements bàsics d’algorísmica. Estructura general d’un
algorisme i l’ús d’estructures algorísmiques bàsiques. Es plantegen preguntes
d’interpretació donat un algorisme en llenguatge algorísmic.
Materials: M1 i M2 fins M2.3
Tasca: Donat el següent algorisme,
algorisme nameAlgorithm
var
low, high, x : enter;
fvar
{Pre: a l’entrada estàndard hi ha dos nombres enters LOW i HIGH}
low:=readInteger();
high:=readInteger();
x:= 0;
mentre LOW < HIGH fer
si LOW mod 5 = 0 llavors
x := x + 1;
fsi
LOW = LOW + 1
fmentre
writeInteger(x);
{Post: Calcula i escriu per pantalla x, que és el nombre de múltiples de 5 que hi
ha entre el LOW i HIGH ambdós inclosos }
falgorisme
Completeu les parts que falten
11
12. Exercici 8: Modificació del comportament d’un algorisme [10%]
Objectius: Avaluar coneixements bàsics d’algorísmica. L’avaluació va un pas més
enllà de l’interpretació bàsica en plantejar modificacions del mateix. Es demanen
modificacions al comportament d’un algorisme ja donat per tal de que aquest pugui
contemplar situacions diferents.
Materials: M1 i M2 fins M2.3
Tasca: Considerant l’algorisme de l’exercici 7, modifiqueu-lo emprant la composició
per...fper i feu que escrigui per pantalla els múltiples de 5 que hi ha entre el low i high.
per i := LOW fins HIGH
si i mod 5 = 0 llavors
x := x + 1
fsi
fper
12
13. Exercici 9: Codificació [10%]
Objectius: Donat un llistat en llenguatge algorísmic, traduir-lo a PHP. Treballar les
assignacions i comparacions, que en PHP requereixen utilitzar adientment el = i el ==.
També treballar la recollida de seqüències de dades.
Materials: M1 i M2 fins M2.3
Tasca: L’algorisme següent va llegint els valors que entren per l’entrada estàndard (el
número de valors que cal llegir se sap a priori mitjançant el valor que s’assigna llegint
pel canal estàndard d’entrada a la variable high) i troba el que és el més gran de tots
ells. Codifica’l en llenguatge PHP.
L'entrada de dades s'haurà de realitzar pel mètode $_GET de manera que funcioni
amb una crida del tipus: PAC1_exer9.php?cadena=3 4 5 8 4 2 1 18 12&high=9
Per tal d'obtenir de la cadena $string un a un els números que la formen, on s'ha fet
servir com separador el caracter $c, podeu emprar consecutivament:
$var1 = explode ($c, $string);1
$var2 = array_shift($var1);2
Podeu observar i veure com funciona l'arxiu example.php que s'adjunta a l'enunciat.
La crida és del tipus example.php?cadena=5,6,7,8,91,2,3,4,5,5,676767,78,8,89 i fa
servir com separador una coma.
algorisme greaterNumber;
var
n, m, i, high: enter;
fvar
{Pre: CERT }
high:=readInteger();
si high > 0 llavors
m:=readInteger();
i:=1;
mentre( i < high ) fer
n:=readInteger();
si ( n > m ) llavors
m:= n;
fsi
i :=i +1;
fmentre
sino
m := 0
fsi
1
http://es2.php.net/manual/es/function.explode.php
2
http://es2.php.net/manual/es/function.array-shift.php
13
14. writeInteger(m);
{Post: m és el màxim valor dels enters llegits }
falgorisme
<?php
$cadena = $_GET ["cadena"];
$high = $_GET["high"];
$numeros =explode (' ', $cadena);
// Pre: CERT
if ($high > 0) {
$m = array_shift($numeros);
$i = 1;
while ($i < $high) {
$n = array_shift($numeros);
if ($n > $m) {
$m = $n;
};
$i = $i + 1;
};
} else {
$m = 0;
};
// escrivim els resultats
print "$high números entrats: $cadena <br />";
print "Major valor: $m <br />";
//Post: m és el màxim valor dels enters llegits
?>
14
15. Exercici 10: Bucles i PHP [10%]
Objectius: Avaluar coneixements d’algorísmica posant èmfasi en les composicions
iteratives. Es demana construir un programa en què el seu nucli està format per bucles
Materials: M1 i M2 fins M2.3
Tasca: Tothom coneix les taules de multiplicar fins el 10 i sap recitar-les d'una tirada.
Dissenyeu un programa que rebi un valor en la variable $numero i escrigui les taules
de multiplicar fins la de $numero. Si el valor rebut és inferior a 1 o superior a 10,
donarà l'avís "El valor a entrar ha d'estar comprès estre 1 i 10".
L'entrada de dades s'haurà de realitzar pel mètode $_GET de manera que funcioni
amb una crida del tipus: PAC1_exer10.php?numero=4
<?php
$numero = $_GET ["numero"];
if ($numero <1 or $numero>10) {
print "El valor ha d'estar comprès entre 1 i 10 <br />";
} else {
for ($i = 1; $i <= $numero; $i++) {
print "TAULA DEL $i <br />";
for ($j = 1; $j <= 10; $j++) {
$producte = $i * $j;
print "$i x $j = $producte <br />";
};
print "<br />";
}
};
?>
15