



Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Fonaments d'Informàtica, Profesor: Pau Fernandez Duran, Carrera: Enginyeria de Sistemes Audiovisuals, Universidad: UPC
Tipo: Exámenes selectividad
1 / 5
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!




matriu Taula bidimensional. Les matrius es fan servir molt per emmagatzemar algun tipus de dada que tingui significat bidimensional, com ara una imatge.
La declaració de matrius és senzilla, es tracta de declarar una taula i fer servir dues dimensions entre corxets en comptes d’una:
int imatge[3][5];
Aquesta declaració és d’una matriu amb 3 files i 5 columnes. Si bé nosaltres podem parlar de “files” i “columnes” això té una utilitat relativa, ja l’única cosa que importa en C++ és l’ordre dels índexs i el fet que no sobrepassin els límits. Aquests límits, tal com en taules, tornen a ser de 0 a N-1. En concret, la última casella (última fila i última columna) de la variable imatge és la (2, 4). La representació de la matriu seria així
0 1 2 3 4
0
1
2
0,0 0,1 0,2 0,3 0,
1,0 1,1 1,2 1,3 1,
2,0 2,1 2,2 2,3 2,
Tal com les taules, les matrius també passen sempre per referència.
Les matrius permeten declaracions de tipus, tal com les taules, i tenen la mateixa forma que en les taules, simplement s’ha d’afegir una dimensió més. Per declarar un tipus tImatge que contingui 768 files i 1024 columnes d’enters, farem:
typedef int tImatge[768][1024];
Exercici 1 Declara una matriu de la forma directa i també fes una declaració de tipus de les següents matrius:
Exercici 2 Declara una tupla tPixel amb 3 reals r, g i b que seràn els 3 colors bàsics (red, green i blue). Declara llavors un tipus de matriu de 480 files i 640 columnes de pixels anomenat tImatgeRGB.
Exercici 3 Declara un tipus de taula de 10 matrius de 3 per 3.
L’accés a les caselles d’una matriu es fa igual que amb les taules, però amb dos corxets. L’índex del primer número entre corxets ha d’estar entre 0 i un menys que la primera dimensió de la matriu, i l’índex de la segona ha de concordar similarment. Per exemple, les següents expressions (no són instruccions) accedeixen a diferents caselles de la matriu imatge (declarada més amunt)
imatge[0][0] // 1a fila, 1a columna imatge[0][4] // 1a fila, 5a columna imatge[4][0] // 5a file, 1a columna imatge[9][0] // ´ultima fila, 1a columna imatge[0][14] // 1a fila, ´ultima columna imatge[9][14] // ´ultima fila, ´ultima columna
ja sigui per consultar el seu valor o per modificar-lo. Un error típic en l’accés a matrius és fer, per exemple:
imatge[14][9]
és a dir, intercanviar els límits de les dues dimensions.
Exercici 4 Declara una matriu de caràcters amb 3 files i 4 columnes i posa-hi els caràcters necessaris per tal que contingui el que mostra el dibuix següent:
+---+---+---+---+ | X |. |. | X | +---+---+---+---+ |. | X | X |. | +---+---+---+---+ | X | X | X | X | +---+---+---+---+
Fes-ho manualment, sense utilitzar cap for (són 12 assignacions).
Recorregut de matrius
Les iteracions típiques que associem amb les taules usualment utilitzen un sol bucle:
int T[10]; // declarem una taula de 10 enters
// Omplim la taula amb zeros for (int k = 0; k < 10; k++) { T[k] = 0; }
Exercici 5 Suposant la declaració següent:
int M[10][20];
escriu codi per:
Exercici 6 Fes una acció que rebi 3 paràmetres: una matriu de 8 per 12 enters, un enter k (que serà una fila) i un valor val (un enter). L’acció ha d’omplir la fila k de la matriu amb el valor val.
Si fem servir una sola iteració amb les matrius, però, no podrem recórrer totes les caselles. El següent codi:
Exemple sobre ordinadors
Per al cas dels ordinadors a cada aula, un exemple d’estructura de dades podria ser la següent:
enum tTipusCPU { pentium, centrino, AMD, core_duo, core_quad };
struct tOrdinador { tTipusCPU cpu; // Tipus de CPU int ram; // tamany de la mem`oria RAM, en MegaBytes bool linux; // si t´e instal·lat el Linux };
const int NAULES = 12; const int NORDINADORS = 20; typedef tOrdinador tInfoOrdinadors[NAULES][NORDINADORS];
Amb la tupla tOrdinador podem emmagatzemar la informació de cada ordinador, i amb la matriu tInfoOrdinadors tenim la informació per a cada ordinador de cada aula. Hem fer servir constants per poder, més endavant, canviar el tamany de la matriu lliurement.
Imaginem, doncs, que tenim un programa que manipula dades de tipus tInfoOrdinadors, i també que alguna part del programa s’encarrega d’omplir l’estructura de dades amb les dades reals. Llavors ens demanen fer una funció que calculi quin percentatge d’aules fan servir majoritàriament el tipus de CPU “core duo”. La funció rebrà la informació completa dels ordinadors en una matriu tipus tInfoOrdinadors.
La funció que fa aquest càlcul és la següent:
float percent_maj_core_duo(const tInfoOrdinadors IO) { int n_maj_core_duo = 0, i, j; for (i = 0; i < NAULES; i++) { int n_core_duo = 0; for (j = 0; j < NORDINADORS; j++) { if (IO[i][j].cpu == core_duo) n_core_duo++ } if (n_core_duo > NORDINADORS/2) n_maj_core_duo++; } return n_maj_core_duo / float(NAULES) * 100.0; }
La funció rep tota la informació dels ordinadors en un paràmetre IO i realitza el càlcul fen un recorregut dins d’un altre. El recorregut exterior compta les aules amb majoria “core duo” i l’interior comprova aquesta majoria en una aula concreta (mentre i no canvia). Alguns comentaris pertinents sobre aquesta funció són:
Exercici 9
Parteix aquesta la funció percent_maj_core_duo en 2 subprogrames, un que calculi si una aula concreta té majoria core duo (amb un nom com majoria_core_duo) i l’altra que es digui igualment percent_maj_core_duo però que faci servir majoria_core_duo. Bàsicament es tracta d’“extirpar” el bucle intern i fer-ne una funció a part.
Exercici 10 Dissenya un tipus de dades tInfoParcs per emmagatzemar dades sobre el cas de les espècies d’arbres i parcs naturals. En concret volem poder emmagatzemar, per a cada espècie en cert parc natural:
Cal declarar els tipus de dades necessaris per poder guardar ordenadament aquesta informació (i que sigui còmode de fer servir en un programa), però no cal fer cap programa.
Exercici 11 Fes una funció que rep la informació dels parcs tInfoParcs i també una espècie concreta (un número), i retorna el número d’exemplars total que hi ha en tots els parcs.
Exercici 12 Fes una funció que rep la informació dels parcs tInfoParcs i calculi el percentatge de parcs que tenen espècies amenaçades.
Exercici 13 Fes una funció que rep la informació dels parcs tInfoParcs i calculi en quina estació es reprodueixen més arbres per a tots els parcs en conjunt.
Generated on: 2008-11-22.