24

Click here to load reader

Arreglos Vectores Y Matrices Trabajo Final

Embed Size (px)

Citation preview

Page 1: Arreglos Vectores Y Matrices Trabajo Final

INSTITUTO DE ESTUDIOS SUPERIORES

DE CHIAPASUNIVERSIDAD SALAZAR

PROGRAMA EDUCATIVO

PROGRAMACION ESTRUCTURADA

DOCENTE

UBERTO AGUILAR NAVARRO

TRABAJO

ARREGLOS (VECTORES Y MATRICES)

ESTUDIANTE

JESUS EDUARDO CIGARROA CASTAÑEDA

13 DE ABRIL DE 2011

Page 2: Arreglos Vectores Y Matrices Trabajo Final

Arreglos Vectores Y Matrices

Arreglo: Un Arreglo es una estructura de datos que almacena bajo el mismo nombre (variable) a una colección de datos del mismo tipo.

Los arreglos se caracterizan por:

• Almacenan los elementos en posiciones contiguas de memoria

• Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que ocupa cada elemento dentro del archivo.

Tipo de Arreglos:

Unidimensionales (Vectores)

Bidimensionales (Matrices)

Vectores

Es un arreglo de “N” elementos organizados en una dimensión donde “N” recibe el nombre de longitud o tamaño del vector. Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del índice (entre corchetes), el cual indica una posición en particular del vector. Por ejemplo:

Vec[x]

Donde:

Vec………… Nombre del arreglo

x…………… Numero de datos que constituyen el arreglo

Representación gráfica de un vector

Page 3: Arreglos Vectores Y Matrices Trabajo Final

Vec[1]7 Vec[2]8 Vec[3]9 Vec[4]10

Llenado de un Vector

• Hacer para I = 1 a 10

Leer vec[I]

Fin-para

• Hacer mientras I <= 10

Leer vec[I]

Fin-mientras

• I=1

Repetir

Leer vec[I]

I = I + 1

Hasta-que I>10

Matriz

Es un arreglo de M * N elementos organizados en dos dimensiones donde “M” es el numero de filas o reglones y “N” el numero de columnas.

Para representar una matriz se necesita un nombre de matriz se necesita un nombre de matriz acompañado de dos índices.

Mat [R,C]

Donde R indica el renglón y C indica la columna, donde se encuentra almacenado el dato.

Representación gráfica de una matriz

Page 4: Arreglos Vectores Y Matrices Trabajo Final

Mat [R,C]

1,1 1,2 1,3 1,4 Filas

2,1 2,2 2,3 2.4

3,1 3,2 3,3 3,4

4,1 4,2 4,3 4,4

Columnas

Llenado de una matriz

• Por renglones

Hacer para R = 1 a 5

Hacer para C = 1 a 5

Leer Mat [R,C]

Fin-para

Fin-para

• Por columnas

Hacer para C = 1 a 5

Hacer para R = 1 a 5

Leer Mat [R,C]

Fin-para

Fin-para

Page 5: Arreglos Vectores Y Matrices Trabajo Final

ARRAYS NUMÉRICOS: VECTORES Y MATRICES

1. Crea una array de 10 elementos de tipo short. Rellena lo con valores desde el teclado. Imprime en la pantalla la dirección de memoria de cada elemento y el valor que contiene en el formato indicado:

&nom_array[0] esta en dirección de memoria: 5467234 y tiene valor 5

&nom_array[1] esta en dirección de memoria: 5467236 y tiene valor 5

.

.

.

.

&nom_array[9] esta en dirección de memoria: 5467252 y tiene valor 5

Observa el intervalo que hay entre las direcciones.

Page 6: Arreglos Vectores Y Matrices Trabajo Final

2. Crea un array de elementos, rellénelo con valores leídos desde el teclado. Calcula e imprime la suma y el producto de todos sus elementos en el formato indicado:

Elemento nº 1 vale 4

Elemento nº 2 vale 5

.

.

.

.

LA SUMA DE LOS … ELEMENTOS ES: 45

EL PRODUCTO DE LOS … ELEMENTOS ES: 345

3. Crea un array, rellénalo con valores desde leidos desde el teclado. Copia sus elementos al revés en otro array e imprime los elementos de los dos arrays en el formato indicado:

Nom_array1 Nom_array2

1 8

2 7

4 6

5 5

6 4

7 2

Page 7: Arreglos Vectores Y Matrices Trabajo Final

8 1

4. Crea un array, rellenalo con valores desde el teclado. Imprime sus elementos indicando para cada uno si es par o impar en el formato indicado:

Nom_array

Elemento nº 1 vale 4 – es par

Elemento nº 2 vale 5 – es impar

.

.

.

.

Elemento nº … vale 56 – es par

5. Crea un array, rellénalo con valores leídos desde el teclado. Imprime sus elementos calculando para cada uno su factorial en el formato indicado:

Nom_array

Elemento nº 1 vale 4. El factorial de 4 es 24

Elemento nº 2 vale 5. El factorial de 5 es 120

.

Page 8: Arreglos Vectores Y Matrices Trabajo Final

.

.

.

.

.

Elemento nº … vale 12. El factorial de 12 es ¿?

6. Crea un array, rellenalo con valores desde el teclado. Imprime sus elementos indicando para cada uno si el valor es un numero perfecto en el formato indicado:

Nom_array

Elemento nº1 vale 28 – es perfecto

Un numero es perfecto cuanto es igual a la suma de sus divisores excepto el mismo. Por ejemplo:

Los divisores de 28 son: 1, 2, 4, 7,14. La suma de sus divisores es: 1+2+4+7+14 = 28. El un numero perfecto.

7. Crea un array. El número de elemento del array lo indicará el usuario. Rellénalo con valores desde el teclado. Imprime

Page 9: Arreglos Vectores Y Matrices Trabajo Final

aquellos de los valores que son múltiplos de 9. Un número es multiplo de 9 si la suma de sus cifras es 9 o múltiplo de 9.

Ej. 99 es multiplo por que 9+9 = 18, que a su ves 1+8 = 9

8. Crea un array, rellenalo con valores leídos desde el teclado. Calcula la suma y la media de los elementos que se encuentran en las posiciones pares e imprime estos elementos y sus valores correspondientes.

9. Crea un array, rellenalo con valores leídos desde el teclado. Imprime el numero de veces que aparece un numero indicado por el usuario, la posición en el array.

Por ejemplo:

Si el array tiene 5 elementos con los siguientes valores: 1, 2,4,2,1

Y el usuario quiere saber cuantas veces aparece el 2, en la pantalla hay que imprimir la respuesta en el siguiente formato:

El numero 2 se repite 2 veces.

Las posiciones que contienen el valor 2 son: 1,3.

Page 10: Arreglos Vectores Y Matrices Trabajo Final

10. Crea un array de numero elementos indicado por el usuario. Rellenalo con valores leídos por el teclado e imprime los caracteres correspondientes en el formato indicado:

Nomb:array

Elemento nº 1 vale 65, el carácter correspondiente es A

ARRAYS DE CADENAS DE CARACTERES

En C, C++ las cadenas de caracteres no son más que arrays de caracteres, salvo que a este tipo de arrays el compilador les da un tratamiento especial. Usted puede manipular las cadenas de caracteres de la misma manera en que manipula cualquier otro tipo de array, sin embargo, es preferible hacer uso de una librería estándar especialmente escrita para manipulacion de cadenas de caracteres, me refiero a la librería <string.h> y que viene incluida con todo compilador de C, C++.

Para comenzar y antes de ver algunas de las funciones de la mencionada librería, tenemos los siguientes ejemplos:

1. char nombre[] = "Oscar";2. char nombre2[] = { 'O', 's', 'c', 'a', 'r', '\0' };

Page 11: Arreglos Vectores Y Matrices Trabajo Final

En el ejemplo 1 se está declarando la variable nombre como una cadena de caracteres y cuyo contenido inicial es "Oscar".

En el ejemplo 2 se está declarando la variable nombre2 como una cadena de caracteres y cuyo contenido inicial es { 'O', 's', 'c', 'a', 'r', '\0' };.

En ambos casos el resultado es el mismo, es decir, al final se obtiene la misma cadena, pero usted debe poner atención al hecho de que toda cadena de caracteres en C, C++ debe terminar con el caracter NULL, que normalmente es igual a cero y se puede escribir como '\0'. Ahora bien, cuando usted usa la sintaxis mostrada en el ejemplo 1 no tiene que preocuparse por agregar el caracter NULL, ya que esto lo hace el compilador automáticamente.

ARRAYS DE CADENAS DE CARACTERES En C no existe un tipo predefinido para manipular cadenas de caracteres (string). Sin embargo, el estándar de C define algunas funciones de biblioteca para tratamiento de cadenas.

Una cadena en C es un array de caracteres de una dimensión (vector de caracteres) que termina con el carácter especial ‘\0’ (cero).

Page 12: Arreglos Vectores Y Matrices Trabajo Final

El formato para declarar una cadena es:

char nombre[n];

donde: n >= 1 y representa a la longitud-1 real de la cadena.

Un ejemplo de declaración de cadena:

char cadena [5];

Debido a que en la representación interna de una cadena de caracteres es terminada por el símbolo '\0', para un texto de "n" caracteres, debemos reservar "n+1”. El carácter '\0', aunque pertenece a la cadena, no aparece al utilizar funciones como printf.

En el caso especial de los arrays de caracteres, podemos utilizar varias formas de inicialización:

char cadena[] = "Hola";

char cadena[] = {'H','o','l','a',0};

char cadena[] = {'H','o','l','a','\0'};

sin especificar el tamaño de la cadena, o especificando el tamaño:

char cadena[5] = "Hola";

char cadena[5] = {'H','o','l','a',0};

char cadena[5] = {'H','o','l','a','\0'};

Durante la inicialización, se reserva automáticamente el número de bytes necesarios para la cadena, esto es, el número de caracteres más uno. Por ejemplo:

Para acceder a un elemento de una cadena de caracteres puede hacerse de la misma manera que el acceso al elemento de un array.

Page 13: Arreglos Vectores Y Matrices Trabajo Final

cadena[i];

donde: 0 <=i < n

Por ejemplo:

La biblioteca “string” tiene una gran cantidad de funciones prácticas para trabajar con cadenas de caracteres. Para utilizarlas debemos de incluir el fichero que define los prototipos de dichas funciones:

#include <string.h>

Algunas de las funciones más importantes son:

• strlen(<cadena>): Devuelve la longitud de la cadena sin tomar en cuenta el caracter de final de cadena.

• strcpy(<cadena_destino>, <cadena_origen>) : Copia el contenido de <cadena_origen> en <cadena_destino>.

• strcat(<cadena_destino>, <cadena_origen>) : Concatena el contenido de <cadena_origen> al final de <cadena_destino>.

• strcmp(<cadena1>, <cadena2>) : Compara las dos cadenas y devuelve un 0 si las dos cadenas son iguales, un número negativo si

<cadena1> es menor que (precede alfabéticamente a) <cadena2> y un número positivo (mayor que cero) si <cadena1> es mayor que <cadena2>.

A diferencia de los arrays de tipos de datos numéricos (arrays de enteros, de números con punto decimal, etc.), en donde cada elemento del array se debe considerar como una

Page 14: Arreglos Vectores Y Matrices Trabajo Final

variable independiente de los demás, los arrays de caracteres (cadenas) se pueden manipular de dos maneras: de forma conjunta o separada.

Por ejemplo, para mostrar en pantalla un array de caracteres podemos hacerlo dentro de un bucle, desde el primer caracter (indice 0) hasta el último carácter (lo que nos devuelve la función strlen):

for(i=0; i<strlen(cadena); i++)

printf("%c",cadena[i]); Existe una mejor manera de mostrar en pantalla una cadena, y es utilizando el carácter de conversión %s:

printf("%s",cadena);

ARRAYS BIDIMENSIONALES

El lenguaje C permite el uso de matrices, es decir, arrays bidimensionales. En general, todo lo que vamos a estudiar en esta sección se puede extrapolar a arrays incluso n-dimensionales (o tensores), aunque en la práctica el uso de arrays con más de 2 dimensiones no es muy común. La declaración de una matriz o array bidimensional es:

tipo variable_matriz[N][M];

Donde N y M son el número de filas y de columnas respectivamente (la dimensión de la matriz). Se ha escrito la dimensión con letras mayúsculas, ya que deben ser constantes, y al igual que con vectores se suelen definir con constantes, por ejemplo:

#define N 4 //número de filas de las matrices que voy a declarar#define M 5 //número de columnas de las matrices que voy a declarar

Page 15: Arreglos Vectores Y Matrices Trabajo Final

main(){

double matriz1[N][M], matriz2[N][M];int matriz_entera[N][M];...

}

Al igual que con vectores, las matrices se numeran empezando por el índice 0, con lo cual el elemento superior izquierdo es el [0][0] y el inferior derecho es el [N-1][M-1]. En la siguiente tabla se muestra cual sería la forma y los elementos de una matriz a[4][5], de tamaño 4×5. Véase que el primer elemento del array bidimensional es el a[0][0], el siguiente sería el a[0][1], y así, hasta llegar al elemento a[3][4].

Matriz bidimensional

Elemento enÍndice de columna

0 1 2 3 4

Índice de fila

0 a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]1 a[1][0] a[1][1] a[1][2] a[1][3] a[0][4]2 a[2][0] a[2][1] a[2][2] a[2][3] a[0][4]3 a[3][0] a[3][1] a[3][2] a[3][3] a[0][4]

Por otra parte, en lenguaje C las matrices se almacenan en memoria "por filas", es decir, los elementos de la fila primera (de índice 0) van consecutivos y cuando acaba el último de la primera fila empieza a almacenarse el primero de la segunda, y así sucesivamente hasta llegar a la última fila. La Figura 4.4 muestra como estaría almacenada en la memoria la matriz anterior a[4][5]. Hay que aclarar que algunos lenguajes de programación (FORTRAN) utilizan el convenio contrario, es decir, almacenan las matrices por columnas.

Page 16: Arreglos Vectores Y Matrices Trabajo Final

Distribución de una matriz bidimensional en memoriaFila0 1 2 3En memoria

a[0][0]

a[0][1]

a[0][2]

a[0][3]

a[1][0]

a[1][1]

a[1][2]

a[1][3]

a[2][0]

a[2][1]

a[2][2]

a[2][3]

a[3][0]

a[3][1]

a[3][2]

a[3][3]

Aunque se puede trabajar con elementos por separado de una matriz, lo habitual es hacer operaciones matriciales con todos los elementos en conjunto. Al igual que no existen operadores vectoriales en lenguaje C, no existen tampoco operadores matriciales, de manera que tales operaciones hay que realizarlas con bucles. Como ya vimos, el anidamiento de bucles permite el recorrido completo de un array bidimensional o matriz, y tal recorrido puede hacerse por filas o por columnas. A continuación se muestra un sencillo algoritmo que nos permite recorrer por filas completamente matrices (ya que el bucle interno actúa sobre los índices de las columnas); en primer lugar se valoran las matrices b y c con ciertos números y seguidamente se realiza la operación matricial suma (en matemáticas se define un operador suma matricial con el mismo símbolo '+', de forma que este algoritmo sería equivalente a la suma de matrices A=B+C).

int a[4][5], b[4][5], c[4][5], i, j;

// se valoran las matrices origen A y B con ciertos números.for (i = 0 ; i < 4 ; i++)

for (j = 0 ; j < 5 ; j++){

b[i][j] = i;c[i][j] = (i * j) + j;

}// A continuación se realiza la suma matricial for (i = 0 ; i < 4 ; i++)

for (j = 0 ; j < 5 ; j++){

Page 17: Arreglos Vectores Y Matrices Trabajo Final

a[i][j] = b[i][j] + c[i][j] ;}

Además del recorrido simple por filas o por columnas, pueden existir otros bucles anidados que mezclen recorridos por filas con recorridos con columnas. Esto ocurre, por ejemplo, en el producto matricial (en matemáticas A=B×C), ya que en tal operación es necesario que una fila de B se multiplique por una columna de C (en los ejercicios de este apartado se estudia esta operación).

Hay que tener en cuenta que, por un lado, la declaración de matrices implica una reserva o consumo de memoria que puede ser importante, y por otro, que el uso posterior de las mismas en bucles anidados puede suponer un tiempo de ejecución considerable. Por ejemplo si es pretende trabajar con una matriz donde se almacena un elemento tipo double por cada píxel de la pantalla de alta resolución, esto supone declarar una matriz de dimensión [1024][768], es decir, un consumo de 8×1024×768=6,291,456 bytes, o sea, más de 6 MB. Posteriormente cada vez que se ejecute un bucle anidado para recorrer tal matriz, ¡se ejecutarán 1024×768=786,432 iteraciones!

Por último y como explicamos antes, se puede extrapolar todo lo anterior a arrays n-dimensionales. Así, el siguiente ejemplo declara un tensor de dimensión 4×5×6 e inicializa todos sus elementos a cero usando tres bucles anidados:

double tensor[4][5][6];int i, j, k;

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

for (k = 0 ; k < 6 ; k++)tensor[i][j][k] = 0;

Page 18: Arreglos Vectores Y Matrices Trabajo Final

ARRAYS MULTIDIMENSIONALES

C permite arrays de más de una dimensión. La forma general de declaración de un array multidimensional es:

Tipo nombre [a] [b] [c] ¿.. [z];

Los arrays de tres o más dimensiones no se utilizan a menudo por la cantidad de memoria que se requiere para almacenarlos, ya que el almacenamiento requerido aumenta exponencialmente con el número de dimensiones.9.4 Inicialización de arrays C permite la inicialización de arrays en el momento de declararlos, como en cualquier variable. La forma general es: tipo nombre [tamaño1] ¿ [tamaño n]={lista de valores};

la lista de valores es una lista de constantes separadas por comas cuyo tipo es compatible con el tipo especificado en la declaración del array. Por ejemplo: int i[10] = {1,2,3,4,5,6,7,8,9,10};

Page 19: Arreglos Vectores Y Matrices Trabajo Final

Con las cadenas o arrays de caracteres se hace igual, aunque permite una inicialización abreviada. Estas dos sentencias producen el mismo resultado:char cad[11] = "Me gusta C";char cad[11] = {¿M¿,¿e¿,¿ ¿,¿g¿,¿u¿,¿s¿,¿t¿,¿a¿,¿ ¿,¿C¿,¿\0¿};

Los arrays multidimensionales se inicializan del mismo modo que los unidimensionales.

CONCLUSION:

Que en Un Arreglo es una estructura de datos que almacena bajo el mismo nombre (variable) a una colección de datos del mismo tipo y Los arreglos se caracterizan por: Almacenan los elementos en posiciones contiguas de memoria ,Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que ocupa cada elemento dentro del archivo. Tipo de Arreglos:

Unidimensionales (Vectores)

Bidimensionales (Matrices)

Vectores

Page 20: Arreglos Vectores Y Matrices Trabajo Final

Es un arreglo de “N” elementos organizados en una dimensión donde “N” recibe el nombre de longitud o tamaño del vector. Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del índice (entre corchetes), el cual indica una posición en particular del vector.

Matriz

Es un arreglo de M * N elementos organizados en dos dimensiones donde “M” es el numero de filas o reglones y “N” el numero de columnas.

Para representar una matriz se necesita un nombre de matriz se necesita un nombre de matriz acompañado de dos índices.

Biografia:

http://www.mailxmail.com/curso-introduccion-lenguaje-c/arrays-cadenas

http://www.mitecnologico.com/Main/ArreglosVectoresYMatrices

http://www.uco.es/grupos/eatco/informatica/metodologia/cadenasyarrays.pdf

http://www.atc.us.es/asignaturas/fi/curso_de_c/Array_bidimensional_o_matriz.html