Académique Documents
Professionnel Documents
Culture Documents
Ejemplo 4.1
Se tienen los sueldos de un grupo de 70 empleados de una empresa y necesitamos saber cuntos de estos empleados tienen un sueldo superior al promedio del grupo. Cmo podramos resolver este problema? A continuacin presentamos la primera solucin. DQOS: Si, 82,..., Syo Donde: Si representa el sueldo del empleado i.
176
4.1 Introduccin
177
Como necesitamos saber cuntos empleados ganaron un sueldo superior al promedio, se tuvieron que volver leer los 70 sueldos para comparar cada uno de ellos con el promedio.
Nota:
Variable de tipo entero. Representa la variable de control del ciclo. Variable de tipo real. Variable de tipo real. Acumula los sueldos de los empleados. Variable de tipo real. Almacena el promedio de los sueldos. Variable de tipo entero. Se utiliza para contar cuntos sueldos son superiores al promedio.
En la tabla 4.1. podemos observar el seguimiento del diagrama de flujo. Por razones de practicidad en lugar de considerar 70 sueldos, consideraremos solamente 5.
Tabla 4.1
1 1
2
3 4 5 6 1 2 3 4 5 6
AC 0
PROM
COMT
1200.00
3950.00
1200.00 2750.00
3625.00
Expresa el valor que se imprime. El Diagrama de flujo 4.1 en lenguaje algortmico, se expresa de esta forma:
178
Programa 4.1
DOBLE LECTURA {E programa resuelve el problema planteado en el ejemplo 4.1 por medio de una doble lectura. I y COhT son variables de tipo entero. 5, AC y PROM son variables de tipo real}.
1 1. Hacer AC - O e l 2. Repetir con desde 1 hasta 70 Leer 5 Macer AC AC + 5 e I 3. {Fin del ciclo del paso 2} 4. Macer PROM AC/70, COMT Oe 5. Repetir con ! desde 1 hasta 70 Leer 5 5.1 5/ 5 > PROM entonces Hacer COMT COMT + 1 5.2 {n del condicional del paso 5.1.} hacer I I+ 1 6. {Fin del ciclo del paso 5} 7. Escribir COMT.
Ejemplo 4.2 j^ A continuacin presentamos la segunda solucin. Datos: S1,S2, S3,S4,..., S70 Donde: SI, S2, S3, S4, ... , S70 son variables de tipo real que representan los sueldos de los 70 empleados de la empresa.
-.1 Introduccin
179
CONTo
51, 5Z, 53, 54, ..., 570
AC51+52+53+54+... + 570
PROM AC/70
180
Explicacin de las variables:
Variable de tipo entero. Se utiliza para contar los sueldos que son superiores al promedio. Variable de tipo real. Se utiliza para almacenar la suma de los 70 sueldos. Variable de tipo real. Se utiliza para almacenar el promedio de los 70 sueldos.
MUCHA5 VARIABLES {El programa resuelve el problema planteado en el ejemplo 4.1, utilizando muchas variables} {COMT es una variable de tipo entero. AC, PROM, 51, 52, 53, ..., 570 son variables de tipo real} 1. hacer COhT < O 2. Leer51, 52, 53, 54,..., 570
3. hacer AC
51 + 52 + 53 + 54 .+ 570
PROM
AC/70
4. 5i 51 > PROM entonces hacer COHT COMT + 1 5. {Fin del condicional del paso 4} 6. 5i 52 > PROM entonces hacer CONT COMT + 1 7. {n del condicional del paso 6} 8. 5/ 53 > PROM entonces hacer COHT COhT + 1 9. {Fin del condicional del paso 8} 142. 5/ 570 > PROM entonces Hacer COhT COhT + 1 143. {n del condicional del paso 142} 144. Escribir COhT
Las dos soluciones son muy representativas de los inconvenientes a los que debemos enfrentarnos al tratar de resolver el problema utilizando tipos simples de datos. En la solucin planteada en el diagrama de flujo 4.1 el usuario del algo-
- _i Arreglos unidimensionales
181
-_mo debe ingresar dos veces el conjunto de datos. Esto resulta totalmente im: rctico (considere que e nmero de datos puede ser mayor que 70) y adems - eficiente (la operacin de lectura ya sea de manera interactiva con el usuafio o :=sde un archivo debe repetirse', lo que ocasiona prdida de tiempo). En la solucin planteada en el diagrama de flujo 4.2. se manejan 70 variables -: r. memoria. Esta solucin presenta el inconveniente de que el manejo de las vstales puede volverse incontrolable, si el nmero de las mismas crece consideradamente. Adems algunos pasos especificados en el algoritmo se repiten ya que - D pueden generalizarse. Esta caracterstica no slo ocasiona ms trabajo, sino -^mbin es causa de errores. Es sabido que ejecutar una tarea repetidamente (en -3ie caso escribir un mismo paso varias veces) quita inters a la accin que se .si llevando a cabo, lo que a su vez ocasiona errores. Puede observarse enton:es, que ninguna de las dos soluciones resulta prctica y eficiente. Es necesario _in nuevo tipo de datos que permita tratar estos problemas de una manera ms adecuada. Los tipos de datos estructurados que ayudan a resolver problemas :3rno ste son los arreglos.
Segundo elemento Figura 4.1 Primer elemento Representacin de arreglos. l-simo elemento
Un arreglo tiene la caracterstica de que puede almacenar a N elementos del mismo tipo y adems permite el acceso a cada uno de estos elementos. As, se distinguen dos partes en los arreglos:
Los componentes hacen referencia a los elementos que componen o forman el arreglo. Es decir, son los valores que se almacenan en cada una de sus casillas. Los ndices, por otra parte, son los que permiten accesar a los componentes del arreglo en forma individual. Para hacer referencia a un componente de un arreglo se necesita: el nombre del arreglo. el ndice del elemento. En la figura 4.2 representamos un arreglo y se indican sus componentes y sus ndices.
Arreglo componentes '
F
'
:*
5n val n ndice
51
52 val
~
55 val
3
val 1
Figura 4.2
4.2.1
Definicin de arreglos
Como no es nuestra intencin seguir la sintaxis de algn lenguaje de programacin en particular, definimos un arreglo de la siguiente manera: ident_arreglo - ARREGLO [lminf.. lmsup] DE tipo Con los valores lminf y lmsup se declara el tipo de los ndices as como el nmero de elementos que tendr el arreglo. El nmero total de elementos (NTE) que tendr el arreglo puede calcularse con la frmula 4.1:
F^^""^
183
Con tipo se declara el tipo de datos para todos los elementos del arreglo. El tipo de los elementos no tiene que ser necesariamente el mismo que el de los ndices. Observaciones: a) El tipo del ndice puede ser cualquier tipo ordinal (carcter, entero, etc.). b) El tipo de los componentes puede ser cualquier tipo (entero, real, cadena de caracteres, registro, arreglo, etc.). c) Se utilizan los corchetes "[]" para indicar el ndice de un arreglo. Entre los [] se debe escribir un valor ordinal (puede ser una variable, una constante o una expresin tan compleja como se quiera, pero que d como resultado un valor ordinal). Se vern a continuacin algunos ejemplos de arreglos:
Ejemplo 4.3
Sea ARRE un arreglo de 70 elementos enteros con ndices enteros. Su representacin queda como se muestra en la figura 4.3.
ARRE - ARREGLO [1. .70] DE enteros
ARRE
70 Figura 4.3
NTE = (70-1 + 1) = 70 Cada elemento del arreglo ARRE ser un nmero entero y podr accesarse por medio de un ndice que ser un valor comprendido entre 1 y 70.
As por ejemplo: ARREfl] hace referencia al elemento de la posicin 1. ARRE[2] hace referencia al elemento de la posicin 2. ARRE[70]hace referencia al elemento de la posicin 70.
184
Ejemplo 4.4
Consideremos el arreglo de enteros del ejemplo anterior. Suponiendo que el lmite inferior es igual a -13 y el lmite superior igual a 56, su representacin queda como se muestra en la figura 4.4.
= ARREQLO[-13...56]DE enteros
-15
Figura 4.4
-12
-11
56
NTE = (56-{-13) + l) = 70 Cada elemento del arreglo ser un nmero entero y podr accesarse por medio de un ndice que ser un valor comprendido entre -13 y 56. As por ejemplo: ARRE[-13] hace referencia al primer elemento del arreglo. ARRE[-12] hace referencia al segundo elemento del arreglo. ARRE[1] hace referencia al decimoquinto elemento del arreglo. ARRE[56] hace referencia al ltimo elemento del arreglo. 4.2.2 Operaciones con arreglos A continuacin se presentan las operaciones ms comunes en arreglos: Lectura/Escritura. Asignacin. Actualizacin: Insercin. Eliminacin. Modificacin. Ordenacin. Bsqueda. Como los arreglos son datos estructurados, muchas de estas operaciones no pueden llevarse a cabo de manera global, sino que se debe trabajar sobre cada elemento. A continuacin se analizar cada una de estas operaciones. Ordenacin y bsqueda, sern analizadas en los problemas que presentaremos posteriormente.
185
El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada uno de sus elementos. Supngase que se desea leer todos los elementos del arreglo ARRE presentado en el ejemplo 4.3, en forma consecutiva. Podra hacerse de la siguiente manera: LeerARRE[l], LeerARRE[2], LeerARRE[70] De esta forma no resulta prctico, por lo tanto se usar un ciclo para leer todos los elementos del arreglo.
ARRE[1], ARRE[2], . . . ,ARRE[70]
hacer I 1 Repetir con ! desde 1 hasta 70 Leer ARRE[I] Hacer I !+ 1 {Fin del ciclo}
Al variar el valor de I, cada elemento ledo se asigna al correspondiente componente del arreglo segn la posicin indicada por I.