SlideShare a Scribd company logo
1 of 27
Download to read offline
11/06/2011
1.- L'estació meteorològica de St. Fost de Campsentelles recull dades atmosfèriques automàticament i
sense aturar-se des de 1980.
Les dades recollides es recullen cada 10 minuts i diàriament queden enregistrades en una seqüència del
tipus
<A M D H1 m1 T1 h1 P1 V1 H2 m2 T2 h2 P2 V2 ··· H144 m144 T144 h144 P144 V144>
on
•	 A, és un enter: l'Any
•	 M es un enter: el Mes
•	 D és el dia. també un enter
•	 Hi mi constitueixen l'hora i minut en què s'enregistren les dadesi
•	 Ti hi Pi Vi són respectivament la Temperatura, humitat, Pressió i Vent del momenti. Tots aquests valors són de tipus real.
Com que es prenen dades cada 10 minuts la seqüència de cada dia té 144 paquets de H m T h P V
la seqüència < 2008 3 4 0 0 12.2 88.4 1010.0 1.0 0 10 12.2 88.5 1009.8 1.1 ···
indica que a les 0:00 del 3/4/2008 la temperatura era 12.2ºC, la humitat del 88.4%, la pressió de 1010.0
HPa i el vent de 1.0 m/s; a les 0:10, la temperatura era 12.2ºC, la humitat del 88.5%, la pressió de 1009.8
HPa i el vent de 1.1 m/s; ···
Es demana que dissenyeu un algorisme maxMin llegeixi de l'entrada estàndard les dades corresponents a un dia i escrigui a la sortida estàndard la data i les temperatures màxima i mínima del dia.
La sortida ha de ser del tipus:
< A M D Tmax Tmin >
on A, M i D tenen el mateix significat que abans i Tmax i Tmin són la temperatura màxima i mínima
del dia
Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es demana
en cap cas la utilització de disseny descendent.
algorisme maxMin
var
	 A, M, D, H, m: enter;			
//Any, Mes, Dia, Hora, minut
	 tMax, tMin: real;			
//Temperatures màxima i mínima
	 i, j: enter;				
//Comptadors pels bucles
	T: real;						
//Temperatura actual
	
auxiliar: real;				//real per llegir les altres
									
//dades que no es necessiten
fvar
	
	
	
	
	
	

/*Tractament inicial*/
A := llegirEnter();
M := llegirEnter();
D := llegirEnter();
H := llegirEnter();
m := llegirEnter();

	 T := llegirReal();
	 tMax := T;
	 tMin := T;
	 per j := 1 fins 3 fer
		 auxiliar := llegirReal();	
	 fper
	

// no es necessita

/*Tractament de la seqüència*/
1
per i := 2 fins 144 fer
		 H := llegirEnter();
		 m := llegirEnter();
		 T := llegirReal();
		 si T > tMax llavors tMax := T;
		 si T < tMin llavors tMin := T;
		per j := 1 fins 3 fer
			auxiliar := llegirReal();
		fper
	 fper
	 /*Final del tractament*/
	escriureEnter(A);
	escriureEnter(M);
	escriureEnter(D);
	escriureReal(tMax);
	escriureReal(tMin);
falgorisme
2.- Al centre meteorològic del Tibidabo, es mantenen les dades meteorològiques des del 1893. L'any 1992

es va decidir informatitzar-les i en l'actualitat ja es tenen les dades diàries de Temperatura, Pluja,
Humitat i Pressió, corresponents a tot el segle XX (1901 - 2000).
	 Per a cada element meteorològic s'ha creat una taula de taules i es descriuen seguit:
TempXX		 taula [100] de taula [365] de real,
PluvXX		 taula [100] de taula [365] de real,
HumeXX		 taula [100] de taula [365] de real,
PresXX		 taula [100] de taula [365] de real,
de manera que TempXX[54][186] conté la temperatura del dia 186 de l'any 1954 (el 5 de juliol).
De cara a homogeneïtzar les dades s'ha eliminat la dada del 29 de febrer dels anys de traspàs.
Es demana:
a) [10%] definiu la capçalera del mòdul (acció o funció) anyModel que rep una taula meteorològica del

segle Dxx[100][365], i en retorna una altra de 365 posicions en què cada posició és la mitjana dels
valors d'aquell dia en tot el segle.

		funcio anyModel (DXX:taula [100] de taula [365] de real)
											
:taula[365] de real
b) [20%] codifiqueu el mòdul anyModel
funcio anyModel (DXX:taula [100] de taula
										
var
	 i, j: enter;
	 Dout: taula[365] de real
fvar
	 per i := 1 fins 365 fer
		 Dout[i] := 0; 				
	 fper
	 per i := 1 fins 100 fer
		per j := 1 fins 365 fer
			 Dout[j] := Dout[j] + Dxx[i][j];
		fper
	 fper
	 per i := 1 fins 365 fer
		 Dout[i] := Dout[i]/365; 			
	 fper

[365] de real)
:taula[365] de real

//inicialitzem a zero

//calculem mitjanes

2
retorna Dout;
ffuncio
3.- Una macro botiga de calçats té veritables problemes amb el magatzem perquè ha de tenir passadis-

	
	

sos amples perquè passin els dependents i massa habitualment les capses que es treuen del seu lloc
no es retornen.
Per aquest motiu ha decidit posar un magatzem automàtic informatitzat en què cada casella del
magatzem té cabuda per una capsa de sabates i l'emmagatzematge i recollida es fa automàticament
per un sistema de plataformes mòbils.
El magatzem consta de 10000 caselles que poden estar buides o ocupades.

Es demana que dissenyeu:
a) [10%] Un tipus box per emmagatzemar la informació de l'estat de totes les caselles. Indiqueu quin
valor indica que una casella està ocupada i quin valor indica que una casella està lliure.
tipus box = taula [10000] de booleans
ftipus
{true indica que està lliure; false indica que està ocupada}

b) [5%] Un tipus tSabata per emmagatzemar la informació d'un parell de sabates. Per a cada parella es

disposa de les següents dades: el fabricant (que representarem pel tipus tString) el codi (un enter),
la talla (un enter), el color (un caràcter), en quin box està emmagatzemat (enter), el valor de compra
de la peça (un real) i el valor de venda de la peça (un real).

tipus tSabata = tupla
	 fabric : tString;
	codi: enter;
	talla: enter;
	color: caracter;
	box: enter;
	compra: real;
	venda: real;
ftipus

El tipus tInventari que emmagatzema la informació de totes les parelles de sabates en el magatzem
(fins 10000) en una taula. Les posicions de la taula ocupades són sempre les primeres.
tipus tInventari = tupla
		sabata : taula [10000] de tSabata
		qtty : enter;
ftipus
Les dades de totes les sabates emmagatzemades estan a la variable botiga de tipus tInventari
c) [5%] Donada la variable botiga del tipus tInventari, escriviu l'expressió que permetrà conèixer si el

fabricant de la última sabata entrada al magatzem és "Pages".

botiga.sabata[botiga.qtty].fabric = "Pages"
d) [20%] Dissenyeu la acció boxLliure que rebi la variable de tipus tBox i retorni el número d'una casella

buida a l'hora que canvia d'estat lliure a ocupada. Si no hi ha cap box lliure, ha de retornar un 0.

acció boxlliure (entsor boxes: taula [10000] de boolea, sort pos:enter)
	 pos := 1;
	 mentre pos <= 10000 i no boxes[pos] fer
		 pos := pos + 1;
	 fmentre
	si pos <= 10000 llavors
		boxes[pos] := fals;
	 sino
3
pos := 0;
	fsi
faccio

18/06/2011
1.- [30%] L’estació meteorològica de St. Fost de Campsentelles recull dades atmosfèriques automàticament i sense aturar-se des de 1980.
Les dades recollides es recullen cada 10 minuts i diàriament queden enregistrades en una seqüència del
tipus
<A M D H1 m1 T1 h1 P1 V1 H2 m2 T2 h2 P2 V2 ··· H144 m144 T144 h144 P144 V144>
on
•	
•	
•	
•	
•	

A, és un enter: l’Any
M es un enter: el Mes
D és el día. També un enter
Hi mi constitueixen l’hora i minut en què s’enregistren les dadesi
Ti hi Pi Vi són respectivament la Temperatura, humitat, Pressió i Vent del momenti. Tots aquests
valors són de tipus real.

Com que es prenen dades cada 10 minuts la seqüència de cada dia té 144 paquets de H m T h P V
la seqüència < 2008 3 4 0 0 12.2 88.4 1010.0 1.0 0 10 12.2 88.5 1009.8 1.1 ···
indica que a les 0:00 del 3/4/2008 la temperatura era 12.2ºC, la humitat del 88.4%, la pressió de
1010.0 HPa i el vent de 1.0 m/s; a les 0:10, la temperatura era 12.2ºC, la humitat del 88.5%, la pressió
de 1009.8 HPa i el vent de 1.1 m/s; ···
Es demana que dissenyeu un algorisme pressioHumitat que llegeixi de l’entrada estàndard les dades
corresponents a un dia i escrigui a la sortida estàndard la data i la humitat i pressió mitjanes
del dia.
La sortida ha de ser del tipus:

< A M D Hm Pm >

on A, M i D tenen el mateix significat que abans i Hm és la humitat mitjana i Pm la pressió mitjana del
dia
Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es
demana en cap cas la utilització de disseny descendent.
algorisme pressioHumit
	 var
		 A, M, D, H, m : enter;		
//Any, Mes, Dia, Hora, minut
		Hm, Pm: real;			 //humitat i pressió mitjanes
		i: enter;				//Comptador pel bucle
		auxiliar: real;			
//real per llegir les altres
									
//dades que no es necessiten
fvar
	
	
	

/* Tractament inicial */
A := llegirEnter();
M := llegirEnter(); D := llegirEnter();
4
Hm := 0; Pm := 0;

	 /* Tractament de la seqüència */
	per i := 1 fins 144 fer
		H := llegirEnter();
		m := llegirEnter();
		 auxiliar := llegirReal();
		 Hm := Hm + llegirReal();
		 Pm := Pm + llegirReal();
		auxiliar := llegirReal();
	fper
	 /* Final del tractament */
	 Hm := Hm / 144.0;
	 Pm := Pm / 144.0;
	escriureEnter(A);
	escriureEnter(M);
	escriureEnter(D);
	escriureReal(Hm);
	escriureReal(Pm);
falgorisme

2.- [30%]. Al centre meteorològic del Tibidabo, una aplicació informàtica mostra, per les pantalles, unes
gràfiques que corresponen a l’evolució de les dades meteorològiques diàries al llarg del darrer any (els
últims 365 dies). Es mostra la gràfica de Temperatura, Pluja, Humitat i Pressió. Aquestes dades estan
emmagatzemades en quatre taules de 365 valors reals cadascuna.
Temp		
Pluv 		
Hume		
Pres		

tabla [100] de tabla [365] de real
tabla [100] de tabla [365] de real
tabla [100] de tabla [365] de real
tabla [100] de tabla [365] de real

Un investigador decideix fer un suavitzat de les dades, fet consistent en, per a cada dia, obtenir un nou
valor que és la mitjana entre el valor real del dia anterior, el de l’actual i el del posterior (p.e. la pressió
suavitzada del dia 58 de l’any es calcula amb les pressions reals dels dies 57, 58 i 59). D’aquesta manera
creu que als gràfics desapareixeran molts dels pics i mostraran millor les tendències de les dades meteorològiques.
S’adona que no es pot calcular el suavitzat del primer dia (perquè no hi ha anterior) ni del darrer
(perquè no hi ha posterior).
Es demana:
a) [10%] definiu la capçalera del mòdul (acció o funció) suavitzaDades que rep una taula anual meteorològica de 365 posicions, i en retorna una altra de 365 posicions en què en les posicions 2 a 364
estan les dades suavitzades.
funcio suavitzaDades (D:taula [365] de real) :taula[365] de real

b) [20%] codifiqueu el mòdul suavitzaDades
funcio suavitzaDades (Din:taula [365] de real) :taula[365] de real
	var
		i: enter;
		Dout: taula[365] de real

5
fvar
	per i := 2 fins 364 fer
		 Dout[i] := (Din[i-1] + Din[i] + Din[i+1])/3;
	fper
	 retorna Dout;
ffuncio

3.- [40%] Una macro botiga de calçats té veritables problemes amb el magatzem perquè ha de tenir
passadissos amples perquè passin els dependents i massa habitualment les capses que es treuen
del seu lloc no es retornen.
Per aquest motiu ha decidit posar un magatzem automàtic informatitzat en què cada casella del magatzem té cabuda per una capsa de sabates i l’emmagatzematge i recollida es fa automàticament per un
sistema de plataformes mòbils.
El magatzem consta de 10000 caselles que poden estar buides o ocupades. Es demana que dissenyeu:
a) [10%] Un tipus box per emmagatzemar la informació de l’estat de totes les caselles.
Indiqueu quin valor indica que una casella està ocupada i quin valor indica que una casella està lliure.
tipus box = taula [10000] de booleans
ftipus
{true indica que està lliure; false indica que està ocupada}

b) [5%] Un tipus tSabata per emmagatzemar la informació d’un parell de sabates. Per a cada
parella es disposa de les següents dades: model (cadena de caràcters que representarem pel tipus
tString), el codi (un enter), la talla (un enter), el color (un caràcter), en quin box està emmagatzemat
(enter).
tipus tSabata = tupla
	 model : tString;
	codi: enter;
	talla: enter;
	color: caracter;
	box: enter;
ftipus

El tipus tInventari que emmagatzema la informació de totes les parelles de sabates en el magatzem
(fins 10000) en una taula. Les posicions de la taula ocupades són sempre les primeres.
tipus tInventari = tupla
	 sabata : taula [10000] de tSabata qtty : enter;
ftipus

Les dades de totes les sabates emmagatzemades estan a la variable botiga de tipus tInventari
c) [5%] Donada la variable botiga del tipus tInventari, escriviu l’expressió que permetrà
conèixer el color de la última sabata entrada al magatzem.
botiga.sabata[botiga.qtty].color

d) [20%] Dissenyeu la acció boxSabata que rebi la variable botiga, el codi d’un model de sabates,
la talla i el color i retorni el número del box on està emmagatzemada i la posició de la sabata en
la taula de botiga. En el cas que la sabata no estigui en el magatzem, retornarà un 0 en les dues
variables.
acció boxSabata (ent botiga: tInventari, ent codi: enter, ent talla:
enter; ent color: caracter; sort box:enter; sort pos:enter)
6
var

		trobat

: booleà;
		 a : tSabata;
	 fvar
	
	
	

pos := 0;
box := 0;
trobat := fals;

	 mentre pos < botiga.qtty i no trobat fer
		 pos := pos + 1;
		 a := botiga.sabata[pos];
		si (a.codi = codi i a.talla = talla i a.color=color) llavors
			trobat := true;
			box := a.box;
		fsi
	 fmentre
	 si (no trobat) llavors
		 pos := 0;
	 fsi
faccio

22/06/2011
1.- [30%] L’estació meteorològica de St. Fost de Campsentelles recull dades atmosfèriques automàticament i sense aturar-se des de 1980.
Les dades recollides es recullen cada 10 minuts i diàriament queden enregistrades en una seqüència del
tipus
<A M D H1 m1 T1 h1 P1 V1 H2 m2 T2 h2 P2 V2 ··· H144 m144 T144 h144 P144 V144>
on
•	
•	
•	
•	
•	

A, és un enter: l’Any
M es un enter: el Mes
D és el día. també un enter
Hi mi constitueixen l’hora i minut en què s’enregistren les dadesi
Ti hi Pi Vi són respectivament la Temperatura, humitat, Pluviositat i Vent del momenti. Tots aquests
valors són de tipus real.

Com que es prenen dades cada 10 minuts la seqüència de cada dia té 144 paquets de H m T h P V
la seqüència < 2008 3 4 0 0 12.2 88.4 0.0 1.0 0 10 12.2 88.5 0.08 1.1 ···
indica que a les 0:00 del 3/4/2008 la temperatura era 12.2ºC, la humitat del 88.4%, la pluja de 0.0 l/m2
i el vent de 1.0 m/s; a les 0:10, la temperatura era 12.2ºC, la humitat del 88.5%, la pluviositat de 0.08 l/
m2 i el vent de 1.1 m/s; ···
Es demana que dissenyeu un algorisme plujaTemp llegeixi de l’entrada estàndard les dades corresponents a un dia i escrigui a la sortida estàndard la data i la temperatura mitjana i la pluja total del dia.
La sortida ha de ser del tipus:

< A M D Tm Pt >

on A, M i D tenen el mateix significat que abans i Tm és la temperatura mitjana i Pt la pluja total del
7
dia.
Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es
demana en cap cas la utilització de disseny descendent.
algorisme plujaTemp
	var
		 A, M, D, H, m : enter;			
//
		Tm, Pt: real;				//
		i: enter;					//
		auxiliar: real;				//
										
//
	fvar
	
	
	
	

/* Tractament inicial */
A := llegirEnter();
M := llegirEnter();
D := llegirEnter();

	

Any, Mes, Dia, Hora, minut
temp. mitjana i pluja total
Comptador pel bucle
real per llegir les altres
dades que no es necessiten

Tm := 0; Pt := 0;

	 /* Tractament de la seqüència */
	per i := 1 fins 144 fer
		H := llegirEnter();
		m := llegirEnter();
		 Tm := Tm + llegirReal();
		 auxiliar := llegirReal();
		 Pt := Pt + llegirReal();
		auxiliar := llegirReal();
	fper
	 /* Final del tractament */
	 Tm := Tm / 144.0;
	escriureEnter(A);
	 escriureEnter(M); 		
	escriureEnter(D);
	escriureReal(Tm);
	escriureReal(Pt);
falgorisme

2.- [30%] Al centre meteorològic del Tibidabo, una aplicació informàtica mostra, per les pantalles, unes
gràfiques que corresponen a l’evolució de les dades meteorològiques diàries al llarg del darrer any (els
últims 365 dies). Es mostra la gràfica de Temperatura, Pluja, Humitat i Pressió. Aquestes dades estan
emmagatzemades en quatre taules de 365 valors reals cadascuna.
Temp taula [365] de real, Pluv taula [365] de real, Hume taula [365] de real, Pres taula [365] de real,
A les 00:00 de cada dia, s’actualitzen les taules, fet consistent en què s’incorpora a la darrera posició de
cada la taula la dada del dia que acaba de finalitzar, es perd la dada més antiga i totes les altres corren
una posició endavant.
Es demana:
a) [10%] definiu la capçalera del mòdul (acció o funció) actualitzaDies que rep les quatre taules meteorològiques, els valors del dia de temperatura, pluja, humitat i pressió i en fa l’actualització per
al següent dia.
accio actualitzaDies ( entsor Te: taula [365] de real,
8
entsor Pl:
entsor Hu:
entsor Pr:
ent TeDia:
ent HuDia:

taula
taula
taula
real,
real,

[365] de real,
[365] de real,
[365] de real,
ent PlDia: real,
ent PrDia: real)

b) [20%] codifiqueu el mòdul actualitzaDies
accio actualitzaTaulaDies (
	 //accio auxiliar que actualitza una sola taula
	 entsor D: taula [365] de real,
	 ent dada: real)
	var
		i: enter;
	fvar
	per i := 1 fins 364 fer
		 D[i] := D[i + 1]; 			
	fper
	 D[365] := dada; 			
faccio

//es corre una posició endavant
//es posa la nova dada al final

accio actualitzaDies (
	 entsor Te: taula [365] de real,
	 entsor Pl: taula [365] de real,
	 entsor Hu: taula [365] de real,
	 entsor Pr: taula [365] de real,
	 ent TeDia: real, ent PlDia: real,
	 ent HuDia: real, ent PrDia: real)
	

actualitzaTaulaDies (Te, TeDia);

	 actualitzaTaulaDies (Pl, PlDia);
	 actualitzaTaulaDies (Hu, HuDia);
	 actualitzaTaulaDies (Pr, PrDia);
faccio

3.- [40%] Una macro botiga de calçats té veritables problemes amb el magatzem perquè ha de tenir
passadissos amples perquè passin els dependents i massa habitualment les capses que es treuen
del seu lloc no es retornen.
Per aquest motiu ha decidit posar un magatzem automàtic informatitzat en què cada casella del magatzem té cabuda per una capsa de sabates i l’emmagatzematge i recollida es fa automàticament per un
sistema de plataformes mòbils.
El magatzem consta de 10000 caselles que poden estar buides o ocupades. Es demana que dissenyeu:
a) [10%] Un tipus box per emmagatzemar la informació de l’estat de totes les caselles. Indiqueu
quin valor indica que una casella està ocupada i quin valor indica que una casella està lliure.
tipus box = taula [10000] de booleans
ftipus
{true indica que està lliure; false indica que està ocupada}

b) [5%] Un tipus tSabata per emmagatzemar la informació d’un parell de sabates. Per a cada
parella es disposa de les següents dades: model (cadena de caràcters que representarem pel tipus
tString), el codi (un enter), la talla (un enter), el material (un caràcter), en quin box està emmagatzemat (enter), el valor de compra de la peça (un real) i el valor de venda de la peça (un real) i el bonus
(un enter)
tipus tSabata = tupla

9
model : tString;
	codi: enter;
	talla: enter;
	material: caracter;
	box: enter;
	compra: real;
	venda: real;
	bonus: enter;
ftipus

El tipus tInventari que emmagatzema la informació de totes les parelles de sabates en el magatzem
(fins 10000) en una taula. Les posicions de la taula ocupades són sempre les primeres.
tipus tInventari = tupla
	 sabata : taula [10000] de tSabata
	 qtty : enter;
ftipus

Les dades de totes les sabates emmagatzemades estan a la variable botiga de tipus tInventari
c) [5%] Donada la variable botiga del tipus tInventari, escriviu l’expressió que permetrà conèixer el
benefici si es ven la última sabata entrada al magatzem.
botiga.sabata[botiga.qtty].compra botiga.sabata[botiga.qtty].venda

d) [20%] Dissenyeu la acció rebaixes que rebi la variable botiga i disminueixi el preu de venda de cada
parella de sabates segons el valor del bonus.

bonus

descompte

0

5%

1

10%

2

15%

acció rebaixes (entsor botiga: tInventari)
	var

		i

: enter
		 desc : real;
	 fvar
	

i := 0;

	 mentre i < botiga.qtty fer
		 i := i + 1;
		si botiga.sabata[i].bonus = 0 llavors
			desc := 0.95;
	 	 sino si botiga.sabata[i].bonus = 1 llavors
			desc := 0.90;
			sino
				desc := 0.85;
			fsi
		fsi
		botiga.sabata[i].venda := botiga.sabata[i].venda * desc;
	 fmentre
faccio

10
18/01/2012
1. (3 punts) A l'ecopark de Sant Fost de Campsentelles hi van a descarregar els camions de recollida
selectiva de deixalles procedents dels municipis de la comarca. Quan entren els camions s'omple un
registre que inclou dades del municipi d'origen, hora d'entrada, tipus i pes del material.
A la deixalleria s'agrupen els materials per tipus i són expedits a les plantes de reciclatge.
El registre diari d'entrades de l'ecopark és una seqüència del tipus
<M D A1 H1 m1 T1 P1 A2 H2 m2 T2 P2 ··· An Hn mn Tn Pn 0>
on
•	 M és un enter: el mes.
•	 D és el día. També un enter.
•	Ai és el codi de l'ajuntament, un número enter de 5 xifres que coincideix amb el codi postal més baix
del municipi.
•	Hi mi , enters, constitueixen l'hora i minut en què entra el camiói
•	Ti és la codificació del tipus de material, un número que pot ser:
	 °	 1 ⇒ paper, 2 ⇒ envasos, 3 ⇒ vidre, 4 ⇒ orgànica
•	Pi és el pes, en kg, transportat pel camiói.
•	 0 és el número 0 que indica el final de la seqüència
Com que cada municipi té un sistema diferent de recollida la quantitat de camions que entren en un dia
pot ser variable i per detectar la fi de la seqüència s'escriu un 0
la seqüència < 3 4 08105 6 12 1 5010 08101 6 17 3 7210 ··· 0>
indica que a les 6:12 del 3 d'abril va entrar una camió del municipi 08105 carregat amb 5010 kilos de
paper; a les 6:17 un camió del municipi 08101 amb 7210 Kg de vidre; ···
Es demana que dissenyeu un módul (acció o funció, el més adequat) de nom totalMaterial que rebi el
codi d'un material (T), llegeixi la seqüència de dades de l'entrada estàndar i escrigui a la sortida estàndar la quantitat de camions rebuts amb aquell material i la totalitat de quilos corresponent.
La sortida ha de ser del tipus: < T M D tc tq >
on T, M i D tenen el mateix significat que abans i tc és la quantitat total de camions que han entrat durant el dia amb el material de tipus T i tq la totalitat de quilos que portaven
Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es demana
en cap cas la utilització de disseny descendent.
accio totalMaterial (ent code: caracter)
	 var
		 M, D, A, H, m, T, P : enter;
		T : caracter;
		 tc, tp : enter;
	fvar
	
	
	
	
	
	

//inici del tractament
M := llegeixEnter();
D := llegeixEnter();
tc := 0;
tp := 0;
A := llegeixEnter();

	
	

//recollida i acumulació de dades
mentre A ≠ 0 fer

11
H := llegeixEnter();
		 m := llegeixEnter();
		 T := llegeixCaracter();
		 P := llegeixEnter;
		si T = code llavors
			 tc := tc + 1;
			 tp := tp + P;
		fisi
		 A := llegeixEnter();
	 fmentre
	 //sortida de resultats
	 escriureEnter (code);
	 escriureEnter (M);
	 escriureEnter (D);
	 escriureEnter (tc);
	 escriureEnter (tp);
facción

2. (3punts) La cadena de restaurants Good menu té 4 locals, oberts els 365 dies de l'any, en els quals
serveix 10 menús
Per tal de fer estadístiques recull les dades anuals dels quatre locals en quatre variables definides com
taules de taules:
tipus
	 tVendesDia= taula[365] de enter;
	 tMenu= taula[10] de tVendesDia;
ftipus
var
	 BigMenu, MenuOne, DailyMenu, PresXX: tMenu;
fvar

de manera que BigMenu[1][186] conté la quantitat de menús del tipus 1 del dia 186 de l'any (el 5 de
juliol) del local Big Menu. De cara a homogeneïtzar les dades s'ha eliminat la dada del 29 de febrer dels
anys de traspàs.
Es demana:
i. definiu la capçalera del mòdul (acció o funció) totalDiari que rep les dades dels quatre restaurants i
retorna una taula de 365 posicions en què en cada posició te la totalitat de menús (sense distinció
del tipus) servits aquell dia entre tots els restaurants de la cadena. (1 punt)
funcio totalDiari (D1: tMenu, D2: tMenu, D3: tMenu, D4: tMenu): tVendesDia

ii.	 codifiqueu el mòdul totalDiari (2 punts)
funcio totalDiari ( D1: tmenu, D2: tmenu, D3: tmenu, D4: tmenu):tVendesDia
	var
		i, j: enter;
		 Dout : tVendesDia;
	fvar
	per i:= 1 fins 365 fer
		 //inicialitzem l'acumulador del dia a zero
		 Dout[i] := 0;
		 //acumulem els menus del dia i dels 4 restaurants
		per j := 1 fins 10 fer
			 //	acumulem els menus del tipus j del dia i dels 4 restaurants
			 Dout[i] := Dout[i] + D1 [j][i] + D2 [j][i] + D3 [j][i] + D4 [j][i];
12
fper
	fper
	 retornar Dout;
ffuncio

3. (4punts) Un estudi de disseny d'aplicacions multimèdia vol organitzar el seu repositori de videomaterials. Per a aquest exercici suposarem que està definit el tipus de dada text que conté una cadena de
text i les accions i funcions escriureText i llegirText equivalent a les que coneixem per als altres tipus.
Es demana que dissenyeu:
a) Un tipus tInfoVideo per emmagatzemar la informació d'un clip de vídeo. Aquest informació ha
d'incloure: el nom del fitxer, el format, el codi de l'autor (un número enter entre 1 i 1000), la durada en
segons (un enter), el nom de la carpeta on està emmagatzemada i el preu d'ús del vídeo (un real). (0.5
punts)
tipus tInfoVideo = tupla
	nom:text;
	 format:text;
	 autor:enter;
	 durada:enter;
	 carpeta:text;
	 preu:real;
ftupla

b) Un tipus tAutor per emmagatzemar la informació de cada autor de vídeos. De cada autor hem de
recopilar la següent informació. Cognoms (text), nom (text), dni(enter) i IBAN del seu compte
(text). (0.5 punts)
tipus tAutor = tupla
	cognoms: text;
	 nom: text;
	dni: enter;
	IBAN: text;
ftipus

El tipus tInventari emmagatzema la informació de totes les imatges de què es disposa (fins 1000000) en
una taula. Les posicions de la taula ocupades són sempre les primeres.
tipus tInventari = tupla
		 foto : taula [1000000] de tInfoVideo;
		qtty : enter;
	ftupla
ftipus

El tipus tPersonal emmagatzema les dades de tots els fotògrafs col·laboradors de l'empresa (el codi de
l'autor és l'index dins la taula que li correspon)
tipus tPersonal = tupla
		 autor : taula [1000] de tAutor;
		 qtty : enter;
	 ftupla
ftipus

El programa que gestiona les dades té declarades les variables fons del tipus tInventari i la variable
col·laborator del tipus tPersonal
c) Donada la variable fons del tipus tInventari, escriviu l'expressió que permetrà conèixer si el primer
clip del fons val més de 200€. (1 punt)

13
fons.foto[1].preu > 200.0;

d) Dissenyeu el mòdul videosByAutor que rebi les variables de tipus tIventari i tPersonal i el dni d'un
autor i retorni la quantitat de clips d'aquest autor hi ha en el fons (2 punts)
funció videosByAutor (fons: tInventari, col: tPersonal, dni: enter):enter
	var
		 i, autor, clips:enter;
	fvar
	

clips := 0;

	
	
	
	
	
	

//localitzem el codi de l’autor
i := 1;
mentre i < col.qtty i dni ≠ col.autor[i].dni fer
	 i := i + 1;
fmentre
autor := i;

	 //comptem els vídeos d’aquest autor
	 per i := 1 fins fons.qtty fer
	si autor = fons.foto[i].autor llavors
		 clips := clips + 1;
	fsi
	fper
	 retornar clips
ffuncio

23/06/2012
1. (3 punts) Un repositori multimèdia rep habitualment informació de les pujades de materials dels
seus associats. Aquesta informació s’enregistra en una seqüència anual del tipus
on
•	
	
	
	
	
•	
•	
•	
•	
•	

< M1 A1 D1 L1 T1 M2 A2 D2 L2 T2 ··· Mn An Dn Ln Tn F>

Mi es el tipus de material, un caràcter que pot ser
°	 V de vídeo,
°	 M de música
°	 P de presentació
°	 D de diaporama
Ai que és el nom de l’autor
Di que és la durada en segons
Li que és el tipus de llicència que pon prendre els valors CR, BY, NC, ND o SA
Ti que és el codi de la temàtica, un número que pren valors entre 1 i 1000
F, és la lletra F que marca la fi de la seqüència

Es demana construir un mòdul countByLicense (acció o funció, el més adequat) que rebi un tipus de
material i retorni, en comptadors diferents, quants ítems hi ha llicenciats sota cada tipus de llicència.
[podeu emprar el tipus simple text i els mòduls readText i writeText amb els mateixos significats que a les
pràctiques]
acció countByLicense (ent type: character, sor CR: enter, sor BY: enter, sor NC:
enter, sor ND: enter,
sor SA: enter)

14
var
	 material : carácter;
	 name, license : text
	 time, tema: enter
fvar
	
	
	
	
	
	

{inicialitza comptadors}
CR := 0;
BY := 0;
NC := 0;
ND := 0;
SA := 0;

	 {preparació de la sequència}
	 material := readChar();
	 {tractament de la seqüència}
	 mentre material ≠ ‘F’ fer
		name := readText();
		time := readInteger();
		license := readText();
		tema := readInteger();
		si material = type llavors
			si license = ‘CR’ llavors
				CR := CR +1;
				sino si license = ‘BY’ llavors
					BY := BY +1;
					sino si license = ‘NC’ llavors
						 NC := NC +1;
						 sino si license = ‘ND’ llavors
							
ND := ND +1;
							
sino
								
SA := SA +1
						 fsi
					fsi
				fsi
			fsi
		fsi
		 material := readChar();
fmentre faccio

2. (3 punts). A la central hidroelèctrica de Volga central es manté, per setmanes, un historial de la
potència generada en cada hora.
Per tal de fer estadístiques es reuneixen les dades en una taula de taules segons les següents definicions i declaracions
tipus
	 tDay = taula [24] de real;
	 tWeek = taula [7] de tDay
ftipus
var
	 volgaPower : tWeek
fvar
de manera que volgaPower[5][12] conté la potència generada divendres a les 12 del migdia.
Es demana que creeu el mòdul hourPower (acció o funció, el més adequat) que rebi una hora determinada i la variable volgaPower, i retorni la potencia mitjana generada durant aquella hora al llarg de la
15
setmana.
funció hourPower( hora: enter, volgaPower : tWeek) : real;
	 var
		total : real;
		dia : enter;
	 fvar
	

total := 0.0;

	 per dia := 1 fins 7 fer
		 total := total + volgaPower [dia][hora];
	 fper
	

total := total / 7;

	 retorna total
ffuncio

3. (4 punts). Un aficionat a les curses d’automòbils i rallies vol fer un programa on emmagatzemar tota
la informació de què disposa del calendari anual i dels automòbils que actualment participen en el
circuit per tal de fer-ne un seguiment informatitzat.
[podeu emprar el tipus simple text i els mòduls readText i writeText amb els mateixos significats que a les
pràctiques]
Es demana que dissenyeu
a. Un tipus tDate per emmagatzemar una data en format numèric (0.5 punts)
tipus
	 tDate = tupla
		 day , month , year : enter;
	ftupla
ftipus

b. Un tipus tCar que contingui informació del seu nom, equip, fabricant del motor y potència (en cavalls) (0.5 punts)
tipus
	 tCar = tupla
		 name, equipe, poweredBy : text;
		power :enter;
	ftupla
ftipus

c. Un tipus tRace que contingui informació d’una cursa: nom, kilòmetres de recorregut, voltes, país,
data i import en premis (0.5 punts)
tipus
	 tRace = tupla
		name, pais: text;
		km : real;
voltes, awards : enter;
raceDay: tDate;
ftupla ftipus

El tipus tMaquina pot emmagatzemar tota la informació sobre automòbils (fins 50000) en una taula.
Les qtty primeres posicions són les que estan plenes
16
tipus tMaquina= tupla
		 car : taula [50000] de tCar;
	 	 qtty : enter;
	ftupla
ftipus

El tipus tChampionship pot emmagatzemar tota la informació sobre les curses (fins
10000) en una taula. El camp winner conté els codis del cotxes guanyadors de cada cursa (aquest
codi coincideix amb la posició que ocupa la informació del cotxe en la taula car del tipus tMaquina)
Les qtty primeres posicions són les que estan plenes
tipus tChampionship= tupla
	 race : taula [10000] de tRace;
	 winnerCode: taula [10000] de enter;
	 qtty : enter;
	ftupla
ftipus

El programa que gestiona tota la informació té dues variables autos del tipus tMaquina i carrera del
tipus tChampionship
d. Donada la variable autos, escriviu l’expressió que digui la potència del darrer cotxe introduït a
la taula (1 punt)
autos.car[autos.qtty].power

e. Dissenyeu el mòdul whatWon que rebi el nom d’un automóvil i les variables de tipus tMaquina i
tChampionship i retorni la quantitat de carreres que ha guanyat aquest automòbil. (1.5 punts)
funció whatWon (name: text, autos: tMaquina, carrera: tChampionship)
	 var
		 codeCar, maxRace, total, i, j: enter;
	 fvar
	
	
	

total := 0;
maxRace := carrera.qtty;
i := 1;

	 mentre i <= autos.qtty i name ≠ autos.car[i].name fer
		 i := i + 1;
	 fmentre
	 si i <= autos.qtty llavors {s’ha trobat un cotxer amb el nom, el seu codi és i }
		per j := 1 fins maxRace fer
			si carrera.winnerCode[j] = i llavors;
				total := total + 1;
			fsi
		fper
	 fsi
	 retornar total;
ffuncio

12/01/2013

17
1. Les dades d’una imatge se situen en una seqüència, que és diferent si es tracta d’una seqüència en
color de tres canals
{C W H R1 G1 B1 R2 G2 B2... Rn Gn Bn}
o monocromàtica d’un sol canal
{M W H P1 P2 ... Pn}
on:
•	 C: és la lletra ‘c’ que indica que la foto és en color
•	 M: pot prendre els valors ‘m’ si es tracta d’una foto en blanc i negre, o bé ‘r’ si es tracta d’un canal
vermell, ‘g’ si es tracta d’un canal verd o ‘b’ si es tracta d’un canal blau.
•	 W: és l’amplada en píxels de la imatge
•	 H: és l’alçada en píxels de la imatge
•	 Ri Gi Bi: són les intensitats dels components vermell, verd i blau del píxel-i en una imatge en color
(valors enters que prenen valor entre 0 i 255)
•	 Pi : és la intensitat de color (gris, vermell, verd o blau, segons sigui el tipus d’imatge) del píxel-i en
una imatge monocromàtica. També pot prendre valors enters entre 0 i 255.
Una imatge negativa B d’una imatge A és una imatge dels mateixos canals, les mateixes dimensions,
però on el valor de cada píxel en la imatge nova es calcula restant de 255 el valor del píxel de la imatge
original. Per exemple:
Si la imatge original és en color {c 2 2 100 110 120 130 140 150 160 170 180 190 200 210} la imatge negativa
serà {c 2 2 155 145 135 125 115 105 95 85 75 65 55 45}.
En el cas d’una imatge monocromàtica {r 2 2 165 110 0 0} el negatiu seria {r 2 2 90 140 255 255}
Es demana que construïu un algorisme que llegeixi de l’entrada estàndard una imatge i escrigui en la
sortida estàndard la seqüència de la imatge negativa.
algorisme negative
	var
		mode : character; 			
		 w, h, n : integer; 			
		 v, i : integer;
	fvar

// picture type
//wide, high, totalpixels

	 mode := readCharacter(); 			
	 w := readInteger();
	 h := readInteger();
	 writeCharacter(mode); 			
	writeInteger(w);
	writeInteger(h);
	 n := w * h;
	si mode = ‘c’ llavors
		 n := n * 3; 				
	fsi

//read image head

										
	per i:=1 fins n fer
		 v := readInteger(); 			
		 writeInteger (255 – v); 		
	fper
falgorismee

// serial processing

//write new image head

//if color, number of values are triple

//read value
//write negative value

2.- En un casino, per controlar el joc dels croupiers de la taula de Black Jack, una càmera de vídeo enregistra les cartes que es van traient del shuffle (el dispensador de cartes), fa un reconeixement d’imatge
i les codifica de manera que a les piques els correspon ordenadament els números 1 a 13, als trèvols del
14 al 26, a cors del 27 al 39 i als diamants del 40 al 52. A mida que es van extraient les cartes els codis es
van enregistrant en una taula, les posicions sobrants de la qual es replenen a zeros, i que s’ha dimensi18
onat a 5000 per tal que hi càpiga la informació de totes les cartes que es juguen en una taula durant un
dia. D’un dia a un altre, naturalment, no es juga la mateixa quantitat de cartes.
Es demana construir una funció que rebi la taula enregistrada per la càmera i un número (entre 1 i 13
corresponent a una puntuació) i digui quantes cartes d’aquella puntuació han dispensat durant el dia el
shuffle (tingueu en compte que no ens importa si són piques, trèvols, cors o diamants, per comptar-los
només importa el valor)
Per exemple, per localitzar els 6 s'hauria de cercar el 6(♥), el 19(♣), en 32(♥) i el 45(♦). Si la seqüencia
diària fora {34 6 45 32 2 35 19 51 45 15 18} es retornaria un 5.
funcio lowerOccurrence (shuffle: taula [5000] de integer, n: integer): integer
	var
		 card,counter, i : integer; 		
// actual card, cards counter,
										
// auxiliar counter
	fvar
	
i:=1; 							//init counters
	 counter := 0;
	 n := n mod 13; 					// 0 is now the king,
										
// others values no change
	 card := suffle[i];
	 mentre ((card ≠ 0) y (i ≤ 5000)) fer 	 //count each card occurrence
		 card := card mod 13; 			
// reduces numbers from
										
// 1 to 12 (queen) and 0 (king);
		si card = n llavors
			 counter := counter + 1;
		fsi
		 i := i + 1;
		 card := shuffle[i]; 			
//next card
	 fmentre
	 retorna counter;
ffuncio

3. Un laboratori de recerca sobre la imatge vol crear un nou estàndard d’emmagatzemament i treball
amb imatge i per aquest motiu ha de crear dades estructurades i mòduls de programa.
S’ha de crear una dada estructurada picture capaç d’emmagatzemar una imatge de fins 10 megapixels
(10 milions de pixels). De la imatge s’ha de desar:
•	 El tipus d'imatge: que pot rebre els valors ‘c’, ‘m’, ‘r’, ‘g’ i ‘b’ segons els significats exposats en l’exercici 1 d’aquesta prova.
•	 L’amplada i l’alçada de la imatge en píxels
•	 Per a tres canals, la informació de cadascun dels píxel (un número entre 0 i 255).
Si una imatge no ocupa 10 megapixels, l’espai sobrant s’acaba d’omplir a zeros.
Les imatges en blanc i negre, emmagatzemaran la informació dels pixels en el mateix canal que correspon al color vermell de les imatges a color.
Les imatge monocromes corresponents a un canal de color emmagatzemaran la informació en el seu
canal corresponent i els altres dos canals restaran completament a zeros.
•	 Dissenyeu la dada estructurada picture
tipus
	 picture = tupla
		pictType: character;
		width: integer;
		high: integer:
		r: taula [10000000] de integer;
		g: taula [10000000] de integer;
		b: taula [10000000] de integer;
	ftupla
19
ftipus

Per emmagatzemar les imatges de prova s’ha creat una dada estructura que permet mantenir-ne fins 1
milió de fotos
biblio = tupla
	 qtty : integer;
	 col : taula [1000000] de picture;
ftupla

i s’ha creat la variable test del tipus biblio.
Escriviu l’expressió que ens indiqui si la imatge en posició 12500 de test és en blanc i negre i més alta
que ample
(test.col[12500].pictType = ‘m’) i (test.col[12500].high > test.col[12500]. width)

Creeu un mòdul (acció o funció, el més adequat) que rebi una imatge en color i generi tres imatges monocromes corresponents als tres canals de la imatge general
accio canalSeparate (ent in: picture, sor R:picture, sor G:picture, sor B:picture)
	var
		 n, i: integer;
	fvar
	
	
	
	
	
	
	
	
	
	

R.pictType := ‘r’; 				
G.pictType := ‘g’;
B.pictType := ‘b’;
R.width := in.width;
R.high := in.high;
G.width := in.width;
G.high := in.high;
B.width := in.width;
B.high := in.high;
n := in.width * in.high;

// creates picture heads

	 per i:= 1 fins n fer 				//
		 R.r[i] := in.r[i]; 			
//
		 R.g[i] := 0;
		R.b[i]:= 0;
		 G.r[i] := 0;
		 G.g[i] := in.g[i]; 			
//
		 G.b[i] := 0
		 B.r[i] := 0;
		 B.g[i] := 0;
		 B.b[i] := in.b[i]; 			
//
	fper
	 per i := n+1 fins 10000000 fer 		
//
		 R.r[i] := 0;
		 R.g[i] := 0;
		R.b[i]:= 0;
		 G.r[i] := 0;
		G.g[i] := 0;
		 G.b[i] := 0;
		 B.r[i] := 0;
		 B.g[i] := 0;
		 B.b[i] := 0;
	 fper
faccio

computes n pixel on each image
copies r channel in R

copies g channel in G

copies b channel in B
fill 0 rest of image

19/01/2013
20
1. Les dades d’una imatge se situen en una seqüència, que és diferent si es tracta d’una seqüència en
color de tres canals
{C W H R1 G1 B1 R2 G2 B2 ... Rn Gn Bn}

o monocromàtica d’un sol canal on:

{M W H P1 P2 ... Pn}

•	 C: és la lletra ‘c’ que indica que la foto és en color
•	 M: pot prendre els valors ‘m’ si es tracta d’una foto en blanc i negre, o bé ‘r’ si es tracta d’un
canal vermell, ‘g’ si es tracta d’un canal verd o ‘b’ si es tracta d’un canal blau.
•	 W: és l’amplada en píxels de la imatge
•	 H: és l’alçada en píxels de la imatge
•	 Ri Gi Bi: són les intensitats dels components vermell, verd i blau del píxel i en una imatge en color (valors
enters que prenen valor entre 0 i 255)

•	 Pi : és la intensitat de color (gris, vermell, verd o blau, segons sigui el tipus d’imatge) del píxel i en una
imatge monocromàtica. També pot prendre valors enters entre 0 i 255.

Una de les maneres de crear imatges en fals color és permutar en cada píxel les intensitats dels tres
canals de color, de manera que si RGB d’un píxel és 10 20 30, en permutar els canals s’obté 30 10 20 (es
posa com intensitat de vermell la que en l’original és de verd, com intensitat de verd la que en l’original
és de blau i com intensitat de blau la que en l’original és de vermell.
Per a la imatge en color {c 2 2 100 110 120 130 140 150 160 170 180 190 200 210} la permuta donaria la
imatge {c 2 2 120 100 110 150 130 140 180 160 170 210 190 200}
Es demana que construïu un algorisme que llegeixi de l’entrada estàndard una imatge en color i escrigui a la sortida estàndard la seqüència de la imatge permutada.
algorisme permute
	var

		 mode : character; 			
		 w, h, n : integer;	 		
		r, g, b, i : integer;
	fvar	

// picture type
// wide, high, totalpixels

	
	
	

// read image head

mode := readCharacter(); 		
w := readInteger();
h := readInteger();

	 writeCharacter(mode); 		
	 writeInteger(w);
	writeInteger(h);
	 n := w * h;
	 // serial processing
	per i := 1 fins n fer
		 r := readInteger();		
		g := readInteger();		
		b := readInteger();		
		writeInteger (g);			
		writeInteger (b);			
		writeInteger (r);			
	fper
falgorisme

// write new image head

// red value
// green value
// blue value
// write green as new red value
// write blue as new green value
// write red as new blue value

L’enunciat s’il·lustra amb un exemple que no es correspon amb la descripció escrita. Mentre a la descripció s’explicita que el nou canal vermell ha de rebre el color de l’antic verd, el nou ver el color del
blau original i el nou blau el del vermell original, en l’exemple es realitzen unes altres substitucions
21
canviant el vermell pel blau, el verd pel vermell i el blau pel verd.
Si es fa servir l’exemple per elaborar l’algorisme, la solució seria:
algorisme permute
	var
		mode : character; 				// picture type
		 w, h, n : integer;	 			
// wide, high, totalpixels
		r, g, b, i : integer;
	fvar
	
	
	

mode := readCharacter(); 			
w := readInteger();
h := readInteger();

	 writeCharacter(mode); 			
	 writeInteger(w);
	writeInteger(h);
	 n := w * h;
	 // serial processing
	per i := 1 fins n fer
		 r := readInteger();			
		g := readInteger();			
		b := readInteger();			

// read image head

// write new image head

// red value
// green value
// blue value

		writeInteger (b);				
// write blue as new red value
		writeInteger (r);				// write red as new green value
		writeInteger (g);				// write green as new blue value
fper
falgorisme

Les dues solucions s’han acceptat com correctes.
2. En un casino, per controlar el joc dels croupiers de la taula de Black Jack, una càmera de vídeo enregistra les cartes que es van traient del shuffle (el dispensador de cartes), fa un reconeixement
d’imatge i les codifica de manera que a les piques els correspon ordenadament els números 1 a 13, als
trèvols del 14 al 26, a cors del 27 al 39 i als diamants del 40 al 52. A mida que es van extraient les cartes
els codis es van enregistrant en una taula, les posicions sobrants de la qual es replenen a zeros, i que
s’ha dimensionat a 5000 per tal que hi càpiga la informació de totes les cartes que es juguen en una taula
durant un dia. D’un dia a un altre, naturalment, no es juga la mateixa quantitat de cartes.
Es demana construir una acció que rebi la taula enregistrada per la càmera i retorni quantes cartes
de cada símbol (piques, trèvols, cors o diamants) ha dispensat durant el dia el shuffle
accio howMany (ent shuffle: taula [5000] de integer, sor p: integer, sor t: integer, sor c: integer, sor
d: integer )
	var
		card, i : integer; 		
	fvar
	
p :=
	 t :=
	 c :=
	 d :=
	 i :=

// actual card, auxiliar counter

0;							//init counters
0;
0;
0;
1;
22
card := suffle[i];
	 mentre ((card ≠ 0) i (i ≤ 5000)) fer 	 //count each card occurrence
		 card := (card – 1) div 13; 		
//0 ⇒ spades, 1 ⇒ clubs, 2 ⇒
										
// hearts, 3 ⇒ diamonds
		si card = 0 llavors
			 p := p + 1;
			sino si card = 1 llavors
				 t := t + 1;
				sino si card = 2 llavors
					c := c + 1;
				sino
					d := d +1;
				fsi
			fsi
		fsi
		 i := i + 1;
		 card := shuffle[i]; //next card
	 fmentre
faccio

3. Un laboratori de recerca sobre la imatge vol crear un nou estàndard d’emmagatzemament i treball
amb imatge i per aquest motiu ha de crear dades estructurades i mòduls de programa.
S’ha de crear una dada estructurada picture capaç d’emmagatzemar una imatge de fins 10 megapíxels
(10 milions de pixels). De la imatge s’ha de desar:
•	 El tipus d’imatge: que pot rebre els valors ‘c’, ‘m’, ‘r’, ‘g’ i ‘b’ segons els significats exposats en l’exercici 1 d’aquesta prova.
•	 L’amplada i l’alçada de la imatge en píxels
•	 Per a tres canals, la informació de cadascun dels píxel (un número entre 0 i 255).
Si una imatge no ocupa 10 megapíxels, l’espai sobrant s’acaba d’omplir a zeros.
Les imatges en blanc i negre, emmagatzemaran la informació dels píxels en el mateix canal que
correspon al color vermell de les imatges a color.
Les imatge monocromes corresponents a un canal de color emmagatzemaran la informació en el seu
canal corresponent i els altres dos canals restaran completament a zeros.
•	 Dissenyeu la dada estructurada picture
tipus
	 picture = tupla
		pictType : character;
		width : integer;
		high : integer:
		r : taula [10000000] de integer;
		g: taula [10000000] de integer;
		b: taula [10000000] de integer;
	 ftupla
ftipus

Per emmagatzemar les imatges de prova s’ha creat una dada estructura que permet mantenir-ne fins
1 milió de fotos
biblio = tupla
	 qtty : integer;
	 col : taula [1000000] de picture;
ftupla
i s’ha creat la variable test del tipus biblio.

23
Escriviu l’expressió que ens indiqui si en la imatge que està en posició 505 de test, les components verda
i blava del últim píxel d’imatge són iguals
test.col[505].g[test.col[505].width* test.col[505].high] =
test.col[505].b[test.col[505].width* test.col[505].high]

Creeu un mòdul (acció o funció, el més adequat) que rebi dues imatges del mateix tipus i dimensions i
en retorni una tercera en que cada píxel sigui la suma entre els píxels de les imatges originals.
Nota: hi ha la possibilitat que en fer la suma surti un número superior a 255. En aquest cas el color a
assignar serà el obtingut de la suma després de restar-li 256. P.e. si els vermells són 150 i 150, a la imatge resultats es posarà 44 (150 + 150 – 256 = 44)
funcio imgAdd(first: picture, second:picture): picture
	 var
		n, i: integer;
		new: picture
	 fvar
	
	
	

new.pictType := first.pictType; 			
new.width := first.width;
new.high := first.high;

	

//copies picture head

n := first.width * first.high;

	 per i := 1 fins n fer 				//computes each component of pixel
		new.r[i] := (first.r[i] + second.r[i]) mod 256;
		 new.g[i] := (first.g[i] + second.g[i]) mod 256;
		 new.b[i] := (first.b[i] + second.b[i]) mod 256;
	 fper
	 per i := n+1 fins 10000000 fer 			
//fill 0 rest of image
		new.r[i] := 0;
		new.g[i] := 0;
		new.b[i] := 0;
	 fper
	 retorna new
ffuncio

23/01/2013
1. Les dades d’una imatge se situen en una seqüència, que és diferent si es tracta d’una seqüència en
color de tres canals
o monocromàtica d’un sol canal

{C W H R1 G1 B1 R2 G2 B2 ... Rn Gn Bn}
{M W H P1 P2 ... Pn}

on:
•	 C: és la lletra ‘c’ que indica que la foto és en color
•	 M: pot prendre els valors ‘m’ si es tracta d’una foto en blanc i negre, o bé ‘r’ si es tracta d’un canal
vermell, ‘g’ si es tracta d’un canal verd o ‘b’ si es tracta d’un canal blau.
•	 W: és l’amplada en píxels de la imatge
•	 H: és l’alçada en píxels de la imatge
•	 Ri Gi Bi: són les intensitats dels components vermell, verd i blau del píxel i en una imatge en color
(valors enters que prenen valor entre 0 i 255)
•	 Pi : és la intensitat de color (gris, vermell, verd o blau, segons sigui el tipus d’imatge) del píxel i en
una imatge monocromàtica. També pot prendre valors enters entre 0 i 255.

24
Molts de cops resulta útil crear, a partir d’imatges en color tricanal, una imatge monocromàtica que
contingui la informació d’un sol color. Per exemple, de la imatge {c 2 2 100 110 120 130 140 150 160 170
180 190 200 210} podem extraure el canal vermell i es crearia la imatge {r 2 2 100 130 160 190} i, en cas
d’extraure el canal blau la imatge seria {b 2 2 120 150 180 210}.
Es demana que construïu un mòdul (acció o funció, el més adequat) que rebi com paràmetre un caràcter
que indiqui el canal a extraure (‘r’, ‘g’, o ‘b’), llegeixi del canal d’entrada estàndard la seqüència d’una
imatge en color i escrigui en el canal de sortida estàndard la imatge monocroma del canal sol·licitat.
accio canalExtract(ent canal: caracter)
var
	 mode : character;			
	 w, h, n : integer;			
	 r, g, b, v, i : integer;
fvar
	
	
	

mode := readCharacter();		
w := readInteger();
h := readInteger();

// picture type
// wide, high, totalpixels

// read image head

	writeCharacter(canal);		
	 writeInteger(w);
	writeInteger(h);
	 n := w * h;

// write new image head

	per i := 1 fins n fer 		
		r := readInteger();		
		g := readInteger();
		b := readInteger();
		si canal = ‘r’ llavors		
			v := r;
	 	 sino si canal = ‘g’ llavors
			v := g;
		sino
			v := b;
		fsi
	 fsi
	writeInteger(v);			
	fper
faccio

// serial processing
// canal reading
// canal selection

// canal write

2. En un casino, per controlar el joc dels croupiers de la taula de Black Jack, una càmera de vídeo enregistra les cartes que es van traient del shuffle (el dispensador de cartes), fa un reconeixement
d’imatge i les codifica de manera que a les piques els correspon ordenadament els números 1 a 13, als
trèvols del 14 al 26, a cors del 27 al 39 i als diamants del 40 al 52. A mida que es van extraient les cartes
els codis es van enregistrant en una taula, les posicions sobrants de la qual es replenen a zeros, i que
s’ha dimensionat a 5000 per tal que hi càpiga la informació de totes les cartes que es juguen en una taula
durant un dia. D’un dia a un altre, naturalment, no es juga la mateixa quantitat de cartes.
Es demana construir una funció que rebi la taula enregistrada per la càmera i que retorni la quantitat
de diamants jugats.
funcio diamondsQtty (shuffle: taula [5000] de integer): integer
	 var
		 card, diamond, i : integer; 		
// actual card, diamonds counter,
										
// auxiliar counter
	 fvar

25
i := 1;
	 diamond := 0;
	 card := suffle[i];
	 mentre ((card ≠ 0) i (i≤5000)) fer 	
		si card > 39 llavors 			
			diamond := diamond + 1;
		fsi
		 i := i + 1;
		 card := shuffle[i];				
	 fmentre

// count each card occurrence
// from 39 to max value are diamonds

// next card

	 retorna diamond;
ffuncio

3. Un laboratori de recerca sobre la imatge vol crear un nou estàndard d’emmagatzemament i treball
amb imatge i per aquest motiu ha de crear dades estructurades i mòduls de programa.
S’ha de crear una dada estructurada picture capaç d’emmagatzemar una imatge de fins 10 megapíxels
(10 milions de pixels). De la imatge s’ha de desar:
•	 El tipus d’imatge: que pot rebre els valors ‘c’, ‘m’, ‘r’, ‘g’ i ‘b’ segons els significats exposats en l’exercici 1 d’aquesta prova.
•	 L’amplada i l’alçada de la imatge en píxels
•	 Per a tres canals, la informació de cadascun dels píxel (un número entre 0 i 255).
Si una imatge no ocupa 10 megapíxels, l’espai sobrant s’acaba d’omplir a zeros.
Les imatges en blanc i negre, emmagatzemaran la informació dels píxels en el mateix canal que correspon al color vermell de les imatges a color.
Les imatge monocromes corresponents a un canal de color emmagatzemaran la informació en el seu
canal corresponent i els altres dos canals restaran completament a zeros.
•	 Dissenyeu la dada estructurada picture
tipus
	 picture = tupla
		pictType : character;
		width : integer;
		high : integer:
		r : taula [10000000] de integer;
		g: taula [10000000] de integer;
		b: taula [10000000] de integer;
	ftupla
ftipus

Per emmagatzemar les imatges de prova s’ha creat una dada estructura que permet mantenir-ne fins
1 milió de fotos
biblio = tupla
	 qtty : integer;
	 col : taula [1000000] de picture;
ftupla
i s’ha creat la variable test del tipuxs biblio.
Escriviu l’expressió que ens indiqui si el darrer píxel de la imatge en posició 32 té component vermella
test.col[32].r[test.col[32].width* test.col[32].high]≠0

26
Creeu un mòdul (acció o funció, el més adequat) que rebi dues imatges del mateix tipus i dimensions i
en retorni una tercera en que cada píxel sigui la mitjana entre els píxels de les imatges originals.
funcio imgAverage (first: picture, second:picture): picture
	 var
		n, i: integer;
		new: picture
	 fvar
	
	
	

new.pictType := first.pictType; 				
new.width := first.width;
new.high := first.high;

	

// copies picture head

n := first.width * first.high;

	 per i := 1 fins n fer 					// computes average pixel
		new.r[i] := (first.r[i] + second.r[i]) div 2;
		 new.g[i] := (first.g[i] + second.g[i]) div 2;
		 new.b[i] := (first.b[i] + second.b[i]) div 2;
	 fper
	 per i := n+1 fins 10000000 fer 				// fill 0 rest of image
		new.r[i] := 0;
		new.g[i] := 0;
		new.b[i] := 0;
	 fper
	 retorna new
ffuncio

27

More Related Content

Viewers also liked

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
 
Vídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia BriaVídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia BriaLidia Bria
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaLidia Bria
 
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
 
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
 
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
 
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 - 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 - 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
 
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
 
Narrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia BriaNarrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia BriaLidia Bria
 
Programació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaProgramació - Pac2 - Lidia Bria
Programació - Pac2 - 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
 
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
 
Llenguatges i estàndards web - PS - Lidia Bria
Llenguatges i estàndards web - PS - Lidia BriaLlenguatges i estàndards web - PS - Lidia Bria
Llenguatges i estàndards web - PS - Lidia BriaLidia Bria
 
Fonaments i evolució de la Multimèdia - Ps - Lídia Bria
Fonaments i evolució de la Multimèdia - Ps - Lídia BriaFonaments i evolució de la Multimèdia - Ps - Lídia Bria
Fonaments i evolució de la Multimèdia - Ps - Lídia BriaLidia Bria
 
Narrativa interactiva - Pac3 - Solució - Lidia Bria
Narrativa interactiva - Pac3 - Solució - Lidia BriaNarrativa interactiva - Pac3 - Solució - Lidia Bria
Narrativa interactiva - Pac3 - Solució - Lidia 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
 

Viewers also liked (20)

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
 
Vídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia BriaVídeo - Pac1 - Lídia Bria
Vídeo - Pac1 - Lídia Bria
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia Bria
 
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
 
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
 
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
 
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 - 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 - 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
 
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
 
Narrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia BriaNarrativa interactiva - Pac1 - Solució - Lidia Bria
Narrativa interactiva - Pac1 - Solució - Lidia Bria
 
Programació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaProgramació - Pac2 - Lidia Bria
Programació - Pac2 - 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
 
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
 
Llenguatges i estàndards web - PS - Lidia Bria
Llenguatges i estàndards web - PS - Lidia BriaLlenguatges i estàndards web - PS - Lidia Bria
Llenguatges i estàndards web - PS - Lidia Bria
 
Fonaments i evolució de la Multimèdia - Ps - Lídia Bria
Fonaments i evolució de la Multimèdia - Ps - Lídia BriaFonaments i evolució de la Multimèdia - Ps - Lídia Bria
Fonaments i evolució de la Multimèdia - Ps - Lídia Bria
 
Narrativa interactiva - Pac3 - Solució - Lidia Bria
Narrativa interactiva - Pac3 - Solució - Lidia BriaNarrativa interactiva - Pac3 - Solució - Lidia Bria
Narrativa interactiva - Pac3 - Solució - Lidia Bria
 
Vídeo - Ps - Lídia Bria
Vídeo - Ps - Lídia BriaVídeo - Ps - Lídia Bria
Vídeo - Ps - Lídia Bria
 

More from Lidia 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 - 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
 
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
 
Matemàtiques per Multimèdia II - Pac1 - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Lidia BriaMatemàtiques per Multimèdia II - Pac1 - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pac1 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac1 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Solució - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia II - Pràctica - Lidia Bria
Matemàtiques per Multimèdia II - Pràctica - Lidia BriaMatemàtiques per Multimèdia II - Pràctica - Lidia Bria
Matemàtiques per Multimèdia II - Pràctica - Lidia BriaLidia Bria
 
Matemàtiques per Multimèdia I - PS - Lidia Bria
Matemàtiques per Multimèdia I - PS - Lidia BriaMatemàtiques per Multimèdia I - PS - Lidia Bria
Matemàtiques per Multimèdia I - PS - Lidia BriaLidia Bria
 
Imatge i llenguatge visual - PS - Lidia Bria
Imatge i llenguatge visual - PS - Lidia BriaImatge i llenguatge visual - PS - Lidia Bria
Imatge i llenguatge visual - PS - Lidia BriaLidia Bria
 
Vídeo - Practica2 - Lídia Bria
Vídeo - Practica2 - Lídia BriaVídeo - Practica2 - Lídia Bria
Vídeo - Practica2 - Lídia BriaLidia Bria
 

More from Lidia Bria (19)

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 - 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
 
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
 
Matemàtiques per Multimèdia II - Pac1 - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Lidia BriaMatemàtiques per Multimèdia II - Pac1 - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Lidia Bria
 
Matemàtiques per Multimèdia II - Pac1 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Solució - Lidia BriaMatemàtiques per Multimèdia II - Pac1 - Solució - Lidia Bria
Matemàtiques per Multimèdia II - Pac1 - Solució - Lidia Bria
 
Matemàtiques per Multimèdia II - Pràctica - Lidia Bria
Matemàtiques per Multimèdia II - Pràctica - Lidia BriaMatemàtiques per Multimèdia II - Pràctica - Lidia Bria
Matemàtiques per Multimèdia II - Pràctica - Lidia Bria
 
Matemàtiques per Multimèdia I - PS - Lidia Bria
Matemàtiques per Multimèdia I - PS - Lidia BriaMatemàtiques per Multimèdia I - PS - Lidia Bria
Matemàtiques per Multimèdia I - PS - Lidia Bria
 
Imatge i llenguatge visual - PS - Lidia Bria
Imatge i llenguatge visual - PS - Lidia BriaImatge i llenguatge visual - PS - Lidia Bria
Imatge i llenguatge visual - PS - Lidia Bria
 
Vídeo - Practica2 - Lídia Bria
Vídeo - Practica2 - Lídia BriaVídeo - Practica2 - Lídia Bria
Vídeo - Practica2 - Lídia Bria
 

Recently uploaded

feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555twunt
 
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
 
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
 
transició historia segon de batxiller at
transició historia segon de batxiller attransició historia segon de batxiller at
transició historia segon de batxiller atJuliaBasart1
 
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
 
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfErnest Lluch
 
Plans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El MusicalPlans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El Musicalalba444773
 
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERSSuperAdmin9
 

Recently uploaded (8)

feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555feedback.pdf55555555555555555555555555555
feedback.pdf55555555555555555555555555555
 
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
 
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
 
transició historia segon de batxiller at
transició historia segon de batxiller attransició historia segon de batxiller at
transició historia segon de batxiller at
 
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
 
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdfESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
ESCOLAERNESTLLUCHINFORME_BAREM_RESOLTES_BAREM.pdf
 
Plans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El MusicalPlans Estudi per Especialitats - El Musical
Plans Estudi per Especialitats - El Musical
 
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
4 RATLLES - MAIG 2024 - ESCOLA AMETLLERS
 

Programació - Exàmen - Lidia Bria

  • 1. 11/06/2011 1.- L'estació meteorològica de St. Fost de Campsentelles recull dades atmosfèriques automàticament i sense aturar-se des de 1980. Les dades recollides es recullen cada 10 minuts i diàriament queden enregistrades en una seqüència del tipus <A M D H1 m1 T1 h1 P1 V1 H2 m2 T2 h2 P2 V2 ··· H144 m144 T144 h144 P144 V144> on • A, és un enter: l'Any • M es un enter: el Mes • D és el dia. també un enter • Hi mi constitueixen l'hora i minut en què s'enregistren les dadesi • Ti hi Pi Vi són respectivament la Temperatura, humitat, Pressió i Vent del momenti. Tots aquests valors són de tipus real. Com que es prenen dades cada 10 minuts la seqüència de cada dia té 144 paquets de H m T h P V la seqüència < 2008 3 4 0 0 12.2 88.4 1010.0 1.0 0 10 12.2 88.5 1009.8 1.1 ··· indica que a les 0:00 del 3/4/2008 la temperatura era 12.2ºC, la humitat del 88.4%, la pressió de 1010.0 HPa i el vent de 1.0 m/s; a les 0:10, la temperatura era 12.2ºC, la humitat del 88.5%, la pressió de 1009.8 HPa i el vent de 1.1 m/s; ··· Es demana que dissenyeu un algorisme maxMin llegeixi de l'entrada estàndard les dades corresponents a un dia i escrigui a la sortida estàndard la data i les temperatures màxima i mínima del dia. La sortida ha de ser del tipus: < A M D Tmax Tmin > on A, M i D tenen el mateix significat que abans i Tmax i Tmin són la temperatura màxima i mínima del dia Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es demana en cap cas la utilització de disseny descendent. algorisme maxMin var A, M, D, H, m: enter; //Any, Mes, Dia, Hora, minut tMax, tMin: real; //Temperatures màxima i mínima i, j: enter; //Comptadors pels bucles T: real; //Temperatura actual auxiliar: real; //real per llegir les altres //dades que no es necessiten fvar /*Tractament inicial*/ A := llegirEnter(); M := llegirEnter(); D := llegirEnter(); H := llegirEnter(); m := llegirEnter(); T := llegirReal(); tMax := T; tMin := T; per j := 1 fins 3 fer auxiliar := llegirReal(); fper // no es necessita /*Tractament de la seqüència*/ 1
  • 2. per i := 2 fins 144 fer H := llegirEnter(); m := llegirEnter(); T := llegirReal(); si T > tMax llavors tMax := T; si T < tMin llavors tMin := T; per j := 1 fins 3 fer auxiliar := llegirReal(); fper fper /*Final del tractament*/ escriureEnter(A); escriureEnter(M); escriureEnter(D); escriureReal(tMax); escriureReal(tMin); falgorisme 2.- Al centre meteorològic del Tibidabo, es mantenen les dades meteorològiques des del 1893. L'any 1992 es va decidir informatitzar-les i en l'actualitat ja es tenen les dades diàries de Temperatura, Pluja, Humitat i Pressió, corresponents a tot el segle XX (1901 - 2000). Per a cada element meteorològic s'ha creat una taula de taules i es descriuen seguit: TempXX taula [100] de taula [365] de real, PluvXX taula [100] de taula [365] de real, HumeXX taula [100] de taula [365] de real, PresXX taula [100] de taula [365] de real, de manera que TempXX[54][186] conté la temperatura del dia 186 de l'any 1954 (el 5 de juliol). De cara a homogeneïtzar les dades s'ha eliminat la dada del 29 de febrer dels anys de traspàs. Es demana: a) [10%] definiu la capçalera del mòdul (acció o funció) anyModel que rep una taula meteorològica del segle Dxx[100][365], i en retorna una altra de 365 posicions en què cada posició és la mitjana dels valors d'aquell dia en tot el segle. funcio anyModel (DXX:taula [100] de taula [365] de real) :taula[365] de real b) [20%] codifiqueu el mòdul anyModel funcio anyModel (DXX:taula [100] de taula var i, j: enter; Dout: taula[365] de real fvar per i := 1 fins 365 fer Dout[i] := 0; fper per i := 1 fins 100 fer per j := 1 fins 365 fer Dout[j] := Dout[j] + Dxx[i][j]; fper fper per i := 1 fins 365 fer Dout[i] := Dout[i]/365; fper [365] de real) :taula[365] de real //inicialitzem a zero //calculem mitjanes 2
  • 3. retorna Dout; ffuncio 3.- Una macro botiga de calçats té veritables problemes amb el magatzem perquè ha de tenir passadis- sos amples perquè passin els dependents i massa habitualment les capses que es treuen del seu lloc no es retornen. Per aquest motiu ha decidit posar un magatzem automàtic informatitzat en què cada casella del magatzem té cabuda per una capsa de sabates i l'emmagatzematge i recollida es fa automàticament per un sistema de plataformes mòbils. El magatzem consta de 10000 caselles que poden estar buides o ocupades. Es demana que dissenyeu: a) [10%] Un tipus box per emmagatzemar la informació de l'estat de totes les caselles. Indiqueu quin valor indica que una casella està ocupada i quin valor indica que una casella està lliure. tipus box = taula [10000] de booleans ftipus {true indica que està lliure; false indica que està ocupada} b) [5%] Un tipus tSabata per emmagatzemar la informació d'un parell de sabates. Per a cada parella es disposa de les següents dades: el fabricant (que representarem pel tipus tString) el codi (un enter), la talla (un enter), el color (un caràcter), en quin box està emmagatzemat (enter), el valor de compra de la peça (un real) i el valor de venda de la peça (un real). tipus tSabata = tupla fabric : tString; codi: enter; talla: enter; color: caracter; box: enter; compra: real; venda: real; ftipus El tipus tInventari que emmagatzema la informació de totes les parelles de sabates en el magatzem (fins 10000) en una taula. Les posicions de la taula ocupades són sempre les primeres. tipus tInventari = tupla sabata : taula [10000] de tSabata qtty : enter; ftipus Les dades de totes les sabates emmagatzemades estan a la variable botiga de tipus tInventari c) [5%] Donada la variable botiga del tipus tInventari, escriviu l'expressió que permetrà conèixer si el fabricant de la última sabata entrada al magatzem és "Pages". botiga.sabata[botiga.qtty].fabric = "Pages" d) [20%] Dissenyeu la acció boxLliure que rebi la variable de tipus tBox i retorni el número d'una casella buida a l'hora que canvia d'estat lliure a ocupada. Si no hi ha cap box lliure, ha de retornar un 0. acció boxlliure (entsor boxes: taula [10000] de boolea, sort pos:enter) pos := 1; mentre pos <= 10000 i no boxes[pos] fer pos := pos + 1; fmentre si pos <= 10000 llavors boxes[pos] := fals; sino 3
  • 4. pos := 0; fsi faccio 18/06/2011 1.- [30%] L’estació meteorològica de St. Fost de Campsentelles recull dades atmosfèriques automàticament i sense aturar-se des de 1980. Les dades recollides es recullen cada 10 minuts i diàriament queden enregistrades en una seqüència del tipus <A M D H1 m1 T1 h1 P1 V1 H2 m2 T2 h2 P2 V2 ··· H144 m144 T144 h144 P144 V144> on • • • • • A, és un enter: l’Any M es un enter: el Mes D és el día. També un enter Hi mi constitueixen l’hora i minut en què s’enregistren les dadesi Ti hi Pi Vi són respectivament la Temperatura, humitat, Pressió i Vent del momenti. Tots aquests valors són de tipus real. Com que es prenen dades cada 10 minuts la seqüència de cada dia té 144 paquets de H m T h P V la seqüència < 2008 3 4 0 0 12.2 88.4 1010.0 1.0 0 10 12.2 88.5 1009.8 1.1 ··· indica que a les 0:00 del 3/4/2008 la temperatura era 12.2ºC, la humitat del 88.4%, la pressió de 1010.0 HPa i el vent de 1.0 m/s; a les 0:10, la temperatura era 12.2ºC, la humitat del 88.5%, la pressió de 1009.8 HPa i el vent de 1.1 m/s; ··· Es demana que dissenyeu un algorisme pressioHumitat que llegeixi de l’entrada estàndard les dades corresponents a un dia i escrigui a la sortida estàndard la data i la humitat i pressió mitjanes del dia. La sortida ha de ser del tipus: < A M D Hm Pm > on A, M i D tenen el mateix significat que abans i Hm és la humitat mitjana i Pm la pressió mitjana del dia Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es demana en cap cas la utilització de disseny descendent. algorisme pressioHumit var A, M, D, H, m : enter; //Any, Mes, Dia, Hora, minut Hm, Pm: real; //humitat i pressió mitjanes i: enter; //Comptador pel bucle auxiliar: real; //real per llegir les altres //dades que no es necessiten fvar /* Tractament inicial */ A := llegirEnter(); M := llegirEnter(); D := llegirEnter(); 4
  • 5. Hm := 0; Pm := 0; /* Tractament de la seqüència */ per i := 1 fins 144 fer H := llegirEnter(); m := llegirEnter(); auxiliar := llegirReal(); Hm := Hm + llegirReal(); Pm := Pm + llegirReal(); auxiliar := llegirReal(); fper /* Final del tractament */ Hm := Hm / 144.0; Pm := Pm / 144.0; escriureEnter(A); escriureEnter(M); escriureEnter(D); escriureReal(Hm); escriureReal(Pm); falgorisme 2.- [30%]. Al centre meteorològic del Tibidabo, una aplicació informàtica mostra, per les pantalles, unes gràfiques que corresponen a l’evolució de les dades meteorològiques diàries al llarg del darrer any (els últims 365 dies). Es mostra la gràfica de Temperatura, Pluja, Humitat i Pressió. Aquestes dades estan emmagatzemades en quatre taules de 365 valors reals cadascuna. Temp Pluv Hume Pres tabla [100] de tabla [365] de real tabla [100] de tabla [365] de real tabla [100] de tabla [365] de real tabla [100] de tabla [365] de real Un investigador decideix fer un suavitzat de les dades, fet consistent en, per a cada dia, obtenir un nou valor que és la mitjana entre el valor real del dia anterior, el de l’actual i el del posterior (p.e. la pressió suavitzada del dia 58 de l’any es calcula amb les pressions reals dels dies 57, 58 i 59). D’aquesta manera creu que als gràfics desapareixeran molts dels pics i mostraran millor les tendències de les dades meteorològiques. S’adona que no es pot calcular el suavitzat del primer dia (perquè no hi ha anterior) ni del darrer (perquè no hi ha posterior). Es demana: a) [10%] definiu la capçalera del mòdul (acció o funció) suavitzaDades que rep una taula anual meteorològica de 365 posicions, i en retorna una altra de 365 posicions en què en les posicions 2 a 364 estan les dades suavitzades. funcio suavitzaDades (D:taula [365] de real) :taula[365] de real b) [20%] codifiqueu el mòdul suavitzaDades funcio suavitzaDades (Din:taula [365] de real) :taula[365] de real var i: enter; Dout: taula[365] de real 5
  • 6. fvar per i := 2 fins 364 fer Dout[i] := (Din[i-1] + Din[i] + Din[i+1])/3; fper retorna Dout; ffuncio 3.- [40%] Una macro botiga de calçats té veritables problemes amb el magatzem perquè ha de tenir passadissos amples perquè passin els dependents i massa habitualment les capses que es treuen del seu lloc no es retornen. Per aquest motiu ha decidit posar un magatzem automàtic informatitzat en què cada casella del magatzem té cabuda per una capsa de sabates i l’emmagatzematge i recollida es fa automàticament per un sistema de plataformes mòbils. El magatzem consta de 10000 caselles que poden estar buides o ocupades. Es demana que dissenyeu: a) [10%] Un tipus box per emmagatzemar la informació de l’estat de totes les caselles. Indiqueu quin valor indica que una casella està ocupada i quin valor indica que una casella està lliure. tipus box = taula [10000] de booleans ftipus {true indica que està lliure; false indica que està ocupada} b) [5%] Un tipus tSabata per emmagatzemar la informació d’un parell de sabates. Per a cada parella es disposa de les següents dades: model (cadena de caràcters que representarem pel tipus tString), el codi (un enter), la talla (un enter), el color (un caràcter), en quin box està emmagatzemat (enter). tipus tSabata = tupla model : tString; codi: enter; talla: enter; color: caracter; box: enter; ftipus El tipus tInventari que emmagatzema la informació de totes les parelles de sabates en el magatzem (fins 10000) en una taula. Les posicions de la taula ocupades són sempre les primeres. tipus tInventari = tupla sabata : taula [10000] de tSabata qtty : enter; ftipus Les dades de totes les sabates emmagatzemades estan a la variable botiga de tipus tInventari c) [5%] Donada la variable botiga del tipus tInventari, escriviu l’expressió que permetrà conèixer el color de la última sabata entrada al magatzem. botiga.sabata[botiga.qtty].color d) [20%] Dissenyeu la acció boxSabata que rebi la variable botiga, el codi d’un model de sabates, la talla i el color i retorni el número del box on està emmagatzemada i la posició de la sabata en la taula de botiga. En el cas que la sabata no estigui en el magatzem, retornarà un 0 en les dues variables. acció boxSabata (ent botiga: tInventari, ent codi: enter, ent talla: enter; ent color: caracter; sort box:enter; sort pos:enter) 6
  • 7. var trobat : booleà; a : tSabata; fvar pos := 0; box := 0; trobat := fals; mentre pos < botiga.qtty i no trobat fer pos := pos + 1; a := botiga.sabata[pos]; si (a.codi = codi i a.talla = talla i a.color=color) llavors trobat := true; box := a.box; fsi fmentre si (no trobat) llavors pos := 0; fsi faccio 22/06/2011 1.- [30%] L’estació meteorològica de St. Fost de Campsentelles recull dades atmosfèriques automàticament i sense aturar-se des de 1980. Les dades recollides es recullen cada 10 minuts i diàriament queden enregistrades en una seqüència del tipus <A M D H1 m1 T1 h1 P1 V1 H2 m2 T2 h2 P2 V2 ··· H144 m144 T144 h144 P144 V144> on • • • • • A, és un enter: l’Any M es un enter: el Mes D és el día. també un enter Hi mi constitueixen l’hora i minut en què s’enregistren les dadesi Ti hi Pi Vi són respectivament la Temperatura, humitat, Pluviositat i Vent del momenti. Tots aquests valors són de tipus real. Com que es prenen dades cada 10 minuts la seqüència de cada dia té 144 paquets de H m T h P V la seqüència < 2008 3 4 0 0 12.2 88.4 0.0 1.0 0 10 12.2 88.5 0.08 1.1 ··· indica que a les 0:00 del 3/4/2008 la temperatura era 12.2ºC, la humitat del 88.4%, la pluja de 0.0 l/m2 i el vent de 1.0 m/s; a les 0:10, la temperatura era 12.2ºC, la humitat del 88.5%, la pluviositat de 0.08 l/ m2 i el vent de 1.1 m/s; ··· Es demana que dissenyeu un algorisme plujaTemp llegeixi de l’entrada estàndard les dades corresponents a un dia i escrigui a la sortida estàndard la data i la temperatura mitjana i la pluja total del dia. La sortida ha de ser del tipus: < A M D Tm Pt > on A, M i D tenen el mateix significat que abans i Tm és la temperatura mitjana i Pt la pluja total del 7
  • 8. dia. Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es demana en cap cas la utilització de disseny descendent. algorisme plujaTemp var A, M, D, H, m : enter; // Tm, Pt: real; // i: enter; // auxiliar: real; // // fvar /* Tractament inicial */ A := llegirEnter(); M := llegirEnter(); D := llegirEnter(); Any, Mes, Dia, Hora, minut temp. mitjana i pluja total Comptador pel bucle real per llegir les altres dades que no es necessiten Tm := 0; Pt := 0; /* Tractament de la seqüència */ per i := 1 fins 144 fer H := llegirEnter(); m := llegirEnter(); Tm := Tm + llegirReal(); auxiliar := llegirReal(); Pt := Pt + llegirReal(); auxiliar := llegirReal(); fper /* Final del tractament */ Tm := Tm / 144.0; escriureEnter(A); escriureEnter(M); escriureEnter(D); escriureReal(Tm); escriureReal(Pt); falgorisme 2.- [30%] Al centre meteorològic del Tibidabo, una aplicació informàtica mostra, per les pantalles, unes gràfiques que corresponen a l’evolució de les dades meteorològiques diàries al llarg del darrer any (els últims 365 dies). Es mostra la gràfica de Temperatura, Pluja, Humitat i Pressió. Aquestes dades estan emmagatzemades en quatre taules de 365 valors reals cadascuna. Temp taula [365] de real, Pluv taula [365] de real, Hume taula [365] de real, Pres taula [365] de real, A les 00:00 de cada dia, s’actualitzen les taules, fet consistent en què s’incorpora a la darrera posició de cada la taula la dada del dia que acaba de finalitzar, es perd la dada més antiga i totes les altres corren una posició endavant. Es demana: a) [10%] definiu la capçalera del mòdul (acció o funció) actualitzaDies que rep les quatre taules meteorològiques, els valors del dia de temperatura, pluja, humitat i pressió i en fa l’actualització per al següent dia. accio actualitzaDies ( entsor Te: taula [365] de real, 8
  • 9. entsor Pl: entsor Hu: entsor Pr: ent TeDia: ent HuDia: taula taula taula real, real, [365] de real, [365] de real, [365] de real, ent PlDia: real, ent PrDia: real) b) [20%] codifiqueu el mòdul actualitzaDies accio actualitzaTaulaDies ( //accio auxiliar que actualitza una sola taula entsor D: taula [365] de real, ent dada: real) var i: enter; fvar per i := 1 fins 364 fer D[i] := D[i + 1]; fper D[365] := dada; faccio //es corre una posició endavant //es posa la nova dada al final accio actualitzaDies ( entsor Te: taula [365] de real, entsor Pl: taula [365] de real, entsor Hu: taula [365] de real, entsor Pr: taula [365] de real, ent TeDia: real, ent PlDia: real, ent HuDia: real, ent PrDia: real) actualitzaTaulaDies (Te, TeDia); actualitzaTaulaDies (Pl, PlDia); actualitzaTaulaDies (Hu, HuDia); actualitzaTaulaDies (Pr, PrDia); faccio 3.- [40%] Una macro botiga de calçats té veritables problemes amb el magatzem perquè ha de tenir passadissos amples perquè passin els dependents i massa habitualment les capses que es treuen del seu lloc no es retornen. Per aquest motiu ha decidit posar un magatzem automàtic informatitzat en què cada casella del magatzem té cabuda per una capsa de sabates i l’emmagatzematge i recollida es fa automàticament per un sistema de plataformes mòbils. El magatzem consta de 10000 caselles que poden estar buides o ocupades. Es demana que dissenyeu: a) [10%] Un tipus box per emmagatzemar la informació de l’estat de totes les caselles. Indiqueu quin valor indica que una casella està ocupada i quin valor indica que una casella està lliure. tipus box = taula [10000] de booleans ftipus {true indica que està lliure; false indica que està ocupada} b) [5%] Un tipus tSabata per emmagatzemar la informació d’un parell de sabates. Per a cada parella es disposa de les següents dades: model (cadena de caràcters que representarem pel tipus tString), el codi (un enter), la talla (un enter), el material (un caràcter), en quin box està emmagatzemat (enter), el valor de compra de la peça (un real) i el valor de venda de la peça (un real) i el bonus (un enter) tipus tSabata = tupla 9
  • 10. model : tString; codi: enter; talla: enter; material: caracter; box: enter; compra: real; venda: real; bonus: enter; ftipus El tipus tInventari que emmagatzema la informació de totes les parelles de sabates en el magatzem (fins 10000) en una taula. Les posicions de la taula ocupades són sempre les primeres. tipus tInventari = tupla sabata : taula [10000] de tSabata qtty : enter; ftipus Les dades de totes les sabates emmagatzemades estan a la variable botiga de tipus tInventari c) [5%] Donada la variable botiga del tipus tInventari, escriviu l’expressió que permetrà conèixer el benefici si es ven la última sabata entrada al magatzem. botiga.sabata[botiga.qtty].compra botiga.sabata[botiga.qtty].venda d) [20%] Dissenyeu la acció rebaixes que rebi la variable botiga i disminueixi el preu de venda de cada parella de sabates segons el valor del bonus. bonus descompte 0 5% 1 10% 2 15% acció rebaixes (entsor botiga: tInventari) var i : enter desc : real; fvar i := 0; mentre i < botiga.qtty fer i := i + 1; si botiga.sabata[i].bonus = 0 llavors desc := 0.95; sino si botiga.sabata[i].bonus = 1 llavors desc := 0.90; sino desc := 0.85; fsi fsi botiga.sabata[i].venda := botiga.sabata[i].venda * desc; fmentre faccio 10
  • 11. 18/01/2012 1. (3 punts) A l'ecopark de Sant Fost de Campsentelles hi van a descarregar els camions de recollida selectiva de deixalles procedents dels municipis de la comarca. Quan entren els camions s'omple un registre que inclou dades del municipi d'origen, hora d'entrada, tipus i pes del material. A la deixalleria s'agrupen els materials per tipus i són expedits a les plantes de reciclatge. El registre diari d'entrades de l'ecopark és una seqüència del tipus <M D A1 H1 m1 T1 P1 A2 H2 m2 T2 P2 ··· An Hn mn Tn Pn 0> on • M és un enter: el mes. • D és el día. També un enter. • Ai és el codi de l'ajuntament, un número enter de 5 xifres que coincideix amb el codi postal més baix del municipi. • Hi mi , enters, constitueixen l'hora i minut en què entra el camiói • Ti és la codificació del tipus de material, un número que pot ser: ° 1 ⇒ paper, 2 ⇒ envasos, 3 ⇒ vidre, 4 ⇒ orgànica • Pi és el pes, en kg, transportat pel camiói. • 0 és el número 0 que indica el final de la seqüència Com que cada municipi té un sistema diferent de recollida la quantitat de camions que entren en un dia pot ser variable i per detectar la fi de la seqüència s'escriu un 0 la seqüència < 3 4 08105 6 12 1 5010 08101 6 17 3 7210 ··· 0> indica que a les 6:12 del 3 d'abril va entrar una camió del municipi 08105 carregat amb 5010 kilos de paper; a les 6:17 un camió del municipi 08101 amb 7210 Kg de vidre; ··· Es demana que dissenyeu un módul (acció o funció, el més adequat) de nom totalMaterial que rebi el codi d'un material (T), llegeixi la seqüència de dades de l'entrada estàndar i escrigui a la sortida estàndar la quantitat de camions rebuts amb aquell material i la totalitat de quilos corresponent. La sortida ha de ser del tipus: < T M D tc tq > on T, M i D tenen el mateix significat que abans i tc és la quantitat total de camions que han entrat durant el dia amb el material de tipus T i tq la totalitat de quilos que portaven Nota: En aquesta pregunta es valorarà l’aplicació correcta dels esquemes algorísmics i NO es demana en cap cas la utilització de disseny descendent. accio totalMaterial (ent code: caracter) var M, D, A, H, m, T, P : enter; T : caracter; tc, tp : enter; fvar //inici del tractament M := llegeixEnter(); D := llegeixEnter(); tc := 0; tp := 0; A := llegeixEnter(); //recollida i acumulació de dades mentre A ≠ 0 fer 11
  • 12. H := llegeixEnter(); m := llegeixEnter(); T := llegeixCaracter(); P := llegeixEnter; si T = code llavors tc := tc + 1; tp := tp + P; fisi A := llegeixEnter(); fmentre //sortida de resultats escriureEnter (code); escriureEnter (M); escriureEnter (D); escriureEnter (tc); escriureEnter (tp); facción 2. (3punts) La cadena de restaurants Good menu té 4 locals, oberts els 365 dies de l'any, en els quals serveix 10 menús Per tal de fer estadístiques recull les dades anuals dels quatre locals en quatre variables definides com taules de taules: tipus tVendesDia= taula[365] de enter; tMenu= taula[10] de tVendesDia; ftipus var BigMenu, MenuOne, DailyMenu, PresXX: tMenu; fvar de manera que BigMenu[1][186] conté la quantitat de menús del tipus 1 del dia 186 de l'any (el 5 de juliol) del local Big Menu. De cara a homogeneïtzar les dades s'ha eliminat la dada del 29 de febrer dels anys de traspàs. Es demana: i. definiu la capçalera del mòdul (acció o funció) totalDiari que rep les dades dels quatre restaurants i retorna una taula de 365 posicions en què en cada posició te la totalitat de menús (sense distinció del tipus) servits aquell dia entre tots els restaurants de la cadena. (1 punt) funcio totalDiari (D1: tMenu, D2: tMenu, D3: tMenu, D4: tMenu): tVendesDia ii. codifiqueu el mòdul totalDiari (2 punts) funcio totalDiari ( D1: tmenu, D2: tmenu, D3: tmenu, D4: tmenu):tVendesDia var i, j: enter; Dout : tVendesDia; fvar per i:= 1 fins 365 fer //inicialitzem l'acumulador del dia a zero Dout[i] := 0; //acumulem els menus del dia i dels 4 restaurants per j := 1 fins 10 fer // acumulem els menus del tipus j del dia i dels 4 restaurants Dout[i] := Dout[i] + D1 [j][i] + D2 [j][i] + D3 [j][i] + D4 [j][i]; 12
  • 13. fper fper retornar Dout; ffuncio 3. (4punts) Un estudi de disseny d'aplicacions multimèdia vol organitzar el seu repositori de videomaterials. Per a aquest exercici suposarem que està definit el tipus de dada text que conté una cadena de text i les accions i funcions escriureText i llegirText equivalent a les que coneixem per als altres tipus. Es demana que dissenyeu: a) Un tipus tInfoVideo per emmagatzemar la informació d'un clip de vídeo. Aquest informació ha d'incloure: el nom del fitxer, el format, el codi de l'autor (un número enter entre 1 i 1000), la durada en segons (un enter), el nom de la carpeta on està emmagatzemada i el preu d'ús del vídeo (un real). (0.5 punts) tipus tInfoVideo = tupla nom:text; format:text; autor:enter; durada:enter; carpeta:text; preu:real; ftupla b) Un tipus tAutor per emmagatzemar la informació de cada autor de vídeos. De cada autor hem de recopilar la següent informació. Cognoms (text), nom (text), dni(enter) i IBAN del seu compte (text). (0.5 punts) tipus tAutor = tupla cognoms: text; nom: text; dni: enter; IBAN: text; ftipus El tipus tInventari emmagatzema la informació de totes les imatges de què es disposa (fins 1000000) en una taula. Les posicions de la taula ocupades són sempre les primeres. tipus tInventari = tupla foto : taula [1000000] de tInfoVideo; qtty : enter; ftupla ftipus El tipus tPersonal emmagatzema les dades de tots els fotògrafs col·laboradors de l'empresa (el codi de l'autor és l'index dins la taula que li correspon) tipus tPersonal = tupla autor : taula [1000] de tAutor; qtty : enter; ftupla ftipus El programa que gestiona les dades té declarades les variables fons del tipus tInventari i la variable col·laborator del tipus tPersonal c) Donada la variable fons del tipus tInventari, escriviu l'expressió que permetrà conèixer si el primer clip del fons val més de 200€. (1 punt) 13
  • 14. fons.foto[1].preu > 200.0; d) Dissenyeu el mòdul videosByAutor que rebi les variables de tipus tIventari i tPersonal i el dni d'un autor i retorni la quantitat de clips d'aquest autor hi ha en el fons (2 punts) funció videosByAutor (fons: tInventari, col: tPersonal, dni: enter):enter var i, autor, clips:enter; fvar clips := 0; //localitzem el codi de l’autor i := 1; mentre i < col.qtty i dni ≠ col.autor[i].dni fer i := i + 1; fmentre autor := i; //comptem els vídeos d’aquest autor per i := 1 fins fons.qtty fer si autor = fons.foto[i].autor llavors clips := clips + 1; fsi fper retornar clips ffuncio 23/06/2012 1. (3 punts) Un repositori multimèdia rep habitualment informació de les pujades de materials dels seus associats. Aquesta informació s’enregistra en una seqüència anual del tipus on • • • • • • < M1 A1 D1 L1 T1 M2 A2 D2 L2 T2 ··· Mn An Dn Ln Tn F> Mi es el tipus de material, un caràcter que pot ser ° V de vídeo, ° M de música ° P de presentació ° D de diaporama Ai que és el nom de l’autor Di que és la durada en segons Li que és el tipus de llicència que pon prendre els valors CR, BY, NC, ND o SA Ti que és el codi de la temàtica, un número que pren valors entre 1 i 1000 F, és la lletra F que marca la fi de la seqüència Es demana construir un mòdul countByLicense (acció o funció, el més adequat) que rebi un tipus de material i retorni, en comptadors diferents, quants ítems hi ha llicenciats sota cada tipus de llicència. [podeu emprar el tipus simple text i els mòduls readText i writeText amb els mateixos significats que a les pràctiques] acció countByLicense (ent type: character, sor CR: enter, sor BY: enter, sor NC: enter, sor ND: enter, sor SA: enter) 14
  • 15. var material : carácter; name, license : text time, tema: enter fvar {inicialitza comptadors} CR := 0; BY := 0; NC := 0; ND := 0; SA := 0; {preparació de la sequència} material := readChar(); {tractament de la seqüència} mentre material ≠ ‘F’ fer name := readText(); time := readInteger(); license := readText(); tema := readInteger(); si material = type llavors si license = ‘CR’ llavors CR := CR +1; sino si license = ‘BY’ llavors BY := BY +1; sino si license = ‘NC’ llavors NC := NC +1; sino si license = ‘ND’ llavors ND := ND +1; sino SA := SA +1 fsi fsi fsi fsi fsi material := readChar(); fmentre faccio 2. (3 punts). A la central hidroelèctrica de Volga central es manté, per setmanes, un historial de la potència generada en cada hora. Per tal de fer estadístiques es reuneixen les dades en una taula de taules segons les següents definicions i declaracions tipus tDay = taula [24] de real; tWeek = taula [7] de tDay ftipus var volgaPower : tWeek fvar de manera que volgaPower[5][12] conté la potència generada divendres a les 12 del migdia. Es demana que creeu el mòdul hourPower (acció o funció, el més adequat) que rebi una hora determinada i la variable volgaPower, i retorni la potencia mitjana generada durant aquella hora al llarg de la 15
  • 16. setmana. funció hourPower( hora: enter, volgaPower : tWeek) : real; var total : real; dia : enter; fvar total := 0.0; per dia := 1 fins 7 fer total := total + volgaPower [dia][hora]; fper total := total / 7; retorna total ffuncio 3. (4 punts). Un aficionat a les curses d’automòbils i rallies vol fer un programa on emmagatzemar tota la informació de què disposa del calendari anual i dels automòbils que actualment participen en el circuit per tal de fer-ne un seguiment informatitzat. [podeu emprar el tipus simple text i els mòduls readText i writeText amb els mateixos significats que a les pràctiques] Es demana que dissenyeu a. Un tipus tDate per emmagatzemar una data en format numèric (0.5 punts) tipus tDate = tupla day , month , year : enter; ftupla ftipus b. Un tipus tCar que contingui informació del seu nom, equip, fabricant del motor y potència (en cavalls) (0.5 punts) tipus tCar = tupla name, equipe, poweredBy : text; power :enter; ftupla ftipus c. Un tipus tRace que contingui informació d’una cursa: nom, kilòmetres de recorregut, voltes, país, data i import en premis (0.5 punts) tipus tRace = tupla name, pais: text; km : real; voltes, awards : enter; raceDay: tDate; ftupla ftipus El tipus tMaquina pot emmagatzemar tota la informació sobre automòbils (fins 50000) en una taula. Les qtty primeres posicions són les que estan plenes 16
  • 17. tipus tMaquina= tupla car : taula [50000] de tCar; qtty : enter; ftupla ftipus El tipus tChampionship pot emmagatzemar tota la informació sobre les curses (fins 10000) en una taula. El camp winner conté els codis del cotxes guanyadors de cada cursa (aquest codi coincideix amb la posició que ocupa la informació del cotxe en la taula car del tipus tMaquina) Les qtty primeres posicions són les que estan plenes tipus tChampionship= tupla race : taula [10000] de tRace; winnerCode: taula [10000] de enter; qtty : enter; ftupla ftipus El programa que gestiona tota la informació té dues variables autos del tipus tMaquina i carrera del tipus tChampionship d. Donada la variable autos, escriviu l’expressió que digui la potència del darrer cotxe introduït a la taula (1 punt) autos.car[autos.qtty].power e. Dissenyeu el mòdul whatWon que rebi el nom d’un automóvil i les variables de tipus tMaquina i tChampionship i retorni la quantitat de carreres que ha guanyat aquest automòbil. (1.5 punts) funció whatWon (name: text, autos: tMaquina, carrera: tChampionship) var codeCar, maxRace, total, i, j: enter; fvar total := 0; maxRace := carrera.qtty; i := 1; mentre i <= autos.qtty i name ≠ autos.car[i].name fer i := i + 1; fmentre si i <= autos.qtty llavors {s’ha trobat un cotxer amb el nom, el seu codi és i } per j := 1 fins maxRace fer si carrera.winnerCode[j] = i llavors; total := total + 1; fsi fper fsi retornar total; ffuncio 12/01/2013 17
  • 18. 1. Les dades d’una imatge se situen en una seqüència, que és diferent si es tracta d’una seqüència en color de tres canals {C W H R1 G1 B1 R2 G2 B2... Rn Gn Bn} o monocromàtica d’un sol canal {M W H P1 P2 ... Pn} on: • C: és la lletra ‘c’ que indica que la foto és en color • M: pot prendre els valors ‘m’ si es tracta d’una foto en blanc i negre, o bé ‘r’ si es tracta d’un canal vermell, ‘g’ si es tracta d’un canal verd o ‘b’ si es tracta d’un canal blau. • W: és l’amplada en píxels de la imatge • H: és l’alçada en píxels de la imatge • Ri Gi Bi: són les intensitats dels components vermell, verd i blau del píxel-i en una imatge en color (valors enters que prenen valor entre 0 i 255) • Pi : és la intensitat de color (gris, vermell, verd o blau, segons sigui el tipus d’imatge) del píxel-i en una imatge monocromàtica. També pot prendre valors enters entre 0 i 255. Una imatge negativa B d’una imatge A és una imatge dels mateixos canals, les mateixes dimensions, però on el valor de cada píxel en la imatge nova es calcula restant de 255 el valor del píxel de la imatge original. Per exemple: Si la imatge original és en color {c 2 2 100 110 120 130 140 150 160 170 180 190 200 210} la imatge negativa serà {c 2 2 155 145 135 125 115 105 95 85 75 65 55 45}. En el cas d’una imatge monocromàtica {r 2 2 165 110 0 0} el negatiu seria {r 2 2 90 140 255 255} Es demana que construïu un algorisme que llegeixi de l’entrada estàndard una imatge i escrigui en la sortida estàndard la seqüència de la imatge negativa. algorisme negative var mode : character; w, h, n : integer; v, i : integer; fvar // picture type //wide, high, totalpixels mode := readCharacter(); w := readInteger(); h := readInteger(); writeCharacter(mode); writeInteger(w); writeInteger(h); n := w * h; si mode = ‘c’ llavors n := n * 3; fsi //read image head per i:=1 fins n fer v := readInteger(); writeInteger (255 – v); fper falgorismee // serial processing //write new image head //if color, number of values are triple //read value //write negative value 2.- En un casino, per controlar el joc dels croupiers de la taula de Black Jack, una càmera de vídeo enregistra les cartes que es van traient del shuffle (el dispensador de cartes), fa un reconeixement d’imatge i les codifica de manera que a les piques els correspon ordenadament els números 1 a 13, als trèvols del 14 al 26, a cors del 27 al 39 i als diamants del 40 al 52. A mida que es van extraient les cartes els codis es van enregistrant en una taula, les posicions sobrants de la qual es replenen a zeros, i que s’ha dimensi18
  • 19. onat a 5000 per tal que hi càpiga la informació de totes les cartes que es juguen en una taula durant un dia. D’un dia a un altre, naturalment, no es juga la mateixa quantitat de cartes. Es demana construir una funció que rebi la taula enregistrada per la càmera i un número (entre 1 i 13 corresponent a una puntuació) i digui quantes cartes d’aquella puntuació han dispensat durant el dia el shuffle (tingueu en compte que no ens importa si són piques, trèvols, cors o diamants, per comptar-los només importa el valor) Per exemple, per localitzar els 6 s'hauria de cercar el 6(♥), el 19(♣), en 32(♥) i el 45(♦). Si la seqüencia diària fora {34 6 45 32 2 35 19 51 45 15 18} es retornaria un 5. funcio lowerOccurrence (shuffle: taula [5000] de integer, n: integer): integer var card,counter, i : integer; // actual card, cards counter, // auxiliar counter fvar i:=1; //init counters counter := 0; n := n mod 13; // 0 is now the king, // others values no change card := suffle[i]; mentre ((card ≠ 0) y (i ≤ 5000)) fer //count each card occurrence card := card mod 13; // reduces numbers from // 1 to 12 (queen) and 0 (king); si card = n llavors counter := counter + 1; fsi i := i + 1; card := shuffle[i]; //next card fmentre retorna counter; ffuncio 3. Un laboratori de recerca sobre la imatge vol crear un nou estàndard d’emmagatzemament i treball amb imatge i per aquest motiu ha de crear dades estructurades i mòduls de programa. S’ha de crear una dada estructurada picture capaç d’emmagatzemar una imatge de fins 10 megapixels (10 milions de pixels). De la imatge s’ha de desar: • El tipus d'imatge: que pot rebre els valors ‘c’, ‘m’, ‘r’, ‘g’ i ‘b’ segons els significats exposats en l’exercici 1 d’aquesta prova. • L’amplada i l’alçada de la imatge en píxels • Per a tres canals, la informació de cadascun dels píxel (un número entre 0 i 255). Si una imatge no ocupa 10 megapixels, l’espai sobrant s’acaba d’omplir a zeros. Les imatges en blanc i negre, emmagatzemaran la informació dels pixels en el mateix canal que correspon al color vermell de les imatges a color. Les imatge monocromes corresponents a un canal de color emmagatzemaran la informació en el seu canal corresponent i els altres dos canals restaran completament a zeros. • Dissenyeu la dada estructurada picture tipus picture = tupla pictType: character; width: integer; high: integer: r: taula [10000000] de integer; g: taula [10000000] de integer; b: taula [10000000] de integer; ftupla 19
  • 20. ftipus Per emmagatzemar les imatges de prova s’ha creat una dada estructura que permet mantenir-ne fins 1 milió de fotos biblio = tupla qtty : integer; col : taula [1000000] de picture; ftupla i s’ha creat la variable test del tipus biblio. Escriviu l’expressió que ens indiqui si la imatge en posició 12500 de test és en blanc i negre i més alta que ample (test.col[12500].pictType = ‘m’) i (test.col[12500].high > test.col[12500]. width) Creeu un mòdul (acció o funció, el més adequat) que rebi una imatge en color i generi tres imatges monocromes corresponents als tres canals de la imatge general accio canalSeparate (ent in: picture, sor R:picture, sor G:picture, sor B:picture) var n, i: integer; fvar R.pictType := ‘r’; G.pictType := ‘g’; B.pictType := ‘b’; R.width := in.width; R.high := in.high; G.width := in.width; G.high := in.high; B.width := in.width; B.high := in.high; n := in.width * in.high; // creates picture heads per i:= 1 fins n fer // R.r[i] := in.r[i]; // R.g[i] := 0; R.b[i]:= 0; G.r[i] := 0; G.g[i] := in.g[i]; // G.b[i] := 0 B.r[i] := 0; B.g[i] := 0; B.b[i] := in.b[i]; // fper per i := n+1 fins 10000000 fer // R.r[i] := 0; R.g[i] := 0; R.b[i]:= 0; G.r[i] := 0; G.g[i] := 0; G.b[i] := 0; B.r[i] := 0; B.g[i] := 0; B.b[i] := 0; fper faccio computes n pixel on each image copies r channel in R copies g channel in G copies b channel in B fill 0 rest of image 19/01/2013 20
  • 21. 1. Les dades d’una imatge se situen en una seqüència, que és diferent si es tracta d’una seqüència en color de tres canals {C W H R1 G1 B1 R2 G2 B2 ... Rn Gn Bn} o monocromàtica d’un sol canal on: {M W H P1 P2 ... Pn} • C: és la lletra ‘c’ que indica que la foto és en color • M: pot prendre els valors ‘m’ si es tracta d’una foto en blanc i negre, o bé ‘r’ si es tracta d’un canal vermell, ‘g’ si es tracta d’un canal verd o ‘b’ si es tracta d’un canal blau. • W: és l’amplada en píxels de la imatge • H: és l’alçada en píxels de la imatge • Ri Gi Bi: són les intensitats dels components vermell, verd i blau del píxel i en una imatge en color (valors enters que prenen valor entre 0 i 255) • Pi : és la intensitat de color (gris, vermell, verd o blau, segons sigui el tipus d’imatge) del píxel i en una imatge monocromàtica. També pot prendre valors enters entre 0 i 255. Una de les maneres de crear imatges en fals color és permutar en cada píxel les intensitats dels tres canals de color, de manera que si RGB d’un píxel és 10 20 30, en permutar els canals s’obté 30 10 20 (es posa com intensitat de vermell la que en l’original és de verd, com intensitat de verd la que en l’original és de blau i com intensitat de blau la que en l’original és de vermell. Per a la imatge en color {c 2 2 100 110 120 130 140 150 160 170 180 190 200 210} la permuta donaria la imatge {c 2 2 120 100 110 150 130 140 180 160 170 210 190 200} Es demana que construïu un algorisme que llegeixi de l’entrada estàndard una imatge en color i escrigui a la sortida estàndard la seqüència de la imatge permutada. algorisme permute var mode : character; w, h, n : integer; r, g, b, i : integer; fvar // picture type // wide, high, totalpixels // read image head mode := readCharacter(); w := readInteger(); h := readInteger(); writeCharacter(mode); writeInteger(w); writeInteger(h); n := w * h; // serial processing per i := 1 fins n fer r := readInteger(); g := readInteger(); b := readInteger(); writeInteger (g); writeInteger (b); writeInteger (r); fper falgorisme // write new image head // red value // green value // blue value // write green as new red value // write blue as new green value // write red as new blue value L’enunciat s’il·lustra amb un exemple que no es correspon amb la descripció escrita. Mentre a la descripció s’explicita que el nou canal vermell ha de rebre el color de l’antic verd, el nou ver el color del blau original i el nou blau el del vermell original, en l’exemple es realitzen unes altres substitucions 21
  • 22. canviant el vermell pel blau, el verd pel vermell i el blau pel verd. Si es fa servir l’exemple per elaborar l’algorisme, la solució seria: algorisme permute var mode : character; // picture type w, h, n : integer; // wide, high, totalpixels r, g, b, i : integer; fvar mode := readCharacter(); w := readInteger(); h := readInteger(); writeCharacter(mode); writeInteger(w); writeInteger(h); n := w * h; // serial processing per i := 1 fins n fer r := readInteger(); g := readInteger(); b := readInteger(); // read image head // write new image head // red value // green value // blue value writeInteger (b); // write blue as new red value writeInteger (r); // write red as new green value writeInteger (g); // write green as new blue value fper falgorisme Les dues solucions s’han acceptat com correctes. 2. En un casino, per controlar el joc dels croupiers de la taula de Black Jack, una càmera de vídeo enregistra les cartes que es van traient del shuffle (el dispensador de cartes), fa un reconeixement d’imatge i les codifica de manera que a les piques els correspon ordenadament els números 1 a 13, als trèvols del 14 al 26, a cors del 27 al 39 i als diamants del 40 al 52. A mida que es van extraient les cartes els codis es van enregistrant en una taula, les posicions sobrants de la qual es replenen a zeros, i que s’ha dimensionat a 5000 per tal que hi càpiga la informació de totes les cartes que es juguen en una taula durant un dia. D’un dia a un altre, naturalment, no es juga la mateixa quantitat de cartes. Es demana construir una acció que rebi la taula enregistrada per la càmera i retorni quantes cartes de cada símbol (piques, trèvols, cors o diamants) ha dispensat durant el dia el shuffle accio howMany (ent shuffle: taula [5000] de integer, sor p: integer, sor t: integer, sor c: integer, sor d: integer ) var card, i : integer; fvar p := t := c := d := i := // actual card, auxiliar counter 0; //init counters 0; 0; 0; 1; 22
  • 23. card := suffle[i]; mentre ((card ≠ 0) i (i ≤ 5000)) fer //count each card occurrence card := (card – 1) div 13; //0 ⇒ spades, 1 ⇒ clubs, 2 ⇒ // hearts, 3 ⇒ diamonds si card = 0 llavors p := p + 1; sino si card = 1 llavors t := t + 1; sino si card = 2 llavors c := c + 1; sino d := d +1; fsi fsi fsi i := i + 1; card := shuffle[i]; //next card fmentre faccio 3. Un laboratori de recerca sobre la imatge vol crear un nou estàndard d’emmagatzemament i treball amb imatge i per aquest motiu ha de crear dades estructurades i mòduls de programa. S’ha de crear una dada estructurada picture capaç d’emmagatzemar una imatge de fins 10 megapíxels (10 milions de pixels). De la imatge s’ha de desar: • El tipus d’imatge: que pot rebre els valors ‘c’, ‘m’, ‘r’, ‘g’ i ‘b’ segons els significats exposats en l’exercici 1 d’aquesta prova. • L’amplada i l’alçada de la imatge en píxels • Per a tres canals, la informació de cadascun dels píxel (un número entre 0 i 255). Si una imatge no ocupa 10 megapíxels, l’espai sobrant s’acaba d’omplir a zeros. Les imatges en blanc i negre, emmagatzemaran la informació dels píxels en el mateix canal que correspon al color vermell de les imatges a color. Les imatge monocromes corresponents a un canal de color emmagatzemaran la informació en el seu canal corresponent i els altres dos canals restaran completament a zeros. • Dissenyeu la dada estructurada picture tipus picture = tupla pictType : character; width : integer; high : integer: r : taula [10000000] de integer; g: taula [10000000] de integer; b: taula [10000000] de integer; ftupla ftipus Per emmagatzemar les imatges de prova s’ha creat una dada estructura que permet mantenir-ne fins 1 milió de fotos biblio = tupla qtty : integer; col : taula [1000000] de picture; ftupla i s’ha creat la variable test del tipus biblio. 23
  • 24. Escriviu l’expressió que ens indiqui si en la imatge que està en posició 505 de test, les components verda i blava del últim píxel d’imatge són iguals test.col[505].g[test.col[505].width* test.col[505].high] = test.col[505].b[test.col[505].width* test.col[505].high] Creeu un mòdul (acció o funció, el més adequat) que rebi dues imatges del mateix tipus i dimensions i en retorni una tercera en que cada píxel sigui la suma entre els píxels de les imatges originals. Nota: hi ha la possibilitat que en fer la suma surti un número superior a 255. En aquest cas el color a assignar serà el obtingut de la suma després de restar-li 256. P.e. si els vermells són 150 i 150, a la imatge resultats es posarà 44 (150 + 150 – 256 = 44) funcio imgAdd(first: picture, second:picture): picture var n, i: integer; new: picture fvar new.pictType := first.pictType; new.width := first.width; new.high := first.high; //copies picture head n := first.width * first.high; per i := 1 fins n fer //computes each component of pixel new.r[i] := (first.r[i] + second.r[i]) mod 256; new.g[i] := (first.g[i] + second.g[i]) mod 256; new.b[i] := (first.b[i] + second.b[i]) mod 256; fper per i := n+1 fins 10000000 fer //fill 0 rest of image new.r[i] := 0; new.g[i] := 0; new.b[i] := 0; fper retorna new ffuncio 23/01/2013 1. Les dades d’una imatge se situen en una seqüència, que és diferent si es tracta d’una seqüència en color de tres canals o monocromàtica d’un sol canal {C W H R1 G1 B1 R2 G2 B2 ... Rn Gn Bn} {M W H P1 P2 ... Pn} on: • C: és la lletra ‘c’ que indica que la foto és en color • M: pot prendre els valors ‘m’ si es tracta d’una foto en blanc i negre, o bé ‘r’ si es tracta d’un canal vermell, ‘g’ si es tracta d’un canal verd o ‘b’ si es tracta d’un canal blau. • W: és l’amplada en píxels de la imatge • H: és l’alçada en píxels de la imatge • Ri Gi Bi: són les intensitats dels components vermell, verd i blau del píxel i en una imatge en color (valors enters que prenen valor entre 0 i 255) • Pi : és la intensitat de color (gris, vermell, verd o blau, segons sigui el tipus d’imatge) del píxel i en una imatge monocromàtica. També pot prendre valors enters entre 0 i 255. 24
  • 25. Molts de cops resulta útil crear, a partir d’imatges en color tricanal, una imatge monocromàtica que contingui la informació d’un sol color. Per exemple, de la imatge {c 2 2 100 110 120 130 140 150 160 170 180 190 200 210} podem extraure el canal vermell i es crearia la imatge {r 2 2 100 130 160 190} i, en cas d’extraure el canal blau la imatge seria {b 2 2 120 150 180 210}. Es demana que construïu un mòdul (acció o funció, el més adequat) que rebi com paràmetre un caràcter que indiqui el canal a extraure (‘r’, ‘g’, o ‘b’), llegeixi del canal d’entrada estàndard la seqüència d’una imatge en color i escrigui en el canal de sortida estàndard la imatge monocroma del canal sol·licitat. accio canalExtract(ent canal: caracter) var mode : character; w, h, n : integer; r, g, b, v, i : integer; fvar mode := readCharacter(); w := readInteger(); h := readInteger(); // picture type // wide, high, totalpixels // read image head writeCharacter(canal); writeInteger(w); writeInteger(h); n := w * h; // write new image head per i := 1 fins n fer r := readInteger(); g := readInteger(); b := readInteger(); si canal = ‘r’ llavors v := r; sino si canal = ‘g’ llavors v := g; sino v := b; fsi fsi writeInteger(v); fper faccio // serial processing // canal reading // canal selection // canal write 2. En un casino, per controlar el joc dels croupiers de la taula de Black Jack, una càmera de vídeo enregistra les cartes que es van traient del shuffle (el dispensador de cartes), fa un reconeixement d’imatge i les codifica de manera que a les piques els correspon ordenadament els números 1 a 13, als trèvols del 14 al 26, a cors del 27 al 39 i als diamants del 40 al 52. A mida que es van extraient les cartes els codis es van enregistrant en una taula, les posicions sobrants de la qual es replenen a zeros, i que s’ha dimensionat a 5000 per tal que hi càpiga la informació de totes les cartes que es juguen en una taula durant un dia. D’un dia a un altre, naturalment, no es juga la mateixa quantitat de cartes. Es demana construir una funció que rebi la taula enregistrada per la càmera i que retorni la quantitat de diamants jugats. funcio diamondsQtty (shuffle: taula [5000] de integer): integer var card, diamond, i : integer; // actual card, diamonds counter, // auxiliar counter fvar 25
  • 26. i := 1; diamond := 0; card := suffle[i]; mentre ((card ≠ 0) i (i≤5000)) fer si card > 39 llavors diamond := diamond + 1; fsi i := i + 1; card := shuffle[i]; fmentre // count each card occurrence // from 39 to max value are diamonds // next card retorna diamond; ffuncio 3. Un laboratori de recerca sobre la imatge vol crear un nou estàndard d’emmagatzemament i treball amb imatge i per aquest motiu ha de crear dades estructurades i mòduls de programa. S’ha de crear una dada estructurada picture capaç d’emmagatzemar una imatge de fins 10 megapíxels (10 milions de pixels). De la imatge s’ha de desar: • El tipus d’imatge: que pot rebre els valors ‘c’, ‘m’, ‘r’, ‘g’ i ‘b’ segons els significats exposats en l’exercici 1 d’aquesta prova. • L’amplada i l’alçada de la imatge en píxels • Per a tres canals, la informació de cadascun dels píxel (un número entre 0 i 255). Si una imatge no ocupa 10 megapíxels, l’espai sobrant s’acaba d’omplir a zeros. Les imatges en blanc i negre, emmagatzemaran la informació dels píxels en el mateix canal que correspon al color vermell de les imatges a color. Les imatge monocromes corresponents a un canal de color emmagatzemaran la informació en el seu canal corresponent i els altres dos canals restaran completament a zeros. • Dissenyeu la dada estructurada picture tipus picture = tupla pictType : character; width : integer; high : integer: r : taula [10000000] de integer; g: taula [10000000] de integer; b: taula [10000000] de integer; ftupla ftipus Per emmagatzemar les imatges de prova s’ha creat una dada estructura que permet mantenir-ne fins 1 milió de fotos biblio = tupla qtty : integer; col : taula [1000000] de picture; ftupla i s’ha creat la variable test del tipuxs biblio. Escriviu l’expressió que ens indiqui si el darrer píxel de la imatge en posició 32 té component vermella test.col[32].r[test.col[32].width* test.col[32].high]≠0 26
  • 27. Creeu un mòdul (acció o funció, el més adequat) que rebi dues imatges del mateix tipus i dimensions i en retorni una tercera en que cada píxel sigui la mitjana entre els píxels de les imatges originals. funcio imgAverage (first: picture, second:picture): picture var n, i: integer; new: picture fvar new.pictType := first.pictType; new.width := first.width; new.high := first.high; // copies picture head n := first.width * first.high; per i := 1 fins n fer // computes average pixel new.r[i] := (first.r[i] + second.r[i]) div 2; new.g[i] := (first.g[i] + second.g[i]) div 2; new.b[i] := (first.b[i] + second.b[i]) div 2; fper per i := n+1 fins 10000000 fer // fill 0 rest of image new.r[i] := 0; new.g[i] := 0; new.b[i] := 0; fper retorna new ffuncio 27