Sei sulla pagina 1di 92

INDICE

1.1Programacin modular de estructura repetitiva


1.1 INTRODUCCION A LA PROGRAMACION MODULAR
1.2 DECLARACION DE FUNCIONES
1.3 BIBLIOTECA DE FIUNCIONES
1.3.1 ENTRADA Y SALIDA
1.4 ARCHIVO
1.6 CADENAS
1.7 PROGRAMACION DE INTERFACES
1.7.1 PROGRAMACION DE PUERTOS DE LA COMMPUTADORA
1.7.2 ELABORACION DE INTERFACES
1.7.3 CONTROL DE INTERFAZ A TRAVES DE LA COMPUTADORA
1.8 APLICACIN EN LA INDUSTRIA
2.0 Clasificacin de estructura de datos
2.1 INTRODUCCIN A LA PROGRAMACIO MODULAR
2.2 OBJETIVOS:
2.3 ARREGLOS
2.3.1. ARREGLOS UNIDIMENSIONALES
2.3.2. ARREGLOS DE TIPO CARACTER
2.3.3. ARREGLOS BIDIMENSIONALES (Matrices)
2.4. MODULARIDAD
2.5. METODOLOGA DESCENDENTE: (TOP DOWN)
2.6. VARIABLES:
2.7.FUNCIONES:
2.7.1. Declaracin de funciones
2.8. USO DE LOS PARMETROS: FORMALES NORMALES O
ARGUMENTOS
2.9. ARQUITECTURA MODULAR:
2.9.1.

PLANTEAR

MODULARIDAD:
2.10. RECURSIVIDAD
2.11. REGISTROS
2.12. CONCLUSIONES
2.13. RECOMENDACIONES

SOLUCIONAR

EJERCICIOS

APLICANDO

Dedicatoria:
Este trabajo esta dedicado a dios por
ser parte de nuestras vidas,
por nuestra paz interna y por ser la inspiracin
de continuar trabajando y estudiando,
y para seguir adelante en el dia a dia.

Agradecimiento:
Agradecemos a luis Alfonso por
ayudarnos en el t
rabajo, por hacer nuestro subtema
y prcticamente todo el trabajo.

1.1 INTRODUCCION A LA PROGRAMACION MODULAR


La programacin modular es un paradigma de programacin que consiste en dividir
un programa en mdulos o subprogramas con el fin de hacerlo ms legible y manejable.
Se presenta histricamente como una evolucin de la programacin estructurada para
solucionar problemas de programacin ms grandes y complejos de lo que sta puede
resolver.
Al aplicar la programacin modular, un problema complejo debe ser dividido en varios
subproblemas ms simples, y estos a su vez en otros subproblemas ms simples. Esto
debe hacerse hasta obtener sus problemas lo suficientemente simples como para poder
ser resueltos fcilmente con algn lenguaje de programacin. sta tcnica se llama
refinamiento sucesivo, divide y vencers anlisis descendente (Top-Down).
Un mdulo es cada una de las partes de un programa que resuelve uno de los su
problemas en que se divide el problema complejo original. Cada uno de estos mdulos
tiene una tarea bien definida y algunos necesitan de otros para poder operar. En caso de
que un mdulo necesite de otro, puede comunicarse con ste mediante una interfaz de
comunicacin que tambin debe estar bien definida.
Uno de los problemas habituales del programador ocurre cuando los programas alcanzan
un tamao considerable en cuanto a lnea de cdigo. El problema se puede volver tan
complejo que fuera inabordable. Para mitigar este problema apareci la programacin
modular.
En ella el programa se divide en mdulos de tamao manejable. Cada mdulo realiza una
funcin muy concreta y se pueden programar de forma independiente. Se basa en
concentrar los esfuerzos en resolver problemas sencillos y una vez resueltos, el conjunto
de esos problemas soluciona el problema original. En definitiva la programacin modular
implementa el paradigma divide y vencers, tan importante en la programacin. El
programa se descompone en mdulos. Los mdulos se puede entender que son
pequeos programas. Reciben datos y a partir de ellos realizan un clculo o una
determinada tarea. Una vez el mdulo es probado y validado se puede utilizar las veces
que haga falta en el programa sin necesidad de tener que volver a programar. En C los
mdulos se llaman funciones.
Si bien un mdulo puede entenderse como una parte de un programa en cualquiera de
sus formas y variados contextos, en la prctica se los suele tomar como sinnimos
de procedimientos y funciones. Pero no necesaria ni estrictamente un mdulo es una

funcin o un procedimiento, ya que el mismo puede contener muchos de ellos, no debe


confundirse el trmino "modulo" (en el sentido de programacin modular) con trminos
como "funcin" o "procedimiento", propios del lenguaje que lo soporte.
Uno de los problemas habituales del programador ocurre cuando los programas alcanzan
un tamao considerable en cuanto a lnea de cdigo. El problema se puede volver tan
complejo que fuera inabordable. Para mitigar este problema apareci la programacin
modular.
En ella el programa se divide en mdulos de tamao manejable. Cada mdulo realiza una
funcin muy concreta y se pueden programar de forma independiente. Se basa en
concentrar los esfuerzos en resolver problemas sencillos y una vez resueltos, el conjunto
de esos problemas soluciona el problema original. En definitiva la programacin modular
implementa el paradigma divide y vencers, tan importante en la programacin. El
programa se descompone en mdulos. Los mdulos se puede entender que son
pequeos programas. Reciben datos y a partir de ellos realizan un clculo o una
determinada tarea. Una vez el mdulo es probado y validado se puede utilizar las veces
que haga falta en el programa sin necesidad de tener que volver a programar. En C los
mdulos se llaman funciones.
Cada programa contiene un mdulo denominado programa principal que controla todo lo
que sucede; se transfiere el control a submodulos (posteriormente se denominarn
subprogramas), de modo que ellos puedan ejecutar sus funciones; sin embargo, cada
submodulo devuelve el control al mdulo principal cuando se haya completado su tarea.
Si la tarea asignada a cada submodulo es demasiado compleja, este deber romperse en
otros mdulos ms pequeos. El proceso sucesivo de subdivisin de mdulos continua
hasta que cada mdulo tenga solamente una tarea especfica que ejecutar. Esta tarea
puede ser entrada, salida, manipulacin de datos, control de otros mdulos o alguna
combinacin de estos. Un mdulo puede transferir temporalmente (bifurcacin) el control
a otro modulo; sin embargo, cada mdulo debe devolver el control al mdulo del cual se
recibe originalmente el control.
-Algunos lineamientos para la programacin modular son:
1. Mantener cada mdulo de un tamao manejable (de manera ideal incluyendo slo una
funcin).
2. Prestar atencin particular en las interfaces criticas (esto es, a los datos y a las
variables de control que pasan entre los mdulos).

3. Minimizar el nmero de mdulos que el usuario necesite modificar cuando haga


cambios.
4. Mantener las relaciones jerrquicas establecidas en las etapas de descenso.

Ejemplo:
Se desea disear un algoritmo que realice las siguientes tareas:
-Impresin de cabeceras de un informe,
-Lectura de datos,
-Ejecutar clculos,
-Imprimir lneas detalladas de informacin,
-Imprimir totales.
Este programa se puede descomponer en mdulos, de modo que exista un mdulo
principal o de control y diferentes submodulos.
Mdulo principal:

Llamada a submdulo (impresin de cabeceras)

Llamada a submodulo (proceso de datos)

Llamada a submodulo (impresin de totales)

1.2 DECLARACION DE FUNCIONES


Los prototipos de las funciones que se utilizan en un programa se incluyen
generalmente en la cabecera del programa y presentan la siguiente sintaxis:
En el prototipo de una funcin no se especifican las sentencias que forman parte de la
misma, sino sus caractersticas. Por ejemplo:
En este caso se declara la funcin cubo que recibe como parmetro una variable de tipo
entero (numero) y devuelve un valor del mismo tipo. En ningn momento estamos
especificando qu se va a hacer con el variablenmero, slo declaramos las
caractersticas de la funcin cubo.

Cabe sealar que el nombre de los parmetros es opcional y se utiliza para


mejorar la comprensin del cdigo fuente. De esta manera, el prototipo de la
funcin cubo podra expresarse de la siguiente manera:
Los prototipos de las funciones son utilizados por el compilador para verificar que se
accede a la funcin de la manera adecuada con respecto al nmero y tipo de parmetros,
y al tipo de valor de retorno de la misma. Veamos algunos ejemplos de prototipos de
funciones:
Las funciones de biblioteca se declaran en lo que se conocen como ficheros de
cabecera o ficheros .h (del ingls hederse, cabeceras). Cuando deseamos utilizar
alguna de las funciones de biblioteca, debemos especificar el fichero .h en que se
encuentra declarada la funcin, al inicio de nuestro programa. Por ejemplo, si deseamos
utilizar la funcin pronto en nuestro programa, debemos incluir el fichero stdio.h que
contiene el prototipo de esta funcin.
En el ejemplo adjunto podremos ver la declaracin de una funcin ( prototipo ). Al no
recibir ni retornar ningn valor, est declarada como void en ambos lados. Tambin
vemos que existe una variable global llamada num. Esta variable es reconocible en todas
las funciones del programa. Ya en la funcin main encontramos una variable local
llamada num. Al ser una variable local, sta tendr preferencia sobre la global. Por tanto
la funcin escribir los nmeros 10 y 5. /* Declaracin de funciones. */
#include <stdio.h>
void funcion(void); /* prototipo */
int num=5; /* variable global */
main() /* Escribe dos nmeros */
{
int num=10; /* variable local */
printf("%d\n",num);
funcin(); /* llamada */
}
void funcion(void)

{
printf("%d\n",num);
Por valor: cualquier cambio que se realice dentro de la funcin en el argumento enviado,
NO afectar al valor original de las variables utilizadas en la llamada. Es como si
trabajramos con una copia, no con el original. No es posible enviar por valor arrays,
deberemos hacerlo por referencia.
Por referencia: lo que hacemos es enviar a la funcin la direccin de memoria donde se
encuentra la variable o dato. Cualquier modificacin SI afectar a las variables utilizadas
en la llamada. Trabajamos directamente con el original. /* Paso por valor. */
Para enviar un valor por referencia se utiliza el smbolo & ( ampersand ) delante de la
variable enviada. Esto le indica al compilador que la funcin que se ejecutar tendr que
obtener la direccin de memoria en que se encuentra la variable.
Vamos a fijarnos en los ejemplos. En el ejemplo anterior podrs comprobar que antes y
despus de la llamada, las variables mantienen su valor. Solamente se modifica en la
funcin intercambio (paso por valor ).
En el siguiente ejemplo podrs ver como las variables intercambian su valor tras la
llamada de la funcin (paso por referencia).
Las variables con un * son conocidas como punteros, el nico dato en 'C' que puede
almacenar una direccin de memoria.
1.3 BIBLIOTECA DE FIUNCIONES
E

Lenguaje C, C++ contiene numerosas funciones, cuando se emplean funciones de

esta biblioteca estandar, se incrementa la transportabilidad de los programas.


Las funciones estandar se dividen en grupos, todas las funciones que pertenecen al
mismo grupo estan declaradas en el archivo de cabecera (aquel que dice xxx.h), la letra
"h" significa header en ingls y es lo que se llama cabecera.
C ofrece un conjunto de funciones estndar que dan soporte a las operaciones que se
utilizan con ms frecuencia. Estas funciones estn agrupadas en bibliotecas. Para utilizar
cualquiera de las funciones que forman parte de las bibliotecas estndar de C, slo hace
falta realizar una llamada a dicha funcin.

En ciencias de la computacin, una biblioteca (del ingls library) es un conjunto


de subprogramas utilizados para desarrollar software. Las bibliotecas contienen cdigo y
datos, que proporcionan servicios a programas independientes, es decir, pasan a formar
parte de stos. Esto permite que el cdigo y los datos se compartan y puedan modificarse
de forma modular. Algunos programas ejecutables pueden ser a la vez programas
independientes y bibliotecas, pero la mayora de stas no son ejecutables. Ejecutables y
bibliotecas hacen referencias (llamadas enlaces) entre s a travs de un proceso
conocido

como

enlace,

que

por

lo

general

es

realizado

por

un software denominado enlazador.


Ejemplo de librera estndar. math
Math es el nombre de una librera que incorpora funciones matemticas. Para poder
utilizar dichas funciones hay que aadir la instruccin #include <math.h> al principio del
cdigo de nuestro archivo. Cada directiva include se coloca en una lnea separada y no
requiere punto y coma al ser una indicacin al compilador y no una instruccin de
verdad .Esta librera contiene las siguientes funciones (se indican los prototipos y uso);
Prototipo
Int abs(int n)

Descripcin
Devuelve el valor absoluto del nmero

Int cell(double n)

entero indicado.
Redondea el numero decimal nobteniendo
el menor entero mayor o igual que n es
decir cell(2.3) devuelve el 3 y cell(2.7) y

double cos(double n)

devuelve 3.
Obtiene el coseno de n(n se expresa en

double exp(double n)
double fabs(double n)

radianes).
Obtiene en.
Obtiene el valor absoluto de n( siendo n un

Int floor(double n)

nmero double)
Redondea el nmero decimal nobteniendo
el mayor entero menor o igual que n. es
decir floor(2.3) devuelve 2 y de floor(2.7)
tambin devuelve 2.

Identificacin y organizacin de archivos


En los sistemas informticos modernos, los archivos siempre tienen nombres. Los
archivos se ubican en directorios. El nombre de un archivo debe ser nico en ese

directorio. En otras palabras, no puede haber dos archivos con el mismo nombre en el
mismo directorio.
El nombre de un archivo y la ruta al directorio del archivo lo identifica de manera unvoca
entre todos los dems archivos del sistema informtico -no puede haber dos archivos con
el mismo nombre y ruta-. El aspecto del nombre depende del tipo de sistema informtico
que se use. Las primeras computadoras slo permitan unas pocas letras o dgitos en el
nombre de un archivo, pero las computadoras modernas permiten nombres largos que
contengan casi cualquier combinacin de letras unicode y dgitos unicode, haciendo ms
fcil entender el propsito de un archivo de un vistazo. Algunos sistemas informticos
permiten nombres de archivo que contengan espacios; otros no. La distincin entre
maysculas y minsculas en los nombres de archivo est determinada por el sistema de
archivos. Los sistemas de archivos Unix distinguen normalmente entre maysculas y
minsculas, y permiten a las aplicaciones a nivel de usuario crear archivos cuyos
nombres

difieran

solamente

en

si

los

caracteres

estn

en

maysculas

minsculas.Microsoft Windows reconoce varios sistemas de archivos, cada uno con


diferentes polticas en cuanto a la distincin entre maysculas y minsculas. El popular
antiguo sistema de archivos FAT puede tener varios archivos cuyos nombres difieran
nicamente en las maysculas y minsculas si el usuario utiliza un editor de discos para
editar los nombres de archivo en las entradas de directorio. Las aplicaciones de usuario,
sin embargo, normalmente no permitirn al usuario crear varios archivos con el mismo
nombre pero con diferentes letras en maysculas y minsculas.

1.3.1 ENTRADA Y SALIDA


Las funciones que forman parte de la biblioteca estndar de C, funciones estndar o
predefinidas, estn divididas en grupos. Todas las funciones que pertenecen a un mismo
grupo se definen en el mismo fichero de cabecera. Los nombres de los ficheros
cabeceras de C se muestran en la siguiente tabla:
Cuando deseamos utilizar cualquiera de las funciones estndar de C, primero debemos
utilizar la directiva de precompilacin #include para incluir los ficheros cabecera en
nuestro programa. Por otra parte, antes de utilizar una funcin, primero debemos conocer
las caractersticas de dicha funcin, es decir, el nmero y tipo de datos de sus
argumentos y el tipo de valor que devuelve. Esta informacin es proporcionada por los
prototipos de funcin.

Los grupos de funciones estndar ms comunes son:


- entrada/salida estndar
- matemticas
- de conversin
- diagnstico
- de manipulacin de memoria
- control de proceso
- ordenacin
- directorios
- fecha y hora
- bsqueda
- manipulacin de cadenas
- grficos
- etctera
Podemos incluir tantos ficheros de cabecera como nos haga falta, incluyendo los ficheros
de cabecera que hemos creado y donde hemos definido nuestras funciones. En el resto
de este apartado veremos algunas de las funciones de la entrada/salida estndar ms
utilizadas.
En C no existe ninguna palabra clave para realizar la entrada y salida de datos (E/S). Se
realizan a travs de funciones de biblioteca (concretamente, la biblioteca stdio.h, ver
captulo 13).
Las funciones principales que realizan la entrada y salida sin formato son:getchar(): Lee
un carcter del teclado. Espera hasta que se pulsa una tecla y entonces devuelve su
valor.

putchar(): Imprime un carcter en la pantalla en la posicin actual del cursor.


gets(): Lee una cadena de caracteres introducida por el teclado y la sita en una direccin
apuntada por su argumento de tipo puntero a carcter.
puts(): Escribe su argumento de tipo cadena en la pantalla seguida de un carcter de
salto de lnea.
El siguiente fragmento de cdigo lee un carcter del teclado y lo muestra por pantalla. A
continuacin lee una cadena (de 10 caracteres incluido el carcter nulo) y tambin la
muestra por pantalla:
#include <stdio.h>
main()
{
charcadena[10];
int i;
i=getchar();
putchar(i);
gets(cadena);
puts(cadena);
}
Las funciones principales que realizan la entrada y salida con formato, es decir, se
pueden leer y escribir en distintas formas controladas, son:
printf(): Escribe datos en la consola con el formato especificado.
scanf(): Funcin de entrada por consola con el formato especificado.
Sus prototipos son los siguientes:

intprintf (" caracteres de transmisin y escape", lista de argumentos);


intscanf (" caracteres de transmisin y escape", lista de argumentos);
En la funcin printf() (con scanf() no), entre las comillas se pueden poner rtulos literales
mezclados con los caracteres de transmisin.
Los caracteres de transmisin son precedidos de un % para distinguirlos de los normales:
Caracteres de transmisin Argumento que transmite
%c Int: un carcter simple
%NsChar *: una cadena de caracteres
%Nd %Ni Int: un nmero decimal
%o Int: octal sin signo
%x %X Int: hexadecimal sin signo
%NuInt: decimal sin signo
%N.DfFloat o double con D decimales, en notacin fija
%N.De %N.DE Float o double con D decimales, en notacin cientfica
%N.Dg %N.DG Float o double en notacin cientfica si el exponente es menor de diez a
la menos cuatro, o fija en caso contrario.
%p Void *: escribe el nmero que corresponde al puntero
%% Escribe un signo de %
Donde aparecen las letras N.D o no se pone nada o sern en realidad dos nmeros que
dicen que la transmisin total del valor al menos ocupar N posiciones (si el nmero
necesita ms de N las tomar, si usa menos las dejara en blancos, a menos que se
quiera rellenar con ceros, entonces se pone 0N) y que la parte decimal tendr como
mximo las D posiciones despus de un punto.

Normalmente el nmero se ajusta por la derecha para el campo de N posiciones que le


hemos dicho que utilice; si deseamos el ajuste por la izquierda, se aade un signo menos
precediendo al valor N (-N).
Una l precediendo a N (p.e. %l5d) significa que transmitiremos un longint : si, por el
contrario, es una h significa que transmitiremos un short int.
Existe otro tipo de carcter especial, los caracteres de escape, que tienen un significado
especial. Los caracteres de escape son los siguientes:
\n Nueva lnea
\t Tabulador
\b Espacio atrs
\r Retorno de carro
\f Comienzo de pgina
\a Pitido sonoro
\ Comilla simple
\" Comilla doble
\\ Barra invertida
\xdd Cdigo ASCII en notacin hexadecimal (cada d representa un dgito)
\ddd Cdigo ASCII en notacin octal (cada d representa un dgito)
La lista de argumentos estar separada por comas. Debe existir una correspondencia
biyectiva entre los caracteres de transmisin (aquellos que comienzan con un %) y la lista
de argumentos a transmitir.
Cabe destacar una diferencia en la lista de argumentos entre las funciones printf() y
scanf(). En estultima funcin (scanf()), la lista de argumentos va precedida por el
operador de direccin(&), puesto que scanf() requiere que los argumentos sean las
direcciones de las variables, en lugar de ellas mismas.

(&), puesto que scanf() requiere que los argumentos sean las direcciones de las
variables, en lugar de ellas mismas.
1.4 ARCHIVO
En C un archivo puede ser cualquier cosa, desde un archivo de disco a un terminal o una
impresora. Se asocia una secuencia con un archivo especfico realizando una operacin
de apertura, una vez que est abierto, la informacin puede ser intercambiada entre ste
y el programa. El puntero a un archivo es el hilo que unifica el sistema de E/S con buffer.
Un puntero a un archivo es un puntero a una informacin que define varias cosas sobre
l, incluyendo el nombre, el estado y la posicin actual del archivo. En esencia, el puntero
a un archivo identifica un archivo en disco especfico y utiliza la secuencia asociada para
dirigir el funcionamiento de las funciones de E/S con buffer. Para obtener una variable de
tipo puntero a archivo se debe utilizar una sentencia como la siguiente:FILE *punt;
La funcin fopen() abre una secuencia para que pueda ser utilizada y le asocia a un
archivo. Su prototipo es: FILE *fopen(constchar *nombre_archivo, constchar *modo);
Donde nombre_archivo es un puntero a una cadena de caracteres que representan un
nombre vlido del archivo y puede incluir una especificacin de directorio. La cadena que
apunta modo determina cmo se abre el archivo. Los modos son los siguientes:
r: Abre un archivo de texto para lectura.
w: Crea un archivo de texto par escritura
a: Abre un archivo de texto para aadir
r+: Abre un archivo de texto para lectura/escritura
w+: Crea un archivo de texto para lectura/escritura
a+: Aade o crea un archivo de texto para lectura/escritura
La funcin fclose() cierra una secuencia que fue abierta mediante una llamada a fopen().
Escribe toda la informacin que todava se encuentre en el buffer del disco y realiza un
cierre formal del archivo a nivel del sistema operativo. Tambin libera el bloque de control
de archivo asociado con la secuencia, dejndolo libre para su reutilizacin. A veces es
necesario cerrar algn archivo para poder abrir otro, debido a la existencia de un lmite

del sistema operativo en cuanto al nmero de archivos abiertos. Su prototipo es:


intfclose(FILE *fp);
La funcin putc() escribe caracteres en un archivo que haya sido abierto previamente
para operaciones de escritura, utilizando la funcin fopen(). Su prototipo es: intputc(int
car, FILE *pf);
La funcin getc() escribe caracteres en un archivo que haya sido abierto, en modo
lectura, mediante fopen(). Su prototipo es: intgetc(FILE *pf);La funcin fputs() escribe la
cadena en la secuencia especificada. Su prototipo es: fputs() escribe la cadena en la
secuencia especificada. Su prototipo es: intfputs(constchar *cad, FILE *pf);La funcin
fgets() lee una cadena de la secuencia especificada hasta que se lee un carcter de salto
de lnea o hasta que se han ledo longitud-1 caracteres.
La funcin rewind() inicia el indicador de posicin al principio del archivo indicado por su
argumento. Su prototipo es: rewind() inicia el indicador de posicin al principio del archivo
indicado por su argumento. Su prototipo es: voidrewind(FILE *pf);
Existen otras muchas funciones en la biblioteca estndar de C (ver captulo 13) como
pueden serremove(): Borra el archivo especificado.
fflush(): Vaca el contenido de una secuencia de salida.
fread(): Lee tipos de datos que ocupan ms de un byte. Permiten la lectura de
bloques de cualquier tipo de datos.
fwrite(): Escribe tipos de datos que ocupan ms de un byte. Permiten la escritura
de bloques de cualquier tipo de datos.
fprintf(): Hace las funciones de printf() sobre un fichero.
fscanf(): Hace las funciones de scanf() sobre un fichero.
feof(): Detecta el final de un fichero.
ferror(): Detecta un error en la lectura/escritura de un fichero.
fclose() cierra una secuencia que fue abierta mediante una llamada a fopen().

putc() escribe caracteres en un archivo que haya sido abierto previamente para
operaciones de escritura, utilizando la funcin fopen().
La funcin getc() escribe caracteres en un archivo que haya sido abierto, en modo
lectura, mediante fopen(). Su prototipo es:
La funcin fputs() escribe la cadena en la secuencia especificada. Su prototipo es:
intfputs(constchar *cad, FILE *pf);
La funcin fgets() lee una cadena de la secuencia especificada hasta que se lee un
carcter de salto de lnea o hasta que se han ledo longitud-1 caracteres. Su prototipo es:
fgets() lee una cadena de la secuencia especificada hasta que se lee un carcter de salto
de lnea o hasta que se han ledo longitud-1 caracteres. Su prototipo es:intfgets(char
*cad, FILE *pf);
1.6 CADENAS
Manejo de cadenas <string.h>
Recordando la presentacin de arreglos hecha (captulo 5) en donde las cadenas estn
definidas como un arreglo de caracteres o un apuntador a una porcin de memoria
conteniendo caracteres ASCII. Una cadena en C es una secuencia de cero o ms
caracteres seguidas por un caracter NULL o \0:

Es importante preservar el caracter de terminacin NULL, ya que con ste es como C


define y maneja las longitudes de las cadenas. Todas las funciones de la biblioteca
estndar de C lo requieren para una operacin satisfactoria.
En general, aparte de algunas funciones restringidas en longitud (strncat(), strncmp() y
strncpy()), al menos que se creen cadenas a mano, no se debern encontrar problemas.
Se debern usar las funciones para manejo de cadenas y no tratar de manipular las
cadenas en forma manual desmantelando y ensamblando cadenas.

Todas las funciones para manejo de cadenas tienen su prototipo en:


#include<string.h>
Las funciones ms comunes son descritas a continuacin:

char *strcpy(constchar *dest, constchar *orig) -- Copia la cadena de caracteres


apuntada por orig (incluyendo el carcter terminador '\0') al vector apuntado
pordest. Las cadenas no deben solaparse, y la de destino, debe ser
suficientemente grande como para alojar la copia.

intstrcmp(constchar *s1, constchar *s2) -- Compara las dos cadenas de


caracteress1 y s2. Devuelve un entero menor, igual o mayor que cero si se
encuentra que s1es, respectivamente, menor que, igual a, o mayor que s2.

char *strerror(interrnum) -- Devuelve un mensaje de error que corresponde a un


nmero de error.

intstrlen(constchar *s) -- Calcula la longitud de la cadena de caracteres.

char *strncat(char *s1, const char *s2, size_t n) -- Agregancaracteres de s2 a s1.

intstrncmp(constchar *s1, char *s2, size_t n) -- Compara los primeros n caracteres


de dos cadenas.

char

*strncpy(constchar

*s1,

constchar

*s2,

size_t

n) --

Copia

los

primeros ncaracteres de s2 a s1.

strcasecmp(constchar *s1, constchar *s2) -- versin que ignora si son maysculas


o minsculas de strcmp().

strncasecmp(constchar *s1, constchar *s2, size_t n) -- versin insensible a


maysculas o minsculas de strncmp() que compara los primeros n caracteres
des1.

El uso de muchas funciones es directo, por ejemplo:


char *s1 = "Hola";
char *s2;
intlongitud;
longitud = strlen("Hola"); /* long = 4 */
(void) strcpy(s2,s1);
Observar que tanto strcat() y strcopy() regresan una copia de su primer argumento, el
cual es el arreglo destino. Observar tambin que orden de los argumentos es arreglo

destino seguido por arreglo fuente lo cual a veces es una situacin para hacerlo
incorrectamente.
La funcin strcmp() compara lexicogrficamente las dos cadenas y regresa:

Menor que cero -- si s1 es lxicamente menor que s2;

Cero -- si s1 y s2 son lxicamente iguales;

Mayor que cero -- si s1 es lxicamente mayor que s2;

Las funciones de copiado strncat(), strncmp() y strncpy() son versiones ms restringidas


que sus contrapartes ms generales. Realizan una tarea similar, pero solamente para los
primerosn caracteres. Observar que el caracter de terminacin NULL podra ser violado
cuando se usa estas funciones, por ejemplo:
char *s1 = "Hola";
char *s2 = 2;
intlongitud = 2;
(void) strncpy(s2, s1, longitud); /* s2 = "Ho" */donde s2 no tiene el terminador NULL.
Es importante preservar el caracter de terminacin NULL, ya que con ste es como C
define y maneja las longitudes de las cadenas. Todas las funciones de la biblioteca
estndar de C lo requieren para una operacin satisfactoria.
En general, aparte de algunas funciones restringidas en longitud (strncat(), strncmp() y
strncpy()), al menos que se creen cadenas a mano, no se debern encontrar problemas.
Se debern usar las funciones para manejo de cadenas y no tratar de manipular las
cadenas en forma manual desmantelando y ensamblando cadenas.

Todas las funciones para manejo de cadenas tienen su prototipo en:


#include<string.h>
Las funciones ms comunes son descritas a continuacin:

char *strcpy(constchar *dest, constchar *orig) -- Copia la cadena de caracteres


apuntada por orig (incluyendo el carcter terminador '\0') al vector apuntado
pordest. Las cadenas no deben solaparse, y la de destino, debe ser
suficientemente grande como para alojar la copia.

intstrcmp(constchar *s1, constchar *s2) -- Compara las dos cadenas de


caracteress1 y s2. Devuelve un entero menor, igual o mayor que cero si se
encuentra que s1es, respectivamente, menor que, igual a, o mayor que s2.

char *strerror(interrnum) -- Devuelve un mensaje de error que corresponde a un


nmero de error.

intstrlen(constchar *s) -- Calcula la longitud de la cadena de caracteres.

char *strncat(char *s1, const char *s2, size_t n) -- Agregancaracteres de s2 a s1.


intstrncmp(constchar *s1, char *s2, size_t n) -- Compara los primeros n caracteres
de dos cadenas.

char *strncpy(constchar *s1, constchar *s2, size_t n) -- Copia los


primeros ncaracteres de s2 a s1.

strcasecmp(constchar *s1, constchar *s2) -- versin que ignora si son maysculas


o minsculas de strcmp().

strncasecmp(constchar *s1, constchar *s2, size_t n) -- versin insensible a


maysculas o minsculas de strncmp() que compara los primeros n caracteres
des1.
El uso de muchas funciones es directo, por ejemplo:
char *s1 = "Hola";
char *s2;
intlongitud;
longitud = strlen("Hola"); /* long = 4 */
(void) strcpy(s2,s1);

Observar que tanto strcat() y strcopy() regresan una copia de su primer argumento, el
cual es el arreglo destino. Observar tambin que orden de los argumentos es arreglo

destino seguido por arreglo fuente lo cual a veces es una situacin para hacerlo
incorrectamente.
La funcin strcmp() compara lexicogrficamente las dos cadenas y regresa:

Menor que cero -- si s1 es lxicamente menor que s2;

Cero -- si s1 y s2 son lxicamente iguales;

Mayor que cero -- si s1 es lxicamente mayor que s2;

Las funciones de copiado strncat(), strncmp() y strncpy() son versiones ms restringidas


que sus contrapartes ms generales. Realizan una tarea similar, pero solamente para los
primerosn caracteres. Observar que el caracter de terminacin NULL podra ser violado
cuando se usa estas funciones, por ejemplo:
char *s1 = "Hola";
char *s2 = 2;
intlongitud = 2;
(void) strncpy(s2, s1, longitud); /* s2 = "Ho" */donde s2 no tiene el terminador NULL.

1.7 PROGRAMACION DE INTERFACES


Una interfaz de programacin representa la capacidad de comunicacin entre
componentes de software. Se trata del conjunto de llamadas a ciertas bibliotecas que
ofrecen acceso a ciertos servicios desde los procesos y representa un mtodo para
conseguir abstraccin en la programacin, generalmente (aunque no necesariamente)
entre los niveles o capas inferiores y los superiores del software. Uno de los principales
propsitos de una API consiste en proporcionar un conjunto de funciones de uso general,
por

ejemplo,

para

dibujar ventanas o iconos en

la pantalla.

De

esta

forma,

losprogramadores se benefician de las ventajas de la API haciendo uso de su


funcionalidad, evitndose el trabajo de programar todo desde el principio. Las APIs
asimismo son abstractas: el software que proporciona una cierta API generalmente es
llamado la implementacin de esa API.
Los puertos de comunicacin de la PC son de particular inters para el estudioso de la
electrnica ya que le permiten utilizar una computadora personal para controlar todo

tipo circuitos electrnicos utilizados, principalmente, en actividades de automatizacin de


procesos, adquisicin de datos, tareas repetitivas y otras actividades que demandan
precisin. ste artculo es el primero de una serie que analizar diversos usos para el
puerto paralelo de la PC.

Existen dos mtodos bsicos para transmisin de datos en las computadorasmodernas.


En un esquema de transmisin de datos en serie un dispositivo enva datos a otro a
razn de un bit a la vez a travs de un cable. Por otro lado, en un esquema
de transmisin de datos en paralelo un dispositivo enva datos a otro a una tasa de n
nmero de bits a travs de n nmero de cables a un tiempo. Sera fcil pensar que un
sistema en paralelo es n veces ms rpido que un sistema enserie, sin embargo esto no
se cumple, bsicamente el impedimento principal es el tipo de cable que se utiliza para
interconectar los equipos.
Por ejemplo, se puede ver la tarea de escribir "Hola Mundo" sobre la pantalla en
diferentes niveles de abstraccin:
1. Haciendo todo el trabajo desde el principio:
1. Traza, sobre papel milimetrado, la forma de las letras (y espacio) "H,o, l,
a,M,u, n, d, o".
2. Crea una matriz de cuadrados negros y blancos que se asemeje a la
sucesin de letras.
3. Mediante instrucciones en ensamblador, escribe la informacin de la
matriz en la memoria intermedia ("buffer") de pantalla.
4. Mediante la instruccin adecuada, haz que la tarjeta grfica realice
el volcado de esa informacin sobre la pantalla.
2. Por medio de un sistema operativo para hacer parte del trabajo:
1. Carga una fuente tipogrfica proporcionada por el sistema operativo.
2. Haz que el sistema operativo borre la pantalla.
3. Haz que el sistema operativo dibuje el texto "Hola Mundo" usando la fuente
cargada.

Usando una aplicacin (que a su vez usa el sistema operativo) para realizar la
mayor parte del trabajo:
1. Escribe un documento HTML con las palabras "Hola Mundo" para que
un navegador Web como Google Chrome, Mozilla, Firefox,Opera o Internet
Explorer pueda representarlo en el monitor.

Como se puede ver, la primera opcin requiere ms pasos, cada uno de los cuales es
mucho ms complicado que los pasos de las opciones siguientes. Adems, no resulta
nada prctico usar el primer planteamiento para representar una gran cantidad
de informacin, como un artculo enciclopdico sobre la pantalla, mientras que el
segundo enfoque simplifica la tarea eliminando un paso y haciendo el resto ms sencillos
y la tercera forma simplemente requiere escribir "Hola Mundo". Sin embargo, las APIs de
alto nivel generalmente pierden flexibilidad; por ejemplo, resulta mucho ms difcil en
un navegador web hacer girar texto alrededor de un punto con un contorno parpadeante
que programarlo a bajo nivel. Al elegir usar una API se debe llegar a un cierto equilibrio
entre su potencia, simplicidad y prdida de flexibilidad.

1.7.1 PROGRAMACION DE PUERTOS DE LA COMMPUTADORA

Un puerto en la computadora es por donde la informacin fluye hacia dentro o hacia


fuera. Los dispositivos Hardware como la impresora o modem pueden ser llamados
puertos, un puerto que manda informacin fuera de tu computadora puede ser el monitor
o la impresora. Un puerto que recibe informacin seria el modem o un scanner.
El puerto paralelo del PC es un conjunto de dispositivos (conector, circuitos electrnicos,
etc.) que permite la conexin de un equipo informtico con el propsito de intercambiar
informacin digital.

Desde el punto de vista del software, el puerto paralelo son tres registros de 8 bits cada
uno, ocupando tres direcciones de I/O consecutivas de la arquitectura x86.
Desde el punto de vista hardware, el puerto es un conector hembra DB25 con doce
salidas y cinco entradas, con 8 lneas de masa.
La funcin normal es transferir datos a una impresora a travs de las 8 lneas de datos,
usando las seales restantes como control de flujo.
Los puertos de comunicacin de la PC son de particular inters para el estudioso de la
electrnica ya que le permiten utilizar una computadora personal para controlar todo tipo
circuitos electrnicos utilizados, principalmente, en actividades de automatizacin de
procesos, adquisicin de datos, tareas repetitivas y otras actividades que demandan
precisin.
Existen dos mtodos bsicos para transmisin de datos en las computadoras modernas.
En un esquema de transmisin de datos en serie un dispositivo enva datos a otro a
razn de un bit a la vez a travs de un cable. Por otro lado, en un esquema de
transmisin de datos en paralelo un dispositivo enva datos a otro a una tasa de nnmero
de bits a travs de un nmero de cables a un tiempo. Sera fcil pensar que un sistema
en paralelo es n veces ms rpido que un sistema en serie, sin embargo esto no se

cumple, bsicamente el impedimento principal es el tipo de cable que se utiliza para


interconectar los equipos. Si bien un sistema de comunicacin en paralelo puede utilizar
cualquier nmero de cables para transmitir datos, la mayora de los sistemas paralelos
utilizan ocho lneas de datos para transmitir un byte a la vez, como en todo, existen
excepciones, por ejemplo el estndar SCSI permite transferencia de datos en esquemas
que van desde los ocho bits y hasta los treinta y dos bits en paralelo. En ste artculo nos
concentraremos en transferencias de ocho bits ya que sta es la configuracin del puerto
paralelo de una PC.
Un tpico sistema de comunicacin en paralelo puede ser de una direccin
(unidireccional) o de dos direcciones (bidireccional). El ms simple mecanismo utilizado
en un puerto paralelo de una PC es de tipo unidireccional y es el que analizaremos en
primer lugar. Distinguimos dos elementos: la parte transmisora y la parte receptora.
La parte transmisora coloca la informacin en las lneas de datos e informa a la parte
receptora que la informacin (los datos) estn disponibles; entonces la parte receptora
lee la informacin en las lneas de datos e informa a la parte transmisora que ha tomado
la informacin (los datos). Observe que ambas partes sincronizan su respectivo acceso a
las lneas de datos, la parte receptora no leer las lneas de datos hasta que la parte
transmisora se lo indique en tanto que la parte transmisora no colocar nueva
informacin en las lneas de datos hasta quela parte receptora remueva la informacin y
le indique a la parte transmisora que ya ha tomado los datos, a sta coordinacin de
operaciones se le llama acuerdo entendimiento. Bien, en estos mbitos tecnolgicos es
recomendable utilizar ciertas palabras en ingls que nos permiten irnicamente un mejor
entendimiento de los conceptos tratados. Repito: a la coordinacin de operaciones entre
la parte transmisora y la parte receptora se le llama handshaking, que en espaol es
elacto con el cual dos partes manifiestan estar de acuerdo, es decir, se dan un apretn de
manos.

Se dividen en 2 tipos:

a) Puertos fsicos de la computadora: son conectores integrados en tarjetas de


expansin en la tarjeta principal "Motherboard" de la computadora; diseados con
formas y caractersticas electrnicas especiales, utilizados para interconectar una gran
gama de dispositivos externos con la computadora, es decir, los perifricos. Usualmente

el conector hembra estar montado en la computadora y el conector macho estar


integrado en los dispositivos cables. Vara la velocidad de transmisin de datos y la
forma fsica del puerto acorde al estndar y al momento tecnolgico.
Anteriormente los puertos venan integrados exclusivamente en tarjetas de expansin
denominadas tarjetas controladoras, posteriormente se integraron en la tarjeta principal
"Motherboard" y tales controladoras perdieron competencia en el mercado, pero
actualmente se siguen comercializando sobre todo para servidores.
b) Puertos lgicos de la computadora: son puntos de acceso entre equipos para el uso
de servicios y flujo de datos entre ellos, ejemplos el puerto 21 correspondiente al servicio
FTP (permite el intercambio de archivos) el puerto 515 que est asociado con el
servicio de impresin.

on ocho bits podemos escribir en el puerto un total de 256 valores diferentes, cada uno
de stos representa un byte de informacin y cada byte puede representar una accin
concreta que nosotros podemos definir de acuerdo a nuestras necesidades. En ste
artculo el objetivo es entender cmo trabajar con el puerto paralelo, por lo tanto hagamos
un programa que nos permita escribir un nmero cualquiera entre 0 y 255 de tal manera
que sea posible visualizar el valoren formato binario. En primer lugar consulte la
documentacin de su compilador para verificar la correcta sintaxis de la funcin que nos
sirve para escribir en el puerto, en el caso especfico de Symantec C++, dicha funcin
eoutp( ). sta funcin requiere dos parmetros, el primero de tipo unsignedint que
especifica la direccin del puerto paralelo, y el segundo de tipo char que especifica el
valor a escribir en las lneas de datos de puerto. Una tpica llamada a la funcin outp( ) se
parece a esto:

Se aprecia la facilidad de manejo de la funcin, aunque diferentes compiladores dan a


sus respectivas funciones nombres diferentes, la mecnica es la misma, se requieren dos

parmetros, la direccin del puerto y el valor a escribir en el puerto. Estudie el siguiente


cdigo:

/**********************************************************
*

puerto2.c
*

*Escribe datos al puerto paralelo de la PC


*
**********************************************************/
#include <stdio.h>
#include <dos.h>
intpuerto(intdirecc);
intseleccion;
int main()
{
unsignedint __far *puntero_a_direccion;
int i, direccion[3]={0,0,0}, disponible[3]={0,0,0};

puntero_a_direccion = (unsignedint __far *)0x00000408;


printf("Seleccione el puerto:\n");
/* Cuantos puertos existen? */
for (i=0; i<3; i++)
{
if (*puntero_a_direccion == 0)
printf("Puerto LPT%d...............no disponible\n", i+1);
else
{
disponible[i] = 1;
direccion[i] = *puntero_a_direccion;
printf("Puerto LPT%d...............%d\n", i+1, i+1);
}puntero_a_direccion++;
}printf("Salir del programa........0\n");

scanf("%d", &seleccion);
do
{
switch(seleccion)
{
case 0:/* Salir del programa */
printf("Adios!!!\n");
return 0;
break;
case 1:/* Puerto LPT1 */
if(disponible[0]==1)
puerto(direccion[0]);
else
{
printf("ERROR: PUERTO NO DISPONIBLE\n");
return 0;
}break;
case 2:/* Puerto LPT2 */
if(disponible[1]==1)
puerto(direccion[1]);
else
{
printf("ERROR: PUERTO NO DISPONIBLE\n");
return 0;
}break;
case 3:/* Puerto LPT3 */
if(disponible[2]==1)
puerto(direccion[2]);
else
{
printf("ERROR: PUERTO NO DISPONIBLE\n");
return 0;
}

break;
default:
printf("ERROR: OPCION INCORRECTA!\n");
break;
}if(seleccion!=0)
{
printf("Seleccione otra opcion\n");
scanf("%d", &seleccion);
}
}while(seleccion!=0);
return 0;
}intpuerto(intdirecc)
{
unsignedchar valor; /* Solo valores entre 0 y 255 */
printf("Ahora puede escribir cualquier valor\n");
printf("entre 1 y 255, 0 para terminar el programa\n");
do
{
printf("Valor al puerto?\n");
scanf("%d", &valor);
outp(direcc, valor);
printf("Se ha escrito %d al puerto\n", valor);
}while(valor!=0);
returnseleccion=0;
}

El programa determina el nmero de puertos paralelo instalados en la


Computadora y almacena sus respectivas direcciones en el arreglo llamado direccin, en
caso de encontrarse una direccin vlida adems se establece en

1 el valor del arreglo llamado disponible[i] simplemente como una medida de seguridad
adicional. Como resultado de estas acciones el programa despliega un men basado en
los puertos encontrados, en este punto Usted puede seleccionar, en caso de que
disponga de ms de un puerto, el puerto en donde est conectado el circuito mostrado en
el diagrama de arriba.

Una vez seleccionado el puerto Usted puede escribir un valor cualquiera comprendido
entre 0 y 255. Independientemente del puerto seleccionado toda la funcionalidad del
programa est encapsulada en la funcin de tipo int llamada puerto( ) a la cual se le pasa
un nico parmetro que es la direccin del puerto seleccionado. La funcin est
codificada de tal forma que al escribir un 0 el programa termina, de sta manera al cerrar
el programa las lneas de datos del puerto paralelo estn todas en un nivel lgico bajo.
ste programa y el circuito asociado son tiles para entender de forma visual la forma de
representar valores en formato binario, adems establece las bases de trabajo para otros
proyectos de control basados en computadora.
1.7.2 ELABORACION DE INTERFACES

El diseo

de

interfaz

de computadoras,

de

usuario o ingeniera

aplicaciones,

mquinas,

de

la

dispositivos

interfaz es
de

el

diseo

comunicacinmvil,

aplicaciones de software, y sitios web enfocado en la experiencia de usuario y la


interaccin.
Normalmente es una actividad multidisciplinar que involucra a varias ramas del diseo y
el conocimiento como el diseo grfico, industrial, web, de software y la ergonoma; y
est implicado en un amplio rango de proyectos, desde sistemas para computadoras,
vehculos hasta aviones comerciales.
Su objetivo es que las aplicaciones o los objetos sean ms atractivos y adems, hacer
que la interaccin con el usuario sea lo ms intuitiva posible, conocido como el diseo
centrado en el usuario. En este sentido las disciplinas del diseo industrial y grfico se
encargan de que la actividad a desarrollar se comunique y aprenda lo ms rpidamente,
a travs de recursos como la grfica, los pictogramas, los estereotipos y la simbologa,
todo sin afectar el funcionamiento tcnico eficiente.
Tipos de Interfaces

El interface es de dos tipos que ellos son:


Interface Paralelo
Un interface paralelo transfiere datos en la forma de uno o varios bytes en la paralela a o
del dispositivo.
Asuma un ordenador 16 bites, direccionable por el byte, donde la entrada - salida
controlada del programa es usada con asincrnico del ducto, y el cronometraje de
transferencias de ducto es unos. El interface contiene memorias intermedias de datos
separadas para insumo y produccin y hay un registro de estado asociado con cada
memoria intermedia. Para una operacin de insumo, y la palabra de datos es transferida
del dispositivo de produccin a registros y puesta a 1. Cuando tan pronto como la seal
lista es recibida, esto habilita las puertas de produccin correspondiente al byte dirigido o
palabra y colocacin de sus contenido en las lneas de datos. Tambin, la seal de
produccin aceptan tambin es puesto a 1. Este constituye la respuesta del interface a la
peticin leda emitida por la unidad central de proceso. Tan pronto como la seal lista se
cae a 0, la seal aceptar es borrada y todo el ducto es borrado. Note que cuando la
memoria intermedia es dirigida, la bandera de estado de insumo es reinicializada a 0.
Este es esencial a fin de garantizar que cada artculo de datos de insumo es ledo por el
ordenador slo una vez. Una operacin de produccin procede del mismo modo, cuando
la seal habilitar es puesta a 1. El insumo de reloj a la memoria intermedia de
produccin es puesto. Este resulta en la carga de la memoria intermedia con los datos en
las lneas de datos. Al mismo tiempo, es puesto a 1 indicar que el interface est listo a
aceptar una nueva transferencia de produccin.
Interface Consecutivo
Un interface consecutivo contiene el mismo recorrido de control y direccin que el
interface paralelo, pero con una adicin controla para transferir datos en serie entre
registros y el dispositivo de entrada - salida. Aqu, un chip es usado, que es un barco de
circuito integrado que contiene todo el recorrido lgico para la conversin paralela y
consecutiva requerida. Los dos registros y las banderas de estado son incluidos en el
chip.

1.7.3 CONTROL DE INTERFAZ A TRAVES DE LA COMPUTADORA


En aplicaciones de control que requieren que el procesamiento de la informacin se
realice en una computadora personal (PC) la velocidad de transferencia de datos desde y
hacia la computadora puede ser un factor limitante. Para superar esta limitacin se
propone utilizar el bus USB como interface. En este articulo se muestra un ejemplo
aplicado al control de un brazo robot y como el cambio a una interface USB permite
mejorar la tasa de transferencia de datos entre la computadora y el sistema de control del
brazo robot.
Instrumentacin basada en PC es fcil de implementar el uso de herramientas y tarjetas
de National Instruments - Prueba y Medida. La mayora de los instrumentos se pueden
comunicar

con

el

PC

en

la interfaz

GPIB .

Puede empezar por aprender a usar el puerto paralelo y puerto serie. MIDI-puerto de
juegos tambin tiene lo suficiente para ayudarle a comenzar, aprender interfaces
informticas

en

el

hogar.

Intente un pequeo experimento fcil de RS-232 del sensor de temperatura


Powered. Esto

puede

empezar

tambin.

Los pocos ejemplos de arriba muestran una instrumentacin - Analizador Lgico 'Like' de
interfaz y un circuito de control del rel de visualizacin. Son ejemplos he intentado por
los estudiantes a probar y aprender.

Elaborar una interfaz:


Como consecuencia del uso masivo de internet y de la gran cantidad de documentacin
disponible para desarrolladores, es posible encontrar en la actualidad una gran variedad
de productos de software. El problema est en que gran parte de esas aplicaciones no
cumple con el objetivo principal para el cual debieron ser diseadas, que es facilitar la
vida de sus usuarios, razn por la que muchas veces son descartadas y reemplazadas
por otras aplicaciones. En la mayor parte de los casos esto no se debe a errores de
codificacin, sino ms bien a la forma en que las diferentes funcionalidades del software
son presentadas a su pblico, lo que de ahora en adelante conoceremos como "interfaz
de usuario". Este elemento, considerado una mtrica de la calidad de un software, influye
directamente en la percepcin final del producto y en la resistencia del usuario a probar la
aplicacin. Un software podr ser muy bueno y poderoso, pero no ser popular si su

interfaz es deficiente! Por eso, basado en mi experiencia como desarrollador y en


diversas lecturas sobre el tema, compartir los elementos que considero ms importantes
al momento de desarrollar una buena interfaz de usuario.
1.8 APLICACIN EN LA INDUSTRIA
La interfaz de usuario ms popular consiste en la representacin grfica de programas
como iconos seleccionados a travs del ratn que se ejecutan enventanas desplegadas
en la pantalla de la computadora. Los comandos y opciones de los programas pueden ser
seleccionados a travs de mensdispuestos en 2seccionesespecficas de las ventanas.
Esta interfaz, conocida comnmente como WIMP (Windowsicons-mouse-pointer), ha sido
sumamente exitosa por ms de 20 aos, un perodo sorprendentemente largo cuando se
habla de TICs.
Canny (2006) considera que la longevidad de las interfaces WIMP se debe, entre
otros, a dos factores principales. En primer lugar, esta abstraccin permiti que la
Computadora pudiera ser utilizada prcticamente por cualquier persona sin tener que ser
experta en computacin; se trata de una interfaz centrada en el usuario. En segundo
lugar, ha resultado muy apropiada al considerar la computadora como una herramienta
de trabajo para las funciones convencionales en la oficina, la escuela y el hogar.
Sin embargo, este modelo de Interaccin Humano-Computadora (IHC) presenta
Severas limitaciones ante los nuevos escenarios que las TICs van englobando durante su
acelerado proceso de transformacin social. Un estudio reciente realizado por la Divisin
de Ciencias de la Computacin de la Universidad de California en Berkeley consider que
la prioridad nmero uno en investigacin y desarrollo debera concentrarse en
IHC(Canny, 2006).
Algunos de estos escenarios son el objeto de estudio del presente
Documento, entre los que cabe destacar los siguientes:
Si bien las interfaces WIMP han permitido la adopcin generalizada de las
Computadoras, la facilidad de uso sigue considerndose la principal barrera para el
Crecimiento y xito de las TIC en las organizaciones (Canny, 2006).
Hace tiempo que la computadora ha dejado de ser tan slo herramienta de trabajo en la
oficina y el hogar. Las consolas de videojuegos, los reproductores de DVD, los nuevos
televisores, un nmero creciente de sistemas de control en el automvil y el hogar, son

tan slo algunos ejemplos de equipos computacionales con los que el hombre
contemporneo interacta todos los das. En estos dispositivos resulta crtica.
- Diseo minimalista: entre ms elementos existan en la pantalla, ms confundido y
temeroso se encontrar el usuario. Por eso es importante reducir al mximo el nmero de
componentes visibles, siendo muchas veces recomendada la utilizacin de asistentes o
"wizards", los cuales permiten dividir una gran pantalla de datos en una serie de pasos
lgicos, ordenados y sencillos de seguir. El uso de asistentes, al estar compuestos por
varias pantallas, permite adems mejorar el orden y disposicin de los componentes.
- Distincin clara de los elementos: siempre que se incorpore un componente a la
pantalla del usuario, el diseador deber preocuparse que este sea diferenciable del
resto y de que su funcionalidad est claramente expresada. Para ello, el mejor recurso es
la utilizacin de imgenes, las cuales se recomienda sean nicas para cada componente
o agrupacin de los mismos, y semejantes a objetos de la vida real, de forma de hacer la
aplicacin ms intuitiva.
- Atencin a las glosas o textos: cada vez que se necesite colocar un texto en pantalla,
ya sea para reforzar el concepto de un componente o para entregar una instruccin o
advertencia, este deber ser cuidadosamente escrito, procurando utilizar siempre el
mismo tamao, color y fuente de letra, dejando fuera el uso de "negrita" , "cursiva" o
cualquier otro elemento que sobrecargue la pantalla ms de lo necesario. Aunque suene
obvio, los textos debern ser siempre lo ms concisos y claros posibles, intentando
idealmente localizarlos de acuerdo a la regin geogrfica donde vayan a ser utilizados.
- Minimizar el uso del teclado y de comandos especiales: no hay aplicacin ms
confusa y difcil de usar que una pensada para "ingenieros". Muchos software caen en el
error de incorporar comandos especiales para realizar acciones de programa, pensando
que un usuario experto ganar tiempo evitando el uso del mouse. Esto es un error,
puesto que son pocos los usuarios que destinan tiempo a leer la documentacin de un
programa antes de comentar a utilizarlo (mucho menos podrn conocer y memorizar sus
comandos de uso); adems el uso de comandos aumenta la posibilidad de realizar
acciones involuntarias, lo cual puede llegar a ser atemorizante para los usuarios. Una
aplicacin amigable es aquella que muestra todas las posibles acciones en pantalla; el
teclado deber utilizarse slo cuando sea imprescindible, como en el llenado de
formularios u otras acciones similares.

- Evitar dilogos innecesarios: existen aplicaciones que ante una accin reiterativa
muestran un cuadro de dilogo con un mensaje de xito. Esto puede resultar
extremadamente molesto para un usuario que ya conoce las consecuencias de su accin.
Por eso se recomienda el uso de cuadros de dilogo slo para advertencias o
sugerencias crticas (relacionadas a acciones no reversibles).
- Prevencin de errores: un usuario aprender ms rpido a utilizar y confiar en una
aplicacin si sabe que no cometer errores en su uso o si sabe que estos pueden ser
revertidos rpidamente. Para esto el diseador debe saber acotar las posibilidades de
accin del usuario, quitando la mayor cantidad de objetos de error posibles; adems debe
cuidar que cada accin crtica del programa pueda ser revertida en caso de ser requerido.
- Flexibilidad ante todo: no se debe confundir el control con la falta de flexibilidad. Si un
usuario, por ejemplo, desea no incorporar una imagen en una tarjeta de presentacin
utilizando un formato que si la requiere, el software a lo ms debera advertir sobre la
falta de la foto, pero no prohibirle que termine el proceso de elaboracin de su tarjeta. Un
desarrollador nunca sabr los alcances finales y usos definitivos de su software hasta que
sea utilizado por sus usuarios, por lo que es mejor enfocar los esfuerzos en mejorar la
robustez del software antes que caer en un control excesivo.
- Manejo de preferencias de usuario: con la tecnologa de hoy no es difcil incorporar
mecanismos de almacenamiento personalizado de preferencias para los usuarios.
Recordar elementos tan sencillos como la configuracin del idioma o la aparicin de
ciertos cuadros de dilogo facilitan enormemente el trabajo de quienes utilizan una
aplicacin.

En resumen una buena interfaz:


- Disminuye la resistencia natural del usuario a utilizar la aplicacin.
- Reduce los tiempos de aprendizaje.
- Reduce los errores de uso.
- Mejora la percepcin pblica del software.
- Mejora la calidad de vida de los usuarios (facilita su labor).

CAPITULO
II

2.1 INTRODUCCIN A LA PROGRAMACIO MODULAR


Las computadoras fueron diseadas o ideadas como una herramienta mediante la cual
podemos realizar operaciones de clculo complicadas en un lapso de mnimo tiempo.
Pero la mayora de las aplicaciones de este fantstico invento del hombre, son las
de almacenamiento y acceso de grandes cantidades de informacin.
La informacin que se procesa en la computadora es un conjunto de datos, que pueden
ser simples o estructurados. Los datos simples son aquellos que ocupan slo una
localidad de memoria, mientras que los estructurados son un conjunto de casillas de
memoria a las cuales hacemos referencia mediante un identificador nico.
Debido a que por lo general tenemos que tratar con conjuntos de datos y no con datos
simples (enteros, reales, booleanos, etc.) que por s solos no nos dicen nada, ni nos
sirven de mucho, es necesario tratar con estructuras de datos adecuadas a cada
necesidad.
Las estructuras de datos son una coleccin de datos cuya organizacin se caracteriza por
las funciones de acceso que se usan para almacenar y acceder a elementos individuales
de datos.
Una estructura de datos se caracteriza por lo siguiente:

Pueden descomponerse en los elementos que la forman.

La manera en que se colocan los elementos dentro de la estructura afectar la


forma en que se realicen los accesos a cada elemento.

La colocacin de los elementos y la manera en que se accede a ellos puede ser


encapsulada.
Ejemplo: Supongamos

que

nos

enfrentamos

un

problema

como

este: Una

empresa que cuenta con 150 empleados, desea establecer una estadstica sobre
los salarios de sus empleados, y quiere saber cual es el salario promedio, y tambin
cuantos de sus empleados gana entre $1250.00 y $2500.00.
Si tomamos la decisin de tratar este tipo de problemas con datos simples, pronto nos
percataramos del enorme desperdicio de tiempo, almacenamiento y velocidad. Es por
eso que para situaciones de este tipo la mejor solucin son los datos estructurados.

2.2 OBJETIVOS:
El objetivo por el cual fue el presente trabajo de Estructura de Datos, es el establecer un
material de apoyo y consulta para ti que eres alumno de Ingeniera Informtica y
de Sistemas o de cualquier otra rea afn en la cual se imparta la materia de Estructura
de Datos. Una vez que hayas terminado de revisar detenidamente este material, sers
capaz de establecer estructuras lgicas de datos que te permitan hacer un uso ms
eficiente del espacio de memoria, de minimizar los tiempos de acceso, as como de lograr
formas ms efectivas de insercin y eliminacin de datos en estructuras de
almacenamiento. Ahora que ya sabes en lo que te puede ayudar este tutorial, puedes
empezar a hacer uso de l, consultando todas tu tareas y dudas que tengas acerca de la
materia.
Acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o
posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da
su posicin relativa.
2.3 ARREGLOS
CONCEPTO :
Es un conjunto de datos o una estructura de datos homogneos que se encuentran
ubicados en forma consecutiva en la memoria RAM ( sirve para almacenar datos en
forma temporal).
Un arreglo puede definirse como un grupo o una coleccin finita, homognea y ordenada
de elementos. Los arreglos pueden ser de los siguientes tipos:

De una dimensin.

De dos dimensiones.

De tres o ms dimensiones
2.3.1. ARREGLOS UNIDIMENSIONALES
Un arreglo unidimensional es un tipo de datos estructurado que est formado de una
coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar
listas de elementos iguales.
Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se
debe proporcionar la direccin base del arreglo, la cota superior y la inferior.
Ejemplos

1. Disear un algoritmo que ingrese 30 notas aprobados y que me muestre la nota mayor
y el promedio de todas (Nota>=10.5 y Nota<=20)
Solucin :
Inicio
nota[30], s, may, p : real
i : entero
s0
para (i=1; i<=30; i++)
repetir
Ingresar nota [i]
hasta (nota[i]>=10.5) y (nota[i]<=20)
s s + nota[i]
si (i=1) entonces
may nota[i]
sino
si (nota[i]>may) entonces
may nota[i]
fin _ si
fin _ si
fin _ para
p s/30
mostrar "PROMEDIO TOTAL ES",p
mostrar "LA NOTA MAYOR ES",may
Fin
2. Ingresar 30 valores cualesquiera y determinar cuantos de estos valores son iguales al
promedio de los 30 valores ingresados anteriormente.
Solucin :
Inicio
num[30], i, s 0, c 0 : entero
p : real
para(i=1;i<=30;i++)
Ingresar num[i]
S s + num[i]
fin_para
p s/30
para(i=1;i<=30;i++)

si (p=num[i]) entonces
c c+1
fin_si
fin_para
mostrar "Nmeros Iguales al promedio",c
Fin
3.

Controlar el siguiente men :

1.

Ingresar .- En esta opcin usted deber ingresar 20 nmeros positivos que no


sean mayores que 100.

2.

Mostrar .- En esta opcin usted deber calcular y mostrar el promedio solo de los
nmeros cuyo primer digito de su izquierda sea el 2 y el 3.

Solucion :
Inicio
num[20], i, opc, ind 0, c, s : entero
p : real
repetir
mostrar "1 : INGRESAR"
mostrar "2 : MOSTRAR"
mostrar "3 : SALIR"
repetir
ingresar opc
hasta (opc>=1) y (opc<=3)
segn_sea opc hacer
1 : Inicio
para (i=1; i<=20; I++)
repetir
ingresar num [i]
hasta (num[1]>0) y (num[i]<=100)
fin_para
Fin
2 : Inicio
si (ind=1) entonces
c 0
s 0

para(i=1; i<=20; i++)


si (num[i]>=20 y num[i]<40) entonces
s s+num[i]
c c+1
fin_si
fin_para
si (c=0) entonces
mostrar "NO EXISTE NUMERO CON DIGITOS 2 Y 3"
sino
p s/c
mostrar "promedio",p
fin_si
sino
mostrar "INGRESE DATOS"
fin_si
fin
fin_segn sea
Hasta (opc=3)
fin
4. Disear un algoritmo que ingrese 15 nmeros cualesquiera.
Solucin :
Inicio
num[15]: entero
i: entero
para (i=1; i<=15; i++)
Ingresar num[i]
Fin _ para
Fin
5. Utilizando arreglos, ingresar 15 nmeros y calcular cual es el nmero menor.
Solucin :
Inicio
i, men, Num[15]: entero
para (i=1; i<=15; i++)
Ingresar Num[i]
si (i=1) entonces
men num[i]

sino
si (Num[i]< men) entonces
menor Num[i]
Fin _ si
Fin _ si
Fin _ para
Fin
Con Alternativas Mltiples
6. Disear un algoritmo que controle las siguientes opciones del men:
1. Ingresar : En esta opcin Ud. deber ingresar 30 nmeros positivos cualesquiera.
2. Mostrar : En esta opcin Ud. deber mostrar el promedio y tambien cuantos nmeros
superan dicho promedio.
3. Salir.
Solucin :
Inicio
opc: caracter
num[30]: entero
i, s 0, c 0, sw: entero
p : real
sw 0
repetir
Mostrar "1.- Ingresar"
Mostrar "2.- Mostrar"
Mostrar "3.- Salir"
repetir
pedir opc
hasta (opc>=1 y opc <=3)
1: Inicio
sw 1
para (i=1; i<=30; i++)
repetir
pedir num[i]
hasta (num[i]>0)
Fin _ para
Fin
2: Inicio

si (sw = 1) entonces
s0
para (i=1; i<=30; i++)
s s+ num[i]
fin _ para
p s/30
c0
para (i=1; i<=30; i++)
si (num[i]>0) entonces
cc+1
fin _ si
fin _ para
si (c = 0) entonces
mostrar "NMEROS IGUALES"
sino
mostrar p,c
fin _ si
sino
Mostrar "An no ingresar datos"
Fin _ si
hasta opc = 3
Fin
7. Almacenar en un arreglo los 5 primeros nmeros primos positivos.
Solucin:
Inicio
primo[5]: entero
i, n, d, c: entero
c0
n0
repetir
n n+1; d 0
para (i=1; i<=n; i++)
si (n mod i=0) entonces
d d+1
fin _ si
fin _ para

si (d=2) entonces
c c+1
primo[c] N
Fin_si
hasta (c=5)
Fin
8. Ingresar 2 nmeros y mostrar cual es el mayor de ellos.
Solucin:
Inicio
a, b : entero
pedir a
si (a>b) entonces
mostrar "a mayor", a
sino
si (b>a) entonces
mostrar "b mayor"
sino
si (a=b) entonces
son iguales
Fin _ si
Fin _ si
Fin _ si
Fin
9. Ingresar un nmero positivo y mostrar cual es su mitad.
Solucion :
Inicio
Ingresar N
repetir
pedir N hasta que N>0
N=N/2
Mostrar "La mitad es" N/2
Fin _ repetir
Fin
10 Ingresar un nmero par y mostrar sus divisores; el nmero par debe ser positivo.
Solucin :
Inicio

n, i, c 0: entero
repetir
Ingresar n
hasta (n>0) y (n mod 2=0)
para (i=1; i<=n; i++)
si (n mod i=0) entonces
c c+1
Mostrar i
Fin _ si
Fin _ para
Mostrar "Cantidad de divisores"
Fin
11. Ingresar 5 nmeros negativos y calcular su media aritmtica.
Solucin :
Inicio
repetir
Ingresar n
hasta (n<0 y n mod 2=0)
para (i=0; i<=5; i++)
si (n mod i=0) entonces
c c+1
mostrar i
fin _ si
fin _ para
escribir "MEDIA ARITMTICA ES ", C
Fin
12. Ingresar 5 nmeros en un arreglo.
Solucin :
Inicio
num[5]:entero
i: entero
para (i=1; i<=5; i++)
ingresar num[5]
Fin _ para
Fin
13. Ingresar 5 nmeros positivos. No utilizar la estructura repetir desde.

Solucin :
Inicio
i, num[5]: entero
i1
mientras (i<=5)
repetir
Ingresar num[i]
hasta (num[i]>0)
i i+1
Fin _ mientras
Fin
14. Ingresar un nmero mayor que 50 y calcular la suma y el promedio de sus 5 primeros
divisores. Almacenar los divisores en un arreglo.
Solucin :
Inicio
x 0, s 0, c 0
repetir
Ingresar n
hasta (n>50)
repetir
x x+1
si (n mod x=0) entonces
c c+1
divisor[c] x
fin _ si
hasta (c=s)
para (i=1; i<=5; i++)
s s + divisor[i]
fin _ para
mostrar "EL PROMEDIO ES", p
mostrar "LA SUMA ES", s
Fin
15. Almacenar en un arreglo todos los nmeros primos que se encuentren entre 1 y 40.
Solucin :
Inicio
para (i=2; i<=39; i++)

d0
para (j=1; j<=i; j++)
si (i mod j=0) entonces
d d+1
fin _ si
fin _ para
si (d=2) entonces
c c+1
primo[c]+ i
fin _ si
fin _ para
fin
16. Controlar el siguiente men:
1. Pares: ingresar 35 nmeros pares negativos y mostrar el valor absoluto del promedio.
2. Impares: Ingresar 10 nmeros impares positivos que sean dgitos para luego
determinar el promedio de los mismos.
3 Salir: En esta opcin Ud. deber confirmar si desea abandonar la ejecucin del
algoritmo.
Solucin :
Inicio
num[35], opc, i : entero
s, p : entero
res : caracter
repetir
Mostrar "1.Pares"
Mostrar "2.Impares"
Mostrar "3. Salir"
repetir
Ingresar opc
hasta(opc>=1) y (opc<=3)
segn _ sea opc hacer
1. Inicio
para(i=1; i<=35; i++)
repetir
Ingresar num[i]
hasta(num[i] mod 2=0) y (num[i]<0)11

s s+num[i]
fin _ para
p (s/35)*-1
Mostrar "Valor absoluto", p
Fin
2 Inicio
para(i=1; i<=10; i++)
repetir
Ingresar num[i]
hasta(num[i] mod 2=1) y (num[i]>0) y (num[i]<10)
s s+num[i]
fin _ para
p s/10
Mostrar "promedio", p
Fin
3 Inicio
repetir
Ingresar "Desea salir (S/N)" Res
hasta(res=S) o (res=N)
si (res=N) entonces
opc 0
Fin _ si
Fin
Fin _ segn _ sea
hasta opc=3
Fin
17. Controlar las siguientes opciones del men:
a.- Pares Impares : En esta opcin Ud. Deber ingresar 30 nmeros pares e impares
en forma consecutiva, donde necesariamente el primer nmero deber ser un numero par
luego un impar y as intercaladamente.
b.- Impares Pares : Ingresar 30 nmeros impares pares en forma intercalada
empezando con un impar.
c.- Mostrar : En esta opcin Ud. deber mostrar la suma de los nmeros pares
ingresados en la opcin A o B, tambin deber el algoritmo indicar cual de las dos
opciones est mostrando Ud. Ya sea A o B.
d.- Salir.

NOTA: Ud. deber trabajar solamente con un arreglo de 30 nmeros.


Solucin :
Inicio
num[30]: entero
i, ind, s: entero
opc: caracter
repetir
Mostrar "A : Pares Impares"
Mostrar "B : Impares Pares"
Mostrar "C : Mostrar"
Mostrar "D : Salir"
repetir
Ingresar opc
hasta (opc="A") o (opc="B") o (opc="C") o (opc="D")
segn _ sea opc hacer
A : Inicio
ind 1
para (i=1; i<=30; i++)
si (i mod 2=0) entonces
repetir
Ingresar num[i]
hasta (num[i] mod 2<>0)
sino
repetir
Ingresar num[i]
hasta (num[i] mod 2=0) y (num[i]<>0)
Fin _ si
Fin _ para
Fin
A.

Inicio

B : Inicio
Ind 2
para (i=1; i<=30; i++)
si (i mod 2=0) entonces
repetir

ingresar Num[i]
hasta (Num[i] mod 2=0) y (Num[i]<>0)
sino
repetir
Ingresar Num[i]
hasta (Num[i] mod 2<>0)
Fin _ si
Fin _ para
Fin
C : Inicio
si (ind =0) entonces
Mostrar "An no ingresar datos"
sino
si (ind =1) entonces
Mostrar "Resultado opcin 1"
sino
Mostrar "Resultado opcin 2"
Fin _ si
S0
para (i=1; i<=30; i++)
si (Num[i] mod 2=0) entonces
S S+Num[i]
Fin _ si
Fin _ para
Mostrar "S"
Fin _ si
fin
fin _ segn _ sea
hasta (opc=D)
fin
18. Ingresar un nmero que tenga 10 dgitos, donde cada dgito debe de ser almacenado
en una posicin del arreglo.
Solucin :
Inicio
N[10] : entero
i : entero

para (i = 1; i <= 10; i ++)


si (i=1) entonces
repetir
ingresar N[i]
hasta (N[i]>0) y (N[i]<10)
sino
repetir
ingresar N[i]
hasta (N[i]>=0) y (N[i]<10)
fin_si
fin_para
Fin
19. Almacenar en un arreglo los 5 primeros nmeros primos positivos, para luego mostrar
cual es el tercer nmero primo calculado.
Solucin :
Inicio
p[5] : entero
c 0, cp 0, d, i : entero
repetir
c=c+1
d=0
para (i = 1; i <= c; i ++)
si (c mod i = 0) entonces
d=d+1
fin_si
fin_para
si (d=2) entonces
cp=cp+1
p[cp]=c
fin_si
hasta (cp=5)
mostrar p[3]
fin
2.3.2. ARREGLOS DE TIPO CARACTER
20. Disear un algoritmo que ingrese una cadena de carcter cualesquiera, para luego
mostrar cuantos caracteres tiene dicha cadena.

Solucin :
Inicio
cad[25]: carcter
L: entero
Ingresar cad
L Longitud (cad)
Mostrar " Nmero caracter", L
Fin
21. Escribir un algoritmo que determine si una cadena de caracteres es un palndromo
( una palabra que al revs dice lo mismo ejm: RADAR)
Solucin :
Inicio
cad[30]: carcter
L, i, j, C 0: entero
Ingresar cad
L Longitud (cad)
jL
para (i=0; i <= L-1; i++)
j j -1
si (cad[i]= cad[j] ) entonces
C C+1
Fin _ si
Fin _ para
si (C = L) entonces
Mostrar "Palndromo"
sino
Mostrar "No es palndromo"
Fin _ si
Fin
22. Ingresar una cadena y mostrar cuantos vocales existen en la cadena.
Solucin :
Inicio
cad[25]: caracter
L, C 0: entero
Ingresar cad
L Longitud cad

para (i=0; i<=L-1; i++)


segn _ sea cad[i] hacer
a : C C+1
e : C C+1
i : C C+1
o : C C+1
u : C C+1
fin _ segn _ sea
fin_para
Mostrar "Cantidad vocales", C
Fin
Escribir un algoritmo que permita ingresar una frase y luego la descomponga en sus
palabras imprimindolas en lneas diferentes ejm : Estructura De Datos Estructura
De
Datos
Solucin :
Inicio
cad[20] : carcter
i, L : entero
ingresar cad [i]
L longitud (cad)
Para ( i = 0; i <= L-1; i++)
mostrar cad [i]
si (cad [i] = ) entonces
saltar lnea
fin_si
fin_para
fin
2.3.3. ARREGLOS BIDIMENSIONALES (Matrices) :
Unidimensional:
Nombre [10]: tipo
Num [10]: entero
Ingresar
Para (i =1; i 10; i ++)
Ingresar Num [i]
Fin_para

Fin
Bidimensional:
Nombre [fila] [columna] : tipo
Num [10] [10] : entero
Ingresar
Para (i = 1; i 10; i ++ )
Para (j = 1; j 10; j ++)
Ingresar Num [i] [j]
Fin_para
Fin_para
Fin
Ejercicios:
1.

Inicio
Num [8] [8]: entero
i, j, N :entero
Repetir
Ingresar N
Hasta (N > 1 y N 8)
Para (i = 1; i N; i ++)
Para (j = 1; j N; j ++)
Repetir
Ingresar Num [i] [j]
Hasta (Num [i] [j] 0)
Fin_para
Fin_para
Fin

2.

Disear un algoritmo que permita ingresar una matriz de orden n donde todos los
elementos de dicha matriz sean nmeros naturales.

3.

Disear un algoritmo que permita ingresar 35 nmeros impares en una matriz de


orden n x m.

Inicio
Num [35] [35]: entero
i, j, N, M: entero
Repetir
Ingresar N, M

Hasta (M x N = 35 y M > 0)
Para (i = 1; i M; i ++)
Para (j = 1; j N; j ++)
Repetir
Ingresar Num [i] [j]
Hasta (Num [i ] [j] mod 2 < > 0)
Fin_para
Fin_para
Fin.
3._ Ingresar 15 nmeros negativos en una matriz de orden mxn.
Inicio
M[15][15]: entero
i, j, m, n: entero
repetir
Ingresar m, n
hasta (m + n =15) y (m>0)
para (i=1; i<=m; i++)
para (j=1; j<=n; j++)
repetir
Ingresar M[i][j]
hasta (M[i][j]>0)
Fin _ para
Fin _ para
Fin
4._ Disear un algoritmo que ingrese una matriz cuadrada, para luego calcular su
diagonal principal.
Inicio
Num[35][35]: entero
i, j, N, S 0: entero
repetir
Ingresar N
hasta (N>1; y N<=35)
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
Ingresar Num[i][j]
Fin _ para

Fin _ para
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
si i=j entonces
S S+Num[i][j]
Fin _ si
Fin _ para
Fin _ para
Mostrar "Diagonal P:", S
Fin
5._ Disear un algoritmo que ingrese una matriz cuadrada, para luego calcular su
diagonal secundaria.
Inicio
Num[35][35]: entero
i, j, N, S 0: entero
repetir
Ingresar N
hasta (N>1; y N<=35)
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
Ingresar Num[i][j]
Fin _ para
Fin _ para
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
si i+j=N+1 entonces
S S+Num[i][j]
Fin _ si
Fin _ para
Fin _ para
Mostrar "Diagonal S", S
Fin
6._ Disear un algoritmo que permita almacenar en un arreglo los impares que sean
dgitos cuando i + j sea par, para el caso que i + j no sea par usted deber ingresar
cualquier nmero negativo.
Inicio

M: entero
i, j, N: entero
para i=1 hasta N
para j=1 hasta N
si (i + j mod 2=0)
repetir
Leer "Ingresar nmero", N
hasta que N>0
M[i][j] =N
sino
repetir
Leer "Ingresar nmero", N
hasta que N<0
M[i][j] =N
Fin _ si
Fin _ para
Fin _ para
Fin
Rellenar una matriz de la siguiente manera:
*

N=6
*

N=4 N=3
Inicio
char Num[20][20];
int n, i, j, C=0;
repetir
Mostrar "Ingresar N:";

Mostrar "N";
hasta (N<=0 | | N>=20)
para (i=0; i<=N-1; i++)
para (j=0; j<=N-1; j++)
si (C=0) entonces
Num[i][j]=*
C=1;
sino
Num[i][j]=0
C=0;
Fin _ si
Fin _ para
Fin _ para
para (i=0; i<=N-1; i++)
para (j=0; j<=N-1; j++)
Mostrar "Num[i][j]
Fin _ para
Fin _ para
Fin
2.4. MODULARIDAD
DEFINICIN:
Mdulo: Un mdulo que se supone que representa una funcin lgica es una secuencia
lxicamente contina de instrucciones que se encuentra limitado por elementos de
fronteras y adems se caracteriza por disponer de un nombre o identificador
Mdulo: Es aqul que est constituido por una o varias instrucciones fsicamente
contiguas y lgicamente encadenadas, las cuales se pueden referenciar mediante un
nombre y pueden ser llamadas desde diferentes puntos de un programa.
Un mdulo puede ser:

Un programa

Una funcin

Una subrutina (o procedimiento)


La modularidad se basa en la descomposicin de un problema en una serie de
sub problemas; dividindolo en mdulos que resultan de segmentar el problema

en funciones lgicas que son perfectamente diferenciadas. Esta divisin exige la


presencia de un mdulo denominado mdulo de base o principal a objeto de que controle
y se relacione con los dems.
Es

una

tcnica

de programacin que

todava

la construccin de algoritmos computacionales

se

utiliza

bsicos

as

tanto
como

para
apoyo

al desarrollo de sistemas de gestin (en el diseo de diagramas modulares).


La salida del mdulo debe ser funcin de la entrada, pero no de ningn estado interno.
En la creacin de los mdulos deben cumplirse tres aspectos bsicos: descripcin,
rendimiento y diseo.
En la descripcin se definen las funciones y objetivos del programa. Para obtener el
mximo rendimiento se

ha

de

comprobar

que

el

programa

realice

el proceso aprovechando al mximo todos los recursos de los que dispone. En cuanto
al diseo, se debe comprobar la estructura que sigue el mdulo, as como la estructura
de los datos y la forma de comunicaciones entre los diversos y diferentes mdulos.
Conforme se extiende el tamao de los algoritmos, se hace ms difcil su revisin,
actualizacin y/o correccin.
Una poltica comn para solventar este problema consiste en la modularizacin. Esto
significa que el algoritmo se fragmenta en partes llamadas mdulos. En realidad, es
un mtodo de diseo que tiende a dividir el problema, de forma lgica, en partes
perfectamente diferenciadas que pueden ser analizadas, programadas y puestas a punto
independiente.
1.

Objetivos:
Descomponer el sistema en mdulos:

- Los grupos deben maximizar el enlace y minimizar el acoplamiento.

Determinar las relaciones entre mdulos:


- Identificar y especificar las dependencias entre mdulos.
-

Determinar

la

forma

de comunicacin entre

funciones, memoria compartida, paso de mensajes)

Especificar las interfaces de los mdulos:


- Facilita la prueba independiente entre los mdulos.
- Mejora la comunicacin e integracin del grupo
1.

Caractersticas:

mdulos

(variables llamadas

Permite reducir la complejidad global del sistema descentralizado; ejm. Divide y


vencers.

Mejora la escalabilidad y la productividad (los mdulos pueden desarrollarse


independientemente por varias personas)
1.

Principios para asegurar diseos modulares:


Soporte de lenguaje para unidades modulares.

Los mdulos deben corresponder a unidades sintcticas del lenguaje utilizado.

Pocas interfaces:
Cada mdulo debe comunicarse con tan pocos como sea posible.

Interfaces pequeas (Acoplamiento dbil):


Si dos mdulos se comunican, deben intercambiar la menor informacin posible..

Interfaces explcitas:
Cuando dos mdulos se comunican, debe estar claro en el texto de uno o de ambos.

Ocultacin de la informacin:
Toda la informacin sobre un mdulo debe ser privada al mdulo, a menos que se haya
declarado especficamente como pblica.
Algunas ventajas de utilizar mdulos son:
Un programa modular es fcil de mantener y modificar.

Un programa modular es ms fcil de escribir y depurar (ejecutar, probar y poner a p

Un programa modular es ms fcil de controlar. El desglose de un problema en mdu


Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas.
Desventajas del uso de mdulos:

No se dispone de algoritmos formales de modularidad, por lo que a veces los program


La programacin modular requiere ms memoria y tiempo de ejecucin.
Segmento: El segmento a diferencia del mdulo se caracteriza porque no dispone de un
nombre o identificador
2.5. METODOLOGA DESCENDENTE: (TOP DOWN)
Proceso mediante el cual un problema se descompone en una serie de niveles o pasos
sucesivos de refinamiento (stipwise). La metodologa descendente consiste en efectuar

una relacin entre las sucesivas etapas de estructuracin, de modo que se relacionen
unas con otras mediante entradas y salidas de informacin.
Es decir se descompone un problema en etapas o estructuras jerrquicas, de modo que
se puede considerar cada estructura desde dos puntos de vista;
Qu hace?
Para ver el grfico seleccione la opcin "Descargar" del men superior
Cmo lo hace?
Para ver el grfico seleccione la opcin "Descargar" del men superior
El diseo descendente se puede ver:
Para ver el grfico seleccione la opcin "Descargar" del men superior
2.6. VARIABLES:
Clasificacin:
Variable Local: Aquella que est declarada y definida dentro de un sub programa, en el
sentido de que est dentro de ese sub programa y es distinta de las variables con el
mismo nombre declaradas en cualquier parte del programa principal. El significado de
una variable se confina al procedimiento en el que est declarada. Cuando otro sub
programa utiliza el mismo nombre, se refiere a una posicin diferente en memoria.
El uso de variables locales tiene muchas ventajas. En particular, hace a los sub
programas independientes con la comunicacin entre el programa principal y los sub
programas manipulados estructuralmente a travs de la lista de parmetros.
Una variable local a un sub programa, no tiene ningn significado en otros sub
programas. Si un sub programa asigna un valor a una de sus variables locales, este valor
no es accesible a otros programas, es decir, no pueden utilizar este valor.
Variable Global: Aquella que est declarada para el programa o algoritmo principal del
que dependen todos los sub programas
Esta variable tiene la ventaja de compartir informacin de diferentes sub programas sin
una correspondiente entrada en la lista de parmetros
2.7. PROCEDIMIENTOS:
Un procedimiento o sub rutina, es un sub programa que ejecuta un proceso especfico.
Ningn valor esta asociado con el nombre del procedimiento, por consiguiente no puede
ocurrir en una expresin. Un procedimiento se llama escribiendo su nombre Ejm. SORT
para indicar que un procedimiento denominado SORT se va a usar.
Cuando se invoca el procedimiento los pasos que los define se ejecuta y a continuacin
se devuelve el control al programa que le llam.
PROCEDIMIENTO VS FUNCION

Los procedimientos y funciones son sub programas, cuyo diseo y misin son similares,
sin embargo existen unas diferencias esenciales entre ellos:
1.

Un procedimiento es llamado desde el algoritmo o programa principal, mediante


su nombre y una lista de parmetros actuales o bien con la instruccin llamar_a (call).
Al llamar al procedimiento se detiene momentneamente el programa que se est
realizando y el control pasa al procedimiento llamado, despus de que
las acciones del procedimiento se ejecutan, se regresa a la accin inmediata siguiente
a la que se llam.

2.

Las funciones devuelven un valor, los procedimientos pueden devolver 0, 1


n valores y en forma de lista de parmetros.

3.

El procedimiento se declara igual que la funcin, pero su nombre no est asociado


a ninguno de los resultados que obtiene.

2.7.FUNCIONES:
Las funciones son bloques de instrucciones que tienen por objeto el alcanzar un resultado
que sustituir a la funcin en el punto de invocacin (las funciones devuelven un
resultado).
Cada funcin se evoca utilizando su nombre en una expresin con los argumentos
actuales o reales encerrados entre parntesis.
Para hacer una referencia a una funcin se invoca mediante un nombre y en caso de
existir, una lista de parmetros actuales necesarios (argumentos). Los argumentos deben
coincidir en cantidad, tipo y orden con los de la funcin que fue definida. La funcin
devuelve un valor nico.
Las funciones a que se hace referencia, se conocen como funciones de usuario puesto
que son definidas por l mismo y permiten su uso en forma idntica a las funciones
estndares.
Para coordinar e iniciar el procesamiento, se utiliza un mdulo principal que es colocado
al final del algoritmo.
Una llamada a la funcin implica los siguientes pasos:
1.

A cada parmetro formal se le asigna el valor real de su correspondiente


parmetro actual.

2.

Se ejecuta el cuerpo de acciones de la funcin.

3.

Se devuelve el valor de la funcin al nombre de la funcin y se retorna al punto de


llamada.

2.7.1. Declaracin de funciones


funcin nombre_funcin (par1, par2,par3,...) : tipo_del_resultado
Inicio
accin1
accin2
:nombre_funcin Resultado_Obtenido
Fin
Donde:
par1,par2 ....
nombre_funcin

Lista de parmetros formales o argumentos.


Nombre asociado de la funcin, que ser un nombre de identificador

vlido.
accin1, accin2,..

Instrucciones que constituyen la definicin de las funcin, y que

debe contener una accin sola de asignacin que asigne un valor al nombre de la
funcin.
Ejemplo:
Obtener el sexto carcter de un nombre y si dicho carcter no existe, se asumir un
asterisco como tal.
Funcin SEXTO(n:string):carcter
Inicio
si longitud(n) >= 6 entonces
SEXTO Subcadena(n,6,1)
en caso contrario
SEXTO *
Fin
Invocacin a las funciones
Una funcin puede ser llamada slo mediante referencia de la forma siguiente:
nombre_funcin (lista de parmetros actuales)
Donde:
nombre_funcin Funcin que llama.
Lista de param. actuales

Constantes, variables, expresiones, valores de funciones,

nombres de funciones o procedimientos.


Una llamada a la funcin implica los siguientes pasos:

A cada parmetro formal se le asigna el valor real de su correspondiente parmetro


actual (esta correspondencia se ver ms tarde y se denomina llamada por valor).
Se ejecuta el cuerpo de acciones de la funcin.
Se devuelve el valor de la funcin y se retorna al punto de llamada.
Ejercicio:
* Calcular la potencia de un nmero.
Funcion POTENCIA(x,n :entero): entero
Inicio
Y=1
Desde i = 1 hasta abs(n) hacer
y = y*x
fin Desde
si n < 0 entonces
y =1/y
Fin si
POTENCIA = y
Fin
2.8. USO DE LOS PARMETROS: FORMALES NORMALES O ARGUMENTOS
PASO DE PARAMETROS
Existen diferentes mtodos para el paso de parmetros a subprogramas, un mismo
programa puede producir diferentes resultados bajo diferentes sistemas de paso de
parmetros.
Los parmetros se clasifican de la siguiente manera:
1. Entradas:

Las entradas proporcionan valores desde el programa que llama y que

se utilizan dentro de un procedimiento. En los subprogramas funcin las entradas son


los argumentos en el sentido tradicional.
2. Salidas:

Las salidas producen los resultados del subprograma; de nuevo si se utiliza

el caso una funcin, mientras que con procedimientos pueden calcularse cero, una o
varias salidas.
3. Entradas/Salidas: Un solo parmetro se utiliza para mandar argumentos a un
programa y para devolver resultados.
Los mtodos ms empleados para realizar el paso de parmetros son:

Paso por valor (parmetro valor).


Se utiliza en muchos lenguajes de programacin (pascal, basic, modula-2, algol, etc),
debido a su analoga con los argumentos de una funcin, donde los valores se

proporcionan en el orden de clculo de resultados. Los parmetros se tratan como


variables locales y los valores iniciales se proporcionan copiando los valores de los
correspondientes argumentos.
Los parmetros formales (locales a la funcin), reciben como valores iniciales los valores
de los parmetros actuales y con ello se ejecutan las acciones descritas en el
subprograma.
La llamada por valor no devuelve informacin al programa que llama.

Paso por referencia o direccin (parmetro variable).


Se utiliza cuando se requiere que ciertos parmetros sirvan como parmetros de salida,
es decir, devuelvan los resultados a la unidad o programas que llama. La unidad que
llama pasa a la unidad llamada la direccin del parmetro actual (que est en el mbito
de la unidad llamante). Una referencia al correspondiente parmetro formal se trata como
una referencia a la posicin de memoria, cuya direccin se ha pasado. Entonces una
variable pasada como parmetro real es compartida, es decir, se puede modificar
directamente por el subprograma. Si el parmetro actual es una expresin, el
subprograma recibe la direccin de la posicin temporal que contiene el valor de la
expresin.
2.9. ARQUITECTURA MODULAR:
La arquitectura es el elemento estable ante los cambios en el ciclo de vida de los
mdulos; la clave est en separar interfaces de implementaciones.
La separacin entre interfaces e implementacin:

Asla de los cambios.

Sirve de mecanismo (compilable) de unin entre arquitectura e implementacin.

El papel de la arquitectura es proporcionar informacin de diseo a los


desarrolladores, para que stos puedan hacer cambios y correcciones a los mdulos, sin
romper la arquitectura.

En cada escala de un sistema modular, se puede definir una arquitectura y una


implementacin:

La implementacin es la realizacin de los componentes modulares.

La arquitectura es la abstraccin que define las interfaces entre componentes.


2.9.1. PLANTEAR Y SOLUCIONAR EJERCICIOS APLICANDO MODULARIDAD:

Para ver el grfico seleccione la opcin "Descargar" del men superior


RECURSIVIDAD:
Puede definirse un programa en trminos recursivos, como una serie de pasos bsicos,
o paso base (tambin conocido como condicin de parada), y un paso recursivo, donde
vuelve a llamarse al programa. En un computador, esta serie de pasos recursivos debe
ser finita, terminando con un paso base. Es decir, a cada paso recursivo se reduce el
nmero de pasos que hay que dar para terminar, llegando un momento en el que no se
verifica la condicin de paso a la recursividad. Ni el paso base ni el paso recursivo son
necesariamente nicos.
Por otra parte, la recursividad tambin puede ser indirecta, si tenemos un procedimiento
P que llama a otro Q y ste a su vez llama a P. Tambin en estos casos debe haber una
condicin de parada.
Existen ciertas estructuras cuya definicin es recursiva, tales como los rboles, y los
algoritmos que utilizan rboles suelen ser en general recursivos.
La funcion FACTORIAL de N expresada en trminos recursivos sera:
entero funcion factorial(E entero: n)
inicio
si (n = 0)
retornar 1
sino
retornar (n * factorial(n-1) )
fin_si
fin_funcion
_______________________________
2.10. RECURSIVIDAD
El concepto de recursividad es muy importante en la programacin funcional, y se puede
definir " Como el proceso de resolver un problema reducindolo a uno ms
subproblemas que son idnticos en su estructura al problema original y ms simple de
resolver."
Una vez que sea subdividido el problema original, se utilizar la misma tcnica de
descomposicin para subdividir cada uno de estos subproblemas en otros que son
menos complejos, hasta que los subproblemas llegan a ser tan simples que se pueden
resolver sin realizar ms subdivisiones, y la solucin general del problema se obtiene
juntando todos los componentes resueltos.
Una funcin o procedimiento que se puede llamar a s misma se llama recursivo. La
recursividad es una herramienta muy potente en algunas aplicaciones, sobre todo de

clculo. La recursin puede ser utilizada como una alternativa a la repeticin o estructura
repetitiva.
La razn de que existan lenguajes que admitan la recursividad se debe a la existencia de
estructuras

especficas

tipo pilas (stack)

para

este

tipo

de procesos y memorias dinmicas.


La recursividad es una manera elegante, intuitiva y concisa de plantear una solucin, y es
uno de los pilares de la programacin funcional. Pero no quiere decir que sea un sistema
eficiente, es decir, que el nmero de operaciones que hay que hacer sea inferior que si se
utiliza otra forma de resolverlo, como seria mediante una estructura repetitiva. Al contrario
la recursividad es cara y exige un mayor procesamiento.
Ejemplo:
//Funcin Fibonacci recursiva
FIB (X):
Inicio_Fibonacci
Si (X = 0 X = 1) entonces
FIB = X
Si no
FIB = FIB (X-1) + FIB (X-2)
Fin_si
Fin_Fibonacci
//Funcin Fibonacci no recursiva
FIB (X):
Inicio_Fibonacci
Si (X = 0 X = 1) entonces
FIB = N
Si no
A=0
B=1
Para (i = 2; i <= X; i++)
C = A+ B
A=B
B=C
Fin_para
FIB = C
Fin_si
Fin_Fibonacci

2.11. REGISTROS
A.- Arreglos de Registros:
1._ Ingresar 10 fechas y mostrar cuantas pertenecen al mes de "Octubre".
Inicio
fecha = Registro
da: entero
mes: entero
ao: entero
Fin _ registro
fechas[10]: fecha
i, C 0: entero
para (i=1; i<=10; i++)
Ingresar fechas[i].fecha.da
Ingresar fechas[i].fecha.mes
Ingresar fechas[i].fecha.ao
Fin _ para
para (i=1; i<=10; i++)
si (fechas[i].fecha.mes=10) entonces
C C+1
Fin _ si
Fin _ para
si C=0 entonces
Mostrar "Nmero de fechas:", C
Fin _ si
Fin.
B.- Registros con Arreglos:
Cliente
Cdigo
CA01
CA02

Inicio

Nom

Cliente = Registro
Cod[6]: caracter
Nom _ Ape[30]: caracter
saldos[12]: real
Total: real
Fin _ Registro
clientes[15]: cliente
i, j: entero
S 0: entero
Para (i=1; i<=5; i++)
Ingresar clientes[i].cliente.cod
Ingresar clientes[i].cliente.Nom _ Ape
S0
Para (j=1; j<=12; j++)
Repetir
Ingresar Clientes[i].cliente.saldos[j]
Hasta (clientes[i].cliente.saldos[j]>=0)
S S+ clientes[i].cliente.saldos[j]
Fin _ para
clientes[i].cliente.total S
Fin _ para
Fin
C.- Registros Anidados
Cod
Inicio
Fecha = Registro
D: entero
M: entero
A: Entero
Fin _ Registro
Dir = Registro
Calle[15]: caracter
Num: entero
Distrito[15]: caracter
Fin _ Registro

Apellido

Persona = Registro
Cod: entero
Ape[15]: caracter
Nom[15]: caracter
Direccin: dir
Fecha Nac: fecha
Fin _ Registro
Personas[20]: persona
i: entero
para (i=1; i<=20; i++)
personas[i].persona.cod i
Ingresar personas[i].persona.Ape
Ingresar personas[i].persona.Nom
Ingresar personas[i].persona.direccin.dir.calle
Ingresar personas[i].persona.direccin.dir.Num
Ingresar personas[i].persona.direccin.dir.distrito
Ingresar personas[i].persona.fecha Nac.D
Ingresar personas[i].persona.fecha Nac.M
Ingresar personas[i].persona.fecha Nac.A
Fin _ para
Fin
2.12. CONCLUSIONES
Ponemos este material al alcance de todos aquellos que necesitan una gua o material de
consulta o referencia.
Mediante el desarrollo de este trabajo se ha logrado desarrollar y entender el curso de
Estructura de Datos.
Conocedores que su realizacin nos han permitido el aprendizaje en los diferentes temas
y estn contribuyendo al cambio de nuestra manera de vivir, con ello nuestra formacin
profesional.
La conclusin a lo que se ha llegado con el desarrollo de este importante curso en
nuestra carrera, es a poder estructurar un programa, lo que posteriormente nos
facilitar el trabajo en los cursos venideros; utilizando para esto la lgica computacional y
la estructuracin; llegando a lograr comprender de esta manera que existen
muchas soluciones a los problemas planteados tanto aplicados a ejemplos como a la vida
real.
2.13. RECOMENDACIONES

Recomendamos mediante el desarrollo de este trabajo a que los alumnos que se


forman para en la carrera de Ingeniera Informtica y de Sistemas u otras afines, pongan
el inters y empeo necesario en sus actividades acadmicas.

Hacemos una invocacin a los Directivos y Docentes de esta nueva carrera


profesional iniciada en esta parte del pas para que se preocupen en atender las
necesidades y exigencias que tiene para su total desarrollo.

Recomendamos de igual forma a los Directivos de la Central en la ciudad de


Chiclayo para que implemente el material bibliogrfico sobre esta carrera, con textos
actualizados y modernos.

BIBLIOGRAFA

Estructura de Datos I
Luis Joyanes Aguilar

Problemas de lgebra y como resolverlos.


Juan C. Ramos L. & Armando Tori L. 1998

Programacin Genrica
Lola Crdenas Luque 2000 - 2003

Arreglos, Cadenas y Estructuras


Lorena Irazunia Reyes Ceja
Alan Hidalgo Vargas 2003

Diccionario Enciclopdico Ocano


Ediciones Ocano 1998

Anlisis y Diseo de Sistemas Informticos.


J. Monzn F David Spencer
Ed. Gomez Lima 1994

Diccionario de Computacin Ingles Espaol


Ed. Mac Graw Hill

Alan Freeman - 1994

Estructura Lgica y Diseo de Programas


Alan Cohen Ed. Paraninfo 1994

Como Programar Microcomputadoras


William Barden, Jr.
Ed. Urmo S.A. - 1982
http://200.21.198.39/asignaturas/846921/contenidos/turorialc3/node3.html
http://www.elrincondel programador.com
ANEXOS
1.- Disear un algoritmo que permita crear un registro Agenda de direcciones cuyos
registros constan de los siguientes campos:
Nombre, Direccin, Ciudad, Telfono, Edad
Luego deber permitirme ordenarlo en forma ascendente (mtodo de burbuja) por medio
de los nombres para posteriormente ingresar un nuevo registro, y ubique este en el lugar
correspondiente, de acuerdo al orden en que le toque.
INICIO
Agenda = Registro
Nombre [40] : Caracter
Direccin [50] : Caracter
Ciudad [30] : Caracter
Telfono : Entero
Edad : Entero
Fin_registro
Agendas[100] : Agenda
Auxiliar[1] : Agenda
i,j,k,m : Entero
Resp : Bolean
Resp = Verdadero
Mientras (Resp =Verdadero) Hacer
Para (i=1 ; i<=100 ; i++ )
Ingresar Agendas[i].Agenda.Nombre
Ingresar Agendas[i].Agenda.Direccion
Ingresar Agendas[i].Agenda.Ciudad
Ingresar Agendas[i].Agenda.Telefono

Ingresar Agendas[i].Agenda.Edad
Fin_Para
Mientras (k Diferente de Null) Hacer
Agendas[i].Agenda.Nombre
m=m+1
Fin_Mientras
Para (i=1 ; i<m ; m++)
Para (j=i+1 ; j<=m ; j++)
Si (Agendas[i].Agenda.Nombre > Agendas[j].Agenda.Nombre) Entonces
Auxiliar[1].Agenda.Nombre = Agendas[i].Agenda.Nombre
Auxiliar[1].Agenda.Direccion = Agendas[i].Agenda.Direccion
Auxiliar[1].Agenda.Ciudad = Agendas[i].Agenda.Ciudad
Auxiliar[1].Agenda.Telefono = Agendas[i].Agenda.Telefono
Auxiliar[1].Agenda.Edad = Agendas[i].Agenda.Edad
Agendas[i].Agenda.Nombre = Agendas[j].Agenda.Nombre
Agendas[i].Agenda.Direccion = Agendas[j].Agenda.Direccion
Agendas[i].Agenda.Ciudad = Agendas[j].Agenda.Ciudad
Agendas[i].Agenda.Telefono = Agendas[j].Agenda.Telefono
Agendas[i].Agenda.Edad = Agendas[j].Agenda.Edad
Agendas[i].Agenda.Nombre = Auxiliar[1].Agenda.Nombre
Agendas[i].Agenda.Direccion = Auxiliar[1].Agenda.Direccion
Agendas[i].Agenda.Ciudad = Auxiliar[1].Agenda.Ciudad
Agendas[i].Agenda.Telefono = Auxiliar[1].Agenda.Telefono
Agendas[i].Agenda.Edad = Auxiliar[1].Agenda.Edad
Fin_Si
Fin_Para
Fin_Para
Mensaje("Desea Ingresar otro Registro" Yes / No)
Si (Yes) Entonces
Resp = Verdadero
Sino
Resp = Falso
Fin si
Fin_Mientras
FIN
2.- Un director de un colegio desea obtener de 20 alumnos los siguientes datos:

Dado la identificacin del alumno se deber obtener la mxima nota del alumno
correspondiente y su respectivo nombre.

Nota media por curso (5 cursos)

Nota media del colegio.

Mayor nota promedio por alumno y si existen varios alumnos con la misma nota
deber visualizarse cada uno de ellos.

Cuantos alumnos aprobados y desaprobados exiten


INICIO
Alumno = Registro
Nombre [50] : Caracter
NotaCur1 : Real
NotaCur2 : Real
NotaCur3 : Real
NotaCur4 : Real
NotaCur5 : Real
Fin_registro
Alumnos [20] : Alumno
i, j, : Entero
xNotaMax, : Rea
xTotalCur1, xTotalCur2, xTotalCur3, xTotalCur4, xTotalCur5 : Real
xPromedio, xMayorProm, xMayorProm2 : Real
xTotalColegio : Real
xNombre, : Carcter
Ingresar datos del alumno
Para (i = 1; i <= 20; i++)
Ingresar Alumnos [i].Alumno.Nombre
Ingresar Alumnos [i].Alumno.NotaCur1
Ingresar Alumnos [i].Alumno.NotaCur2
Ingresar Alumnos [i].Alumno.NotaCur3
Ingresar Alumnos [i].Alumno.NotaCur4
Ingresar Alumnos [i].Alumno.NotaCur5
Fin_Para

Identificar alumno y mostrar datos


Ingresar xNombre
Para (i=1, i<=20, i++)
Si Alumnos[i].Alumno. Nombre = xNombre Entonces
xNotaMax = Alumnos[i].Alumno.NotaCur1
Si xNotaMax < Alumnos[i].Alumno.NotaCur2 Entonces
xNotaMax = Alumnos[i].Alumno.NotaCur2
Fin_Si
Si xNotaMax < Alumnos[i].Alumno.NotaCur3 Entonces
xNotaMax = Alumnos[i].Alumno.NotaCur3
Fin_Si
Si xNotaMax < Alumnos[i].Alumno.NotaCur4 Entonces
xNotaMax = Alumnos[i].Alumno.NotaCur4
Fin_Si
Si xNotaMax < Alumnos[i].Alumno.NotaCur5 Entonces
xNotaMax = Alumnos[i].Alumno.NotaCur5
Fin_Si
Mostrar xNotaMax
Mostrar Alumnos[i].Alumno.Nombre
Fin_Si
Fin_Para
Nota media por curso
xTotalCur1=0
xTotalCur2=0
xTotalCur3=0
xTotalCur4=0
xTotalCur5=0
Para (i = 1; i<=20, i++)
xTotalCur1=xTotalCur1 + Alumnos[i].Alumno.NotaCur1
xTotalCur2=xTotalCur2 + Alumnos[i].Alumno.NotaCur2
xTotalCur3=xTotalCur3 + Alumnos[i].Alumno.NotaCur3
xTotalCur4=xTotalCur4 + Alumnos[i].Alumno.NotaCur4
xTotalCur5=xTotalCur5 + Alumnos[i].Alumno.NotaCur5
Fin_Para
Mostrar xTotalCur1/20
Mostrar xTotalCur2/20

Mostrar xTotalCur3/20
Mostrar xTotalCur4/20
Mostrar xTotalCur5/20
Nota media del Colegio
xTotalColegio=0
Para (i = 1;i<=20,i++)
xTotalColegio=xTotalColegio + Alumnos[i].Alumno.NotaCur1
xTotalColegio=xTotalColegio + Alumnos[i].Alumno.NotaCur2
xTotalColegio=xTotalColegio + Alumnos[i].Alumno.NotaCur3
xTotalColegio=xTotalColegio + Alumnos[i].Alumno.NotaCur4
xTotalColegio=xTotalColegio + Alumnos[i].Alumno.NotaCur5
Fin_Para
Mostrar xTotalColegio/100
Mayor nota promedio por alumno
xMayorProm = 0
Para (i =1; i<=20, i++)
xMayorProm2 = (Alumnos[i].Alumno.NotaCur1 + Alumnos[i].Alumno.NotaCur2 +
Alumnos[i].Alumno.NotaCur3 + Alumnos[i].Alumno.NotaCur4 +
Alumnos[i].Alumno.NotaCur5)/ 5
Si xMayorProm<xMayorProm2 Entonces
xMayorProm = xMayorProm2
Fin_Si
Fin_Para
Para (j = 1; j <= 20, j++)
xMayorProm2 = (Alumnos[i].Alumno.NotaCur1 + Alumnos[i].Alumno.NotaCur2 +
Alumnos[i].Alumno.NotaCur3 + Alumnos[i].Alumno.NotaCur4 +
Alumnos[i].Alumno.NotaCur5)/ 5
Si xMayorProm = xMayorProm2 Entonces
Mostrar xMayorProm
Mostrar Alumnos[i].Alumno.Nombre
Fin_Si
Fin_Para
Total aprobados y desaprobados
xTotalAprob = 0
xTotalDesaprob = 0
Para (i = 1; i <= 20; i++)

xPromedio = (Alumnos[i].Alumno.NotaCur1 + Alumnos[i].Alumno.NotaCur2 +


Alumnos[i].Alumno.NotaCur3 + Alumnos[i].Alumno.NotaCur4 +
Alumnos[i].Alumno.NotaCur5) / 5
Si xPromedio >= 10.5 Entonces
xTotalAprob = xTotalAprob + 1
Sino
xTotalDesaprob = xTotalDesaprob + 1
Fin_Si
Fin_Para
Mostrar xTotalAprob
Mostrar xTotalDesaprob
FIN
3.- Disear un algoritmo que permita controlar para 5 libros los siguientes datos:
Ttulo, Autos, Editorial, Ao de edicin, Nmero de pginas.
Luego se permitir el ingreso de un ao determinado y el algoritmo deber mostrarme
todos aquellos libros que pertenezcan a este ao y cuyas pginas estn entre 600 y 1400
pginas.
INICIO
Libro = Registro
Titulo [30] : Caracter
Autor [40] : Caracter
Editorial [40] : Caracter
AoEdicion : Entero
NumPaginas : Entero
Fin_Registro
Libros [5] = Libro
i : Entero
xAnio : Entero
Para (i=1; i<=5; i++)
Ingresar Libros[i].Libro.Titulo
Ingresar Libros[i].Libro.Autor
Ingresar Libros[i].Libro.Editorial
Ingresar Libros[i].Libro.AoEdicion
Ingresar Libros[i].Libro.NumPaginas
Fin_Para
Ingresar xAnio

Para (i=1; i<=5; i++)


Si(Libros[i].Libro.AoEdicion = xAnio) Entonces
Si (600 < Libros[i].Libro.NumPaginas <1400) Entonces
Mostrar Libros[i].Libro.Titulo
Mostrar Libros[i].Libro.Autor
Mostrar Libros[i].Libro.Editorial
Mostrar Libros[i].Libro.AoEdicion
Mostrar Libros[i].Libro.NumeroPaginas
Fin_Si
Fin_Si
Fin_Para
FIN
4.- Disear un algoritmo que me permita aceptar la forma en que los datos de un DNI
(Documento Nacional de Identidad) estn controlados. Los datos que un DNI tiene son:
Nmero del DNI, Apellido paterno, apellido materno, nombres, fecha de nacimiento, sexo,
estado civil, fecha de inscripcin, fecha de emisin, fecha de caducidad, departamento,
provincia, distrito, calle y nmero, grupo de votacin y un campo lgico que determine si
la persona desea donar rganos.
INICIO
Fecha = Registro
Dia : Entero
Mes : Entero
Ao : Entero
Fin_Registro
Ubicacin = Registro
Departam[50] : Carcter
Provincia[50] : Carcter
Distrito[50] : Carcter
Calle[50] : Carcter
Numero : Entero
Fin_Registro
Persona = Registro
Numero[8] : Caracter
ApePaterno[40] : Caracter
ApeMaterno[40] : Carcter
Nombres[40] : Carcter

FechaNac : Fecha
Sexo: Boolean
EstadoCivil[10] : Carcter
FechaInsc : Fecha
FechaEmis : Fecha
FechaCaduc : Fecha
Direccin : Ubicacion
GrupoVotac[6] : Caracter
DonacOrg : Boolean
Edad : Entero
Sexo : Boolean
Fin_Registro
Personas[100000] = Persona
I, xReg : Entero
xReg=0
Hacer
Mostrar "1. Ingresar datos"
Mostrar "2. Mostrar datos"
Mostrar "3. Salir"
Mostrar "Ingrese opcin : "
Hacer
Ingresar zOpcion
Hasta (xOpcion>=1 And xOpcion<=3)
Segn_sea xOpcion hacer
1: Inicio
xReg=xReg+1
Ingresar Personas[xReg].Persona.Numero
Ingresar Personas[xReg].Persona.ApePaterno
Ingresar Personas[xReg].Persona.ApeMaterno
Ingresar Personas[xReg].Persona.Nombres
Ingresa r Personas[xReg].Persona.FechaNac.Fecha.Dia
Ingresar Personas[xReg].Persona.FechaNac.Fecha.Mes
Ingresar Personas[xReg].Persona.FechaNac.Fecha.Ao
Ingresar Personas[xReg].Persona.Sexo
Ingresar Personas[xReg].Persona.EstadoCivil
Ingresar Personas[xReg].Persona.FechaInsc.Fecha.Dia

Ingresar Personas[xReg].Persona.FechaInsc.Fecha.Mes
Ingresar Personas[xReg].Persona.FechaInsc.Fecha.Ao
Ingresar Personas[xReg].Persona.FechaEmis.Fecha.Dia
Ingresar Personas[xReg].Persona.FechaEmis.Fecha.Mes
Ingresar Personas[xReg].Persona.FechaEmis.Fecha.Ao
Ingresar Personas[xReg].Persona.FechaCaduc.Fecha.Dia
Ingresar Personas[xReg].Persona.FechaCaduc.Fecha,Mes
Ingresar Personas[xReg].Persona.FechaCaduc.Fecha,Ao
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Departam
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Provincia
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Distrito
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Calle
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Numero
Ingresar Personas[xReg].Persona.DonacOrg
Fin
2: Inicio
Para ( i=1; i<=xReg; i++)
Mostrar Personas[xReg].Persona.Numero
Mostrar Personas[xReg].Persona.ApePaterno
Mostrar Personas[xReg].Persona.ApeMaterno
Mostrar Personas[xReg].Persona.Nombres
Mostrar Personas[xReg].Persona.FechaNac.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaNac.Fecha.Mes
Mostrar Personas[xReg].Persona.FechaNac.Fecha.Ao
Mostrar Personas[xReg].Persona.Sexo
Mostrar Personas[xReg].Persona.EstadoCivil
Mostrar Personas[xReg].Persona.FechaInsc.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaInsc.Fecha.Mes
Mostrar Personas[xReg].Persona.FechaInsc.Fecha.Ao
Mostrar Personas[xReg].Persona.FechaEmis.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaEmis.Fecha.Mes
Mostrar Personas[xReg].Persona.FechaEmis.Fecha.Ao
Mostrar Personas[xReg].Persona.FechaCaduc.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaCaduc.Fecha,Mes
Mostrar Personas[xReg].Persona.FechaCaduc.Fecha,Ao
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Departam

Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Provincia
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Distrito
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Calle
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Numero
Mostrar Personas[xReg].Persona.DonacOrg
Fin_Para
Fin
Fin_Segn_Sea
Hasta (xOpcion=3)
FIN
5.- Disear un algoritmo que imprima todos los nombres, apellidos y edades de todos los
varones nacidos entre dos fechas ingresadas desde el teclado. Para lo cual deber tener
en cuenta el siguiente esquema:
Persona.
Cdigo

Apellidos

Nombres

Fecha de nacimiento
Da

INICIO
Fecha = Registro
Dia : Entero
Mes : Entero
Ao : Entero
Fin_Registro
Persona = Registro
Codigo [4] : Caracter
Apellidos [40] : Caracter
Nombres [40] : Caracter
FechaNac : Fecha
Edad : Entero
Sexo : Boolean
Fin_Registro
Personas [100] = Persona
i : Entero
Para (i=1; i<=5; i++)
Ingresar Personas[i].Persona.Codigo
Ingresar Personas[i].Persona.Apellidos
Ingresar Personas[i].Persona.Nombres

Mes

Ao

Edad

Sexo

Ingresar Personas[i].Persona.FechaNac.Fecha.Dia
Ingresar Personas[i].Persona.FechaNac.Fecha.Mes
Ingresar Personas[i].Persona.FechaNac.Fecha.Ao
Ingresar Personas[i].Persona.Edad
Ingresar Personas[i].Persona.Sexo
Fin_Para
Ingresar xDiaIni
Ingresar xMesIni
Ingresar xAoIni
Ingresar xDiaFin
Ingresar xMesFin
Ingresar xAoFin
Para (i=1; i<=5; i++)
Si (xAoIni >= Personas[i].Persona.FechaNac.Fecha.Ao <= xAoFin Entonces
Si (xMesIni >= Personas[i].Persona.FechaNac.Fecha.Mes <= xMesFin Entonces
Si (xDiaIni >= Personas[i].Persona.FechaNac.Fecha.Dia <= xDiaFin
Si Ingresar Personas[i].Persona.Sexo= Verdadero Entonces
Mostrar Personas[i].Persona.Nombres
Mostrar Personas[i].Persona.Apellidos
Mostrar Personas[i].Persona.Edad
Fin_Si
Fin_Si
Fin_Si
Fin_Si
Fin_Para
6.- Ingresar y mostrar los datos del siguiente esquema:
Alumno:
Cdigo

Nombres

INICIO
Apoderado = Registro
NumDoc[8] : Carcter
ApeApod[50] : Carcter
NomApod[50] : Carcter
VinculoFam[50] : Carcter
Fin_Registro

Apoderado
N Doc

Apellidos

Nombres

Vinculo Fam.

Alumno = Registro
Codigo[5] : Carcter
ApeAlum[50] : Caracter
NomAlum[50] : Caracter
Apod : Apoderado
Fin_Registro
Alumnos[100] = Alumno
I, xReg : Entero
xReg=0
Hacer
Mostrar "1. Ingresar datos"
Mostrar "2. Mostrar datos"
Mostrar "3. Salir"
Mostrar "Ingrese opcin : "
Hacer
Ingresar zOpcion
Hasta (xOpcion>=1 And xOpcion<=3)
Segn_sea xOpcion hacer
1: Inicio
xReg=xReg+1
Ingresar Personas[xReg].Persona.Numero
Ingresar Personas[xReg].Persona.ApePaterno
Ingresar Personas[xReg].Persona.ApeMaterno
Ingresar Personas[xReg].Persona.Nombres
Ingresa r Personas[xReg].Persona.FechaNac.Fecha.Dia
Ingresar Personas[xReg].Persona.FechaNac.Fecha.Mes
Ingresar Personas[xReg].Persona.FechaNac.Fecha.Ao
Ingresar Personas[xReg].Persona.Sexo
Ingresar Personas[xReg].Persona.EstadoCivil
Ingresar Personas[xReg].Persona.FechaInsc.Fecha.Dia
Ingresar Personas[xReg].Persona.FechaInsc.Fecha.Mes
Ingresar Personas[xReg].Persona.FechaInsc.Fecha.Ao
Ingresar Personas[xReg].Persona.FechaEmis.Fecha.Dia
Ingresar Personas[xReg].Persona.FechaEmis.Fecha.Mes
Ingresar Personas[xReg].Persona.FechaEmis.Fecha.Ao
Ingresar Personas[xReg].Persona.FechaCaduc.Fecha.Dia

Ingresar Personas[xReg].Persona.FechaCaduc.Fecha,Mes
Ingresar Personas[xReg].Persona.FechaCaduc.Fecha,Ao
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Departam
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Provincia
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Distrito
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Calle
Ingresar Personas[xReg].Persona.Direccion.Ubicacin.Numero
Ingresar Personas[xReg].Persona.DonacOrg
Fin
2: Inicio
Para ( i=1; i<=xReg; i++)
Mostrar Personas[xReg].Persona.Numero
Mostrar Personas[xReg].Persona.ApePaterno
Mostrar Personas[xReg].Persona.ApeMaterno
Mostrar Personas[xReg].Persona.Nombres
Mostrar Personas[xReg].Persona.FechaNac.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaNac.Fecha.Mes
Mostrar Personas[xReg].Persona.FechaNac.Fecha.Ao
Mostrar Personas[xReg].Persona.Sexo
Mostrar Personas[xReg].Persona.EstadoCivil
Mostrar Personas[xReg].Persona.FechaInsc.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaInsc.Fecha.Mes
Mostrar Personas[xReg].Persona.FechaInsc.Fecha.Ao
Mostrar Personas[xReg].Persona.FechaEmis.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaEmis.Fecha.Mes
Mostrar Personas[xReg].Persona.FechaEmis.Fecha.Ao
Mostrar Personas[xReg].Persona.FechaCaduc.Fecha.Dia
Mostrar Personas[xReg].Persona.FechaCaduc.Fecha,Mes
Mostrar Personas[xReg].Persona.FechaCaduc.Fecha,Ao
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Departam
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Provincia
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Distrito
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Calle
Mostrar Personas[xReg].Persona.Direccion.Ubicacin.Numero
Mostrar Personas[xReg].Persona.DonacOrg
Fin_Para

Fin
Fin_Segn_Sea
Hasta (xOpcion=3)
FIN
7.- Una empresa desea conocer de sus trabajadores lo siguiente:
cdigo, apellidos, nombres, rea y departamento en el que labora, cargo que ocupa,
condicin del trabajador (activo, jubilado, otra condicin), fecha que ingreso a laborar, n
de documento de identidad, grupo sanguneo, direccin y nmero de carga familiar con la
que el trabajador cuenta.
INICIO
Fecha = Registro
Dia : Entero
Mes : Entero
Ao : Entero
Fin_Registro
Trabajador = Registro
Codigo [5] : Carcter
ApeTrabaj[50] : Caracter
NomTrabaj[50] : Caracter
Area[50] : Caracter
Departamento[50] : Caracter
Cargo[50] : Carcter
CondicTrabaj[50] : Caracter
FechaIng : Fecha
DocumIdent[8] : Carcter
GrupoSang[8] : Carcter
Direccion[8] : Carcter
NumCargaFam[8] : Carcter
Fin_Registro
Trabakadpres[100] = Trabajador
I, xReg : Entero
xReg=0
Hacer
Mostrar "1. Ingresar datos del trabajador"
Mostrar "2. Mostrar datos del trabajador"
Mostrar "3. Salir"

Mostrar "Ingrese opcin : "


Hacer
Ingresar zOpcion
Hasta (xOpcion>=1 And xOpcion<=3)
Segn_sea xOpcion hacer
1: Inicio
xReg=xReg+1
Ingresar Trabajadores [xReg]. Trabajador.Codigo
Ingresar Trabajadores[xReg].Trabajador.ApeTrabaj
Ingresar Trabajadores[xReg].Trabajador.NomTrabaj
Ingresa r Trabajadores[xReg]. Trabajador.Area
Ingresar Trabajadores[xReg].Trabajador.Departamento
Ingresar Trabajadores[xReg].Trabajador.Cargo
Ingresar Trabajadores[xReg].Trabajador.CondicTrabaj
Ingresar Trabajadores[xReg].Trabajador.Fecha.FechaIng
Ingresar Trabajadores[xReg].Trabajador.DocumIdent
Ingresar Trabajadores[xReg].Trabajador.CondicTrabaj
Ingresar Trabajadores[xReg].Trabajador.GruopSang
Ingresar Trabajadores[xReg].Trabajador.Direccion
Ingresar Trabajadores[xReg].Trabajador.NumCargaFam
Fin
2: Inicio
Para ( i=1; i<=xReg; i++)
Mostrar Trabajadores [xReg]. Trabajador.Codigo
Mostrar Trabajadores[xReg].Trabajador.ApeTrabaj
Mostrar Trabajadores[xReg].Trabajador.NomTrabaj
Mostrar Trabajadores[xReg]. Trabajador.Area
Mostrar Trabajadores[xReg].Trabajador.Departamento
Mostrar Trabajadores[xReg].Trabajador.Cargo
Mostrar Trabajadores[xReg].Trabajador.CondicTrabaj
Mostrar Trabajadores[xReg].Trabajador.Fecha.FechaIng
Mostrar Trabajadores[xReg].Trabajador.DocumIdent
Mostrar Trabajadores[xReg].Trabajador.CondicTrabaj
Mostrar Trabajadores[xReg].Trabajador.GruopSang
Mostrar Trabajadores[xReg].Trabajador.Direccion
Mostrar Trabajadores[xReg].Trabajador.NumCargaFam

Fin_Para
Fin
Fin_Segn_Sea
Hasta (xOpcion=3)
FIN
8.- Solucionar el siguiente esquema de una boleta de venta.
Boleta
Nmero

Cliente

Direccin

Fecha
Da

Mes

Ao

Detalle
Nmero
INICIO
Fecha = Registro
Dia : Entero
Mes : Entero
Ao : Entero
Fin_Registro
Boleta = Registro
Num[5] : Carcter
Cliente[50] : Caracter
Direccion[50] : Caracter
FechaBol : Fecha
TotalBol : Real
Fin_Registro
Detalle = Registro
Num[5] : Carcter
Cantidad[50] : Caracter
Detalle[50] : Caracter
PrecioUni : Real
TotalDeta : Real
Fin_Registro
Boletas[20] = Boleta
Detalles[160] = Detalle
i, xRegD, xCant : Entero
xPrecioUni, xTotalBoleta : Real
xDatoOk : Boolean

Total

xRpta : Caracter
xRegD=0
Hacer
Mostrar "1. Ingresar boletas"
Mostrar "2. Mostrar boletas"
Mostrar "3. Salir"
Mostrar "Ingrese opcin : "
Hacer
Ingresar zOpcion
Hasta (xOpcion>=1 And xOpcion<=3)
Segn_sea xOpcion hacer
1: Inicio
Para ( i=1; i<=20; i++)
Ingresar Boletas[i].Boleta.Codigo
Ingresar Boletas[i].Boleta.Num
Ingresar Boletas[i].Boleta.Cliente
Ingresa r Boletas[i].Boleta.Direccin
xDatoOk=False
Mientras xDatoOk=False Hacer
Ingresar Boletas[i].Boleta.Fechabol.Fecha.Dia
Si Boletas[i].Boleta.Fechabol.Fecha.Dia =Dato Numerico Entonces
Si (1<=Boletas[i].Boleta.Fechabol.Fecha.Dia<=31 Entonce
xDatoOk=True
Fin_Si
Fin_Si
Fin_Mientras
xDatoOk=False
Mientras xDatoOk=False Hacer
Ingresar Boletas[i].Boleta.Fechabol.Fecha.Mes
Si Boletas[i].Boleta.Fechabol.Fecha.Mes = Dato Numerico Entonce
Si (1<=Boletas[i].Boleta.Fechabol.Fecha.Mes<=12) Entonces
xDatoOk=True
Fin_Si
Fin_Si
Fin_Mientras
xDatoOk=False

Mientras xDatoOk=False Hacer


Ingresar Boletas[i].Boleta.Fechabol.Fecha.Ao
Si Boletas[i].Boleta.Fechabol.Fecha.Ao =Dato Numerico Entonce
Si (0<=Boletas[i].Boleta.Fechabol.Fecha.Ao<=9999) Entonces
xDatoOk=True
Fin_Si
Fin_Si
xRpta=Si
xCont=1
xTotalBoleta=0
Mientras xRpta=Si And xCont<=8 hacer
xNumDeta=xNumDeta + 1
Ingresar Detalles[xRegD].Detalle.Num=Boletas[i].Boleta.Num
Ingresar Detalles[xRegD].Detalle.Cantidad
xCantidad= Detalles[xRegD].Detalle.Cantidad
Ingresar Detalles[xRegD].Detalle.Detalle
Ingresar Detalles[xRegD].Detalle.PrecioUni
xPrecioUni= Detalles[xRegD].Detalle.PrecioUni
Detalles[xRegD].Detalle.TotalDeta=xCantidad * xPrecioUni
xTotalBoleta = xTotalBoleta + (xCantidad * xPrecioUni)
Mostrar "Ingresar Nuevo detalle? (Si/No):"
Ingresar xRpta
Fin_Mientras
Boletas[i].Boleta.TotalBol=xTotalBoleta
Fin_Para
***Realizar el ordenamiento por metodo burbuja
***
Fin
2: Inicio
Para ( i=1; i<=20; i++)
Mostrar Boletas[i].Boleta.Codigo
Mostrar Boletas[i].Boleta.Num
Mostrar Boletas[i].Boleta.Cliente
Mostrar Boletas[i].Boleta.Direccion
Mostrar Boletas[i].Boleta.Fechabol.Fecha.Dia
Mostrar Boletas[i].Boleta.Fechabol.Fecha.Mes

Mostrar Boletas[i].Boleta.Fechabol.Fecha.Ao
Mostrar Boletas[i].Boleta.totalBol
Para (j=1; j<=160; j++)
Si Detalles[j].Num=Boletas.[i].Boleta.Num Entonces
Mostrar Detalles[j].Detalle.Num
Mostrar Detalles[j].Detalle.Cantidad
Mostrar Detalles[j].Detalle.Detalle
Mostrar Detalles[j].Detalle.PrecioUni
Mostrar Detalles[j].Detalles.TotalDeta
Fin_Si
Fin_Para
Fin_Para
Fin
Fin_Segn_Sea
Hasta (xOpcion=3)
FIN
IV. AGRADECIMIENTO
Nuestro agradecimiento a los Directivos y docentes de esta casa Superior de Estudios
por haberse preocupado para que en esta zona del Nor Oriente Peruano exista ms
oportunidades de superacin acadmica de nivel universitario.
En especial nuestro agradecimiento a todas las personas que de manera desinteresada
se involucraron en apoyarnos para seguir adelante en nuestra formacin universitaria que
hemos iniciado.
El equipo de trabajo.
El presente trabajo est dedicado a nuestras familias, y a todas aquellas personas que
nos apoyan y comprenden para que salgamos adelante y cumplamos nuestra meta.

Autor:
Lozano Meja Ansel Aladino
Vrtiz Osores David Daniel
Vsquez Carrin, Malena Celeste
Vsquez Zamora, Humberto
vodd69[arroba]hotmail.com
amistades[arroba]hotmail.com
Estudiantes de Ingeniera Informtica y Sistemas

Universidad de Chiclayo Filial Jan Per


REFERENCIA BIBIOGRAFICA

Leer ms: http://www.monografias.com/trabajos14/estruct-datos/estructdatos2.shtml#ixzz3ZCl32TyG


leer ms: http://www.monografias.com/trabajos14/estruct-datos/estructdatos.shtml#INTRO#ixzz3ZCv79b1A
Referencia bibliografica
https://sites.google.com/site/basesdelaprogramacion/unidad-iii

Potrebbero piacerti anche