|
| Arreglos Y Cadenas Los arreglos permiten agrupar datos usando un mismo identificador. Todos los elementos de un arreglo son del mismo tipo, y para acceder a cada elemento se usan subíndices. En el siguiente capítulo se presentan los arreglos y las cadenas. Las cadenas se consideran como un arreglo de tipo char. Arreglos Unidimensionales Y Bidimensionales Los arreglos son una colección de variables del mismo tipo que se referencian utilizando un nombre común. Un arreglo consta de posiciones de memoria contigua. La dirección más baja corresponde al primer elemento y la más alta al último. Un arreglo puede tener una o varias dimensiones a los arreglos unidimensionales se les conocen como vectores y a los bidimensionales como matrices. Para acceder a un elemento en particular de un arreglo se usa un índice. El formato para declarar un arreglo unidimensional es: tipo nombre_arr [ tamaño ] Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez elementos se hace de la siguiente forma: int listanum[10]; En C, todos los arreglos usan cero como índice para el primer elemento. Por tanto, el ejemplo anterior declara un arreglo de enteros con diez elementos desde listanum[0] hasta listanum[9]. La forma como pueden ser accesados los elementos de un arreglo, es de la siguiente forma: listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/ num = listanum[2]; /* Asigna el contenido del 3er elemento a la variable num */ El lenguaje C no realiza comprobación de contornos en los arreglos. En el caso de que sobrepase el final durante una operación de asignación, entonces se asignarán valores a otra variable o a un trozo del código el cual es una condicion no deseada. Como programador se es responsable de asegurar que todos los arreglos sean lo suficientemente grandes para guardar lo que pondrá en ellos el programa. Para declarar arreglos con más de una dimensión , el formato general es: tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN]; Por ejemplo un arreglo de enteros bidimensionales se escribirá como: int tabladenums[50][50]; Observar que para declarar cada dimensión lleva sus propios paréntesis cuadrados. Para acceder los elementos se procede de forma similar al ejemplo del arreglo unidimensional. tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3ª fila y la 4ª columna*/ num = tabladenums[25][16]; Si se desea la inicializar arreglos, es decir asignar valores al arreglo en el momento de ser declarados debe hacerse con el siguiente formato: tipo nombre_arr[ tam1 ][ tam2 ] ... [ tamN] = {lista-valores}; Ejemplo: int i[10] = {1,2,3,4,5,6,7,8,9,10}; int num[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; Los valores para el número de elementos deben ser constantes, y se pueden usar tantas dimensiones como queramos, limitado sólo por la memoria disponible. Cadenas Las cadenas de caracteres son un tipo especial de arreglo pues se trata de un conjunto de datos de tipo char que termina con un caracter nulo, a este tipo de cadenas también se les conoce como "cadenas". Básicamente el manejo de cadenas es muy similar al de los arreglos. Ejemplo: #include void main() { char cadena[6]; /* Define una cadena de caracteres */ cadena[0]='L'; cadena[1]='e'; cadena[2]='t'; cadena[3]='r'; cadena[4]='a'; cadena[5]='s'; cadena[6]=; /* Caracter nulo, significa el fin del texto */ printf("La cadena es %sn", cadena); printf("La tercera letra de la cadena es: %cn", cadena[2]); printf("Una parte de la cadena es : %sn", &cadena[3]); getch(); } La variable cadena es una cadena que puede almacenar hasta seis caracteres, tomando en cuenta que se requiere un espacio para almacenar el caracter nulo al final de la cadena. El símbolo %s mostrado en los enunciados printf( ) le indica al sistema que despliegue una cadena de caracteres empezando con el elemento subíndice cero, que en el código de ejemplo es la letra L, y continuando hasta encontrar el caracter nulo. Observe que en los enunciados printf( ) cuando se indica la variable cadena sin corchetes indica que se despliegue la totalidad de la cadena, en tanto que al indicar la variable cadena con algún valor entre corchetes se refiere a un solo elemento de la cadena, en este caso debemos utilizar en el enunciado printf( ) el símbolo %c que le indica al sistema que despliegue un solo caracter. El símbolo & especifica la dirección en memoria de cadena[3], este símbolo lo estudiaremos mas adelante. A continuación se muestra un ejemplo del manejo de cadenas. Ejemplo: #include #include void main() { char cadena1[17], cadena2[13], titulo[26], prueba[29]; strcpy(cadena1, "Pedro Picapiedra"); strcpy(cadena2, "Pablo Marmol"); strcpy(titulo, "- - -Los Picapiedra- - -"); printf("%snnn", titulo); printf("Los personajes principales son: %sn", cadena1); printf("y : %snn", cadena2); if(strcmp(cadena1, cadena2) > 0) strcpy(prueba, cadena1); else strcpy(prueba, cadena2); printf("La cadena mas grande es: %snn", prueba); strcpy(prueba, cadena1); strcat(prueba, " y "); strcat(prueba, cadena2); printf("%s son vecinosn", prueba); getch(); } Como puede ver, en este programa se han definido cuatro arreglos de tipo char de diferente longitud, enseguida nos encontramos con la función strcpy( ) que sirve para copiar la cadena especificada en la segunda entidad dentro del paréntesis de la función en un arreglo de tipo char especificado por la primera entidad dentro del paréntesis de la función strcpy, de esta forma, por ejemplo, la cadena "Pedro Picapiedra" se copia en el arreglo de tipo char llamado cadena1. Mas adelante en el código nos encontramos con la función strcmp( ) que como es fácil adivinar, sirve para comparar, letra por letra, dos cadenas especificadas dentro del paréntesis. Esta función devuelve 1 si la primera cadena es mayor que la segunda, es decir, si tiene mayor cantidad de letras. Si ambas cadenas son iguales la función devuelve 0, en tanto que si la primera cadena es menor que la segunda entonces el valor devuelto es -1. Por último tenemos la función strcat( ) que ejecuta una concatenación de cadenas, es decir, copia la segunda cadena especificada dentro del paréntesis de la función enseguida de la primera cadena especificada, agregando un caracter nulo al final de la cadena resultante. Como ya se menciono se debe especificar la terminacion de la cadena con el carácter nulo ''. Por lo anterior, cuando se declare un arreglo de caracteres se debe considerar un carácter adicional a la cadena más larga que se vaya a guardar. Por ejemplo, si se quiere declarar un arreglo cadena que guarde una cadena de diez caracteres, se hará como: char cadena[11]; Se pueden hacer también inicializaciones de arreglos de caracteres en donde automáticamente C asigna el caracter nulo al final de la cadena, de la siguiente forma: char nombre_arr[ tam ]="cadena"; Por ejemplo, el siguiente fragmento inicializa cadena con ``hola'': char cadena[5]="hola"; El código anterior es equivalente a: char cadena[5]={'h','o','l','a',''}; Para asignar la entrada estándar a una cadena se puede usar la función scanf con la opción %s (observar que no se requiere usar el operador &), de igual forma para mostrarlo en la salida estándar. Por ejemplo: void main() { char nombre[15], apellidos[30]; printf("Introduce tu nombre: "); scanf("%s",nombre); printf("Introduce tus apellidos: "); scanf("%s",apellidos); printf("Usted es %s %sn",nombre,apellidos); getch(); } Ahora podemos ver que las cadenas de caracteres son un tipo especial de arreglos. Se trata en realidad de arreglos de una dimensión de tipo char. Algoritmos De Ordenación, Método De La Burbuja Una operación que se hace muy a menudo con los arreglos, sobre todo con los de una dimensión, es ordenar sus elementos. Existen muchos algoritmos de ordenación, pero ahora veremos uno de los más usados, aunque no de los más eficaces, se trata del método de la burbuja. Consiste en recorrer la lista de valores a ordenar y compararlos dos a dos. Si los elementos están bien ordenados, pasamos al siguiente par, si no lo están los intercambiamos, y pasamos al siguiente, hasta llegar al final de la lista. El proceso completo se repite hasta que la lista está ordenada. Lo veremos mejor con un ejemplo: Ordenar la siguiente lista de menor a mayor: 15, 3, 8, 6, 18, 1. Empezamos comparando 15 y 3. Como están mal ordenados los intercambiamos, la lista quedará: 3, 15, 8, 6, 18, 1 Tomamos el siguiente par de valores: 15 y 8, y volvemos a intercambiarlos, y segimos el proceso... Cuando lleguemos al final la lista estará así: 3, 6, 8, 15, 1, 18 Empezamos la segunda pasada, pero ahora no es necesario recorrer toda la lista. Si observas verás que el último elemento está bien ordenado, siempre será el mayor, por lo tanto no será necesario incluirlo en la segunda pasada. Después de la segunda pasada la lista quedará: 3, 6, 8, 1, 15, 18 Ahora es el 15 el que ocupa su posición final, la penúltima, por lo tanto no será necesario que entre en las comparaciones para la siguiente pasada. Las sucesivas pasadas dejarán la lista así: 3ª 3, 6, 1, 8, 15, 18 4ª 3, 1, 6, 8, 15, 18 5ª 1, 3, 6, 8, 15, 18 Precauciones Con Los Vectores
Ejercicios: 1. Hacer un programa que lea diez valores enteros en un arreglo desde el teclado y calcule y muestre: la suma, el valor medio, el mayor y el menor. 2. Hacer un programa que lea diez valores enteros en un arreglo y los muestre en pantalla. Después que los ordene de menor a mayor y los vuelva a mostrar. Y finalmente que los ordene de mayor a menor y los muestre por tercera vez. Para ordenar la lista usar el método de la burbuja. 3. Hacer un programa que lea 25 valores enteros en una tabla de 5 por 5, y que después muestre la tabla y las sumas de cada fila y de cada columna. Procura que la salida sea clara. 4. Escribir un programa que lea un arreglo de cualquier tipo (entero, flotante, char), y revise el arreglo para encontrar un valor en particular digitado por el usuario, la salida es la posición del arreglo en que se encuentra. 5. Leer un texto, un caracter a la vez desde la entrada estándar (que es el teclado), e imprimirlo en forma invertida. Leer hasta que se encuentre un final-de-datos (teclar CONTROL-Z para generarlo). 6. Escribir un programa para leer un texto hasta el fin-de-datos, y mostrar información del texto , es decir numero de palabras, longitud de las palabras, etc. |
4.- carlos
3.- JESSE
2.- jorge andres
1.- eusebio