Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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:
{
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
como
enlace,
que
por
lo
general
es
realizado
por
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.
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
(&), 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
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:
char
*strncpy(constchar
*s1,
constchar
*s2,
size_t
n) --
Copia
los
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:
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:
ejemplo,
para
la pantalla.
De
esta
forma,
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.
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
Se dividen en 2 tipos:
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:
/**********************************************************
*
puerto2.c
*
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;
}
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,
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.
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.
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.
CAPITULO
II
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.
1.
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
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.
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
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
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.
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
tcnica
de programacin que
todava
se
utiliza
bsicos
as
tanto
como
para
apoyo
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:
Determinar
la
forma
de comunicacin entre
Caractersticas:
mdulos
(variables llamadas
Pocas interfaces:
Cada mdulo debe comunicarse con tan pocos como sea 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.
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.
2.
3.
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.
2.
3.
vlido.
accin1, accin2,..
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
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:
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
para
este
tipo
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
BIBLIOGRAFA
Estructura de Datos I
Luis Joyanes Aguilar
Programacin Genrica
Lola Crdenas Luque 2000 - 2003
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.
Mayor nota promedio por alumno y si existen varios alumnos con la misma nota
deber visualizarse cada uno de ellos.
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++)
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"
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
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