Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso...

21
Estructuras de datos (Prof. Edgardo A. Franco) 1 Tema 10: Arreglos estáticos en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Transcript of Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso...

Page 1: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Estructuras de datos (Prof. Edgardo A. Franco)

1

Tema 10: Arreglos estáticos en C

M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Page 2: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Contenido • Introducción • Arreglos unidimensionales

• Lectura-escritura de elementos en arreglos unidimensionales

• Inicialización de un arreglo • Arreglos multidimensionales

• Inicialización de arreglos multidimensionales • Lectura-escritura de elementos de arreglos

multidimensionales • Envió de un arreglo a funciones en C (Paso de referencia)

• Tamaño de un arreglo • Función Sizeof

2

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 3: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Introducción • Un arreglo estático es una colección finita y

constante (que no cambia su tamaño) de elementos del mismo tipo.

• Un arreglo también es conocido como vector, matriz o array.

• Se pueden crear arreglos de cualquier tipo de dato en C, es decir, tipos de dato simple, estructurado, archivos e incluso de apuntadores.

3

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 4: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Arreglos unidimensionales • Se conocen dos tipos de arreglos: los unidimensionales

y los multidimensionales. Y al igual que otra variable primero se debe declarar antes de utilizarse.

• Sintaxis para declarar un arreglo unidimensional:

<tipo_de_dato> identificador[tam_arreglo]; • Cuando se declara un arreglo unidimensional o

multidimensional, se debe indicar el tamaño de dicho arreglo y este permanecerá constante durante el ciclo de vida del programa o de la función, es decir, no podrá cambiar su tamaño de manera dinámica. (Arreglos estáticos)

4

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 5: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Por ejemplo: int arreglo[ 10 ];

• Esta declaración hace que el compilador le indique

al sistema operativo que reserve espacio suficiente para almacenar 10 valores enteros.

• En estos casos, cuando se declara un arreglo el S.O. le asigna a dicho arreglo una porción consecutiva de memoria que es múltiplo del tamaño del tipo de dato con el que se declaro el arreglo.

5

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 6: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

• int arreglo[ 10 ];

6

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 7: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Lectura-escritura de elementos en arreglos unidimensionales

• Cada ítem del arreglo se le denomina elemento del arreglo.

• Todos los elementos que constituyen un arreglo se numeran consecutivamente comenzando en 0 hasta n-1 donde: • 0: es el primer elemento del arreglo, • n-1: es el ultimo elemento del arreglo y • n: es el tamaño total del arreglo.

7

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 8: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

• A los valores de 0 a n-1 se les denomina índices o subíndices del arreglo, es decir, un índice o subíndice nos ubica en una posición determinada dentro del arreglo y nos permite tener acceso directo al elemento de ese índice, para obtener su valor o para modificarlo,

• Por ejemplo:

Índice o subíndice del arreglo

Tamaño total del arreglo

Se obtiene el valor del elemento (10 + 1)

Se modifica el valor del elemento (25 + 1)

int arreglo[30]; int dato; dato = arreglo[10]; arreglo[25] = 2344;

8

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 9: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Inicialización de un arreglo • Al igual que una variable local, un arreglo puede estar

previamente inicializado antes de usarlo, caso contrario el arreglo contendrá datos basura.

• Existen diferentes formas de inicializar un arreglo: 1. int numeros[6] = { 10,20,30,40,50,60 }; 2. int numeros[] = { 10,20,30 }; 3. char cad[] = {‘h’,‘o’,‘l’,‘a’,‘\0’}; 4. char s[] = “hola";

• Cada elemento dentro de las llaves corresponde a un

elemento que se almacena en una localidad del arreglo. • Un caso especial es el de las comillas dobles ʺcadenasʺ, este

tipo de inicialización aplica solamente para arreglos de caracteres y también significa que se está inicializando dicho arreglo.

9

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 10: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

• Ejemplos • Inicializar un arreglo de números aleatorios

• Inicializar un arreglo de con el abecedario

int i; for( i = 0, i < 6, i++ ) { numeros[i] = rand(); }

char i; int h = 0; for( i = ‘a’, i <= ‘z’, i++ ) { letras[h] = i; h++; }

10

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 11: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Arreglos multidimensionales • Los arreglos multidimensionales son los que tienen

más de una dimensión, los más usuales son los de dos dimensiones que también son conocidos como tablas o matrices.

11

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 12: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

• Una arreglo de dos dimensiones tienen 2 índices que nos ayudan a ubicar un elemento dentro del arreglo.

12

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 13: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

La sintaxis para la declaración de un arreglo de dos dimensiones seria:

<tipo_dato> identificador [tam_filas][tam_columnas];

• Por ejemplo:

int datos[3][3];

• Esta línea de código declara un arreglo en dos dimensiones de 3 X 3 elementos, es decir, este arreglo contendrá en su interior 9 elementos de tipo entero.

13

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 14: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Acceso arreglos multidimensionales • Para acceder a alguno de sus elementos se utilizan los

dos índices, es decir: datos[0][2] = 12; datos[2][0] = 0; datos[2][2] = 30;

• Un arreglo en dos dimensiones en realidad es un arreglo

de arreglos unidimensionales, es decir, cada elemento del un arreglo no es un valor entero, sino que cada elemento es un arreglo.

0 1 2

0 12

1

2 0 30 Los arreglos van de 0 hasta n-1, datos es un arreglo de 3 X 3 entonces datos[2][2] hace referencia al ultimo elemento del arreglo

14

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 15: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

• Es decir: int datos[3][3];

Es un arreglo que contiene 3 arreglos de tres elementos cada uno.

datos[0]

datos[1]

datos[2]

datos[2][0]

datos[2][1]

datos[2][2]

15

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 16: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Inicialización de arreglos multidimensionales • Existen varia formas de inicializar un arreglo de dos

dimensiones: a) int datos[3][3] = { 1,2,3,4,5,6,7,8,9}; b) int datos[3][3] = { {1,2,3},{4,5,6},{7,8,9}}; c) int datos[3][3] = { {1,2,3}, {4,5,6}, {7,8,9}}; d) o finalmente con un ciclo anidado: for ( i = 0; i < 3; i++){ //i manipulara las filas for( j = 0; j < 3; j++){ //j las columnas datos[i][j] = rand()%30; //Se delimita los valores } //entre 0 y 30 }

Todas estas inicializaciones tienen el mismo efecto. 16

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 17: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Lectura-escritura de elementos de arreglos multidimensionales

• Para escribir o leer un elemento de un arreglo bidimensional siempre se va a requerir utilizar los dos índices con los cuales se declaro el arreglo.

• Para escribir en uno de ellos, obteniendo el valor

desde consola sería: int datos[3][3]; printf( "Escribe un dato entero: \n" ); scanf( "%d", &datos[1][2] ); printf( El dato capturado fue: %d , &datos[1][2] ); 17

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 18: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Mandar por referencia a una función un arreglo unidimensional o de dos dimensiones

• Para mandar por referencia un arreglo a una función se debe entender que el nombre del arreglo, es decir, el identificador que se le coloco al arreglo es un apuntador, por lo tanto para mandar un arreglo a una función se hace de la siguiente forma:

int arregloInt[10]; funcion( arregloInt ); . . . int funcion( int *ptr ){ ptr[0] = 123; ptr[1] = 7; }

Se manda el nombre arregloInt que es un apuntador que contiene la dirección del primer elemento dentro del arreglo.

La referencia del arregloInt se debe recibir con una variable apuntador del mismo tipo que fue declarado el arreglo. Hacen ya referencia

directamente a los elementos de arregloInt

18

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 19: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Mandar por referencia a una función un arreglo unidimensional o de dos dimensiones

• Para un arreglo de dos dimensiones sucede lo mismo, solo hay que tomar en cuenta que el nombre de arreglo multidimensional es un apuntador a apuntadores, es decir, el apuntador a apuntadores quedara definido dependiendo de la dimensión del arreglo, así para un arreglo de dos dimensiones:

int arreglo2D[5][10]; funcion(arreglo2D); . . . int funcion2( int (*ptr)[10] ){ ptr[5][8] = 1; ptr[9][6] = 7542; }

Se recibe con un apuntador a cadena ya que se trata de un arreglo de 2D y su nombre seria un apuntador a una cadena

Hacen ya referencia directamente a los elementos de arreglo2D

19

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 20: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Tamaño en bytes de un arreglo • Para obtener saber el tamaño de un arreglo, se

puede utilizar la función sizeof(), esta función nos devolverá el numero de bytes reservados para el arreglo completo.

• Por ejemplo: int arreglo[ 10 ]; int tamanio; tamanio = sizeof( arreglo );

20

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez

Page 21: Clase 23: Arreglos estáticos en C - Web personal de ... · PDF filearchivos e incluso de apuntadores. 3 . 10 Arreglos ... solamente para arreglos de caracteres y también significa

Función Sizeof ( ) • sizeof() también sirve para darnos el tamaño de un

tipo de dato en especifico o el tamaño de un elemento dentro del arreglo.

• Por ejemplo: int tamanio; double a = 3.1455; float b = 3.084; char c = ‘e’; tamanio = sizeof( a ); tamanio = sizeof( b ); tamanio = sizeof( c ); tamanio = sizeof( tamanio ); tamanio = sizeof( arreglo[1] );

21

10 A

rreg

los e

stát

icos

en

C Al

gorit

mia

y p

rogr

amac

ión

estr

uctu

rada

Pr

of. E

dgar

do A

driá

n Fr

anco

Mar

tínez