Está en la página 1de 12

1

Material de Estudio

Tema: ESTRUCTURAS DE DATOS ESTATICAS: VECTORES


Profesor : Braulio Barrios - Marzo de 2009

Normalmente, utilizamos VARIABLES para almacenar (en memoria RAM) la informacin que un programa
procesa. Por ejemplo: El CODIGO de un alumno, el NOMBRE, etc. y de acuerdo con esto podemos escribir un
algoritmo que LEA y muestre el cdigo y nombre de un alumno, as:
ALUMNOS
ESCRIBA ( ***** Captura de datos del Estudiante ***** )
ESCRIBA ( Digite Cdigo del Alumno );Lea(CODIGO)
ESCRIBA ( Digite Nombre del alumno ); Lea(NOMBRE)
ESCRIBA ( ****** Ahora Mostrar un INFORME de datos ledos ***** )
ESCRIBA ( Cdigo : , CODIGO)
ESCRIBA ( Nombre : , NOMBRE)
FIN ALGORITMO ALUMNOS

Observe bien el anterior algoritmo, fjese que UNICAMENTE podemos introducir y mostrar la informacin de UN alumno a la vez.

Pero la realidad es otra, es decir, se requiere procesar la informacin de VARIOS alumnos, por ejemplo, en el
curso de estructuras de datos hay matriculados aproximadamente 15 estudiantes en cada grupo. Que pasara si
quisiramos introducir los CODIGOS y NOMBRES de TODOS los alumnos?. Podramos pensar en re-escribir el
anterior algoritmo utilizando entonces un CICLO REPETITIVO (Remtase a la leccin: FUNDAMENTOS DE
ALGORITMOS Y PROGRAMACIN ESTRUCTURADA ), por ejemplo, un ciclo PARA (Hacer Hasta) as:

ALUMNOS_VERSION2.0
ESCRIBA ( **** Captura de datos del Estudiante ***** )
PARA I  1 Hasta 15 Haga
ESCRIBA ( Digite Cdigo del Alumno ); Lea(CODIGO)
ESCRIBA ( Digite Nombre del alumno ); Lea(NOMBRE)
ESCRIBA ( **** Ahora Mostrar un INFORME de datos ledos **** )
ESCRIBA ( Cdigo : , CODIGO)
ESCRIBA ( Nombre : , NOMBRE)
FPARA
FIN ALGORITMO ALUMNOS

Este algoritmo evidentemente procesa la informacin de los 15 alumnos pero tiene una falla, y es que al final del
proceso ( por fuera del ciclo PARA) no podramos hacer un informe que incluya los CODIGOS y NOMBRES de
TODOS los alumnos cuya informacin se proces, ya que cuando digitemos el CODIGO y el NOMBRE del segundo
alumno entonces esta nueva informacin SOBREESCRIBE a la primera, y al escribir la del tercer alumno se
SOBREESCRIBE la del segundo y as sucesivamente, es decir, se BORRA el CODIGO y el NOMBRE del anterior
estudiante; La razn: Dos datos NO pueden convivir simultneamente en la misma posicin de memoria, es decir,
NO podemos resolver el problema con el enfoque que hemos planteado. Entonces, la solucin es: NO UTILIZAR
VARIABLES SIMPLES, sino una ESTRUCTURA DE DATOS para cada dato del alumno, esa ESTRUCTURA DE DATOS es un
VECTOR
Una estructura de datos es una organizacin de informacin dispuestos de manera lgica y coherente, de tal
manera que se facilite el acceso a los datos que contiene.
Segn el dispositivo de almacenamiento, las Estructuras de Datos se clasifican en: ESTRUCTURAS EN MEMORIA
PRINCIPAL y ESTRUCTURAS EN DISCO DURO. Por su parte, las Estructuras en Memoria RAM pueden clasificarse
en dos grupos: ESTATICAS y DINAMICAS.
El trmino ESTATICA hace referencia a que una vez se halla definido el tamao de la estructura de datos este NO
puede ser cambiado mientras se est ejecutando el programa (No se puede Ampliar Ni tampoco Reducir ).
VECTOR DE DATOS: Es una estructura esttica que consiste en un conjunto de elementos que satisfacen lo
siguiente:




DEBE DIMENSIONARSE PREVIAMENTE


TODOS LOS ELEMENTOS SON DE IGUAL TIPO
LOS ELEMENTOS SE ALMACENA EN POSICIONES CONSECUTIVAS DE MEMORIA RAM

QUE ES DIMENSIONAR UN VECTOR ? es una accin que consiste en RESERVAR el tamao que el vector ocupar
en memoria, es decir, cual es la cantidad MAXIMA de elementos que tendr el vector. Esta cantidad MAXIMA de
elementos la deducimos segn el problema que estemos resolviendo; por ejemplo: Si deseo almacenar los

CODIGOS de todos los alumnos de la clase y son aproximadamente 15 alumnos entonces lo aconsejable
es reservar en memoria (Dimensionar) espacio para un poco mas de esos elementos, digamos 20, es
decir, un poco por encima de la cantidad de alumnos que hay pero sin exceso. Para ello, simplemente
escribiremos en los algoritmos la siguiente sentencia:
Dimensionar CODIGOS[20] de Enteros Largos
Dimensionar NOMBRES[20] de Cadenas de caracteres [50] cada una
TODOS LOS ELEMENTOS SON DE IGUAL TIPO: Es algo obvio, puesto que cada TIPO de datos ocupa, como
hemos dicho en clase, cierto numero de bytes, entonces, NO ES POSIBLE mezclar distintos tipos de datos en un
vector: O todos son enteros cortos todos son caracteres, todos son enteros largos, todos son decimales, etc.

LOS ELEMENTOS SE ALMACENAN EN POSICIONES CONSECUTIVAS DE RAM: Puesto que el sistema hace la
reserva de memoria para el vector o la matriz como un solo bloque de bytes, entonces los elementos se guardan
en el vector o matriz uno a continuacin de otro.

COMO SE DECLARA UN VECTOR EN LENGUAJE PASCAL ?


En PASCAL un vector se declara como una variable, de la siguiente manera:

Var
Vector : Array [1 .. Max] OF Tipo_dato ;
Donde Tipo_dato corresponde a uno de los definidos en PASCAL ( integer, char, string, double),
MAX es la cantidad mxima de datos que se almacenaran en el vector (Obligatoriamente debe ser EL
NOMBRE DE UNA CONSTANTE o en su defecto un VALOR).

Ejemplo: DECLARAR LOS VECTORES: NOMBRES Y CODIGOS


long CODIGOS [20];
char NOMBRES [20][80];

Observe que el vector NOMBRES se est declarando de tamao 20 (mximo almacenar 20 nombres)
y va acompaado de un corchete y un tamao de 80; esto significa que, a su vez, cada nombre tendr
Mximo 80 caracteres.
Grficamente podemos representar estos dos vectores como sigue:

CODIGOS
1

2000015

NOMBRES
1

MATEO BARRIOS

ANA LUISA GONZALEZ

LINA PAOLA OATE.

2000
2

2000020
2000032

20

20

ALGORITMO PARA INTRODUCIR DATOS A UN VECTOR:


Es necesario aclarar que el hecho de haber DIMENSIONADO un vector de un tamao determinado NO
implica que de entrada deban introducirse esa cantidad de elementos al vector (El resto puede ser
AGREGADO mas adelante simplemente no ser utilizado ese espacio), por lo tanto, as hayamos
dimensionado nuestros dos vectores de tamao 20 le pediremos al usuario de la aplicacin que decida
cuantos datos realmente desea cargar y llamaremos NEL (Nmero de Elementos) a esta variable. Por
supuesto no se permitir que esta variable EXCEDA a la Dimensin que hemos dado previamente a
nuestro vector. Utilizaremos entonces un ciclo repetitivo desde 1 hasta NEL y vamos pidiendo y leyendo
cada dato.
LLENAR_DATOS
ESCRIBA ( ***** Captura de datos del Estudiante ***** )
ESCRIBA ( Cuantos Alumnos ? ); Lea(NEL)
SI (NEL < 0) OR (NEL > 20 ) Ent
ESCRIBA ( ERROR, RECTIFIQUE EL NUMERO DE ELEMENTOS A INTRODUCIR )
SINO
PARA I  1 HASTA NEL Haga
ESCRIBA ( Digite Cdigo del Alumno ); Lea( CODIGO [I] )
ESCRIBA ( Digite Nombre del alumno ); Lea( NOMBRE [I] )
FIN PARA
FIN SI

FIN LLENAR_DATOS

Podemos tambin utilizar otra estructura repetitiva y otro estilo de captura de informacin que NO
implique conocer de antemano cuantos elementos se introducirn al vector sino que vamos validando
uno a uno la cantidad de datos que se van introduciendo, con lo cual tendremos otra VERSION del
mismo algoritmo, como se ilustra a continuacin.
LLENAR_DATOS(2.0)
NEL  0 ; Mas  S
MQ (Mas = S ) and (NEL <= 20)
ESCRIBA ( **** Captura de datos del Estudiante **** )
NEL  NEL + 1
ESCRIBA ( Digite Cdigo del Alumno ); Lea ( CODIGO [NEL] )
ESCRIBA ( Digite Nombre del alumno ); Lea( NOMBRE [NEL] )
ESCRIBA ( Desea seguir Introduciendo Informacin de Alumnos ? ); Lea(MAS)

FIN MQ
SI (NEL > 20) Ent
ESCRIBA ( ERROR, Ya los vectores estn llenos, no caben mas elementos )
SINO
ESCRIBA ( OK. Se capturaron los datos de los alumnos correctamente . )
FIN SI

FIN LLENAR_DATOS2.0
Por supuesto, puedo utilizar la TERCERA estructura de control repetitiva de la Programacin
Estructurada y obtener una versin 3.0 del mismo algoritmo, tal y como se ilustra a continuacin

LLENAR_DATOS(3.0)
NEL  1 ;
REPITA (Mas = S ) and (NEL <= 20)
ESCRIBA ( **** Captura de datos del Estudiante ***** )
ESCRIBA ( Digite Cdigo del Alumno ); Lea( CODIGO [NEL] )
ESCRIBA ( Digite Nombre del alumno ); Lea( NOMBRE [NEL] )
NEL  NEL + 1
ESCRIBA ( Desea seguir Introduciendo Informacin de Alumnos ? ); Lea(MAS)

HASTA ((Mas = N ) OR (NEL >= 20) )


SI (NEL > 20) Ent
ESCRIBA ( ERROR, Ya los vectores estn llenos, no caben mas elementos )
SINO
ESCRIBA( OK. Se capturaron los datos de los alumnos correctamente . )
FIN SI

FIN LLENAR_DATOS3.0

Ahora bien, como hemos notado, por lo general las tareas sobre un vector requieren de un ciclo
repetitivo que vaya desde 1 hasta NEL para ir procesando los datos del vector. As, por ejemplo, si nos
piden un INFORME de alumnos que incluya CODIGO y NOMBRE de estos, podemos recorrer los dos
vectores e ir escribiendo en pantalla los datos de cada posicin de cada vector, as:
INFORME_DE_ALUMNOS
ESCRIBA(****** DATOS DE LOS ESTUDIANTES * ***** )
PARA I  1 HASTA NEL Haga
ESCRIBA ( CODIGO [I] , NOMBRE [I] )
FIN PARA

FIN LLENAR_DATOS

ALGORITMO PARA AGREGAR DATOS A UN VECTOR:


Para AGREGAR un nuevo alumno a estos vectores se deben seguir normalmente estos pasos:
1. VERIFICAR SI HAY AUN ESPACIO EN EL VECTOR (QUE NEL NO SEA MAYOR QUE 20)
2. SI HAY ESPACIO ENTONCES LEER LOS DATOS DEL ALUMNO (CODIGO, NOMBRE, ETC)
Y ALMACENARLOS EN LA POSICIN NEL+1 DE CADA VECTOR Y LUEGO SUMAR 1 A NEL
PARA INDICAR QUE YA HAY UN ELEMENTO MAS EN LOS VECTORES
3. SI NO HAY ESPACIO ENTONCES MOSTRAR UN MENSAJE INDICANDO ESTO

Veamos la primera versin del algoritmo.

AGREGAR_DATOS
Mas  S
MQ (Mas = S ) AND (NEL < 20)
ESCRIBA ( **** Agrega datos del Estudiante **** )
SI NEL < 20 ENT
ESCRIBA ( Digite Cdigo del Alumno ); Lea ( CODIGO [NEL+1] )
ESCRIBA ( Digite Nombre del alumno ); Lea( NOMBRE [NEL+1] )
NEL  NEL + 1
SINO
ESCRIBA ( Los vectores estn llenos, No se admiten mas alumnos . );
FSI
ESCRIBA ( Desea seguir Introduciendo Informacin de Alumnos ? ); Lea(MAS)

FIN MQ
FIN AGREGAR_DATOS

Veamos otra versin (2.0) de este mismo algoritmo.

AGREGAR_DATOS Ver 2.0


REPITA
ESCRIBA ( **** Agrega datos del Estudiante **** )
SI NEL < 20 ENT
ESCRIBA ( Digite Cdigo del Alumno ); Lea ( CODIGO [NEL+1] )
ESCRIBA ( Digite Nombre del alumno ); Lea( NOMBRE [NEL+1] )
NEL  NEL + 1
SINO
ESCRIBA ( Los vectores estn llenos, No se admiten mas alumnos . );
FSI
ESCRIBA ( Desea seguir Introduciendo Informacin de Alumnos ? ); Lea(MAS)

HASTA (MAS = N AND NEL >= 20)


FIN AGREGAR_DATOS Ver 2.0

ALGORITMO PARA CONSULTAR DATOS DE UN VECTOR:


Para CONSULTAR la informacin de un alumno de estos vectores se deben seguir normalmente estos
pasos:
1. PREGUNTAR AL USUARIO CUAL ES EL CODIGO DEL ALUMNO QUE DESEA CONSULTAR
2. BUSCAR ESTE CODIGO EN EL VECTOR CORRESPONDIENTE (Esto se hace comparando
El cdigo digitado contra todos los elementos del vector de cdigos y si encuentra coincidencia con alguno entonces guarda en una variable POS la posicin donde lo
encontr).
3. SI lo encontr entonces muestre toda la informacin del alumno
4. Si no lo encontr entonces Muestra un mensaje de error Ese alumno NO est matriculado

CONSULTAR_DATOS
REPITA
ESCRIBA ( **** CONSULTA INFORMACION DE ESTUDIANTES **** )
ESCRIBA ( CODIGO A CONSULTAR ?? ); LEA (CC)
Encontro  N
PARA I  1 Hasta NEL haga
SI CC = CODIGOS [ I ]

ENT

ESCRIBA ( Datos encontrados del Alumno ..)


ESCRIBA ( Cdigo del Alumno : , CODIGO [ I ] )
ESCRIBA ( Nombre del alumno : , NOMBRE [ I ] )
Pos  I
Encontro  S
FSI
FIN PARA
SI Encontro = N Ent
ESCRIBA ( NO est matriculado ese alumno . );
FSI
ESCRIBA ( Desea seguir Consultando Informacin de Alumnos ? ); Lea(MAS)

HASTA (MAS = N )
FIN CONSULTAR_DATOS

Ahora, si NO deseamos recorrer completamente el vector sino que estamos interesados en que una vez
que lo encuentre lo muestre y termine la bsqueda (Por ejemplo, si estamos seguros de que el dato NO
se repite en el vector), entonces podemos escribir otra versin de este algoritmo que INTERRUMPA el
ciclo repetitivo en cuanto encuentre el elemento que se busca en el vector.
Este algoritmo se muestra en la siguiente pgina ..

CONSULTAR_DATOS

Ver 2.0

REPITA
ESCRIBA ( **** CONSULTA INFORMACION DE ESTUDIANTES **** )
ESCRIBA ( CODIGO A CONSULTAR ?? ); LEA (CC)
Encontro  N ; I  1
MQ ( I <= NEL) AND ( Encontro = N ) haga
SI CC = CODIGOS [ I ]

ENT

ESCRIBA ( Datos encontrados del Alumno .. )


ESCRIBA ( Cdigo del Alumno : , CODIGO [ I ] )
ESCRIBA ( Nombre del alumno : , NOMBRE [ I ] )
Pos  I
Encontro  S
SINO
I  I +1
FSI
FIN MQ
SI Encontro = N Ent
ESCRIBA ( NO est matriculado ese alumno . );
FSI
ESCRIBA ( Desea seguir Consultando Informacin de Alumnos ? ); Lea(MAS)

HASTA (MAS = N )
FIN CONSULTAR_DATOS Ver 2.0

ALGORITMO PARA BORRAR DATOS DE UN VECTOR:


Para BORRAR un alumno de estos vectores se deben seguir normalmente estos pasos:
3. PREGUNTAR AL USUARIO CUAL ES EL CODIGO DEL ALUMNO QUE DESEA BORRAR
4. BUSCAR ESTE CODIGO EN EL VECTOR CORRESPONDIENTE (Esto se hace comparando
El cdigo digitado contra todos los elementos del vector de cdigos y si encuentra coincidencia con alguno entonces guarda en una variable POS la posicin donde lo
encontr).
5. SI lo encontr entonces se ubica una posicin debajo de aquella en la cual lo encontr
y a partir de all comienza a copiar los elementos de cada vector encima del que le
antecede, hasta llegar a NEL y luego le RESTA 1 a NEL puesto que ahora habr un dato
menos en cada vector.
4. Si no lo encontr entonces Muestra un mensaje de error Ese alumno NO est matriculado

Una versin de el algoritmo para Borrar elementos de un Vector se muestra en la siguiente


pgina

BORRAR DATOS (Ver 1.0)


Mas  S
MQ (Mas = S ) Haga
ESCRIBA ( **** BORRAR INFORMACION DE ESTUDIANTES **** )
ESCRIBA ( CODIGO del alumno que desea Retirar de la lista ?? ); LEA ( CB )
Encontro  N ; I  1
MQ ( I <= NEL) AND ( Encontro = N ) haga
SI CB = CODIGOS [ I ] Entonces
ESCRIBA ( Datos encontrados del Alumno .. )
ESCRIBA ( Cdigo del Alumno : , CODIGO [ I ] )
ESCRIBA ( Nombre del alumno : , NOMBRE [ I ] )
Pos  I ; Encontro  S
ESCRIBA ( Est seguro de Retirar este Alumno de la Clase ?? [ S/N ] .. ); LEA ( seguro)
SI Seguro = S Entonces
SI POS = NEL ENT /* Se trata del que ocupa la ltima posicin??? */
NEL  NEL 1 /* Simplemente le resto 1 a NEL y Listo */
SINO
PARA I  POS + 1 HASTA NEL HAGA
CODIGOS [ I -1 ]  CODIGOS [ I ]
FPARA
FSI
FSI
SINO
I  I +1
FSI
FIN MQ
SI Encontro = N Ent
ESCRIBA ( NO est matriculado ese alumno . );
FSI
ESCRIBA ( Desea seguir Borrando Informacin de Alumnos ? ); Lea(MAS)

FMQ
FIN BORRAR_DATOS (Versin 1.0)

A continuacin, en la siguiente pgina le muestro OTRA versin de este algoritmo de borrado de


elementos de un vector con el fin de que usted lo estudie.
Qu diferencias encuentra respecto de la versin 1.0 de borrado?
Acepta usted el reto de codificar ambas versiones, ejecutarlas y comparar los resultados en
cuanto a eficiencia de ambos algoritmos?
Nota: Para comparar los programas resultantes de la codificacin de ambos algoritmos debe
basarse en un mismo conjunto de datos, de lo contrario no sera correcto el anlisis.

BORRAR DATOS (Ver 2.0)


Mas  S
MQ (Mas = S ) Haga
ESCRIBA ( **** BORRAR INFORMACION DE ESTUDIANTES **** )
ESCRIBA ( CODIGO del alumno que desea Retirar de la lista ?? ); LEA ( CB )
Encontro  N ; I  1
MQ ( I <= NEL) AND ( Encontro = N ) haga
SI CB = CODIGOS [ I ] Entonces
ESCRIBA ( Datos encontrados del Alumno .. )
ESCRIBA ( Cdigo del Alumno : , CODIGO [ I ] )
ESCRIBA ( Nombre del alumno : , NOMBRE [ I ] )
Pos  I ; Encontro  S
SINO
II+1
FSI
FIN MQ
SI Encontro = N Ent
ESCRIBA ( NO est matriculado ese alumno . );
SINO
ESCRIBA ( Est seguro de Retirar este Alumno de la Clase ?? [ S/N ] .. ); LEA ( seguro)
SI Seguro = S Entonces
SI POS = NEL ENT /* Se trata del que ocupa la ltima posicin??? */
NEL  NEL 1 /* Simplemente le resto 1 a NEL y Listo */
SINO
PARA I  POS + 1 HASTA NEL HAGA
CODIGOS [ I -1 ]  CODIGOS [ I ]
FPARA
FSI
FSI
FSI

ESCRIBA ( Desea seguir Borrando Informacin de Alumnos ? ); Lea(MAS)

FMQ
FIN BORRAR_DATOS (Versin 2.0)

ALGORITMO PARA MODIFICAR DATOS DE UN VECTOR:


Para Actualizar (MODIFICAR) los datos de un alumno de estos vectores se deben seguir normalmente
estos pasos:
1. PREGUNTAR AL USUARIO CUAL ES EL CODIGO DEL ALUMNO CUYA INFORMACION DESEA
MODIFICAR.
2.

BUSCAR ESTE CODIGO EN EL VECTOR CORRESPONDIENTE (Esto se hace comparando El


cdigo digitado contra todos los elementos del vector de cdigos y si encuentra coincidencia
con alguno entonces guarda en una variable POS la posicin donde lo encontr.

3. SI lo encontr entonces escribe en pantalla la informacin Actual del alumno CODIGO y


NOMBRE y pide que se introduzca el NUEVO NOMBRE CORREGIDO (Estamos
suponiendo que lo que se desea modificar es el NOMBRE DEL ALUMNO)
4. Si no lo encontr entonces Muestra un mensaje de error Ese alumno NO est matriculado

POR SUPUESTO QUE HAY MUCHAS MAS TAREAS QUE PODEMOS DESARROLLAR SOBRE
ESTE PAR DE VECTORES, pero vamos a dejarlo hasta aqu.

9
Ahora REPASEMOS como es que se puede integrar e un solo programa varias
subrutinas y enlazarlas mediante un programa principal.
Si quisiramos elaborar UN SOLO PROGRAMA para esta aplicacin pensaramos en una
solucin como la siguiente:
SUBRUTINA LLENAR_DATOS

FIN LLENAR_DATOS

SUBRUTINA INFORME

FIN INFORME

SUBRUTINA CONSULTA_ALUMNO

FIN CONSULTA

SUBRUTINA AGREGAR_ALUMNO

FIN AGREGAR_ALUMNO

SUBRUTINA ACTUALIZAR_DATOS

FIN ACTUALIZAR

SUBRUTINA BORRAR_DATOS

FIN BORRAR_DATOS

Ahora hacemos el Algoritmo en Pseudocdigo correspondiente al PROGRAMA PRINCIPAL


que controlar a todas estas Subrutinas:

PROGRAMA PRINCIPAL
REPITA
ESCRIBA( #### GESTION INFORMACION DE ALUMNOS #### )
ESCRIBA(
MENU PRINCIPAL )
ESCRIBA( 1.- CAPTURA DATOS DE ALUMNOS
)
ESCRIBA( 2.- INFORME DE ALUMNOS
)
ESCRIBA( 3.- AGREGAR DATOS DE ALUMNOS
)
ESCRIBA( 4.- CONSULTAR INFO. DE ALUMNOS )
ESCRIBA( 5.- ACTUALIZAR DATOS DE ALUMNOS )
ESCRIBA( 6.- BORRAR DATOS DE ALUMNOS
)
ESCRIBA( 7.- TERMINAR )
ESCRIBA( DIGITE OPCIN >>>>>> ); LEA(OP)
DD OP Haga
1 : LLENAR_DATOS;
2 : INFORME;
3 : AGREGAR_ALUMNO;
4 : CONSULTAR_ALUMNO;
5 : ACTUALIZAR_DATOS;
6: BORRAR_DATOS;
FIN DD

HASTA (OP = 7)
FIN PROGRAMA_PRINCIPAL

10
Ahora bien, lo anterior es la parte ALGORITMICA de la solucin. En cuanto a la forma de
INTEGRAR varias subrutinas en un solo programa PASCAL lo explico a continuacin:

Habamos dicho que un programa pascal tena la siguiente forma:

PROGRAM xxxxx;
USES
Wincrt;
CONST
VAR
BEGIN (* Inicio del Programa Principal *)
Aqu van las sentencias del programa .;
END

A partir de ahora, aplicando el enfoque de la PROGRAMACION MODULAR, nuestros programas


PASCAL tendrn OTRA estructura ya que tenemos varias subrutinas. En Lenguaje PASCAL
existen dos (2) maneras de codificar las subrutinas, a saber:

PROCEDIMIENTOS : Son mdulos del programa que pueden tener su propio conjunto
de variables (e denominan variables LOCALES) y que tienen la particularidad de NO devolver
ningn resultado a quien los invoca. Para escribir esta clase de subrutinas utilizamos la
siguiente sintaxis:

PROCEDURE Nombre_de_procedimiento;
Var
Xxx;
Xxx;
Begin
Sentencia;
Sentencia;
.
.
End; (* fin del procedimiento *)

FUNCIONES :

Son mdulos del programa que pueden tener su propio conjunto de


variables (e denominan variables LOCALES) y que tienen la particularidad de devolver
resultados a quien los invoca. Para escribir esta clase de subrutinas utilizamos la siguiente
sintaxis:
FUNCTION nombre_de_funcin; tipo de dato que devuelve;
Var
Xxx;
Xxx:
Begin
Sentencias;
Sentencias;
End;

Pues bien, segn lo anterior, utilizando PROCEDURES, la codificacin del programa fuente en
PASCAL para implementar la solucin algortmica de la pgina 9 de este documento sera la
siguiente:

11
PROGRAM xxxxx;
USES
Wincrt;
CONST

VAR
CODIGOS : ARRAY [1..20] OF Longint;
NOMBRES : ARRAY [1..20] OF String[60];
NEL
: INTEGER;
(* y todas la dems variables que usted requiera declarar GLOBALMENTE *)

(* A continuacin escribimos la codificacin en pascal de TODOS los Procedures . *)


PROCEDURE LLENAR_DATOS;
BEGIN
Sentencias;
Sentencias;
END; (* Fin del procedure LLENAR_DATOS *)

PROCEDURE INFORME;
BEGIN
Sentencias;
Sentencias;
END; (* Fin del INFORME *)

PROCEDURE AGREGAR_ALUMNO;
BEGIN
Sentencias;
Sentencias;
END; (* Fin del procedure AGREGAR_ALUMNO *)

PROCEDURE CONSULTAR_ALUMNO;
BEGIN
Sentencias;
Sentencias;
END; (* Fin del procedure CONSULTAR_ALUMNO *)

PROCEDURE ACTUALIZAR_DATOS;
BEGIN
Sentencias;
Sentencias;
END; (* Fin del procedure ACTUALIZAR_DATOS *)

PROCEDURE BORRAR_DATOS;
BEGIN
Sentencias;
Sentencias;
END; (* Fin del procedure BORRAR_DATOS *)

(* A continuacin escribimos la codificacin en pascal del Programa Principal . *)

BEGIN (* Inicio del Programa Principal *)


Aqu van las sentencias del programa .;

END (* FIN DEL PROGRAMA PRINCIPAL *)

Entonces, si en un programa PASCAL, el PROGRAMA PRINCIPAL debe ir en el sitio que se


acaba de indicar, y si ALGORITMICAMENTE lo que este programa principal contiene es un MEN
DE OPCIONES tal y como se indic en la pgina No. 9, entonces veamos como se codifica en
PASCAL este programa principal segn el algoritmo sealado.

12
La sentencia PASCAL para codificar la Estructura DD (Dependiendo de ..) que se detall en el
documento: Fundamentos de Programacin, es la instruccin CASE.

BEGIN (*Inicio del Programa Principal *)


REPEAT
CLRSRC;
WRITELN( #### GESTION INFORMACION DE ALUMNOS #### )
WRITELN (
MENU PRINCIPAL )
WRITELN ( 1.- CAPTURA DATOS DE ALUMNOS
)
WRITELN ( 2.- INFORME DE ALUMNOS
)
WRITELN ( 3.- AGREGAR DATOS DE ALUMNOS
)
WRITELN ( 4.- CONSULTAR INFO. DE ALUMNOS )
WRITELN ( 5.- ACTUALIZAR DATOS DE ALUMNOS )
WRITELN ( 6.- BORRAR DATOS DE ALUMNOS
)
WRITELN ( 7.- TERMINAR )
WRITELN ( DIGITE OPCIN >>>>>> ); READLN (OP)
CASE OP OF
1 : LLENAR_DATOS;
2 : INFORME;
3 : AGREGAR_ALUMNO;
4 : CONSULTAR_ALUMNO;
5 : ACTUALIZAR_DATOS;
6 : BORRAR_DATOS
7 : BEGIN
CLRSCR; WRITELN ( fin del programa Pulse ENTER ); READKEY;
END;
ELSE
BEGIN
CLRSCR; WRITELN ( ERROR en la opcin, revise Pulse ENTER ); READKEY;
END;
END; (* Fin del CASE, observe que el Case NO tiene BEGIN . *)

UNTIL (OP = 7);


END

También podría gustarte