lunes, 30 de noviembre de 2015

MANEJO DE VECTORES Y MATRICES CON COBOL Y EJEMPLOS

 VECTORES

     Un vector es un array unidimensional, es decir, sólo utiliza un índice para referenciar a cada uno de los elementos. Su declaración será:


                tipo nombre [tamaño];


     El tipo puede ser cualquiera de los ya conocidos y el tamaño indica el número de elementos del vector ( se debe indicar entre corchetes [ ] ). En el ejemplo puedes observar que la variable i es utilizada como índice, el primer for sirve para rellenar el vector y el segundo para visualizarlo. Como ves, las posiciones van de 0 a 9 ( total 10 elementos ).

Ejem.

/* Declaración de un array. */
#include <stdio.h>
main() /* Rellenamos del 0 - 9 */
{             
int vector[10],i;
                for (i=0;i<10;i++) vector[i]=i;
                for (i=0;i<10;i++) printf(" %d",vector[i]);
}

Podemos inicializar (asignarle valores) un vector en el momento de declararlo. Si lo hacemos así no es necesario indicar el tamaño. Su sintaxis es:

                tipo nombre []={ valor 1, valor 2...}


     Ejemplos:

                int vector[]={1,2,3,4,5,6,7,8};
                char vector[]="programador";
                char vector[]={'p','r','o','g','r','a','m','a','d','o','r'};


     Una particularidad con los vectores de tipo char (cadena de caracteres), es que deberemos indicar en que elemento se encuentra el fin de la cadena mediante el caracter nulo (\0). Esto no lo controla el compilador, y tendremos que ser nosotros los que insertemos este caracter al final de la cadena.

     Por tanto, en un vector de 10 elementos de tipo char podremos rellenar un máximo de 9, es decir, hasta vector[8]. Si sólo rellenamos los 5 primeros, hasta vector[4], debemos asignar el caracter nulo a vector[5]. Es muy sencillo: vector[5]='\0'; .

     Ahora veremos un ejemplo de como se rellena un vector de tipo char.

Ejem.

/* Vector de tipo char. */

#include <stdio.h>

main() /* Rellenamos un vector char */
{
                char cadena[20];
                int i;
                for (i=0;i<19 && cadena[i-1]!=13;i++)
                               cadena[i]=getche( );
                if (i==19) cadena[i]='\0';
                else cadena[i-1]='\0';
                printf("\n%s",cadena);
}



     Podemos ver que en el for se encuentran dos condiciones:

          1.- Que no se hayan rellenado todos los elementos (i<19).

          2.- Que el usuario no haya pulsado la tecla ENTER, cuyo código ASCII es 13. (cadena[x-i]!=13).

     También podemos observar una nueva función llamada getche( ), que se encuentra en conio.h. Esta función permite la entrada de un caracter por teclado. Después se encuentra un if, que comprueba si se ha rellenado todo el vector. Si es cierto, coloca el caracter nulo en el elemento nº20 (cadena[19]). En caso contrario tenemos el else, que asigna el caracter nulo al elemento que almacenó el caracter ENTER.

     En resumen: al declarar una cadena deberemos reservar una posición más que la longitud que queremos que tenga dicha cadena.


     .- Llamadas a funciones con arrays

     Como ya se comentó en el tema anterior, los arrays únicamente pueden ser enviados a una función por referencia. Para ello deberemos enviar la dirección de memoria del primer elemento del array. Por tanto, el argumento de la función deberá ser un puntero.

Ejem.

/* Envío de un array a una función. */
#include <stdio.h>
void visualizar(int []); /* prototipo */
main() /* rellenamos y visualizamos */
{
                int array[25],i;      
for (i=0;i<25;i++)   {
                               printf("Elemento nº %d",i+1);
                               scanf("%d",&array[i]);       
}              visualizar(&array[0]);
}

void visualizar(int array[]) /* desarrollo */
{             
int i;
                for (i=0;i<25;i++) printf("%d",array[i]);
}

     En el ejemplo se puede apreciar la forma de enviar un array por referencia. La función se podía haber declarado de otra manera, aunque funciona exactamente igual:

                declaración o prototipo
                               void visualizar(int *);

                desarrollo de la función
                               void visualizar(int *array)


MATRICES


     Una matriz es un array multidimensional. Se definen igual que los vectores excepto que se requiere un índice por cada dimensión.

     Su sintaxis es la siguiente:

                tipo nombre [tamaño 1][tamaño 2]...;


     Una matriz bidimensional se podría representar gráficamente como una tabla con filas y columnas.

     La matriz tridimensional se utiliza, por ejemplo, para trabajos gráficos con objetos 3D.

     En el ejemplo puedes ver como se rellena y visualiza una matriz bidimensional. Se necesitan dos bucles para cada una de las operaciones. Un bucle controla las filas y otro las columnas.






Ejem.

/* Matriz bidimensional. */
#include <stdio.h>
main() /* Rellenamos una matriz */
{
int x,i,numeros[3][4];          /* rellenamos la matriz */    
for (x=0;x<3;x++)
                               for (i=0;i<4;i++)                    
                scanf("%d",&numeros[x][i]);           
                 /* visualizamos la matriz */

                for (x=0;x<3;x++)                 
  for (i=0;i<4;i++)                                 
printf("%d",numeros[x][i]);
}


     Si al declarar una matriz también queremos inicializarla, habrá que tener encuenta el orden en el que los valores son asignados a los elementos de la matriz. Veamos algunos ejemplos:

                int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};


     quedarían asignados de la siguiente manera:

                numeros[0][0]=1   numeros[0][1]=2     numeros[0][2]=3     numeros[0][3]=4
                numeros[1][0]=5   numeros[1][1]=6     numeros[1][2]=7     numeros[1][3]=8
                numeros[2][0]=9   numeros[2][1]=10   numeros[2][2]=11   numeros[2][3]=12


     También se pueden inicializar cadenas de texto:

                char dias[7][10]={"lunes","martes","miércoles","jueves","viernes","sábado","domingo"};


     Para referirnos a cada palabra bastaría con el primer índice:


                printf("%s",dias[i]);

No hay comentarios.:

Publicar un comentario