Versión 3.0

800x600 mínimo
En esta lección:

Cadena de caracteres
-----
arrays de tipo int
-----
arrays y funciones
-----
arrays múltiples
-----


Otras secciones:

Conceptos básicos
-----
Programando en C
-----
Programando en C++
-----
Programando Windows 9x.
-----
Teoría electrónica
-----
Circuitos electrónicos
-----
Actividades adicionales
-----
Hipervínculos
-----


Contácteme:

Dudas y comentarios
-----


Hola mundo

¿Qué es una cadena de caracteres?

En el caso específico de la palabra inglesa "array" concerniente a este curso de C, no haremos la traducción de la misma. En C, nos referimos a un array como un conjunto de datos todos del mismo tipo, siendo la cadena de caracteres un tipo especial de array 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 ASCII-Z" y será la que trataremos en primer lugar. Empezamos por definir un array de tipo char y especificamos el tamaño del mismo con un número, llamado subíndice, encerrado entre corchetes. Este número le indica al sistema la cantidad de espacios para caracteres que contendrá la cadena en cuestión. Los elementos de un array se almacenan en forma contigua en la memoria de la computadora y el subíndice del primer elemento siempre es cero. El nombre del array es una constante que representa la dirección del primer elemento del array. Veamos un código de ejemplo:


#include <stdio.h>

int 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]=0;  /* Caracter nulo, significa el fin del texto */

    printf("La cadena es %s\n", cadena);
    printf("La tercera letra de la cadena es: %c\n", cadena[2]);
    printf("Una parte de la cadena es : %s\n", &cadena[3]);

    return 0;
}

La variable cadena es por tanto 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. Compile y ejecute el código de ejemplo para mayor claridad en lo aquí expuesto. Modifiquemos nuestro código para estudiar algunas funciones nuevas:


#include <stdio.h>
#include <string.h>

int main()
{
    char cadena1[17], cadena2[13], titulo[26], prueba[29];

    strcpy(cadena1, "Pedro Picapiedra");
    strcpy(cadena2, "Pablo Marmol");
    strcpy(titulo, "- - -Los Picapiedra- - -");

    printf("%s\n\n\n", titulo);
    printf("Los personajes principales son: %s\n", cadena1);
    printf("y : %s\n\n", cadena2);

    if(strcmp(cadena1, cadena2) > 0)
    strcpy(prueba, cadena1);
    else
    strcpy(prueba, cadena2);
    printf("La cadena mas grande es: %s\n\n", prueba);

    strcpy(prueba, cadena1);
    strcat(prueba, " y ");
    strcat(prueba, cadena2);
    printf("%s son vecinos\n", prueba);

    return 0;
}

Como puede ver, en este programa se han definido cuatro arrays 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 array 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 array 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. Naturalmente existen mas funciones para el manejo de cadenas, todas ellas fáciles de implementar, lo mas recomendable en este caso es consultar la información de su compilador en particular.

Volver al principio

Hola mundo

arrays de tipo int

Veamos ahora como trabajar con un array de tipo int en el siguiente programa que calcula la tabla del 5:


#include <stdio.h>

int main()
{
    static char titulo[]="Esta es la tabla del 5:";
    int espacios[10];
    int indice;

    for(indice=0; indice < 10; indice++)
    espacios[indice] = 5*(indice+1);

    printf("%s\n\n", titulo);
    for(indice=0; indice < 10; indice++)
    printf("5 x %2d = %4d\n", (indice+1), espacios[indice]);

    return 0;
}

Las primeras novedades las encontramos en la línea 5 en donde podemos ver que hemos declarado un array de tipo char llamado titulo el cual no tiene especificado valor alguno dentro de los corchetes, esto se hace así para dejar que el sistema calcule el espacio necesario para la cadena especificada del lado derecho de la sentencia incluyendo el caracter nulo del final de la cadena, además se ha declarado como static para evitar que el sistema asigne a la variable del array titulo como automática y de esta manera se garantiza que la variable contenga la cadena especificada una vez que se ejecute el programa. En la siguiente línea se declara un nuevo array de tipo int, es decir, tenemos aquí diez variables de tipo int llamadas espacios[0], espacios[1], espacios[2], etc. además de una variable convencional de tipo int llamada indice.
En primer lugar asignamos valores a cada uno de los elementos del array utilizando para ello un bucle for, mas adelante utilizamos un segundo bucle para desplegar en orden cada uno de los valores almacenados en los elementos del array, el resultado de la ejecución de este programa es el siguiente:

Tabla del 5

Volver al principio

Hola mundo

arrays y funciones

En la lección Funciones mencionamos que había una forma de obtener datos de una función utilizando un array, esto lo podemos ver en el código siguiente en donde se ha definido un array de 15 variables llamado matriz, luego asignamos algunos datos a estas variables y desplegamos en pantalla las primeras cinco. En la línea 17 llamamos a la función denominada una_funcion tomando todo el array como parámetro poniendo el nombre del array en el paréntesis de la función.


#include <stdio.h>

void una_funcion(int nombre_interno[]);

int main()
{
    int indice;
    int matriz[15];

    for (indice = 0; indice < 15; indice++)
    matriz[indice] = indice + 1;

    for (indice = 0; indice < 5; indice++)
    printf("Valor inicial asignado a matriz[%d] = %d\n",
      indice, matriz[indice]);
    printf("\n");

    una_funcion(matriz);    /*Llama a la función denominada una_funcion*/

    for (indice = 0; indice < 5; indice++)
    printf("Nuevo valor asignado a matriz[%d] = %d\n",
      indice, matriz[indice]);

    return 0;
}

void una_funcion(int nombre_interno[])
{
    int i;

    for (i = 0 ; i < 5 ; i++)
    printf("Valor de matriz[%d] al iniciar la funcion= %d\n",
      i, nombre_interno[i]);
    printf("\n");

    for (i = 0 ; i < 15 ; i++)
    /*Se suma 10 al valor de la variable i de la matriz*/
    nombre_interno[i] += 25;

    for (i = 0; i < 5; i++)
    printf("Valor de matriz[%d] al salir de la funcion= %d\n",
      i, nombre_interno[i]);
    printf("\n");
}
Datos de un array modificado por una función

La función una_funcion empieza en la línea 25 y como se puede ver, prefiere llamar internamente a la matriz con el nombre de nombre_interno, es además necesario declarar el array como de tipo int y especificar que se trata de un array incluyendo los corchetes, en este caso dejamos que el sistema determine el tamaño del array al no especificar ningún valor entre los corchetes. Al regresar a la función principal main ( ) podemos comprobar lo que hemos dicho al desplegar los nuevos valores asignados a las variables del array denominado matriz. Otra forma de obtener datos de una función hacia el programa que la llama es utilizando un puntero, tema que estudiaremos en la siguiente lección, ahí veremos que el nombre de un array es en realidad un puntero hacia una lista de valores, pero antes de avanzar a la siguiente lección veamos la manera de trabajar con arrays múltiples.

Volver al principio

Hola mundo

arrays múltiples

Ya mencionamos que un array es un conjunto de datos almacenados en variables adyacentes en memoria, todos del mismo tipo. Siguiendo esta definición podemos imaginarnos a un array como un conjunto de cajas apiladas una encima de la otra, de la misma manera podemos juntar dos o más conjuntos de cajas apiladas unas encima de las otras en donde cada conjunto de cajas no es necesariamente del mismo número (tamaño), se puede decir pues, que un array múltiple no es otra cosa que un array de arrays. En el código de ejemplo generamos un array doblemente dimensionado. La variable multiplica es un array de 11 por 11 elementos, o sea un total de 121, el primer elemento es multiplica[0][0], y el último es multiplica[11][11].


#include <stdio.h>

int main()
{
    int i, j;
    int multiplica[11][11];

    for (i = 0 ; i < 11 ; i++)
    for (j = 0 ; j < 11 ; j++)
    multiplica[i][j] = i * j;

    for (i = 0 ; i < 11 ; i++)
    {
        for (j = 0 ; j < 11 ; j++)
        printf("%5d ", multiplica[i][j]);
        printf("\n");
    }
    return 0;
}
Array doblemente dimensionado

En este ejemplo se generan las diez tablas de multiplicar y se despliegan en pantalla en forma de matriz de 11 elementos para facilitar la comprensión del concepto. Por supuesto, es posible asignar valores a cada elemento del array en forma individual como queda demostrado en el código del ejemplo que he modificado para que Usted lo compile y vea los resultados a manera de ejercicio:


#include <stdio.h>

int main()
{
    int i, j, valor1=8, valor2=9;
    int multiplica[11][11];

    for (i = 0 ; i < 11 ; i++)
    for (j = 0 ; j < 11 ; j++)
    multiplica[i][j] = i * j;

    for (i = 0 ; i < 11 ; i++)
    {
        for (j = 0 ; j < 11 ; j++)
        printf("%5d ", multiplica[i][j]);
        printf("\n");
    }
    multiplica[valor1][valor2]=1254;
    printf("\n\nEs posible asignar valores a cualquier"
      "elemento de un array...\n\n");
    printf("Por ejemplo, el nuevo valor para multiplica[8][9] es: %d",
      multiplica[8][9]);
    return 0;
}

Volver al principio

Hola mundo

© 1998, 1999 Virgilio Gómez Negrete, Derechos Reservados