Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Apunts Matrius, Exámenes selectividad de Informática

Asignatura: Fonaments d'Informàtica, Profesor: Pau Fernandez Duran, Carrera: Enginyeria de Sistemes Audiovisuals, Universidad: UPC

Tipo: Exámenes selectividad

Antes del 2010

Subido el 04/12/2008

dushka
dushka 🇪🇸

5

(1)

10 documentos

1 / 5

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Apunts Fonaments d’Informàtica (c) 2008, Pau Fernández 1
Matrius
matriu Taula bidimensional. Les matrius es fan servir molt per emmagatzemar algun tipus de dada que tingui significat
bidimensional, com ara una imatge.
Declaració de matrius
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 nosaltres podem parlar de “files” i “columnes” això
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í
01234
0
1
2
0,0 0,1 0,2 0,3 0,4
1,0 1,1 1,2 1,3 1,4
2,0 2,1 2,2 2,3 2,4
Tal com les taules, les matrius també passen sempre per referència.
Declaracions de tipus
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:
Una matriu de 20 files i 40 columnes de caràcters.
Una matriu de 3 files i 3 columnes de reals.
Una matriu de 12 files i 31 columnes d’un tipus enumerat tDiaSetmana (pots suposar que aquest tipus ja existeix).
Exercici 2
Declara una tupla tPixel amb 3 reals r,gibque 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.
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Apunts Matrius y más Exámenes selectividad en PDF de Informática solo en Docsity!

Matrius

matriu Taula bidimensional. Les matrius es fan servir molt per emmagatzemar algun tipus de dada que tingui significat bidimensional, com ara una imatge.

Declaració de matrius

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.

Declaracions de tipus

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:

  • Una matriu de 20 files i 40 columnes de caràcters.
  • Una matriu de 3 files i 3 columnes de reals.
  • Una matriu de 12 files i 31 columnes d’un tipus enumerat tDiaSetmana (pots suposar que aquest tipus ja existeix).

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.

Accés als elements d’una matriu

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:

  • Omplir la primera fila de la matriu amb el valor -1.
  • Omplir la última columna de la matriu amb el valor 5.

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:

  • En el bucle intern acumulem en un comptador el número d’ordinadors amb “core duo” i després comprovem que sigui major que la meitat dels ordinadors (divisió entera).
  • El comptador n_core_duo, que es fa servir en el bucle intern, és una variable que es “renova” cada cop que es fa una volta del for que la conté (i per tant s’inicialitza vàries vegades).
  • Hem utilitzat les constants NAULES i NORDINADORS per no escriure els números directament (i deixar oberta la opció que canviïn en un futur).
  • Hem posat const a la informació dels ordinadors, ja que no la modifiquem.

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:

  • el número estimat d’exemplars de l’espècie en aquest parc (un enter).
  • si l’espècie està amenaçada (en aquest parc concret, ja que una espècie pot estar amenaçada en un parc i no en un altre).
  • en quina estació de l’any es reprodueix (estiu, tardor, hivern, o primavera) en aquest parc (pot haver-hi variacions entre parcs per a la mateixa espècie).

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.