1. Espai
grapa
Examen 2013/14-1
Assignatura
Codi
06.505 15 01 14 EX
Hora inici
06.505
Programació
Data
15/01/2014
18:30
Enganxeu en aquest espai una etiqueta identificativa
amb el vostre codi personal
Examen
Fitxa tècnica de l'examen
•
Comprova que el codi i el nom de l’assignatura corresponen a l’assignatura en la qual estàs
matriculat.
•
Només has d’enganxar una etiqueta d’estudiant a l’espai corresponent d’aquest full.
•
No es poden adjuntar fulls addicionals.
•
No es pot realitzar la prova en llapis ni en retolador gruixut.
•
Temps total: 2 h.
•
En cas que els estudiants puguin consultar algun material durant l’examen, quin o quins
materials poden consultar?
Cap
•
Valor de cada pregunta: Pregunta 1 [30%], Pregunta 2 [30%] i Pregunta 3 [40%]
•
En cas que hi hagi preguntes tipus test: Descompten les respostes errònies?
•
Indicacions específiques per a la realització d’aquest examen:
Enunciats
Pàgina 1 de 6
NO
Quant?
2. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
15/01/2014
18:30
Pregunta 1 [30%]
Un despatx d’advocats, de cara a la facturació de minutes, anota en la fitxa electrònica de cada
client la dedicació al seu expedient que hi dedica cada membre del despatx. La fitxa electrònica
genera una seqüència del tipus
{M1 t1 M2 t2 .... Mn tn -1} on
•
Mi és el codi de la persona que ha dedicat temps a l’expedient del client. Els codis es
distribueixen de la següent forma:
o Entre 1 al 10 corresponen als socis
o Entre 11 al 100 corresponen als advocats
o A partir del 101 corresponen a passants
•
ti és el temps, expressat en minuts, dedicat a l’expedient
•
-1 és el número -1 que indica la fi de la seqüència electrònica
El temps de cada membre del despatx té diferent valoració:
• Soci: 550 € / hora
• Advocat: 150 € / hora
• Passant: 50 €/hora
Es demana construir el mòdul computeBill (acció o funció) que llegeixi la seqüència electrònica
de l’entrada estàndard i retorni el total de la factura.
S’ha de justificar la tria del tipus de mòdul.
Es tracta d’una funció perquè retorna un únic valor.
funció computeBill(): real
const
minutePartner: real = 550.0/60.0;
minuteAttorney: real = 150.0/60.0;
minuteIntern: real = 50.0/60.0;
fconst
var
member, minutes: enter;
total, minuteValue: real;
fvar
total := 0.0;
member := readInteger();
Pàgina 2 de 6
3. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
15/01/2014
18:30
mentre (member > 0) fer
minutes := readInteger();
si (member>100) llavors
minuteValue := minuteIntern;
sino si (member >10) llavors
minuteValue := minuteAttorney;
sino
minuteValue := minutePartner;
fsi
fsi
total := total + integerToReal(minutes)*minuteValue;
member := readInteger();
fmentre
retornar total
faccio
Pàgina 3 de 6
4. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
15/01/2014
18:30
Pregunta 2 [30%]
Per dissenyar un joc d’escacs per ordinador s’opta per representar el tauler mitjançant una taula
de taules del tipus tauler que s’ha definit:
tipus
row : taula [8] de enter
chessboard: taula [8] de row;
ftipus
var
tauler: chessboard;
fvar
A cada posició de tauler es posa un número amb els següents significats:
• 0 → casella buida
• 1 → peó
• 2 → torre
• 3 → cavall
• 4 → alfil
• 5 → reina
• 6 → rey
Les peces blanques tenen valors positius mentre que les negres tenen els mateixos valors però
negatius.
Es demana construir el mòdul fullChessboard que rebi una variable del tipus chessboard y ens
digui si sobre el Tauler hi ha el màxim de fitxes de cada bàndol.
S’ha de justificar la tria del tipus de mòdul:
Es tractarà d’una funció perquè retornarà un valor cert o fals
funció fullChessboard (t: chessboard): booleà
var
i, j, ocupat: enter;
fvar
ocupat := 0;
per i := 1 fins 8 fer
per j := 1 fins 8 fer
si t[i][j] ≠ 0 llavors
ocupat := ocupat + 1;
fsi
fper
fper
retornar (ocupat = 32);
ffuncio
Pàgina 4 de 6
5. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
15/01/2014
18:30
Pregunta 3 [40%]
Un laboratori de recerca psicològica esta fent un estudi de les ludopaties, amb motiu del qual
tenen previst fer una enquesta a 10000 persones que assisteixen a casinos.
S’ha de crear una data estructurada candidate capaç d’emmagatzemar les dades d’una enquesta
° Sexe de l’enquestat (‘M’ o ‘F’)
° Edat de l’enquestat
° Freqüència de joc (quants cops al mes van al casino)
° Els tres jocs preferits posats per ordre (‘R’ → ruleta, ‘P’ → Póquer, ‘B’ → Black Jack, ‘H’ →
Hazzard, 'J' -> Jackpot, ‘M’ -> màquines escurabutxaques, 'L'-> Loto)
° La quantitat de diners aproximada que destinen al joc cada mes
•
Dissenyeu la dada estructurada candidate
tipus
candidate = tupla
sex : caracter;
age, freq : enter;
money : real;
favorite : taula [3] de caracter;
ftupla
ftipus
Per emmagatzemar la totalitat de fitxes s'ha creat una nova dada estructurada que permet
mantenir les dades de fins les 10000 enquestes.
surveySet = tupla
qtty : integer;
survey: taula [10000] de candidate;
ftupla
La quantitat d'enquestes que en cada moment estaran emmagatzemades, ve indicada pel camp
qtty, i les dades de les enquestes ocupen sempre les primeres qtty posicions de la taula survey.
També s'ha creat la variable researchData del tipus surveySet que és on s'han carregat les
dades de les enquestes ja realitzades.
•
Escriviu l'expressió que comprova si Jackpot és el joc més preferit del darrer jugador
incorporat a researchData
researchData.survey[researchData.qtty].favorite[1]='J'
Pàgina 5 de 6
6. Assignatura
Programació
•
Examen 2013/14-1
Codi
Data
Hora inici
06.505
15/01/2014
18:30
Creeu el mòdul (acció o funció, el més adequat) que rebi researchData i retorni la despesa
mensual mitjana dels jugadors incorporats a la dada estructurada. S'ha de justificar la tria de
tipus de mòdul realitzada
Funció perquè retorna un únic valor.
funció moneyAverage(data: surveySet): real
var
qtty, i: enter;
total: real;
fvar
total := 0;
qtty := data.qtty;
per i:=1 fins qtty fer
total := total + data.survey[i].money;
fper
retorna total/enterAReal(qtty);
ffuncio
Pàgina 6 de 6
7. Espai
grapa
Examen 2013/14-1
Assignatura
Codi
06.505 18 01 14 EX
Hora inici
06.505
Programació
Data
18/01/2014
12:00
Enganxeu en aquest espai una etiqueta identificativa
amb el vostre codi personal
Examen
Fitxa tècnica de l'examen
•
Comprova que el codi i el nom de l’assignatura corresponen a l’assignatura en la qual estàs
matriculat.
•
Només has d’enganxar una etiqueta d’estudiant a l’espai corresponent d’aquest full.
•
No es poden adjuntar fulls addicionals.
•
No es pot realitzar la prova en llapis ni en retolador gruixut.
•
Temps total: 2 h.
•
En cas que els estudiants puguin consultar algun material durant l’examen, quin o quins
materials poden consultar?
•
Valor de cada pregunta: Pregunta 1 [30%], Pregunta 2 [30%] i Pregunta 3 [40%]
•
En cas que hi hagi preguntes tipus test: Descompten les respostes errònies?
•
Indicacions específiques per a la realització d’aquest examen:
Enunciats
Pàgina 1 de 6
NO
Quant?
8. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
18/01/2014
12:00
Pregunta 1 [30%]
T-Shirt & Company fabrica distribueix samarretes per Internet. El programa de venda genera
diàriament una seqüència amb les dades de les vendes del tipus
{M1 T1 Q1 M2 T2 Q3.... Mn Tn Qn -1} on
•
Mi és el codi del model, un número enter:
•
Ti és la talla ( que pot prendre valors L, M, S)
•
Qi és la quantitat de samarretes comprades d’aquet model i talla
•
-1 és el número -1 que indica la fi de la seqüència electrònica
Els preus que tenen les samarretes depenen del model:
o Codi entre 1 i 99 a 25 € la unitat
o Codi entre 100 i 500 a 18 € la unitat
o Codi major a 500 a 15 € la unitat
Es demana construir el mòdul dailyAmount (acció o funció) que llegeixi la seqüència electrònica
de l’entrada estàndard i retorni el valor total de les vendes diàries.
S’ha de justificar la tria del tipus de mòdul.
Es tracta d’una funció perquè retorna un únic valor.
funció dailyAmount (): enter
const
CHEAP: enter = 15;
MEAN: enter = 18;
EXPENSIVE: enter = 25;
fconst
var
code, qtty, actualPrice, total: enter;
size: character;
fvar
total := 0;
code := readInteger();
mentre (code > 0) fer
size := readCharacter();
qtty := readInteger();
si (codi>=500) llavors
Pàgina 2 de 6
9. Assignatura
Programació
Examen 2013/14-1
Codi
Pàgina 3 de 6
Hora inici
06.505
actualPrice := CHEAP;
sino si (codi>=100) llavors
actualPrice := MEAN;
sino
actualPrice := EXPENSIVE;
fsi
fsi
total := total + qtty * actualPrice;
code := readInteger();
fmentre
retornar total
faccio
Data
18/01/2014
12:00
10. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
18/01/2014
12:00
Pregunta 2 [30%]
Per dissenyar un joc d’escacs per ordinador s’opta per representar el tauler mitjançant una taula
de taules del tipus tauler que s’ha definit:
tipus
row : taula [8] de enter
chessboard: taula [8] de row;
ftipus
var
tauler: chessboard;
fvar
A cada posició de tauler es posa un número amb els següents significats:
• 0 → casella buida
• 1 → peó
• 2 → torre
• 3 → cavall
• 4 → alfil
• 5 → reina
• 6 → rey
Les peces blanques tenen valors positius mentre que les negres tenen els mateixos valors però
negatius.
Es demana construir el mòdul putChessPawn que rebi una variable del tipus chessboard, la
retorni amb tots els peons, i només els peons, posats al lloc inicial del joc i la resta de les
posicions sense peces.
S’ha de justificar la tria del tipus de mòdul.
Es tractarà d’una acció perquè modifica la mateixa taula que rep
acció putChessPawn (entsor t: chessboard)
var
i, j enter;
fvar
per i := 1 fins 8 fer
per j := 1 fins 8 fer
si i≠2 i i≠7 llavors //aquests primer per estalviar comparacions
t[i][j] := 0;
sino si i = 7 llavors
t[i][j] := 1;
sino
t[i][j] := -1;
fsi
fsi
fper
fper
faccio
Pàgina 4 de 6
11. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
18/01/2014
12:00
Pregunta 3 [40%]
Un laboratori de recerca psicològica esta fent un estudi de les ludopaties, amb motiu del qual
tenen previst fer una enquesta a 10000 persones que assisteixen a casinos.
S’ha de crear una data estructurada candidate capaç d’emmagatzemar les dades d’una enquesta
° Sexe de l’enquestat (‘M’ o ‘F’)
° Edat de l’enquestat
° Freqüència de joc (quants cops al mes van al casino)
° Els tres jocs preferits posats per ordre (‘R’ → ruleta, ‘P’ → Póquer, ‘B’ → Black Jack, ‘H’ →
Hazzard, 'J' -> Jackpot, ‘M’ -> màquines escurabutxaques, 'L'-> Loto)
° La quantitat de diners aproximada que destinen al joc cada mes
•
Dissenyeu la dada estructurada candidate
tipus
candidate = tupla
sex : caracter;
age, freq : enter;
money : real;
favorite : taula [3] de caracter;
ftupla
ftipus
Per emmagatzemar la totalitat de fitxes s'ha creat una nova dada estructurada que permet
mantenir les dades de fins les 10000 enquestes.
surveySet = tupla
qtty : integer;
survey: taula [10000] de candidate;
ftupla
La quantitat d'enquestes que en cada moment estaran emmagatzemades, ve indicada pel camp
qtty, i les dades de les enquestes ocupen sempre les primeres qtty posicions de la taula survey.
També s'ha creat la variable researchData del tipus surveySet que és on s'han carregat les
dades de les enquestes ja realitzades.
•
Escriviu l'expressió que comprova si el primer jugador incorporat a researchData té el
pòquer entre els seus jocs favorits
researchData.survey[1].favorite[1]='P' o
researchData.survey[1].favorite[3]='P'
researchData.survey[1].favorite[2]='P' o
Pàgina 5 de 6
12. Assignatura
Programació
•
Examen 2013/14-1
Codi
Data
Hora inici
06.505
18/01/2014
12:00
Creeu el mòdul (acció o funció, el més adequat) que rebi researchData i retorni la quantitat
de dones que juguen 3 més cops al mes
funció gamerWomen(data: surveySet): enter
var
total, qtty, i: enter;
fvar
total := 0;
qtty := data.qtty;
per i:=1 fins qtty fer
si (data.survey[i].sex='F') i (data.survey[i].freq>2) llavors
total := total + 1;
fper
retorna total;
ffuncio
Pàgina 6 de 6
13. Espai
grapa
Examen 2013/14-1
Assignatura
Codi
06.505 25 01 14 EX
Hora inici
06.505
Programació
Data
25/01/2014
15:30
Enganxeu en aquest espai una etiqueta identificativa
amb el vostre codi personal
Examen
Fitxa tècnica de l'examen
•
Comprova que el codi i el nom de l’assignatura corresponen a l’assignatura en la qual estàs
matriculat.
•
Només has d’enganxar una etiqueta d’estudiant a l’espai corresponent d’aquest full.
•
No es poden adjuntar fulls addicionals.
•
No es pot realitzar la prova en llapis ni en retolador gruixut.
•
Temps total: 2 h.
•
En cas que els estudiants puguin consultar algun material durant l’examen, quin o quins
materials poden consultar?
Cap
•
Valor de cada pregunta: Pregunta 1 [30%], Pregunta 2 [30%] i Pregunta 3 [40%]
•
En cas que hi hagi preguntes tipus test: Descompten les respostes errònies?
•
Indicacions específiques per a la realització d’aquest examen:
Enunciats
Pàgina 1 de 6
NO
Quant?
14. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
25/01/2014
15:30
Pregunta 1 [30%]
T-Shirt & Company fabrica distribueix samarretes per Internet. El programa de venda genera
diàriament una seqüència amb les dades de les vendes del tipus
{M1 T1 Q1 M2 T2 Q3.... Mn Tn Qn -1} on
•
Mi és el codi del model, un número enter:
•
Ti és la talla ( que pot prendre valors L, M, S)
•
Qi és la quantitat de samarretes comprades d’aquet model i talla
•
-1 és el número -1 que indica la fi de la seqüència electrònica
Els preus que tenen les samarretes depenen de la talla:
o L a 25 €
o M a 22 €
o S a 20 €
Es demana construir el mòdul dailyAmount (acció o funció) que llegeixi la seqüència electrònica
de l’entrada estàndard i retorni el valor total de les vendes diàries.
S’ha de justificar la tria del tipus de mòdul.
Es tracta d’una funció perquè retorna un únic valor.
funció dailyAmount (): enter
const
LITTLE: enter = 20;
MEDIUM: enter = 22;
LARGE: enter = 25;
fconst
var
code, qtty, actualPrice, total: enter;
size: character;
fvar
total := 0;
code := readInteger();
mentre (code > 0) fer
size := readCharacter();
qtty := readInteger();
si (size = ‘L’) llavors
Pàgina 2 de 6
15. Assignatura
Programació
Examen 2013/14-1
Codi
Pàgina 3 de 6
Hora inici
06.505
actualPrice := LARGE;
sino si (size = ‘M’) llavors
actualPrice := MEDIUM;
sino
actualPrice := SMALL;
fsi
fsi
total := total + qtty * actualPrice;
code := readInteger();
fmentre
retornar total
faccio
Data
25/01/2014
15:30
16. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
25/01/2014
15:30
Pregunta 2 [30%]
Per dissenyar un joc d’escacs per ordinador s’opta per representar el tauler mitjançant una taula
de taules del tipus tauler que s’ha definit:
tipus
row : taula [8] de enter
chessboard: taula [8] de row;
ftipus
var
tauler: chessboard;
fvar
A cada posició de tauler es posa un número amb els següents significats:
• 0 → casella buida
• 1 → peó
• 2 → torre
• 3 → cavall
• 4 → alfil
• 5 → reina
• 6 → rey
Les peces blanques tenen valors positius mentre que les negres tenen els mateixos valors però
negatius.
Es demana construir el mòdul bishop que rebi una variable del tipus chessboard y retorni quants
alfils blancs i negres i ha.
Es tractarà d’una acció perquè retornarà dos valors.
acció bishop (ent t: chessboard, sor white:enter, sor black: enter)
var
i, j: enter;
fvar
white := 0;
black := 0;
per i := 1 fins 8 fer
per j := 1 fins 8 fer
si t[i][j] = 4 llavors
white := white + 1;
sino si t[i][j] = -4 llavors
black := black + 1;
fsi
fsi
fper
fper
ffuncio
Pàgina 4 de 6
17. Assignatura
Programació
Examen 2013/14-1
Codi
Data
Hora inici
06.505
25/01/2014
15:30
Pregunta 3 [40%]
Un laboratori de recerca psicològica esta fent un estudi de les ludopaties, amb motiu del qual
tenen previst fer una enquesta a 10000 persones que assisteixen a casinos.
S’ha de crear una data estructurada candidate capaç d’emmagatzemar les dades d’una enquesta
° Sexe de l’enquestat (‘M’ o ‘F’)
° Edat de l’enquestat
° Freqüència de joc (quants cops al mes van al casino)
° Els tres jocs preferits posats per ordre (‘R’ → ruleta, ‘P’ → Pòquer, ‘B’ → Black Jack, ‘H’ →
Hazzard, 'J' -> Jackpot, ‘M’ -> màquines escurabutxaques, 'L'-> Loto)
° La quantitat de diners aproximada que destinen al joc cada mes
•
Dissenyeu la dada estructurada candidate
tipus
candidate = tupla
sex : caracter;
age, freq : enter;
money : real;
favorite : taula [3] de caracter;
ftupla
ftipus
Per emmagatzemar la totalitat de fitxes s'ha creat una nova dada estructurada que permet
mantenir les dades de fins les 10000 enquestes.
surveySet = tupla
qtty : integer;
survey: taula [10000] de candidate;
ftupla
La quantitat d'enquestes que en cada moment estaran emmagatzemades, ve indicada pel camp
qtty, i les dades de les enquestes ocupen sempre les primeres qtty posicions de la taula survey.
També s'ha creat la variable researchData del tipus surveySet que és on s'han carregat les
dades de les enquestes ja realitzades.
•
Escriviu l'expressió que calcula quants diners de mitjana gasta el primer jugador cada cop
que va al joc
researchData.survey[1].money/integerToReal(researchData.survey[1].freq)
Pàgina 5 de 6
18. Assignatura
Programació
•
Examen 2013/14-1
Codi
Data
Hora inici
06.505
25/01/2014
15:30
Creeu el mòdul (acció o funció, el més adequat) que rebi researchData i retorni l'edat
mitjana dels jugadors i l'edat mitjana de les jugadores
acció ageAverage(data: surveySet, sor man: real, sor woman: real): enter
var
nMan, nWoman, qtty, i: enter;
ageMan, ageWoman: real;
fvar
nMan := 0;
nWoman := 0;
ageMan := 0.0;
ageWoman := 0.0;
qtty := data.qtty;
per i:=1 fins qtty fer
si (data.survey[i].sex='F') llavors
nWoman := nWoman + 1;
ageWoman:=ageWoman+integerToReal(data.survey[i].age);
sino
nMan := nMan + 1;
ageMan:=ageMan + integerToReal(data.survey[i].age);
fsi
fper
man := ageMan / integerToReal(nMan);
woman := ageWoman / integerToReal(nWoman);
ffuncio
Pàgina 6 de 6