unidad v: arreglos unidimensionales...unidad v: arreglos unidimensionales 6 por ejemplo, si...

13
ARREGLOS 20 Ing. en Sist UNIDAD V: S UNIDIMENSIO 013 temas de Información Modalidad Sabatino ONALES

Upload: others

Post on 02-Aug-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

ARREGLOS UNIDIMENSIONALES

201

Ing. en Sistema

UNIDAD V:

ARREGLOS UNIDIMENSIONALES

2013

Ing. en Sistemas de Información Modalidad Sabatino

ARREGLOS UNIDIMENSIONALES

Page 2: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

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.

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

Page 3: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

3

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 al arreglo.

• 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.

Si se utilizan arreglos en base 0, al declarar un arreglo de, por ejemplo 15 elementos, los

índices de elementos válidos van de 0 a 14; mientras que si se utilizan arreglos en base 1 los

índices válidos van de 1 a 15. Esto se configura en la opción Opciones del Lenguaje (perfiles) del menú Configurar.

Ejemplos de declaración de arreglos:

Definir arreglo_datos, edad como Entero;

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 nuestros algoritmos con arreglos en base cero, vamos al menú

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

Page 4: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

4

Seleccionamos el perfil <personalizado> y hacemos clic en el botón Personalizar…

Aparecerá el siguiente cuadro de diálogo:

Marcamos la casilla: Utilizar arreglos en base cero y presionamos aceptar. De esta manera

ya queda configurado el programa para utilizar arreglos en base cero.

Si esta opción esta activada, el primer elemento de un arreglo de N elementos será el 0 y el

último el N-1, en caso de no estar activada esta opción el primer elemento será el 1 y el último

el N.

Page 5: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

5

Consideraciones: No importa con que base trabajemos en los arreglos: uno o cero, siempre

obtendremos los mismos resultados de forma eficiente, se recomienda al estudiante trabajar

en PSeInt con arreglos en base cero ya que a la hora de aprender un lenguaje de programación

como por ejemplo C, los arreglos siempre van a comenzar desde cero. También podemos

definir uno o más arreglos en una misma instrucción separándolos con una coma.

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 [2] <- 19;

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.

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.

Solución #1: Proceso inicializar Definir datos,i como entero;

Dimension datos[10];

Para i<-0 Hasta 9 Con Paso 1 Hacer

datos[i] <- 0;

Escribir Sin Saltar datos[i]," ";

FinPara FinProceso

Page 6: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

6

Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se

muestra a continuación: Dimension array[3]. Son válidos los índices que están en el rango de

0 a 2.

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.

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;

Escribir "Cuantos datos desea en el arreglo?";

Leer ndatos;

Dimension datos_array[ndatos];

Para v<-0 Hasta ndatos-1 Hacer

Si v % 2 = 0 Entonces

datos_array[v]<-0;

Sino

datos_array[v]<-1;

FinSi

Escribir "Dato[",v+1,"]=",datos_array[v];

FinPara

FinProceso

Page 7: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

7

Ejemplo #3: Realice un pseudocódigo que declare y lea un arreglo de N elementos, imprimir la suma de los números pares y el producto de los números impares del arreglo. Nota: Arreglo en base 1.

Ejemplo #4: Pseudocódigo que declare en un arreglo unidimensional de 50 posiciones, números pares comenzando por el 2.

Solución #4: Proceso contenido_numpares Definir datos_array,v,num Como Entero;

Dimension datos_array[50];

num<-2;

v<-0;

Mientras v<50 Hacer

datos_array[v]<-num;

Escribir "Dato[",v+1,"]=",datos_array[v];

num<-num+2;

v<-v+1;

FinMientras

FinProceso

Solución #3: Proceso sumpares_prodimpares Definir npar, nimpar, d, sump, prodimp, datos, ndatos como entero;

npar<-0; nimpar<-0; prodimp<-1; sump<-0;

Escribir 'Cuantos elementos tiene el arreglo?';

Leer ndatos;

Dimension datos[ndatos];

Para d<-1 Hasta ndatos Hacer

Escribir 'Dato[',d,']:';

Leer datos[d];

Si datos[d] % 2 = 0 Entonces

npar <- npar+1;

sump <- sump + datos[d];

FinSi

Si datos[d] % 2 <> 0 Entonces

nimpar <- nimpar+1;

prodimp <- prodimp * datos[d];

FinSi

FinPara

Escribir 'ELEMENTOS DEL ARREGLO';

Para d<-1 Hasta ndatos Hacer

Escribir Sin Saltar " ", datos[d],' ';

FinPara

Escribir 'La suma de los ',npar,' numeros pares del arreglo es:',sump;

Escribir 'El producto de los ',nimpar,' numeros impares del arreglo

es:',prodimp;

FinProceso

Page 8: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

8

Ejemplo #5: Se tiene almacenado en memoria en un arreglo de una dimensión las notas de N 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 nota superior 60 pts. • El promedio de las notas.

Solución #5: Proceso maynota Definir notas,nalumnos,a,sum_notas,mayornota,posmen,prom_notas como entero;

a<-0;

sum_notas<-0;

mayornota<-0;

mennota<-101;

apro<-0;

Escribir Sin Saltar "Numero de alumnos es:";

Leer nalumnos;

Dimension notas[nalumnos];

Repetir

Escribir Sin Saltar "Calificacion[",a+1,"]:";

Leer notas[a];

sum_notas<-sum_notas+notas[a];

Si notas[a] > mayornota entonces

mayornota<-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<-sum_notas/nalumnos;

Escribir "La calificacion mayor del grupo fue de: ",mayornota," 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 UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

9

Ejemplo #6: Pseudocódigo que permita almacenar N números en un arreglo, imprimir cuántos son ceros, cuántos negativos y cuántos positivos. Imprimir además la suma de los negativos y los positivos.

Solución #6: Proceso numeros_pos_neg_nul Definir number,d,sumpos,sumneg,pos,neg,nul Como Entero;

sumpos<-0;

sumneg<-0;

pos<-0;

neg<-0;

nul<-0;

Escribir sin saltar "¿Cuantos datos desea en el arreglo?";

Leer ndatos;

Dimension number[ndatos];

d<-0;

Mientras d<ndatos Hacer

Escribir Sin Saltar "Dato[",d+1,"]=";

Leer number[d];

Si number[d]>0 entonces

pos<-pos+1;

sumpos<-sumpos+number[d];

sino

si number[d]<0 Entonces

neg<-neg+1;

sumneg<-sumneg+number[d];

Sino

nul<-nul+1;

FinSi

FinSi

d<-d+1;

FinMientras

Escribir "Hay ",pos," numeros POSITIVOS en el arreglo.";

Escribir "Hay ",neg," numeros NEGATIVOS en el arreglo.";

Escribir "Hay ",nul," CEROS en el arreglo.";

Escribir "La suma de los numeros positivos es:",sumpos;

Escribir "La suma de los numeros negativos es:",sumneg;

FinProceso

Page 10: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

10

Ejemplo #7: Realice un pseudocódigo que permita introducir en un array de 20 posiciones números aleatorios entre 1 y 100. Utilice la función AZAR(). Ejemplo #8: Realice un pseudocódigo que permita sumar los elementos de dos arreglos y guarde el resultado en otro array. Deberá imprimir el array resultante.

Solución #8: Proceso suma_arreglos Definir suma,datos1,datos2,a1,a2 como entero;

Dimension suma[5],datos1[5],datos2[5];

Escribir "Datos del Arreglo #1";

Para a1<-0 Hasta 4 con paso 1 Hacer

Escribir Sin Saltar "Datos[",a1+1,"]:";

Leer datos1[a1];

FinPara

Escribir "Datos del Arreglo #2";

a1<-0;

Mientras a1 < 5 Hacer

Escribir Sin Saltar "Datos[",a1+1,"]:";

Leer datos2[a1];

suma[a1]<-datos1[a1]+datos2[a1];

a1<-a1+1;

FinMientras

Escribir "***Arreglo Suma***";

a2<-0;

Repetir

Escribir Sin Saltar suma[a2]," ";

a2<-a2+1;

Hasta Que a2>4

Escribir "";

FinProceso

Solución #7: Proceso numeros_azar Definir n, Datos_azar, numg como entero;

Dimension Datos_azar[20];

Para n<-0 hasta 19 Con Paso 1 Hacer

numg <- Azar(100)+1;

Datos_azar[n] <- numg;

Escribir Sin Saltar Datos_azar[n]," ";

FinPara

FinProceso

Page 11: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

11

Ejemplo #9: 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.

Solución #9: Proceso elecciones Definir nvotos,v,c1,c2,c3,c4,nulos,nv Como Entero;

Definir pc1,pc2,pc3,pc4,pcnul Como Real;

Dimension nvotos[100]; //Array de hasta 100 elementos enteros

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;

2:

c2<-c2+1;

3:

c3<-c3+1;

4:

c4<-c4+1;

De Otro Modo:

Escribir "Voto Nulo";

nulos<-nulos+1;

FinSegun

nv<-nv+1;

Escribir "Hay otro votante: (S/N)";

Leer resp;

Hasta Que Mayusculas(resp) = 'N'

pc1<- (c1*100)/nv;

pc2<-(c2*100)/nv;

pc3<-(c3*100)/nv;

pc4<-(c4*100)/nv;

pcnul<-(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 UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

12

Ejemplo #10: 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...).

Solución #10: Proceso serie Definir nelem,val,series, v como entero;

Escribir 'Introduzca el número de elementos del arreglo:';

Leer nelem;

Dimension series[100];

val<-1;

Mientras val <= nelem Hacer

series[val] = val^2;

val<-val+1;

FinMientras

v<-1;

Mientras v <= nelem Hacer

Escribir Sin Saltar " ",series[v];

v<-v+1;

FinMientras

FinProceso

Page 13: UNIDAD V: ARREGLOS UNIDIMENSIONALES...Unidad V: Arreglos Unidimensionales 6 Por ejemplo, si definimos un arreglo llamado array con un tamaño de tres elementos como se muestra a continuación:

Unidad V: Arreglos Unidimensionales

13

EJERCICIOS PROPUESTOS:

1. Escribir un pseudocódigo que dado un array de enteros, su longitud n y un valor k, devuelva el elemento que se halla en la k-ésima posición. Considerar el caso en que k > n.

2. Escribir un pseudocódigo que dado un array y su longitud, devuelva el

elemento máximo, la cantidad de veces que se repite y la/s posición/es que ocupa.

3. Realice un pseudocódigo que permita leer dos arrays de 10 elementos

cada uno e imprimir la palabra IGUALES si ambos arrays son iguales y DIFERENTES si no los son. Tomar en cuenta que serán iguales si en la misma posición de ambos arrays se encuentra el mismo elemento.

4. Realice un pseudocódigo que al recibir como datos dos arreglos

bidimensionales enteros, calcule la suma del arreglo 1 más la traspuesta de arreglo 2 y almacene el resultado en otro arreglo bidimensional.

5. Escribir un pseudocódigo que lea una matriz de N filas y M columnas de

valores enteros. A continuación, debe pedir el número de una fila (Recuerde validar dicho dato). El pseudocódigo deberá devolver el mayor elemento de esa fila.

6. El instituto de Turismo de León almacena información sobre el número

de visitantes mensuales de los 15 principales centros turísticos. Realice un pseudocódigo que proporcione la siguiente información:

a. El total de visitantes a cada uno de los centros turísticos. b. Cuál fue el centro turístico más visitado en el mes de Febrero. c. El mes con mayor afluencia turística junto con el número de visitantes.