24
2015 Ingeniería en Sistemas de Información / Ingeniería Telemática UNIDAD V: ARREGLOS

UNIDAD V: ARREGLOS - · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Embed Size (px)

Citation preview

Page 1: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

2015

Ingeniería en Sistemas de Información / Ingeniería

Telemática

UNIDAD V: ARREGLOS

Page 2: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

2

UNIDAD V: ARREGLOS UNIDIMENSIONALES

1.1 GENERALIDADES:

En los temas anteriores se ha manejado el concepto de variable como todo campo que permite

que el contenido que se encuentra almacenado en el espacio de memoria asignado a dicho

campo, pueda ser alterado en el transcurso de la ejecución del pseudocódigo. Debemos

comprender que a una variable se le asigna un espacio en memoria donde se puede guardar

de forma temporal un único valor, bien sea numérico, carácter o lógico.

Frecuentemente tenemos la necesidad de almacenar una colección de datos del mismo tipo.

Por ejemplo, cuando se leen las notas de los estudiantes de un curso en particular. Los datos

siempre que estén relacionados se pueden organizar en estructuras, de tal manera que

podemos tener un conjunto de datos numéricos, lógicos, o caracteres manejados a través de

un mismo nombre. Una estructura de datos es la organización que reciben los datos para que

sean tratados como una unidad, esta unidad recibe el nombre de arreglo (array).

Un arreglo es un conjunto finito de componentes del mismo tipo, los cuales se diferencian

o relacionan a través de un subíndice.

1.2 CONCEPTO DE ARREGLO: Los arreglos son estructuras de datos homogéneas (todos sus datos son del mismo tipo) que

permiten almacenar un determinado número de datos bajo un mismo identificador, para

luego referirse a los mismos utilizando uno o más subíndices. Los arreglos pueden pensarse

como vectores, matrices, etc. Para poder utilizar un arreglo, primero es obligatorio su

dimensionamiento; es decir, declarar los rangos de sus subíndices, lo cual determina cuantos

elementos se almacenarán y como se accederá a los mismos.

Cada ítem del arreglo se denomina elemento. Los elementos de un arreglo se numeran

consecutivamente 0, 1, 2, 3... Estos números se denominan valores índice o subíndice del

array. El término “subíndice” se utiliza ya que se especifica igual que en matemáticas, como

una secuencia a0, a1, a2, a3… Estos números localizan la posición del elemento dentro del

arreglo, proporcionando acceso directo al array.

Page 3: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

3

Si el nombre del array es "a", entonces a[0] es el nombre (valor) del elemento que está en la

posición 0, a[1] es el nombre (valor) del elemento que está en la posición 1, etc. En general, el

elemento i-ésimo está en la posición i-1. De modo que si el array tiene n elementos, sus

nombres son a[0], a[1], a[2], …., a[n-1].

Se pueden declarar más de un arreglo en una misma instrucción, separándolos con una

coma (,).

Dimension <ident1> (<max11>,...,<max1N>),..., <identM> (<maxM1>,...,<maxMN>) Gráficamente se representa así el array “a” de 6 elementos:

Dimension a[6]; //Declara un array de 6 elementos

El array tiene 6 elementos: a[0] contiene 5, a[1] contiene 8, a[2] contiene 6, a[3] contiene 10,

a[4] contiene 9, a[5] contiene 4. En un array sus elementos se almacenan siempre en una

secuencia de posiciones de memoria contiguas.

1.3 DIMENSIONAMIENTO DE UN ARREGLO: La instrucción Dimension permite declarar un arreglo, indicando sus dimensiones.

Dimension nombre_arreglo [tamaño(, tamaño, ...)]; Donde:

• Dimension: Es la palabra reservada del lenguaje que indica que se está declarando un

arreglo.

• nombre_arreglo: Corresponde al identificador por medio del cual podemos

referenciar alarreglo.

• tamaño: Un número entero mayor que cero que indica el tamaño del array o bien el

número de elementos que será capaz de almacenar el arreglo.

Esta instrucción define un arreglo con el nombre indicado en <indentificador> y N

dimensiones. Los N parámetros indican la cantidad de dimensiones y el valor máximo de cada

una de ellas. La cantidad de dimensiones puede ser una o más, y la máxima cantidad de

elementos debe ser una expresión numérica positiva.

Ejemplos de declaración de arreglos:

Definir arreglo_datos, edad como Entero;

Page 4: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

4

Dimension arreglo_datos[25];// Arreglo con capacidad para almacenar 25 elementos enteros.

Dimension edad[50]; //Arreglo con capacidad para almacenar 50 elementos enteros.

1.4 ARREGLOS EN BASE CERO: Para empezar a diseñar algoritmos con arreglos en base cero, vamos al menú Configurar y

escogemos Opciones del lenguaje (perfiles), se mostrar un cuadro como este:

1.5 INICIALIZACIÓN DE UN ARRAY: Se deben asignar valores a los elementos del arreglo antes de utilizarlos, tal como se asignan

valores a variables. Para asignar valores a cada elemento del arreglo de enteros “edades”, se

puede escribir:

edades [0] <- 15; edades [1] <- 25; edades [3] <- 30; edades [4] <- 35; La primera sentencia fija edades[0] al valor 15, edades[1] al valor 25, etc. Sin embargo, este

método no es práctico cuando el array contiene muchos elementos. El método utilizado,

normalmente, es inicializar el array completo en una sola sentencia.

Ejemplo #1: Pseudocódigo para inicializar un arreglo de 10 elementos a 0.

Solución #1: Proceso inicializar

Definir datos, i como entero;

Dimension datos[10];

Escribir Sin Saltar "|";

Para i<-0 Hasta 9 Con Paso 1 Hacer

datos[i] <- 0;

Escribir Sin Saltar " ", datos[i], " |";

FinPara

Escribir ""; //Salto de linea

FinProceso

Se debe escoger el perfil Estricto a como

aparece en la figura, luego de esto, se pulsa el

botón Aceptar y el seudolenguaje estará listo

para reconocer arreglos en base 0.

Page 5: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

5

1.6 OPERACIONES QUE SE PUEDEN REALIZAR EN UN ARREGLO: Dos operaciones básicas pueden ser llevadas a cabo sobre los elementos de un arreglo, estas

son:

• Almacenamiento: establecer un valor al elemento del arreglo.

• Extracción: se obtiene el valor de un elemento del arreglo.

1.6.1 OPERACIÓN DE ALMACENAMIENTO EN UN ARREGLO:

Esta operación nos permite almacenar un valor en la posición que se indique por medio del

índice, por ejemplo: si tenemos un arreglo llamado mis_datos con un tamaño de tres

elementos y queremos almacenar en la posición 1 el valor 10, la sentencia sería:

mis_datos[1] <- 10;

La sentencia anterior almacena en posición correspondiente al índice 1 el valor 10.

Page 6: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

6

1.6.2 OPERACIÓN DE EXTRACCIÓN EN UN ARREGLO:

Esta operación permite acceder al valor que se encuentre en la posición indicada por medio

del índice y devuelve ese valor a una variable, por ejemplo: si lo que deseamos es recuperar

valores desde una posición del arreglo podemos proceder como se indica en el siguiente

ejemplo:

var<- mis_datos[1];

Ejemplo #2: Pseudocódigo que declara e inicializa un arreglo de N datos, de modo que

los elementos de índice par valgan 0 y los de índice impar valgan 1.

Solución #2: Proceso posiciones_array Definir datos_array, v, ndatos Como Entero; Dimension datos_array[100]; v <- 0; Escribir "Cuantos datos desea en el arreglo?"; Leer ndatos; Mientras v < ndatos-1 Hacer Si (v % 2) = 0 Entonces datos_array[v]<-0; Sino datos_array[v]<-1; FinSi Escribir "Dato[",v,"]=",datos_array[v]; FinMientras FinProceso

Page 7: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

7

Ejemplo #3: Se tiene almacenado en memoria un arreglo unidimensional las notas de

50 alumnos del primer parcial correspondiente a la asignatura “Programación I”. Se

pide realizar un pseudocódigo que calcule e imprima:

La mayor nota.

La menor nota.

El porcentaje de alumnos que aprobaron el parcial con notas superiores a 60

pts.

El promedio de las notas.

Page 8: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

8

Solución #3: Proceso Estadisticas Definir notas,nalumnos,a,sum_notas, apro como entero; Definir maynota, mennota, posmen, porapro, prom_notas como entero; Dimension notas[100]; a<-0; sum_notas<-0; maynota<-0; mennota<-101; apro<-0; Escribir Sin Saltar "Numero de alumnos es:"; Leer nalumnos; Repetir Escribir Sin Saltar "Calificacion[",a+1,"]:"; Leer notas[a]; sum_notas<-sum_notas+notas[a]; Si notas[a] >maynota entonces maynota<-notas[a]; FinSi si notas[a]<mennota Entonces mennota<-notas[a]; FinSi Si notas[a]>=60 entonces apro<-apro+1; FinSi a<-a+1; Hasta Que a>=nalumnos porapro<-apro*100/nalumnos; prom_notas<-redon(sum_notas/nalumnos); Escribir "La calificacion mayor del grupo fue de: ",maynota," puntos."; Escribir "La calificacion menor del grupo fue de: ",mennota," puntos."; Escribir "El porcentaje de aprobados fue del: ",porapro,"%."; Escribir "El promedio de notas es: ",prom_notas; FinProceso

Page 9: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

9

Page 10: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

10

Ejemplo #4: Realice un pseudocódigo que permita introducir en un array de

20posiciones números aleatorios entre 1 y 100. Utilice la función AZAR().

Solución #4: Proceso numeros_azar Definir n,azarnum, numg, nazar como entero; Dimension nazar[20]; Para n<-0 hasta 19 Con Paso 1 Hacer numg<- Azar(100)+1; nazar[n] <- numg; Escribir Sin Saltar nazar[n]," "; FinPara FinProceso

Page 11: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

11

Ejemplo #5: Pseudocódigo que permita al Director del Consejo Supremo Electoral

encontrar el número y porcentaje de votos obtenidos por cada uno de los 4 candidatos

de la contienda electoral en relación a los votantes que asistieron a las urnas a

depositar su voto. Lea en un arreglo la intención de voto de cada una de las personas.

Proceso elecciones Definir nvotos, v, c1, c2, c3, c4, nulos, nv Como Entero; Definir pc1, pc2, pc3, pc4, pcnul Como Real; Definir resp Como Caracter; c1 <- 0; c2 <- 0; c3 <- 0; c4 <- 0; nulos <- 0; Dimension nvotos[100]; nv<-0; Repetir Escribir sin saltar "Su voto es por el candidato (1-2-3-4):"; Leer nvotos[nv]; Segun nvotos[nv] Hacer 1: c1<-c1+1; //c1: candidato 1 2: c2<-c2+1; //c2: candidato 2 3: c3<-c3+1; //c3: candidato 3 4: c4<-c4+1; //c4: candidato 4 De Otro Modo: Escribir "Voto Nulo"; nulos<-nulos+1; FinSegun nv<-nv+1; Escribir "Hay otro votante: "; Leer resp; Hasta Que Mayusculas(resp) = 'N' pc1<- Redon((c1*100)/nv); pc2<-Redon((c2*100)/nv); pc3<-Redon((c3*100)/nv); pc4<-Redon((c4*100)/nv); pcnul<-Redon((nulos*100)/nv); Escribir "******RESULTADOS FINALES******"; Escribir "En las elecciones votaron: ",nv," personas"; Escribir "El candidato 1 obtuvo: ",c1," votos -- Porcentaje: ",pc1, " %"; Escribir "El candidato 2 obtuvo: ",c2," votos -- Porcentaje: ",pc2, " %"; Escribir "El candidato 3 obtuvo: ",c3," votos -- Porcentaje: ",pc3, " %"; Escribir "El candidato 4 obtuvo: ",c4," votos -- Porcentaje: ",pc4, " %"; Escribir "Hubieron ",nulos," votos nulos -- Porcentaje: ",pcnul, " %"; FinProceso

Page 12: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

12

Page 13: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

13

EJERCICIOS PROPUESTOS:

1. Escriba un Pseudocódigo que declare en un arreglo unidimensional de 50 posiciones,

números pares comenzando por el 2, visualice el arreglo resultante. (Utilice el ciclo

Mientras-Hacer)

2. Realice un pseudocódigo que permita sumar los elementos de dos arreglos y guarde el

resultado en otro arreglo. Deberá imprimir el arreglo resultante, el tamaño del arreglo

será introducido por el usuario, se debe comprobar que el tamaño del arreglo sea

válido, es decir, no permitir valores negativos y que sea mayor que 2. (Mezcle las

estructuras repetitivas vistas anteriormente)

3. Realice un pseudocódigo que lea un arreglo de N datos y asigne a sus elementos los

valores 1, 4, 9, 16........etc. ( 12, 22, 32...). (Utilice el ciclo Mientras - Hacer)

4. Realice un pseudocódigo que lea en un arreglo las marcas obtenidas por 10 corredores

en una carrera e imprimir cuántos tienen una marca mayor y cuántos tienen una

marca menor que el promedio.

5. Realice un pseudocódigo que lea N elementos y que imprima el número que se repite

más veces dentro del arreglo.

Page 14: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

14

ARREGLOS BIDIMENSIONALES

A los arreglos de dos dimensiones (bidimensionales) se les conoce como matrices y son

estructuras de datos que organizan su información en forma de tablas, es decir, los elementos

que la conforman están dispuestos bajo dos conceptos de clasificación (fila y columna). Para

poder indicar el lugar donde se encuentra un determinado elemento, es necesario utilizar dos

índices: uno para indicar el renglón o fila y otro para indicar la columna.

Puede mirarse una matriz como un vector de vectores; por lo tanto, es un conjunto de

componentes en el que se necesitan dos subíndices para identificar un elemento que

pertenezca al arreglo.

Por ejemplo, si tenemos un arreglo llamado matriz de dos dimensiones como se muestra a

continuación:

Dimension matriz[3, 6];

Gráficamente podemos representar al arreglo bidimensional como se muestra a continuación:

Un arreglo bidimensional N * M tiene N filas y M columnas; por lo tanto, tiene N * M elementos

dispuestos interiormente en memoria en forma sucesiva.

Al declarar un arreglo de más de dos dimensiones o multidimensional es todo aquel que

posee más de dos dimensiones. Por ejemplo podemos declarar un arreglo de tres dimensiones

llamado matriz_multi de la siguiente forma:

Dimension matriz_multi[2][4][3];

Page 15: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

15

A continuación se presenta un ejemplo gráfico de un arreglo multidimensional de NxMx3.

A continuación veremos ejemplos de cómo acceder a los elementos de un arreglo de dos

dimensiones.

Ejemplo 1 El presente ejemplo muestra como almacenar elementos dentro de las posiciones de un

arreglo de dos dimensiones.

Page 16: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

16

DIAGRAMA DE FLUJO:

Page 17: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

17

Ejemplo 2: Hacer un algoritmo que encuentre e imprima la matriz transpuesta de una matriz MAT. La matriz transpuesta de la matriz MAT se encuentra intercambiando las filas por las columnas y las columnas por las filas. Si TMAT es la matriz transpuesta de MAT, implica entonces que TMAT [columna, fila] es igual a MAT [fila, columna]. Si el contenido de MAT es:

Como se puede ver, se invierte el orden de la matriz; es decir, el número de filas de MAT es igual al número de columnas de TMAT y el número de columnas se invierte por el número de filas de TMAT.

Page 18: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

18

Page 19: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

19

Ejemplo # 3: Realice un algoritmo que pida una matriz de nFilas y nColumnas, comprobar que el tamaño de la matriz sea mayor a 2, luego calcule la suma de las diagonales de la matriz y presente en pantalla los valores de la diagonal principal y secundaria con sus respectivas sumas. Se le deja al estudiante realizar el diagrama de flujo.

Page 20: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

20

Ejemplo # 4: El siguiente Pseudocódigo rellena automáticamente una matriz N*M con la suma de sus índices (Es decir, el elemento A[1][1] = 1+1=2, A[3][2] = 3+2=5). El algoritmo mostrará la matriz resultante por pantalla.

Page 21: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

21

Page 22: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

22

Ejemplo # 5: En el siguiente seudocódigo se lee una matriz de N filas y M columnas de valores enteros. A continuación, se pide el número de una fila (se recuerda validar dicho dato). En el seudocódigo se devuelve el mayor elemento de esa fila.

Page 23: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

23

Diagrama de Flujo:

Page 24: UNIDAD V: ARREGLOS -   · PDF filecomo vectores, matrices, ... Unidad V: Arreglos Unidimensionales y Bidimensionales 3 Si el nombre del array es "a", entonces a[0] es el nombre

Unidad V: Arreglos Unidimensionales y Bidimensionales

24

EJERCICIOS PROPUESTOS

1. Escriba un algoritmo que lea un arreglo de N x M elementos y que guarde un 0 en las posiciones pares y un 1 en las posiciones impares. Imprima el arreglo bidimensional resultante.

2. Ingrese en una tabla de N filas por M columnas valores enteros y que almacene los valores de la diagonal principal y secundaria en arreglos unidimensionales, luego deberá visualizar la tabla como los valores almacenados en los arreglos.

3. Escriba un algoritmo que lea un arreglo de N x 5 indicando que una empresa tiene N vendedores cada uno de los cuales vende 5 productos. El arreglo almacena los ingresos obtenidos por cada vendedor en cada producto, imprimir el total de cada vendedor y obtener los ingresos totales de la tienda.

4. En una tabla de N x M elementos ingresar valores numéricos y en la fila N-1 calcular y almacenar la suma de las columnas de la tabla, luego se pide visualizar la matriz completa.

5. Hacer un algoritmo que lea una matriz de NF filas y NC columnas y calcule la suma de las filas y de las columnas, dejando los resultados en dos vectores, uno con las sumas de las filas y otro con la suma de las columnas; imprima los dos vectores.