L'assignatura de programació tracta de l'aprenentatge al disseny bàsic d'algoritmes.
La resolució d'algoritmes per cada problema es basa a aplicar una sèrie d'instruccions i càlculs que depenent del problema aquest tindrà més instruccions o menys. Aquesta tasca és bàsica, per poder després entendre qualsevol llenguatge de programació és una assignatura que si no es té coneixements previs és molt abstracta.
A part de la confecció d'algoritmes amb pseudocodi també es practica la resolució d'algoritmes utilitzant el llenguatge de programació PHP.
2. Exercici 1: Tipus i expressions [20%]
Tasca: Donades les següents definicions de tipus, constants i variables
const
CONSTAI : enter = 10;
CONSTAR : real = 2.5;
CONSTAC : caràcter = 'y';
CONSTAS : cadena = "Hello";
fconst
var
i, j, k :enter;
x, y, z : real;
c, d: caràcter;
s, t: cadena;
b, v: booleà;
fvar
a) Avalueu les següents expressions amb potencials conflictes de tipus. Si l’expressió
és correcta digueu quin seria el tipus resultant d’avaluar-la. Si l’expressió és
incorrecta indiqueu l’error detectat. (recordeu que l'operador = és de relació):
i) CONSTAS ≠ realToString( x * i );
"Hello" ≠ realToString ("x" * i)
Incorrecta No es pot realitzar l'operacio de multiplicar ja que i es
un nombre enter
ii) codeToChar( j + i ) < d = v
Correcte perque compara un boolea amb un altre
iii) realToInteger ( x / CONSTAR ) > charToCode( c ) + j * k
Correcte ja que les expressions son
iv) CONSTAI div k * realToInteger ( CONSTAR div z )
10/k multiplicat per el resultar de la divisio entre el valor de la CONSTANTR entre z.
Com tots el valors de l'expressio son del tipus enter al fer la conversio de realToInterger,
es Correcta.
b) Creeu les següents expressions
2
3. v) Expressió que ens digui si al menys una de les tres variables enteres és superior
al valor de CONSTAR.
(enterAReal ( i) > CONSTAR) OR (enterAReal ( j) > CONSTAR) OR (enterAReal (k) >
CONSTAR)
vi) Expressió que digui si es compleix que la lletra inicial de la cadena t és anterior
alfabèticament al contingut de la variable d i, alhora, posterior al contingut de la
variable c.
(stringToChart (t) < d ) i ( stringToChart (t) > c )
3
4. Valoració
- Els apartats a) i b) valen 1 punt cadascun.
- Els subapartats i) a iv) 0.25 punts cadascun.
- Els subapartats v) i vi) 0.50 punts cadascun.
4
5. Exercici 2: Avaluació d’expressions [10%]
Tasca: Donades les definicions de tipus i variables de l’exercici 1 i suposant que les
variables tenen els valors següents:
i:=5, j:=2, k:=7, x:=0.3, y:=1.3, z:=-0.5, c:='d', d:='z',
s:="disc", t:="Keyboard", b:=cert, v:=fals
Calculeu el resultat de les expressions següents:
a) i mod j * realToInteger( x - y - z)
5mod2 * realToInteger (0.3 - 1.3 + 0.5)
1*(0)
0
b) CONSTAI < j ≠ b o k > i + j i s[1] ≤ c
10 < 2 ≠ cert o 7 > 5 i "disc" [1] ≤ 'd'
fals ≠ cert o cert i 'd' ≤ 'd'
cert o cert i cert
0
c) k mod i div realToInteger ( 3.0 * y + x )
7mod 5 div realToInteger ( 3.0 * 1.3+ 0.3 )
2 div realToInteger 10.2
2div10
0
d) no ( integerToReal ( i div j ) * y > CONSTAR ) ≠ ( - y * z < CONSTAR )
no ( integerToReal ( 2 ) * 1.3 > 2.5) ≠ ( - 1.3* -0.5< 2.5 )
no ( 2.6 > 2.5) ≠ ( 0.65< 2.5 )
no ( cert) ≠ ( cert )
fals≠ 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.
5
6. Exercici 3: Declaració de variables i especificació [10%]
Tasca: Declareu les variables necessàries i doneu les especificacions d’un algorisme que
resolgui els problemes següents (en cap cas s'ha d'escriure instruccions de
l'algorisme):
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ó.
a) Que donades les qualificacions numèriques de les tres pràctiques d’una assignatura,
els valors de les quals és 25%, 35% i 40%, digui si l’estudiant ha aprovat
l’assignatura
Pre
{
0<=n1<=10;
0<=n2<=10;
0<=n3<=10;
}
var:
n1, n2, n3:reals;
resultat: boolean;
fvar;
post
{
resultat=cert si 0,25*n1+0,35*n2+0,4*n3>=5;
resultat=fals en cas contrari
}
b) Que donat un número corresponent a un any del segle XXI i un altre número
corresponent a un mes digui quants dies tindrà el mes de l’any en qüestió.
Pre{ 2000<=any<2100; 1<=mes=<12; }
var: any:enter; mes:enter; dies:enter; fvar
Pos{dies que te el mes «mes» de l'any «any» }
c) Que donada una cadena de text i una paraula digui quants de cops està continguda
la paraula en la cadena de text
Pre{paraula no buida }
var: text:cadena; paraula:cadena; cops:enter; fvar
Post{ cops= a nombre de vegades que apareix la paraula al text}
Valoració
- Cada apartat val 0.33 punts.
6
7. - De cada apartat la pre i postcondició valen 0.2 punts (0.1 punts cadascuna), la declaració de
variables, 0.1 punts i el nom, 0.03 punts.
7
8. Exercici 4: Comprensió i seguiment d’algorismes [20%]
Tasca: En una composició seqüencial, cada instrucció s’executa un cop i només un i en
l’ordre que estan escrites. La composició alternativa permet, en canvi, que una instrucció
s’executi o no segons el resultat d’avaluar una expressió. Per acabar, la composició
iterativa permet que una instrucció s’executi més d’un cop en funció, també, de
l’avaluació d’una expressió.
Donat el següent algorisme, Donat el següent algorisme,
algorisme rar
var
i, n, p, q, t : enter;
fvar
n := readInteger(); 9
q := readInteger(); 5
p := readInteger(); 3
i := 1;
t := 10;
mentre i < n fer → 8 execucions
t := t * p + q; → 9105
si t > 5000 llavors
p := p + 1; {instrucció a}
sino si t > 500 llavors
q := q + 5; {instrucció b}
sino
q := q + 10; {instrucció c}
fsi
fsi
writeInteger ( t )
i := i + 1;
fmentre
falgorisme
c, c, c, b, b, a, a, a
8
9. digueu quants cops s’executaran les instruccions a, b i c si les dades que s'entren són 9,
5, 3.
vegades que s’executa
instrucció a 3
instrucció b 2
instrucció c 3
Valoració
- Cada apartat val 0.66 punts.
- Si no s’explica cap procés d’un apartat i és erroni, la seva puntuació serà 0.
9
11. Exercici 5: Traducció d’un algorisme a PHP [20%]
Tasca: Detector de primers especials
Existeix tres tipus de nombres primeres especials, els primers besons, els primers cosins
i els primers sexis. Es diu que dos números primers són besons si els separa només un
número (p.e. el 5 i el 7, separats pel 6), són cosins si estan separats per tres números
(p.e. 7 i 11, separats per 8,9 i 10) i es diu que són primers sexis (del llatí six: sis) si la
diferencia entre ells és de sis unitats (p.e. 23 i 29) . L’ algorisme inferior permet calcular si
una parella de números són primers besons, cosins o sexis.
Cal que ompliu la plantilla pac1_exer5_plantilla.php amb la traducció de l’algorisme a
PHP i renomeneu el fitxer a pac1_exer5.php
Indicacions per a PHP
Les dues dades s’entraran pel mètode $_GET en dos paràmetres de nom n1 i n2. La
crida ha de ser del tipus:
pac1_exer5.php?n1=13&n2=17
Per a comprovar el funcionament podeu fer servir
http://prog.uoc.edu/pac1/pac1_exer5.php?n1=13&n2=17
Valoració
- Traducció correcta de les expressions 0.5 punts
- Traducció correcta de les composicions seqüencials 0.5 punts
- Traducció correcta de les composicions alternatives 0.5 punts
- Traducció correcta de les composicions iteratives 0.5 punts
11
13. Exercici 6: Problema, algorisme i programa en PHP [20%]
Tasca: Mirar la xavalla de les butxaques
S’ha de simular que un grup de persones es miren la xavalla que porten a les
butxaques per veure qui porta més diners.
La quantitat de persones (people) i la quantitat màxima de monedes que duen en la
butxaca cadascú (max) es reben com arguments a la crida que ha de ser del tipus:
pac1_exer6.php?people=2&max=6
El programa s'escriurà a la plantilla pac1_exer6_plantilla.php que es canviarà de
nom a pac1_exer6.php pel lliurament
Indicacions preceptives:
Per a cada persona es mostrarà :
o en una primera línia, el retol #n People (on n és l’ordinal de la persona)
o en una segona línea una quantitat aleatòria de monedes inferior o igual a
l’argument max rebut en la crida i la suma de valors de les monedes
mostrades. Els tipus de cadascuna de les monedes que es mostrin també
s’escollirà de manera aleatòria.
En una darrera línia es dirà qui tenia més diners i la quantitat de diners que duïa.
Es faciliten les imatges per mostrar el contingut de les butxaques
1c.png 2c.png 5c.png 10c.png 20c.png 50c.png 1e.png 2e.png
13
14. Per a l'execució, totes les imatges se situaran a la mateixa carpeta de localhost que
el fitxer php
Es pot comprovar el funcionament a
http://prog.uoc.edu/pac1/pac1_exer6.php?people=2&max=6 Si es desitja es pot
canviar els valors dels paràmetres
Consells
Per tal d’obtenir nombres aleatoris es pot emprar la funció rand1
(a, b) que rep dos
números com paràmetre i retorna un valor aleatori dins de l’interval [a, b]. Una
manera d’aplicar això és extraure números aleatoris entre 1 i 8 i fer correspondre
cadascun dels números a cadascuna de les monedes.
Recordeu que el resultat d'un programa php és un document en HTML. En aquest
sentit es pot aprofitar la impressió de variables per anar construint el nom d'una
imatge. per exemple, les següents instruccions
$coin = '1e'; print "<img src='$coin.png'>";
donen com a resultat l'escriptura en la pàgina web de <img src='1e.png'>, és a dir,
el tag per posar una moneda d’un euro.
Valoració
- Si no es fan servir cap composició iterativa ni cap composició alternativa, la puntuació de
l’exercici serà 0.
1
http://php.net/manual/es/function.rand.php
14