Sei sulla pagina 1di 16

PROGRAMACIÓN POR COMPUTADORA   (INTRODUCTORIO)

III. ELEMENTOS DEL LENGUAJE

ARREGLOS

Arreglos

Introducción

En muchas situaciones se necesita procesar una colección de valores que están


relacionados entre sí por algún método, por ejemplo, una lista de
calificaciones, una serie de temperaturas medidas a lo largo de un mes, etc. El
procesamiento de tales conjuntos de datos, utilizando datos simples, puede ser
extremadamente difícil y por ello la mayoría de los lenguajes de programación
incluyen características de estructuras de datos.

Un arreglo, es una secuencia de posiciones de la memoria central a las que se


puede acceder directamente, que contiene datos del mismo tipo y pueden ser
seleccionados individualmente mediante el uso de subíndices.

1
Los tipos de datos más frecuentes utilizados en los diferentes lenguajes de
programación son:

Datos simples Estándar Entero


Real
Cadena
Lógico

Definido por el programador subrango


enumerativo

datos estructurados Estáticos Arreglos


Archivos
Registros
Conjuntos

Dinámicos Listas (pilas/colas)


Listas enlazadas
Arboles
Grafos

Los tipos de datos simples pueden ser organizados en diferentes estructuras de


datos: estáticas y dinámicas. Las estructuras de datos estáticas son aquellas en
las que el tamaño ocupado en memoria se define antes de que el programa se
ejecute y no puede modificarse dicho tamaño durante la ejecución del
programa.

Las estructuras de datos dinámicas no tienen las limitaciones o restricciones en


el tamaño de memoria ocupada. Mediante el uso de un tipo de datos
específico, denominado puntero, es posible construir estructuras de datos
dinámicas que son soportadas por la mayoría de los lenguajes.

Arreglos unidimensionales (vectores)

Un arreglo es un conjunto finito y ordenado de elementos homogéneos, es


decir, del mismo tipo de datos.

El tipo más simple de arreglo es el unidimensional, también denominado


vector. Un vector denominado NOTAS que consta de n elementos se puede
representar como:

NOTAS(1), NOTAS(2), NOTAS(3), ……. NOTAS(I), ……….. NOTAS(N)

2
El subíndice o índice de un elemento (1,2, 3, … , i, … n) designa su posición en
la ordenación del vector.

El valor mínimo permitido de un vector se denomina límite inferior del vector


(L) y el valor máximo permitido se denomina límite superior (U). Por ejemplo
un vector TEMPERATURAS el límite inferior es 1 y el superior 24.

TEMPERATURAS(I) donde 1 <= I <= 24

El número de elementos de un vector se denomina rango del vector. El rango


del vector A(L:U) es . El rango del vector B(1:n) es .
U‐L+1 n

Otro ejemplo de un vector pueden ser los nombres de los alumnos de una
clase. El vector se denomina ALUMNOS y tiene treinta elementos de rango.

ALUMNOS
1 Francisco
2 José
3 Victoria

i Elisa

30 Blanca

Cada elemento de un vector se puede procesar como si fuese una variable


simple al ocupar una posición de memoria. Por ejemplo:

NUMEROS(25)  72

almacena el valor entero o real 72 en la posición 25 del vector NUMEROS

3
Operaciones con vectores

El límite inferior no tiene por qué empezar en uno. El vector L

L(0), L(1), L(2), L(3), L(4), L(5)

contiene seis elementos, en el que el primer elemento comienza en el


subíndice cero. El vector P, cuyo rango es 7 y sus límites inferior y superior son ‐
3 y 3, es:

P(‐3), P(‐2), P(‐1), P(0), P(1), P(2), P(3)

Las operaciones que se pueden realizar con vectores durante el proceso de


solución de un problema son:

• asignación
• lectura/escritura
• recorrido (acceso secuencial),
• actualizar (añadir, borrar, insertar),
• ordenación,
• búsqueda.

En general, las operaciones con vectores implican el procesamiento de los


elementos individuales del vector.

Las notación algorítmica que se utiliza para declarar arreglos es:

Tipo
arreglo [liminf .. limsup] de tipo : nombre_arreglo

donde
liminf. . limsup límites inferior y superior del rango del arreglo
tipo tipo de datos de los elementos del arreglo: entero,
real, carácter.
nombre_arreglo nombre válido del arreglo

Ejemplo:

Tipo
arreglo [1..10] de cadena: Nombres
Var
Nombres: N

significa que NOMBRES es un arreglo unidimensional de diez elementos (1 a


10) de tipo carácter

4
Asignación

La asignación de valores a un elemento del vector se realizará con la


instrucción de asignación:

A(20)  5 asigna el valor 5 al elemento 20 del vector A

Si se desea asignar valores a todos los elementos de un vector, se debe recurrir


a estructuras repetitivas (desde, mientras o hacer‐mientras).

Leer (A(i))

Si se introducen los valores 5, 7,8, 14 y 2 mediante asignaciones

A(1)  5
A(2)  7
A(3)  8
A(4)  14
A(5)  2

Lectura/escritura de datos

La lectura/escritura de datos en arreglos u operaciones de entrada/salida


normalmente se realizan con estructuras repetitivas. Las instrucciones simples
de lectura/escritura se representarán como:

leer(V(5))                    leer el elemento 5 del vector v

Acceso secuencial al vector (recorrido)

Se puede acceder a los elementos de un vector para introducir datos en él o


bien para visualizar su contenido. A la operación de efectuar una acción
general sobre todos los elementos de un vector se la denomina recorrido del
vector. Estas operaciones se realizan utilizando estructuras repetitivas, cuyas
variables de control (por ejemplo, i) se utilizan como subíndices del vector.

5
Arreglos de varias dimensiones

Existen grupos de datos que son representados mejor en forma de tabla o


matriz con dos o más subíndices. Ejemplos típicos de tablas o matrices son:
tablas de distancias kilométricas entre ciudades, cuadros horarios de trenes o
aviones, informes de ventas periódicas, etc. Se pueden definir tablas o matrices
como arreglos multidimensionales, cuyos elementos se pueden referenciar por
dos, tres o más subíndices.

Arreglos bidimensionales

El arreglo bidimensional es un conjunto de elementos, todos del mismo tipo,


en el que se necesita especificar dos subíndices para poder identificar cada
elemento del arreglo.

Los elementos de un arreglo bidimensional se referencian con dos subíndices:


el primer subíndice se refiere a la fila y el segundo subíndice se refiere a la
columna. Por lo tanto, A(2, 3) se refiere al elemento de la segunda fila, tercera
columna.

Fila 1  
Fila 2  
Fila 3  
Fila 4  
Fila 5  
 
Columna 1 

Columna 2 

Columna 3 

Columna 4 

Columna 5 

Columna 6 

Un arreglo bidimensional B, se considera que tiene dos dimensiones y necesita


un valor para cada subíndice para poder identificar un elemento individual,
B(i,j) es el elemento de B que ocupa la i fila y la j columna, como se indica en la
figura siguiente:

6
  1  2 3 … j … N
1   
2   
…   
i    B(i,j)
…   
m   
 

El arreglo B se dice que tiene M por N elementos. Existen N elementos en cada


fila y M elementos en cada columna (M*N).

En general, se considera que un arreglo bidimensional comienza sus subíndices


en 0 o en 1, pero pueden tener límites seleccionados por el usuario durante la
codificación del algoritmo.

Construcción de funciones

7
Construcción de funciones
La resolución de problemas complejos se facilita considerablemente si se
dividen en problemas más pequeños (subproblemas). Los subalgoritmos
(subprogramas) pueden ser de dos tipos: funciones y procedimientos o
subrutinas.

El método de diseñar la solución de un problema principal obteniendo las


soluciones de sus subproblemas se conoce como diseño descendente .

Considerando el problema del cálculo de la superficie (área) de un rectángulo. 
Este problema se puede dividir en tres subproblemas:

subproblema 1: entrada de datos de altura y base. 
subproblema 2: cálculo de la superficie, 
subproblema 3: salida de resultados.

El algoritmo correspondiente que resuelve los tres subproblemas es:

leer (altura, base) //entrada de datos
área  base * altura //cálculo de la superficie
escribir(base, altura, área) //salida de resultados

La representación gráfica del método descendente se muestra en la siguiente


figura:

El subprograma recibe datos desde el programa principal y le devuelve


resultados. Se dice que el programa principal llama o invoca al subprograma.

Cada vez que el subprograma es llamado, el control retorna al lugar desde


donde fue hecha la llamada.

8
Un subprograma puede llamar a su vez a sus propios subprogramas.

Funciones

Matemáticamente una función es una operación que toma uno o más valores
llamados argumentos y produce un valor denominado resultado. Todos los
lenguajes de programación tienen funciones incorporadas, intrínsecas o
internas, y funciones definidas por el usuario. Por ejemplo:

x
f ( x) 
1 x2
Donde f es el nombre de la función y x es el argumento.

Una función puede tener varios argumentos. Por ejemplo:

x y
f ( x, y) 
x y
es una función con dos argumentos. Sin embargo, solamente un único valor se
asocia con la función.

9
Cada función se evoca utilizando su nombre en una expresión con los
argumentos actuales o reales encerrados entre paréntesis.

Las funciones son diseñadas para realizar tareas especificas: toman una lista de
valores llamados argumentos y devuelven un único valor.

Declaración de funciones

Una función como tal subalgoritmo, constará de una cabecera que comenzará
con el tipo del valor devuelto por la función, seguido de la palabra función y
del nombre y argumentos de dicha función. A continuación irá el cuerpo de la
función, que será una serie de acciones o instrucciones cuya ejecución hará
que se asigne un valor al nombre de la función.

La declaración de la función será:

<tipo_de_resultado> función <nombre_fun> (lista de parámetros)


[declaraciones locales]
inicio
<acciones> //cuerpo de la función
devolver (<expresión>)
fin_funcion

donde

tipo_de_resultado tipo del resultado que devuelve la función.


nombre_func nombre asociado con la función, que será un nombre de
identificador válido.
lista de parámetros lista de parámetros formales o argumentos, con uno o más
argumentos de la siguiente forma:
({E|S|E/S} tipo_de_datoA: parámetro 1[, parámetro 2]…;
{E|S|E/S} tipo_de_datoB: parámetro x[, parámetro y]…)
<acciones> instrucciones que constituyen la definición de la función y que debe
contener una única instrucción: devolver (<expresión>); expresión
sólo existe si la función se ha declarado con valor de retorno y
expresión es el valor devuelto por la función.

10
Sentencia devolver (return)

La sentencia devolver (return) se utiliza para regresar de una función; devolver


hace que el control del programa se transfiera al llamador de la función
(método).

Por ejemplo, la función:

x
f ( x) 
1 x2

Se definirá como:

real función F(E real:x)


inicio
devolver (x/(l+x^2))
fin_función

Para que las acciones descritas en un subprograma función sean ejecutadas, se


necesita que éste sea invocado desde un programa principal o desde otros
subprogramas a fin de proporcionarle los argumentos de entrada necesarios
para realizar esas acciones.

Los argumentos de la declaración de la función se denominan parámetros


formales ó ficticios; son nombres de variables, de otras funciones o
procedimientos y que sólo se utilizan dentro del cuerpo de la función. Los
argumentos utilizados en llamada a la función se denominan parámetros
actuales.

Invocación a las funciones

Una función puede ser llamada de la forma siguiente:

nombre_función (lista de parámetros actuales)

donde
nombre_función función que llama
Lista de parámetros actuales constantes, variables, expresiones,
valores de funciones, nombres de
funciones o procedimientos.

11
Cada vez que se llama a una función desde el algoritmo principal se establece
automáticamente una correspondencia entre los parámetros formales y los
parámetros actuales. Debe haber exactamente el mismo número de pará‐
metros actuales que de parámetros formales en la declaración de la función y
se presupone una correspondencia uno a uno de izquierda a derecha entre
estos.

Una llamada a la función implica los siguientes pasos:

1. A cada parámetro formal se le asigna el valor real de su correspondiente 
parámetro actual.
2. Se ejecuta el cuerpo de acciones de la función.
3. Se devuelve el valor de la función y se retorna al punto de llamada.

Formato para escribir una función en Matlab

function [lista de valores de retorno]=name(lista de argumentos)


algoritmo

donde name es el nombre de la función. Entre corchetes y separados por


comas van los valores de retorno (siempre que haya más de uno), y entre
paréntesis también separados por comas los argumentos. Puede haber
funciones sin valor de retorno y también sin argumentos. Recuérdese que los
argumentos son los datos de la función y los valores de retorno sus
resultados. Si no hay valores de retorno se omiten los corchetes y el signo
igual (=); si sólo hay un valor de retorno no hace falta poner corchetes.
Tampoco hace falta poner paréntesis si no hay argumentos.

12
Procedimientos

Con frecuencia se requieren subprogramas que calculen varios resultados en


vez de uno solo. En estas situaciones la función no es apropiada y se necesita
disponer del otro tipo de subprograma.

Un procedimiento o Subrutina es un subprograma que ejecuta un proceso


específico. Ningún valor está asociado con el nombre del procedimiento; por lo
tanto, no puede ocurrir en una expresión. Un procedimiento se llama
escribiendo su nombre.

La declaración de un procedimiento es similar a la de funciones.

procedimiento nombre[(lista de parámetros formales)]


<acciones>
fin_procedimiento

Los parámetros formales tienen el mismo significado que en las funciones.

El procedimiento se llama mediante la instrucción

[llamar_a] nombre [(lista de parámetros actuales)]

La palabra llamar_a (call) es opcional y su existencia depende del lenguaje de


programación.

Cuando se llama al procedimiento, cada parámetro formal toma como valor


inicial el valor del correspondiente parámetro actual.

Diferencia entre Procedimientos y funciones

• Un procedimiento es llamado desde el algoritmo o programa principal


mediante su nombre y una lista de parámetros actuales, o con la instrucción
llamar_a (call).
• Las funciones devuelven un valor, los procedimientos pueden devolver 0, 1
ó n valores y en forma de lista de parámetros.
• El procedimiento se declara igual que la función, pero su nombre no está
asociado a ninguno de los resultados que obtiene.

13
Ámbito: variables locales y globales

Las variables utilizadas en los programas principales y subprogramas se 
clasifican en dos tipos:
• variables locales;
• variables globales.

Una variable local es aquella que está declarada y definida dentro de un


subprograma, y es distinta de las variables con el mismo nombre declaradas en
cualquier parte del programa principal.

Una variable global es aquella que está declarada para el programa o algoritmo
principal, del que dependen todos los subprogramas.

La parte del programa/algoritmo en que una variable se define se conoce como


ámbito o alcance.

La figura siguiente muestra un esquema de un programa con diferentes


procedimientos, algunas variables son locales y otras globales.

Las variables definidas en un ámbito son accesibles en el mismo, es decir, en


todos los procedimientos interiores

14
Comunicación con subprogramas: paso de parámetros

Cuando un programa llama a un subprograma, la información se comunica a


través de la lista de parámetros y se establece una correspondencia automática
entre los parámetros formales y actuales. Los parámetros actuales son
"sustituidos" en lugar de los parámetros formales.

Existen dos métodos para establecer la correspondencia de parámetros:

1. Correspondencia posicional. La correspondencia se establece aparejando


los parámetros reales y formales según su posición en las listas: así, Fi se
corresponde con Ai donde i = 1, 2, …,n.
2. Correspondencia por el nombre explícito, también llamado método de paso
de parámetros por nombre. En este método, en las llamadas se indica
explícitamente la correspondencia entre los parámetros reales y formales.
Este método se utiliza en Ada.

Paso de parámetros

Existen diferentes métodos para la transmisión o el paso de parámetros a


subprogramas. Los más empleados para realizar el paso de parámetros son:

• paso por valor (también conocido por parámetro valor),
• paso por referencia o dirección (también conocido por parámetro variable),
• paso por nombre,
• paso por resultado.

Paso por valor

Los parámetros se tratan como variables locales y los valores iniciales se


proporcionan copiando los valores de los correspondientes argumentos.

15
El mecanismo de paso por valor de un procedimiento con tres parámetros es el
siguiente:

A5
B7
llamar a PROC1(A, 18, B * 3 + 4)

5 18 25

Procedimiento PROC1 (E entero: X, Y, Z)

Los valores 5, 18 y 25 se transforman en los parámetros X, Y, Z respectivamente 
cuando se ejecuta el procedimiento.

Aunque el paso por valor es sencillo, tiene una limitación: no existe ninguna
otra conexión con los parámetros actuales, y entonces los cambios que se
produzcan por efecto del subprograma no producen cambios en los
argumentos originales y, por lo tanto, no se pueden pasar valores de retorno al
punto de llamada: es decir, todos los parámetros son sólo de entrada.

Paso por referencia

En ocasiones se requiere que ciertos parámetros sirvan como parámetros de


salida, es decir, se devuelvan los resultados a la unidad o programas que llama.
Una variable pasada como parámetro real es compartida, es decir, se puede
modificar directamente por el subprograma.

En este método los parámetros son de entrada/salida y los parámetros se


denominan parámetros variables.

En lenguajes como Pascal, los parámetros variables deben ir precedidos por la


palabra clave var.

La llamada por referencia es muy útil para programas donde se necesita la


comunicación del valor en ambas direcciones.

16

Potrebbero piacerti anche