You are on page 1of 23

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos

Fuentes: Segovia, Juan. Introduccin al lenguaje SL / Juan Segovia Joyanes Luis, Fundamentos de Programacin/Luis Joyanes Aguilar

Arreglos Un arreglo o array es un conjunto finito y ordenado de elementos homogneos. La propiedad ordenado significa que el elemento primero, segundo,tercero...n-simo de un arreglo puede ser identificado. Los elementos de un array son homogneos, es decir, del mismo tipo de datos. Un arreglo puede estar compuesto de todos sus elementos tipo cadena, lgico o numrico. Los arreglos son genricamente conocidos como matrices, que cuando tienen una sola dimensin son conocidos como matriz unidemensional o vector . Tamben existen los arreglos de ms de una dimensin en cuyo se los denomina como matriz multidimensional o simplemente matriz . La ms usada es la matriz bidimensional o de dos dimensiones . En este curso tomaremos las siguientes convenciones: Usaremos matrices de hasta dos dimensiones. Denominaremos vector a la matriz unidemensional. Distinguiremos como matriz al arreglo bidimensional. Vectores Un ejemplo de vector: notas[1] 100 notas[2] 90 notas[.....] .. notas[i] 50 notas[n] 70

..

En el ejemplo, notas es el nombre del vector y cada elemento est identificado por el nombre del vector y un nmero entero entre corchetes indicando el subndice, ndice o posicin de cada elemento. Un vector representa a un conjunto de variables simples, que ocupan espacios contiguos de memoria, denominadas con el mismo nombre y diferenciadas por el subndice. Como debe ser homogneo debe guardar datos del mismo tipo para cada elemento. En este caso cada elemento debe ser numrico, pues guarda notas que son datos numricos. Se dice, entonces, que el vector notas es numrico. Asi notas[1]=100 implica que el valor 100 est guardado en la posicin 1 del vector notas o dicho de otra forma la variable simple notas[1] contiene el valor 100. Un vector tiene una dimensin que puede ser fija o variable. En nuestro ejemplo el vector tiene dimensin n o sea variable. La dimensin fija se da cuando, por ejemplo, se necesita almacenar los nombres de meses en como un vector con valores constantes en el programa: mes[1] mes[2] mes[3] mes[4] mes[5] mes[6] mes[7] mes[8] mes[9] mes[10] mes[11] mes[12]
enero febrero marzo abril mayo junio julio agosto setiembre octubre noviembre diciembre

1/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos

En este ejemplo el vector se llama mes, tiene dimensin fija 12 y es de tipo cadena. El hecho de un vector sea de dimensin fija o variable da lugar a dos tipos: los estticos con dimensin fija y los dinmicos con dimensin variable tambin conocidos como vectores abiertos. Declaracin de vectores en SL La declaracin de vectores en SL es muy sencilla: se declara como una variables ms, indicando al compilador los datos adicionales que necesita: La cantidad de elementos que tendr, y De qu tipo sern los elementos, es decir, si sern numricos, de cadena o lgicos. Dimensin de un vector Esttico de o dimensin fija Por ejemplo, para declarar un vector numrico de 5 elementos escribiremos:
var a:vector[5] numerico // Definicin del vector esttico o de dimensin fija

Dinmico de o dimensin variable Se realiza en dos etapas. La primera donde se declara el vector sin saber el tamao real a ser usado:
var a:vector[*] numerico // Definicin del vector dinmico o de dimensin variable

Tambin debe ser definida una variable que contendr el tamao real del vector:
var d:numerico // Dimensin del vector

Una vez listas esas definiciones que se realizan en el area declarativa del programa se procede a definir el tamao real a ser usado, ya en la parte de procedimientos del programa, mediante las siguientes lineas:
imprimir("Ingrese la dimensin del vector:") leer(d) // Lee la dimensin exacta del vector dim(a,d) // Dimensiona el vector con el tamao necesario

Lectura de un vector Lectura de un vector esttico o de dimensin fija Se puede hacer de dos formas. Sin usar ciclos y usando la propiedad la funcin leer() de cargar desde teclado un vector con una sola sentencia:
imprimir("Ingrese los 5 valores para el vector, separados con coma:\n") leer(a) // Lee los valores para el vector

2/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos Esto se ejecutara segn se muestra ms abajo:
Ingrese los 5 valores para el vector, separados con coma: 3,2,4,7,1

La ventaja de esta forma es para el programador, quin escribe menos lneas de cdigo.La desventaja es para el usuario final quien tiene menos claro como ingresar los datos. Pero siempre existe una solucin que este caso es ingresar el valor para cada elemento del vector por medio de un ciclo y con un mensaje ms amigable para el usuario final:
desde i=1 hasta 5 // Ciclo para variar el valor del subndice en la lectura de cada elemento { imprimir("Ingrese a[",i,"]:") leer(a[i]) // Lee valor para cada elemento del vector }

Una instntanea de la ejecucin sera:


Ingrese a[1]:5 Ingrese a[2]:8 Ingrese a[3]:7 Ingrese a[4]:2 Ingrese a[5]:0

La ventaja en este caso es decididamente para el usuario final, que tiene mensajes mas claros y concretos y mayor facilidad de ingreso de datos. El programador debe escribir ms lneas de cdigo pero tambin tiene la ventaja de un cdigo mas legible que le sirve para l mismo y para otros programadores cuando se tenga que revisar el programa para algn mantenimiento. Lectura de un vector dinmico o de dimensin variable El proceso es casi idntico a la lectura de vectores estticos. La diferencia rdica a que se debe ingresar la dimensin del vector qu indica cuantos elementos se debe leer. De nuevo tenemos la lectura sin usar ciclos:
imprimir("Ingrese la dimensin del vector:") leer(d) // Lee la dimensin exacta del vector dim(a,d) // Dimensiona el vector con el tamao necesario imprimir("Ingrese los ",d," valores para el vector, separados con coma:\n") leer(a) // Lee los valores para el vector

Un ejemplo de ejecucin:
Ingrese la dimensin del vector:3 Ingrese los 3 valores para el vector, separados con coma: 4,88,12

Por supuesto tambin se puede usar ciclos para leer los elementos de un vector, como se ve en la siguiente porcin de cdigo:

3/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
desde i=1 hasta d // Ciclo para variar el valor del subndice en la lectura de cada elemento { imprimir("Ingrese a[",i,"]:") leer(a[i]) // Lee valor para cada elemento del vector }

Pero, para funcionar necesita de las siguientes definiciones:


var a:vector[*] numerico // Definicin del vector dinmico o de dimensin variable i:numerico // ndice, subndice o posicin de cada elemento del vector d:numerico // Dimensin del vector

Y que se ejecute previamente lo siguiente:


imprimir("Ingrese la dimensin del vector:") leer(d) // Lee la dimensin exacta del vector dim(a,d) // Dimensiona el vector con el tamao necesario

Una muestra del funcionamiento sera:


Ingrese la dimensin del vector:3 Ingrese a[1]:5 Ingrese a[2]:8 Ingrese a[3]:7

Inicializacin de un vector Los elementos de un vector pueden ser inicializados completamente con una sola sentencia. Dependiendo de que el vector sea esttico o dinmico las opciones varan ligeramente. A continuacin unos ejemplos: Inicializacin de un vector esttico con valores constantes cargados en el programa En este ejemplo se inicializa un vector con los nombres de los meses del ao. Primero, en la parte declarativa se dimensiona con un valor fijo, en este caso 12:
var nombre_mes:vector[12] cadena // Contendr nombres de meses

Luego ya en la parte de procedimientos se asignan los valores:


nombre_mes={"Enero","Febrero","Marzo","Abril","Mayo","Junio", // Carga "Julio","Agosto","Setiembre","Octubre","Noviembre","Diciembre"} // vector de nombres de meses

La versin completa del programa ejemplo es:


programa c03_07s /* Objetivo :Carga vector constante con nombres de meses. Muestra el nombre de mes de un numro ledo Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var nombre_mes:vector[12] cadena // Contendr nombres de meses mes:numerico // Area de programa principal inicio nombre_mes={"Enero","Febrero","Marzo","Abril","Mayo","Junio", // Carga Julio","Agosto","Setiembre","Octubre","Noviembre","Diciembre"} // vector de nombres de meses cls()

4/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
leer_nro_mes() // Lee el primer nmero de mes mientras (nro_mes_ok(mes)) // Mientras es vlido lo ingresado { imprimir("El nmero ",mes," corresponde a ",nombre_mes[mes],"\n") // Muestra el nombre de mes leer_nro_mes() // Lee los siguientes nmeros de meses } fin // Area de subrutina subrutina leer_nro_mes() // Procedimiento de lectura de nmero de mes inicio imprimir("Ingrese nmero de mes (Entre 1 y 12). No vlido para fin:") leer(mes) fin subrutina nro_mes_ok(m:numerico) retorna logico // Funcin de validacin de nmero de mes inicio retorna(m>=1 and m<=12) // Valida y retorna SI o NO fin

Inicializacin parcial de un vector esttico para ciertos elementos y con autocompletado para los dems En el ejemplo se inicializa un vector cadena de tamao 5 con z en el primer elemento y se autocompleta con asteriscos en los dems. En la parte declarativa se define el vector:
var a:vector[5] cadena // Vector a ser inicializado

En la parte procedimental se inicializa:


a={"z","*",...} // Inicializa el vector

La ejecucin muestra este resultado:


Valores cargados en el vector antes de su inicializacin: ,,,, El vector: z,*,*,*,* Tiene dimensin 5

Notese que tambin se imprime el tamao del vector mediante la funcin alen().El programa completo se ve as:
programa c03_08s /* Objetivo Fecha Autor */ var a:vector[5] cadena // Vector a ser inicializado inicio cls() imprimir("Valores cargados en el vector antes de su inicializacin:\n") imprimir(a,"\n") // Imprime el vector antes de ser cargado a={"z","*",...} // Inicializa el vector imprimir("El vector:\n",a,"\n","Tiene dimensin ",alen(a),"\n") // Imprime el vector y su tamao fin :Inicializar vector de tamao 5 con "z" en primer elemento y astericos en los dems Mostrar tamao del vector :02/05/2012 :Jos Rojas Dvalos

Inicializacin de un vector dinmico con valores constantes y uso implicito de dim() En la parte declarativa se define un vector dinmico o abierto, sin conocer an el tamao real:
var a:vector[*] numerico // Vector dinmico a ser cargado

La inicializacin en la parte procedimental a la vez de cargar los valores realiza un dim() implicito:
5/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
a={2,4,6,8,10} // Al mismo tiempo que inicializa hace el papel dim()

El resultado de la ejecucin es:


Valores cargados en el vector antes de su inicializacin: <nodim> El vector: 2,4,6,8,10 Tiene dimensin 5

A continuacin la versin completa del programa:


programa c03_09s /* Objetivo :Inicializar vector de tamao d con el valor de los 5 primeros enteros pares Mostrar tamao del vector Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var a:vector[*] numerico // Vector dinmico a ser cargado inicio cls() imprimir("Valores cargados en el vector antes de su inicializacin:\n") imprimir(a,"\n") // Imprime el vector cuyo proceso de dimensionamiento no se complet a={2,4,6,8,10} // Al mismo tiempo que inicializa hace el papel dim() imprimir("El vector:\n",a,"\n","Tiene dimensin ",alen(a),"\n") // Imprime el vector y su tamao fin

Asignacin entre vectores Un vector puede ser asignado a otro con una sola sentencia de asignacin, es decir, no se requiere asignar elemento a elemento. Nuestro ejemplo, en la parte declarativa, dimensiona dos vectores dinmicos o abiertos y define la variable que va a contener la dimensin de ambos:
var a:vector[*] numerico // Vector dinmico a ser cargado por teclado b:vector[*] numerico // Vector dinmico al que se le asignara los valores de a[] d:numerico // Dimensin de ambos vectores

Posteriormente dimensiona ambos vectores y lee los valores para el vector origen:
imprimir("Dimensin de a[]:") leer(d) // Lee dimensin de a[] y b[] dim(a,d) // Dimensiona a[] dim(b,d) // Dimensiona b[] imprimir("Ingrese los valores para a[] separados por coma:\n") leer(a) // Lee valores para a[]

Para finalmente asignar el vector origen al destino y mostrar los valores de ambos vectores:
b=a // Asigna los valores de a[] a b[] imprimir("El vector a[]:\n",a,"\n","Tiene dimensin ",alen(a),"\n") // Imprime a[] y su tamao imprimir("El vector b[]:\n",b,"\n","Tiene dimensin ",alen(b),"\n") // Imprime b[] y su tamao

A continuacin se muestra una instntanea de la ejecucin del programa:

6/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
Dimensin de a[]:3 Ingrese los valores para a[] separados por coma: 3,4,5 El vector a[]: 3,4,5 Tiene dimensin 3 El vector b[]: 3,4,5 Tiene dimensin 3

La lista completa del codigo fuente es:


programa c03_10s /* Objetivo Fecha Autor */ var a:vector[*] numerico // Vector dinmico a ser cargado por teclado b:vector[*] numerico // Vector dinmico al que se le asignara los valores de a[] d:numerico // Dimensin de ambos vectores inicio cls() imprimir("Dimensin de a[]:") leer(d) // Lee dimensin de a[] y b[] dim(a,d) // Dimensiona a[] dim(b,d) // Dimensiona b[] imprimir("Ingrese los valores para a[] separados por coma:\n") leer(a) // Lee valores para a[] b=a // Asigna los valores de a[] a b[] imprimir("El vector a[]:\n",a,"\n","Tiene dimensin ",alen(a),"\n") // Imprime a[] y su tamao imprimir("El vector b[]:\n",b,"\n","Tiene dimensin ",alen(b),"\n") // Imprime b[] y su tamao fin : Leer un vector numrico de tamao d y asignar sus valores a otro vector Mostrar tamao de ambos vectores :02/05/2012 :Jos Rojas Dvalos

Proceso de un vector Normalmente para procesar un vector hay que recorrerlo elemento a elemento como en el siguiente ejemplo con un vector esttico o de dimensin fija:
// Proceso del vector desde i=1 hasta 5 // Ciclo para variar el valor del subndice en el acceso a cada elemento { si (i % 2 == 0) // Si la posicin es par { a[i]="*" // Se asigna asterisco al elemento sino // en caso contrario, si la posicin es impar a[i]="%" // Se asigna simbolo de porcentaje al elemento } }

El listado del programa fuente:


programa c03_03s /* Objetivo :Procesa un vector cadena ledo poniendo * en en cada elemento en posicin par y % en cada elemento en posicin impar Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var a:vector[5] cadena // Definicin del vector esttico o de dimensin fija i:numerico // ndice, subndice o posicin de cada elemento del vector inicio cls() 7/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
// Lectura desde i=1 hasta 5 // Ciclo para variar el valor del subndice en la lectura de cada elemento { imprimir("Ingrese a[",i,"]:") leer(a[i]) // Lee valor para cada elemento del vector } // Impresin antes del cambio imprimir("Los valores cargados en el vector original son:\n") imprimir(a,"\n") // Proceso del vector desde i=1 hasta 5 // Ciclo para variar el valor del subndice en el acceso a cada elemento { si (i % 2 == 0) // Si la posicin es par { a[i]="*" // Se asigna asterisco al elemento sino // en caso contrario, si la posicin es impar a[i]="%" // Se asigna simbolo de porcentaje al elemento } } // Impresin despus del cambio imprimir("Los valores cargados en el vector modificado son:\n") imprimir(a,"\n") fin

Otro ejemplo con un vector dinmico, de dimensin variable o abierto es:


// Proceso del vector desde i=1 hasta d // Ciclo para variar el valor del subndice en el acceso a cada elemento { si (a[i] % 2 == 0) // Si el elemento tiene valor par { a[i]=a[i]+2 // Se suma 2 al valor del elemento sino // en caso contrario, si el elemento tiene valor impar a[i]=a[i]+1 // Se suma 1 al valor del elemento } }

El programa fuente completo se deja ver as:


programa c03_06s /* Objetivo :Procesa un vector numerico ledo poniendo sumando 2 a cada elemento con valor par y 1 a cada elemento con valor impar Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var a:vector[*] numerico // Definicin del vector dinmico o de dimensin variable i:numerico // ndice, subndice o posicin de cada elemento del vector d:numerico // Dimensin del vector inicio cls() imprimir("Ingrese la dimensin del vector:") leer(d) // Lee la dimensin exacta del vector dim(a,d) // Dimensiona el vector con el tamao necesario desde i=1 hasta d // Ciclo para variar el valor del subndice en la lectura de cada elemento { imprimir("Ingrese a[",i,"]:") leer(a[i]) // Lee valor para cada elemento del vector } // Impresin antes del cambio imprimir("Los valores cargados en el vector original son:\n") imprimir(a,"\n") // Proceso del vector desde i=1 hasta d // Ciclo para variar el valor del subndice en el acceso a cada elemento { si (a[i] % 2 == 0) // Si el elemento tiene valor par { a[i]=a[i]+2 // Se suma 2 al valor del elemento

8/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
sino // en caso contrario, si el elemento tiene valor impar a[i]=a[i]+1 // Se suma 1 al valor del elemento } } // Impresin despus del cambio imprimir("Los valores cargados en el vector modificado son:\n") imprimir(a,"\n") fin

Impresin de un vector Existen tres casos posibles, de los cules se dan ejemplos: Impresin sin ciclo para vector
imprimir("Los valores cargados en el vector original son:\n") imprimir(a,"\n")

Impresin con ciclo para vector esttico


imprimir("Los valores cargados en el vector son:\n") desde i=1 hasta 5 // Ciclo para variar el valor del subndice en la impresin de cada elemento { imprimir(a[i]," ") // Imprime valor de cada elemento del vector en la misma lnea separados por espacio } imprimir("\n") // Salto de lnea

Impresin con ciclo para vector dinmico o abierto


imprimir("Los valores cargados en el vector son:\n") desde i=1 hasta d // Ciclo para variar el valor del subndice en la impresin de cada elemento { imprimir(a[i]," ") // Imprime valor de cada elemento del vector en la misma lnea separados por espacio } imprimir("\n") // Salto de lnea

Matrices Un ejemplo de matriz, es la que contiene las notas de dos parciales de cada alumno identificado por su n de cdula, en diferentes materias identificadas por su cdigo. La matriz que identificaremos con amn, y donde no se considera la primera fila(horizontal) ni la primera columna(vertical), que se insertan solo a modo de ilustracin, se muestra a continuacin con datos de ejemplo: amn[] Columnas -> 1 Filas nrocedula 1 2 3 4 5 654438 709446 202283 4655429 4655430 2 codmateria 1 1 1 1 1 3 parcial1 100 80 90 70 80 4 parcial2 50 90 30 80 95

En el ejemplo, amn es el nombre de la matriz y cada elemento est identificado por el nombre de la
9/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos matriz y dos nmeros enteros entre corchetes separados por coma indicando los subndices, ndices o la posicin de cada elemento en forma de coordenada. Es decir un elemento de una matriz est identificado por una posicin fila y otra posicin columna, en ese orden . A los efectos de una mejor comprensin separemos de la matriz mostrada anteriormente como ejemplo la parte que realmente contiene datos, que es la resaltada: amn[] 654438 1 709446 1 202283 1 4655429 1 4655430 1

100 80 90 70 80

50 90 30 80 95 Filas(1 al 5)

Columnas(1 al 4) A partir de ahora podemos decir que cada una de las cinco filas contienen los datos de un alumno y sus notas parciales en una materia. Cada una de las cuatro columnas corresponden a un dato: la 1 al n de cdula la 2 al cdigo de materia la 3 a la nota del parcial 1 la 4 a la nota del parcial 2. Esto implica que el alumno con n de cdula 654438 tiene tiene almacenado el dato mencionado en amn[1,1] que se lee en la matriz amn en la fila 1 columna 1 . O en amn[4,3] est almacenada la nota del primer parcial en la materia con codigo 1 del alumno con cedula n 4655429. Para una mejor comprensin mostramos la matriz con sus posiciones posibles: amn[] [1,1] [1,2] [1,3] [1,4] [2,1] [2,2] [2,3] [2,4] [3,1] [3,2] [3,3] [3,4] [4,1] [4,2] [4,3] [4,4] [5,1] [5,2] [5,3] [5,4] Resumiendo: Una matriz es un arreglo bidimensional que guarda datos en c/u de sus elementos Una matriz es una disposicin tabular en filas y columnas Los elementos se identifican por con el nombre de la matriz, entre corchetes la posicin fila y la posicin columna como en amn[3,4] La matriz del ejemplo tiene 5 filas y 4 columnas

10/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos Se puede decir que la matriz es de dimensin o de orden 5x4. Un matriz representa a un conjunto de variables simples, que ocupan espacios contiguos de memoria, denominadas con el mismo nombre y diferenciadas por los subndices. Como debe ser homogneo debe guardar datos del mismo tipo para cada elemento. En este caso cada elemento debe ser numrico, pues guarda n de cdula, cdigo de materia, nota parcial 1 y nota parcial 2 que son datos numricos. Se dice, entonces, que la matriz amn es numrica. As amn[1,1]=654438 implica que el valor 654438 est guardado en la fila 1 columna 1 de la matriiz amn o dicho de otra forma la variable simple amn[1,1] contiene el valor 654438. Un matriz tiene doss dimensines que puede ser fijas o variables. En nuestro ejemplo la matriz tiene dimensin 5x4 o sea fija. Las dimensiones variables se dan cuando, por ejemplo, se necesita almacenar cantidades de datos desconocidas, como en el caso de las localidades y sus barrios. Una fila estara dedicada a una localidad y en la primera columna ira el nombre de la localidad y en las siguientes el nombre de cada uno de sus barrios. Una posible matriz con datos se muestra a continuacin: Asuncin Villarrica .. .. Santo Domingo Ybaroty .. .. Vista Alegre Costa-i Santa Luca .. .. .. .. .. .. .. .. .. .. ..

Coronel Martnez Arroyito

Como la cantidad de localidades y barrios recien se conocern a la hora de cargar los datos, en este caso hay que prever que las dimensiones esten dadas por dos variables enteras a ser ingresadas por teclado. Supongamos que la dimensin fila estar dada por la variable filas y la dimensin columna sera guardada en la variable columnas. En este ejemplo la matriz se llama lb, tiene dimensin variable filasxcolumnas y es de tipo cadena. El hecho de una matriz sea de dimensin fija o variable da lugar a dos tipos: las estticas con dimensiones fijas y las dinmicas con dimensin variable tambin conocidos como matrices abiertas. Declaracin de matrices en SL La declaracin de matrices en SL es muy sencilla: se declara como una variables ms, indicando al compilador los datos adicionales que necesita: La cantidad de filas y columnas que tendr De qu tipo sern los elementos, es decir, si sern numricos, de cadena o lgicos.

11/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos Dimensin de una matriz Esttica de o dimensin fija Por ejemplo, para declarar una matriz numrica de 5 filas y 4 columnas escribiremos:
var amn:matriz[5,4] numerico // Dimensin de matriz esttica

Dinmica de o dimensin variable Se realiza en dos etapas. La primera donde se dimensiona la matriz sin saber las dimensiones reales a ser usadas:
var lb:matriz[*,*] cadena // Dimensin de matriz dinmica

Tambin debe ser definidas dos variables que contendrn las dimensiones reales de la matriz:
var filas:numerico // Cantidad mxima de filas de la matriz columnas:numerico // Cantidad mxima de columnas de la matriz

Una vez listas esas definiciones que se realiza en el area declarativa del programa se procede a definir las dimesiones reales a ser usadas, ya en la parte de procedimientos del programa, mediante las siguientes lineas:
imprimir("Ingrese valor de la dimensin fila:") leer(filas) // Lee cantidad de filas imprimir("Ingrese valor de la dimensin columna:") leer(columnas) // Lee cantidad de columnas dim(lb,filas,columnas) // Dimensiona matriz con tamaos ingresados

Lectura de una matriz Lectura de una matriz esttica de o dimensin fija Se puede hacer de dos formas. Sin usar ciclos y usando la propiedad la funcin leer() de cargar desde teclado una matriz con una sola sentencia:
imprimir("Ingrese los 20 valores para la matriz separados por coma:\n") leer(amn)

Esto se ejecutara segn se muestra ms abajo:


Ingrese los 20 valores para la matriz, separados con coma: 654438,1,80,80,202283,1,70,60,709446,1,67,88,1268567,1,65,35,87653,1,87,34

Las forma mas amigable sera ingresando datos para la matriz por medio de ciclos:

desde f=1 hasta 5 // Para recorrer filas

12/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
{ desde c=1 hasta 4 // Para recorrer columnas { imprimir("ngrese valor para amn[",f,",",c,"]:") leer(amn[f,c]) // Leer valor para cada elemento } }

Parte de la ejecucin se vera as:


Ingrese valor para amn[1,1]:654438 Ingrese valor para amn[1,2]:1 Ingrese valor para amn[1,3]:80 Ingrese valor para amn[1,4]:80

Lectura de una matriz dinmica o de dimensin variable El proceso es casi idntico a la lectura de matrices estticas. La diferencia rdica a que se debe ingresar las dimensines de la matriz qu me indica cuantos elementos debo leer. De nuevo tenemos la lectura sin usar ciclos:
imprimir("Ingrese valor de la dimensin fila:") leer(filas) // Lee cantidad de filas imprimir("Ingrese valor de la dimensin columna:") leer(columnas) // Lee cantidad de columnas dim(lb,filas,columnas) // Dimensiona matriz con tamaos ingresados // Lee datos imprimir("Ingrese datos para la matriz separados por coma:\n") leer(lb)

Un ejemplo de ejecucin:
Ingrese el valor de la dimensin fila:2 Ingrese el valor de la dimensin columa:3 Ingrese datos para la matriz separados por coma: Asunci, Sajonia, Tacumbu, San Lorenzo, Lucerito,Reducto

Por supuesto tambin se puede usar ciclos para leer los elementos de una matriz, como se ve en la siguiente porcin de cdigo:
desde cf=1 hasta f // Recorre filas { desde cc=1 hasta c // Recorre columnas { imprimir("Ingrese cadena en fila ",cf," columna ",cc,":") leer(m[cf,cc]) // Lee valor para elemento } }

Pero, para funcionar necesita de las siguientes definiciones:


var m:matriz[*,*] cadena // Dimensin de matriz dinmica f:numerico // Cantidad mxima de filas de la matriz c:numerico // Cantidad mxima de columnas de la matriz cf:numerico // Contador para recorrer filas cc:numerico // Contador para recorrer columnas

Y que se ejecute previamente lo siguiente:


13/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
imprimir("Ingrese valor de la dimensin fila:") leer(f) // Lee cantidad de filas imprimir("Ingrese valor de la dimensin columna:") leer(c) // Lee cantidad de columnas dim(m,f,c) // Dimensiona matriz con tamaos ingresados

Una muestra del funcionamiento sera:


Ingrese el valor de la dimensin fila:2 Ingrese el valor de la dimensin columna:2 Ingrese cadena en fila 1 columna 1:gricel Ingrese cadena en fila 1 columna 2:marga Ingrese cadena en fila 2 columna 1:clara Ingrese cadena en fila 2 columna 2:dora

Inicializacin de una matriz Los elementos de una matriz pueden ser inicializados completamente con una sola sentencia. Dependiendo de que una matriz sea esttica o dinmica las opciones varan ligeramente. A continuacin unos ejemplos: Inicializacin de una matriz esttica con valores constantes cargados en el programa En este ejemplo se inicializa una matriz de 3 x 4 con los nombres de los meses del ao, distribuidos por cuatrimestre, con el primer cuatrimestre en la primera fila y as sucesivamente. Primero, en la parte declarativa se dimensiona la matriz con valores fijos:
var nombre_mes:matriz[3,4] cadena // Contendr nombres de meses por cuatrimestre

Luego ya en la parte de procedimientos se asignan los valores:


nombre_mes={ {"Enero","Febrero","Marzo","Abril"}, // Meses del cuatrimestre 1 {"Mayo","Junio","Julio","Agosto"}, // Meses del cuatrimestre 2 {"Setiembre","Octubre","Noviembre","Diciembre"} // Meses del cuatrimestre 3 }

La versin completa del programa ejemplo es:


programa c03_15s /* Objetivo :Carga matriz constante con nombres de meses. Muestra el cuatrimestre segn nmero ingresado. Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var nombre_mes:matriz[3,4] cadena // Contendr nombres de meses por cuatrimestre cuatrimestre:numerico // Para ingresar nmero de cuatrimestre // Area de programa principal inicio nombre_mes={ {"Enero","Febrero","Marzo","Abril"}, // Meses del cuatrimestre 1 {"Mayo","Junio","Julio","Agosto"}, // Meses del cuatrimestre 2 {"Setiembre","Octubre","Noviembre","Diciembre"} // Meses del cuatrimestre 3 } cls() leer_nro_cuatrimestre() // Lee el primer nmero de cuatrimestre mientras (nro_cuatrimestre_ok(cuatrimestre)) // Mientras es vlido lo ingresado { imprimir("El nmero ",cuatrimestre,

14/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
" corresponde a ",nombre_mes[cuatrimestre],"\n") // Muestra nombre meses del cuatrimestre leer_nro_cuatrimestre() // Lee los siguientes nmeros de cuatrimestre } fin // Area de subrutina subrutina leer_nro_cuatrimestre() // Procedimiento de lectura de nmero de cuatrimestre inicio imprimir("Ingrese nmero de cuatrimestre (Entre 1 y 3). No vlido para fin:") leer(cuatrimestre) fin subrutina nro_cuatrimestre_ok(c:numerico) retorna logico // Funcin de validacin de nmero de cuatrimestre inicio retorna(c>=1 and c<=3) // Valida y retorna SI o NO fin

Inicializacin parcial de una matriz esttica para ciertos elementos y con autocompletado para los dems En el ejemplo se inicializa un matriz cadena de tamao 5x2 con x en la primera fila y se autocompleta con % en las dems. En la parte declarativa se define la matriz:
var a:matriz[5,2] cadena // Matriz a ser inicializada

En la parte procedimental se inicializa:


a={ {"x","x"}, // Inicializa la matriz {"%","%"}, ... }

La ejecucin muestra este resultado: Valores cargados en la matriz antes de su inicializacin:


,,,,,,,,, El vector: x x %% %% %% %% Tiene dimensin 10

Notese que tambin se imprime el tamao de la matriz mediante la funcin alen().El programa completo se ve as:
programa c03_16s /* Objetivo Fecha Autor */ var a:matriz[5,2] cadena // Matriz a ser inicializada f,c:numerico // Contador de filas,contador de columnas inicio cls() imprimir("Valores cargados en la matriz antes de su inicializacin:\n") imprimir(a,"\n") // Imprime la matriz antes de ser cargada a={ :Inicializar matriz de tamao 5 con "x" en primera fila y "%" en las dems Mostrar tamao de la matriz :02/05/2012 :Jos Rojas Dvalos

15/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
{"x","x"}, // Inicializa la matriz {"%","%"}, ... } imprimir("La matriz:\n") desde f=1 hasta 5 // Recorre filas { desde c=1 hasta 2// Recorre columnas { imprimir(a[f,c]," ") // Imprime valor de elemento y espacio } imprimir("\n") // Salta a siguiente fila } imprimir("Tiene dimensin ",alen(a)*alen(a[1]),"\n") // Imprime tamao de la matriz fin

Inicializacin de una matriz abierta con valores constantes y uso implicito de dim() En la parte declarativa de define una matriz abierta, sin conocer an el tamao real:
var a:matriz[*,*] numerico // Matriz dinmica a ser cargada

La inicializacin en la parte procedimental a la vez de cargar los valores realiza un dim() implicito:
a={ {2,4,6,8,10}, // Al mismo tiempo que inicializa hace el papel dim() {12,14,16,18,20} }

El resultado de la ejecucin es:


Valores cargados en la matriz antes de su inicializacin: <nodim> La matriz: 2,4,6,8,10,12,14,16,18,20 Tiene dimensin 10

A continuacin la versin completa del programa:


programa c03_17s /* Objetivo :Inicializar matriz abierta con el valor de los 10 primeros enteros pares distribuidos en cantidades iguales en las dos primeras filas. Mostrar tamao de la matriz Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var a:matriz[*,*] numerico // Matriz dinmica a ser cargada inicio cls() imprimir("Valores cargados en la matriz antes de su inicializacin:\n") imprimir(a,"\n") // Imprime la matriz cuyo proceso de dimensionamiento no se complet a={ {2,4,6,8,10}, // Al mismo tiempo que inicializa hace el papel dim() {12,14,16,18,20} } imprimir("La matriz :\n",a,"\n","Tiene dimensin ",alen(a)*alen(a[2]),"\n") // Imprime matriz y su tamao fin

Asignacin entre matrices

16/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos

Una matriz puede ser asignada a otra con una sola sentencia de asignacin, es decir, no se requiere asignar elemento a elemento. Nuestro ejemplo, en la parte declarativa, dimensiona dos matrices abiertas y define las variables que van a contener las dimensiones de ambos:
var a:matriz[*,*] numerico // Matriz dinmica a ser cargada por teclado b:matriz[*,*] numerico // Matriz dinmica a la que se le asignara los valores de a[] d,e:numerico // Dimensiones de ambas matrices

Posteriormente dimensiona ambas matrices y lee los valores para la matriz origen:
imprimir("Dimensin fila de a[]:") leer(d) // Lee dimensin fila de a[] y b[] imprimir("Dimensin columna de a[]:") leer(e) // Lee dimensin columna de a[] y b[] dim(a,d,e) // Dimensiona a[] dim(b,d,e) // Dimensiona b[] imprimir("Ingrese los valores para a[] separados por coma:\n") leer(a) // Lee valores para a[]

Para finalmente asignar la matriz origen a la destino y mostrar los valores de ambas matrices:
b=a // Asigna los valores de a[] a b[] imprimir("La matriz a[]:\n",a,"\n","Tiene dimensin ",alen(a)*alen(a[1]),"\n") // Imprime a[] y su tamao imprimir("La matriz b[]:\n",b,"\n","Tiene dimensin ",alen(b)*alen(b[1]),"\n") // Imprime b[] y su tamao

A continuacin se muestra una instntanea de la ejecucin del programa:


Dimensin fila de a[]:2 Dimensin columna de a[]:2 Ingrese los valores para a[] separados por coma: 1,2,3,4 La matriz a[]: 1,2,3,4 Tiene dimensin 4 La matriz b[]: 1,2,3,4 Tiene dimensin 4

La lista completa del codigo fuente es:


programa c3_8s18 /* Objetivo Fecha Autor */ var a:matriz[*,*] numerico // Matriz dinmica a ser cargada por teclado b:matriz[*,*] numerico // Matriz dinmica a la que se le asignara los valores de a[] d,e:numerico // Dimensiones de ambas matrices inicio cls() imprimir("Dimensin fila de a[]:") leer(d) // Lee dimensin fila de a[] y b[] imprimir("Dimensin columna de a[]:") leer(e) // Lee dimensin columna de a[] y b[] dim(a,d,e) // Dimensiona a[] dim(b,d,e) // Dimensiona b[] imprimir("Ingrese los valores para a[] separados por coma:\n") leer(a) // Lee valores para a[] b=a // Asigna los valores de a[] a b[] imprimir("La matriz a[]:\n",a,"\n","Tiene dimensin ",alen(a)*alen(a[1]),"\n") // Imprime a[] y su tamao : Leer una matriz numrica de tamao d x e y asignar sus valores a otra matriz Mostrar tamao de ambos vectores :17/10/2010 :Jos Rojas Dvalos

17/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
imprimir("La matriz b[]:\n",b,"\n","Tiene dimensin ",alen(b)*alen(b[1]),"\n") // Imprime b[] y su tamao fin

Proceso de una matriz Normalmente para procesar una matriz hay que recorrerlo elemento a elemento como en el siguiente ejemplo con una matriz de dimensin fija:
// Genera matriz desde i=1 hasta 4 // Recorre filas { desde j=1 hasta 3 // Recorre columnas { si (i%2==0) // Si la fila es par { a[i,j]="*" // Carga asterico sino // Si la fila es impar a[i,j]="0" // Cargaa cero } } }

El listado del programa fuente:


programa c03_19s /* Objetivo :Generar matriz de 4 x 3, con asteriscos en filas pares y ceros en las impares Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var a:matriz[4,3] cadena // Matriz a ser generada i,j:numerico // Contador para filas, contador para columnas inicio // Genera matriz desde i=1 hasta 4 // Recorre filas { desde j=1 hasta 3 // Recorre columnas { si (i%2==0) // Si la fila es par { a[i,j]="*" // Carga asterico sino // Si la fila es impar a[i,j]="0" // Cargaa cero } } } // Muestra matriz imprimir("La matriz generada es:\n") desde i=1 hasta 4 // Recorre filas { desde j=1 hasta 3 // Recorre columnas { imprimir(a[i,j]," ") // Imprime elemento y un espacio } imprimir("\n") // Salto de fila } fin

Otro ejemplo con una matriz abierta es:


// Procesa desde cf=1 hasta f // Recorre filas { desde cc=1 hasta c // Recorre columnas { s=s+strlen(m[cf,cc]) // Calcula longitud y suma a s }

18/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
}

El programa fuente completo se deja ver as:


programa c03_14s /* Objetivo :Leer una matriz cadena de orden f x c y mostrar la suma de las longitudes de sus elementos Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var m:matriz[*,*] cadena // Dimensin de matriz dinmica f:numerico // Cantidad mxima de filas de la matriz c:numerico // Cantidad mxima de columnas de la matriz cf:numerico // Contador para recorrer filas cc:numerico // Contador para recorrer columnas s: numerico // Sumador de longitudes de cada elemento inicio cls() imprimir("Ingrese valor de la dimensin fila:") leer(f) // Lee cantidad de filas imprimir("Ingrese valor de la dimensin columna:") leer(c) // Lee cantidad de columnas dim(m,f,c) // Dimensiona matriz con tamaos ingresados s=0 // Inicializa sumador // Lee datos desde cf=1 hasta f // Recorre filas { desde cc=1 hasta c // Recorre columnas { imprimir("Ingrese cadena en fila ",cf," columna ",cc,":") leer(m[cf,cc]) // Lee valor para elemento } } // Procesa desde cf=1 hasta f // Recorre filas { desde cc=1 hasta c // Recorre columnas { s=s+strlen(m[cf,cc]) // Calcula longitud y suma a s } } // Imprime resultado imprimir("La suma de las longitudes de los elementos es ",s," \n") // Muestra informacin solicitada fin

Impresin de una matriz Existen tres casos posibles, de los cules se dan ejemplos: Impresin sin ciclo para matriz
imprimir("Los datos cargados son:\n") imprimir(amn,"\n") // Imprime matriz completa

Impresin con ciclo para matriz esttica


i// Muestra matriz imprimir("La matriz generada es:\n") desde i=1 hasta 4 // Recorre filas { desde j=1 hasta 3 // Recorre columnas { imprimir(a[i,j]," ") // Imprime elemento y un espacio

19/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
} imprimir("\n") // Salto de fila }

Impresin con ciclo para matriz abierta


desde f=1 hasta filas // Para recorrer filas { desde c=1 hasta columnas // Para recorrer columnas { imprimir(lb[f,c]," ") // Imprime valor del elemento y un espacio } imprimir("\n") // Salto de lnea }

Matriz cuadrada Se conoce como matriz cuadrada a aquella que tiene la dimensin fila igual a la dimensin columna. As si se dice que una matriz es de orden 4 se entiende que tiene 4 filas y 4 columnas. Si se expresa la dimensin de una matriz como n x n (ene por ene) tambin se entiende que es cuadrada. En el primer caso es con dimensiones fijas, en el segundo con dimensines variables. Como las dimensines son iguales se puede expresar como matriz de dimensin u orden 4 en el primer caso, o como matriz de dimensin u orden n, en el segundo. Suponiendo la siguiente matriz:
10 1 12 6 7 0 88 92 8 5 44 2

43 55 64 33

Elementos situados en la diagonal principal Tomemos los valores de los elementos que estn en rojo: {10,0,43,33}. Suponiendo que nuestra matriz se denomina m seran los elementos m[1,1],m[2,2],m[3,3] y m[4,4]. Qu tienen de comn estos elementos? Sus coordenadas o subindices son iguales desde el punto de vista posicin fila y posicin columna. En este caso se dice que estos elementos estn en la diagonal principal de la matriz. Elementos situados por encima la diagonal principal Si ahora tomamos los valores de los elementos que estan en verde: {7,8,44,2,55}. Vemos que se guardan en los elementos m[1,2],m[1,3],m[1,4],m[2,4] y m[3,4]. Qu tienen de comn estos elementos? Sus coordenadas filas son menores que sus coordenadas columnas. Se dice que estos elementos estn por encima de la diagonal principal. Elementos situados por debajo de la diagonal principal Finalmente, si tenemos en cuenta los valores de los elementos que estan en azul: {1,12,6,92,64}. Vemos que se guardan en los elementos m[2,1],m[3,1],m[4,1],m[4,2] y m[4,3]. Qu tienen de comn estos elementos? Sus coordenadas filas son mayores que sus coordenadas columnas. Se dice
20/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos que estos elementos estn por debajo de la diagonal principal. A continuacin un ejemplo de seleccin de elementos de una matriz cuadrada segn su relacin con la diagonal principal. El programa cuenta los elementos en, muestra los que estn por encima y halla la suma de los que estn por debajo, siempre en relacin con la diagonal principal:
programa c03_20s /* Objetivo:Leer una matriz de orden d, contar elementos en, mostrar elementos por encima y hallar la suma de elementos por debajo de la diagonal principal Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var m:matriz[*,*] numerico // Matriz a ser leida d:numerico // Dimensin de la matriz cuadrada i,j:numerico // Contador para filas, contador para columnas cend=0 // Contador para elementos en la diagonal principal sded=0 // Sumador de elementos por debajo de la diagonal principal inicio cls() imprimir("Ingrese la dimensin de la matriz cuadrada:") leer(d) // Lee dimensin dim(m,d,d) // Dimensiona // Lee valores para la matriz desde i=1 hasta d // Recorre filas { desde j=1 hasta d // Recorre columnas { imprimir("Ingrese valor para a[",i,",",j,"]:") leer(m[i,j]) // Lee valor para cada elemento de la matriz } } // Procesa matriz imprimir("Los valores de los elementos que estan por encima de la diagonal principal son:\n") desde i=1 hasta d // Recorre filas { desde j=1 hasta d // Recorre columnas { si (i==j) // Si el elemento est en la diagonal principal { cend=cend+1 sino si (i<j) // Si el elemento est por encima de la diagonal principal { imprimir(m[i,j]," ") // Se muestra separado con un espacio sino // Si el elemento est por debajo de la diagonal principal sded=sded+m[i,j] } } } } imprimir("\n") // Salto de lnea imprimir("Cantidad de elementos en la diagonal principal = ",cend,"\n") imprimir("Suma de valores de elementos por debajo de la diagonal principal = ",sded,"\n") fin

Recorrer elementos en la diagonal principal con un ciclo Valindonos de la propiedad de una matriz cuadrada, especficamente de la que dice que los elementos en la diagonal principal tienen la posicin fila igual a la posicin columna, podemos recorrer con un solo ciclo la mencionada diagonal. En el ejemplo el programa se asigna el valor 1 a los elementos en la diagonal principal:
programa c03_21s /* Objetivo :Generar matriz numrica cuadrada de orden 5, con valor 1 en elementos de diagonal principal, 0 en los otros Fecha :02/05/2012 Autor :Jos Rojas Dvalos */

21/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
var a:matriz[5,5] numerico // Matriz nmerica a ser generada que se llena de ceros al ser dimensionada i:numerico // Contador para filas j:numerico // Contador para columnas inicio cls() // Genera matriz desde i=1 hasta 5 // Recorre diagonal principal { a[i,i]=1 // Carga 1 en la diagonal principal } // Muestra matriz imprimir("La matriz generada es:\n") desde i=1 hasta 5 // Recorre filas { desde j=1 hasta 5 // Recorre columnas { imprimir(a[i,j]," ") // Imprime elemento y un espacio } imprimir("\n") // Salto de fila } fin

La diagonal secundaria Miremos nuestra matriz ejemplo de nuevo, con los valores marcados en rojo:
10 1 12 6 7 0 88 92 8 5 44 2

43 55 64 33

Los valores de los elementos marcados son: {44,5,88,6} que se guardan en m[1,4],m[2,3],m[3,2]ym[4,1]. Qu tienen de comn estos elementos? Si nos fijamos con atencin en las coordenadas y en el orden en que fueron citados notaremos que las coordenadas de las filas van de menor a mayor y las coordenadas de las columnas van de mayor a menor. Por lo tanto con un solo ciclo de 1 a 4 puedo generar el valor de las filas y tengo que buscar por medio de algn truco de clculo generar en paralelo el valor para los columnas. Descubra el truco usado en el programa que se lista a continuacin, para recorrer la diagonal secundaria con un solo ciclo y llenarla de "*", dejando los dems elementos con valor "+":
programa c03_22s /* Objetivo :Generar matriz cadena cuadrada de orden d, con valor "*" en elementos de diagonal secundaria, "+" en los otros Fecha :02/05/2012 Autor :Jos Rojas Dvalos */ var a:matriz[*,*] cadena // Matriz cadena a ser generada d:numerico // Dimensin de la matriz cuadrada i:numerico // Contador para filas j:numerico // Contador para columnas inicio cls() imprimir("Ingrese dimensin de la matriz cuadrada:") leer(d) // Lee dimensin de la matriz dim(a,d,d) // Dimensionamiento de la matriz // Genera matriz

22/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

Facultad Politcnica - UNA Algortmica I Seccin ND Licenciatura en Ciencias Informticas Unidad 3: Estructuras de datos
desde i=1 hasta d // Recorre filas { desde j=1 hasta d // Recorre columnas { a[i,j]="+" // Carga "+" en todos los elementos } } // Recorre diagonal secundaria desde i=1 hasta d // Recorre filas { j=(d+1)-i // Genera columnas a[i,j]="*" // Carga "*" en la diagonal secundaria } // Muestra matriz imprimir("La matriz generada es:\n") desde i=1 hasta d // Recorre filas { desde j=1 hasta d // Recorre columnas { imprimir(a[i,j]," ") // Imprime elemento y un espacio } imprimir("\n") // Salto de fila } fin

Fin del documento

23/ 23 02/05/12 15:51:10 /var/www/apps/conversion/tmp/scratch_6/137426806.odt

You might also like