Está en la página 1de 34

Una matriz es una estructura de datos que contiene una serie de variables del mismo tipo.

Desde el punto de vista del programa, una matriz (array vector) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz [1]. Desde el punto de vista lgico podemos considerarlas como un conjunto de elementos ordenados en fila. As pues, en principio todas las matrices son de una dimensin, la dimensin principal, pero veremos que los elementos de esta fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multi-dimensionales, aunque las ms fciles de "ver" o imaginar son las de dos y tres dimensiones.

Una matriz tiene las propiedades siguientes:


Una matriz puede ser unidimensional, multidimensional o escalonada. El valor predeterminado de los elementos numricos de matriz se establece en cero y el de los elementos de referencia se establece en null. Una matriz escalonada es una matriz de matrices y por consiguiente sus elementos son tipos de referencia y se inicializan en null. Las matrices se indizan basadas en cero: una matriz con n elementos se indiza desde 0 hasta n-1. Los elementos de una matriz pueden ser de cualquier tipo, incluido el tipo matriz.

15.1 Arreglos de Varias Dimensiones

Existen conjuntos de datos que por su naturaleza son mejor representados mediante tablas o matrices multidimensionales que por vectores.

Por ejemplo, se puede representar las calificaciones de 4 asignaturas cursadas por 6 estudiantes mediante una tabla como la que abajo se ilustra:

Columna 1 Columna 2 Columna 3 Columna 4 Fila 1 Fila 2 Fila 3 Fila 4 Fila 5

Fila 6

donde cada fila correspondera a un estudiante y cada columna a una asignatura. Cada dato individual (la calificacin de un estudiante en una asignatura dada) es un elemento de esta tabla y ocupa una celda identificable por el nmero de la fila y el nmero de la columna.

Fila 1 Fila 2 Fila 3 Fila 4 Fila 5 Fila 6

Columna 1 Columna 2 Columna 3 Columna 4 M(1,1) M(1,2) M(1,3) M(1,4) M(2,1) M(2,2) M(2,3) M(2,4) M(3,1) M(3,2) M(3,3) M(3,4) M(4,1) M(4,2) M(4,3) M(4,4) M(5,1) M(5,2) M(5,3) M(5,4) M(6,1) M(6,2) M(6,3) M(6,4)

De esta manera, cada elemento de la tabla queda completamente identificado mediante dos subndices: el primero para identificar la fila y el segundo para identificar la columna.

M( i , j )

Cada elemento de la matriz representara la calificacin de un estudiante dado en una asignatura dada. Por ejemplo:

M(4,2) = C

significa que el estudiante nmero 4 obtuvo C en la asignatura 2. La posicin del elemento dentro de la matriz corresponde a la celda sombreada en la tabla de la figura de arriba.

La matriz de arriba representa un arreglo bidimensional con (6x4) 24 elementos, donde

i = 1, 2, 3, ...,6 j = 1, 2, 3, 4

En una matriz multidimensional cada dimensin tiene su propio rango.

Con frecuencia se manejan arreglos de ms de dos dimensiones, correspondiendo un subndice a cada dimensin.

El programador debe tener presente que la memoria de las computadoras es lineal, por lo que la mayora de los compiladores almacenan en memoria los elementos de una matriz linealizandola por filas; es decir, todos los elementos de la primera fila primero, los de la segunda despus y as sucesivamente.

Vector (informtica)
De Wikipedia, la enciclopedia libre Saltar a navegacin, bsqueda

Matriz unidimensional con 10 elementos.

En programacin, una matriz o vector (llamados en ingls arrays) es una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lgico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). En principio, se puede considerar que todas las matrices son de una dimensin, la dimensin principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las ms fciles de imaginar son los de una, dos y tres dimensiones. Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sera ms adecuado utilizar una lista, ya que esta estructura puede cambiar de tamao fcilmente durante la ejecucin de un programa.

Contenido
[ocultar]

1 ndices 2 Notacin 3 Forma de acceso 4 Vectores dinmicos y estticos o 4.1 Ejemplos en C 5 Vectores multidimensionales 6 Vase tambin

[editar] ndices
Todo vector se compone de un determinado nmero de elementos. Cada elemento es referenciado por la posicin que ocupa dentro del vector. Dichas posiciones son llamadas

ndice y siempre son correlativos. Existen tres formas de indexar los elementos de una matriz:

Indexacin base-cero (0): En este modo el primer elemento del vector ser la componente cero ('0') del mismo, es decir, tendr el indice '0'. En consecuencia, si el vector tiene 'n' componentes la ltima tendr como ndice el valor 'n-1'. El lenguaje C es un ejemplo tpico que utiliza este modo de indexacin. Indexacin base-uno (1): En esta forma de indexacin, el primer elemento de la matriz tiene el indice '1' y el ltimo tiene el ndice 'n' (para una matriz de 'n' componentes). Indexacin base-n (n): Este es un modo verstil de indexacin en la que el ndice del primer elemento puede ser elegido libremente, en algunos lenguajes de programacin se permite que los ndices puedan ser negativos e incluso de cualquier tipo escalar (tambin cadenas de caracteres).

[editar] Notacin
La representacin de un elemento en un vector se suele hacer mediante el identificador del vector seguido del ndice entre corchetes, parntesis o llaves:
Notacin Ejemplos

vector[ndice_1,ndice_2...,ndic (Java, Lexico, Perl, e_N] etc.) vector[ndice_1][ndice_2]... [ndice_N] (C, C++, PHP, etc.)

vector(ndice_1,ndice_2...,ndic (Basic) e_N)

Aunque muchas veces en pseudocdigo y en libros de matemtica se representan como letras acompaadas de un subndice numrico que indica la posicin a la que se quiere acceder. Por ejemplo, para un vector "A":
A0,A1,A2,... (vector unidimensional)

[editar] Forma de acceso


La forma de acceder a los elementos de la matriz es directa; esto significa que el elemento deseado es obtenido a partir de su ndice y no hay que ir buscndolo elemento por elemento (en contraposicin, en el caso de una lista, para llegar, por ejemplo, al tercer elemento hay

que acceder a los dos anteriores o almacenar un apuntador o puntero que permita acceder de manera rpida a ese elemento). Para trabajar con vectores muchas veces es preciso recorrerlos. Esto se realiza por medio de bucles. El siguiente pseudocdigo muestra un algoritmo tpico para recorrer un vector y aplicar una funcin 'f(...)' a cada una de las componentes del vector:
i = 0 mientras (i < longitud) #Se realiza alguna operacin con el vector en la i-sima posicin f(v[i]) i=i+1 fin_mientras

[editar] Vectores dinmicos y estticos


Lo habitual es que un vector tenga una cantidad fija de memoria asignada, aunque dependiendo del tipo de vector y del lenguaje de programacin un vector podra tener una cantidad variable de datos. En este caso, se les denomina vectores dinmicos, en oposicin, a los vectores con una cantidad fija de memoria asignada se los denomina vectores estticos. El uso de vectores dinmicos requiere realizar una apropiada gestin de memoria dinmica. Un uso incorrecto de los vectores dinmicos, o mejor dicho, una mala gestin de la memoria dinmica, puede conducir a una fuga de memoria. Al utilizar vectores dinmicos siempre habr que liberar la memoria utilizada cuando sta ya no se vaya a seguir utilizando. Lenguajes ms modernos y de ms alto nivel, cuentan con un mecanismo denominado recolector de basura (como es el caso de Java) que permiten que el programa decida si debe liberar el espacio basndose en si se va a utilizar en el futuro o no un determinado objeto.

[editar] Ejemplos en C

Declaracin en C/C++ de un vector esttico.

int v[5]; int i; for (i=0 ; i<5 ; i++) { v[i] = 2*i; }

Declaracin en C++ de un vector de STL:

#include <vector> vector<int> v; // Si no se especifica el tamao inicial es 0 for (int i=0 ; i<5 ; i++) { v.push_back(2*i); // inserta un elemento al final del vector

El ejemplo anterior est hecho para el lenguaje C++. En C, para crear vectores dinmicos se tendran que utilizar las instrucciones malloc y realloc para reservar memoria de forma dinmica (ver librera stdlib.h), y la funcin por free para liberar la memoria utilizada.

Resultado: 0 1 2 3 4 0 2 4 6 8

El resultado de los dos ejemplos es el mismo vector

[editar] Vectores multidimensionales


En Basic, Java y otros lenguajes es posible declarar matrices multidimensionales, entendindolas como un vector de vectores. En dichos casos en nmero de elementos del vector es el producto resultante de cada dimensin. Por ejemplo el vector v(4,1) tiene 10 elementos se calcula del siguiente modo: (0-4) * (0-1). Los elementos de la primera dimensin del vector contiene 5 elementos que van del '0' al '4' y la 2 dimensin tiene 2 elementos que van desde '0' a '1'. Los elementos seran accedidos del siguiente modo:
elemento 1: (0,0) elemento 2: (0,1) elemento 3: (1,0) ... elemento 8: (3,1) elemento 9: (4,0) elemento 10: (4,1)

>> MATRICES <<


Generar la matriz: [01][02][03][04] [08][07][06][05] [09][10][11][12] Cdigo:

#include<stdio.h> #include<conio.h> void llenar (int M[20][20], int f, int c) { int k=1; for (int i=1;i<=f;i++) { if (i%2!=0) { for (int j=1;j<=c;j++) { M[i][j]=k; k++; } } else { for (int j=c;j>=1;j--) { M[i][j]=k; k++; } } } } void mostrar (int M[20][20], int f, int c) { for (int i=1;i<=f;i++) { printf("\n"); for (int j=1;j<=c;j++) { printf("[%d] ",M[i][j]); } } } int main () { int f, c; int M[20][20]; printf("Inserte filas de M: "); scanf("%d",&f); printf("Inserte cols. de M: "); scanf("%d",&c);

llenar(M, f, c); mostrar(M, f, c); getch(); }

Generar la matriz: [01][02][03][04] [05][06][07][00] [08][09][00][00] [10][00][00][00] Cdigo:

#include <stdio.h> #include <conio.h> void llenar (int M[20][20], int d) { int cont=1; for (int i=1;i<=d;i++) { for (int j=1;j<=d;j++) { if ((i+j)<=(d+1)) {M[i][j]=cont; cont++;} else M[i][j]=0; } } } void mostrar (int M[20][20], int d) { for (int i=1;i<=d;i++) { printf("\n"); for (int j=1;j<=d;j++) { printf ("[%d] ",M[i][j]); } } } int main () { int d; int M[20][20]; printf("Insert dimen: "); scanf("%d",&d); llenar(M, d); mostrar(M, d); getch(); }

Dadas dos matrices A y B intercambiar los minimos de A con los maximos de B Cdigo:

#include <stdio.h> #include <conio.h> void llenar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { printf ("Inserte pos[%d][%d]: ",i,j); scanf("%d",&M[i][j]); } } } void mostrar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { printf("\n"); for (int j = 1 ; j <= c ; j++) { printf ("[%d]",M[i][j]); } } } int menor (int M[20][20], int f, int c) { int men = M [1] [1]; for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { if (M [i] [j] < men) men = M [i] [j]; } } return (men); } int maximo (int M[20][20], int f, int c) { int max = M [1] [1]; for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { if (M [i] [j] > max) max = M [i] [j]; } } return (max); } void intercambiar (int A[20][20], int fa, int ca, int B[20][20], int fb, int cb)

{ int min_a = menor (A, fa, ca); int max_b = maximo (B, fb, cb); //para cambiar los minimos de A con los maximos de B for (int i = 1 ; i <= fa ; i++) { for (int j = 1 ; j <= ca ; j++) { if (A[i][j] == min_a) A[i][j]=max_b; } } //para intercambiar los maximos de con los minimos de A for (int i = 1 ; i <= fb ; i++) { for (int j = 1 ; j <= cb ; j++) { if (B[i][j] == max_b) B[i][j]=min_a; } } } int main () { int A [20] [20]; int B [20] [20]; int fa, ca, fb, cb; printf ("Insert filas de printf ("Insert columnas printf ("Insert filas de printf ("Insert columnas

A: de B: de

"); scanf("%d",&fa); A: "); scanf("%d",&ca); "); scanf("%d",&fb); B: "); scanf("%d",&cb);

//lectura de matrices printf ("\nINSERTANDO DATOS EN MATRIS A: \n"); llenar (A, fa, ca); printf ("\nINSERTANDO DATOS EN MATRIS B: \n"); llenar (B, fb, cb); printf ("\nMATRICES ORIGINALMENTE INSERTADAS: "); mostrar (A, fa, ca); printf ("\n"); mostrar (B, fb, cb); printf ("\n"); //intercambiando elementos intercambiar (A, fa, ca, B, fb, cb); printf ("\nMATRICES DESPUES DEL INTERCAMBIO:"); mostrar (A, fa, ca); printf ("\n"); mostrar (B, fb, cb); getch();

/*Dada una matris cuadrada invertir su diagonal principal*/ Cdigo:

#include <stdio.h> #include <conio.h> void llenar (int M[20][20], int d) { for (int i = 1 ; i <= d ; i++) { for (int j = 1 ; j <= d ; j++) { printf ("Inserte pos[%d][%d]: ",i, j); scanf("%d",&M [i] [j]); } } } void mostrar (int M[20][20], int d) { for (int i = 1 ; i <= d ; i++) { printf("\n"); for (int j = 1 ; j <= d ; j++) { printf ("[%d]",M [i] [j]); } } } void invierte { int fin = d; for (int i = { int aux = M M [i] [i] = M [d] [d] = fin--; } } (int M[20][20], int d) 1 ; i <= d / 2 ; i++) [i] [i]; M [d] [d]; aux;

int main() { int M [20] [20]; int d; printf ("Inserte dimen. de la matris cuadrada: "); scanf("%d",&d); llenar (M, d); printf ("\nMATRIS ORIGINAL: "); mostrar (M, d); printf ("\n\nMATRIS CON LA DIAGONAL PRINCIPAL INVERTIDA: "); invierte (M, d); mostrar (M, d); getch(); }

/*Dada una matris cuadrada invertir su diagonal secundaria*/ Cdigo:

#include <stdio.h> #include <conio.h> void llenar (int M[20][20], int d) { for (int i = 1 ; i <= d ; i++) { for (int j = 1 ; j <= d ; j++) { printf ("Inserte pos[%d][%d]: ",i, j); scanf("%d",&M [i] [j]); } } } void mostrar (int M[20][20], int d) { for (int i = 1 ; i <= d ; i++) { printf("\n"); for (int j = 1 ; j <= d ; j++) { printf ("[%d]",M [i] [j]); } } } void invierte { int fin = d; for (int i = { int aux = M M [i] [d] = M [d] [i] = fin--; } } (int M[20][20], int d) 1 ; i <= d / 2 ; i++) [i] [d]; M [d] [i]; aux;

int main() { int M [20] [20]; int d; printf ("Inserte dimen. de la matris cuadrada: "); scanf("%d",&d); llenar (M, d); printf ("\nMATRIS ORIGINAL: "); mostrar (M, d); printf ("\n\nMATRIS CON LA DIAGONAL SECUNDARIA INVERTIDA: "); invierte (M, d); mostrar (M, d); getch(); }

/*Dada dos matrices de diferentes tamanios R y S mostrar los elementos comunes de R en S*/ Cdigo:

#include <stdio.h> #include <conio.h> void llenar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { printf ("Inserte pos[%d][%d]: ",i,j); scanf("%d",&M [i] [j]); } } } void mostrar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { printf("\n"); for (int j = 1 ; j <= c ; j++) { printf ("[%d]",M [i] [j]); } } } void comunes (int R[20][20], int fr, int cr, int S[20][20], int fs, int cs) { printf("\n\nLos elementos comunes de R en S son: "); for (int i = 1 ; i <= fr ; i++) { for (int j = 1 ; j <= cr ; j++) { for (int k = 1 ; k <= fs ; k++) { for (int l = 1 ; l <= cs ; l++) { if (R [i] [j] == S [k] [l]) printf ("[%d]",R [i] [j]); } } } } } int main() { int R [20] [20]; int S [20] [20]; int fr, cr, fs, cs; printf("Inserte filas de R: "); scanf("%d",&fr); printf("Inserte columnas de R: "); scanf("%d",&cr); printf("Inserte filas de S: ");

scanf("%d",&fs); printf("Inserte columnas de S: "); scanf("%d",&cs); printf("\nLLENANDO MATRIS R: \n"); llenar (R, fr, cr); printf("\nLLENANDO MATRIS S: \n"); llenar (S, fs, cs); printf("\nLA MATRIS R : "); mostrar (R, fr, cr); printf("\n\nLA MATRIS S : "); mostrar (S, fs, cs); comunes (R, fr, cr, S, fs, cs); getch();

/*Intercambiar los datos de la columna 1 con la ultima columna*/ Cdigo:


#include <stdio.h> #include <conio.h> void llenar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { printf ("Inserte pos:[%d][%d]: ",i,j); scanf("%d",&M [i] [j]); } } } void mostrar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { printf("\n"); for (int j = 1 ; j <= c ; j++) { printf ("[%d]",M [i] [j]); } } } void intercambiar (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { int aux = M [i] [1]; M [i] [1] = M [i] [c]; M [i] [c] = aux; } }

int main () { int M [20] [20]; int f, c; printf ("Inserte filas de la matris: "); scanf("%d",&f); printf ("Inserte columnas de la matris: "); scanf("%d",&c); printf ("\nLLENANDO MATRIS : \n"); llenar (M, f, c); printf ("\nLA MATRIS ORIGINAL : "); mostrar (M, f, c); printf ("\n\nLA MATRICES INTERCAMBIADA : "); intercambiar (M, f, c); mostrar (M, f, c); getch(); }

/* Contar el numero de digitos de cada elemento de una matris */ Cdigo:


#include <stdio.h> #include <conio.h>

void llenar (int M [20] [20], int f, int c) { for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { printf ("Inserte pos[%d][%d]: ",i,j); scanf("%d",&M [i] [j]); } } } void mostrar (int M [20] [20], int f, int c) { for (int i = 1 ; i <= f ; i++) { printf("\n"); for (int j = 1 ; j <= c ; j++) { printf ("[%d]",M [i] [j]); } } } void cuenta (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { int contador = 0;

int n=M[i][j]; while (n != 0) { n = n / 10; contador++; } printf("\n[%d] tiene: %d digito(s)",M[i][j],contador); } } int main () { int M [20] [20]; int f, c; printf ("Inserte filas de la matris: "); scanf("%d",&f); printf ("Inserte columnas de la matris: "); scanf("%d",&c); printf ("\nLLENANDO MATRIS M: \n"); llenar (M, f, c); printf ("\nLA MATRIS: "); mostrar (M, f, c); printf ("\n\nCONTEO DE DIGITOS: "); cuenta (M, f, c); getch(); } }

/*Hallar la fila y la columna del primer elemento "e" */ Cdigo:


#include <stdio.h> #include <conio.h>

void llenarMatris (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { printf ("Inserte pos[%d][%d]: ",i,j); scanf("%d",&M [i] [j]); } } } void mostrarMatris (int M[20][20], int f, int c) { for (int i = 1 ; i <= f ; i++) { printf ("\n"); for (int j = 1 ; j <= c ; j++) { printf ("[%d]",M [i] [j] ); }

} } void busqueda (int M[20][20], int f, int c, int e) { int bn = 0; for (int i = 1 ; i <= f ; i++) { for (int j = 1 ; j <= c ; j++) { if (M [i] [j] == e) { printf("\nEl numero: %d se encuentra en la posicion: [%d][%d] de la matris",e, i, j); bn = 1; } } } if (bn == 0) printf("\nNo se encontro el numero %d en la matris :(",e); } int main () { int M [20] [20]; int f, c, numero; printf ("Inserte filas de la matris: "); scanf("%d",&f); printf ("Inserte columnas de la matris: "); scanf("%d",&c); printf ("\nLLENANDO MATRIS: \n"); llenarMatris (M, f, c); printf ("\nLA MATRIZ Z: "); mostrarMatris (M, f, c); printf ("\n\nInserte un numero: "); scanf("%d",&numero); busqueda (M, f, c, numero); getch();

http://foro.elhacker.net/ejercicios/ejercicios_resueltos_c_programacion_estructuradat201980.0.html#ixzz1IRdivQJG

ARRAYS Un array es una estructura n-dimensional que permite almacenar varios elementos del mismo tipo. As, los arrays de dimensin 1 y 2 se corresponden con los vectores y las matrices matemticas respectivamente, pero estos sistemas pueden tener incluso ms dimensiones. Una forma de declararlas es emplear la sintaxis siguiente: <tipo> <nombre> <dimensiones>; Por ejemplo: int mi_array[5][7][12][3]; La sentencia anterior reserva espacio para un array (al que hemos llamado mi_array), que alberga elementos de tipo entero (int) y que tiene 4 dimensiones: una de tamao 5, otra de tamao 7, una tercera de tamao 12 y una ltima de tamao 3. Imagina que quieres almacenar las calificaciones trimestrales de 100 personas en una determinada asignatura. Puedes crear un array unidimensional de tamao 300, pero desde el punto de vista de la codificacin es poco claro, porque no se sabe si quieres almacenar calificaciones trimestrales o slo una calificacin para una lista de 300 personas. Se ve ms clara la siguiente definicin: double calif[100][3]; La sentencia anterior define una matriz de 100 filas y 3 columnas, en la que cada fila corresponde a un alumno y cada columna est asociada a un trimestre. NDICES Un ndice es cada uno de los nmeros con los que se hace referencia a un elemento contenido en un array. As, un array n-dimensional tendr n ndices. El ndice asociado a cada una de las dimensiones del array, toma sus valores de un rango comprendido entre cero y el tamao de la dimensin menos uno. Por tanto, el siguiente array: int mi_array[2][3];

contiene elementos accesibles mediante un ndice que vara entre 0 y 1 y otro que lo hace entre 0 y 2. MATRICES En programacin, una matriz es un array bidimensional, de iguales caractersticas que las matrices matemticas. TABULACIN En programacin se suelen mostrar mensajes por pantalla, tanto como medio de informacin como para solicitar datos al usuario. En estos mensajes puede haber letras, nmeros, signos de puntuacin, etc. Uno de esos smbolos son los llamados caracteres especiales, que se comportan de una manera un poco diferente a los dems. La tabulacin es uno de esos caracteres especiales, y su propsito es el de organizar la informacin en forma de tabla. La consola mediante la que interactas con tus programas, est dividida en varias columnas invisibles (normalmente 10), sobre las cuales se puede configurar una tabla para representar los datos de forma ms intuitiva para el usuario final. Lo que hace el smbolo \t es obligar al cursor del texto a saltar de una columna a la siguiente. Prueba este ejemplo: printf("col1\tcol2"); Vers que el texto "col1" aparece pegado al lateral izquierdo de la consola, mientras que el texto "col2" lo hace un poco ms hacia la derecha, a una cierta distancia de "col1". Esto es porque, despus de escribir "col1", el sistema se encuentra con el carcter especial "\t", que obliga a saltar a la columna siguiente, y es en esta otra columna donde se escribe a continuacin el texto "col2". Espero que lo hayas comprendido.

ARREGLOS, MATRICES Y ARCHIVOS 1. ARREGLOS Y MATRICES Un array (matriz o vector) es un conjunto finito y ordenado de elementos homogneos. La propiedad ordenado significa que el elemento primero, segundo y tercero,, ensimo de un array puede ser identificado. Los elementos del array son homogneos, es decir, del mismo tipo de datos. Los array tambin se conocen como matrices-en matemticas- y tablasen clculos financieros. En otras palabras un arreglo es una especie de variable que contiene muchos valores pero cada uno con una posicin diferente. Un arreglo puede ser unidimensional o vectorial, bidimensional o matricial, o multidimencional. Array Unidimensionales: Los Vectores El array unidimensional (matriz de una dimensin) es el tipo ms simple. Un vector de una dimensin denominado NOTAS que consta de n elementos se puede representar as: NOTAS(1) NOTAS(2) ..... NOTAS(I) ..... NOTAS(N)

El subndice o ndice de un elemento (1, 2, . . . , i, n) designa su posicin en la ordenacin del vector. Como ejemplo de un vector o array unidimensional, se puede considerar el vector temperatura que contiene las temperaturas horarias registradas en una ciudad durante las veinticuatro horas del da. Este vector constar de veinticuatro elementos de tipo real, ya que las temperaturas normales no sern enteras siempre. El valor mnimo permitido de un vector se denomina lmite inferior del vector (L) y el valor mximo permitido se denomina lmite superior (U). En ste ejemplo el lmite inferior es 1 y el superior 24. TEMPERATURA (I) donde 1 <= I <=24 Un ejemplo en seudo lenguaje podra ser: Inicio Suma, const. Limite= 40 Tipo

array [1limite] de real : puntuacin var puntuacin: puntos real: suma, media entero: i 1 el seudo cdigo sera: inicio suma 0 escribir (`datos de array') desde i 1 hasta limite hacer leer (puntos [i]) suma suma + puntos [i] fin_desde media suma/limite escribir ( ` la media es' , media ) fin Este programa sirve para procesar un array puntos, realizando las siguientes operaciones; a) lectura del array, b) clculo de la suma de los vectores del array, c) clculo de la media de los valores. 1.2. Array Bidimensionales (Tablas/ Matrices) El array bidimensional se puede considerar como un vector de vectores. Por consiguiente, un conjunto de elementos, todos del mismo tipo, en el cual el orden de los componentes es significativo y en el que se necesita especificar los subndices para identificar cada elemento del array.

Si se visualiza un array unidimensional, se puede considerar como una columna de datos, un array bidimensional es un grupo de columna.

1.3. Array Multidimensionales Un array puede ser definido de res dimensiones, cuatro dimensiones, hasta de n-dimensiones. En general, un array de n- dimensiones requiere que los valores de n-ndices puedan ser especificados a fin de identificar un elemento individual del array. Si cada componente de un array tiene n-ndices, el array se dice que es solo de n-dimensiones. Ejemplo: Mediciones diarias de temperatura . Punto Tiempo 1 2 3 1 65.5 68.7 62.0 2 68.8 68.9 64.5 3 70.4 69.4 66.3 4 68.5 69.1 65.8

Arreglo Bidimensional: Es un conjunto de datos homogneo, finito y ordenado, donde se hace referencia a cada elemento por medio de dos ndices. El primero se utiliza para los renglones (filas) y el segundo para las columnas. Tambin puede definirse como un arreglo de arreglos. Internamente en memoria se reservan MxN posiciones consecutivas para almacenar todos los elementos del arreglo. Declaracin de una matrz:

Pseudocdigo para el recorrido por filas: Const M=valor1 N= valor2

Tipo Array[1..M,1..N] de real:matriz Var Matriz:A Desde i = 1 hasta M hacer Desde j = 1 hasta N hacer Escribir (A[i,j]) Fin_desde Fin_desde

Escuela Internacional Carrera Acelerada de Cocinero, en Solo 5 Meses, Inscribete www.ismm.com.ar/EscuelaEnlaces patrocinados

El recorrido por columnas se hace de manera similar, invirtiendo el sentido de los ndices. Desde j = 1 hasta N hacer Desde i = 1 hasta M hacer Escribir (A[i,j]) Fin_desde Fin_desde El nmero de elementos que contendr una fila viene dado por U1-L1+1 (Valor mayor valor menor +1). Igualmente, el nmero de elementos para la columna es U2-L2+1. As, el nmero total de elementos de la tabla es (U2-L2+1)*(U1-L1+1) Ejemplos. 1) Rellenar una matrz identidad de 4 por 4 elementos. Una matriz identidad es aquella en la que la diagonal principal est llena de unos y el resto de los elementos son cero. Para llenar la matriz identidad se debe verificar que cuando los ndices i y j sean iguales, la posicin vale 1, en caso contrario se asigna cero al elemento i,j.

Algoritmo Inicio Desde i = 1 hasta 4 hacer Desde j = 1 hasta 4 hacer Si i=j entonces Matriz[i,j] =1 Sino Matriz[i,j] =0 Fin_si Fin_desde

Fin_desde Fin Cadenas de Caracteres. Una cadena es un conjunto de caracteres incluido el espacio en blanco, que se almacena en un rea contigua de la memoria central. La longitud de una cadena es el nmero de caracteres que contiene. Una cadena vaca es la que no tiene ningn carcter. Una constante de tipo cadena es un conjunto de caracteres vlidos encerrados entre comillas. Una variable de cadena es aquella cuyo contenido es una cadena de caracteres. El ltimo carcter de la cadena marca el fin de la cadena. Las variables de cadena se dividen en: Estticas. Su longitud se define antes de ejecutar el programa y no puede cambiarse a lo largo de este. Semiestticas. Su longitud puede variar durante la ejecucin del programa, pero sin sobrepasar un lmite mximo declarado al principio. Dinmicas. Su longitud puede variar sin limitacin dentro del programa. Operaciones bsicas con cadenas: Asignacin. Nombre "Luis Humberto" Entrada/ Salida Leer(nombre, estado_civil) Escribir(nombre, apellido) Escribir(nombre, apellido) Clculo de la longitud de una cadena. Es dar el nmero de caracteres que hay en una cadena que est entre comillas, incluyendo los espacios en blanco. Comparacin de cadenas: es comparar caracteres o cadenas de caracteres para ver si son iguales o no. Segn el cdigo ASCII hay un orden de caracteres, as "A" es menor que "C". El valor de A es 65 y el de C es 67 Concatenacin: es unir varias cadenas de caracteres en una sola, conservando el orden de los caracteres de cada una de ellas. Cuando se combinan dos cadenas con el operador de concatenacin, la segunda cadena se agregar directamente al final de la primera. En cdigos postales y nmeros telefnicos se suele usar caracteres ya que no se necesita operar los nmeros y as podemos usar el guin. Strtelefono = "1-515-555-1212" Extraccin de subcadenas. Subcadena es una porcin de una cadena. Para extraer una subcadena se deben tener: La cadena fuente de la cual se va a extraer la subcadena. Pos que es un nmero que indica la posicin inicial de la subcadena Long que indica el tamao que tendr la subcadena. Bsqueda de informacin. Consiste en buscar una subcadena o cadena dentro de otra mayor. Nos devuelve el nmero de la posicin donde inicia la cadena buscada, cero si no la encuentra. Dicho nmero se puede asignar a una variable entera (numrica). Encontrar el punto medio Truncar cadenas Convertir cadenas a nmeros o viceversa

Insertar una cadena dentro de otra Borrar cadenas Sustituir una cadena por otra. Invertir el orden de una cadena. Ejemplo. El siguiente algoritmo sustituye las e por *. Inicio Escribir ("escriba una palabra") Leer (str) Desde i=1 hasta len(str) hacer Si str[i] = `e entonces Str[i] = `* Fin_si Fin_desde Escribir (str) Fin

Matrices.

Las matrices se definen, como un arreglo bidimensional, en donde tenemos un nmero de reglones N y un nmero de columnas M. La representacin matemtica de una matriz es :

a11 a21 ... aN1

a12 a22 ... aN2

... ... ... ...

a1M a2M ... aNM

Para hacer la definicin en Java de este arreglo hacemos

double A[][] = new double [N][M];

donde A es el nombre del arreglo N el nmero de renglones y M el nmero de columnas.

Para hacer referencia al elemento en el i-esimo rengln y la j-esima columna hacemos A[i][j].

Otra forma de hacer la definicin de un arreglo es mediante la siguiente instruccin

double a[][] = {{1,2,3}, {4,5,6}, {7,8,9}};

esta instruccin crea un arreglo de 3 renglones con 3 columnas y los elementos lo dispone de la siguiente manera

1 4 7

2 5 8

3 6 9

Ejemplo.

Hacer un programa que almacene la matriz anterior en un arreglo, la eleve al cuadrado e imprima el resultado en la pantalla.

class arreglos { static public void main(String args[]) { double a[][] = {{1,2,3}, {4,5,6}, {7,8,9}}; double b[][] = new double [3][3]; int i, j;

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

for(j=0; j<3; j++) b[i][j] = a[i][j] * a[i][j];

for(i=0; i< 3; i++) { for(j=0; j<3; j++) System.out.print(b[i][j] + " "); System.out.println(""); }

} }

Las cadenas de texto.


Una cadena de texto (en ingls, "string") es un bloque de letras, que usaremos para poder almacenar palabras y frases. En algunos lenguajes, podramos utilizar un "array" de "chars" para este fin, pero en Java no es necesario, porque tenemos un tipo "cadena" especfico ya incorporado en el lenguaje.

Realmente en Java hay dos "variantes" de las cadenas de texto: existe una clase llamada "String" y otra clase llamada "StringBuffer". Un "String" ser una cadena de caracteres constante, que no se podr modificar (podremos leer su valor, extraer parte de l, etc.; para cualquier modificacin, realmente Java crear una nueva cadena), mientras que un "StringBuffer" se podr modificar "con ms facilidad" (podremos insertar letras, dar la vuelta a su contenido, etc) a cambio de ser ligeramente menos eficiente (ms lento).

Vamos a ver las principales posibilidades de cada uno de estos dos tipos de cadena de texto y luego lo aplicaremos en un ejemplo. Podemos "concatenar" cadenas (juntar dos cadenas para dar lugar a una nueva) con el signo +, igual que sumamos nmeros. Por otra parte, los mtodos de la clase String son:

Mtodo length() charAt (int pos) toLowerCase() toUpperCase() substring(int desde, int cuantos) replace(char antiguo, char nuevo) trim() startsWith(String subcadena) endsWith(String subcadena) indexOf(String subcadena, [int desde]) lastIndexOf(String subcadena, [int desde]) valueOf( objeto )

Cometido Devuelve la longitud (nmero de caracteres) de la cadena Devuelve el carcter que hay en una cierta posicin Devuelve la cadena convertida a minsculas Devuelve la cadena convertida a maysculas Devuelve una subcadena: varias letras a partir de una posicin dada Devuelve una cadena conun carcter reemplazado por otro Devuelve una cadena sin espacios de blanco iniciales ni finales Indica si la cadena empieza con una cierta subcadena Indica si la cadena termina con una cierta subcadena Indica la posicin en que se encuentra una cierta subcadena (buscando desde el principio, a partir de una posicin opcional) Indica la posicin en que se encuentra una cierta subcadena (buscando desde el final, a partir de una posicin opcional) Devuelve un String que es la representacin como texto del objeto que se le indique (nmero, boolean, etc.)

Devuelve la cadena con otra aadida a su final concat(String cadena) (concatenada) Tambin se pueden concatenar cadenas con "+" equals(String cadena) Mira si las dos cadenas son iguales (lo mismo que "= =") equals-IgnoreCase( String cadena) Comprueba si dos cadenas son iguales, pero despreciando las diferencias entre maysculas y minsculas

compareTo(String cadena2)

Compara una cadena con la otra (devuelve 0 si son iguales, negativo si la cadena es "menor" que cadena2 y positivo si es "mayor").

Como se ve, en ningn momento estamos modificando el String de partida. Eso s, en muchos de los casos creamos un String modificado a partir del original. El mtodo "compareTo" se basa en el rden lexicogrfico: una cadena que empiece por "A" se considerar "menor" que otra que empiece por la letra "B"; si la primera letra es igual en ambas cadenas, se pasa a comparar la segunda, y as sucesivamente. Las maysculas y minsculas se consideran diferentes. Hay alguna otra posibilidad, de uso menos sencillo, que no veremos (al menos por ahora), como la de volcar parte del String en un array de chars o de bytes. Los mtodos de la clase StringBuffer son:

Mtodo length() setLength() charAt (int pos)

Cometido Devuelve la longitud (nmero de caracteres) de la cadena Modifica la longitud de la cadena (la trunca si hace falta) Devuelve el carcter que hay en una cierta posicin

setCharAt(int pos, Cambia el carcter que hay en una cierta char posicin letra) toString() reverse() append( objeto ) insert(int pos, objeto) Devuelve el StringBuffer convertido en String Cambia el orden de los caracteres que forman la cadena Aade otra cadena, un nmero, etc. al final de la cadena Aade otra cadena, un nmero, etc. en una cierta posicin

Al igual que ocurre con los strings, existe alguna otra posibilidad ms avanzada, que no he comentado, como la de volcar parte del String en un array de chars, o de comprobar la capacidad (tamao mximo) que tiene un StringBuffer o fijar dicha capacidad.

Un comentario extra sobre los Strings: Java convertir a String todo aquello que indiquemos entre comillas dobles. As, son vlidas expresiones como "Prueba".length() y tambin podemos concatenar varias expresiones dentro de una orden System.out.println:
System.out.println( "Texto: " + texto1 + 5 + 23.5 );

Vamos a ver un ejemplo que aplique la mayora de todo esto:


// Strings1.java // Aplicacin de ejemplo con Strings // Introduccin a Java, class Strings1 { public static void main( String args[] ) { String texto1 = "Hola"; String texto2 = new String("Prueba"); // Forma "sencilla" // Usando un constructor

System.out.println( "La primera cadena de texto es :" ); System.out.println( texto1 ); System.out.println( "Concatenamos las dos: " + texto1 + texto2 ); System.out.println( "Concatenamos varios: " + texto1 + 5 + " " + 23.5 ); System.out.println( "La longitud de la segunda es: " + texto2.length() ); System.out.println( "La segunda letra de texto2 es: " + texto2.charAt(1) ); System.out.println( "La cadena texto2 en maysculas: " + texto2.toUpperCase() ); System.out.println( "Tres letras desde la posicin 1: " + texto2.substring(1,3) ); System.out.println( "Comparamos texto1 y texto2: " + texto1.compareTo(texto2) ); if (texto1.compareTo(texto2) < 0) System.out.println( "Texto1 es menor que texto2" ); StringBuffer texto3 = new StringBuffer("Otra prueba"); texto3.append(" mas"); System.out.println( "Texto 3 ahora es: " + texto3 ); texto3.insert(2, "1"); System.out.println( "Y ahora es: " + texto3 ); texto3.reverse(); System.out.println( "Y ahora: " + texto3 );

El resultado de este programa sera el siguiente:

La primera cadena de texto es : Hola Concatenamos las dos: HolaPrueba Concatenamos varios: Hola5 23.5 La longitud de la segunda es: 6 La segunda letra de texto2 es: r La cadena texto2 en maysculas: PRUEBA Tres letras desde la posicin 1: ru Comparamos texto1 y texto2: -8 Texto1 es menor que texto2 Texto 3 ahora es: Otra prueba mas Y ahora es: Ot1ra prueba mas Y ahora: sam abeurp ar1tO