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


Apuntes sobre la sintaxis y manipulación de arrays en C, Apuntes de Ingeniería de Telecomunicaciones

Documento que presenta la sintaxis básica de declaración y uso de arrays en el lenguaje de programación c, incluye ejemplos y explicaciones de cómo determinar el tamaño de un array, la inicialización automática y manual, pasar arrays a funciones y operar con ellos.

Tipo: Apuntes

2015/2016

Subido el 22/01/2016

theraulin12
theraulin12 🇪🇸

2.3

(3)

36 documentos

1 / 29

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Tema 7:
Vectors (arrays: llistes o taules)
Fonaments d’Informàtica
Grau en Enginyeria de Telecomunicació
Roger Malet
Departament de Microelectrònica i Sistemes Electrònics
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d

Vista previa parcial del texto

¡Descarga Apuntes sobre la sintaxis y manipulación de arrays en C y más Apuntes en PDF de Ingeniería de Telecomunicaciones solo en Docsity!

Tema 7:

Vectors (arrays: llistes o taules)

Fonaments d’Informàtica

Grau en Enginyeria de Telecomunicació

Roger Malet

([email protected])

Departament de Microelectrònica i Sistemes Electrònics

7.1 Introducció

7.2 Vectors ( llistes)

Definició.Declaració de vectorsEmmagatzematge en memòriaInicialització de vectorsGrandària d’un vectorExemple

7.3 Cadenes ( llistes) de caràcters

7.4 Matrius

7.5 Pas de paràmetres

7.6 Operant amb vectors ( llistes)

7.7 Exemples

2

Índex

Arrays (llistes i taules)

7.2 Llistes o vectors (1)

Definició: Array (llista o vector, taula omatriu )Conjunt finit i ordenat

d'elements homogenis. Tots han de ser de la mateixa classe:

 Enters (int, long....)  Reals (float, double...)  Caràcters (char)  etc...

Llista o vector  És un arrayunidimensional.

Exemple:

  • Sigui Q una llista que conté les notes de 10 alumnes (n = 10):

 Els elements de la llista estan ordenats des del 0 fins al n-1, on n és la mida (nombre

d’elements de la llista), en aquest cas10.

 Q[0] és l’element que hi ha a la posició0,Q[1] el de la posició1, ..., on les posicions0 a 9

es recorren emprant una variable índex(i en l’exemple)

 La llista pot ser referida com a un tot (N), o per cadascun dels seus elements (N(i)).

Q 5.5 9.5 4.5 7.0 8.0 7.5 5.5 4.0 8.5 9.

i 0 1 2 3 4 5 6 7 8 9

7.2 Llistes o vectors (2)

Declaració de llista o vector s’ha d’especificar:  El tipus dels elements que el formen.  El nom de la variable.  El tamany o número d’elements del vector.

 Sintaxi: :

tipus nom[tamany];

Exemples:

double altures[10];int numeros[8];char s[20];

float Q[ ]={5.5, 9.5, 4.5, 6.0, 8.0, 7.5, 5.5, 4.0, 8.5, 9.0};

ofloat Q[10]; Quan es defineix s’ha d’indicar el nombre d’elements que tindrà el vector (n). En l’exemple l'índex anirà de 0 a 9 per direccionar els 10 elements que s’han definit.

Q 5.5 9.5 4.5 6.0 8.0 7.5 5.5 4.0 8.5 9.

i 0 1 2 3 4 5 6 7 8 9

Grandària de les llistes

 Mitjançant l’operador (funció) sizeof() es pot saber la mida dels arrays.

Exemple:

  • m = sizeof[Q] donarà m=104 = 40 bytes*
  • m = sizeof(Q[5]) donarà m = 4 bytes.

Inicialització de llistes  Els arrays es poden inicialitzar dintre ladeclaració

int t[5] = {10,15,20,18,21};

 La inicialització en la declaració, permet ometre el nombre d’elements:

int v[ ] = {10,15,20,18,21};

 C inicialitza les variables globals a 0 (caràcter nul – ‘\0’ – en el cas de llistes de

caràcters) (com si fossin variables externes). Però no ho fa en les variables locals

(automàtiques).

7

7.2 Llistes o vectors (4)

Exemple

8

7.2 Llistes o vectors (5)

//Vectors inicialitzats implícitament

#include <stdio.h>

void main()

int i, v[3];

for (i=0; i<3; i++)

printf(“v[%1u] = %u.\n “,i, v[i]);

//Vectors inicialitzats implícitament

#include <stdio.h>

int v[3];

void main()

int i;

for (i=0; i<3; i++)

printf(“v[%1u] = %u.\n “,i, v[i]);

Resultat: v[0] = -

v[1] = 0

v[2] = 34567

Inicialitzat aqualsevol valor!

Resultat: v[0] = 0

v[1] = 0

v[2] = 0

Inicialitzat a 0

Cadena o string de caràcters  Conjunt finit i ordenat de caràcters

emmagatzemats consecutivament. Es representa entre cometes ( “ ” ).

Declaració : char nom[n]; o char nom[ ] = “Hola” ,

amb n el nombre màxim de caràcters que hom pensa que pugui tenir al llarg de

l’aplicació.

S’ha de distingir entre cadena i vector ( llista) de caràcters. A la cadena

s’insereix per defecte al final un caràcter nul ( ‘\ 0 ’ ) que en facilita el seu

tractament.

10

7.3 Llistes de caràcters (1)

Exemple: Comentaris:

De forma automàtica char cadena[] = "Avui"; char cadena[] = {'A', 'v', 'u', 'i', '\0'}

Reserva 5 posicions de memòria

Reservant espai (per a més tard)

char cadena[80] Reserva 81 posicions. Després de la 'i' hi hauran altres caràcters. Utilitzantscanf() char cadena[25] scanf("%s", cadena)

scanf() talla en trobar el primer blanc. cadena indica una posició de memòria  no fa falta posar &. Utilitzantgets() gets(cadena) Llegeix una línia fins que troba el retorn de carro.

7.3 Llistes de caràcters (2)

Exemple : Es defineix una cadena a[ ] i un array de caràcters b[ ]. Així com el final

de cadena es detecta controlant el caràcter ‘\0’, no es pot fer el mateix amb

l’array de caràcters.

//Cadena (amb ‘\0’ que es detecta el final) void main() { int i = 0; char a[ ] = "Es dimarts."; printf("%s\n", a); do { printf("%c", a[i]); i++; }while (a[i] != '\0'); printf(“\nNumCars=%i\n”, sizeof(a)); }

 Es dimarts. Es dimarts. NumCars=12 // ‘\0’ també s’hi compta

//Array de caràcters (el final no es detecte amb ’\0’). void main() { int i = 0; char b[]={'E','s',' ','d','i','m','a', 'r','t','s','.'}; printf(“%s\n", b); do { printf("%c", b[i]); i++; }while (b[i] != '\0'); printf(“\nNumCars=%i\n”, sizeof(b)); }

 Es dimarts.ÿ╗ (o similar!) Es dimarts.■ (o similar!) NumCars=11 // 11 caràcters * 1 byte cadascun

7.4 Taules o matrius (1)

13

Matriu  Vector (array) bidimensional o multidimensional.

S'organitza en files i columnes.

Declaració :

tipus_element nom_taula [][];

on i són el nombre màxim de files i el número de columnes.

La taula conté n*m elements.

Exemple: tauler d’escacs. Es pot definir com una matriu de 8*8 cel·les, on en cada

cel·la hi pot haver un dels següents elements: 0  cel·la buida, 1  peó blanc, 2

 torre blanca, ..., -1  peó negre, -2  torre negra, ...

 int escacs[8][8];

Altres exemples: int Taula [3][2] = {{1,1}, {10,11}, {20, 21}};

int codi [3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};

14

7.4 Taules o matrius (2)

Emmagatzemament de la taula en memòria.

 És estàtic i consecutiu.

 En el C s’emmagatzema per files.

Això implica que queda ordenat de la forma:

(0, 0), (0, 1), ...(0, m-1), (1, 0), ...(n-1, m-1)

Per tant, l’accés als diferents elements de la matriu requerirà tants bucles for com

dimensions tingui la matriu !!

Exemple:

for (i=0; i<5; i++)

for (j=0; j<3; j++) scanf("%i", &m[i][j]);

En C tots els vectors (arrays) es passen per referència o punters , fet

que implica que, tota modificació feta en el vector, es mantindrà un cop es

torni al programa principal.

Això es deu al fet que el nom de la variable és una constant que indica la

posició (adreça) del primer element del vector a la memòria:

&array[] = &array[ 0 ]

 Per tant, quan es crida a una funció que té com a paràmetre un vector, sembla

com si es fes un pas de paràmetres per valor. La funció agafa, però, l’adreça

del primer element. En conseqüència, el resultat final és un pas de

paràmetres per referència.

16

7.5 Pas de paràmetres (1)

Exemple: El següent exercici mostra com, després de la crida de la funció suma(), el vector queda modificat.

#include <stdio.h> const int DIM=3; void suma10(int []); //Declaració funció amb paràmetre

//vector (també acceptasuma10(int*); ).

void main() {

int i, vect[] = {3, 6, 9}; //Definició llistavect

for (i = 0; i < DIM; i ++) printf("inicial_v[%1u] = %u\n", i, vect[i]); //Impressió llista inicial suma10(vect); //Crida funció for (i = 0; i < DIM; i ++) printf("final_v[%1u] = %u\n", i, vect[i]); //Impressió llista final } void suma10(int v[]) //Funció suma { int i; for (i = 0; i < DIM; i ++) v[i] += 10; } (^17)

7.5 Pas de paràmetres (2)

El mateix pas es pot fer recollint el vector amb un apuntador (de fet, és el mateix que

s’ha fet en l’exemple anterior!):

Exemple: Funció que compta el nombre de mots (separats per espais) d’una frase.

19

7.5 Pas de paràmetres (4)

#include <stdio.h> #include <string.h>

/Comptar paraules d’una frase/

int paraules(char*, int); void main() { char fr[80]; int n; printf("\tEntra una frase:\t"); gets(fr); n=paraules(fr, strlen(fr)); //es passa una adreça printf("\tEn total %i paraules.\n", n); }

int paraules(char *f, int l) { int num=0, i=0, espai=1; for (i=0;i<l;i++) { if (f[i]==' ') espai=1; else { if (espai==1) { espai=0; num++; } } } return(num); }

7.6 Operant amb vectors ( llistes) (1)

Operacions: recórrer la llista, cercar un element de la llista, afegir elements, inserir elements (enmig la llista), esborrar elements i ordenar els elements de la llista.

Sigui un vector A de màxim N elements, amb m plens (de l’element 0 fins al m- 1 ( < N)).

Funció que cerca un element x de la llista:

i  0

trobat  fals

Mentre ((no trobat) i (i < m)) Fer

Si A[i] = ‘x' Llavors trobat = cert //x  dada a cercar

SiNo Llavors i = i+

Fi_Mentre

Si trobat Aleshores...