Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Vectores
Arreglos bidimensionales
Matrices
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Contenido
Introducci on
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Arreglos (arrays )
Arreglo: concepto en programaci on an alogo a los conceptos matem aticos de vector, matriz y tensor Arreglo unidimensional: estructura de datos formada por una colecci on nita de elementos homog eneos y ordenados que se que se referencian con un nombre com un
Homog eneos: todos los elementos son del mismo tipo de dato (int, float, etc.) Ordenados: el arreglo tiene un primer elemento, un segundo elemento, etc. Finito: el arreglo tiene un u ltimo elemento
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Declaraci on de arreglos
Declaraci on de un arreglo unidimensional: tipo nombre arreglo[tama~ no]
tipo: tipo de dato de los elementos del arreglo (int, float, etc.) nombre arreglo: identicador que representa la colecci on de elementos tama no: constante entera positiva que representa la cantidad de elementos de la colecci on
Ejemplos:
double x[30]; float notas[8]; int posiciones[100]; char apellidos[15];
Introducci on
Vectores
Arreglos bidimensionales
Matrices
o, , b, i, e, n, \O };
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Operaciones frecuentes
Recorriendo un arreglo x[i] de tama no n:
El recorrido se realiza por medio de un ndice El ndice puede ir desde el primero hasta el u ltimo elemento Recorrido del primero al u ltimo for (i=0; i<n; i++) { // proceso que involucra a x[i] <proceso> }
El ndice puede ir desde el u ltimo hasta el primer elemento Recorrido del u ltimo al primero for (i=n-1; i>=0; i--) { // proceso que involucra a x[i] <proceso> }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 2.1 (Notas) Escriba un programa en C que almacene en un vector (arreglo unidimensional) las notas nales de los alumnos de un curso formado por 10 estudiantes. El programa debe visualizar por pantalla las notas. Soluci on
notas vector.c
#include<stdio.h> main(){ float notas[10]; int i; // Recorrido para leer datos en el arreglo for (i=0; i<10; i++) { printf("Ingrese nota = "); scanf("%f", ¬as[i]); } // Recorrido para escribir datos en pantalla for (i=0; i<10; i++) { printf("Nota %d = %f \n", i, notas[i]); } }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 2.2 (Notas) Modique el programa del ejemplo anterior (5.1) para que muestre por pantalla el promedio del curso. Soluci on
notas promedio.c
#include<stdio.h> main(){ float notas[10], suma = 0.0, promedio; int i; // Recorrido para leer datos en el arreglo for (i=0; i<10; i++) { printf("Ingrese nota = "); scanf("%f", ¬as[i]); } // Recorrido para sumar las 10 notas for (i=0; i<10; i++) suma += notas[i]; promedio = suma/10.0; printf("Promedio = %f", promedio); }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 2.3 (Fibonacci) Escriba un programa en C que genere los primeros n t erminos de la sucesi on de Fibonacci, los almacene en un vector y los muestre por pantalla. Soluci on
b vector.c
#include<stdio.h> main(){ int i, n; printf("Ingrese n umero de t erminos: "); scanf("%d", &n); /* Declara vector de tama~ no n e inicializa los dos primeros elementos */ int fib[n]; fib[0]=0, fib[1]=1; // Almacena Fibonacci for (i=2; i<n; i++) fib[i] = fib[i-1] + fib[i-2]; // Imprime t erminos de la sucesi on for (i=0; i<n; i++) printf(" %d \t", fib[i]); }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 2.4 (Intercambiar) Escriba un programa en C que intercambie los elementos de un vector de la siguiente manera: el de la primera posici on pasa a la u ltima posici on, el de la segunda a la pen ultima, etc. Soluci on
intercambia vector.c
#include<stdio.h> main(){ int i, n; printf("Ingrese tama~ no del vector: "); scanf("%d", &n); float x[n], temp; // Escribe datos en el arreglo for (i=0; i<n; i++) { printf("Elemento %d: ", i); scanf("%g", &x[i]); } // continua en la columna derecha } // Imprime los elementos del vector for (i=0; i<n; i++) printf(" %g \t", x[i]); } // Intercambia elementos del arreglo for (i=0; i<n/2; i++) { temp = x[i]; x[i] = x[n-i-1]; x[n-i-1] = temp;
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 2.5 (Intercambiar funci on) Escriba el programa del ejemplo anterior (2.4) utilizando funciones. Soluci on
intercambiafun vector.c
#include<stdio.h> // declaracion de la funcion intercambia void intercambia(float *a, float *b); main(){ int i, n; printf("Ingrese tama~ no del vector: "); scanf("%d", &n); float x[n]; // Escribe datos en el arreglo for (i=0; i<n; i++) { printf("Elemento %d: ", i); scanf("%g", &x[i]); } // continua en la columna derecha } }
// Intercambia elementos del arreglo for (i=0; i<n/2; i++) intercambia(&x[i], &x[n-i-1]); // Imprime los elementos del vector for (i=0; i<n; i++) printf(" %g \t", x[i]);
// declaracion de la funcion intercambia void intercambia(float *a, float *b) { float temp; temp = *a; *a = *b; *b = temp;
Introducci on
Vectores
Arreglos bidimensionales
Matrices
La forma m as usual de pasar un arreglo como par ametro a una funci on es por medio de punteros:
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 3.1 (Imprime arreglo) Escriba una funci on en C llamada imprimir que reciba como argumento un vector formado por 0, 1, 2, . . . , 9 y los muestre por pantalla. Soluci on
pasar arreglo.c
#include<stdio.h> #define n 10 // define n=10 /* declaracion de la funcion imprimir de dos maneras */ void imprimir1(int x[]); void imprimir2(int *x); main(){ int x[n], i; // Inicializa arreglo for (i=0; i<n; i++) x[i] = i; imprimir1(x); // Imprime arreglo // imprimir2(x); } // continua en la columna derecha
// Definici on de la funcion imprimir1 void imprimir1(int x[]) { int i; for (i=0; i<n; i++) printf(" %d \t", x[i]); } // Definici on de la funcion imprimir2 void imprimir2(int *x) { int i; for (i=0; i<n; i++) printf(" %d \t", x[i]); }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 3.2
Ejemplo 3.2 (promedio arreglo) Escriba un programa en C que calcule el promedio de los elementos de un vector de tama no n. El programa debe constar de tres funciones, una que lea el vector (leer vector), otra que imprima el vector por pantalla (escribir vector) y otra que calcule el promedio (promedio). Soluci on Datos de entrada:
n: tama no del vector x[n]: vector
Funciones:
void leer vector(double x[], int n) void escribir vector(double x[], int n) double promedio(double x[], int n)
Introducci on
Vectores
Arreglos bidimensionales
Matrices
promedio arreglo.c
#include<stdio.h> // Declaracion de las funciones void leer vector(double x[], int n); void escribir vector(double x[], int n); double promedio(double x[], int n); main(){ int n; printf("Ingrese n umero de elementos: "); scanf("%d", &n); double x[n]; leer vector(x, n); escribir vector(x, n); printf("\nPromedio = %lf", promedio(x,n)); } void leer vector(double x[], int n) { int i; for (i=0; i<n; i++) { printf("x( %d) = ", i+1); scanf("%lf", &x[i]); } } // continua en la columna derecha
// Definici on de las funciones void escribir vector(double x[], int n) { int i; for (i=0; i<n; i++) printf(" %5.8lf \t", x[i]); } double promedio(double x[], int n) { int i; double suma = 0.0; for (i=0; i<n; i++) suma += x[i]; return suma/n; }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 3.3
Ejemplo 3.3 (Busca elemento) Escriba una funci on en C que determine si un elemento dado est a en un vector. Soluci on Datos de entrada:
n: tama no del vector x[n]: vector v: elemento a buscar
Funciones:
void leer vector(double x[], int n) void escribir vector(double x[], int n) int pertenece(double x[], double v, int n)
Introducci on
Vectores
Arreglos bidimensionales
Matrices
buscar.c
#include<stdio.h> // Declaracion de las funciones void leer vector(double x[], int n); void escribir vector(double x[], int n); int pertenece(double v, double x[], int n); main(){ int n; printf("Ingrese n umero de elementos: "); scanf("%d", &n); double x[n], v; leer vector(x, n); escribir vector(x, n); printf("\nIngrese elemento a buscar: "); scanf("%lf", &v); if (pertenece(v,x,n)) printf(" %lf s est a", v); else printf(" %lf no est a", v); } // continua en la columna derecha
// Definici on de las funciones void leer vector(double x[], int n) { int i; for (i=0; i<n; i++) { printf("x( %d) = ", i+1); scanf("%lf", &x[i]); } } void escribir vector(double x[], int n) { int i; for (i=0; i<n; i++) printf(" %5.8lf \t", x[i]); } int pertenece(double v, double x[], int n) { int s = 0, k = 0; while (s==0 && k<n) { if (v==x[k]) s=1; k++; } return s; }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
La denici on de arreglo bidimensional [Criado, 2006] puede hacerse desde dos enfoques:
Enfoque recursivo: se trata de un arreglo unidimensional en el que cada elemento es a su vez un arreglo unidimensional Enfoque directo: estructura de datos formada por una colecci on nita de elementos homog eneos, ordenados cada uno de ellos en dos dimensiones y referenciados con un nombre com un
El acceso a un elemento del arreglo bidimensional se realiza mediante el nombre del arreglo (identicador ) y un par de ndices que indican la posici on del elemento
Introducci on
Vectores
Arreglos bidimensionales
Matrices
. . .
. . .
: elemento [0][0] : elemento [0][2] : elemento [1][n-2] : elemento [2][1] : elemento [i][j]
. . .
. . .
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Declaraci on de arreglos
Declaraci on de un arreglo bidimensional: tipo nombre arreglo[filas][columnas]
tipo: tipo de dato de los elementos del arreglo (int, float, etc.) nombre arreglo: identicador que representa la colecci on de elementos las: constante entera positiva que representa la cantidad de las columnas: constante entera positiva que representa la cantidad de columnas
Ejemplos:
double a[3][4]; float matriz[12][8]; int pos[18][24]; char lista[7][8];
Introducci on
Vectores
Arreglos bidimensionales
Matrices
double m[2][3]; m[0][0] m[0][1] m[0][2] m[1][0] m[1][1] m[1][2] = = = = = = 1.1; 1.2; 1.3; 1.4; 0.0; 0.0;
double x[][] = {1.1, 1.2, 1.3, 1.4} double y[2][] = {1.1, 1.2, 1.3, 1.4}
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Operaciones frecuentes
Procesar la i
Procesa la for (j=0; j<n; j++) { // proceso que involucra a a[i][j] <proceso a[i][j]> }
Procesar columna j:
Procesa columna for (i=0; i<n; i++) { // proceso que involucra a a[i][j] <proceso a[i][j]> }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Operaciones frecuentes
Recorrido de un arreglo a[i][j] de tama no mn:
Recorrido por las for (i=0; i<n; i++) { for (j=0; j<n; j++) { // proceso que involucra a a[i][j] <proceso a[i][j]> } }
Recorrido por columnas for (j=0; j<n; j++) { for (i=0; i<n; i++) { // proceso que involucra a a[i][j] <proceso a[i][j]> } }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Ejemplo 5.1
Ejemplo 5.1 (Cine) Escriba un programa en C que almacene en una matriz (arreglo bidimensional) el n umero de personas que ingresan a una sala de cine X durante cada uno de los d as de la semana. La matriz debe constar de dos columnas, la primera para los d as de la semana y la segunda para el n umero de personas, y siete las para cada uno de los d as de la semana. El programa debe calcular el promedio de personas que ingresan a la sala. Soluci on Matriz:
int asistencia[2][7] asistencia[i][1]: n umero de personas que asisten el d a i
Salida:
promedio = (asistencia[0][1] + + asistencia[6][1])/7
Introducci on
Vectores
Arreglos bidimensionales
Matrices
cine.c
#include<stdio.h> main(){ int i, j, total = 0, asistencia[7][2]; float promedio; // Inicializa arreglo a cero for (i=0; i<7; i++) { for (j=0; j<2; j++) { asistencia[i][j] = 0; } } // Muestra arreglo inicializado a cero for (i=0; i<7; i++) { for (j=0; j<2; j++) { printf(" %d ", asistencia[i][j]); } printf("\n"); // cambia de fila } // continua en la columna derecha
/* Almacena los d as en la primera columna */ for (i=0; i<7; i++) asistencia[i][0] = i+1; /* Almacena el n umero de personas en la segunda columna */ for (i=0; i<2; i++) { printf("Personas d a %d: ", i+1); scanf("%d", &asistencia[i][1]); } // Muestra informaci on del arreglo for (i=0; i<7; i++) { printf("El d a %d asisten %d \n", asistencia[i][0], asistencia[i][1]); } // C alculo del promedio for (i=0; i<7; i++) total += asistencia[i][1]; promedio = (float)total/7.0; printf("Promedio = %f", promedio); }
Introducci on
Vectores
Arreglos bidimensionales
Matrices
Referencias
M.A. Criado Programaci on en lenguajes estructurados Alfaomega Grupo Editor, S.A. de C.V. Primera Edici on, 2006
H.M. Mora Escobar Introducci on a C y a m etodos num ericos Universidad Nacional de Colombia (Sede Bogot a), 2004