INFORME FINAL_LEON ZARATE - Universidad Nacional del

Anuncio
INDICE
Pág.
INDICE
1
RESUMEN
5
INTRODUCCION
6
MARCO TEORICO
9
MATERIALES Y METODOS
11
RESULTADOS
12
CAPÍTULO I
1.
HARDWARE Y SOFTWARE.
13
1.1 Hardware
13
1.2 Software.
33
1.3 Conceptos Básicos
41
1.4 Relación de Ejercicios
42
CAPÍTULO II
2.
HERRAMIENTAS DE PROGRAMACIÓN.
47
2.1 Análisis del problema
47
2.2 Diseño del algoritmo
48
2.3 Diagramas de Flujo
48
2.3 Pseudocódigo.
51
2.4 Relación de ejercicios
52
1
CAPITULO III
3.
PROGRAMACIÓN ESTRUCTURADA.
54
3.1 Secuenciales
54
3.2 Selectivas
55
3.3 Repetitivas.
58
3.4 Relación de ejercicios
62
CAPÍTULO IV
4.
ESTRUCTURA DE DATOS.
65
4.1 Tipos de datos
65
4.2 Estructura de datos
68
4.2.1Estaticas.
68
4.2.2 Dinámicas
102
4.3 Relación de Ejercicios.
133
CAPITULO V
5.
TEORÍA DE GRAFOS.
136
5.1 Conceptos Básicos.
136
5.2 Representación de grafos.
139
5.3 Exploración de grafos.
143
5.4 Relación de ejercicios.
145
CAPÍTULO VI
6.
ORDENAMIENTO Y BÚSQUEDA DE DATOS.
147
6.1 Ordenamiento de datos.
147
6.2 Búsqueda de datos.
158
6.3 Relación de ejercicios.
166
2
CAPÍTULO VII
7.
SOFTWARE DE PROGRAMACIÓN MATLAB.
168
7.1 Introducción.
168
7.2 Operadores
169
7.3 Variables.
171
7.4 Expresiones.
171
7.5 Matlab y el algebra lineal.
172
7.6 Comandos de programación.
192
7.7 Gráficos 2-D.
199
7.8 Gráficos 3-D.
204
7.9 Relación de ejercicios.
212
CAPÍTULO VIII
8.
LENGUAJE DE PROGRAMACIÓN C++.
220
8.1 Introducción.
220
8.2 Operadores.
221
8.3 Tipos de datos.
223
8.4 Constantes.
224
8.5 Variables.
225
8.6 Entrada y salida de datos.
226
8.7 Instrucciones de control.
227
8.8 Funciones.
241
8.9 Librería de funciones creadas por el usuario.
246
8.10 Arreglos.
246
8.11 Estructuras en C++.
258
8.12 Archivos en C++.
264
3
8.13 Cadenas de caracteres en C++.
278
8.14 Gráficos en C++.
282
8.15 Relación de ejercicios.
287
DISCUSION
297
REFERENCIAS BIBLIOGRAFICAS
298
APENDICE
300
Diagrama de las estructuras de datos
300
4
RESUMEN
En este trabajo de investigación se ha elaborado un texto de naturaleza teórico-práctico
que expone de forma sistemática y detallada, las definiciones y ejemplos más importantes de
las Estructuras de datos, Herramientas de programación, Ordenamiento y búsqueda de datos,
Software Matlab y el Lenguaje de programación C++, permitiendo el dictado de la asignatura
de programación de computadoras correspondiente al cuarto ciclo académico del currículo de
estudios de la Escuela profesional de Matemática de la Facultad de Ciencias Naturales y
Matemática de la Universidad Nacional del Callao.
El texto “Programación de computadoras y sus aplicaciones” procura hacer
comprender la asignatura en referencia y así mismo pretende preparar al estudiante para que
emprenda con éxito el estudio de asignaturas de ciclos posteriores, tales como: Investigación
Operativa I y II, Matemática Computacional I, II y III, Métodos matemáticos y los Cursos de
seminario I y II de la Línea del Análisis Numérico y Matemática Computacional.
El texto está basado, en su plan general y en algunas extensiones de su
contenido, en los textos mencionados en los referenciales; sin embargo, la diferencia es que
aquí hemos recopilado lo necesario para el desarrollo de la asignatura de programación de
computadoras y además tenemos ejercicios de aplicación para cada uno de los capítulos a un
nivel adecuado, lo que le da un carácter integral y funcional a la obra.
El resultado muestra que, en comparación con los textos elaborados por otros autores
mencionados
en
la
referencia
bibliográfica,
el
texto
“PROGRAMACION
DE
COMPUTADORAS Y SUS APLICACIONES” hace más dinámico y fácil el proceso de
enseñanza y aprendizaje de esta asignatura.
5
INTRODUCCION
Con el avance de la ciencia y la tecnología nos enfrentamos a una manera diferente de
enseñar las matemáticas y sus aplicaciones.
La asignatura de programación de computadoras proporciona las herramientas
necesarias para la utilización de la computadora como un complemento para el estudio de las
ciencias e ingeniería.
No podemos estar al margen del avance de la tecnología informática que se ha
convertido en una herramienta de investigación para la resolución de complejos problemas
planteados en la realización y aplicación de modelos matemáticos de Ingeniería u otras
disciplinas. Por tanto es necesario contar con un texto que nos permita utilizar de forma
eficiente sus aplicaciones a la matemática e ingeniería.
Es muy limitado la bibliografía, especialmente en textos que logren compilar y
tratar todos los temas relacionados con la asignatura de programación de computadoras,
encontramos en la literatura mayormente que ponen énfasis a ciertos temas. Se requiere un
texto donde podamos relacionar conocimientos teóricos y aplicaciones prácticas, experiencias
de aplicaciones en diferentes ramas de la ciencia e ingenierías. Por lo que es importante
recopilar toda información posible, que se encuentra dispersa, ordenándola en forma sencilla
y razonada, dando origen a la creación del Texto: “Programación de computadoras y sus
aplicaciones.”
En este sentido el problema de la investigación consistió en elaborar un texto de
naturaleza teórico-práctico que oriente adecuadamente el desarrollo sistemático y concreto de
la asignatura
de
“PROGRAMACION DE
COMPUTADORAS”
fundamentales para estudiantes de ciencias e ingeniería.
6
con aplicaciones
El presente trabajo constituye una investigación de gabinete (búsqueda, recopilación,
ordenación y centralización de material bibliográfico).
Es necesario indicar que con el
presente texto no se pretende agotar un tema bastante extenso, complejo y que guarda relación
con otras áreas tanto en ciencia e ingenierías, por el contrario se desea exponer de manera
pragmática y accesible los temas contenidos en el syllabus de “Programación de
Computadoras” para que sirva de guía y referencia preferencialmente para los estudiantes
universitarios de la especialidad matemática y afines.
OBJETIVO GENERAL
Desarrollar - preparar, redactar y editar - un texto de “Programación de Computadoras
y sus aplicaciones” en el que se compile información técnica y científica existente, que sirva
de guía y referencia bibliográfica para los estudiantes de ciencias e ingenierías principalmente
de la Universidad Nacional del Callao.
OBJETIVOS ESPECÍFICOS
Complementar y afianzar los conocimientos impartidos en la asignatura de
Programación de computadoras.
Presentar al lector conceptos y aplicaciones sobre temas específicos tales como:
hardware y software, herramientas de programación, programación estructurada, estructuras
de datos, teoría de grafos, ordenamiento y búsqueda de datos, lenguajes de programación
matlab y C++.
El texto: “Programación de Computadoras y sus aplicaciones” permitirá que el usuario
lector, sea estudiante o no, tenga un material de consulta de primera mano a su disposición,
en donde se centralizará la información científica y técnica existente, relacionadas con las
herramientas básicas de programación y sus aplicaciones a las ciencias e ingeniería.
7
La información que se recopilará, está frecuentemente dispersa en libros, revistas y
manuales, entre otros, de procedencia nacional e internacional. Se compilará después de una
exhaustiva revisión y análisis del material utilizado, es allí donde radica la importancia del
presente trabajo, porque permitirá generar una fuente bibliográfica de constante consulta de
los estudiantes de matemática y ramas afines.
El Texto: “Programación de computadoras y sus aplicaciones” permitirá cubrir parte
de la brecha existente por la falta de bibliografía aplicada, donde se incluyan los nuevos
avances de la tecnología informática.
8
MARCO TEORICO
Existen pocos textos que logren compilar y tratar todos los temas relacionados con la
programación académica del curso de programación de computadoras, se encuentra
bibliografía que ponen énfasis en algunos temas y en otros no.
Todos los capítulos en su integridad contienen material aprovechable (teoría-practica)
para los estudiantes de ciencias e ingenierías.
Los temas más importantes acorde con la programación académica y que se trataran en
este texto son los siguientes:
PROGRAMACION ESTRUCTURADA
La programación estructurada es una forma de escribir programas de ordenador de
forma clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración;
siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional
(GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).
Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las
necesidades de programación existentes en los años 1960, principalmente debido a las
aplicaciones gráficas, por lo que las técnicas de programación estructurada no son suficientes.
Ello ha llevado al desarrollo de nuevas técnicas, tales como la programación orientada a
objetos y el desarrollo de entornos de programación que facilitan la programación de grandes
aplicaciones (Joyanes Aguilar, Fernandez Azuela & Rodriguez Baena, 1998).
ESTRUCTURA DE DATOS
La estructura de datos es una forma de organizar un conjunto de datos elementales con
el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se
tiene en un sistema (Joyanes Aguilar & Zahonero Martinez,1998).
9
TEORIA DE GRAFOS
La teoría de grafos estudia las propiedades de los grafos (también llamadas gráficas).
Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección de
pares de vértices, llamados aristas que pueden ser orientados o no. Típicamente, un grafo se
representa mediante una serie de puntos (los vértices) conectados por líneas (las aristas).
SOFTWARE MATLAB
MATLAB es un software desarrollado en un ambiente de algoritmo de interacción,
visualización y análisis de datos.Con esta herramienta se puede resolver problemas
computacionales técnicos más rápido que con los tradicionales lenguajes de programación,
tales como: C, C++ y Fortran.
Es usado para una gran variedad de cálculos científicos y de ingeniería, especialmente
para control automático y diseño de procesos además de otra variedad de aplicaciones tales
como: procesamiento de señal e imágenes, comunicaciones y modelamiento financiero
(Nakamura, 2000).
LENGUAJE DE PROGRAMACION C++
El Lenguaje de Programación C++ fue creado por Bjarne Stroustrup en 1985 como
una extensión del Lenguaje C, el mismo que es más consistente y conocido que otros
lenguajes de programación científicos.
El Lenguaje de Programación C++ es de propósito general porque ofrece control de
flujo, estructuras sencillas y un buen conjunto de operadores. Se puede utilizar en varios tipos
de aplicación (Stroustrup, 2002).
10
MATERIALES Y MÉTODOS
MATERIALES
El texto “PROGRAMACION DE COMPUTADORAS Y SUS APLICACIONES” no
está sujeto a experimento de laboratorio, sin embargo se ha desarrollado sobre la base de
textos, que se propone en la referencia: Nakamura Choichiro(2000), Stroustrup Bjarne(2002),
Delores Etter(1998), software especializado y experiencias propias en el dictado de la
asignatura Programación de Computadoras.
Además también se ha usado material de tipo técnico en el diseño e impresión de
informes trimestrales y final. Toda la información ha sido procesada en una computadora
personal, usando Microsoft Word y en concordancia con las directivas vigentes, mediante el
cual se han editado y elaborado los esquemas y dibujos relacionados a los diversos temas
desarrollados.
MÉTODOS
Luego de realizar la recolección de datos necesarios para la investigación. Los
métodos usados en la discusión de los temas de cada capítulo son clasificados en: Inductivo,
deductivo e inductivo-deductivo.
El método deductivo es conciso y lógico que permite desarrollar la asignatura de
Programación de Computadoras en forma concreta y ordenada.
El método inductivo-deductivo ha hecho posible mostrar el desarrollo de los
programas codificados en el lenguaje de programación C++ y que describen la solución de
problemas concretos de los estudiantes de ciencias e ingenierías así como también, el análisis
de las soluciones para los ejercicios presentados. Estos métodos han permitido que el trabajo
tenga contenido y mayor calidad
11
RESULTADOS
El
resultado
del
presente
trabajo
de
investigación
es
el
texto:
“PROGRAMACION DE COMPUTADORAS Y SUS APLICACIONES” cuyo contenido se
expone en ocho capítulos distribuidos en el orden señalado en el índice y que se presenta en
las paginas siguientes.
En cada capítulo se exponen, en forma clara y directa, los conceptos y leyes
asociados a los temas tratados, a fin de que el estudiante pueda tener una buena referencia
para comprender la solución de los problemas que se presentan al final del capítulo.
Por otro se han elaborado algunas figuras de diagramas de flujo con el fin de
facilitar la comprensión de los programas desarrollados y luego poder codificarlo en el
Lenguaje de programación C++.
Adicionalmente se diseñaron por cada capítulo una relación de ejercicios que
fueron propuestos para ser resueltos con los temas enseñados.
El uso del texto: “PROGRAMACION DE COMPUTADORAS Y SUS
APLICACIONES” permite unificar los conceptos teóricos con los prácticos, lo cual favorece
el proceso enseñanza-aprendizaje de la asignatura de Programación de computadora de
acuerdo a la propuesta silábica para su dictado. Además permite afianzar en el estudiante los
conceptos informáticos básicos y aplicarlos en diferentes áreas.
12
CAPITULO I
HARDWARE Y SOFTWARE
1.1 HARDWARE
¿QUÉ ES UNA COMPUTADORA?
Figura 1.1 Computadora
Definición 1.1 Persona o Dispositivo mecánico o electrónico que realiza cómputos, o sea,
que cuenta o calcula aritméticamente. Su función fundamental es sumar y restar.
La diferencia entre una computadora y una calculadora es que ésta no solo cuenta,
además realiza cálculos mucho más complejos como manejo de exponentes, raíz cuadrada,
etc.
La comúnmente denominada COMPUTADORA realiza funciones mucho más
complejas que contar y calcular, además de trabajar con números también efectúa funciones
lógicas, trabaja con información concreta: palabras, imágenes, sonidos.
Por la tanto la Real Academia de la Lengua la ha titulado como ORDENADOR.
13
Lic. Elmer Alberto León Zárate
Definición 1.2 El ordenador es una máquina de propósito general que gracias a su
velocidad recibe todo tipo de información, la procesa o sea la ordena y una vez procesada la
emite ya digerida para su interpretación.
Definición 1.3 El ordenador es un conjunto de circuitos electrónicos comprimidos en una
pastilla de silicio (llamada Chip), siendo su función fundamental la de encausar las señales
electromagnéticas de un dispositivo a otro.
Definición 1.4 El ordenador es en realidad el MICROPROCESADOR, o sea un
conmutador, es el cerebro y razón de ser del ente denominado computadora. Todo lo demás
que le rodea y se le es conectado no es más que dispositivos mediante los cuales el cerebro se
alimenta de energía e interactúa con el medio ambiente y por lo tanto con nosotros los
usuarios.
COMPONENTES BÁSICOS DE HARDWARE
Al conjunto físico de todos los dispositivos y elementos internos y externos de una
computadora suele denominarse el HARDWARE. Esto es, Equipo Duro. Dichos elementos
son entre los más importantes los siguientes:
1.1.1 UNIDAD CENTRAL DE PROCESO
Definición 1.5 Es en sí en cerebro, el cual se compone a su vez de Unidad Aritmética,
Lógica y de control. Esta unidad trabaja en base a un reloj maestro que coordina la ejecución
de todas las operaciones que realiza el microprocesador.
14
CAPITULO I: Hardware y Software
La unidad fundamental de trabajo de este reloj es la cantidad de instrucciones que el
microprocesador puede ejecutar en un segundo. Así uno de 12 Mhz. Puede realizar 12
millones de ciclos por segundo.
Figura 1.2 Unidad Central de proceso
La rapidez y poder de ejecución de tareas esta determinado completamente por el
microprocesador el cual subdivide a las computadoras en diferentes tipos, entre ellos algunas
ya obsoletas como son: las llamadas 8086 XT, 80286, 80386, 80486 y Pentium (80586),
bautizadas así por la compañía fabricante INTEL la cual ha proveído desde las primeras PC’s
y hasta hoy a la mayoría de maquiladoras de computadoras con sus modelos de cerebro.
Sin embargo Intel no es ya el único fabricante de microprocesadores para las
Computadoras Personales, compiten también en el mercado compañías como Cyrix, AMD,
Power Pc, Digital Equipment, etc. Sin embargo, aunque en competencia la mayoría de esas
compañías ofrecen microprocesadores equivalentes a los estándares ofrecido serie por serie
por Intel Corporation.
El modelo de un microprocesador nos indica sobre todo el PODER o sea el potencial
de tareas que un microprocesador puede ejecutar a la vez y su reloj nos indica su
15
Lic. Elmer Alberto León Zárate
VELOCIDAD de sincronización con la cual éstas son realizadas. Así entre una computadora
286 y una 486 hay una notable diferencia de poder y velocidad incomparable ya que a la
primera no podremos agregarle u ordenarle tantas cosas como a la segunda; y por otro lado
entre una 486 de 25 Mhz y una 486 de 50 Mhz estamos hablando que las dos tienen el mismo
poder, pero la segunda dobla la velocidad a la primera.
1.1.2 TARJETA PRINCIPAL
Definición 1.6 También llamada Tarjeta Madre o Motherboard es donde se encuentran las
conexiones básicas para todos los componentes de la computadora, los cuales giran en torno
al microprocesador.
Es básicamente la que permite o no el futuro crecimiento de las
habilidades de cualquier computadora, una tarjeta con una arquitectura muy cerrada terminará
con la vida de todo el equipo en el momento que ésta requiera una reparación o mejora, éste
fue el caso de la mayoría de las computadoras que existieron en el pasado, como por
mencionar algunas: Comodore 64, Tandy 1000 e incluso todas las XT´s y algunas 286 de
IBM.
Estas se pueden clasificar en la actualidad en:
- Arquitectura de 8 bits: Primeras XT
- Arquitectura ISA 8 -16 bits. La mayoría de las actuales clones
- Arquitectura EISA o MCA de 32 bits.
compatibles de marca de calidad que se venden actualmente.
16
La mayoría de las de IBM o
CAPITULO I: Hardware y Software
Figura 1.3 Tarjeta principal
1.1.3 EL COPROCESADOR MATEMÁTICO O NUMÉRICO
Definición 1.7 Es un microprocesador de instalación opcional, también denominado
Unidad de punto flotante que auxilia al microprocesador en el uso eficiente de programas de
graficación, cálculos matemáticos complejos y diseño entre tantos, lo cual al especializarse
dichas funciones acelera la velocidad con que una computadora puede responder a
necesidades tan sofisticadas.
En la actualidad ya vienen incluidos en todas las computadoras nuevas, ya que el
poder que exigen no puede descartar la falta de éste microprocesador. Si usted desea saber si
su computadora cuenta con uno de ellos, sólo vea, si en el modelo tiene agregada el par de
letras DX en el caso contrario, usted necesitará en el futuro inmediato su instalación. Sobre
todo no queda duda si su maquina en lugar de este par de letras presenta otras como SX, como
por ejemplo: 486 SX de 25 Mhz.
En caso que usted necesite la instalación de uno de ellos, debe asegurarse primero lo
siguiente:
17
Lic. Elmer Alberto León Zárate
 Que su motherboard cuente con un slot disponible específico para el
coprocesador matemático.
 Que el que le venden sea de la misma marca que el Microprocesador Principal
de su computadora
 Que trabaje a la misma velocidad que lo hace el Microprocesador Principal de
su computadora. Esto es, si usted cuenta con una computadora 486 SX de 25
Mhz, el coprocesador debe ser un 487 SX de 25 Mhz. Como puede usted
observar el coprocesador es algo así como la mitad del microprocesador
completo.
Figura 1.4 Coprocesador matemático
1.1.4 LA MEMORIA
Definición 1.8 Es la capacidad de almacenar información, la cual se realiza en bancos
separados de la UCP. Su unidad de almacenamiento es el BYTE que es la capacidad de
almacenar un carácter: una letra, número o cualquier símbolo como #, $, &, etc.
18
CAPITULO I: Hardware y Software
Figura 1.5 Memorias
TIPOS DE MEMORIAS:
a) MEMORIA ROM
Definición 1.9 Esta memoria es sólo de lectura, y sirve para almacenar el programa básico
de iniciación, instalado desde fábrica. Este programa entra en función en cuanto es encendida
la computadora y su primera función es la de reconocer los dispositivos, (incluyendo memoria
de trabajo), dispositivos.
b) MEMORIA RAM
Definición 1.10 Esta es la denominada memoria de acceso aleatorio o sea, como puede
leerse también puede escribirse en ella, tiene la característica de ser volátil, esto es, que sólo
opera mientras esté encendida la computadora.
En ella son almacenadas tanto las
instrucciones que necesita ejecutar el microprocesador como los datos que introducimos y
deseamos procesar, así como los resultados obtenidos de esto.
19
Lic. Elmer Alberto León Zárate
Por lo tanto, programa que se desea ejecutar en la computadora, programa que
máximo debe ser del mismo tamaño que la capacidad de dicha memoria, de lo contrario se
verá imposibilitada de ejecutarlo.
Observación 1.1
Cuando se vea en la necesidad de adquirir un programa de cómputo,
independientemente de cual o para que sea, lea muy bien las instrucciones antes de pagarlo,
puesto que en ellas debe especificar claramente la cantidad recursos mínimos necesarios que
debe tener su equipo para trabajar con éste. Búsquelos con el título,
Observación 1.2
Como puede usted ver, si al momento de apagar nuestra computadora se volatilizan
nuestros datos almacenados en la memoria RAM, requerimos por lo tanto, de medios que
almacenamiento por tiempo indefinido que nos garanticen la seguridad y confiabilidad de
nuestros datos, o sea, otro tipo de memorias.
1.1.5 MEMORIAS AUXILIARES
Por las características propias del uso de la memoria ROM y el manejo de la RAM,
existen varios medios de almacenamiento de información, entre los más comunes se
encuentran:
20
CAPITULO I: Hardware y Software
a) EL DISQUETE, FLOPPY O DISCO FLEXIBLE
Definición 1.11 Es un medio o soporte de almacenamiento de datos formado por una pieza
circular de material magnético, fina y flexible encerrada en una cubierta de plástico cuadrada
o rectangular. Esta tecnología actualmente muy poco se utiliza.
b) CINTA DE RESPALDO
Definición 1.12 Son como las cintas de cassette de audio y pueden almacenar desde 20
Mbytes hasta 2 Gigabytes o más. Son medios de almacenamiento muy económicos y sobre
todo muy rápidos, ya que pueden almacenar todo un disco duro en un pequeño cassette en
unos cuantos minutos.
Figura 1.6 Cintas de respaldo
c) DISCO DURO
Definición 1.13 El Cuál se instala fijo dentro de la computadora, son más rápidos y
seguros que las unidades de lectura de disquete y cuyas capacidades de almacenamiento van
desde los 40 Gigabytes hasta 500 Gigabytes. Los más rápidos andan por debajo de los 15
milisegundos de acceso de la información.
En la actualidad evite comprar discos con
capacidades menores a 40 Gb. En poco tiempo no le servirán prácticamente para nada.
21
Lic. Elmer Alberto León Zárate
Figura 1.7 Disco duro
d) CD-ROM o DISCO COMPACTO
Definición 1.14 Son de mayor capacidad ya que mínimo son de 720 Mbytes y pueden
llegar a almacenar en el futuro alrededor de algunos Terabytes. Se recomienda ir comprando
equipo que contengan éste dispositivo, ya que gracias a las grandes cantidades de información
tan variada que pueden soportar éste tipo de almacenamiento, ya se comienza a construir las
grandes bases de información en un sólo disco: Enciclopedias, Cursos, Viajes turísticos, los
periódicos y revistas del futuro que tenemos frente a nosotros.
Figura 1.8 Disco compacto
22
CAPITULO I: Hardware y Software
1.1.6 FUENTE DE PODER
Definición 1.15 Una fuente de poder o alimentación es un dispositivo que convierte la
tensión alterna de la red de suministro, en una o varias tensiones, prácticamente continuas,
que alimentan los distintos circuitos del ordenador al que se conecta.
Tanto el microprocesador como todos los circuitos que forman los dispositivos se
alimentan de cantidades muy pequeñas de energía necesitan de una fuente que les suministre
y regule la cantidad necesaria. Ya que cualquier variación en el voltaje podría ser suficiente
para quemar dichos circuitos.
Figura 1.9 Fuente de poder
1.1.7 DISPOSITIVOS DE CRECIMIENTO
Definición 1.16 Son las puertas que están listas para recibir la conexión de cualquier otro
aparato o tarjeta que permita ampliar las capacidades de trabajo de una computadora, y son el
punto más importante para asegurarnos haber hecho una buena inversión. Estos son las
Ranuras de Expansión y los puertos.
Los puertos son los puntos de conexión que ya vienen con la computadora y que
permiten la instalación rápida de los dispositivos más comunes, como lo son el teclado, la
impresora, el monitor, etc.
23
Lic. Elmer Alberto León Zárate
1.1.8 DISPOSITIVOS DE ENTRADA DE INFORMACIÓN
Son todos aquellos que permiten al microprocesador la obtención de la información e
instrucciones a seguir en determinado momento.
Gracias a ellos, nosotros podemos
comunicarnos con la computadora. Entre los más utilizados se encuentran:
a) EL TECLADO
Definición 1.17 Es un periférico de entrada o dispositivo, en parte inspirado en el teclado
de las máquinas de escribir, que utiliza una disposición de botones o teclas, para que actúen
como palancas mecánicas o interruptores electrónicos que envían información a la
computadora. Después de las tarjetas perforadas y las cintas de papel, la interacción a través
de los teclados al estilo teletipo se convirtió en el principal medio de entrada para las
computadoras. El teclado tiene entre 99 y 127 teclas aproximadamente.
Figura 1.10 Teclado
b) El MOUSE
Definición 1.18 Este dispositivo permite simular el señalamiento de pequeños dibujos o
localidades como si fuera hecho con el dedo índice, gracias a que los programas que lo
aprovechan presentan sobre la pantalla una flecha que al momento de deslizar el dispositivo
24
CAPITULO I: Hardware y Software
sobre una superficie plana mueve la flecha en la dirección que se haga sobre la pantalla. Una
vez señalado, permite escoger objetos e incluso tomarlos y cambiarlos de lugar.
Figura 1.11 Mouse
c) LOS RASTREADORES ÓPTICOS O ESCANNERS
Definición 1.19 Son prácticamente pequeñas copiadoras, que mediante haces de luz
digitalizan punto por punto una imagen y la transfieren a la memoria de la computadora en
forma de archivo, el tipo de información que pueden rastrear se las da su tipo, incluso los hay
que rastrean a colores.
Figura 1.12 Scanner
La calidad de éstos está representada por la resolución máxima a la que pueden
rastrear una imagen, los hay desde 300 dpi hasta 2400, aunque a la hora de comprarlos se
debe tomar en cuenta por un lado la máxima calidad de salida de su impresora y la cantidad
25
Lic. Elmer Alberto León Zárate
de espacio disponible en su disco duro, así como el tamaño de la memoria RAM de su
máquina, ya que de no coincidir nunca podrá usar su rastreador más allá de las capacidades de
su equipo.
Una de las funciones más sobresalientes de los rastreadores de imágenes son las de
permitir que programas inteligentes de reconocimiento de caracteres conviertan la imagen del
documento rastreado en texto libre que puede, una vez convertido ser modificable incluso
letra por letra.
1.- Escáner manual: Se parece al ratón y a medida que se desplaza por una
superficie lisa va convirtiendo la imagen en archivo, son muy lentos y requieren de
mucha precisión para evitar errores en la imagen obtenida.
2.- Escáner de cama: Son básicamente pequeñas copiadoras que al igual qué éstas,
rastrean el documento depositado en su pantalla. Son muy rápidos, precisos y cada
vez más baratos.
3.- Lápiz óptico: También se le conoce como pantalla rastreadora de código de
barras, muy conocidos por nosotros en los grandes supermercados, los cuales
interpretan información codificada mediante un sistema de barras.
4.- Micrófonos mediante tarjetas de audio: Comenzamos a ver a nuestro
alrededor sistemas de cómputo basados en el reconocimiento de voz que puede
efectuar una computadora mediante una tarjeta instalada específicamente para
convertir la voz en bits y viceversa, así ya comenzamos a ver aparatos controlados por
voz, como algunos que nos contestan por teléfono cuando llamamos a algún banco
para pedir nuestro saldo.
26
CAPITULO I: Hardware y Software
1.1.9 DISPOSITIVOS DE SALIDA DE INFORMACIÓN
Son todos aquellos que nos permiten obtener la información procesada por la
computadora, y entre los más comunes se encuentran:
a) EL MONITOR
Definición 1.20 Es un aparato de los llamados CTR (Tubo de rayos Catódicos) en los
cuales se pueden representar los datos de tipo texto o gráficos procesados por la computadora.
El estándar en vídeo de las modernas computadoras se basa en el sistema VGA, el cual le da
al usuario la capacidad de poder representar en la pantalla no sólo imágenes de mejor calidad
sino que incluso se pueden apreciar en calidad normal fotografías auténticas, dicha capacidad
no la tenía ninguno de los sistemas de vídeo anteriores a éste.
Figura 1.13 Monitor
Al momento de escoger una computadora es muy importante que nos hagan saber de
su calidad, marca y garantía individual, ya que este aparato por si sólo es el que: puede
contaminar más, a menor calidad cansará y deteriorará más nuestra vista, consume mucha
energía, se calienta más que todo el equipo, etc.
27
Lic. Elmer Alberto León Zárate
Por si fuera poco si no fuera de la calidad que necesitamos no nos va a servir en el
momento de usar programas que generen represente imágenes detalladas, realísticas o
precisas. Esto deben tomarlo en cuenta sobre todo aquellas personas que requieren equipo de
cómputo para prestar servicios de Diseño Gráfico, Arquitectura, Edición de Vídeo, Imprentas,
etc.
A la capacidad de generar imágenes de calidad de un monitor se le llama resolución y
se determina por la cantidad de puntos o “pixeles” que contenga la pantalla. Así un monitor
de 640x480 (El estándar en VGA) representará con menor calidad y cantidad de colores las
imágenes realísticas que uno de 1024x768 comúnmente denominado SuperVGA. También los
hay intermedios de 800x600 puntos.
Además un monitor de sistema VGA normal puede representar imágenes máximo
hasta 256 tonalidades diferentes en cambio uno mejor podrá manejar hasta 16 millones de
tonos en color, aquí reside la razón de su resolución y rapidez.
Tanto la calidad de imagen, precisión y rapidez están soportadas por la llamada Tarjeta
de Vídeo, la cual toma la información de la memoria principal, la almacena en la memoria
propia y le ordena al monitor el orden y acomodo de la información punto por punto. Todo lo
anterior significa que si usted cambia de tipo de monitor así también deberá cambiar el tipo de
Tarjeta de vídeo.
b) LA IMPRESORA
Estas actúan como máquinas de escribir, es decir, vacían la información contenida en
la memoria principal en papel. Y se clasifican en cuatro tipos principales:
28
CAPITULO I: Hardware y Software
1.- MATRICIAL DE PUNTOS
Definición 1.21 Son las más rápidas y vendidas, buenas para el trabajo común de oficina,
aunque ruidosas son las más económicas por hoja impresa y baratas en el mercado. También
se denominan así porque su sistema de impresión esta basado en el mismo de la maquina de
escribir, esto es, un rodillo, papel normal, una cinta entintada, pero en lugar de una cuña con
el tipo de letra aquí se substituye por una cabeza de agujas, las cuales salen en secuencia
vertical punzando los puntos indicados para formar la letra.
Esto lo hacen línea vertical por línea vertical por letra por palabra por renglón. Como
puede usted observar en cualquier momento, esto lo hacen tan rápido que apenas alcanzamos
a apreciar como se va dibujando el renglón de letras dejando atrás ese típico ruido de oficina
computarizada.
La medida de rapidez y calidad es la cantidad de caracteres que pueden imprimir por
segundo, entre las medianas de precio y de buena velocidad de encuentran de 260 y 350 CPS.
Estas características hacen de las impresoras de agujas las impresoras más útiles y económicas
en el trabajo cotidiano de una oficina o empresa.
Figura 1.14 Impresora matricial
29
Lic. Elmer Alberto León Zárate
2.- INYECCION DE TINTA
Definición 1.22 Estas funcionan muy parecido a las de matriz de puntos, solo que en vez
de agujas tienen pequeñísimos microtubos decenas de veces más delgados que un cabello
humano por donde arrojan pequeños chorros o gotas de tinta que al tocar el papel se dispersan
y forman una imagen del texto de muy buen calidad, aunque son baratas son por lo general
más lentas que la de agujas, pero tiene la gran ventaja de manejar alta calidad, incluso las de
colores son las más populares sobre todo en uso profesional, estudiantil y doméstico.
Por un precio razonable se pueden encontrar impresoras de calidad tal a colores que
pueden representar con un muy buen porcentaje de fidelidad una fotografía real a 720x720
DPI (puntos por pulgada).
Figura 1.15 Impresora inyección de tinta
3.-IMPRESORA LASER
Definición 1.23 El sistema es totalmente distinto al de las demás y es más bien parecido al
de una copiadora tradicional, o sea, papel magnetizado con un polvo-tinta muy fino que al ser
fundido con un haz láser crean un documento de calidad inigualable que llega alcanzar hasta
los 600 DPI.
30
CAPITULO I: Hardware y Software
Aunque siguen bajando rápidamente de precio, son las más caras por hoja impresa, sin
embargo son las únicas con calidad de imprenta, son la herramienta imprescindible para una
imprenta, edición fotográfica o negocio de diseño gráfico. La velocidad de éstas como de las
de inyección de tinta se mide en Hojas por minuto.
Figura 1.16 Impresora laser
4.-LOS PLOTTERS
Definición 1.24 Son grandes impresoras basadas en plumillas de colores que permiten a
los Arquitectos o Ingenieros convertir un plano o trazo de líneas contenido en la memoria de
su computadora en un auténtico gran plano listo para su envió, ahorrando mediante éstos
sofisticados implementos tanto el diseño a mano de los planos como la heliografía necesaria
para su reproducción.
Figura 1.17 Plotter
31
Lic. Elmer Alberto León Zárate
1.1.10 DISPOSITIVOS DE ENTRADA Y SALIDA DE INFORMACIÓN
Son aquellos mediante los cuales podemos tanto accesar como introducir información
o instrucciones al microprocesador. Entre los más comunes:
a) UNIDADES DE LECTURA/ESCRITURA DE DISQUETES
Definición 1.25 Estas se especializan en leer la información almacenada en los disquetes,
así como escribir en estos los datos a ser almacenados. Según su densidad de escritura será el
tipo de disquete que podrán leer o escribir.
b) MONITORES ITERATIVOS
Definición 1.26 Existen monitores especiales que presentan información como cualquier
monitor lo hace, permitiendo además introducir información señalando con nuestro dedo
sobre ellos, aunque más caros que el simple hecho de comprar un ratón, son muy útiles en
áreas abiertas donde es preciso rapidez y aguante en el uso del dispositivo, como lo es el
hecho de hacer reservaciones en aeropuertos.
c) DISPOSITIVO DE MODEM O FAX-MODEM
Cuando nosotros hablamos por teléfono enviamos por cable señales análogas que al
llegar al otro aparato se convierten en voz nuevamente, sin embargo las computadoras no son
aparatos que generen esas señales u ondas, muy por el contrario una computadora
internamente esta todo el tiempo generando interrupciones en forma de 1´s y 0´s o sea bits,
también llamada frecuencia digital.
Definición 1.27 El Módem es un aparato que una vez conectado uno por computadora por
un lado modula la señal binaria en ondas o señales análogas permitiendo de ésta manera
32
CAPITULO I: Hardware y Software
aprovechar la infraestructura telefónica existente en nuestro mundo para enviar por la misma
vía, voz, datos, imágenes y una vez del otro lado demodula dichas señales convirtiéndolas de
nuevo en bits que al ser interpretados reproducen en la computadora la información recibida
desde el otro lado del mundo.
Aunada a ésta capacidad las nuevas computadoras vienen con una tarjeta de módem
con fax combinado, al cual le llaman fax-módem lo cual significa que además de poder
conectarse con cualquier computadora sincronizada con nosotros en cualquier parte del
mundo, también podemos conectarnos con otras personas, empresas o instituciones que
aunque no tengan computadora si tengan un fax convencional como el que ya es
imprescindible en cualquier empresa.
Si observamos detenidamente un fax convencional encontraremos qué éste dispositivo
es 3 aparatos en uno, o sea:
 Tiene rastreador que fotocopia el documento a ser enviado
 Es módem, porque modula de ida y demodula al recibir la imagen rastreada
 Es impresora porque vacía en papel la información recibida.
1.2 SOFTWARE
Dentro de los componentes básicos, el SOFTWARE o Equipo Blando, es la otra
mitad de la computadora, el alma o la materia gris, ya que las necesidades de crecimiento y de
capacidad han surgido para hacer realidad toda la creatividad, ingenio y desempeño humano.
Definición 1.28 El Software son todas las instrucciones y datos que corren en mayor o
menor medida dentro del ordenador, es decir, la información misma, la razón del ser del
Hardware. En nuestros tiempos a medida que la magia de la electrónica ponen al alcance de
todos estas prodigiosas maquinas verdaderas prótesis mentales, mediante el abaratamiento de
33
Lic. Elmer Alberto León Zárate
la tecnología y por tanto de los costos, en dirección completamente opuesta aumenta la
inversión de los servicios y programas necesarios para optimizar dichos equipos.
En sus orígenes la programación de los ordenadores era hecho sólo, para y por los
mismos científicos que las construían para propósitos muy específicos. El cálculo de la
trayectoria de los proyectiles usados en la II Guerra Mundial, y posteriormente usos muy
parecidos, hasta que mucho después que fue utilizada en el Censo de los Estados Unidos fue
reconociéndose su valor en el campo administrativo donde estuvo hasta hace 2 décadas,
cuando gracias a la Computadora Personal pasaron al dominio público donde con tantas
necesidades fueron surgiendo las aplicaciones diversas para cada oficio.
1.2.1 LOS SISTEMAS OPERATIVOS
Para que una maquina basada completamente en electrónica y un ser humano, ser con
miles de años de evolución obviamente no ha sido fácil la comunicación entre ambos. Desde
sus orígenes los primeros diseñadores y creadores de éstas se dieron cuenta que necesitaban
algo más que permitiera la fácil interpretación de las instrucciones así como de los resultados
obtenidos, para lo cuál crearon un Programa básico que toda computadora debe cargar
primero en su memoria para poderse comunicar y comprender con un ser humano.
Definición 1.29 El Sistema Operativo es programa básico que se carga al momento de
encender la máquina y sirve de intérprete entre el frío lenguaje de la maquina electrónica y el
complejo idioma humano, el Sistema operativo es pues, el gobierno interno de la máquina.
En la actualidad existen varios sistemas operativos para diferentes necesidades y tipos
de computadoras, entre los más conocidos y utilizados actualmente se encuentran los
siguientes:
34
CAPITULO I: Hardware y Software
Definición 1.30 El MS-DOS Microsoft (Disk Operative System) es un sistema operativo
con cual de una u otra forma hemos estado más familiarizados desde la aparición de las
Computadoras Personales y sobre el cuál trabajan la mayoría de los programas usados tanto
en la pequeña, mediana y grande empresa, así como en Industrias, Instituciones y hogares por
millones de gentes alrededor del mundo. Su versión más nueva a la fecha es la 6.22
Definición 1.31 El OS/2 WARP Diseñado por IBM es el competidor más cercano de MSDOS sobre todo por sus grandes capacidades de interconexión de equipos y facilidad de uso
bajo ambiente gráfico.
Definición 1.32 El Netware diseñado por Novell, líder mundial en sistemas operativos
para redes de computadoras que ha conquistado al mundo de la informática por el poder y
versatilidad de sus funciones, así como su extremada capacidad de interconectar
computadoras y recursos de tan variadas capacidades y marcas.
Definición 1.33 El Unix es un sistema operativo de alto rendimiento utilizado actualmente
en grandes proyectos y para necesidades de intercomunicación a nivel internacional y de gran
volumen de operaciones diarias.
En resumen, podemos afirmar que ninguna computadora obedecerá las instrucciones
de ningún programa independientemente de su utilidad sin haber cargado en su memoria
dicho intérprete al momento de encenderse, ya que de esto dependerá su funcionamiento y
eficiencia.
APLICACIONES MÁS POPULARES EN EL MUNDO DE LA INFORMÁTICA
A diferencia de algunos años atrás, hoy existe una infinidad de aplicaciones para
satisfacer desde diversiones o entretenimiento de niños hasta sofisticados programas de
investigación científica; más sin embargo, para las necesidades de la mayoría de los mortales
35
Lic. Elmer Alberto León Zárate
que trabajamos en Instituciones o Empresas y aún para los particulares existe un número
preciso de aplicaciones, que como herramientas no deben faltar en ninguna computadora de
uso personal.
1.2.2 PROCESADORES DE TEXTO
Definición 1.34 También llamados Procesadores de palabras, fueron los primeros en servir
de atracción en la adquisición de una computadora, ya que sustituyen absolutamente el trabajo
de una tradicional maquina de escribir, a nuestras fechas han evolucionado tanto que ya sólo
les falta tomar dictado, - y no les falta mucho para hacerlo pero dentro de las necesidades de
escritura actuales en la mayoría de ellos podemos encontrar las siguientes funciones:
 Escribir de corrido y una sola vez todo nuestro documento
 Permiten con suma rapidez y flexibilidad hacer modificaciones al contenido, como:
mover párrafos o bloques de texto completo de una hoja a otra, entre documentos e
incluso entre programas.
 Cambiar en un instante palabras o frases repetidas por sinónimos sin importar la
cantidad de ellas
 Permiten modificar en la marcha el escrito sin desperdiciar papel, ni tiempo.
 Se puede cambiar de opinión una vez impreso el documento y en unos segundos
cambiar completamente el estilo, diseño, formato e incluso el tipo y tamaño de la letra
deseada.
 Podemos verificar la ortográfica del documento e incluso de ciertas áreas, así como
también buscar sinónimos relacionados con ciertas palabras o frases dudosas.
36
CAPITULO I: Hardware y Software
 Se pueden crear cartas o documentos de tipo constante, ya sea para circulares o
formatos específicos incluso de facturación y manipularlos rápidamente.
 Analizar el documento desde distintos ángulos sin necesidad de imprimirlo.
 Permitir que el programa corrija automáticamente nuestra ortografía o incluso nos
ayude a escribir más pronto mediante palabras que va aprendiendo.
 Crear Documentos estilo periodístico a base de columnas, con gráficos, imágenes o
fotografías e incluso en formato cuadricular.
 Cuentan palabras, deshacen los cambios, imprimen partes, etc.
COMPAÑÍA QUE LO PRODUCE
NOMBRE Y VERSIÓN
Microsoft
Notepad, WordPad, Word para Windows
Novell
Wordperfect para DOS y Windows
Software Libre
OpenOffice, Latex
IBM
Lotus SmartSuite – Word Pro
1.2.3 HOJAS ELECTRÓNICAS
Definición 1.35 También denominadas Hojas de cálculo, casi junto con los procesadores
de texto han invadido toda la administración con sus bondades, es una de las herramientas
imprescindibles en cualquier empresa, ya que gracias a ella, la mayor parte del trabajo
rutinario de arrastrar el lápiz se convierte en un proceso tranquilo y sistemático para cualquier
tarea que involucra complejas fórmulas y procesos basados en análisis, proyecciones,
presupuestos, amortizaciones, cálculos básicos pero repetidos en cantidades, etc.
Entre las capacidades de las modernas hojas de cálculo, encontramos las siguientes:
 Diseño basado en la hoja tabular a base de renglones y columnas
 Rápida escritura de fórmulas autocalculables
37
Lic. Elmer Alberto León Zárate
 Inmensa cantidad de funciones automáticas para necesidades financieras, científicas,
matemáticas, lógicas, de texto, etc.
 Diseño y formato fácil de corregir y ampliar
 Estilo, tipo y tamaño de letra fácilmente modificables
 Manipulación de hojas en libros de trabajo
 Implementación avanzada de varios gráficos estadísticos
 Incrustación de texto e imágenes de diseño gráfico
 Impresión inteligente fácilmente controlable
 Poder en la manipulación de grandes cantidades de registros de información
 Diseño, Generación e Impresión rápida de reportes y listados.
 Herramientas flexibles de proyección y análisis para la planeación y la oportuna toma
de decisiones
 Facilidad de uso y aprendizaje entre otras.
COMPAÑÍA QUE LA PRODUCE
NOMBRE Y VERSIÓN
Microsoft
Excel para Windows
IBM
Lotus SmartSuite – Lotus 123
Software Libre
Open Office
1.2.4 ADMINISTRADORES DE BASES DE DATOS
Definición 1.36 Cuándo las necesidades de manejo de información dentro de la empresa
crecen desorbitadamente, no hay mejor herramienta que los programas de administración de
Bases de Datos, los cuáles gracias a la facilidad de sus procesos nos permiten rápidamente
crear, trabajar y modificar conjuntos específicos de registros con los cuales es su momento es
muy práctico consultar datos precisos, obtener listados ordenados y extracciones directas de
38
CAPITULO I: Hardware y Software
registros basadas en criterios de búsqueda que satisfagan la necesidad inmediata del jefe del
departamento diciendo .... !!Quiero un listado de todos los clientes de la zona norte del país,
que sean del sexo masculino, con edad mayor a 40 años, que tengan saldo menor a N$100,000
y ventas anuales promedio, etc.
Entre sus funciones principales tenemos las siguientes:
 Permiten crear fácilmente cualquier estructura de registro y comenzar a capturar la
información deseada
 Mediante sofisticados pero sencillos lenguajes o procedimientos facilitan la
programación de sistemas específicos
 Sus consultas son muy rápidas
 Permiten ordenar grandes cantidades de información en poco tiempo.
 Son muy útiles para las listas y reportes basados en condiciones de búsqueda.
 Son los únicos capaces de manipular grandes cantidades de registros al mismo tiempo.
 Tienen la capacidad de relacionar y manipular varias bases de datos creadas para
distinto propósito y en tiempos distintos.
 Los hay tanto para usuarios finales como para Programadores expertos
COMPAÑÍA QUE LO PRODUCE
NOMBRE Y VERSIÓN
Microsoft
Access, SQL Server
Microsoft
Fox Pro 2.6 para Windows / DOS
Software Libre
Mysql
IBM
DB2, Informix
Oracle
Oracle
39
Lic. Elmer Alberto León Zárate
1.2.5 OTRAS APLICACIONES POPULARES EN LAS EMPRESAS
NOMBRE
COMPAÑÍA QUE LO PRODUCE
ÁREA DE APLICACIÓN
Autocad 2011
Autodesk
Diseño Arquitectónico 3D
Bancos
Apemex, Compaq, Microsip
Control de Bancos y conciliaciones
Caja
Apemex
Sistema de punto de venta
Contpaq
Computación en Acción
Sistema de Contabilidad Integral
Coreldraw
Corel
Diseño Gráfico Publicitario
MegaPak
Computación en Acción
Facturación, Inventarios, CxC y CxP
Money 2.0
Microsoft
Administración de finanzas personales
Nómina
Microsip
Sistema de Nómina
Organizer
Lotus
Organizador diario
Page Maker 4
Aldus
Edición Tipográfica
Photoshop
Adobe
Edición fotográfica y Diseño
Ilustrator
Adobe
Edición de Gráficos e Imágenes
Premiere
Adobe
Edición de Videos
Power Point
Microsoft
Presentaciones Gráficas
Project 2.0
Microsoft
Administración de Proyectos
40
CAPITULO I: Hardware y Software
1.3 CONCEPTOS BASICOS
1.3.1 INFORMÁTICA
Definición 1.37 Ciencia que se encarga de la organización y mantenimiento de la
información haciendo uso de las sistemas integrados de Cómputo.
1.3.2 COMPUTACIÓN
Definición 1.38 Conjunto de métodos y técnicas que permiten administrar, manipular y
controlar en forma automática y correcta la información utilizando para ello la ayuda de un
Computador
1.3.3 SECUENCIA PARA EL PROCESAMIENTO DE DATOS
Ilustración 1.1 Procesamiento de datos
1.3.4 LENGUAJE DE PROGRAMACION
Definición 1.39 Es un conjunto de palabras adaptadas y/o modificadas a partir de un
Lenguaje humano y que permiten comunicarnos con el computador, a través de las cuales le
indicamos a la computadora los procesos a llevar a cabo.
1.3.5 ALGORITMO
Definición 1.40 Un Algoritmo se puede definir como un conjunto de reglas,
procedimientos y/o instrucciones lógicas que se deben ejecutar en un orden especifico para
resolver el problema.
41
Lic. Elmer Alberto León Zárate
El uso de los algoritmos tiene un gran valor estratégico en las computadoras, ya que ellas
pueden resolver un determinado problema después de que se le ha dicho como resolverlo.
Todo algoritmo debe cumplir las siguientes características fundamentales:

Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.

Un algoritmo debe estar bien definido. Si se elabora varios algoritmos todos deben
dar el mismo resultado.

Un algoritmo debe ser finito. Todo algoritmo tiene que terminar en algún
momento, es decir tiene un número determinado de pasos.
1.3.6 PROGRAMA
Definición 1.41 Es el conjunto de instrucciones escritas en un orden lógico y codificados
en un determinado Lenguaje de Programación, las cuales permiten llevar a cabo un
determinado proceso previamente establecido.
Un programa en la PC es un conjunto de instrucciones, ordenes dadas a la maquina que
producirán la ejecución de una determinada tarea. También es un medio para conseguir un fin.
1.4 RELACION DE EJERCICIOS:
Seleccionar la alternativa correcta en las siguientes preguntas:
1. Las computadoras son máquinas de procesamiento de información diseñadas para
transformar información.
a) Verdadero.
b) Falso.
2. ¿Cuál de las siguientes no es una clasificación de las computadoras?
a) Computadoras portátiles.
b) Computadoras incorporadas y de propósito especial.
42
CAPITULO I: Hardware y Software
c) Calculadoras.
d) Microcomputadoras y minicomputadoras.
3. Tienen un poder similar al de la minicomputadora, pero representan solo una fracción
de su costo.
a) Macrocomputadora.
b) Estación de trabajo.
c) Computadoras de propósito especial.
d) Ninguna de las anteriores.
4. Son utilizadas comúnmente por bancos y aerolíneas.
a) Estación de trabajo.
b) Computadoras de propósito especial.
c) Macrocomputadoras.
d) Ninguna de las anteriores.
5. El hardware se refiere a la parte física de una computadora.
a) Verdadero.
b) Falso.
6. Las computadoras lleva acabo operaciones aritméticas o lógicas con la información,
esta tarea se realiza en el CPU y es propia de:
a) Recibir entradas.
b) Producir salidas.
c) Almacenar información.
d) Procesar información.
7. Proporciona un conjunto de teclas alfabéticas, numéricas, de puntuación, de símbolos y
de control.
a) Ratón.
43
Lic. Elmer Alberto León Zárate
b) Monitor.
c) Teclado.
d) CPU.
8. Consiste en presionar rápidamente dos veces el botón primario del ratón.
a) Clic sostenido.
b) Clic.
c) Clic arrastrado.
d) Ninguna de las anteriores.
9. Consiste en mantener presionado el botón primario del ratón y mover el ratón para
desplazar algún elemento en la pantalla.
a) Clic.
b) Clic arrastrado.
c) Clic sostenido.
d) Ninguna de las anteriores.
10. El software es:
a) El equipo físico de las computadoras.
b) El conjunto de instrucciones que las computadoras emplean para manipular datos.
c) Los componentes de entrada de la computadora.
d) El teclado y el ratón.
11. No es una categoría de software:
a) Sistemas operativos.
b) Lenguajes de programación.
c) Dispositivos de entrada.
d) Software de aplicación.
44
CAPITULO I: Hardware y Software
12. algunas de las funciones del sistema operativo son:
a) Proporcionar una interfaz con el usuario.
b) Administrar los dispositivos de hardware en la computadora.
c) Administrar y mantener los sistemas de archivo de disco.
d) Todas las anteriores.
13. ¿Cuál de los siguientes no es un tipo de sistema operativo de interfaz gráfica?
a) MS-DOS.
b) Windows 2000.
c) Windows XP.
d) Macintosh.
14. Es un programa que traduce un lenguaje de alto nivel a lenguaje máquina y genera un
archivo programa o ejecutable.
a) Suite de aplicaciones.
b) Sistema operativo.
c) Windows 98.
d) Compilador.
15. La unidad de disco es un vínculo con cualquier elemento al que puede tener acceso
desde una computadora, como un programa, archivo, carpeta, unidad de disco,
impresora u otra computadora.
a) Verdadero.
b) Falso
16. Una carpeta es una zona o división lógica de almacenamiento.
a) Verdadero
b) Falso
45
Lic. Elmer Alberto León Zárate
17. Un archivo es un símbolo en pantalla que representa un programa, un archivo de datos
u otra entidad o función de la computadora.
a) Verdadero.
b) Falso.
18. Un acceso directo es un vínculo con cualquier elemento al que puede tener acceso
desde una computadora, como un programa, archivo, carpeta, unidad de disco,
impresora u otra computadora.
a) Verdadero.
b) Falso.
19. Una ventana es un símbolo en pantalla que presenta la ubicación actual del ratón.
a) Verdadero.
b) Falso.
20. Un menú es una representación en pantalla que enlista las opciones de tareas
disponibles dentro de un programa.
a) Verdadero.
b) Falso.
46
CAPITULO II
HERRAMIENTAS DE PROGRAMACION
2.1 ANALISIS DEL PROBLEMA
Requisitos:

Comprensión de la Naturaleza del problema.

El Problema debe estar bien definido.

Las especificaciones de Entrada y Salida de los datos sean descritas con
detalle.
Deberá responder a las siguientes preguntas:
a) ¿Que información debe proporcionar la resolución del problema?
La respuesta que obtenga aquí indicara los resultados deseados o las salidas
del Problema.
b) ¿Que datos se necesitan para resolver el problema?
Aquí indicara que datos se proporcionaran o las entradas del Problema.
Ejemplo 2.1
Leer el radio de un círculo y calcular su superficie y la longitud de la circunferencia.
ANALISIS:

Los Datos de Entrada

Las Datos Salida : Superficie del Circulo – Circunferencia del
: Radio del Circulo (Tipo de Datos REAL)
Circulo

Variables
: RADIO, AREA, CIRCUNFERENCIA (Tipo REAL)
47
Lic. Elmer Alberto León Zárate
2.2 DISEÑO DEL ALGORITMO
La información o dato proporcionada al algoritmo constituye su entrada y la
información producida por el algoritmo constituye su Salida.
Ejemplo 2.2
Leer el radio de un círculo y calcular su superficie y la longitud de la circunferencia.
Inicio
Ingresar valor de la Radio del círculo
Calcular Superficie
Superficie  3.141592 * Radio ^ 2
Calcular Circunferencia
Circunferencia  3.141592 * Radio * 2
Imprimir el Valor de la Superficie
Imprimir el Valor de la Longitud de la Circunferencia
Fin
2.3 DIAGRAMA DE FLUJO (FLOWCHART)
Definición 2.1 Un DF es un Diagrama que utiliza los símbolos (cajas) y que tiene los pasos
del Algoritmo escritos en esas cajas unidas por una flecha denominadas líneas de flujo que
indican la secuencia en que se deben ejecutar.
48
CAPITULO II: Herramientas de programación
SÍMBOLOS PRINCIPALES DE UN DIAGRAMA DE FLUJO
SIMBOLO
DESCRIPCION
TERMINAL: Representa el inicio y el Final de un
programa
ENTRADA/SALIDA: Todo tipo de Introducción de
Datos en la memoria desde entrada (Leer) o Salida
(imprimir) de información.
PROCESO: Cualquier tipo de operación que pueda
originar cambio de valor almacenada en la memoria,
operaciones aritméticas, etc.
DECISIÓN:
Indica
operaciones
Lógicas
o
de
acuerdo
a
la
Comparación entre los datos.
DECISIÓN
MULTIPLE:
de
comparación que se tenga resultara una función.
CONECTOR: enlaza 2 o más partes del organigrama.
LINEA DE FLUJO: indica el sentido de ejecución de
las operaciones.
LINEA CONECTORA:
símbolos.
Sirve
para
unir
dos
LLAMADA A LA SUBRUTINA: Es un modulo
independiente del programa principal, realiza una tarea
determinada y retorna al programa principal.
49
Lic. Elmer Alberto León Zárate
Ejemplo 2.3
Realizar el Diagrama de Flujo de la Suma de todos los números pares entre 2 y 100.
Ilustración 2.1 Diagrama de flujo de suma de pares
50
CAPITULO II: Herramientas de programación
2.4 PSEUDOCODIGO
Definición 2.2 Es un lenguaje de descripción del algoritmo, esto es la traducción de un
problema a un lenguaje de Programación escogido por el usuario.
La ventaja de un Pseudocódigo es que al usarlo en la planificación de un programa, el
programador se puede concentrar en la Lógica
y en las estructuras de control y no
preocuparse de las reglas de un Lenguaje de Programación.
Todo algoritmo empieza con la palabra Inicio y termina con la Palabra Fin. Entre estas
palabras se escriben las instrucciones o acciones por línea.
Ejemplo 2.4
Pseudocódigo para determinar e imprimir el mayor valor de DOS números ingresados.
Inicio
Leer A, B
SI el valor A es mayor que el valor de B HACER
Establecer MAYOR con el valor A
DE LO CONTRARIO
Establecer MAYOR con el valor B
FIN_SI
Visualizar MAYOR
Fin
Ejemplo 2.5
Pseudocódigo para calcular la suma de 1+2+3+....100
Inicio
Establecer CONTADOR a 1
Establecer SUMA a 0
51
Lic. Elmer Alberto León Zárate
Mientras CONTADOR <= 100 hacer
Sumar CONTADOR a SUMA
Incrementar CONTADOR en 1
Fin de Mientras
Visualizar SUMA
Fin
2.5 RELACION DE EJERCICIOS:
Realizar él

ANALISIS

DIAGRAMA DE FLUJO

PSEUDOCODIGO
Para los siguientes Problemas:
1. Definir un algoritmo para hallar la suma de los números menores de 50 elevados al
cuadrado.
2. Definir el algoritmo para que encuentre la media Aritmética de un conjunto de
números hasta 100.
3. Definir el Algoritmo para contar los pares e impares hay en una relación de 10
números enteros ingresados.
4. Definir un Algoritmo para promediar la entrada de 5 Notas ingresadas eliminando la
Nota mas baja que tenga el Alumno.
5. Definir un Algoritmo para encontrar el Promedio de 4 Notas ingresadas aumentado un
Nota cualquiera ingresada después de las 4 notas.
52
CAPITULO II: Herramientas de programación
6. Definir un Algoritmo para escribir un programa que pida el ingreso de N números que
calcule su promedio.
7. Definir un Algoritmo que ingrese las edades de tres personas y contar cuantos son
mayores y menores de Edad.
8. Definir un Algoritmo que ingrese un monto por capital a una cuenta, si el Capital se
excede en 1000 Soles aumentar en 5% al Capital de lo Contrario reducir el 2% al
Capital.
9. Definir el Algoritmo para hallar el elevado enésimo de un número cualquiera.
10. Definir el algoritmo para ordenar ascendentemente el ingreso de 20 números enteros
positivos.
53
CAPITULO III
PROGRAMACION ESTRUCTURADA
La programación estructurada hace los programas más fáciles de escribir, verificar,
leer y mantener. Los programas deben estar dotados de una estructura que puede ser:

Secuenciales

Selectivas

Repetitivas
3.1 ESTRUCTURAS SECUENCIALES
Definición 3.1 Es aquella en la que la una instrucción sigue a otra en secuencia. Las tareas
se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente
hasta el final del proceso.
Ilustración 3.1 Estructura Secuencial
INICIO
< INSTRUCCIÓN 1 >
< INSTRUCCIÓN 2 >
..................................
< INSTRUCCIÓN n >
FIN
54
CAPITULO III: Programación estructurada
3.2 ESTRUCTURAS SELECTIVAS
Definición 3.2 En las estructuras selectivas se evalúa una condición y en función del
resultado de la misma se realiza una opción u otra. Las condiciones se especifican usando
expresiones lógicas.
Las estructuras selectivas pueden ser:

Simples

Dobles

Múltiples
3.2.1 ESTRUCTURA SIMPLE (SI-ENTONCES)
Ejecuta una determinada acción cuando se cumple una condición.
Tener en cuenta:

Si la condición es verdadera, entonces ejecuta la acción o acciones.

Si la condición es Falsa, entonces no hacer nada.
Ilustración 3.2 Estructura Selectiva Simple
55
Lic. Elmer Alberto León Zárate
PSEUDOCODIGO
SI CONDICION ENTONCES
ACCION 1
ACCION 2
FIN_SI
PSEUDOCODIGO EN INGLES
IF CONDICION THEN
ACCION 1
ACCION 2
ENDIF
3.2.2 ESTRUCTURA DOBLE (SI ENTONCES SINO)
La
alternativa doble necesita una estructura que permita elegir entre dos
opciones o alternativas posibles en función de cómo se cumpla la condición dada.
Ilustración 3.3 Estructura Selectiva Simple
56
CAPITULO III: Programación estructurada
PSEUDOCODIGO
SI CONDICION ENTONCES
ACCION VERDADERAS
SINO
ACCIONES FALSAS
FIN_SI
PSEUDOCODIGO EN INGLES
IF CONDICION THEN
ACCION VERDADERAS
ELSE
ACCIONES FALSAS
ENDIF
3.2.3 ESTRUCTURA MULTIPLE (SEGÚN SEA-CASO DE)
La estructura de decisión múltiple evaluara una expresión que podrá tomar N
valores distintos 1, 2, 3,4,..n. Según se escoja uno de estos valores en la condición, se
realizara una de las acciones.
PSEUDOCODIGO
SEGÚN SEA CONDICION HACER
Expresión 1
:
Acción 1
Expresión 2
:
Acción 2
Expresión 3
:
Acción 3
SINO
:
Acción
FIN_SEGÚN
57
Lic. Elmer Alberto León Zárate
PSEUDOCODIGO EN INGLES
CASE CONDICION OF
Expresión 1
:
Acción 1
Expresión 2
:
Acción 2
Expresión 3
:
Acción 3
OTHERWISE
// ELSE
Action
END_CASE
OBSERVACIONES DE LA ALTERNATIVA MULTIPLE
-
Algunos lenguajes de programación delimitan las acciones para las instrucciones
compuestas con las palabras Inicio Fin (pascal Begin End).
-
Los valores que toman las expresiones no siempre serán consecutivos o únicos,
también se pueden considerar rangos de constantes numéricas o de caracteres.
Según sea expresión hacer
2, 4, 6,8: escribir números pares
1, 2, 3, 5,7: escribir números impares
Fin_segun
3.3 ESTRUCTURAS REPETITIVAS
Definición 3.3 Son las estructuras que repiten una secuencia de instrucciones un número
determinado de veces y se denominan Bucles. Repite la misma secuencia de acciones un
número determinado de veces.
58
CAPITULO III: Programación estructurada
3.3.1 ESTRUCTURA MIENTRAS-HACER (WHILE - DO)
Permite al programa llevar a cabo la ejecución secuencial de un proceso
mientras la condición establecida se cumpla o sea verdad.
Ilustración 3.4 Estructura Repetitiva Mientras-Hacer
PSEUDOCODIGO
MIENTRAS <CONDICION> HACER
INSTRUCCIONES VERDADERAS
FIN_MIENTRAS
PSEUDOCODIGO EN INGLES
WHILE <CONDICION> DO
INSTRUCCIONES VERDADERAS
ENDWHILE
DO WHILE <CONDICION>
INSTRUCCIONES VERDADERAS
ENDDO
59
Lic. Elmer Alberto León Zárate
3.3.2 ESTRUCTURA REPETIR – HASTA (REPEAT - UNTIL)
Permite al programa llevar a cabo la ejecución secuencial de un proceso
mientras que la condición establecida no se cumpla.
Cuando la condición se cumpla se continuara la ejecución del programa
después de HASTA.
Ilustración 3.5 Estructura Repetitiva Repetir - Hasta
ACCIONES O
INSTRUCCIONES
FALSO
CONDICION
VERDADERO
PSEUDOCODIGO
REPETIR
INSTRUCCIONES
HASTA <CONDICION>
PSEUDOCODIGO EN INGLES
REPEAT
INSTRUCCIONES
UNTIL <CONDICION>
60
CAPITULO III: Programación estructurada
3.3.3 ESTRUCTURA DESDE–HACER O PARA–HACER (FOR.TO.DO)
Permite ejecutar un bloque de instrucciones un numero especifico de veces,
luego se continuara la ejecución del programa de FIN_PARA.
Ilustración 3.6 Estructura Repetitiva Para - Hacer
PSEUDOCODIGO
PARA VARIABLE = VALOR INICIAL HASTA VALOR FINAL HACER
INSTRUCCIONES
FIN_PARA
PSEUDOCODIGO EN INGLES
FOR I = 1 TO VALOR FINAL DO
INSTRUCCIONES
ENDFOR
61
Lic. Elmer Alberto León Zárate
3.4 RELACION DE EJERCICIOS:
1. Realizar el ingreso de 4 notas para un alumno y promediarlos.
2. Calcular el factorial de un numero N
3. Ingrese un número entero y genere la tabla de multiplicar de dicho número.
4. Calcular:
1 x 
x2 n

2! n!
5. Calcular la suma de los N números enteros positivos y terminar con número negativo.
6. Sumar los números enteros de 100 a 200 mediante a) Estructura Repetir b) Estructura
Mientras c) Estructura Desde
7. Se desea leer las calificaciones de una clase y contar él número total de aprobados.
8. Representar las siguientes condiciones en forma de alternativa simple, en pseucodigo y
diagrama de flujo:
Colocar un mensaje a cada uno.
 para los mayores de edad
 para los menores de edad
 para los mayores de edad dentro de 2 años
 para los desaprobado en su promedio
 para los aprobados en su 4 nota
 para numero par
 para un numero impar
 para los mayores de 30 años por su fecha de nacimiento
9. Representar las siguientes condiciones en forma de alternativa compuesta en
pseucodigo y diagrama de flujo:
62
CAPITULO III: Programación estructurada
Colocar un mensaje a cada uno.

para los mayores y menores de edad

para los aprobados y desaprobados en su promedio

para numero par e impar

para los mayores y menores de 30 años
10. Hacer su diagrama de flujo y pseudocódigo para la suma de los N primeros números
enteros cuadrados 12+22+32...n2
11. Hacer su diagrama de flujo y pseudocódigo para calcular la planilla de una empresa, se
ingresa el número de los empleados y para cada uno de ellos se ingresa el número de
horas y el salario por hora, se calcula el pago y se acumula para el total de la planilla.
12. Hacer su diagrama de flujo y pseudocódigo para un restaurant ofrece un descuento del
10% para consumos de hasta 30 nuevos soles, un descuento de 20% para consumos
mayores y para ambos casos aplica un impuesto del 15%. Determinar el importe a
pagar por lo consumido.
13. Hacer su diagrama de flujo y pseudocódigo para determinar el mayor valor ingresado
de 5 números enteros.
14. Hacer su diagrama de flujo y pseudocódigo para leer 100 números ingresados.
Determinar la media de los números positivos y la media de los números negativos.
15. Pseudocódigo que pida el ingreso de un número para el día de la semana e indique a
que día se refiere.
16. Se desea convertir las calificaciones A,B,C,D,E a calificaciones numéricas
14,13,12,11,10 respectivamente
17. Pseudocódigo que nos indique si un numero entero
considerar los negativos.
63
tiene 1, 2,3 o más dígitos
Lic. Elmer Alberto León Zárate
18. Realizar un Pseudocódigo que solo permita el ingreso de números enteros y cuando
ingrese un impar se termina el ingreso.
19. Desarrollar un Pseudocódigo que permita ingresar los datos de N alumnos. Para cada
alumno se ingresara su nombre y 6 notas. Calcular el promedio para cada uno de estos
alumnos. El proceso terminara cuando se ingrese la palabra FIN como un nombre de
un alumno. Al final mostrara el promedio general de todos los alumnos.
20. Realizar un Pseudocódigo que permita el ingreso de una clave de acceso, si la clave
ingresada es correcta, entonces mostrar el mensaje “BIENVENIDO AL SISTEMA”,
en caso contrario “CLAVE INCORRECTA”, se debe permitir máximo 3 intentos.
64
CAPITULO IV
ESTRUCTURAS DE DATOS
4.1TIPOS DE DATOS
Definición 4.1 El Tipo de Datos de una variable es el conjunto de valores que dicha
variable puede asumir
Todos lo Lenguajes de Programación de alto nivel tienen incorporados Tipos de Datos
básicos tales como enteros, reales, caracteres y lógicos.
El tipo de Datos de una variable en un programa para un lenguaje de alto nivel
requiere de una Declaración de Tipo la cual tiene 2 objetivos:
1. Separar el espacio de memoria que los valores de la variable requieran.
2. Interpretar correctamente el contenido de la memoria a la que la variable acceda. Es decir
si el tipo de datos separado en memoria es entero todos los datos que se almacenen serán
enteros.
4.1.1 DATOS NUMERICOS
Definición 4.2 Es el conjunto de los valores numéricos. Estos pueden representarse en dos
formas distintas:
 TIPO NUMERICO ENTERO (INTEGER )
 TIPO NUMERICO REAL (REAL)
65
Lic. Elmer Alberto León Zárate
A) ENTEROS
Definición 4.3 El tipo entero es un subconjunto finito de los números enteros. Los enteros
son números completos, no tienen componentes fraccionarios o decimales y pueden ser
negativos o positivos. Ejm: 5, -5
Los números enteros máximos y mínimos de una computadora suelen ser –32768 a
+32767, los números enteros fuera de este rango no se suelen representar como números
enteros, sino como reales, en algunos lenguajes de Programación hay excepciones.
B) REALES
Definición 4.4 El tipo real consiste en un subconjunto de los números reales. Los números
reales siempre tienen un punto decimal y pueden ser positivos o negativos. Un número real
consta de un entero y una parte decimal. Ejm:
0.08
3739.41
0.09
–52.321
En aplicaciones científicas se requiere una representación especial para manejar
números muy grandes, como la masa de la tierra o muy pequeños como la masa del electrón.
Una PC solo puede representar un número fijo de dígitos. Este numero puede variar de
una maquina con otra, siendo ocho dígitos un numero típico. Este límite provocara problemas
para representar algunos números como:
9876543210
0.00000000387
Existe un tipo de representación denominado Notación exponencial o científica y que
se utiliza para números muy grandes o muy pequeños. Así:
66
CAPITULO IV: Estructuras de datos
Ejemplo 4.1
Si el numero fuera
123456700000000000000 (14)
Descomponer en Cifras
123 456 700 000 000 000 000
Y luego en forma de potencia de 10
1.234567 * 1020
Ejemplo 4.2
Si el número fuera
0.0000000000123456
Y luego en forma de potencia de 10
1.23456 * 10-11
4.1.2. DATOS LOGICOS (BOOLEANOS)
Definición 4.5 El tipo Lógico es aquel que solo puede tomar uno de dos valores.
Verdadero (TRUE)
False (FALSE)
Este tipo de datos se utiliza para representar las alternativas (SI/NO) a determinadas
condiciones. Por ejemplo cuando se pide determinar si el valor es par la respuesta será
Verdadera y Falsa según sea el valor del número.
4.1.3 DATOS TIPO CARÁCTER
Definición 4.6 Es el conjunto finito y ordenado de valores de caracteres que la
computadora reconoce, un dato tipo carácter contiene un solo carácter.
Los caracteres que reconocen las diferentes computadoras no son estándar, sin embargo, la
mayoría reconoce los siguientes caracteres alfabéticos y numéricos:
CARACTERES ALFABETICOS:
(A..... Z) (a..... z)
CARACTERES NUMERICOS:
(1, 2, 3.... 9, 0)
67
Lic. Elmer Alberto León Zárate
CARACTERES ESPECIALES:
(+ - * / ^, < > $...)
4.2 ESTRUCTURA DE DATOS
Definición 4.7 Es una colección de datos que pueden ser caracterizados por su
organización y las operaciones que se definan en ella.
Estáticos: arreglos, registro, archivo, conjunto, cadena.
Dinámicos: Listas, Pilas, Colas, Listas enlazadas, árboles.
4.2.1 ESTRUCTURA DE DATOS ESTATICAS
A) ARREGLOS
Definición 4.8 Es una estructura de Datos utilizado para almacenar datos de un mismo
tipo.Un arreglo se define como el conjunto de datos finito, ordenado y homogéneo.
1.- ARREGLO UNIDIMENSIONAL
Definición 4.9 Un arreglo unidimensional es una secuencia de datos finitos, que todos sus
elementos son del mismo tipo.
Los elementos del arreglo se determinan a través de un conjunto de índices.
Nombre [1]
Nombre [2]
Nombre [3]
...
Nombre [n]
Ejemplo de Arreglo Unidimensional de N elementos
Notación:
Nombre (1), nombre (2)...
Nombre [1], nombre [2]...
68
CAPITULO IV: Estructuras de datos
Observación 4.1
El arreglo unidimensional tiene un solo nombre de variable que representa a todos los
elementos.
Observación 4.2
En algunos casos el índice del arreglo empieza en 0 ó 1
Observación 4.3
El índice indica la posición ordenada de cómo se ingresan los datos
Observación 4.4
El número de elementos de un vector se denomina RANGO DEL VECTOR
Los vectores se almacenan en memoria central de la Computadora:
MEMORIA
NUMERO [1]

DIRECCION N
NUMERO [2]

DIRECCION N+1
NUMERO [3]

DIRECCION N+2
NUMERO [50]

DIRECCION N+49
69
Lic. Elmer Alberto León Zárate
El valor mínimo permitido de un vector se denomina LIMITE INFERIOR del vector
y el valor máximo permitido se denomina LIMITE SUPERIOR.
Cada elemento de un vector se puede procesar como si fuese una variable simple al
ocupar una posición de memoria.
NUMERO [10]  100
NUMERO [20]  ‘DIEZ’
La salida seria ESCRIBIR (NUMERO [10])
NOTACIONES ALGORITMICAS PARA VECTORES UNIDIMENSIONALES
EN ALGORITMOS
Ejemplo 4.3
En pascal:
VAR
NOMBRE_DE_LA_VARIABLE: ARRAY [1...10] OF TIPO DE DATOS;
Ejemplo 4.4
En Visual Basic:
DIM
NOMBRE_DE_LA_VARIABLE (NUMERO) AS TIPO DE DATOS
DIM
NOMBRE (VALOR INICIAL TO VALOR FINAL) AS TIPO DE DATOS
Ejemplo 4.5
Dim contadores (5) as integer 
Dim contadores (1 to 5) as string 
70
CAPITULO IV: Estructuras de datos
Dim sumas (100 to 200) as long // (entero largo) 
OPERACIONES BASICAS CON VECTORES O ARREGLOS
ESCRIBIR (NUMERO [10])
Visualiza el valor Numero con índice 10
NUMERO [4]  50
Almacena el valor 50 en NUMERO [4]
SUMANUMERO [1]+NUMERO[5]
Almacena la suma de NUMERO[1] y
NUMERO[2] en la variable SUMA.
SUMASUMA+NUMERO[5]
Añade en la variable SUMA el valor de NUMERO[5]
X[5]  X[5] + 3.5
Suma 3.5 a X[5]
X[11]  X[2] + X[4]
Almacena la suma de X[2] y X[4]
Observacion 4.5
Los Arreglos pueden tener por índice:

x[1], x[2], x[3]... x[n]
 empieza en 1

x[0], x[1], x[2] ... x[n-1]
 empieza en cero

x[-3], x[-2], x[-1], x[+0], x[+1], x[+2], x[+3]
 limite –3 y +3
OPERACIONES CON VECTORES (ARREGLOS)
Las operaciones que se puede realizar con vectores durante el proceso de resolución de
un problema son:
a) ASIGNACION
La asignación tiene la siguiente forma:
NOTAS [ 14 ]  20  Asigna El Valor 20 Al Elemento 14 Del Arreglo
71
Lic. Elmer Alberto León Zárate
Pero si se desea asignar elementos a un vector, se debe utilizar estructuras
Repetitivas (desde, mientras o repetir) o selectivas como él (Si entonces)
Ejemplo 4.6
Si se introducen los valores 10,11,10 mediante asignaciones
A[1]  10
A(1)  10
A[2]  11
A(2)  11
A[3]  10
A(3)  10
b) LECTURA Y ESCRITURA
Normalmente la Lectura y escritura se realizan con estructuras repetitivas como el
FOR (para o desde), las instrucciones simples se representan así:

Leer ( A [1] ) Ingrese un valor para la posición 1 del arreglo A

Escribir ( A [2] )Imprimir el valor de la posición 2 del arreglo A

I=19 Leer ( A [i] ) Ingrese un valor para la posición 19

i=1, i=2, i=3 Escribir (A[i]) Imprime 3 valores si tuviera una
Función Repetitiva.
c) RECORRIDO
Se puede acceder a los elementos de un Vector o Arreglo para introducir Datos
(leer) o imprimir su contenido (escribir).
A la operación de efectuar una acción general sobre todos los elementos del
arreglo se la denomina RECORRIDO DEL VECTOR.
72
CAPITULO IV: Estructuras de datos
Ejemplo 4.7
Pseudocódigo para permitir el INGRESO de 5 números
Inicio
PARA índice=1 HASTA 5 HACER
LEER números [índice]
FIN_PARA
Fin
Ejemplo 4.8
Pseudocódigo para IMPRIMIR los 5 números ingresados anteriormente
Inicio
PARA índice  1 HASTA 5 HACER
ESCRIBIR números[indice]
FIN_PARA
Fin
Ejemplo 4.9
Pseudocódigo para ingresar 20 números utilizando MIENTRAS O REPETIR,
CONTADORES.
INICIO
Índice  1
MIENTRAS Índice < 21 hacer
LEER número[ índice ]
73
Lic. Elmer Alberto León Zárate
Índice  índice + 1
FIN_MIENTRAS
FIN
d) AÑADIR
Un arreglo llamado PROMEDIO se ha dimensionado a seis elementos pero
solo han sido llenados cuatro valores, se podrán añadir dos elementos más con una
simple operación de asignación.
PROM [1]
PROM [2]
PROM [3]
PROM [4]
10
11
20
11
PROM [5]
PROM [6]
En la realización del Pseudocódigo:
PROM [5]  20
PROM [6]  10
e) INSERTAR
Coloca uno o más elementos en una determinada posición del arreglo.
Ejemplo 4.10
Pseudocódigo para el arreglo llamado LETRAS de 8 elementos, Agregar el elemento
CC en la posición LETRAS[3]
LETRAS[1] LETRAS[2] LETRAS[3] LETRAS[4] LETRAS[5]
AA
BB
DD
EE
FF
INICIO
//ALGORITMO DE INGRESO DE DATOS MAXIMO HASTA 6 ELEMENTOS
POSICION  3
74
CAPITULO IV: Estructuras de datos
INDICE  CANTIDAD DE ELEMENTOS LLENOS
// INDICE = 6
MIENTRAS INDICE > = POSICION HACER
LETRAS [INDICE + 1]  LETRAS [INDICE]
INDICE  INDICE – 1
FIN_MIENTRAS
LEER LETRAS [INDICE]
FIN
f) BORRAR
La operación de borrar provoca el movimiento hacia arriba de los elementos
inferiores.
2.- ARREGLO DE VARIAS DIMENSIONES
Los Arreglos no Unidimensionales se dividen en 2 grupos:

ARREGLOS BIDIMENSIONALES

ARREGLOS MULTIDIMENSIONALES
a) ARREGLOS BIDIMENSIONALES:
Definición 4.10 Se considera como un vector de vectores, es un conjunto de
elementos todos del mismo tipo el cual el orden de los elementos es significativo y en
el que se necesita especificar los subíndices para poder identificar cada uno de los
elementos del arreglo.
FILA 1

10
10
10
10
FILA 2

11
11
11
11
FILA 3

12
12
12
12
FILA 4

13
13
13
13
COLUMNA 1
COLUMNA 1
COLUMNA 3
COLUMNA 4
75
Lic. Elmer Alberto León Zárate
Nombre del Arreglo :
NOTAS
Cantidad de Filas
:
4
Cantidad de Columnas
:
5
Total de elementos
:
20
Los elementos de un Arreglo Bidimensional tienen la siguiente referencia:
NOMBRE_DE_LA_MATRIZ [ I , J ]
Donde: I es el elemento que representa a las filas y J representa la Columnas.
En Notación Algorítmica se Representa:
NOMBRE_DE_LA_MATRIZ[ I..N,J..N]
NOTACIONES ALGORITMICAS PARA VECTORES BIDIMENSIONALES
En pascal :
VAR
NOMBRE_DE_LA_VARIABLE: ARRAY [1..10,1..5] OF TIPO DE DATOS;
ALGORITMO DE LLENADO DE DATOS DEL ARREGLO BIDIMENSIONAL
INICIO
PARA INDICE_FILA  NUMERO INICIAL HASTA NUMERO FINAL HACER
PARA INDICE_COLUMNA  NUMERO INICIAL HASTA NUMERO FINAL
HACER
LEERDATOENNOMBRE_DEL_ARREGLO[INDICE_FILA,INDICE_COLUMNA]
FIN_PARA
FIN_PARA
FIN
76
CAPITULO IV: Estructuras de datos
b) ARREGLOS MULTIDIMENSIONALES
Puede ser definido de tres, cuatro o más dimensiones.
Ejemplo 4.11
Un arreglo de tres dimensiones puede tener:
-
5 Cursos de un alumno
-
Tipo de sexo
-
6 ciclos años
B) REGISTROS
Definición 4.11 Es una colección de información, normalmente relativa a una entidad
particular. Un registro es una colección de campos lógicamente relacionado, que pueden ser
tratados como una unidad por algún programa.
Observación 4.6
Este tipo de arreglos se caracterizan por tener un solo índice.
Observación 4.7
A los espacios reservados para cada numeración se les conoce con el nombre de
CAMPOS y a la disposición consecutiva de campos se denomina REGISTRO.
Observación 4.8
El acceso a los datos individuales de un elemento se realiza de dos formas:
PRIMERO : Utilizando un punto antes del campo
A [1].código

abc0001
77
Lic. Elmer Alberto León Zárate
A [1].Nombre 
Oscar Ibáñez
A [1].Promedio

17.4
A [1].Edad

29
Ingresar 5 datos al registro declarado:
PARA INDICE  1 HASTA 5 HACER
INICIO
LEER A[INDICE].CODIGO
LEER A[INDICE].NOMBRE
LEER A[INDICE].PROMEDIO
LEER A[INDICE].EDAD
FIN
FIN_PARA
SEGUNDO : Utilizando la palabra CON (WITH)
CON REGISTRO A[3] HACER
INICIO
ESCRIBIR CODIGO
ESCRIBIR NOMBRE
ESCRIBIR PROMEDIO
ESCRIBIR EDAD
FIN
Ingresar 5 datos al registro declarado:
PARA INDICE  1 HASTA 5 HACER
CON REGISTRO A[INDICE] HACER
78
CAPITULO IV: Estructuras de datos
INICIO
LEER CODIGO
LEER NOMBRE
LEER PROMEDIO
LEER EDAD
FIN_CON
FIN_PARA
DECLARACION DE UN REGISTRO DE DATOS EN UN PSEUDOCODIGO
// DEFINIR ESTRUCTURA DE REGISTROS
CAMPO 1
:
TIPO DE DATOS
CAMPO 2
:
TIPO DE DATOS
CAMPO 3
:
TIPO DE DATOS
CAMPO 4
:
TIPO DE DATOS
// DEFINIR EL ARREGLO DE REGISTROS
VARIABLE_ARREGLO[ 1 . . NUMERO_MAXIMO] DE REGISTRO DECLARADO
// EN LAS VARIABLES
NOMBRE_VARIABLE : VARIABLE_ARREGLO
C) ARCHIVOS
Definición 4.12 Un archivo es un conjunto ordenado de datos que tienen entre sí una
relación lógica y están almacenados en un soporte de información adecuado para la
comunicación con el computador. En un archivo se almacena información referente a un
mismo tema de una forma estructurada con el fin de manipular los datos de una manera
individual. Un archivo está formado por estructuras de datos más simples denominados
79
Lic. Elmer Alberto León Zárate
registros. Todos los registros de un archivo son del mismo tipo, es decir, un archivo está
formado por un conjunto de registros homogéneos. Cada registro está formado por campos
que contienen información referente a un elemento o característica en particular dentro del
archivo. Además un registro puede tener un campo clave cuyo valor sirve para identificar de
forma única el registro, y por tanto, dicho valor no puede aparecer repetido en otro registro
diferente.
CLASIFICACIÓN DE LOS ARCHIVOS SEGÚN SU USO
 Archivos permanentes.- Contienen información que varía poco a lo largo del tiempo.
 Archivos de movimientos.- En ellos se almacena la información que se utilizará para
actualizar los archivos maestros. Sus registros denominados movimientos son de tres
clases: altas, bajas y cambios.
 Archivos de maniobra o trabajo.- Tienen una vida limitada, normalmente igual a la
duración de la ejecución de un programa y se utilizan como auxiliares de las
anteriores.
ORGANIZACIÓN DE ARCHIVOS
Al diseñar un archivo, dependiendo del uso que se va a hacer del mismo y del soporte
utilizado, se pueden elegir diferentes maneras de organizar sus registros, siendo las
principales organizaciones las siguientes:
-
Secuencial
-
Directa o aleatoria
-
Secuencial indexada
80
CAPITULO IV: Estructuras de datos
1. ORGANIZACIÓN SECUENCIAL
Definición 4.13 Es aquélla en la cual los registros ocupan posiciones consecutivas de
memoria, y sólo se puede acceder a ellos de uno en uno a partir del primero.
En un archivo secuencial no se pueden hacer operaciones de escritura cuando se está
leyendo, ni operaciones de lectura cuando se está escribiendo.
Por otro lado, para actualizarlos es preciso crear nuevos archivos donde se copien los
registros que vayan a permanecer, modificados o no, junto con los nuevos.
Acceso secuencial
Registro 1
Registro 2
Registro 3
Registro 4
Registro 5
2. ORGANIZACIÓN DIRECTA O ALEATORIA
Definición 4.14 En un archivo con esta organización, también denominada relativa, las
informaciones se colocan y se acceden aleatoriamente mediante su posición, es decir,
indicando el lugar relativo que ocupan dentro del conjunto de posiciones posibles.
En esta organización se pueden leer y escribir registros, en cualquier orden y en
cualquier lugar.
Presenta el inconveniente de que es tarea del programador establecer la relación entre
la posición que ocupa un registro y su contenido; además puede desaprovecharse parte del
espacio destinado al archivo ya que pueden quedar huecos libres entre unos registros y otros.
Su principal ventaja es la rapidez de acceso a un registro cualquiera, ya que para ello no es
preciso pasar por los anteriores.
81
Lic. Elmer Alberto León Zárate
Acceso directo
Registro 2
Posición 1
Registro 1
Registro 5
Posición 3
Posición 4
Posición 2
Posición 5
3. ORGANIZACIÓN SECUENCIAL INDEXADA
Un archivo con esta organización consta de 3 áreas:

Área de índices

Área primaria

Área de excedentes (overflow)
Definición 4.15 El área primaria contendrá los registros de datos, clasificados en orden
ascendente por su campo clave.
Definición 4.16 El área de índices es un archivo secuencial creado por el sistema, en el
que cada registro establece una división (segmento) en el área primaria y contiene la dirección
de comienzo del segmento y la clave más alta del mismo. De esta manera, el sistema accede
de forma directa a un segmento del área primaria a partir del área de índices, de forma similar
a la búsqueda de un capítulo de un libro a partir de su índice.
Definición 4.17 El área de excedentes para añadir nuevos registros que no pueden ser
colocados en el área primaria cuando se produce una actualización del archivo.
Presenta la ventaja de un rápido acceso por medio de la clave del registro y además el
sistema se encarga de relacionar la posición de cada registro con su contenido por medio del
área de índices.
82
CAPITULO IV: Estructuras de datos
Los inconvenientes que presenta son la necesidad de espacio adicional para el área de
índices y el desaprovechamiento de espacio que resulta de quedar huecos intermedios libres
después de sucesivas actualizaciones.
Área de índices
01
04
AC
06
CH
GF
Área primaria
AA -
AB -
AC
01
02
03
-
BC
04
-
CH
-
05
FA
-
GF -
06
Área de excedentes
FM
-
AN
-
OPERACIONES SOBRE ARCHIVOS
CREACIÓN
Definición 4.18 Consiste en la escritura o grabación en un medio de almacenamiento de
todos los registros que van a formar el archivo
COPIA
Definición 4.19 Consiste en crear un nuevo archivo como duplicación de otro existente.
CONSULTA
Definición 4.20 Se realiza para obtener el contenido de uno o varios registros. En muchos
casos irá precedida por la búsqueda de los mismos.
83
Lic. Elmer Alberto León Zárate
CLASIFICACIÓN
Definición 4.21 Es la operación consistente en reubicar los registros de tal forma que
queden ordenados con respecto a los valores de un campo que denominamos clave de
ordenación.
CONCATENACIÓN
Definición 4.22 Dados dos archivos con registros de igual estructura, se trata de obtener
uno solo en que figuren todos los registros del primero y a continuación todos los del
segundo.
INTERSECCIÓN
Definición 4.23 Dados dos archivos de igual estructura se trata de obtener otro en el que
figuren lo registros comunes a ambos.
FUSIÓN O MEZCLA
Definición 4.24 A partir de dos archivos de igual estructura clasificados por un mismo
campo, se obtiene como resultado un archivo que contiene los registros de ambos y que
mantiene la ordenación.
PARTICIÓN
Definición 4.25
Consiste en descomponer un archivo en dos, atendiendo a alguna
característica de sus registros.
84
CAPITULO IV: Estructuras de datos
ACTUALIZACIÓN
Definición 4.26 Es la operación de modificar un archivo por medio de un archivo de
movimientos, conteniendo altas, bajas y modificaciones que hay que realizar sobre el archivo
maestro.
REORGANIZACIÓN
Definición 4.27 Reubica los registros de un archivo que ha sufrido actualizaciones, para
ocupar los posibles huecos libres intermedios resultantes de bajas de registros para optimizar
la ocupación de la memoria, liberando la que no estaba aprovechada.
BORRADO
Definición 4.28 Eliminación total del archivo, cuando ya no se necesite, dejando libre la
memoria del dispositivo de almacenamiento utilizado.
D) CONJUNTOS (SET)
Supongamos que debemos construir un programa Pascal que cuente el número de
vocales no acentuadas que aparecen en un texto. Se nos podría ocurrir inmediatamente, ir
tomando el texto carácter a carácter, aplicarle la función UPCASE y decidir si se trata de
alguno de los caracteres 'A', 'E', 'I', 'O','U'. En este caso, incrementaríamos un contador y
pasaríamos a analizar el siguiente carácter; en caso contrario, pasaríamos directamente al
siguiente carácter.
Ejemplo 4.12
Codificacion en Pascal
FOR C:=1 TO LENGTH (Texto) DO
85
Lic. Elmer Alberto León Zárate
BEGIN
CH: =UPCASE (Texto[C]);
IF (CH='A') OR (CH='E') OR (CH='I') OR (CH='O') OR (CH='U') THEN
CONTADOR:=CONTADOR +1;
END;
Sin embargo, sería más cómodo aislar el conjunto de caracteres 'A', 'E', 'I', 'O' y 'U' y,
para cada carácter del texto, decidir si pertenece o no al conjunto de vocales:
Ejemplo 4.13
Para cada carácter Texto[C] ....
Si UPCASE (Texto[C]) pertenece a VOCALES, entonces ..
Incrementar contador de vocales,
En caso contrario, no realizar ninguna acción.
¿ Se puede hacer esto en Turbo Pascal ? La respuesta es sí, mediante el tipo de dato
estructurado CONJUNTO (SET en inglés).
CONSTANTES Y VARIABLES DE TIPO SET
Podemos definir CONJUNTOS particulares de elementos de cualquiera de los
siguientes tipos base:
BYTE
CHAR
BOOLEAN
Abstractos (de 1 byte)
Es decir, podemos aislar conjuntos de elementos a partir de cualquier tipo ordinal de
tamaño 1 byte.
86
CAPITULO IV: Estructuras de datos
Para definir una constante de tipo CONJUNTO, después de la palabra CONST, el
identificador de la constante y el signo igual, se escriben todos los elementos del tipo base que
queremos que constituyan el conjunto, separados por comas y encerrados entre corchetes.
Ejemplo 4.14
Conjuntos constantes (constantes de tipo SET) válidos serían:
CONST VOCALES = ['A','E','I','O','U'];
PARES = [2,4,6,8,0];
De esta manera, con el identificador VOCALES hemos aislado un conjunto de
elementos del tipo base CHAR, y con el identificador PARES lo hemos hecho del tipo base
BYTE.
Se obtendría el mismo resultado si la especificación de los elementos constituyentes se
realizase en distinto orden;
Ejemplo 4.15
CONST VOCALES = ['U','E','O','A','I'];
PARES = [0,2,4,6,8];
Si en la definición de un conjunto, los elementos, o algunos de los elementos
constituyentes son consecutivos, se puede utilizar una notación similar a la de los subrangos.
Ejemplo 4.16
CONST HEXADIG = ['A'..'F','0'..'9'];
NUMEROS = [0..100,125];
HEXADIG define un conjunto de 16 elementos del tipo base CHAR y NUMEROS uno
de 102 elementos del tipo BYTE.
87
Lic. Elmer Alberto León Zárate
Para declarar variables de tipo CONJUNTO, después de la palabra VAR, el
identificador de la variable y los dos puntos, se escriben las palabras reservadas SET OF
seguidas del identificador del tipo base o subrango del mismo. Así,
VAR LETRAS : SET OF CHAR;
NUMERO: SET OF BYTE;
MAYUS : SET OF 'A'....’Z';
DECEN
: SET OF 10...99;
BOOLE
: SET OF BOOLEAN;
Serían declaraciones válidas de variables de tipo SET. LETRAS es una variable que
podrá contener cualquier conjunto de caracteres; NUMERO podrá contener cualquier
conjunto de números que pertenezcan al rango 0..255; MAYUS podrá contener cualquier
conjunto de caracteres pertenecientes al rango 'A'..'Z', DECEN cualquier conjunto de números
pertenecientes
al
rango
10..99
y
BOOLE
cualquier
subconjunto
del
conjunto
{FALSE,TRUE}.
Como ocurre con todas las variables en Pascal, cuando se declaran las variables de tipo
SET no contienen ningún conjunto concreto: podemos decir que están vacías. Declarar en un
programa una variable de tipo SET OF CHAR, por ejemplo, significa disponer de una
estructura de datos capaz de contener cualquier subconjunto del tipo CHAR; desde el
conjunto vacío (empty set, en inglés) hasta el conjunto completo.
La carga con un conjunto concreto de elementos de una variable de tipo SET, se realiza
con la instrucción de asignación. Así, las variables declaradas anteriormente se podrían cargar
Ejemplo 4.17
LETRAS
:= ['A','E','I','O','U'];
NUMERO
:= [1..50,75,91];
88
CAPITULO IV: Estructuras de datos
MAYUS
DECEN
:= ['A','B','S'];
:= [10,20,30,40,50,60,70,80,90];
BOOLE
:= [];
{ conjunto vacío }
Como hemos dicho, el tipo base no puede tener más de 256 valores posibles y los
valores ordinales de los valores menor y mayor del tipo base deben estar en el rango 0..255.
Por esta razón el tipo base de un SET no puede ser de los tipos SHORTINT, INTEGER,
LONGINT ni WORD. Igualmente no puede serlo el subrango -100..100, por ejemplo, así
como algún tipo abs-tracto con más de 256 valores enumerados.
Ya sabemos definir constantes y declarar variables de tipo SET. También es posible,
como para otros tipos de datos, definir tipos SET, con TYPE:
TYPE NOMBRE = STRING [15];
CALEN = SET OF 1...31;
VAR NAME : NOMBRE;
MES : CALEN;
Por último, podemos también definir constantes con tipo (o variables inicializadas) de
tipo SET, de la forma habitual.
Ejemplo 4.18
TYPE
DIGITOS = SET OF 0..9;
CONST DIGIPARES : DIGITOS = [0,2,4,6,8];
VOCALES: SET OF 'A'....’Z' = ['A','E','I','O','U'];
CIENTOS : SET OF BYTE = [100,200];
Un gran inconveniente de los datos tipo SET es que no se pueden leer por teclado con
READLN ni escribir en pantalla con WRITE/LN.
89
Lic. Elmer Alberto León Zárate
OPERADORES RELACIONALES PARA EL TIPO SET
Con el tipo SET se pueden utilizar los siguientes operadores binarios de comparación
(que por tanto, dan resultado BOOLEAN), con los siguientes significados:
OPERADOR
OPERACION
TIPO DE OPERANDOS
=
Igualdad de Conjuntos
Tipos Set compatibles
<>
Desigualdad de Conjuntos
Tipos Set compatibles
<=
Subconjunto de
Tipos Set compatibles
>=
Superconjunto de
Tipos Set compatibles
IN
Pertenencia a
Operador izd.: cualquier tipo ordinal T
Operador der.: Set cuyo tipo base sea
compatible con T.
Tipos SET compatibles son aquellos que tienen el mismo tipo base o tipos base
compatible. Por ejemplo, SET OF CHAR es compatible con SET OF 'A'..'Z', y viceversa, si
todos los elementos del primero se encuentran en el rango del segundo. Sin embargo SET OF
CHAR no es compatible con SET OF BYTE.
Si A y B son SET's compatibles, y T es un valor ordinal de su tipo base, sus
comparaciones producen los siguientes resultados:
i)
A = B : es TRUE si y sólo si A y B contienen exactamente los mismos elementos; en
caso contrario resulta FALSE.
ii) A <> B : es TRUE si y sólo si A y B no contienen exactamente los mismos elementos; en
caso contrario resulta FALSE.
iii) A <= B : es TRUE si y sólo si cada miembro de A lo es también de B; i.e., si A
está incluí-do en B (A es subconjunto de B).
90
CAPITULO IV: Estructuras de datos
iv) A >= B : es TRUE si y sólo si cada miembro de B lo es también de A; i.e., si A incluye a
B (A es superconjunto de B).
v) T IN A : retorna TRUE cuando el valor del operando de tipo ordinal, T, es un miembro
del operando de tipo SET, A; en caso contrario devuelve FALSE.
Ejemplos 4.19
Si A = ['a','e','i','o','u']; B = ['a','i','u']; T = 'o', entonces:
WRITE (A = B);
{FALSE}
WRITE (A <> B);
{TRUE}
WRITE (A <= B);
{FALSE}
WRITE (A >= B);
{TRUE}
WRITE (T IN A);
{TRUE}
WRITE (T IN B);
{FALSE}
Podemos ya codificar en Pascal el programa, del que hablamos al principio del tema,
que cuenta las vocales de un texto, utilizando el tipo SET y el operador IN; por ejemplo, de la
siguiente manera: Si TXT es una variable de tipo STRING que hemos cargado por teclado;
VO-WELS es la constante tipo SET formada por ['A','E','I','O','U'] y CONT es una variable
BYTE que utilizaremos para contar las vocales del texto, tendríamos:
FOR K: =1 TO LENGTH (TXT) DO
IF UPCASE (TXT [K]) IN VOWELS THEN
CONT:=CONT+1;
OTROS OPERADORES PARA EL TIPO SET
Existen tres operadores binarios, con los símbolos +, - y *, de los operadores
aritméticos, que aplicados a operandos de tipos SET compatibles adquieren los siguientes
significados:
91
Lic. Elmer Alberto León Zárate
OPERADOR
OPERACION
TIPO DE OPERANDOS
+
Unión de Conjuntos
Tipos Set compatibles
-
Diferencia de Conjuntos
Tipos Set compatibles
*
Intersección de Conjuntos
Tipos Set compatibles
El resultado de estas operaciones sigue las reglas de la lógica de conjuntos: si A y B son
SET's compatibles, entonces:
i) A + B : resulta un conjunto formado por los elementos que están en A, en B o en
ambos conjuntos.
ii) A - B : resulta un conjunto formado por los elementos que están en A y no están en
B.
iii) A * B : resulta un conjunto formado por los elementos que están simultáneamente
en A y B.
Ejemplos 4.20
Si A = ['a','e','i','o','u'] y B = ['a','i','u'], entonces:
A + B = ['a','e','i','o','u']
A - B = ['e','o']
A * B = ['a','i','u']
Corresponden a las conocidas UNION, DIFERENCIA e INTERSECCION de
conjuntos.
E) CADENAS
Definición 4.29 Una cadena de caracteres es una secuencia de cero o más símbolos, que
incluyen letras del alfabeto, dígitos y caracteres especiales.
92
CAPITULO IV: Estructuras de datos
El juego de caracteres:
Los Lenguajes de Programación utilizan juego de caracteres para comunicarse con las
computadoras.
Los códigos de comunicación con las PC son 2:
ASCII (American Standard Code for Information Interchange)
El código Ascii básico utiliza 7 bits para cada carácter a representar que supone a 128
caracteres distintos, el código Ascii ampliado utiliza 8 bits y en este caso consta de 256
caracteres.
El código ASCII se compone de los siguientes tipos de caracteres:

Alfabéticos (a,b,c...z, A,B,C...Z)

Numéricos (0,1,2,3,4,5,6,7,8,9)

Especiales (+,-,*, /, {,}, [,], <,>...)
CARACTERES ASCII PRINCIPALES O MÁS USADOS
VALOR ASCII
CARÁCTER TECLA
VALOR ASCII
CARÁCTER TECLA
13
ENTER
41
)
27
ESCAPE
42
*
32
Barra Espaciadora
43
+
33
!
44
,
34
“
45
-
35
#
46
.
36
$
47
/
37
%
48
0
38
&
49
1
39
‘
50
2
40
(
51
3
93
Lic. Elmer Alberto León Zárate
52
4
123
{
53
5
124
¦
54
6
125
}
55
7
126
~
56
8
127
•
57
9
128
ç
58
:
129
ü
59
;
130
é
60
<
154
ü
61
=
160
á
62
>
161
í
63
?
162
ó
64
@
163
ú
65
A
164
ñ
***********
***********
165
Ñ
90
Z
166
ª
91
[
167
º
92
\
168
¿
93
]
169
®
94
^
170
¬
95
_
171
½
96
`
172
¼
97
A
173
¡
***********
***********
174
«
122
z
175
»
EBCDIC (Extended Binary Coded Decimal Interchange Change)
94
CAPITULO IV: Estructuras de datos
Utiliza 8 bits por carácter y también consta de 256 caracteres, solo es utilizado por la
firma IBM y sus componentes.
Nota:
En general, un carácter de cualquier tipo ocupara un byte de almacenamiento de
memoria.
1. CADENAS DE LONGITUD FIJA
Definición 4.30 Son cadenas con longitud declarada al inicio de la Programación en la cual
cuenta blancos a la izquierda o derecha o en la separación de letras.
V
V
I
I
S
1
1
2
S
U
2
3
U
A
3
4
A
L
B
L
4
5
B
5
6
6
A
7
7
8
A
S
8
9
S
I
9
I
C
C
1
V
1
1
V
I
1
1
I
1
1
1
1
1
10 11 12 13 14 15 16 17 18 19 20
Dimensión de la Cadena: 20
2. CADENAS DE LONGITUD VARIABLE CON UN MAXIMO
Definición 4.31 Son aquellas que cuentan con dos campos uno contiene la Longitud de la
cadena y otro la longitud actual.
1
17 15
1
V
V
I
I
S
S
U
U
A
A
L
L
B
B
A
DONDE:
17 es la longitud máxima
95
A
S
S
I
I
C
C
V
V
I
I
2
Lic. Elmer Alberto León Zárate
15 es la longitud actual del Arreglo
3. CADENAS DE LONGITUD INDEFINIDA
Definición 4.32 Son aquellas que se unen a través de un puntero estas listas contienen
caracteres empaquetados de la forma (2/elemento carácter).
6
6
V
V
I
I
S
S
U
U
A
A
L
L
DONDE
6 es la Longitud Actual
OPERACIONES CON CADENAS
Las operaciones más usadas son:
 CALCULO DE LA LONGITUD
 COMPARACION
 CONCATENACION
 EXTRACCION DE SUBCADENAS
 BUSQUEDA DE INFORMACION
 CONVERTIR CADENAS EN NUMEROS Y VICEVERSA
 INSERTAR CADENAS
 BORRAR CADENAS
 CAMBIAR CADENAS
a) CALCULO DE LA LONGITUD DE UNA CADENA
Definición 4.33 La Longitud de la cadena es el número de caracteres de la cadena.
96
CAPITULO IV: Estructuras de datos
Ejemplo 4.21
‘M i c r o s o f t V i s u a l S t u d i o‘tiene 23 caracteres
La operación de determina la longitud de la cadena se representara por la función
cuyo formato es:
LONGITUD (Cadena de Caracteres)
Dicha formula tiene acceso a datos tipo carácter pero el resultado será
numérico.
Ejemplos:
LONGITUD (‘MICROSOFT VISUAL STUDIO')
23 caracteres
LONGITUD (‘ ')
3 caracteres
LONGITUD (‘ ESTRUCTURA DE DATOS’)
21 caracteres
(19 letras) y (3 espacios)
Observación 4.9
En consecuencia el resultado de la longitud de una cadena de caracteres es
Entero se pueden realizar expresiones Aritméticas con el.
Ejemplo 4.22
10 + 15 + longitud (‘ ESTRUCTURA DE DATOS ’)
4 + 5 * 2 + longitud (‘visual basic’) + longitud (‘ ‘)
b) COMPARACION
Definición 4.34 Los criterios de comparación de cadenas se basan en el orden
numérico del código ASCII como código de referencia:
97
Lic. Elmer Alberto León Zárate
Ejemplo 4.23

‘A’ > ‘B’

‘A’ = ‘a’
COMPARACION DE IGUALDAD: Utilizar el Signo Igual

‘AREVALO’ = ‘AREVALO’
verdadero

‘AREVALO’ = ‘Arévalo’
falso
 ‘AREVALO’ = ‘Arévalo ’
falso
Ejemplo 4.24
COMPARACION DE DESIGUALDAD: Utilizar <>
 ‘Arévalo’ < ‘AREVALO’
 ‘Cáceres’ > ‘Arévalo’
 ‘AREVALO’ > ‘Arévalo’
c) CONCATENACION
Definición 4.35 Es la operación que reúne varias cadenas de caracteres en una
sola, pero conservando el orden en que se les llame o invoque.
Mayormente los símbolos más usados son: &
+
//
o
‘MICROSOFT’ + ‘VISUAL’ + ‘BASIC’  ‘MICROSOFTVISUALBASIC’
‘MICROSOFT’ & ‘VISUAL’ &‘BASIC’ ‘MICROSOFT VISUAL BASIC’
Si:
A = ‘Microsoft’
B=’Visual’
D=A+’ ‘+B+’ ‘+C
98
C=’Basic’
CAPITULO IV: Estructuras de datos
d) EXTRACCION DE SUBCADENAS
Definición 4.36 Es aquella que permite la extracción de una parte específica de una
cadena llamándose así Subcadena.
Utilizar la siguiente función:
SUBCADENA (‘Cadena ‘, Posición Inicial, longitud de la subcadena)
En este caso la Subcadena estará compuesta por la cantidad de caracteres que
extraiga desde la posición actual y la longitud de la misma.
SUBCADENA (‘Cadena ‘, Posición Inicial)
En este caso la Subcadena estará formado por caracteres de la cadena desde la
posición inicial hacia al final de la misma.
Ejemplo 4.25
Subcadena (‘abcdefg’, 2,4)
 bcde
e) BUSQUEDA DE INFORMACION
Definición 4.37 Localiza si una subcadena forma parte de la cadena, devolviendo
para este caso la posición exacta del primer encuentro de izquierda a derecha
POSICION (CADENA1, CADENA2)
Supongamos que la Cadena es C=’ESTRUCTURA DE LA INFORMACION’
POSICION(C, ‘DE’)
Resultado 12
f) CONVERTIR CADENAS EN NUMEROS O VICEVERSA
Definición 4.38 Se declara una variable del tipo a cambiar y en la programación se
iguala a la variable cuyo valor es lo contrario.
99
Lic. Elmer Alberto León Zárate
Función:
Cadena = Función Cambiante a cadena (valor numérico)
Numero = Función cambiante a numero (Valor de texto)
EN C: <STDLIB.H>  ATOI (CADENA)
ITOA, FCVT
EN BASIC:
-
VAL: Devuelve los números contenidos en una cadena.
VAL (cadena)
-
STR: Devuelve la representación de cadena en números.
STR (numero)
g) INSERTAR CADENAS
Definición 4.39 Inserta una subcadena dentro de una cadena más larga = y en
determinada posición.
Sintaxis:
INSERTAR (Cadena, posición, Subcadena)
Idea:
Si el texto es: ABCD El nuevo texto sera: ABXXCD
Algoritmo para insertar cadenas:
Inicio
Devolver (Subcadena (Cadena, 1, posición-1) + “cadena a insertar” + Subcadena
(cadena, posicion, longitud (cadena)-Posicion+1))
Fin
100
CAPITULO IV: Estructuras de datos
Ejemplo 4.26
CADENA= E S T R U C T U R A I N F O R M A C I O N, debemos agregar las
letras que faltan para que la nueva cadena sea ESTRUCTURA DE LA
INFORMACIÓN
Subcadena (cadena, 1, (12-1))  ESTRUCTURA_
Cadena a insertar  DE LA_
Subcadena (cadena, 12, (22-12+1)  INFORMACION
h) BORRAR CADENAS
Definición 4.40 Elimina determinados caracteres de cuerdo a una posición y la
cantidad de caracteres a borrar.
Sintaxis:
BORRAR (Cadena, posición, Longitud a eliminar)
Idea:
Si el texto es: ABCD El nuevo texto será: AD
Algoritmo para BORRAR cadenas:
Inicio
Devolver (Subcadena (Cadena, 1, posición - 1) +
Subcadena (cadena, posicion+longitud, Longitud (cadena) –posición–longitud+1))
Fin
Ejemplo 4.27
CADENA= I N F O R M A C I O N, debemos borrar las letras “FORMA” de tal
manera que la nueva cadena será
“INCION”
Subcadena (cadena, 1, (3-1))  IN
Subcadena (cadena, 3+5,11-3-5+1)  CION
101
Lic. Elmer Alberto León Zárate
i) CAMBIAR CADENAS
Sustituye un texto por otro.
Sintaxis: CAMBIAR (Cadena, Subcadena a sustituir, Subcadena nueva)
Idea:
Si el texto es: ABCD
El nuevo texto será: AXYD
CAMBIAR (“ABCDEF”,”BC”,”XY”)  AXYDEF
Algoritmo para CAMBIAR cadenas:
Inicio
A  POSICION (cadena, Subcadena) Entero
B  BORRAR (cadena, A, LONGITUD (CADENA)) string
DEVOLVER (INSERTAR (cadena, A, Subcadena) string
Fin
4.2.2 ESTRUCTURA DE DATOS DINAMICAS
A) LISTAS
Definición 4.41 Una lista se define como una serie de N elementos E1, E2,..., EN, ordenados
de manera consecutiva, es decir, el elemento Ek (que se denomina elemento k-ésimo) es previo
al elemento Ek+1. Si la lista contiene 0 elementos se denomina como lista vacía.
Las operaciones que se pueden realizar en la lista son: insertar un elemento en la
posición k, borrar el k-ésimo elemento, buscar un elemento dentro de la lista y preguntar si la
lista esta vacía.
102
CAPITULO IV: Estructuras de datos
Una manera simple de implementar una lista es utilizando un arreglo. Sin embargo, las
operaciones de inserción y borrado de elementos en arreglos son ineficientes, puesto que para
insertar un elemento en la parte media del arreglo es necesario mover todos los elementos que
se encuentren delante de él, para hacer espacio, y al borrar un elemento es necesario mover
todos los elementos para ocupar el espacio desocupado. Una implementación más eficiente
del TDA se logra utilizando listas enlazadas.
A continuación se presenta una implementación en Java del TDA utilizando listas
enlazadas y sus operaciones asociadas:

estaVacia (): devuelve verdadero si la lista esta vacía, falso en caso contrario.

insertar(x, k): inserta el elemento x en la k-ésima posición de la lista.

buscar(x): devuelve la posición en la lista del elemento x.

buscarK (k): devuelve el k-ésimo elemento de la lista.

eliminar(x): elimina de la lista el elemento x.
En la implementación con listas enlazadas es necesario tener en cuenta algunos
detalles importantes: si solamente se dispone de la referencia al primer elemento, el añadir o
remover en la primera posición es un caso especial, puesto que la referencia a la lista enlazada
debe modificarse según la operación realizada. Además, para eliminar un elemento en
particular es necesario conocer el elemento que lo antecede, y en este caso, ¿qué pasa con el
primer elemento, que no tiene un predecesor?
Para solucionar estos inconvenientes se utiliza la implementación de lista enlazada con
nodo cabecera. Con esto, todos los elementos de la lista tendrán un elemento previo, puesto
103
Lic. Elmer Alberto León Zárate
que el previo del primer elemento es la cabecera. Una lista vacía corresponde, en este caso, a
una cabecera cuya referencia siguiente es null.
Ilustración 4.1 Esquema de una lista
Los archivos NodoLista.java, IteradorLista.java y Lista.java contienen una
implementación completa del TDA lista. La clase NodoLista implementa los nodos de la lista
enlazada, la clase Lista implementa las operaciones de la lista propiamente tal, y la clase
IteradorLista implementa objetos que permiten recorrer la lista y posee la siguiente interfaz:
 Avanzar (): avanza el iterador al siguiente nodo de la lista.
 Obtener (): retorna el elemento del nodo en donde se encuentra el iterador.
 Costo de las operaciones en tiempo:
 Insertar/eliminar elemento en k-ésima posición:O(k).Se puede hacer en O(1)?
 Buscar elemento x: O(N) (promedio).
B) PILAS
Definición 4.42 Una pila (stack o pushdown en inglés) es una lista de elementos de la cual
sólo se puede extraer el último elemento insertado. La posición en donde se encuentra dicho
elemento se denomina tope de la pila. También se conoce a las pilas como listas LIFO (LAST
IN - FIRST OUT: el último que entra es el primero que sale).
104
CAPITULO IV: Estructuras de datos
Ilustración 4.2 Esquema de una pila
La interfaz de este TDA provee las siguientes operaciones:

apilar(x): inserta el elemento x en el tope de la pila (push en inglés).

desapilar (): retorna el elemento que se encuentre en el tope de la pila y lo elimina de
ésta (pop en inglés).

tope (): retorna el elemento que se encuentre en el tope de la pila, pero sin eliminarlo
de ésta (top en inglés).

estaVacia (): retorna verdadero si la pila no contiene elementos, falso en caso
contrario (isEmpty en inglés).
Observación 4.10
Algunos autores definen desapilar como sacar el elemento del tope de la pila sin
retornarlo.
105
Lic. Elmer Alberto León Zárate
IMPLEMENTACIÓN DEL TDA PILA
A continuación se muestran dos maneras de implementar una pila: utilizando un
arreglo y utilizando una lista enlazada. En ambos casos el costo de las operaciones es de O
(1).
1.- IMPLEMENTACIÓN UTILIZANDO ARREGLOS
Para implementar una pila utilizando un arreglo, basta con definir el arreglo del tipo de
dato que se almacenará en la pila. Una variable de instancia indicará la posición del tope de la
pila, lo cual permitirá realizar las operaciones de inserción y borrado, y también permitirá
saber si la pila esta vacía, definiendo que dicha variable vale -1 cuando no hay elementos en
el arreglo.
class PilaArreglo
{
private Object[] arreglo;
private int tope;
private int MAX_ELEM=100; /máximo numero de elemento en la pila
public PilaArreglo()
{
arreglo=new Object[MAX_ELEM];
tope=-1; // inicialmente la pila esta vacía
}
public void apilar(Object x)
{
106
CAPITULO IV: Estructuras de datos
if (tope+1<MAX_ELEM) // si esta llena se produce OVERFLOW
{
tope++;
arreglo[tope]=x;
}
}
public Object desapilar()
{
if (!estaVacia()) // si esta vacia se produce UNDERFLOW
{
Object x=arreglo[tope];
tope--;
return x;
}
}
public Object tope()
{
if (!estaVacia()) // si esta vacia es un error
{
Object x=arreglo[tope];
return x;
}
}
public boolean estaVacia()
107
Lic. Elmer Alberto León Zárate
{
if (tope==-1)
{
return true;
}
else
{
return false;
}
}
}
El inconveniente de esta implementación es que es necesario fijar de antemano el
número máximo de elementos que puede contener la pila, MAX_ELEM, y por lo tanto al
apilar un elemento es necesario controlar que no se inserte un elemento si la pila esta llena.
Sin embargo, en Java es posible solucionar este problema creando un nuevo arreglo más
grande que el anterior, el doble por ejemplo, y copiando los elementos de un arreglo a otro:
public void apilar(Object x)
{
if (tope+1<MAX_ELEM) // si esta llena se produce OVERFLOW
{
tope++;
arreglo[tope]=x;
}
108
CAPITULO IV: Estructuras de datos
else
{
MAX_ELEM=MAX_ELEM*2;
Object[] nuevo_arreglo=new Object[MAX_ELEM];
for (int i=0; i<arreglo.length; i++)
{
nuevo_arreglo[i]=arreglo[i];
}
tope++;
nuevo_arreglo[tope]=x;
arreglo=nuevo_arreglo;
}
}
2.- IMPLEMENTACIÓN UTILIZANDO LISTAS ENLAZADAS
En este caso no existe el problema de tener que fijar el tamaño máximo de la pila
(aunque siempre se está acotado por la cantidad de memoria disponible!). La implementación
es bastante simple: los elementos siempre se insertan al principio de la lista (apilar) y siempre
se extrae el primer elemento de la lista (desapilar y tope), por lo que basta con tener una
referencia al principio de la lista enlazada. Si dicha referencia es null, entonces la pila esta
vacía.
class PilaLista
{
109
Lic. Elmer Alberto León Zárate
private NodoLista lista;
public PilaLista()
{
lista=null;
}
public void apilar(Object x)
{
lista=new NodoLista(x, lista);
}
public Object desapilar() //si esta vacia se produce UNDERFLOW
{
if (!estaVacia())
{
Object x=lista.elemento;
lista=lista.siguiente;
return x;
}
}
public Object tope()
{
if (!estaVacia()) // si esta vacia es un error
{
Object x=lista.elemento;
return x;
110
CAPITULO IV: Estructuras de datos
}
}
public boolean estaVacia()
{
return lista==null;
}
}
Dependiendo de la aplicación que se le de a la pila es necesario definir que acción
realizar en caso de que ocurra overflow (rebalse de la pila) o underflow (intentar desapilar
cuando la pila esta vacía). Java posee un mecanismo denominado excepciones, que permite
realizar acciones cuando se producen ciertos eventos específicos (como por ejemplo overflow
o underflow en una pila).
En ambas implementaciones el costo de las operaciones que provee el TDA tiene
costo O (1).
Ejemplo 4.28
Para eliminar la recursividad suponer que una función F realiza un llamado recursivo
dentro de su código, lo que se ilustra en el siguiente esquema:
111
Lic. Elmer Alberto León Zárate
Ilustración 4.3 Esquema de recursividad
Si la llamada recursiva es lo último que hace la función F, entonces dicha llamada se
puede substituir por un ciclo while. Este caso es conocido como tail recursion y en lo posible
hay que evitarlo en la programación, ya que cada llamada recursiva ocupa espacio en la
memoria del computador, y en el caso del tail recursion es muy simple eliminarla.
void imprimir(int[] a, int j) // versión recursiva
{
if (j<a.length)
{
System.out.println(a[j]);
imprimir(a, j+1); // tail recursión
}
}
void imprimir(int[] a, int j) // versión iterativa
{
while (j<a.length)
{
System.out.println(a[j]);
112
CAPITULO IV: Estructuras de datos
j=j+1;
}
}
En el caso general, cuando el llamado recursivo se realiza en medio de la función F, la
recursión se puede eliminar utilizando una pila.
Ejemplo 4.29
Recorrido en preorden de un árbol binario.
// "raiz" es la referencia a la raiz del arbol
// Llamado inicial: preorden(raiz)
// Versión recursiva
void preorden(Nodo nodo)
{
if (nodo!=null)
{
System.out.print(nodo.elemento);
preorden(nodo.izq);
preorden(nodo.der);
}
}
// Primera versión iterativa
void preorden(Nodo nodo)
{
113
Lic. Elmer Alberto León Zárate
Nodo aux;
Pila pila=new Pila(); // pila de nodos
pila.apilar(nodo);
while(!pila.estaVacia()) // mientras la pila no este vacia
{
aux=pila.desapilar();
if (aux!=null)
{
System.out.print(aux.elemento);
// Primero se apila el nodo derecho y luego el izquierdo
// Para mantener el orden correcto del recorrido
// Al desapilar los nodos
pila.apilar(aux.der);
pila.apilar(aux.izq);
}
}
}
// Segunda versión iterativa
// Dado que siempre el ultimo nodo apilado dentro del bloque if es
// aux.izq podemos asignarlo directamente a aux hasta que éste sea
// null, es decir, el bloque if se convierte en un bloque while
// Y se cambia el segundo apilar por una asignacion de la referencia
void preorden(Nodo nodo)
{
114
CAPITULO IV: Estructuras de datos
Nodo aux;
Pila pila=new Pila(); // pila de nodos
pila.apilar(nodo);
while(!pila.estaVacia()) // mientras la pila no este vacia
{
aux=pila.desapilar();
while (aux!=null)
{
System.out.print(aux.elemento);
pila.apilar(aux.der);
aux=aux.izq;
}
}
}
Si bien los programas no recursivos son más eficientes que los recursivos, la
eliminación de recursividad (excepto en el caso de tail recursion) le quita claridad al código
del programa. Por lo tanto:

A menudo es conveniente eliminar el tail recursion.

Un método recursivo es menos eficiente que uno no recursivo, pero sólo en pocas
oportunidades vale la pena eliminar la recursión.
115
Lic. Elmer Alberto León Zárate
C) COLAS
Definición 4.43 Una cola (queue en inglés) es una lista de elementos en donde siempre se
insertan nuevos elementos al final de la lista y se extraen elementos desde el inicio de la lista.
También se conoce a las colas como listas FIFO (FIRST IN - FIRST OUT: el primero que
entra es el primero que sale).
Ilustración 4.4 Esquema de cola
Las operaciones básicas en una cola son:

encolar(x): inserta el elemento x al final de la cola (enqueue en inglés).

sacar (): retorna el elemento que se ubica al inicio de la cola (dequeue en inglés).

estaVacia (): retorna verdadero si la cola esta vacía, falso en caso contrario.
Al igual que con el TDA pila, una cola se puede implementar tanto con arreglos como
con listas enlazadas. A continuación se verá la implementación usando un arreglo.
Las variables de instancia necesarias en la implementación son:

primero: indica el índice de la posición del primer elemento de la cola, es decir, la
posición el elemento a retornar cuando se invoque sacar.
116
CAPITULO IV: Estructuras de datos

ultimo: indica el índice de la posición de último elemento de la cola. Si se invoca
encolar, el elemento debe ser insertado en el casillero siguiente al que indica la
variable.

numElem: indica cuántos elementos posee la cola. Definiendo MAX_ELEM como el
tamaño máximo del arreglo, y por lo tanto de la cola, entonces la cola esta vacía si
numElem==0 y está llena si numElem==MAX_ELEM.
Ilustración 4.5 Esquema de elementos en una cola
Un detalle faltante es el siguiente: ¿qué pasa si la variable ultimo sobrepasa el rango
de índices del arreglo? Esto se soluciona definiendo que si después de insertar un elemento el
índice ultimo == MAX_ELEM, entonces se asigna ultimo = 0, y los siguientes elementos
serán insertados al comienzo del arreglo. Esto no produce ningún efecto en la lógica de las
operaciones del TDA, pues siempre se saca el elemento referenciado por el índice primero,
aunque en valor absoluto primero > ultimo. Este enfoque es conocido como implementación
con arreglo circular, y la forma más fácil de implementarlo es haciendo la aritmética de
subíndices módulo MAX_ELEM.
117
Lic. Elmer Alberto León Zárate
Ilustración 4.6 Esquema de elementos en una cola para implementar con arreglo circular
class ColaArreglo
{
private Object[] arreglo;
private int primero, ultimo, numElem;
private int MAX_ELEM=100; /maximo numero de elemento en la cola
public ColaArreglo()
{
arreglo=new Object[MAX_ELEM];
primero=0;
ultimo=MAX_ELEM-1;
numElem=0;
}
public void encolar(Object x)
{
if (numElem<MAX_ELEM) // si esta llena se produce OVERFLOW
{
ultimo= (ultimo+1) %MAX_ELEM;
118
CAPITULO IV: Estructuras de datos
arreglo[ultimo]=x;
numElem++;
}
}
public Object sacar()
{
if (!estaVacia()) // si esta vacia se produce UNDERFLOW
{
Object x=arreglo[primero];
primero= (primero+1) %MAX_ELEM;
numElem--;
return x;
}
}
public boolean estaVacia()
{
return numElem==0;
}
}
Nuevamente en este caso, dependiendo de la aplicación, se debe definir qué hacer en
caso de producirse OVERFLOW o UNDERFLOW.
Con esta implementación, todas las operaciones del TDA cola tienen costo O (1).
119
Lic. Elmer Alberto León Zárate
D) LISTAS ENLAZADAS
Definición 4.44 En Ciencias de la Computación, una lista enlazada es una de las
estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de
datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios
y una o dos referencias (punteros) al nodo anterior y/o posterior. El principal beneficio de las
listas enlazadas respecto a los arreglos convencionales es que el orden de los elementos
enlazados puede ser diferente al orden de almacenamiento en la memoria o el disco,
permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.
Una lista enlazada es un tipo de dato auto-referenciado porque contienen un puntero o
link a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminación de
nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto está
previamente identificado o localizado), pero no permiten un acceso aleatorio. Existen
diferentes tipos de listas enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas,
Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares.
Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes tales
como Lisp y Scheme tiene estructuras de datos ya construidas, junto con operaciones para
acceder a las listas enlazadas. Lenguajes imperativos u orientados a objetos tales como C o
C++ y Java, respectivamente, disponen de referencias para crear listas enlazadas.
120
CAPITULO IV: Estructuras de datos
TIPOS DE LISTAS ENLAZADAS
1.-LISTAS SIMPLES ENLAZADAS
Definición 4.45 La lista enlazada básica es la lista enlazada simple la cual tiene un enlace
por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vacía, si
es el último nodo.
Ilustración 4.7 Esquema de lista enlazada simple
Una lista enlazada simple contiene dos valores: el valor actual del nodo y un enlace al
siguiente nodo
2.- LISTA DOBLEMENTE ENLAZADA
Definición 4.46 Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o
lista enlazadas de dos vías. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta
al valor NULL o a la lista vacía si es el primer nodo; y otro que apunta al siguiente nodo
siguiente, o apunta al valor NULL o a la lista vacía si es el último nodo.
Ilustración 4.8 Esquema de lista doblemente enlazada
Una lista doblemente enlazada contiene tres valores: el valor, el link al nodo siguiente,
y el link al anterior
121
Lic. Elmer Alberto León Zárate
En algún lenguaje de muy bajo nivel, XOR-Linking ofrece una vía para implementar
listas doblemente enlazadas, usando una sola palabra para ambos enlaces, aunque el uso de
esta técnica no se suele utilizar.
3.- LISTAS ENLAZADAS CIRCULARES
Definición 4.47 En una lista enlazada circular, el primer y el último nodo están unidos
juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente
enlazadas. Para recorrer un lista enlazada circular podemos empezar por cualquier nodo y
seguir la lista en cualquier dirección hasta que se regrese hasta el nodo original. Desde otro
punto de vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni
fin. Este tipo de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar
todos los nodos de una lista a partir de uno dado.
Ilustración 4.9 Esquema de lista enlazada circular
Una lista enlazada circular que contiene tres valores enteros
a) Listas enlazadas circulares simples
Definición 4.48 Cada nodo tiene un enlace, similar al de las listas enlazadas simples,
excepto que el siguiente nodo del último apunta al primero. Como en una lista enlazada
simple, los nuevos nodos pueden ser solo eficientemente insertados después de uno que ya
tengamos referenciado. Por esta razón, es usual quedarse con una referencia solamente al
122
CAPITULO IV: Estructuras de datos
último elemento en una lista enlazada circular simple, esto nos permite rápidas inserciones al
principio, y también permite accesos al primer nodo desde el puntero del último nodo. [1]
b) Lista Enlazada Doblemente Circular
Definición 4.49 En una lista enlazada doblemente circular, cada nodo tiene dos enlaces,
similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo
apunta al último y el enlace siguiente del último nodo, apunta al primero. Como en una lista
doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier
punto con acceso a algún nodo cercano. Aunque estructuralmente una lista circular
doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede
establecer el nodo apuntado que está en la cabeza o al nodo cola, y así mantener el orden tan
bien como en una lista doblemente enlazada.
NODOS CENTINELAS
Definición 4.50 Un nodo centinela (también llamado falso nodo o nodo ficticio) es un
nodo que se ubica al principio y/o al final de la lista, el cual no es usado para guardar datos.
Su propósito es simplificar o agilizar algunas operaciones, asegurando que cualquier nodo
tiene otro anterior o posterior, y que toda la lista (incluso alguna que no contenga datos)
siempre tenga un “primer y último” nodo.
APLICACIONES DE LAS LISTAS ENLAZADAS
Las listas enlazadas son usadas como módulos para otras muchas estructuras de datos,
tales como pilas, colas y sus variaciones.
123
Lic. Elmer Alberto León Zárate
El campo de datos de un nodo puede ser otra lista enlazada. Mediante este mecanismo,
podemos construir muchas estructuras de datos enlazadas con listas; esta práctica tiene su
origen en el lenguaje de programación Lisp, donde las listas enlazadas son una estructura de
datos primaria (aunque no la única), y ahora es una característica común en el estilo de
programación funcional.
A veces, las listas enlazadas son usadas para implementar arreglos asociativos, y estas
en el contexto de las llamadas listas asociativas. Hay pocas ventajas en este uso de las listas
enlazadas; hay mejores formas de implementar éstas estructuras, por ejemplo con árboles
binarios de búsqueda equilibrados. Sin embargo, a veces una lista enlazada es dinámicamente
creada fuera de un subconjunto propio de nodos semejante a un árbol, y son usadas más
eficientemente para recorrer ésta serie de datos
VENTAJAS
Como muchas opciones en programación y desarrollo, no existe un único método
correcto para resolver un problema. Una estructura de lista enlazada puede trabajar bien en un
caso pero causar problemas en otros. He aquí una lista con algunas de las ventajas más
comunes que implican las estructuras de tipo lista. En general, teniendo una colección
dinámica donde los elementos están siendo añadidos y eliminados frecuentemente e importa
la localización de los nuevos elementos introducidos se incrementa el beneficio de las listas
enlazadas.
Ventajas de usar listas: Las listas son dinámicas, es decir, podemos almacenar en ellas
tantos elementos como necesitemos, siempre y cuando haya espacio suficiente espacio en
memoria. Al insertar un elemento en la lista, la operación tiene un tiempo constante
124
CAPITULO IV: Estructuras de datos
independientemente de la posición en la que se inserte, solo se debe crear el nodo y modificar
los enlaces. Esto no es así en los arreglos, ya que si el elemento lo insertamos al inicio o en
medio, tenemos un tiempo lineal debido a que se tienen que mover todos los elementos que se
encuentran a la derecha de la posición donde lo vamos a insertar y después insertar el
elemento en dicha posición; solo al insertar al final del arreglo se obtienen tiempos constantes.
Al eliminar un elemento paso lo mismo que se menciono en el punto anterior.
DESVENTAJAS DE USAR LISTAS:
El acceso a un elemento es más lento, debido a que la información no está en
posiciones contiguas de memoria, por lo que no podemos acceder a un elemento con base en
su posición como se hace en los arreglos.
OPERACIONES EN LISTAS ENLAZADAS
Las operaciones que podemos realizar sobre una lista enlazada son las siguientes:
a)
RECORRIDO. Esta operación consiste en visitar cada uno de los nodos que forman
la lista. Para recorrer todos los nodos de la lista, se comienza con el primero, se toma
el valor del campo liga para avanzar al segundo nodo, el campo liga de este nodo nos
dará la dirección del tercer nodo, y así sucesivamente.
b)
INSERCIÓN. Esta operación consiste en agregar un nuevo nodo a la lista. Para esta
operación se pueden considerar tres casos:

Insertar un nodo al inicio.

Insertar un nodo antes o después de cierto nodo.

Insertar un nodo al final.
125
Lic. Elmer Alberto León Zárate
c)
BORRADO. La operación de borrado consiste en quitar un nodo de la lista,
redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos:
d)

Eliminar el primer nodo.

Eliminar el último nodo.

Eliminar un nodo con cierta información.

Eliminar el nodo anterior o posterior al nodo cierta con información.
BÚSQUEDA. Esta operación consiste en visitar cada uno de los nodos, tomando al
campo liga como puntero al siguiente nodo a visitar.
E) ÁRBOLES
Definición 4.51 Un árbol se define como una colección de nodos organizados en forma
recursiva. Cuando hay 0 nodos se dice que el árbol esta vacío, en caso contrario el árbol
consiste en un nodo denominado raíz, el cual tiene 0 o más referencias a otros árboles,
conocidos como subárboles. Las raíces de los subárboles se denominan hijos de la raíz, y
consecuentemente la raíz se denomina padre de las raíces de sus subárboles. Una visión
gráfica de esta definición recursiva se muestra en la siguiente figura:
Ilustración 4.10 Esquema de un árbol
126
CAPITULO IV: Estructuras de datos
Definición 4.52 Los nodos que no poseen hijos se denominan hojas. Dos nodos que tienen
el padre en común se denominan hermanos.
Definición 4.53 Un camino entre un nodo n1 y un nodo nk está definido como la secuencia
de nodos n1, n2,..., nk tal que ni es padre de ni+1, 1 <= i < k. El largo del camino es el número
de referencias que componen el camino, que para el ejemplo son k-1. Existe un camino desde
cada nodo del árbol a sí mismo y es de largo 0. Nótese que en un árbol existe un único camino
desde la raíz hasta cualquier otro nodo del árbol. A partir del concepto de camino se definen
los conceptos de ancestro y descendiente: un nodo n es ancestro de un nodo m si existe un
camino desde n a m; un nodo n es descendiente de un nodo m si existe un camino desde m a
n.
Definición 4.54 Se define la profundidad del nodo nk como el largo del camino entre la
raíz del árbol y el nodo nk. Esto implica que la profundidad de la raíz es siempre 0. La altura
de un nodo nk es el máximo largo de camino desde nk hasta alguna hoja. Esto implica que la
altura de toda hoja es 0. La altura de un árbol es igual a la altura de la raíz, y tiene el mismo
valor que la profundidad de la hoja más profunda. La altura de un árbol vacío se define como
-1.
Ejemplo 4.30
La siguiente figura muestra los conceptos previamente descritos:
127
Lic. Elmer Alberto León Zárate
Ilustración 4.11 Esquema de los elementos de un árbol

A es la raíz del árbol.

A es padre de B, C y D.

E y F son hermanos, puesto que ambos son hijos de B.

E, J, K, L, C, P, Q, H, N y O son las hojas del árbol.

El camino desde A a J es único, lo conforman los nodos A-B-F-J y es de largo 3.

D es ancestro de P, y por lo tanto P es descendiente de D.

L no es descendiente de C, puesto que no existe un camino desde C a L.

La profundidad de C es 1, de F es 2 y de Q es 4.

La altura de C es 0, de F es 1 y de D es 3.

La altura del árbol es 4 (largo del camino entre la raíz A y la hoja más profunda, P o
Q).
128
CAPITULO IV: Estructuras de datos
ÁRBOLES BINARIOS
Definición 4.55 Un árbol binario es un árbol en donde cada nodo posee 2 referencias a
subárboles (ni más, ni menos). En general, dichas referencias se denominan izquierda y
derecha, y consecuentemente se define el subárbol izquierdo y subárbol derecho del árbol.
Ilustración 4.12 Esquema de un árbol binario
En este caso, la implementación del nodo de un árbol binario es como sigue:
class NodoArbolBinario
{
Object elemento;
NodoArbolBinario izq;
NodoArbolBinario der;
}
Los nodos en sí que conforman un árbol binario se denominan nodos internos, y todas
las referencias que son null se denominan nodos externos.
129
Lic. Elmer Alberto León Zárate
Ilustración 4.13 Esquema de un árbol binario con nodos internos y externos
PROPIEDADES DE LOS ÁRBOLES BINARIOS
Propiedad 4.1
Si se define i = número de nodos internos, e = número de nodos externos, entonces se
tiene que:
e = i+1
Propiedad 4.2
Sea n = número de nodos internos. Se define:

In = suma del largo de los caminos desde la raíz a cada nodo interno (largo de caminos
internos).

En = suma del largo de los caminos desde la raíz a cada nodo externo (largo de
caminos externos).
Se tiene que:
130
CAPITULO IV: Estructuras de datos
En = In+2n
Propiedad 4.3
¿Cuántos árboles binarios distintos se pueden construir con n nodos internos?
n
0
1
2
3
bn
1
1
2
5
¿bn?
Ejemplo 4.31
b4 = b0*b3 + b1*b2 + b2*b1 + b3*b0 = 5 + 2 + 2 + 5 = 14.
Este tipo de ecuaciones se puede resolver y la solución es la siguiente:
La serie de números que genera bn se conoce como números de Catalán.
Asintóticamente:
131
Lic. Elmer Alberto León Zárate
Ejemplo 4.32
La siguiente figura muestra un ejemplo de un árbol de expresiones matemáticas. En un
árbol de expresiones las hojas corresponden a los operandos de la expresión (variables o
constantes), mientras que los nodos restantes contienen operadores. Dado que los operadores
matemáticos son binarios (o unarios como en el caso del operador signo -), un árbol de
expresiones resulta ser un árbol binario.
Ilustración 4.14 Esquema de un árbol binario de expresiones matemáticas
Un árbol de expresiones se puede evaluar de la siguiente forma:

Si la raíz del árbol es una constante o una variable se retorna el valor de ésta.

Si la raíz resulta ser un operador, entonces recursivamente se evalúan los
subárboles izquierdo y derecho, y se retorna el valor que resulta al operar los
valores obtenidos de las evaluaciones de los subárboles con el operador
respectivo.
132
CAPITULO IV: Estructuras de datos
RECORRIDOS DE ÁRBOLES BINARIOS
Existen tres formas principales para recorrer un árbol binario en forma recursiva. Estas
son:

Preorden: raíz - subárbol izquierdo - subárbol derecho.

Inorden: subárbol izquierdo - raiz - subárbol derecho.

Postorden: subárbol izquierdo - subárbol derecho - raíz.
Ejemplos 4.33
 Recorrido del árbol de expresiones anterior en preorden se obtiene: * + a b - c d
 Recorrido del árbol de expresiones en inorden se obtiene: a + b * c - d
 Recorrido del árbol de expresiones en postorden se obtiene: a b + c d - *
La expresión que se obtiene con el recorrido en postorden se conoce como notación
polaca.
4.3 RELACION DE EJERCICIOS:
1. Realiza el pseudocódigo que permita el ingreso de 5 alumnos con 4 notas cada uno y
determine el promedio por cada alumno y al final determine el promedio de los
promedios obtenidos por cada estudiante.
2. Calcular la suma de los elementos de un arreglo bidimensional de n elementos.
3. Realizar el algoritmo para determinar la mayor nota ingresada a un arreglo de notas de
4x4.
133
Lic. Elmer Alberto León Zárate
4. Realizar el algoritmo para ingresar un arreglo bidimensional de numero y luego
determine:
 La suma de la primera fila
 La multiplicación de la última fila
 La suma de primera columna
 La multiplicación de la última columna
 La suma de la diagonal principal
 La multiplicación de la diagonal secundaria
5. Escribir un pseudocódigo que permita sumar el número de elementos positivos y el de
negativos de una matriz n.
6. De una lista de n elementos escribir el pseudocódigo que permita insertar el valor x en
un lugar ingresado por el usuario.
7. Leer una matriz de 3x3 y calcular la suma de sus filas y la suma de sus columnas.
8. Se tiene una lista de n nombres en un arreglo unidimensional, escribir el pseudocódigo
que solicite el nombre de un alumno y lo busque en la lista.
9. Obtener el promedio de cierta cantidad de alumnos, considerando para cada alumno
los siguientes datos, código, nombre, sexo, promedio de prácticas y notas de exámenes
parciales y final. Luego mostrar él numero de alumnos aprobados - desaprobados
personas del sexo masculino – femenino.
10. Se pide emitir el pago mensual del personal de una empresa considerando los
siguientes datos por empleado: código, área, sueldo básico, y horas extras.
11. Realizar un algoritmo para el borrado de un elemento. Por ejemplo: Eliminar el
elemento repetido
134
CAPITULO IV: Estructuras de datos
A
B
C
D
E
E
F
12. Programa en Visual Basic donde se ingrese un texto en los Cuadros TEXT1 Y TEXT2
y luego se unan en un cuadro de TEXT3 al presionar Clic en un botón command que
se llame Concatenación.
Text3.Text = Text1.Text + Text2.Text
Text3.Text = Text1.Text & Text2.Text
135
CAPITULO V
TEORIA DE GRAFOS
5.1 CONCEPTOS BASICOS
Definición 5.1 Un grafo es un objeto matemático que se utiliza para representar circuitos,
redes, etc. Los grafos son muy utilizados en computación, ya que permiten resolver problemas
muy complejos.
Definición 5.2 Un grafo consta de vértices (o nodos) y aristas. Los vértices son objetos que
contienen información y las aristas son conexiones entre vértices. Para representarlos, se
suelen utilizar puntos para los vértices y líneas para las conexiones, aunque hay que recordar
siempre que la definición de un grafo no depende de su representación.
Definición 5.3 Un camino entre dos vértices es una lista de vértices en la que dos
elementos sucesivos están conectados por una arista del grafo. Así, el camino AJLOE es un
camino que comienza en el vértice A y pasa por los vértices J, L y O (en ese orden) y al final
va del O al E. El grafo será conexo si existe un camino desde cualquier nodo del grafo hasta
cualquier otro. Si no es conexo constará de varias componentes conexas.
Definición 5.4 Un camino simple es un camino desde un nodo a otro en el que ningún nodo
se repite (no se pasa dos veces). Si el camino simple tiene como primer y último elemento al
mismo nodo se denomina ciclo. Cuando el grafo no tiene ciclos tenemos un árbol. Varios
árboles independientes forman un bosque. Un árbol de expansión de un grafo es una
136
CAPITULO V: Teoria de grafos
reducción del grafo en el que solo entran a formar parte el número mínimo de aristas que
forman un árbol y conectan a todos los nodos.
Definición 5.5 Un grafo es completo si cuenta con todas las aristas posibles (es decir, todos
los nodos están conectados con todos), disperso si tiene relativamente pocas aristas y denso si
le faltan pocas para ser completo.
Definición 5.6 Un grafo no dirigido es cuando las aristas son la mayor parte de las veces
bidireccionales, es decir, si una arista conecta dos nodos A y B se puede recorrer tanto en
sentido hacia B como en sentido hacia A.
Definición 5.7 Un grafo dirigido es cuando las aristas son unidireccionales. Estas uniones
se suelen dibujar con una flecha.
Definición 5.8 Un grafo es ponderado cuando las aristas llevan un coste asociado (un
entero al que se denomina peso).
Definición 5.9 Una red es un grafo dirigido y ponderado.
Definición 5.10 Dos grafos son isomorfos cuando sólo queda lo esencial del dibujo: la
forma de las aristas no son relevantes, sólo importan sus extremidades (o cabos); la posición
de los vértices tampoco, y se puede variar para obtener un grafo más claro, y hasta sus
nombres se pueden cambiar. Generalmente, se considera que colocar los vértices en forma de
polígono regular da grafos muy legibles.
137
Lic. Elmer Alberto León Zárate
Ilustración 5.1 Esquema de grafos isomorfos
COLORACION DE UN MAPA
Cuatro colores son siempre suficientes para colorear un mapa. El mapa siguiente
muestra que tres colores no bastan: Si se empieza por el país central a y se esfuerza uno en
utilizar el menor número de colores, entonces en la corona alrededor de a alternan dos
colores. Llegando al país h se tiene que introducir un cuarto color. Lo mismo sucede en i si se
emplea el mismo método.
Ilustración 5.2 Esquema de un mapa coloreado
138
CAPITULO V: Teoria de grafos
5.2 REPRESENTACIÓN DE GRAFOS
Una característica especial en los grafos es que podemos representarlos utilizando dos
estructuras de datos distintas. En los algoritmos que se aplican sobre ellos veremos que
adoptarán tiempos distintos dependiendo de la forma de representación elegida. En particular,
los tiempos de ejecución variarán en función del número de vértices y el de aristas, por lo que
la utilización de una representación u otra dependerá en gran medida de si el grafo es denso o
disperso.
Para nombrar los nodos utilizaremos letras mayúsculas, aunque en el código
deberemos hacer corresponder cada nodo con un entero entre 1 y V (número de vértices) de
cara a la manipulación de los mismos.
5.2.1 REPRESENTACIÓN POR MATRIZ DE ADYACENCIA
Es la forma más común de representación y la más directa. Consiste en una tabla de
tamaño V x V, en que la que a[i] [j] tendrá como valor 1 si existe una arista del nodo i al nodo
j. En caso contrario, el valor será 0. Cuando se trata de grafos ponderados en lugar de 1 el
valor que tomará será el peso de la arista. Si el grafo es no dirigido hay que asegurarse de que
se marca con un 1 (o con el peso) tanto la entrada a[i] [j] como la entrada a[j] [i], puesto que
se puede recorrer en ambos sentidos.
int V, A;
int a[maxV][maxV];
void inicializar()
{
int i,x,y,p;
139
Lic. Elmer Alberto León Zárate
char v1,v2;
// Leer V y A
memset(a,0,sizeof(a));
for (i=1; i<=A; i++)
{
scanf("%c %c %d\n",&v1,&v2,&p);
x=v1-'A'; y=v2-'A';
a[x][y]=p; a[y][x]=p;
}
}
En esta implementación se ha supuesto que los vértices se nombran con una letra
mayúscula y no hay errores en la entrada. Evidentemente, cada problema tendrá una forma de
entrada distinta y la inicialización será conveniente adaptarla a cada situación. En todo caso,
esta operación es sencilla si el número de nodos es pequeño. Si, por el contrario, la entrada
fuese muy grande se pueden almacenar los nombres de nodos en un árbol binario de búsqueda
o utilizar una tabla de dispersión, asignando un entero a cada nodo, que será el utilizado en la
matriz de adyacencia.
Como se puede apreciar, la matriz de adyacencia siempre ocupa un espacio de
V*V, es decir, depende solamente del número de nodos y no del de aristas, por lo que será útil
para representar grafos densos.
140
CAPITULO V: Teoria de grafos
5.2.2 REPRESENTACIÓN POR LISTA DE ADYACENCIA
Otra forma de representar un grafo es por medio de listas que definen las aristas que
conectan los nodos. Lo que se hace es definir una lista enlazada para cada nodo, que
contendrá los nodos a los cuales es posible acceder. Es decir, un nodo A tendrá una lista
enlazada asociada en la que aparecerá un elemento con una referencia al nodo B si A y B
tienen una arista que los une. Obviamente, si el grafo es no dirigido, en la lista enlazada de B
aparecerá la correspondiente referencia al nodo A.
Las listas de adyacencia serán estructuras que contendrán un valor entero (el número
que identifica al nodo destino), así como otro entero que indica el coste en el caso de que el
grafo sea ponderado.
Ejemplo 5.1
En este ejemplo se ha utilizado un nodo z ficticio en la cola (ver listas, apartado
cabeceras y centinelas).
struct nodo
{
int v;
int p;
nodo *sig;
};
int V,A; // vértices y aristas del grafo
struct nodo *a[maxV], *z;
141
Lic. Elmer Alberto León Zárate
void inicializar()
{
int i,x,y,peso;
char v1,v2;
struct nodo *t;
z=(struct nodo *)malloc(sizeof(struct nodo));
z->sig=z;
for (i=0; i<V; i++)
a[i]=z;
for (i=0; i<A; i++)
{
scanf("%c %c %d\n",&v1,&v2,&peso);
x=v1-'A'; y=v2-'A';
t= (struct nodo *) malloc (sizeof (struct nodo));
t->v=y; t->p=peso; t->sig=a[x]; a[x]=t;
t=(struct nodo *)malloc(sizeof(struct nodo));
t->v=x; t->p=peso; t->sig=a[y]; a[y]=t;
}
}
En este caso el espacio ocupado es O(V + A), muy distinto del necesario en la matriz
de adyacencia, que era de O(V2). La representación por listas de adyacencia, por tanto, será
más adecuada para grafos dispersos.
142
CAPITULO V: Teoria de grafos
Hay que tener en cuenta un aspecto importante y es que la implementación con listas
enlazadas determina fuertemente el tratamiento del grafo posterior. Como se puede ver en el
código, los nodos se van añadiendo a las listas según se leen las aristas, por lo que nos
encontramos que un mismo grafo con un orden distinto de las aristas en la entrada producirá
listas de adyacencia diferentes y por ello el orden en que los nodos se procesen variará. Una
consecuencia de esto es que si un problema tiene varias soluciones la primera que se
encuentre dependerá de la entrada dada. Podría presentarse el caso de tener varias soluciones
y tener que mostrarlas siguiendo un determinado orden. Ante una situación así podría ser muy
conveniente modificar la forma de meter los nodos en la lista (por ejemplo, hacerlo al final y
no al principio, o incluso insertarlo en una posición adecuada), de manera que el algoritmo
mismo diera las soluciones ya ordenadas.
5.3 EXPLORACIÓN DE GRAFOS
A la hora de explorar un grafo, nos encontramos con dos métodos distintos. Ambos
conducen al mismo destino (la exploración de todos los vértices o hasta que se encuentra uno
determinado), si bien el orden en que éstos son "visitados" decide radicalmente el tiempo de
ejecución de un algoritmo, como se verá posteriormente.
En primer lugar, una forma sencilla de recorrer los vértices es mediante una función
recursiva, lo que se denomina búsqueda en profundidad. La sustitución de la recursión (cuya
base es la estructura de datos pila) por una cola nos proporciona el segundo método de
búsqueda o recorrido, la búsqueda en amplitud o anchura.
143
Lic. Elmer Alberto León Zárate
Ilustración 5.3 Esquema de exploración de grafos
Suponiendo que el orden en que están almacenados los nodos en la estructura de datos
correspondiente es A-B-C-D-E-F... (El orden alfabético), tenemos que el orden que seguiría el
recorrido en profundidad sería el siguiente:
A-B-E-I-F-C-G-J-K-H-D
En un recorrido en anchura el orden sería, por contra:
A-B-C-D-E-G-H-I-J-K-F
Es decir, en el primer caso se exploran primero los verdes y luego los marrones,
pasando primero por los de mayor intensidad de color. En el segundo caso se exploran
primero los verdes, después los rojos, los naranjas y, por último, el rosa.
Es destacable que el nodo D es el último en explorarse en la búsqueda en profundidad
pese a ser adyacente al nodo de origen (el A). Esto es debido a que primero se explora la rama
del nodo C, que también conduce al nodo D.
144
CAPITULO V: Teoria de grafos
En estos ejemplos hay que tener en cuenta que es fundamental el orden en que los
nodos están almacenados en las estructuras de datos. Si, por ejemplo, el nodo D estuviera
antes que el C, en la búsqueda en profundidad se tomaría primero la rama del D (con lo que el
último en visitarse sería el C), y en la búsqueda en anchura se exploraría antes el H que el G.
5.4 RELACION DE EJERCICIOS:
1.- La matriz de adyacencia del grafo G es






1
1
1
1
1
0
1
0
0
1
1
1
0 

1 
1 

1 
Construir su grafo e indicar si es conexo.
2.- Sea A la matriz de adyacencia de un multígrafo G con vértices {v1, v2,..., vn} y sea a23=3
una de las entradas de A. Entonces,
A) Existe un camino con tres vértices entre v2 y v3.
B) Hay tres aristas con extremos los vértices v2 y v3.
C) Hay tres vértices adyacentes con v2 y v3
3.- Dadas las matrices de adyacencia A, B y C de tres grafos



A  


0
1
1
0
0
1
0
0
1
1



 


0
1
1
0
1
1
1
1
1
1
0
1
C
0
1
0 

1 
; B
1 

0 
1 

1 
1 

0 



 


0
1
1
0
1
0
1
0
0
1
0
1
1 

0 
;
1 

0 
A) A y B son isomorfos
B) A y C son isomorfos
C) B y C son isomorfos
145
Lic. Elmer Alberto León Zárate
4.- Teniendo en cuenta la región exterior ¿cuántos colores son necesarios para colorear las
regiones del mapa?
A) Tres
B) Cuatro
C) Cinco
5.- Los grafos de la figura, ¿son isomorfos?
A) No, porque uno es plano y el otro no
B) Sí, pues existe un isomorfismo entre ellos.
C) Sí, porque tienen el mismo número de vértices y aristas.
146
CAPITULO VI
ORDENAMIENTO Y BUSQUEDA DE DATOS
6.1 ORDENAMIENTO DE DATOS
Debido a que las estructuras de datos son utilizadas para almacenar información, para
poder recuperar esa información de manera eficiente es deseable que aquella esté ordenada.
Existen varios métodos para ordenar las diferentes estructuras de datos básicas.
En general los métodos de ordenamiento no son utilizados con frecuencia, en algunos
casos sólo una vez. Hay métodos muy simples de implementar que son útiles en los casos en
dónde el número de elementos a ordenar no es muy grande (Ej., Menos de 500 elementos).
Por otro lado hay métodos sofisticados, más difíciles de implementar pero que son más
eficientes en cuestión de tiempo de ejecución.
Los métodos sencillos por lo general requieren de aproximadamente n x n pasos para
ordenar n elementos.
Los métodos directos son: Inserción, Intercambio y Selección. Los métodos más
complejos o Avanzados son: Shell, Quicksort y Heapsort.
Definición 6.1 El ordenar un grupo de datos significa mover los datos o sus referencias
para que queden en una secuencia tal que represente un orden, el cual puede ser numérico,
alfabético o incluso alfanumérico, ascendente o descendente.
147
Lic. Elmer Alberto León Zárate
Se ha dicho que el ordenamiento puede efectuarse moviendo los registros con las
claves. El mover un registro completo implica un costo, el cual se incrementa conforme sea
mayor el tamaño del registro. Es por ello que es deseable evitar al máximo el movimiento de
los registros. Una alternativa es el crear una tabla de referencias a los registros y mover las
referencias y no los datos.
A continuación se mostrarán los métodos de ordenamiento empezando por el más
sencillo y avanzando hacia los más sofisticados.
La eficiencia de los algoritmos se mide por el número de comparaciones e
intercambios que tienen que hacer, es decir, se toma n como el número de elementos que tiene
el arreglo a ordenar y se dice que un algoritmo realiza O(n2) comparaciones cuando compara
n veces los n elementos, n x n = n2.
ANÁLISIS DE ALGORITMOS NOTACIÓN DE ORDEN
Una función f(n) se define de orden O (g(n)), es decir, f(n) = O (g(n)) si existen
constantes positivas n0 y c tales que:
| f(n) | = c * <= | g(n) | , para toda n > n0
100 n3 => O(n3)
6n2 + 2n + 4 => O(n2)
1024 => O(1)
1+2+3+4+...+n-1+n= n * (n+1)/2 = O(n2)
148
CAPITULO VI: Ordenamiento y búsqueda de datos
6.1.1 METODOS DIRECTOS
A).MÉTODO DE INSERCIÓN
Este es uno de los métodos más sencillos. Consta de tomar uno por uno los elementos
de un arreglo y recorrerlo hacia su posición con respecto a los anteriormente ordenados. Así
empieza con el segundo elemento y lo ordena con respecto al primero. Luego sigue con el
tercero y lo coloca en su posición ordenada con respecto a los dos anteriores, así
sucesivamente hasta recorrer todas las posiciones del arreglo. Este es el algoritmo:
Procedimiento Insertion Sort
Este procedimiento recibe el arreglo de datos a ordenar a [] y altera las posiciones de
sus elementos hasta dejarlos ordenados de menor a mayor. N representa el número de
elementos que contiene a [].
Paso 1: [Para cada pos. del arreglo]
For i <- 2 to N do
Paso 2: [Inicializa v y j]
j <- i.
Paso 3: [Compara v con los anteriores]
While a [j-1] > v AND j>1 do
Paso 4: [Recorre los datos mayores]
Set a[j] <- a [j-1],
Paso 5: [Decrementa j]
set j <- j-1.
Paso 5: [Inserta v en su posición]
Set a[j] <- v.
Paso 6: [Fin]
End.
Ejemplo 6.1
Si el arreglo a ordenar es a = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e'],
149
Lic. Elmer Alberto León Zárate
El algoritmo va a recorrer el arreglo de izquierda a derecha. Primero toma el segundo
dato 's' y lo asigna a v y i toma el valor de la posición actual de v.
Luego compara esta 's' con lo que hay en la posición j-1, es decir, con 'a'. Debido a que
's' no es menor que 'a' no sucede nada y avanza i.
Ahora v toma el valor 'o' y lo compara con 's', como es menor recorre a la 's' a la
posición de la 'o'; decrementa j, la cual ahora tiene la posición en dónde estaba la 's'; Compara
a 'o' con a [j-1], es decir, con 'a'. Como no es menor que la 'a' sale del for y pone la 'o' en la
posición a[j]. El resultado hasta este punto es el arreglo siguiente: a = ['a','o','s','r',....]
Así se continúa y el resultado final es el arreglo ordenado:
a = ['a','a','e','e','g','i','l','m','n','o','p','r','s','t','x']
B).MÉTODO DE INTERCAMBIO
El bubble sort, también conocido como ordenamiento burbuja, funciona de la siguiente
manera: Se recorre el arreglo intercambiando los elementos adyacentes que estén
desordenados. Se recorre el arreglo tantas veces hasta que ya no haya cambios. Prácticamente
lo que hace es tomar el elemento mayor y lo va recorriendo de posición en posición hasta
ponerlo en su lugar.
Procedimiento Bubble Sort
Paso 1: [Inicializa i al final de arreglo]
For i <- N downto 1 do
Paso 2: [Inicia desde la segunda pos.]
For j <- 2 to i do
Paso 4: [Si a [j-1] es mayor que el que le sigue] If a [j-1] < a[j] then
Paso 5: [Los intercambia]
Swap(a, j-1, j).
150
CAPITULO VI: Ordenamiento y búsqueda de datos
Paso 7: [Fin]
End.
Tiempo de ejecución del bubble sort:

para el mejor caso (un paso) O(n)

peor caso n(n-1)/2

promedio O(n2)
C) MÉTODO DE SELECCIÓN
El método de ordenamiento por selección consiste en encontrar el menor de todos los
elementos del arreglo e intercambiarlo con el que está en la primera posición. Luego el
segundo más pequeño, y así sucesivamente hasta ordenar todo el arreglo.
Procedimiento Selection Sort
Paso 1: [Para cada pos. del arreglo]
For i <- 1 to N do
Paso 2: [Inicializa la pos. del menor]
menor <- i
Paso 3: [Recorre todo el arreglo]
For j <- i+1 to N do
Paso 4: [Si a[j] es menor]
If a[j] < a [menor] then
Paso 5: [Reasigna el apuntador al menor]
min = j
Paso 6: [Intercambia los datos de la pos.min y posición i]
Paso 7: [Fin]
End.
Ejemplo 6.2
El arreglo a ordenar es a = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e']. Se empieza por
recorrer el arreglo hasta encontrar el menor elemento. En este caso el menor elemento es la
151
Lic. Elmer Alberto León Zárate
primera 'a'. De manera que no ocurre ningún cambio. Luego se procede a buscar el siguiente
elemento y se encuentra la segunda 'a'. Esta se intercambia con el dato que está en la siguiente
posición,
la
's',
quedando
el
arreglo
así
después
de
dos
recorridos:
a
=
['a','a','o','r','t','i','n','g','e','x','s','m','p','l','e'].
El siguiente elemento, el tercero en orden de menor mayor es la primera 'e', la cual se
intercambia con lo que está en la tercera posición, o sea, la 'o'. Le sigue la segunda 's', la cual
es intercambiada con la 'r'. El arreglo ahora se ve de la siguiente manera: a =
['a','a','e','e','t','i','n','g','o','x','s','m','p','l','r']. De esta manera se va buscando el elemento que
debe ir en la siguiente posición hasta ordenar todo el arreglo.
El número de comparaciones que realiza este algoritmo es:
Para el primer elemento se comparan n-1 datos, en general para el elemento i-ésimo
se hacen n-i comparaciones, por lo tanto, el total de comparaciones es:
La sumatoria para i de 1 a n-1 (n-i) = 1/2 n (n-1).
6.1.2 METODOS AVANZADOS
A).MÉTODO SHELL
Denominado así por su desarrollador Donald Shell (1959), ordena una estructura de
una manera similar a la del Bubble Sort, sin embargo no ordena elementos adyacentes sino
que utiliza una segmentación entre los datos. Esta segmentación puede ser de cualquier
tamaño de acuerdo a una secuencia de valores que empiezan con un valor grande (pero menor
al tamaño total de la estructura) y van disminuyendo hasta llegar al '1'. Una secuencia que se
152
CAPITULO VI: Ordenamiento y búsqueda de datos
ha comprobado ser de las mejores es: ...1093, 364, 121, 40, 13, 4, 1. En contraste, una
secuencia que es mala porque no produce un ordenamiento muy eficiente es ...64, 32, 16, 8, 4,
2, 1.
Su complejidad es de O (n1.2) en el mejor caso y de O (n1.25) en el caso promedio.
void shellsort (int a [], int n)
/* Este procedimiento recibe un arreglo a ordenar a [] y el tamaño del arreglo n.
Utiliza en este caso una serie de t=6 incrementos h= [1,4,13,40,121,364] para el
proceso (asumimos que el arreglo no es muy grande). */
B).MÉTODO QUICKSORT
El método Quicksort divide la estructura en dos y ordena cada mitad recursivamente.
Tiene la ventaja de que utiliza un tiempo proporcional a: n log (n), su desventaja
radica en que se requiere de un espacio extra para el procedimiento.
153
Lic. Elmer Alberto León Zárate
Este tipo de ordenamiento es útil cuando se tiene una estructura ordenada y los
nuevos datos a añadir se almacenan en una estructura temporal para después agregarlos a la
estructura original de manera que vuelva a quedar ordenada.
Procedimiento Quicksort
#include<stdio.h>
void ordenar (int *,int,int);
void main()
{ // Dar valores al array
ordenar(array,0,N-1); // Para llamar a la función
}
void ordenar(int *array, int desde, int hasta)
{
int i,d,aux;
// i realiza la búsqueda de izquierda a derecha
// y j realiza la búsqueda de derecha a izquierda.
if(desde>=hasta)
return;
for(i=desde+1,d=hasta;;)
// Valores iniciales de la búsqueda.
{
for(;i<=hasta && array[i]<=array[desde];i++); // Primera búsqueda
for(;d>=0 && array[d]>=array[desde];d--);
if(i<d) // si no se han cruzado:
{
aux=array[i];
// Intercambiar.
154
// segunda búsqueda
CAPITULO VI: Ordenamiento y búsqueda de datos
array[i]=array[d];
array[d]=aux;
}
else
break;
// si se han cruzado:
// salir del bucle.
}
if(d==desde-1)
d=desde;
// Si la segunda búsqueda se sale del array
// es que el pivote es el elemento
// más pequeño: se cambia con él mismo.
aux=array[d];
// Colocar el pivote
array[d]=array[desde];
// en su posición.
array[desde]=aux;
ordenar(array,desde,d-1); // Ordenar el primer array.
ordenar(array,d+1,hasta); // Ordenar el segundo array.
}
C).MÉTODO HEAPSORT
Este método garantiza que el tiempo de ejecución siempre es de: O(n log n)
El significado de heap en ciencia computacional es el de una cola de prioridades
(priority queue). Tiene las siguientes características:

Un heap es un arreglo de n posiciones ocupado por los elementos de la cola. (Nota:
se utiliza un arreglo que inicia en la posición 1 y no en cero, de tal manera que al
implementarla en C se tienen n+1 posiciones en el arreglo.)
155
Lic. Elmer Alberto León Zárate

Se mapea un árbol binario de tal manera en el arreglo que el nodo en la posición i es
el padre de los nodos en las posiciones (2*i) y (2*i+1).

El valor en un nodo es mayor o igual a los valores de sus hijos. Por consiguiente, el
nodo padre tiene el mayor valor de todo su subárbol.
HeapSort consiste esencialmente en:

convertir el arreglo en un heap

construir un arreglo ordenado de atrás hacia adelante (mayor a menor) repitiendo los
siguientes pasos:

o
sacar el valor máximo en el heap (el de la posición 1)
o
poner ese valor en el arreglo ordenado
o
reconstruir el heap con un elemento menos
Utilizar el mismo arreglo para el heap y el arreglo ordenado.
Procedimiento Heapsort
/* Recibe como parámetros un arreglo a ordenar y un entero que indica el numero de
datos a ordenar */
void heapsort (int a [], int N)
{
int k;
for (k=N/2; k>=1; k--)
downheap (a,N,k);
while (N > 1)
{
156
CAPITULO VI: Ordenamiento y búsqueda de datos
Swap (a, 1, N);
downheap (a,--N, 1);
}
}
/* El procedimiento downheap ordena el árbol de heap para que el nodo padre sea
mayor que sus hijos */
void downheap (int a [], int N, int r)
{
int j, v;
v = a[r];
while (r <= N/2)
{
j = 2*r;
if (j < N && a[j] < a [j+1]);
j++;
if (v >= a[j])
Break;
a[r] = a[j];
r = j;
}
a[r] = v;
}
157
Lic. Elmer Alberto León Zárate
6.2 BUSQUEDA DE DATOS
Definición 6.2 La búsqueda de un elemento dentro de un array es una de las operaciones
más importantes en el procesamiento de la información, y permite la recuperación de datos
previamente almacenados. El tipo de búsqueda se puede clasificar como interna o externa,
según el lugar en el que esté almacenada la información (en memoria o en dispositivos
externos). Todos los algoritmos de búsqueda tienen dos finalidades:
- Determinar si el elemento buscado se encuentra en el conjunto en el que se busca.
- Si el elemento está en el conjunto, hallar la posición en la que se encuentra.
En este apartado nos centramos en la búsqueda interna. Como principales algoritmos
de búsqueda en arrays tenemos la búsqueda secuencial, la binaria y la búsqueda utilizando
tablas de hash.
6.2.1 BÚSQUEDA SECUENCIAL
Consiste en recorrer y examinar cada uno de los elementos del array hasta encontrar el
o los elementos buscados, o hasta que se han mirado todos los elementos del array.
for(i=j=0;i<N;i++)
if(array[i]==elemento)
{
solucion[j]=i;
j++;
}
158
CAPITULO VI: Ordenamiento y búsqueda de datos
Este algoritmo se puede optimizar cuando el array está ordenado, en cuyo caso la
condición de salida cambiaría a:
for(i=j=0;array[i]<=elemento;i++)
O cuando sólo interesa conocer la primera ocurrencia del elemento en el array:
for(i=0;i<N;i++)
if(array[i]==elemento)
break;
En este último caso, cuando sólo interesa la primera posición, se puede utilizar un
centinela, esto es, dar a la posición siguiente al último elemento de array el valor del
elemento, para estar seguro de que se encuentra el elemento, y no tener que comprobar a cada
paso si seguimos buscando dentro de los límites del array:
array[N]=elemento;
for(i=0;;i++)
if(array[i]==elemento)
break;
Si al acabar el bucle, i vale N es que no se encontraba el elemento. El número medio
de comparaciones que hay que hacer antes de encontrar el elemento buscado es de (N+1)/2.
6.2.2 BÚSQUEDA BINARIA O DICOTÓMICA
Para utilizar este algoritmo, el array debe estar ordenado. La búsqueda binaria consiste
en dividir el array por su elemento medio en dos subarrays más pequeños, y comparar el
159
Lic. Elmer Alberto León Zárate
elemento con el del centro. Si coinciden, la búsqueda se termina. Si el elemento es menor,
debe estar (si está) en el primer subarray, y si es mayor está en el segundo.
Ejemplo 6.3
Buscar el elemento 3 en el array {1,2,3,4,5,6,7,8,9} se realizarían los siguientes pasos:
Se toma el elemento central y se divide el array en dos: {1,2,3,4}-5-{6,7,8,9}
Como el elemento buscado (3) es menor que el central (5), debe estar en el primer
subarray: {1,2,3,4}
Se vuelve a dividir el array en dos: {1}-2-{3,4}
Como el elemento buscado es mayor que el central, debe estar en el segundo subarray:
{3,4}
Se vuelve a dividir en dos:
{}-3-{4}
Como el elemento buscado coincide con el central, lo hemos encontrado.
Si al final de la búsqueda todavía no lo hemos encontrado, y el subarray a dividir está
vacío {}, el elemento no se encuentra en el array. La implementación sería:
int desde,hasta,medio,elemento,posicion; // desde y
// Hasta indican los límites del array que se está mirando.
int array[N];
// Dar valor a elemento.
for (desde=0, hasta=N-1; desde<=hasta;)
{
if (desde==hasta) // si el array sólo tiene un elemento:
160
CAPITULO VI: Ordenamiento y búsqueda de datos
{
if (array [desde]==elemento) // si es la solución:
posicion=desde; // darle el valor.
else // si no es el valor:
posicion=-1; // no está en el array.
break; // Salir del bucle.
}
medio= (desde+hasta)/2; // Divide el array en dos.
if (array [medio]==elemento) // Si coincide con el central:
{
posicion=medio; // ese es la solución
break; // y sale del bucle.
}
else if (array[medio]>elemento) // si es menor:
hasta=medio-1; // elige el array izquierda.
else // y si es mayor:
desde=medio+1; // elige el array de la derecha.
}
En general, este método realiza log (2, N+1) comparaciones antes de encontrar el
elemento, o antes de descubrir que no está. Este número es muy inferior que el necesario para
la búsqueda lineal para casos grandes.
Este método también se puede implementar de forma recursiva, siendo la función
recursiva la que divide al array en dos más pequeños.
161
Lic. Elmer Alberto León Zárate
6.2.3
BÚSQUEDA
MEDIANTE
TRANSFORMACIÓN
DE
CLAVES
(HASHING)
Es un método de búsqueda que aumenta la velocidad de búsqueda, pero que no
requiere que los elementos estén ordenados. Consiste en asignar a cada elemento un índice
mediante una transformación del elemento. Esta correspondencia se realiza mediante una
función de conversión, llamada función hash. La correspondencia más sencilla es la identidad,
esto es, al número 0 se le asigna el índice 0, al elemento 1 el índice 1, y así sucesivamente.
Pero si los números a almacenar son demasiado grandes esta función es inservible. Por
ejemplo, se quiere guardar en un array la información de los 1000 usuarios de una empresa, y
se elige el número de DNI como elemento identificativo. Es inviable hacer un array de
100.000.000 elementos, sobre todo porque se desaprovecha demasiado espacio. Por eso, se
realiza una transformación al número de DNI para que nos dé un número menor, por ejemplo
coger las 3 últimas cifras para guardar a los empleados en un array de 1000 elementos. Para
buscar a uno de ellos, bastaría con realizar la transformación a su DNI y ver si está o no en el
array.
La función de hash ideal debería ser biyectiva, esto es, que a cada elemento le
corresponda un índice, y que a cada índice le corresponda un elemento, pero no siempre es
fácil encontrar esa función, e incluso a veces es inútil, ya que puedes no saber el número de
elementos a almacenar. La función de hash depende de cada problema y de cada finalidad, y
se pueden utilizar con números o cadenas, pero las más utilizadas son:
A) Restas sucesivas: esta función se emplea con claves numéricas entre las que existen
huecos de tamaño conocido, obteniéndose direcciones consecutivas. Por ejemplo, si el
162
CAPITULO VI: Ordenamiento y búsqueda de datos
número de expediente de un alumno universitario está formado por el año de entrada en la
universidad, seguido de un número identificativo de tres cifras, y suponiendo que entran un
máximo de 400 alumnos al año, se le asignarían las claves:
1998-000
-->
0
=
1998000-1998000
1998-001
-->
1
=
1998001-1998000
1998-002
-->
2
=
1998002-1998000
1998-399
-->
399
=
1998399-1998000
1999-000
-->
400
=
1999000-1998000+400
yyyy-nnn
-->
N
=
yyyynnn-1998000+ (400*(yyyy-1998))
B) Aritmética modular: el índice de un número es resto de la división de ese número entre
un número N prefijado, preferentemente primo. Los números se guardarán en las direcciones
de memoria de 0 a N-1. Este método tiene el problema de que cuando hay N+1 elementos, al
menos un índice es señalado por dos elementos (teorema del palomar). A este fenómeno se le
llama colisión, y es tratado más adelante. Si el número N es el 13, los números siguientes
quedan transformados en:
13000000
-->
0
12345678
-->
7
13602499
-->
1
71140205
-->
6
73062138
-->
6
C) Mitad del cuadrado: consiste en elevar al cuadrado la clave y coger las cifras centrales.
Este método también presenta problemas de colisión:
163
Lic. Elmer Alberto León Zárate
123*123=15129
-->
51
136*136=18496
-->
84
730*730=532900
-->
29
301*301=90601
-->
06
625*625=390625
-->
06
D) Truncamiento: consiste en ignorar parte del número y utilizar los elementos restantes
como índice. También se produce colisión. Por ejemplo, si un número de 8 cifras se debe
ordenar en un array de 1000 elementos, se pueden coger el primer, el tercer y las últimas
cifras para formar un nuevo número:
13000000
-->
100
12345678
-->
138
13602499
-->
169
71140205
-->
715
73162135
-->
715
E) Plegamiento: consiste en dividir el número en diferentes partes, y operar con ellas
(normalmente con suma o multiplicación). También se produce colisión. Por ejemplo, si
dividimos el número de 8 cifras en 3, 3 y 2 cifras y se suman, dará otro número de tres cifras
(y si no, se cogen las tres últimas cifras):
13000000
-->
130=130+000+00
12345678
-->
657=123+456+78
71140205
-->
118
-->
1118=711+402+05
164
CAPITULO VI: Ordenamiento y búsqueda de datos
13602499
-->
259=136+024+99
25000009
-->
259=250+000+09
TRATAMIENTO DE COLISIONES
Pero ahora se nos presenta el problema de qué hacer con las colisiones, qué pasa
cuando a dos elementos diferentes les corresponde el mismo índice. Pues bien, hay tres
posibles soluciones:
Cuando el índice correspondiente a un elemento ya está ocupado, se le asigna el
primer índice libre a partir de esa posición. Este método es poco eficaz, porque al nuevo
elemento se le asigna un índice que podrá estar ocupado por un elemento posterior a él, y la
búsqueda se ralentiza, ya que no se sabe la posición exacta del elemento.
También se pueden reservar unos cuantos lugares al final del array para alojar a las
colisiones. Este método también tiene un problema: ¿Cuánto espacio se debe reservar?
Además, sigue la lentitud de búsqueda si el elemento a buscar es una colisión.
Lo más efectivo es, en vez de crear un array de número, crear un array de punteros,
donde cada puntero señala el principio de una lista enlazada. Así, cada elemento que llega a
un determinado índice se pone en el último lugar de la lista de ese índice. El tiempo de
búsqueda se reduce considerablemente, y no hace falta poner restricciones al tamaño del
array, ya que se pueden añadir nodos dinámicamente a la lista.
165
Lic. Elmer Alberto León Zárate
6.3 RELACION DE EJERCICIOS:
1.- Insertar los elementos: 67, 46, 88, 93, 81, 26 y 17 en una tabla de dispersión cerrada de
tamaño b=10 y la función de dispersión h (k) = k mod b.si es necesario aplicar la función de
redispersion lineal hi(k)= [h (k)+ i] mod b.
2.-Ordenar el siguiente arreglo aplicando el método Heapsort.
E
X
A
M E
N
D
E
P
R
O
G
R
A
M A C I
O N
3.- En un arreglo V se guardan los apellidos de N alumnos. Aplique el primer método de
intercambio para ordenar en forma ascendente, de tal manera que:
Ap1  Ap2  Ap3  Ap4  ………  Apn.
4. En cierta empresa se maneja tres listas (Vectores P, Q, R) que contienen los datos de los N
artículos que se venden.
a) El vector P contiene los códigos de los artículos.
b) El vector Q contiene los nombres de los artículos
c) El vector Q contiene los precios de los artículos.
Ordene los arreglos en forma descendente utilizando el método de selección.
5. Escriba un algoritmo para que utilizando la búsqueda secuencial e informe todas las
ocurrencias de los datos X en un vector T de 77 elementos.
6. Dado un arreglo NOMBRES que contiene los nombres de N alumnos ordenado
alfabéticamente, escriba un programa que encuentre en el arreglo un nombre dado. Si lo
encuentra debe informar la posición en que la encontró. En caso contrario debe enviar un
mensaje adecuado.
7. Se tienen tres vectores de Z elementos:
 El vector A con los nombres
166
CAPITULO VI: Ordenamiento y búsqueda de datos
 El vector B con los promedios
 El vector C con el número de materias aprobadas.
Escriba un algoritmo que lea un nombre, lo busque y si lo encuentra informe su
promedio y número de materias aprobadas. Si el nombre dado no está en el arreglo, envié un
mensaje adecuado.
a) Considere que los arreglos están ordenados.
b) Considere que los arreglos están desordenados.
167
CAPITULO VII
SOFTWARE DE PROGRAMACION MATLAB
7.1 INTRODUCCIÒN
Definición 7.1 MATLAB es un entorno de computación y desarrollo de aplicaciones
totalmente integrado orientado para llevar a cabo proyectos en donde se encuentre elevados
cálculos matemáticos y su visualización gráfica.
MATLAB integra análisis numérico, cálculo matricial, proceso de señal y
visualización gráfica.
Definición 7.2 MATLAB es la disponibilidad de los paquetes especializados llamados
Toolboxes orientados a ingenieros, científicos y técnicos. Entre los más destacados están:
-
Procesamiento de señal
-
Diseño de Sistemas de control
-
The MATLAB Math Library
-
Identificación de Sistema
-
Matemáticas Simbólicas
-
Optimización
-
Procesamiento de Imagen
-
Diseño de control no lineal
-
The MATLAB compiler
-
Lógica Difusa
-
Estadística
-
Splines
168
CAPITULO VII: Software de programación Matlab
7.2 OPERADORES
7.2.1 OPERADORES LOGICOS
OPERADOR
DESCRIPCION
&
Y
¡
O
~
NO
7.2.2 OPERADORES ARITMETICOS
ESCALAR
MATRIZ
VECTOR
DESCRIPCION
+
+
+
Adición
-
-
-
Sustracción
*
*
.*
Multiplicación
/
/
./
División hacia la derecha
\
\
\.
División hacia la izquierda
^
‘
.’
Transpuesta
7.2.3 OPERADORES RELACIONALES
OPERADOR
DESCRIPCION
<
Menor que
<=
Menor o igual que
>
Mayor que
>=
Mayor o igual que
169
Lic. Elmer Alberto León Zárate
==
Igual
~=
No igual
7.2.4 CARACTERES ESPECIALES
CARACTERES
DESCRIPCION
[]
Para formar matrices y vectores
()
Define precedencia en expresiones aritméticas
,
Separador de elementos de una matriz, argumentos de funciones y
declaraciones.
;
Separador de declaraciones, termina renglones de una matriz
Ejemplo 7.1
Ejemplo 7.2
Ejemplo 7.3
>> 13/3
>> 3/13
>> 4^ 2
ans = 4.3333
ans = 62.3333
ans = 16
Ejemplo 7.4
Ejemplo 7.5
Ejemplo 7.6
>> 2* pi^ 3
>>a = [0 1 2 3 4 5 6 7 8 9 10]
>>t = 0: 2: 20
a = 0 1 2 3 4 5 6 7 8 9 10
t = 0 2 4 6 8 10 12 14
Ejemplo 7.7
Ejemplo 7.8
Ejemplo 7.9
>>b = a + 3
>>t = [1; 3; 5]
>>c = a + b
ans = 62.01255336059
b = 3 4 5 6 7 8 9 10 11 12 13
t=1
c = 3 4 5 6 7 8 9 11 13 15 17
3
19 21 23
5
170
CAPITULO VII: Software de programación Matlab
Ejemplo 7.10
Ejemplo 7.11
Ejemplo 7.12
>>d’
>>f = [4; 6; 9]
>>d.*f
ans=
f=
ans=
4
4
6
18
9
45
1 3 5
7.3 VARIABLES
Definición 7.3 Las variables deben tener un nombre según las siguientes reglas:

no pueden comenzar con un número, pero si pueden tener números en los caracteres
siguientes.

Las mayúsculas y minúsculas se diferencian en los nombres de variables.

Los nombres de variables no pueden contener operadores ni puntos.

No es necesario definir el tipo de variable ó tamaño (si se usa un vector y después se
expande).
7.4 EXPRESIONES
Definición 7.4 Una expresión en MATLAB, puede ser:

una variable ó un número (ejemplo: variable 1,x,3,22.3)

Un comando aplicado (ejemplo: norm (A), sin (2*pi))

Una expresión matemática (ejemplo: 2+3* variab1^4.5)
171
Lic. Elmer Alberto León Zárate
Observación 7.1
Cualquiera de las expresiones anteriores si se escribe en la línea de comandos (>>)
devolverá el nombre de la variable y su valor, si no tiene nombre MATLAB devolverá ans =
resultado.
Observación 7.2
Si la expresión termina en un punto y coma MATLAB no imprime su valor en la
pantalla, pero si realiza al cálculo.
7.5 MATLAB Y EL ALGEBRA LINEAL
Para crear un vector introducimos los valores deseados separados por espacios (o
comas) todo ello entre corchetes []. Si lo que queremos es crear una matriz lo hacemos de
forma análoga pero separando las filas con puntos y comas (;).
Generalmente usaremos letras mayúsculas cuando nombremos a las matrices y
minúsculas para vectores y escalares. Esto no es imprescindible y Matlab no lo exige, pero
resulta útil.
Ejemplo 7.13
>> x = [5 7 -2 4 -6] % es un vector, los elementos los separamos con espacios
x=
5 7 -2 4 -6
Ejemplo 7.14
>> y = [2, 1, 3,7] % es otro vector, los elementos los separamos con comas
172
CAPITULO VII: Software de programación Matlab
y=
2137
Ejemplo 7.15
>> z = [0 1 2,3 4,5] % es otro vector, da igual separar los elementos por comas o
espacios
z=
012345
Ejemplo 7.16
>> A = [1 2 3; 4 5 6] % es una matriz con 2 filas y 3 columnas
A=
123
456
7.5.1 DIRECCIONAMIENTO DE ELEMENTOS DE VECTORES Y
MATRICES
Para acceder a los elementos individuales de un vector lo haremos utilizando
subíndices, así x(n) sería el n-ésimo elemento del vector x. Si queremos acceder al último
podemos indicarlo usando end como subíndice.
Ejemplo 7.17
>> x = [5 7 -2 4 -6];
>> x (2) % segundo elemento del vector x
173
Lic. Elmer Alberto León Zárate
ans =
7
Ejemplo 7.18
>> x (end) % último elemento del vector x
ans =
-6
Para acceder a un bloque de elementos a la vez, se usa la notación de dos puntos (:),
así x (m: n) nos da todos los elementos desde el m-ésimo hasta el n-ésimo del vector x.
Ejemplo 7.19
>> x (2:4) % devuelve desde el segundo al cuarto elemento del vector x
ans =
7 -2 4
Si introducimos un número entre el primero y el segundo también separado por dos
puntos (:) se mostrarán los elementos del primero al último indicado, incrementados según el
número que aparece en el centro (o decrementados si el número es negativo).
Ejemplo 7.20
>> x (1:2:5) % devuelve el primero, tercero y quinto elemento del vector x
ans =
5 -2 -6
174
CAPITULO VII: Software de programación Matlab
Otra forma de obtener un conjunto concreto de elementos del vector es indicando entre
corchetes [] las posiciones de los elementos que queremos obtener poniendo paréntesis fuera
de los corchetes.
Ejemplo 7.21
>> x ([3 5 1]) % devuelve el tercer, quinto y primer elemento del vector x
ans =
-2 -6 5
Para acceder a los elementos de una matriz necesitamos dar dos valores, el primero
indica la fila y el segundo la columna.
Ejemplo 7.22
>> A = [1 2 3; 4 5 6];
>> A (2,1) % elemento de la matriz que está en la fila 2 y en la columna 1
ans =
4
Si queremos que escriba toda una fila usaremos los dos puntos para indicar que
queremos todos los elementos.
Ejemplo 7.23
>> A (2, :) % escribe la segunda fila de la matriz
ans =
456
175
Lic. Elmer Alberto León Zárate
Similarmente si queremos que escriba toda una columna pero ahora situamos los dos
puntos en el lugar de las filas para indicar que queremos todas las filas de esa columna.
Ejemplo 7.24
>> A (:,2) % escribe la segunda columna de la matriz
ans =
2
5
Al igual que con los vectores podemos indicar que escriba una serie de filas o
columnas, la manera de hacerlo sería muy parecido.
Ejemplo 7.25
>> A (2,2:3) % escribe de la segunda fila de la matriz, las columnas de la 2 a la 3
ans =
56
Ejemplo 7.26
>> A (2, [3 1]) % escribe de la segunda fila de la matriz, las columnas 3 y 1
ans =
64
Ejemplo 7.27
>> A ([2 1], 2:3) % escribe de las filas 2 y 1 de la matriz, las columnas de la 2 a la 3
ans =
56
176
CAPITULO VII: Software de programación Matlab
23
Ejemplo 7.28
>> A (end, [1 3]) % escribe de la última fila, las columnas 1 y 3
ans =
46
Matlab tiene además otra forma de identificar cada elemento de una matriz, de modo
que podemos acceder a un elemento de una matriz indicando sólo un valor y no dos, pero
debemos saber que el orden elegido por Matlab es por columnas así los elementos de la matriz
A serían denominados:
Ejemplo 7.29
Como la matriz A que teníamos era
A=
123
456
>>A (5) %accede al elemento 5 de la matriz, es decir, igual que si escribiéramos A
(1,3)
ans =
3
177
Lic. Elmer Alberto León Zárate
Pero es preferible para evitar confusiones trabajar con los elementos de las
matrices indicando la fila y la columna correspondiente.
7.5.2 CONSTRUCCIÓN ABREVIADA DE ALGUNOS VECTORES
A parte de definir un vector introduciendo cada uno de sus elementos, también
podemos crearlo haciendo uso de las siguientes sentencias:
(a: b) crea un vector que comienza en el valor a y acaba en el valor b aumentando de 1 en 1.
(a: c: b) crea un vector q comienza en el valor a y acaba en el valor b aumentando de c en c.
linspace (a,b,c) genera un vector linealmente espaciado entre los valores a y b con c
elementos.
linspace (a,b) genera un vector linealmente espaciado entre los valores a y b con 100
elementos.
logspace (a,b,c) genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b
con c elementos.
logspace (a,b) genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b
con 50 elementos.
Ejemplo 7.30
>> (1:7) % crea un vector que comienza en 1, aumenta de 1 en 1 y acaba en 7
ans =
1234567
Ejemplo 7.31
>> (1:3:10) % crea un vector que comenzando en 1, aumenta de 3 en 3 hasta el 10
178
CAPITULO VII: Software de programación Matlab
ans =
1 4 7 10
Ejemplo 7.32
>> (1:4:10) % comenzando en 1, aumenta de 4 en 4 hasta el 10 y por eso acaba en 9
ans =
159
Ejemplo 7.33
>> (50:-7:1) % crea un vector que comenzando en 50, disminuye de 7 en 7 hasta el 1
ans =
50 43 36 29 22 15 8 1
Ejemplo 7.34
>> linspace (2,6,3) % genera un vector desde el 2 al 6 con 3 elementos equidistantes
ans =
246
Ejemplo 7.35
>> linspace (2,6,4) % genera un vector desde el 2 al 6 con 4 elementos equidistantes
ans =
2.0000 3.3333 4.6667 6.0000
179
Lic. Elmer Alberto León Zárate
Ejemplo 7.36
>> logspace (0,2,4) % genera un vector logarítmicamente espaciado entre 10^0 y 10^2
con 4 elementos
ans =
1.0000 4.6416 21.5443 100.0000
7.5.3 CONSTRUCCIÓN DE ALGUNAS MATRICES
Al igual que pasa con los vectores, existen unas sentencias que nos ayudan a crear más
rápidamente algunas matrices que Matlab ya tiene predefinidas (m y n deben tomar valores
naturales):
zeros (n) crea una matriz cuadrada n x n de ceros.
zeros (m,n) crea una matriz m x n de ceros.
ones (n) crea una matriz cuadrada n x n de unos.
ones (m,n) crea una matriz m x n de unos.
rand (n) crea una matriz cuadrada n x n de números aleatorios con distribución uniforme
(0,1).
rand (m,n) crea una matriz m x n de números aleatorios con distribución uniforme (0,1).
randn (n) crea una matriz n x n de números aleatorios con distribución normal (0,1).
randn (m,n) crea una matriz m x n de números aleatorios con distribución normal (0,1).
eye (n) crea una matriz cuadrada n x n de unos en la diagonal y ceros el resto.
eye (m,n) crea una matriz m x n de unos en la diagonal y ceros el resto.
magic (n) crea una matriz cuadrada n x n de enteros de modo que sumen lo mismo las filas y
las columnas.
180
CAPITULO VII: Software de programación Matlab
hilb (n) crea una matriz cuadrada n x n de Hilbert, es decir, los elementos (i,j) responden a la
expresión (1/(i+j-1)).
invhilb (n) crea una matriz cuadrada n x n que es la inversa de la matriz de Hilbert.
Ejemplo 7.37
>> zeros (3) % matriz cuadrada 3 x 3 de ceros
ans =
000
000
000
Ejemplo 7.38
>> zeros (2,5) % matriz 2 x 5 de ceros
ans =
00000
00000
Ejemplo 7.39
>> ones (2,3) % matriz de unos
ans =
111
111
Ejemplo 7.40
>> rand (2,4) % matriz de valores aleatorios entre 0 y 1 según la uniforme (0,1)
181
Lic. Elmer Alberto León Zárate
ans =
0.9355 0.4103 0.0579 0.8132
0.9169 0.8936 0.3529 0.0099
Ejemplo 7.41
>> randn (2,5) % matriz de valores aleatorios según la normal (0,1)
ans =
0.8156 1.2902 1.1908 -0.0198 -1.6041
0.7119 0.6686 -1.2025 -0.1567 0.2573
Ejemplo 7.42
>> eye (2) % matriz identidad o unidad
ans =
10
01
Ejemplo 7.43
>> magic (4) % matriz mágica 4 x 4
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
182
CAPITULO VII: Software de programación Matlab
Ejemplo 7.44
>> hilb (3) % matriz de Hilbert 3 x 3
ans =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
Ejemplo 7.45
>> invhilb (3) % inversa de la matriz de Hilbert 3 x 3
ans =
9 -36 30
-36 192 -180
30 -180 180
7.5.4 OPERACIONES BÁSICAS CON MATRICES
183
Lic. Elmer Alberto León Zárate
Ejemplo 7.46
Definimos tres matrices para poder hacer operaciones entre ellas.
A=B=C=
1 2 1 1 1.0000 + 1.0000i 2.0000 + 2.0000i
3 4 0 1 3.0000 + 1.0000i 4.0000 + 7.0000i
>> A * B % multiplicación de matrices
ans =
13
37
Ejemplo 7.47
>> A .* B % multiplicación elemento a elemento
ans =
12
04
Ejemplo 7.48
>> C ' % traspuesta conjugada
ans =
1.0000 - 1.0000i 3.0000 - 1.0000i
2.0000 - 2.0000i 4.0000 - 7.0000i
Ejemplo 7.49
>> C .' % traspuesta
184
CAPITULO VII: Software de programación Matlab
ans =
1.0000 + 1.0000i 3.0000 + 1.0000i
2.0000 + 2.0000i 4.0000 + 7.0000i
Ejemplo 7.50
>> A + 2 % si sumamos el número 2 a la matriz se suma ese número a cada elemento
ans =
34
56
7.5.5 FUNCIONES PARA OPERAR CON VECTORES
Ejemplo 7.51
>> x = [1 2 3]; y = [4 5 6];
>> cross (x,y) % producto vectorial
ans =
-3 6 –3
Ejemplo 7.52
>> dot (x,y) % producto escalar
ans = 32
185
Lic. Elmer Alberto León Zárate
7.5.6 FUNCIONES PARA EL ANÁLISIS DE MATRICES
(Con A matriz, v vector y n número natural)
Ejemplo 7.53
>> diag (v) % crea una matriz diagonal a partir del vector v
ans =
100
020
003
Ejemplo 7.54
>> A = [1 2 3 4; 7 8 9 2; 2 4 6 8]
A=
1234
7892
2468
186
CAPITULO VII: Software de programación Matlab
Ejemplo 7.55
>> diag (A) % crea un vector columna a partir de la diagonal de la matriz A
ans =
1
8
6
Ejemplo 7.56
>> size (A) % devuelve las dimensiones de la matriz como un vector fila
ans =
34
Ejemplo 7.57
>> length (A) % devuelve la mayor de las dos dimensiones de la matriz
ans =
4
Ejemplo 7.58
>> trace (A) % traza de la matriz
ans =
15
Ejemplo 7.59
>> rank (A) % rango de la matriz
187
Lic. Elmer Alberto León Zárate
ans =
2
Ejemplo 7.60
>> rref (A) % reducción mediante Gauss
ans =
1.0000 0 -1.0000 -4.6667
0 1.0000 2.0000 4.3333
0000
Ejemplo 7.61
>> l = tril (A), u = triu (A)
l=
1 0 0 0 % convierte en ceros todos los elementos que quedan encima de
7 8 0 0 % la diagonal principal y lo guarda en la variable l
2460
Ejemplo 7.62
u=
1 2 3 4 % convierte en ceros todos los elementos que quedan debajo de
0 8 9 2 % la diagonal principal y lo guarda en la variable u
0068
188
CAPITULO VII: Software de programación Matlab
7.5.7 OTRAS OPERACIONES CON MATRICES
(Con A matriz, m y n naturales)
Ejemplo 7.63
>> A = [pi 0; pi/4 pi/3]
A=
3.1416 0
0.7854 1.0472
Ejemplo 7.64
>> find (A) % devuelve los índices como un vector columna
ans =
1
2
189
Lic. Elmer Alberto León Zárate
4
Ejemplo 7.65
>> reshape (A,1,4)
ans =
3.1416 0.7854 0 1.0472
Ejemplo 7.66
>> rot90 (A) % gira la matriz 90º
ans =
0 1.0472
3.1416 0.7854
Ejemplo 7.67
>> rot90 (A,3) % gira la matriz 270º ( 90º x 3 = 270º )
ans =
0.7854 3.1416
1.0472 0
Ejemplo 7.68
>> funm (A,@sin) % calcula el seno de cada elemento de la matriz
ans =
0.0000 0
-0.3248 0.8660
190
CAPITULO VII: Software de programación Matlab
Ejemplo 7.69
>> expm (A)
ans =
23.1407 0
7.6091 2.8497
COMANDOS AVANZADOS
Definición 7.5 Cada comando en MATLAB es un archivo con extensión .m por lo tanto
es necesario tener las librerías donde se encuentran los comandos que se desean utilizar.
MATLAB no distingue entre mayúsculas y minúsculas en los comandos.
ARCHIVOS CON EXTENSIÓN . M
Todos los comandos pueden utilizarse directamente desde la línea de comandos del
MATLAB (>>).
Un archivo (con extensión .m) debe contener el programa (para modificarlo, revisarlo,
correcto otra vez …)
Para trabajar estos archivos es necesario saber:
-
que es: Es un archivo de texto como cualquier otro donde se encuentra el listado del
programa.
-
Desde Windows: con el NOTEPAD cambiando el tipo de archivo a “todos los
archivos (*,*)” antes de grabarlo.
-
En el Editor de MATLAB.
191
Lic. Elmer Alberto León Zárate
-
El archivo debe quedar grabado en el mismo directorio que MATLAB para poder
correrlo
7.6 COMANDOS DE PROGRAMACIÓN
7.6.1 COMMAND END
Determina hasta cual orden llega el efecto de if, for y while.
7.6.2 COMANDO IF
Verifica si se cumple la condición, si es verdadero ó falso ejecuta la acción
correspondiente.
SINTAXIS:
if (condición), (acción 1) [else, (acción 2)] end;
Donde las ordenes entre [] son opcionales:
(acción 1) = se ejecuta si la condición es verdadera
(acción 2) = se ejecuta si la condición es falsa
(condición) puede ser:
a==b
a<b
a>b
a<=b
a>=b
a~=b
Ejemplo 7.70
% uso de if
n = 0;
192
CAPITULO VII: Software de programación Matlab
if n = = 0,
n
% MATLAB escribe su resultado en pantalla
else,
n=1
end
n = 2;
if n = 0,
n
else,
n=1
end;
SALIDA
n=
0
n=
1
7.6.3 COMANDO WHILE
Mientras la condición es verdadera ejecuta la acción correspondiente.
SINTAXIS
while (condición), (acción) end;
Donde:
(acción) son las ordenes a ejecutar
193
Lic. Elmer Alberto León Zárate
(condición) puede ser igual a la condición del comando if.
Ejemplo 7.71
% uso del comando while
n=0
while n<=2
n
n=n+1;
end;
SALIDA
n=
0
n=
1
n=
2
7.6.4 COMANDO FOR
Utiliza un contador y es útil si se quiere repetir una parte del programa un número
determinado de veces.
SINTAXIS
for (contador), (acción) end;
194
CAPITULO VII: Software de programación Matlab
Donde:
(acción) = son las ordenes a ejecutar hasta que el contador llega a su valor final
(contador) = Es de la forma:
variable = a [ : b] : c
Donde:

variable es el contador

a es el valor inicial del contador

b es el segundo valor del contador (opcional, si de omite b = a +1), determina el
incremento del contador.

c es el valor final del contador.
Ejemplo 7.72
% uso del for
for i = 0.5 : 2.0
i
% MATLAB muestra su valor
end;
SALIDA
i=
0
i=
0.5
i=
1
i=
195
Lic. Elmer Alberto León Zárate
1.5
i=
2
7.6.5 COMANDO DISP
Sirve para escribir texto de salida ó vectores de resultados
SINTAXIS
disp (X);
X puede ser:
- Un vector.
- Una matriz
- Una cadena de texto
Ejemplo 7.73
% uso de disp
a = [1,2,3,4,9,11]; % un vector
disp (a);
a = [1,2,7;6,3,4]; % un matriz
disp (a);
a = ` Texto de Prueba´; % una cadena de texto
disp (a);
disp (`También se puede escribir así´);
SALIDA
1
2 3 4 9 11
1
2 7
196
CAPITULO VII: Software de programación Matlab
6
3 4
Texto de Prueba
También se puede escribir así
7.6.6 COMANDO INPUT
Se utiliza para que el programa pida valores de variables mientras se ejecuta:
SINTAXIS
Variable = input (texto);
Donde:
variable es un nombre valido donde se almacena el valor que se pregunta.
Texto puede ser una variable ó una cadena
Ejemplo 7.74
% uso de input
a = 0;
a = input (`Ingrese el valor de a; ´);
texto = `Cual es el nuevo valor de a: ´;
a
a = input (texto);
a
SALIDA
Ingrese el valor de a: (espera)
a=
197
Lic. Elmer Alberto León Zárate
XXX
% se imprime el valor asignado a.
Cual es el nuevo valor de a? (espera)
a=
YYY
Donde XXX y YYY son valores ingresados por el usuario al momento de correr el programa
Ejemplo 7.75
Hacer un programa en MATLAB para encontrar los números primos menores que 100.
clc,
disp('Estos son los números primos menores de 100')
disp (2)
for i=3:100
n=2;
while n <= sqrt(i)
if rem(i,n)==0
n=i;
else n=n+1;
end
end
if n~=i disp(i)
end
end
Ejemplo 7.76
198
CAPITULO VII: Software de programación Matlab
Hacer un programa en MATLAB para encontrar la suma de los divisores de un
numero entero positivo N ingresado por el usuario.
clc,
N=input('Ingrese un numero entero positivo:');
Suma=0;
for i=1:N
if rem(N,i)==0
Suma=Suma+i;
end
end
disp ('La Suma de los divisores del número es: ')
disp(Suma)
7.7 GRÁFICAS 2-D
La orden plot genera una gráfica. Los argumentos deben ser vectores de la misma
longitud.
Ejemplo 7.77
>> x = [-2 -1 0 1 2 3]; y = [4 1 0 1 4 9];
>> plot (x,y)
199
Lic. Elmer Alberto León Zárate
Figura 7.1 Esquema de grafico con el comando plot
Si queremos cambiar la apariencia de la gráfica basta pinchar en el último botón de la
barra de herramientas y se abrirán unos cuadros en los laterales que nos permitirán ir haciendo
los cambios deseados como darle nombre a los ejes.
Figura 7.2 Esquema de grafico para modificación
La función plot nos permite otras opciones como superponer gráficas sobre los
mismos ejes:
Ejemplo 7.78
>> x = [-2 -1 0 1 2 3]; y = [4 1 0 1 4 9]; z = [6 5 3 7 5 2];
>> plot (x,y,x,z)
200
CAPITULO VII: Software de programación Matlab
Figura 7.3 Esquema de 2 gráficos con el comando plot
Ejemplo 7.79
También podemos usar distintos tipos de líneas para el dibujo de la gráfica:
>> plot (x,y,'*')
Figura 7.4 Esquema de grafico con otro tipo de línea
Además podemos colocar etiquetas o manipular la gráfica:
Etiqueta sobre el eje X de la gráfica actual: >> xlabel('texto')
Etiqueta sobre el eje Y de la gráfica actual: >> ylabel('texto')
Título en la cabecera de la gráfica actual: >> title('texto')
Texto en el lugar especificado por las coordenadas: >> text(x,y, 'texto')
Texto, el lugar lo indicamos después con el ratón: >> gtext('texto')
201
Lic. Elmer Alberto León Zárate
Dibujar una rejilla: >> grid
Fija valores máximo y mínimo de los ejes: >> axis ([xmin xmax ymin ymax])
Fija que la escala en los ejes sea igual: >> axis equal
Fija que la gráfica sea un cuadrado: >> axis square
Desactiva axis equal y axis square: >> axis normal
Abre una ventana de gráfico: >> hold on
Borra lo que hay en la ventana de gráfico: >> hold off
Todas estas órdenes se las podemos dar desde la propia ventana de la gráfica una vez
que hemos abierto las opciones con el botón indicado anteriormente.
Otros comandos relacionados con las gráficas son los siguientes:
Para obtener una información más detallada se recomienda utilizar la ayuda de Matlab:
>> help <orden>
Una ventana gráfica se puede dividir en m particiones horizontales y en n verticales,
de modo que cada subventana tiene sus propios ejes, y para hacer esto vamos a usar subplot
(m,n,p) donde p indica la subdivisión que se convierte en activa.
202
CAPITULO VII: Software de programación Matlab
Ejemplo 7.80
>> x = 1:360; y1 = sind (x); y2 = cosd (x); y3 = exp (x); y4 = exp (-x);
>> subplot (2,2,1), plot (x,y1), title ('seno')
>> subplot (2,2,2), plot (x,y2), title ('coseno')
>> subplot (2,2,3), plot (x,y3), title ('exponencial')
>> subplot (2,2,4), plot (x,y4), title ('-exponencial')
Figura 7.5 Esquema de grafico con varias funciones
Para volver al modo por defecto basta escribir: subplot (1,1,1).
Para dibujar polígonos podemos usar la función plot pero teniendo en cuenta que el
último punto de ambos vectores deben coincidir para que la gráfica quede cerrada. Pero si lo
que queremos es que quede coloreado todo el interior del polígono debemos usar mejor la
función fill, tiene tres argumentos, los dos vectores que forman los puntos y un tercer
argumento para indicar el color.
Ejemplo 7.81
>> x = [-2 0 2 0 -2]; y = [4 8 4 0 4];
>> plot (x,y)
203
Lic. Elmer Alberto León Zárate
Figura 7.6 Esquema de grafico de un rombo
Ejemplo 7.82
>> x = [-2 0 2 0 -2]; y = [4 8 4 0 4];
>> fill (x,y,'r') % dibuja el polígono, 'r' indica el color rojo
Figura 7.7 Esquema de grafico con fondo
7.8 GRAFICOS 3-D
También podemos crear gráficas en 3 dimensiones, se trata de extender la orden de
plot (2-D) a plot3 (3-D) donde el formato será igual pero los datos estarán en tripletes:
Ejemplo 7.83
>> x = -720:720; y = sind (x); z = cosd (x);
>> plot3 (x,y,z)
204
CAPITULO VII: Software de programación Matlab
Figura 7.8 Esquema de grafico en 3-D
Podemos hacer girar la gráfica usando de la barra de herramientas el botón
correspondiente o hacerla más grande o más pequeña. Al igual que ocurría con las gráficas en
dos dimensiones podemos nombrar los ejes o hacer modificaciones entrando en opciones con
el botón.
Si queremos representar un polígono en 3 dimensiones lo haremos con la función fill3
de forma similar a fill pero ahora con 4 argumentos, siendo el cuarto el que indica el color.
Ejemplo 7.84
>> x = [-2 0 2 0 -2];
>> y = [4 8 4 0 4];
>> z = [3 5 10 5 3];
>> fill3 (x,y,z,'b') % dibuja en 3-D, 'b' indica el color azul
Figura 7.9 Esquema de grafico relleno en 3-D
205
Lic. Elmer Alberto León Zárate
Superficie de malla:
La orden [X,Y]=meshgrid(x,y) crea una matriz X cuyas filas son copias del vector x y
una matriz Y cuyas columnas son copias del vector y. Para generar la gráfica de malla se usa
la orden mesh(X,Y,Z), mesh acepta un argumento opcional para controlar los colores.
También puede tomar una matriz simple como argumento: mesh(Z).
Ejemplo 7.85
>> x = -10:0.5:10; y = -10:0.5:10;
>> [X,Y] = meshgrid (x,y); % crea matrices para hacer la malla
>> Z = sin (sqrt (X .^2 + Y .^2)) ./ sqrt (X .^ 2 + Y .^ 2 + 0.1);
>> mesh (X,Y,Z) % dibuja la gráfica
Figura 7.10 Esquema de grafico de superficie de malla
Hubiera dado igual si hubiéramos escrito:
>> [X,Y] = meshgrid (-10:0.5:10);
>> Z = sin (sqrt (X .^2 + Y .^ 2)) ./ sqrt (X .^ 2 + Y .^ 2 + 0.1);
>> mesh (X,Y,Z)
206
CAPITULO VII: Software de programación Matlab
Gráfica de superficie:
Es similar a la gráfica de malla, pero aquí se rellenan los espacios entre líneas. La
orden que usamos es surf con los mismos argumentos que para mesh.
Ejemplo 7.86
>> surf (X,Y,Z)
Figura 7.11 Esquema de grafico de superficie
Las gráficas de contorno en 2-D y 3-D se generan usando respectivamente las
funciones contour y contour3.
Ejemplo 7.87
>> contour (X,Y,Z) % dibuja las líneas de contorno
Figura 7.12 Esquema de contorno en 2-D
207
Lic. Elmer Alberto León Zárate
La función pcolor transforma la altura a un conjunto de colores.
Ejemplo 7.88
>> pcolor (X,Y,Z)
Figura 7.13 Esquema de grafico con pcolor
Manipulación de gráficos:
Fija el ángulo de visión especificando el azimut y la elevación:
>> view(az,el)
Coloca su vista en un vector de coordenada cartesiana (x,y,z) en el espacio 3-D:
>>view([x,y,z])
Almacena en az y el los valores del azimut y de la elevación de la vista actual:
>> [az,el]=view
Añade etiquetas de altura a los gráficos de contorno:
>> clabel(C,h)
Añade una barra de color vertical mostrando las transformaciones:
>> colorbar
208
CAPITULO VII: Software de programación Matlab
Ejemplo 7.89
>> surf (X,Y,Z)
>> view (10,70)
Figura 7.14 Esquema de grafico con superficie
>> colorbar % añade la barra de color a la figura actual
Figura 7.15 Esquema de grafico con superficie y barra
209
Lic. Elmer Alberto León Zárate
Ejemplo 7.90
>> surf (X,Y,Z)
>> view ([10,-12,2])
Figura 7.16 Esquema de grafico de superficie y vista
Ejemplo 7.91
>> surf (X,Y,Z)
>> [az,el] = view
az =
-37.5000
el =30
Ejemplo 7.92
>> [C,h] = contour (X,Y,Z);
>> clabel (C,h)
210
CAPITULO VII: Software de programación Matlab
Figura 7.17 Esquema de grafico de contorno en 2-D
Comprensión de los mapas de color:
La sentencia colormap (M) instala a la matriz M como el mapa de color a utilizar por
la figura actual.
211
Lic. Elmer Alberto León Zárate
Ejemplo 7.93
>> surf (X,Y,Z)
>> colormap (pink)
Figura 7.18 Esquema de grafico de superficie y color en 3-D
7.9 RELACION DE EJERCICIOS:
1. ¿Qué instrucción debemos teclear para obtener?:
» v= (0 2 4 6 8 10)
a.
v=0:2:10
b.
v=linspace(0,10,6)
c.
Todas son correctas
d.
v=[0 2 4 6 8 10]
2. Dado A= [1 2 3;4 5 6 ] ¿Qué devuelve: >>ones(size(A))?.
a.
Error
b.
[1 1 1;1 1 1]
c.
[1 1 1]
212
CAPITULO VII: Software de programación Matlab
d.
[1 0 0;0 1 0]
3. ¿Qué puede devolver: >>rand(2)?.
a.
[0.2190 0.0470]
b.
[0.2190;0.0470]
c.
[3.2190,1.1617;5.4678,3.567]
d.
[3.2190,1.1617; 5.4678,3.567;6.2123,5.125]
4. Dado A= [1 2 3; 4 5 6] ¿Qué devuelve: >>length(A)?.
a.
3
b.
[2 3]
c.
2
d.
[3 2]
5.¿Qué obtenemos al introducir >>N=[ones(2)M;zeros(2)eye(2)]?, siendo M=[2 3;3 2]
6. Dado el vector v= [7 6 5 4 3 2 1] ¿Cómo se obtiene el elemento 4?
a.
v(4)
b.
v[4]
c.
v(3)
d.
v[3]
7. Dado el vector v= [7 6 5 4 3 2 1] ¿Qué devuelve la instrucción >>x=v (1:3)?
a.
x=[3 2 1]
b.
[1 2 3]
c.
[7 6 5 4 3]
d.
x=[7 6 5]
8. Dado el vector v= [7 6 5 4 3 2 1] ¿Qué devuelve la instrucción >>x=v ([3 5 1 7])?
a.
x=[5 3 7 1]
213
Lic. Elmer Alberto León Zárate
b.
Ninguna es correcta
c.
x=[3 1 5 7]
d.
Error
9. Dado el vector v= [7 6 5 4 3 2 1] ¿Qué devuelve la instrucción >>x=v (3:-1:1)?
a.
x=[3 2 1]
b.
x=[]
c.
x=[3 -1 1]
d.
x=[5 6 7]
10. Dado el vector v= [7 6 5 4 3 2 1]. Calcula lo que devuelve la instrucción: >>v (:)
a.
Error
b.
[7 6 5 4 3 2 1]
c.
[7 6 5 4 3 2 1]’
d.
:
11. Dada A= [1 2 3; 4 5 6; 7 8 9]. Calcula lo que devuelve la instrucción: >>A (3 3)=0
a.
A= [0 0 0;0 0 0;0 0 0]
b.
A= [1 2 3;4 5 6;7 8 0]
c.
A=0
d.
A[3 3]=0
12. Dada A= [1 2 3; 4 5 6; 7 8 9]. Calcula lo que devuelve la instrucción: >>E=A (1:2,2:3)
a.
[2 3;5 6]
b.
[1 2;2 3]
c.
(1:2,2:3)
d.
[1:2,2:3]
13. Dada A= [1 2 3; 4 5 6; 7 8 9]. Calcula lo que devuelve la instrucción: >>B=A (3:-1:1,1:3)
214
CAPITULO VII: Software de programación Matlab
a.
[3 2 1;1 2 3]
b.
Error
c.
[7 8 9;4 5 6;1 2 3]
d.
Todas son correctas
14. Dada A= [4:-2:0; 2:3:8; 3:5:14]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
>>A (2,1)=5*A (3,2)-A (1,1)
15. Dada A= [4 2 0; 36 5 8; 3 8 13]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
>>D=A (1:2,2:3)
16. Dada A= [4 2 0; 36 5 8; 3 8 13]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
>>E=A (1:2, :)
17. Dada A= [4 2 0; 36 5 8; 3 8 13]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
>>F=A (:)
18. Dada A= [4 2 0; 36 5 8; 3 8 13]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
>>G=A (1:2)
19. Dada A= [4 2 0; 36 5 8; 3 8 13]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
>>H=A (:,3)
20. Dada A= [4 2 0; 36 5 8; 3 8 13]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
215
Lic. Elmer Alberto León Zárate
>>K=A ([1 3], :)
21. Dada A= [4 2 0; 36 5 8; 3 8 13]. Escribir la matriz que devuelve: (introduce todos los
elementos de la matriz uno por uno y en cada fila separada por espacios)
>>L=A ([1 3], [2 3])
22. Escribir la matriz que devuelve:
>>x=linspace(0,20,5)
23. ¿Cómo representarías en Matlab el polinomio: P(X)=-x4+x2-1?
24. ¿Qué ocurre si intentamos sumar A= [1 2 3; 4 5 6; 7 8 9] y B= [1 2 3]?.
a.
Error
b.
[2 4 6;5 7 9;8 10 12]
c.
[2 3 4;6 7 8;10 11 12]
d.
Ninguna es correcta
25. ¿Qué ocurre si intentamos sumar A= [1 2; 3 4] y B= [5 6; 7 8]?.
a.
[6 8;10 12]
b.
Error
c.
[8 6;12 10]
d.
Ninguna es correcta
26. Calcular la suma de A= [] y B= [3]?.
a.
[]
b.
Error
c.
[3]
d.
[[3]]
27. Calcular A*B, con A= [1; 2; 3] y B= [6]?.
a.
[6;12;18]
216
CAPITULO VII: Software de programación Matlab
b.
Error
c.
[]
d.
[6 12 18]’
28. Dado el vector v= [1 2 3], usando las funciones de álgebra, ¿qué instrucción debemos
ejecutar para obtener la matriz: A= [1 0 0; 1 2 0; 0 0 3]?
29. Dada A= [1 2 3; 4 5 6; 7 8 9], ¿qué instrucción debemos ejecutar para obtener la matriz: [1
0 0; 1 5 0; 0 0 9]?
30. Dada A= [1 2 3; 4 5 6; 7 8 9], ¿qué instrucción debemos ejecutar para obtener la matriz: [1
2 3; 0 5 6; 0 0 9]?
31. Usando las funciones de álgebra lineal, ¿Cómo podemos obtener la matriz: [0 1 0 0 0; 1 0
1 0 0; 0 1 0 1 0; 0 0 1 0 1; 0 0 0 1 0]?
32. Genera una matriz de tamaño 6x6, que esté formada en sus tres primeras filas y columnas
por una matriz de elementos aleatorios, en sus tres siguientes filas y sus tres primeras
columnas por la matriz identidad, en sus tres siguientes columnas y tres primeras filas
compuestas por ceros y en las tres últimas filas y tres últimas columnas por una matriz
diagonal compuesta por los elementos de la diagonal de A.
33. Representar gráficamente en [0,10] la función.
f(x) = e(-x/4) *sin(x)
34. Representar gráficamente en [-10,10] la función.
f(x) = (7*x2-sin(x))/(2*x+3)
35. Escribe una función que devuelva como resultado el mayor de los elementos de un vector.
36. Escribe una función que dada una matriz A de orden nxm, permute los renglones k e i.
Function [B]=permuta(A, k, i).
217
Lic. Elmer Alberto León Zárate
37. Escribe una función que determine el número de entradas igual a cero de una matriz A.
Function [nc]=ceros(A).
38. Escribe una función que represente a un número natural n en base 2, la salida es un vector
v de ceros o unos. Debe usar funciones de Matlab como mod y el comando while.
Function[v]=basedos(n).
39. Escribir un programa en MATLAB que determine si dados 4 números a, b, c, d están en
progresión aritmética
40. Escribir las sentencias de MATLAB necesarias para obtener los cuadrados de los números
pares entre 0 y 50. Crear una tabla con cada entero y su cuadrado.
41. Determinar cuantas veces se ejecutará un bucle for si escribimos:
a. for n = 7:10
b. for j = 7:-1:10
c. for i = 1:10:10
d. for –10:3:-7
42. Determinar el valor de x al final de los siguientes bucles:
a) x= 0;
for x = 1:10
x = x+1;
end
b) x = 0;
for x = 1:10
y = x + x;
end
c) x = 0;
218
CAPITULO VII: Software de programación Matlab
for x1 = 1:10
for x2 = x1:10
if x2 >6
break;
end
x = x + 1;
end
end
43. Examinar los siguientes bucles while y determinar el valor de la variable x al final de
cada uno de ellos. ¿Cuántas veces se ejecuta el bucle?
x = 2;
while x <= 200
x = x^2;
end
219
CAPITULO VIII
LENGUAJE DE PROGRAMACION C++
8.1 INTRODUCCION
El Lenguaje de Programación C++ fue creado por Bjarne Stroustrup en 1985
como una extensión del Lenguaje C, el mismo que es mas consistente y conocido
que otros lenguajes de programación científicos.
Definición 8.1 El Lenguaje de Programación C++ es de propósito general porque
ofrece control de flujo, estructuras sencillas y un buen conjunto de operadores. Se
puede utilizar en varios tipos de aplicación.
Este Lenguaje ha sido creado estrechamente ligado al sistema operativo
UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje
no esta ligado a ningún sistema operativo ni a ninguna máquina concreta.
Sus características principales son:
-
Es un Lenguaje que Incluye a versiones anteriores de Lenguaje C
-
Abstracción de Datos
-
Permite definir nuevos tipos de Datos
-
Permite la programación orientada a objetos
-
Varias funciones pueden compartir el mismo nombre.
-
Permite definir una función como miembro de una estructura.
-
Incluye Operadores para reservar y liberar memoria.
220
CAPITULO VIII: Lenguaje de programación C++
8.2 OPERADORES
Definición 8.2 Son símbolos que se utiliza para manipular datos.
Existen los siguientes tipos de operadores:
8.2.1 OPERADORES DE ASIGNACIÓN
Definición 8.3 Es el símbolo “=” que se utiliza para dar un valor a una variable.
A = 3;
coloca directamente un valor
A = b;
se le da un valor de otra variable
A=b=c=3;
da un valor a varias variables
A=b=c=d;
todos toman el valor de la variable d
8.2.2 OPERADORES ARITMÉTICOS
Definición 8.4 Son símbolos que indican los cálculos que se deben realizar sobre
una o más variables dentro de una expresión.
+ suma
suma = a + b
++ Incrementar un uno
x = x + 1;
- resta
resta = a – b
-- Decremento en uno
x = x - 1;
221
// x = x++; // x +=1;
// x = x - -; // x -=1;
Lic. Elmer Alberto León Zárate
* Multiplicación
i = i * j;
// i * = j;
/ División
x= x / 2;
// x /=2;
% modulo
Resto de la división de enteros.
8.2.3 OPERADORES DE COMPARACIÓN
Definición 8.5 Son símbolos para indicar la relación que hay entre dos o mas
valores.
=
==
!=
igual que, cumple sin son iguales
distinto que, lo contrario de igual
>, <, >=, <= mayor, menor, mayor o igual y menor o igual
8.2.4 OPERADORES LÓGICOS
Definición 8.6 Son símbolos que sirven para unir varias comparaciones
&&
&
and
( alt + 38 )
||
|
or
( alt + 124 )
!
not
8.2.5 PRIORIDAD DE LOS OPERADORES
()
222
CAPITULO VIII: Lenguaje de programación C++
++ -- &
* /%
+-
< <= > >=
== ¡=
&&
||
=
8.3 TIPOS DE DATOS
Definición 8.7 Son los atributos de una parte de los datos que indica al ordenador
(y/o el programador) algo sobre la clase de datos sobre los que se va a procesar.
8.3.1 ENTEROS
Para números enteros con el siguiente rango:
int
-32768 ... 32767
long
-2147483648 ... 2147483647
223
Lic. Elmer Alberto León Zárate
8.3.2 REALES (COMA FLOTANTE)
Para números reales con el siguiente rango:
float
-3.40E+38… -1.17E-37 para negativos
float
1.17E-37 ... 3.40E+38 para positivos
double
-1.79E+308 ... –2.22E-307 para negativos
double
2.22E-307 ... 1.79E+308 para positivos
8.3.3 CARACTER
Para caracteres solos y cadenas de caracteres:
char [cantidad]
8.4 CONSTANTES
Definición 8.8 Son aquellos datos que no pueden cambiar a lo largo de la ejecución
de un programa.
Sintaxis:
Dentro de la Función Principal
1. Declarar la Variable
2. Variable = valor_según_declaración
Dentro de las Librerías de Cabecera
224
CAPITULO VIII: Lenguaje de programación C++
#define nombre _ constante Valor _ constante
Ejemplo 8.1
float pi; pi = 3.14159
Ejemplo 8.2
#define pi 3.14159
8.5 VARIABLES
Definición 8.9
Son aquellos datos que puede cambiar su valor dentro de la
ejecución del programa.
8.5.1 PRIMERA FORMA (DECLARACIÓN GLOBAL): Estas se declaran después
de las librerías y sirven para todo el programa, incluyendo las funciones definidas
por el usuario.
# include < conio.h >
# include < stdio.h >
tipo_dato variables globales;
void main()
{
}
225
Lic. Elmer Alberto León Zárate
8.5.2 SEGUNDA FORMA (DECLARACIÓN LOCAL): Estas se declaran dentro de la
función principal ó las funciones definidas por el usuario en el programa.
# include < conio.h >
# include < stdio.h >
void main()
{
tipo_dato variables locales;
}
8.6 ENTRADA Y SALIDA DE DATOS
Las Librerías que se activa para la entrada y salida de datos son:
-
#include < stdio.h >
-
#include < bcd.h >
8.6.1 ENTRADA
 FUNCIÓN CIN : ( # include < stdio.h > # include < bcd.h > )
Sintaxis:
cin >>apuntador de Variable;
cin >>Variable 1>>Variable 2;
226
CAPITULO VIII: Lenguaje de programación C++
Ejemplo 8.3
cin >> n1 >>n2 >>n3 ;
NOTA: No importa que tipo de datos sea, no se tiene que especificar.
8.6.2 SALIDA
 FUNCIÓN COUT: (# include < stdio.h > - # include< bcd.h >)
Forma:
cout << “mensaje de Salida “;
cout << “mensaje de Salida “<<Variable <<Variable;
cout << “mensaje de Salida \n “<<Variable <<” \n” <<Variable;
Ejemplo 8.4
cout << “los números son “<< a << b <<c;
Para una mejor ubicación del texto en la pantalla colocar el comando:
gotoxy (Coordenadas_x, Coordenada_y); cout...
8.7 INSTRUCCIONES DE CONTROL
Definición 8.10 Las Instrucciones de Control permiten que los programas sean más
estructurados y puedan de esta forma solucionar todo tipo de problemas (Joyanes
Aguilar, 1994).
227
Lic. Elmer Alberto León Zárate
Estas instrucciones pueden ser:
-
Selectivas (if, if...else, switch)
-
Repetitivas (for, while y do...while)
-
De Salto ( break, continue, goto )
8.7.1 SELECTIVAS
Definición 8.11
Se realizan mediante las instrucciones if, if...else, switch y
permiten evaluar una condición o expresión y en función del resultado de la misma
se realizara una acción u otra.
A) IF.-Toma una decisión referente al bloque de sentencias a ejecutar en un
programa, basándose en el resultado (Verdadero o falso) de una Condición.
1ra Sintaxis:
if (Condición _ verdadera)
Sentencias Ejecutables;
2da Sintaxis:
if (Condición)
{
......................
Sentencias Ejecutables;
......................
228
CAPITULO VIII: Lenguaje de programación C++
}
else
{
......................;
Sentencias Ejecutables
......................;}
Observación 8.1
Si la condición a evaluar en el IF necesita más opciones colocar:
&& (and)
|| (or)
Ejemplo 8.5
CONDICION PARA ENCONTRAR NÚMEROS PARES
if (N % 2! = 1)
cout <<” NUMERO PAR”
Ejemplo 8.6
CONDICION PARA LOS NUMEROS NEGATIVOS O NÚMEROS CERO
if ((N < 0) || (N==0))
cout <<” NUMERO NEGATIVO O CERO”
229
Lic. Elmer Alberto León Zárate
Ejemplo 8.7
CONDICION PARA LAS PERSONAS MAYORES DE EDAD Y QUE GANEN
500 SOLES, AUMENTARLE 100 SOLES DE LO CONTRARIO DISMINUIRLE
200.
if ((SUELDO==500) && (EDAD<17))
{
SUELDO=SUELDO + 100;
cout<<” SU NUEVO SUELDO ES: “<< SUELDO;
}
else
{
SUELDO=SUELDO - 200;
cout<<” SU SUELDO SIGUE SIENDO:” << SUELDO;}
B) SWITCH.- Esta sentencia permite ejecutar una de varias acciones, en función del
valor de una expresión.
Sintaxis:
switch (EXPRESION)
{
case 1: Sentencias Ejecutables;
230
CAPITULO VIII: Lenguaje de programación C++
getch(); break;
case 2: Sentencias Ejecutables;
getch(); break;
case 3: Sentencias Ejecutables;
getch(); break;
case 4: Sentencias Ejecutables;
getch(); break;
}
REGLAS PARA EL USO DEL switch:
1) La EXPRESION puede ser una variable o constante
2) No funciona con datos Flotantes (Reales)
3) El valor en cada CASE debe ser Entero o ‘ Carácter ’
4) C++ no soporta varios casos en el mismo lugar paras esto se utiliza :
Case 1:
Case 2:
5) Necesita utilizar la sentencia BREAK al finalizar cada CASE. Break hace que
la ejecución del programa continúe después del SWITCH.
231
Lic. Elmer Alberto León Zárate
6) Si no se coloca SWITCH la ejecución del programa se reanuda en las demás
CASE.
7) El conjunto de sentencias de cada CASE no necesita encerrarse entre llaves.
8.7.2 REPETITIVAS
Definición 8.12 Estas instrucciones hacen que una sección del programa se repita
un cierto número de veces. La repetición continua mientras una condición sea
verdadera, cuando la decisión es falsa el bucle termina y el control pasa a las
sentencias a continuación del bucle, existen tres clases de Bucles for, while y
do...while.
A) FOR.- El bucle FOR, ejecuta una sección de código un número fijo de veces.
Sintaxis:
for (exp1; exp2; exp3)
Sentencia Ejecutables;
for (exp1; exp2; exp3)
for (exp1, exp A; exp2, exp B; exp3, Exp B) {
.......................;
{
Sentencia Ejecutables;
...................;
Sentencia Ejecutables;
.....................;
}
....................;
}
232
CAPITULO VIII: Lenguaje de programación C++
Donde:

exp1
: Es el Valor inicial ( Signo =)

exp2
: Condición(Signo <=, >=, <, >)

exp3
: Es el Operador de incremento o decremento ( i + + , i - - )
Ejemplo 8.8
IMPRIMIR LOS 10 PRIMEROS NÚMEROS.
int i;
for (i = 1; i < = 10; i + +)
cout << “\n” << i;
Ejemplo 8.9
IMPRIMIR LOS 20 PRIMEROS NUMERO EN FORMA DESCENDENTE
int i;
for (i = 20; i >= 1; i - - )
cout << “\n” << i;
B) WHILE.- El bucle while ejecuta un bloque de sentencias ejecutables mientras su
condición sea verdad.
Sintaxis:
233
Lic. Elmer Alberto León Zárate
while (condicion_verdadera)
{
.......................;
Sentencias Ejecutables;
...................... ;
}
Ejemplo 8.10
IMPRIMIR LOS 20 PRIMEROS NUMERO ENTEROS ASCENDENTE
int c=1;
while (c < = 20)
{
cout << “\n” << c;
c + +;
}
Ejemplo 8.11
IMPRIMIR LOS 20 PRIMEROS ENTEROS EN FORMA DESCENDENTE
int c = 20;
while (c > = 1)
234
CAPITULO VIII: Lenguaje de programación C++
{
cout << “\n” << c;
c--;
}
Observación 8.2
¿COMO INGRESAR UNA CADENA, SI VARIABLE SE DECLARA COMO CHAR?
UTILIZAR
getline (VARIABLE, CANTIDAD_DECLARADA);
char nombre [40];
cout << “ingrese su nombre completo:”;
cin.getline(nombre,40);
Observación 8.3
¿COMO CONTROLAR LA CANTIDAD DE DECIMALES DE UNA RESPUESTA?
UTILIZAR
#include < iomanip. h >
setprecision (CANTIDAD_DE_DECIMALES)
float raiz_cuadrada, n;
cout << “ingrese un numero entero:”; cin >> n;
raiz_cuadrada = pow (n, 0.5);
235
Lic. Elmer Alberto León Zárate
cout << “La raíz es:” << setprecision (2) << raiz_cuadrada;
Observación 8.4
¿COMO IMPRIMIR VARIAS REPUESTAS SEPARADOS POR UN ESPACIO DETERMINADO?
UTILIZAR
#include < iomanip. h >
setw (CANTIDAD_DE_ESPACIOS)
cout << a << setw (5) << b << setw (5) << c; // Ancho
cout << a << “\t” << b << “\t” << c;
//tabulador
C) DO... WHILE.- Ejecuta un bloque de sentencias, una o más veces, dependiendo
de la condición que tiene que ser verdadera.
Sintaxis:
do
{
...................... ;
SENTENCIAS EJECUTABLES;
...................... ;
}
236
CAPITULO VIII: Lenguaje de programación C++
while (CONDICIÓN _ VERDADERA);
Ejemplo 8.12
INGRESAR NUMEROS Y TERMINAR CUANDO SE INGRESE UN NUMERO
NEGATIVO DEVOLVIENDO LA SUMA.
SUMA = 0;
cin >> N;
do{
SUMA + = N;
cin >> N;
} while (N > 0);
Ejemplo 8.13
COLOCAR
¿DESEA CONTINUAR S/N? PARA RETORNAR A UN
PROGRAMA
char OP;
do
{
clrscr();
cout <<” INGRESE UN NUMERO:”;
cin >> N;
237
Lic. Elmer Alberto León Zárate
cout <<” DESEA SEGUIR S/N:”;
cin >> OP;
} while (OP == ‘S’);
8.7.3 DE SALTO
Definición 8.13 Estas instrucciones hacen que en un determinado momento de la
ejecución del programa se traslade a otra parte o abandone una instrucción
repetitiva y pueda continuar con el resto del programa, existen tres clases: break,
continue y goto.
A) BREAK.- Hace finalizar la ejecución del Ciclo ó bucle: DO, FOR, SWITCH,
WHILE más interno que lo contenga.
Sintaxis:
break;
BREAK solamente finaliza la ejecución de la sentencia de donde esta incluida.
Ejemplo 8.14
Imprimir los 4 primeros números enteros
n=1;
while(n < 5)
238
CAPITULO VIII: Lenguaje de programación C++
{
cout<< n;
if (n == 4)
break;
else
n++;
}
B) CONTINUE.- Traslada la ejecución del programa a la última línea del Ciclo ó
bucle: DO, FOR, SWITCH, WHILE más interno que lo contenga.
Sintaxis:
continue;
Ejemplo 8.15
Imprimir los números entre 1 y 50 que no sean múltiplos de 5
n=1;
while(n < 50)
{
239
Lic. Elmer Alberto León Zárate
if (n % 5 == 0)
continue;
else
cout<< n;
n++;
}
C) GOTO.- Traslada la ejecución del programa a una línea específica identificada
por una etiqueta.
Sintaxis:
goto etiqueta;
......................
......................
Etiqueta: bloque de SENTENCIAS;
Ejemplo 8.16
Calcular el área de un triangulo
Inicio: { cout<<” Ingrese la base del triangulo:”;
240
CAPITULO VIII: Lenguaje de programación C++
cin >>b;
cout<<”Ingrese la altura del Triangulo:”;
cin >>a;
cout<<”El área del triangulo es: “<< (b*a)/2;
}
if (a>0) goto Inicio;
cout<<”FIN DEL PROGRAMA”;
8.8 FUNCIONES
Definición 8.14 Es una colección independiente de declaraciones y sentencias,
generalmente realiza una tarea específica, En C++ existe una función por naturaleza
y es el programa principal:
void main ( )
{
……………
}
241
Lic. Elmer Alberto León Zárate
Cuando se llama a una función el control pasa a la función para su ejecución,
una vez finalizado el trabajo de la función devuelve el control a la función que lo
llamó.
void main( )
Función1( )
Función2( )
{
{
{
Función1 ( );
Instrucciones;
Instrucción;
Función2 ( );
Instrucciones;
}
}
Instrucción;
}
Observación 8.5
-
Una función no pertenece al programa
-
En el programa sólo se le llama
-
El cuerpo de una función es la parte funcional de un programa.
-
Una función siempre debe estar fuera de la función principal main( ).
PASOS PARA DEFINIR UNA FUNCIÓN:
1. Tener en cuenta las variables globales o locales
242
CAPITULO VIII: Lenguaje de programación C++
2. En C++ se debe declarar una función antes de utilizarla, colocándolo
el
encabezado de la función
int suma (int a, int b);
3. Comenzar con la función
Sintaxis:
TIPO NOMBRE (TIPO VARIABLE DE ENTRADA)
{
DECLARACIONES DE VARIABLES LOCALES;
SENTENCIAS EJECUTABLES;
return [VARIABLE;]
// Variables de Salida
}
Donde:
TIPO
: Indica el tipo de Datos que devolverá la función luego de su uso (no
es necesario, solo en casos que se quiera hacer referencia a la salida).
NOMBRE
: Es el nombre de la función, trata de no tenerlo como variable.
243
Lic. Elmer Alberto León Zárate
TIPO VARIABLE DE ENTRADA
Aquí se colocan las Variables con su respectivo tipo de Datos que entraran a
la función para su posterior uso, reemplazando a la variable verdadera.
Si dentro de la función se hace uso de variables que no pertenecen a la
función MAIN solo se declararan dentro de la función, como una variable local.
FORMAS:
 Función Sin Argumentos
SUMA ( );
int
SUMA ( );
int
SUMA (int A);
int
SUMA ( int A,int B) ;
 Funcion con 1 entrada
 Funcion con 2 entradas
int SUMA ( int A, float C, int B)  Funcion con 3 entradas
VALOR RETORNADO POR UNA FUNCIÓN – SENTENCIA RETURN
Indicara que variable retornara con el valor, solo puede haber un solo retorno
y en algunos casos no se coloca valor de retorno cuando se trata de varios valores.
Sintaxis:
return variable;
244
CAPITULO VIII: Lenguaje de programación C++
Observación 8.6
- Esta variable debe estar declarado dentro de la función o como variable
global.
- En el valor de retorno también se le puede alterar su devolución
return (N)
return (N + 2)
return (N * 2)
LLAMADA A LA FUNCIÓN
Una llamada se realiza para que la función tenga efecto.
Sintaxis:
[Variable =] Nombre_de_la_función (parámetros o argumentos)
Ejemplo 8.17
Suma ( )
cout << suma ( )
Su = suma ( )
245
Lic. Elmer Alberto León Zárate
8.9 LIBRERÍA DE FUNCIONES CREADAS POR EL USUARIO
Definición 8.15 Son un programa fichero que tiene las funciones que serán
compiladas en forma separada y pueda ser utilizado en cualquier programa de C++.
Pasos:
a) Se crean solo funciones dentro de un programa, indicando en la parte
superior los prototipos de las funciones y los ficheros.
b) Luego, una vez terminado la función grabarlo con un nombre y extensión
(.hpp) (por ejemplo: Sumatoria. hpp o
Factorial. hpp)
c) Se pueden colocar varias funciones dentro de este programa( .hpp)
d) No ejecutar un programa hpp, mas bien cerrarlo.
e) Dentro de un programa cpp, llamar a la función que se encuentra dentro
del programa hpp.
Sintaxis:
En la Cabecera del programa CPP:
# include “NombredelFichero.hpp”
8.10 ARREGLOS
Definición 8.16 Los arreglos son estructuras de datos, que permiten el
almacenamiento masivo de información.
246
CAPITULO VIII: Lenguaje de programación C++
Un arreglo esta compuesto por varios componentes, todas del mismo tipo y
almacenados consecutivamente en la memoria de la PC.
Ventajas de usar arreglos:

Almacenamiento de datos en una sola variable

A la vez cada dato es independiente de los demás

Se puede acceder a cada elemento indicando el número de índice.

Se pueden manipular con operaciones de cualquier tipo
Los Arreglos se presentan en dos formas:
8.10.1 VECTORES O ARREGLOS UNIDIMENSIONALES
Definición 8.17 Son listas de datos que pueden almacenar un número determinado
de datos.
NOMBRE
0
1
....
Dato 1
Dato 2
.....
n
Dato N
DEL
……
ARREGLO
Un vector está compuesto:
Nombre del Arreglo
Índice
:
0, 1, 2, 3,... n (Utilizar Estructuras Repetitivas)
247
Lic. Elmer Alberto León Zárate
Datos
:
Son los datos ingresados al arreglo de un mismo
tipo.
Ejemplo 8.18
0
NOTAS
NOMBRES
1
08
ANA
PROMEDIOS 10.5
2
09
10
3
11
4
10
LUISA LIZA
JANET
ELISA
11.50
19.55
0.025
3.45
Para acceder a cada elemento solo se escribirá el nombre de la variable
arreglo y el índice.

Para acceder a Janet 

Para acceder a 3.45

NOMBRES [ 3 ]
PROMEDIOS [ 2 ]
Sintaxis:
TIPO_DE_DATOS NOMBRE_DEL_ARREGLO [TAMAÑO_APROX];
Observación 8.7
Si el tipo de datos del arreglo es de caracteres su declaración será:
char nombre_del_arreglo [tamaño_aprox] [cantidad_de_espacios];
Ejemplo 8.19
 Declarar el ingreso de 5 notas enteras: int notas [ 5 ] ;
248
CAPITULO VIII: Lenguaje de programación C++
Ejemplo 8.20
 Declarar el ingreso de 5 nombres de personas : char nombres [5] [20];
8.10.2 MATRICES O ARREGLOS BIDIMENSIONALES
Definición 8.18 Son Arreglos que tienen 2 dimensiones.
1
2
3
4
1
10
8
13
11
2
10
8
13
11
3
10
8
13
11
4
10
8
13
11
Una Matriz está compuesta:
Nombre del Arreglo
Índice filas
: 0, 1, 2, 3,... n (utilizar estructuras repetitivas)
Índice Columnas
: 0, 1, 2, 3,... n (utilizar estructuras repetitivas)
Datos
: Son los datos ingresados al arreglo de un mismo
tipo.
249
Lic. Elmer Alberto León Zárate
Ejemplo 8.21
Nombre del Arreglo: NÚMERO
1
2
3
4
1
A
E
I
M
2
B
F
J
N
3
C
G
K
O
4
D
H
L
P
Para acceder a cada elemento solo se escribirá el nombre de la variable
arreglo y los índices.

Para acceder a la Letra A
(NÚMERO [ 1 ][ 1 ])

Para acceder a la Letra L
(NÚMERO [ 4 ][ 3 ])
Sintaxis:
TIPO_DATOS NOM_ARREGLO [TAMAÑO_FILAS] [TAMAÑO_COLUMNAS];
Observación 8.8
Al hacer referencia de cada elemento de un arreglo Bidimensional se coloca
el nombre del arreglo luego la fila y la columna.
Ejemplo 8.22
Ingresar un arreglo Bidimensional de 3 x 3 y determinar la suma de todos sus
Elementos.
250
CAPITULO VIII: Lenguaje de programación C++
for( I = 1 ; I < = 3 ; I + + )
for( j = 1 ;j < = 3 ; j + + )
cin>> números [I] [j];
for( I = 1 ; I < = 3 ; I + + )
for( j = 1 ;j < = 3 ; j + + )
suma=suma+números[ I ] [ j ] ;
cout<<”la suma es “<< suma;
8.10.3 RELACION DE EJERCICIOS RESUELTOS
1. En una Función recursiva determinar si un número es primo o no, y termine con el
ingreso de un número negativo.
#include<conio.h>
#include<stdio.h>
void main()
{
int n,i,p=0;
clrscr();
printf ("ingrese un numero entero :");
scanf ("%d",&n);
i=1;
while(i<=n)
{
if (n%i==0)
251
Lic. Elmer Alberto León Zárate
{ p=p+1;
i=i+1;}
else
i=i+1;
}
if(p==2) printf("El numero es primo");
else printf("El numero NO es primo");
getch();
}
2. Realizar el Mínimo Común múltiplo de 2 números ingresados, utilizando Función
recursiva.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
int mcd(int w,int z);
int mcm(int x,int y,int k);
void main()
{clrscr();int a,b,x;
cout<<"INGRESE DOS NÚMEROS: "; cin>>a>>b;
x=mcd(a,b);
mcm(a,b,x);
getch();
return 0;
}
252
CAPITULO VIII: Lenguaje de programación C++
int mcd(int w,int z)
{
while(w!=z)
{
if(w>z)
w=w-z;
else
z=z-w;
}
}
int mcm(int x,int y,int k)
{
int m;
m=x*y/k;
cout<<"El MINIMO COMUN MULTIPLO es: "<<m;
}
3. Realizar el Máximo Común Divisor de 2 números ingresados, utilizando
Recursividad.
#include<conio.h>
#include<bcd.h>
#include<stdio.h>
int n1,n2,m2,m1,mayor,menor,r;
void main()
{
clrscr();
253
Lic. Elmer Alberto León Zárate
cout<<"Ingrese 2 números para sacar el máximo común divisor:";
cin>>n1, n2;
if(n1>n2)
{
mayor=n1;
menor=n2;
}
else
{
mayor=n2;
menor=n1;
}
while(mayor%menor!=0)
{
r=mayor%menor;
mayor=menor;
menor=r;
}
cout<<menor;
getch();
}
4. Función recursiva para listar los 100 primeros números primos.
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
int divisor();
int primos();
254
CAPITULO VIII: Lenguaje de programación C++
int i=2,c=0,n=1,s=0;
void main()
{
clrscr();
cout<<"los 100 números primos son:\n";
cout<<"1"<<"\t"<<"2"<<"\t"<<"3"<<"\t"<<"5"<<"\t" <<"7";
primos();
getch();
}
int primos()
{
if(i>450)
return 0;
else
{
if((i%2!=0)&&(i%3!=0)&&(i%5!=0)&&(i%7!=0))
cout<<i<<"\t";
i+=1;
}
primos();
}
5. Función recursiva para listar los 30 primeros números primos.
#include<bcd.h>
#include<stdio.h>
#include<conio.h>
int primos();
int i=2;
255
Lic. Elmer Alberto León Zárate
void main()
{
clrscr();
cout<<"los
30
primeros
números
primos
son:\t";
cout<<1<<"\t"<<2<<"\t"<<3<<"\t"<<5<<"\t"<<7;
primos();
getch();
}
int primos()
{
if (i>110)
return 0;
else
if((i%2!=0)&&(i%3!=0)&&(i%7!=0)&&(i%5!=0))
cout<<"\t"<<i;
i+=1;
primos();
}
6.-Construir una función que reciba un numero entero de 4 cifras y determine el
digito mayor así como el digito menor contenido en dicho numero.
Ejemplo: 1520
Digito mayor: 5
Digito menor 0
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
compara1(int a);
256
CAPITULO VIII: Lenguaje de programación C++
compara2(int a);
int mayor=0,menor=9999;
void main()
{
int h,n,i,b,a,d;
clrscr ( );
cout<<"ingrese un numero entero de 4 cifras:";
cin>>n;
i=1; d=1000;
while(i<5)
{
a=n/d;
b=n%d;
d=d/10;
n=b;
i++;
// cout<<"\n"<<a;
compara1(a);
compara2(a);
}
cout<<"\n\n el mayor es :"<<mayor;
cout<<"\n\n el menor es :"<<menor;
getch();
}
compara1(int a)
257
Lic. Elmer Alberto León Zárate
{
// Si el numero fuera 1520
if (a>mayor)
mayor=a;
// 1 > 0
// mayor=1
else
mayor=mayor;
return mayor;
}
compara2 (int a)
{
// Si el numero fuera 1520
if (a<menor)
menor=a;
// 1 < 0
// menor=1
else
menor=menor;
return menor;
}
8.11 ESTRUCTURAS EN C++
Definición 8.19 Una estructura se puede definir como una colección de Datos de diferentes
tipos de datos, lógicamente relacionados.
Definición 8.20 Una estructura se utiliza cuando de un objeto se va a nombrar varias
características ó atributos.
CREACIÓN DE UNA ESTRUCTURA

Crear una estructura es definir un nuevo tipo de datos, denominado TIPO
ESTRUCTURA
258
CAPITULO VIII: Lenguaje de programación C++

Aquí se especifican los elementos que la componen, así como los tipos de datos, cada
elemento de la estructura recibe el nombre de miembro (campo de registro).

Una vez declarado la Estructura se tiene que DEFINIR una variable que sea del tipo
de Estructura que se declaro.

Para hacer REFERENCIA dentro del programa a una variable de tipo Estructura se
separan por un punto por cada campo utilizado.
Sintaxis:
struct Nombre_estructura
{
tipo1 campo_1;
tipo2 campo_2;
.........................
tipo campo_n;
};
1RA FORMA:
Nombre_estructura variables_de_tipo_estructura;
2DA FORMA:
struct Nombre_estructura
{
// Declaraciones de los miembros
} Variables_de_tipo_estructura;
259
Lic. Elmer Alberto León Zárate
REFERENCIA:
Variable_Tipo_Structura. Campo_i;
Ejemplo 8.23
Declarar la estructura Datos con los siguientes campos: Nombre, Paterno, Materno, edad y
Sueldo de un alumno.
struct DATOS
{
char nombre [20], paterno [20], materno [20];
int edad;
float sueldo;
} ALUMNO;
// También puede ser DATOS ALUMNO;
// PARA EL ALMACENAMIENTO DE DATOS EN ESTA ESTRUCTURA
cin >> alumno.nombre;
// gets (ALUMNO. NOMBRE)
cin >> alumno.edad;
// PARA LA SALIDA DE DATOS EN ESTRUCTURA:
cout << alumno.nombre;
// SE PUEDEN REALIZAR OPERACIONES CON LOS DATOS DE ESTRUCTURA
if (alumno.sueldo == 500)
if (alumno.edad > 18)
cout << alumno.edad + 1;
260
CAPITULO VIII: Lenguaje de programación C++
Ejemplo 8.24
Programa que ingrese los siguientes datos para 3 alumnos: NOMBRES, EDAD Y
SUELDO, sin arreglos.
void main()
{
struct datos
{
char nombres [20];
int edad;
float sueldo;
} a1,a2,a3,a4,a5;
cout<<”ingrese nombre del primer alumno: “; gets (a1.nombres);
cout<<”Ingrese edad:”; cin>> a1.edad;
cout<<”Ingrese Sueldo:”; cin>> a1.sueldo;
cout<<”ingrese nombre del Segundo alumno: “; gets (a2.nombres);
cout<<”Ingrese edad:”; cin>> a2.edad;
cout<<”Ingrese Sueldo:”; cin>> a2.sueldo;
cout<<”ingrese nombre del Tercer alumno: “; gets (a3.nombres);
cout<<”Ingrese edad:”; cin>> a3.edad;
cout<<”Ingrese Sueldo:”; cin>> a3.sueldo;
getch();
}
261
Lic. Elmer Alberto León Zárate
8.11.1 ARREGLOS DE ESTRUCTURAS
En este tipo de Arreglos se caracterizan por tener un solo índice (arreglo
Unidimensional) sin embargo en cada elemento.
Todos los elementos del arreglo tienen la misma estructura.
índice

Nombre
Promedio
Edad
0
Acosta Ferrer
15
23
1
Calle de La Cruz
14
25
2
Soto Hernández
10
20
.
................ ............
.............
...........
El acceso a cada elemento del Arreglo
Variable_Tipo_Estructura [índice]. Campo
Ejemplo 8.25
Declarar el ingreso de 50 alumnos con los siguientes campos: PATERNO, MATERNO,
NOMBRE, CARRERA PROFESIONAL, CICLO, TURNO y simular el llenado.
// Declaración
struct item
{
char paterno [20], materno [20], nombres [20], carrera [30], turno [10];
int ciclo;
} alumno [50];
// Llenado de datos
262
CAPITULO VIII: Lenguaje de programación C++
for ( i=1; i<=50 ; i++)
{
gets (alumno [ i ] . paterno) ;
gets (alumno [ i ] . materno) ;
gets (alumno [ i ] . carrera) ;
cin >> alumno [i] . ciclo ;
gets (alumno [ i ] . turno) ;
}
Observación 8.9
Si existen campos que tienen que subdividirse dentro de la declaración de una
estructura se tiene que declarar una nueva estructura dentro de la estructura y se seguirán
llamando por medio de puntos.
Ejemplo 8.26
Fecha de Nacimiento  Día, mes, año
 Paterno, Materno, Nombres
Apellidos
 Edad y promedio
struct datos
{
struct a
{
char nombre[20],paterno[20],materno[20];
} apellidos;
struct f
{
int dia,mes,año;
263
Lic. Elmer Alberto León Zárate
} fecha;
int edad;
float promedio;
} alumno[20];
8.12 ARCHIVOS EN C++
Definición 8.21 Los Archivos o Ficheros es una colección de información que almacena y
recupera información para poder manipularla en cualquier momento, a esto se le llama
Funciones de Entrada/Salida (Input / Output)
Antes de conectar un archivo con el programa y realizar operaciones de Entrada y
Salida activar la librería < fstream.h > el cual define las siguientes clases:
CLASE IFSTREAM
Permite el manejo de archivos cuyo acceso sea solamente de Entrada (Lectura)
( I NPUT F ILE STREAM ).
Esta clase dispone de los siguientes métodos o funciones más utilizados:
-
open ( NOMBRE )
-
close( )
-
get ( CARACTER )
-
eof( )
 Abre el Archivo
 Cierra el Archivo
 Obtiene el carácter o byte
 Determina si se alcanzo el final del archivo
CLASE OFSTREAM
Permite el manejo de archivos solamente de grabación o salida Escritura
(O UTPUT F ILE STREAM ).
Esta clase dispone de los siguientes métodos o funciones más utilizados:
264
CAPITULO VIII: Lenguaje de programación C++
-
open ( NOMBRE)
-
close( )
-
put (CARACTER)
-
eof( )
 Abre el archivo
 Cierra el archivo
 Graba un caracter o byte
 determina si se alcanzo el fin del archivo
CLASE FSTREAM
Permite el manejo de archivos cuyo acceso sea de entrada, de salida, o de entrada y
salida a la vez (File Stream).
-
open ( “NOMBRE del Archivo” , Modo De Acceso)
Modo de Acceso

ios : : in
Permite solo Entrada

ios : : out
Permite solo Salida

ios : : app
Permite Añadir al Final del Registro

ios : : binary
Permite abrir archivos binarios

Para la combinación de ambos ios : : in |ios : : out
-
close( )
-
eof ( )
8.12.1 OPERACIONES DE ARCHIVOS DE TEXTO
Las operaciones requeridas para manipular un archivo son:

Abrir un archivo

Leer y Escribir datos en un archivo
265
Lic. Elmer Alberto León Zárate

Detectar EOF (Final del Archivo)

Cerrar un archivo
A) APERTURA DEL ARCHIVO
Un archivo se puede abrir para:
-
Modo solo lectura (entrada)
-
Modo salida ( Escritura )
-
Modo Lectura/Escritura (entrada/salida )
La apertura de un archivo de salida se puede hacer por dos métodos diferentes:

Definir la librería fstream.h

Llamara a la función open ( ), para la apertura del archivo.
Sintaxis:
fstream NOMBRE_ARCHIVO;
NOMBRE_ARCHIVO.open (“Nombre.dat”, ios : : in);
fstream NOMBRE_ARCHIVO ( “NOMBRE.DAT” , ios : : in );
Ejemplo 8.27
// DECLARACION
fstream ARCHIVO1;
ARCHIVO1.open (“DATOS.DAT”, ios:: in);
// DECLARACION
fstream ARCHIVO1 (“DATOS.DAT”, ios:: in);
266
CAPITULO VIII: Lenguaje de programación C++
B) CERRAR UN ARCHIVO
Al cerrar un archivo no elimina su contenido solo lo desconecta del archivo. Una
llamada OPEN lo puede cancelar nuevamente.
Normalmente va al final de cada programa.
Sintaxis
Nombre_Archivo.close ( );
Ejemplo 8.28
Archivo1.close( );
8.12.2 ARCHIVOS BINARIOS
CARACTERÍSTICAS
 Ocupa menos espacio que los archivos de textos.
 No contienen caracteres de espacio en blanco.
 Los datos no están organizados en líneas más bien en forma de Registros de una Base
de Datos.
 El formato Binario es más preciso para números.
CLASE FSTREAM
La entrada es de Lectura y Escritura normalmente para binarios.
8.12.3 OPERACIONES DE ARCHIVOS BINARIOS
A) ABRIR EL ARCHIVO
267
Lic. Elmer Alberto León Zárate
fstream ARCHIVO1;
ARCHIVO1.open (“DATOS.DAT” , ios : : binary) ;
ifstream ARCHIVO1 (“DATOS.DAT”, ios : : binary) ; // Lectura de Binario
ofstream ARCHIVO1 (“DATOS.DAT”, ios : : binary) ; // Escritura de Binario
B) CERRAR EL ARCHIVO
close() ;
C) ESCRITURA DE CARACTERES DE FLUJO
ARCHIVO1.put ((char), CONTADOR_BYTES ++ );
// AQUÍ SE PIDE EL INGRESO DE LOS DATOS
ARCHIVO1.write((char*)&Estructura, TAMAÑO_ESTRUCTURA_BYTE);
D) LECTURA DE CARACTERES DE FLUJO
ARCHIVO1.get ((char), CONTADOR_BYTES ++ ) ;
ARCHIVO1.read((char*)&Estructura, TAMAÑO_ESTRUCTURA_BYTES);
// AQUÍ SE IMPRIMEN LOS DATOS
// AQUÍ SE COMPARAN DATOS PARA SU BUSQUEDA, SOLO NUMEROS
Observación 8.10
El Tamaño de la Estructura en Bytes para la lectura no es conocido utilizar el comando:
sizeof(Estructura);
Ejemplo 8.29
sizeof(persona);
sizeof(empleado);
268
CAPITULO VIII: Lenguaje de programación C++
8.12.4 RELACION DE EJERCICIOS RESUELTOS
1.- Programa para la creación de un archivo de texto
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
#include<fstream.h>
void main()
{
clrscr();
char nombres[20],paterno[20],materno[20];
fstream x;
x.open("demo.txt",ios::out);
cout<<"ingrese su nombre completo : ";gets(nombres);
cout<<"ingrese su apellido paterno:”;gets(paterno);
cout<<"ingrese su apellido materno: ";gets(materno);
x << nombres <<"\n";
x << paterno <<"\n";
x << materno <<"\n";
x.close();
}
2.- Programa para la lectura de un archivo de texto. Solo permite que se lean los datos mas no
manipularlo.
#include<conio.h>
269
Lic. Elmer Alberto León Zárate
#include<stdio.h>
#include<bcd.h>
#include<fstream.h>
void main()
{
clrscr();
char c; //aquí se almacena letra por letra los datos del archivo
fstream x;
x.open("demo.txt",ios::in);
while(x.get(c))
cout<<c;
getch();
x.close(); }
3.- Programa para agregar mas datos a un archivo de texto ya guardado
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
#include<fstream.h>
void main()
{
clrscr();
char nombres[20],paterno[20],materno[20];
fstream x;
x.open("demo.txt",ios::app);
270
CAPITULO VIII: Lenguaje de programación C++
cout<<"ingrese su nombre completo : ";gets(nombres);
cout<<"ingrese su apellido paterno:gets(paterno);
cout<<"ingrese su apellido materno: ";gets(materno);
x << nombres <<"\n";
x << paterno <<"\n";
x << materno <<"\n";
x.close();
}
4.- Programa para la creación de un archivo de texto
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<fstream.h>
void main()
{
clrscr();
ofstream archsal("copia.dat",ios::out);
if (!archsal) { cerr<<"Nose puede abrir el archivo";
exit(-1); }
char car;
while(cin.get(car))
archsal.put(car);
clrscr();
}
271
Lic. Elmer Alberto León Zárate
5.- Programa para la lectura de un archivo de texto
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>
void main()
{
fstream archen("copia.dat",ios::in);
if (!archen) { cerr<<"No se puede abrir el archivo";
exit(-1); }
char car;
while(archen.get(car))
cout.put(car);
getch();
return(0);
}
6.- Programa para agregar más datos a un archivo de texto ya creado
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
#include<fstream.h>
void main()
{
clrscr();
272
CAPITULO VIII: Lenguaje de programación C++
//char a [40], b [40];
struct a
{
char paterno[20],materno[20],nombres[20];
} persona[20];
int n,i;
fstream x;
x.open("demo.txt",ios::app);
cout<<"Cuantos datos desea ingresar y grabarlo en el archivo: ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"ingrese su nombre completo: ";gets(persona[i].nombres);
cout<<"ingrese su apellido paterno: ";gets(persona[i].paterno);
cout<<"ingrese su apellido materno: ";gets(persona[i].materno);
x<<persona[i].nombres<<"\n";
x<<persona[i].paterno<<"\n";
x<<persona[i].materno<<"\n";
}
x.close();
}
7.- Programa para la creación de un archivo de texto
#include<stdlib.h>
#include<fstream.h>
#include<stdio.h>
273
Lic. Elmer Alberto León Zárate
#include<bcd.h>
#include<conio.h>
void main()
{
clrscr();
filebuf archivo1;
if (archivo1.open("abc.txt",ios::out)==NULL)
{
cout<<"Error no se puede abrir el Fichero ";
exit(1);
}
ofstream escribir(&archivo1);
char linea[81];
cout<<"introducir datos y Finalizar con Ctrl+Z\n";
char *fin=gets(linea);
while(fin!=NULL)
{
escribir<<linea<<"\r\n";
fin=gets(linea);
}
archivo1.close();
}
8.- Programa para la lectura de un archivo de texto
#include<conio.h>
#include<bcd.h>
274
CAPITULO VIII: Lenguaje de programación C++
#include<fstream.h>
#include<stdlib.h>
void main()
{
clrscr();
char c;
fstream x("demo.dat",ios::in);
while(x.get(c))
cout<<c;
getch();
x.close();
}
9.- Programa para la creación de un archivo de texto
#include<conio.h>
#include<fstream.h>
#include<bcd.h>
void main()
{
fstream archivo("copia.dat",ios::out);
char car;
while(cin.get(car))
archivo.put(car);}
10.- Escribe datos dentro de un archivo binario utilizando las funciones put y write para 5
registros empleado.
#include<conio.h>
#include<stdio.h>
275
Lic. Elmer Alberto León Zárate
#include<bcd.h>
#include<fstream.h>
void main()
{
struct datos
{
char nombre[30];
int edad;
float salario;
} empleado;
ofstream empresa("registros.dat",ios::binary);
if (!empresa)
{
clrscr();
cout<<"No se puede abrir archivo Registros.dat";
return;
}
clrscr();
int numero=0;
while (numero<5 && empresa )
{
empresa.put((char)numero++);
cout<<"Ingrese nombre :";
cin>>empleado.nombre;
cout<<"Ingrese edad :";
cin>>empleado.edad;
cout<<"Ingrese Salario :";
cin>>empleado.salario;
empresa.write((char*)&empleado,sizeof(empleado));
}
getch();
empresa.close();}
11.- Lectura de Datos Binarios del Ejercicio 10
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
276
CAPITULO VIII: Lenguaje de programación C++
#include<fstream.h>
void main()
{
struct datos
{
char nombre[30];
int edad;
float salario;
} empleado;
ifstream empresa("registros.dat",ios::binary);
if (!empresa)
{
clrscr();
cout<<"No se puede abrir archivo Registros.dat";
return;
}
clrscr();
int numero=0;
while (!empresa.eof() && numero<5)
{
empresa.get((char)numero++);
empresa.read((char*)&empleado,sizeof(empleado));
cout<<empleado.nombre<<"\t";
cout<<empleado.edad<<"\t";
cout<<empleado.salario<<"\n";
}
getch();
empresa.close();
}
12.-Busqueda secuencial de un dato del archivo binario
while (!empresa.eof() && numero<5)
{
empresa.get((char)numero++);
277
Lic. Elmer Alberto León Zárate
empresa.read((char*)&empleado,sizeof(empleado));
if ( empleado.edad == edad )
{
cout<<empleado.nombre<<"\t";
cout<<empleado.edad<<"\t";
cout<<empleado.salario<<"\n";
}
}
8.13 CADENA DE CARACTERES EN C++
Definición 8.22 Una cadena de caracteres es un Arreglo Unidimensional, en el cual todos
los elementos contenidos en el son de tipo carácter.
8.13.1 LEER UNA CADENA DE CARACTERES
FUNCIÓN cin>>
FUNCIÓN gets: Lee caracteres y lo almacena en una variable especificada, a diferencia de la
función cin, la función gets permite la entrada de una cadena de caracteres formada por
palabras separadas por espacios en blanco sin ningún tipo de formato.
El cin actúa como separador de variable al dejar espacio solo para caracteres.
Sintaxis:
gets (CADENA);
278
CAPITULO VIII: Lenguaje de programación C++
8.13.2 ESCRBIR UNA CADENA DE CARACTERES
FUNCION cout<<
FUNCION puts: Escribe una cadena de caracteres en la salida estándar y reemplazar
el carácter nulo de terminación de la Cadena (\0) por el carácter nueva línea (\n).
Sintaxis:
puts (CADENA);
8.13.3 ARREGLO DE CADENA DE CARACTERES
En un arreglo de cadenas de caracteres cada elemento es un arreglo de caracteres. Es
un arreglo de 2 dimensiones de tipo char.
Sintaxis:
char CADENA [N° ELEMENTOS] [LONGITUD DE LA CADENA];
8.13.4 FUNCIONES DE CADENAS DE CARACTERES
Para utilizar las Funciones de tipo Cadena se tiene que activar la librería INCLUDE
<STRING.H>
A) STRCAT._ Agrega toda la cadena2 en la cadena1 y el resultado es devuelto en la cadena1
Sintaxis:
strcat(CADENA1, CADENA2);
Ejemplo 8.30
1ERA FORMA: char NOMBRE1 (30), NOMBRE2 ( 30);
gets (NOMBRE1) ; gets ( NOMBRE2);
cout<<”La unión de las cadenas es:“<< strcat(NOMBRE1, NOMBRE2);
279
Lic. Elmer Alberto León Zárate
2DA FORMA:
char NOMBRE1 (30) , NOMBRE2 (30);
gets ( NOMBRE1); gets ( NOMBRE2);
strcat ( NOMBRE1, NOMBRE2);
cout<<” La unión de las cadenas es: << NOMBRE1;
B) STRCPY.- Esta función copia cadena2 en la cadena 1 y el resultado lo devuelve en la
cadena 1.
Sintaxis:
STRCPY (CADENA 1, CADENA2);
Ejemplo 8.31
1ERA FORMA:
char NOMBRE 1 (30), NOMBRE2 (30);
gets (NOMBRE1); gets (NOMBRE2);
cout <<”La Nueva cadena es :“<< strcpy (NOMBRE 1, NOMBRE2):
2DA FORMA:
char NOMBRE1 (30), NOMBRE (2);
gets (NOMBRE1); gets (NOMBRE2);
srtcpy (NOMBRE1, NOMBRE2);
cout<<” LA NUEVA CADENA ES; “<< NOMBRE1;
C) STRLEN .- Esta función devuelve la longitud de la cadena
Sintaxis:
strlen (CADENA 1);
Ejemplo 8.32
char NOMBRE1 (30),
gets (NOMBRE1);
280
CAPITULO VIII: Lenguaje de programación C++
cout <<”La Longitud de la cadena es :“<< strlen(NOMBRE 1)
D) STRLWR.- Convierte la Cadena de mayúsculas a minúsculas
Sintaxis:
strlwr (CADENA 1);
Ejemplo 8.33
1ERA FORMA:
char NOMBRE1 (30),
gets (NOMBRE1);
cout <<”En minúsculas es:” << strlwr (NOMBRE 1)
E) STRUPR.- Convierte la cadena de minúsculas a mayúsculas
Sintaxis:
strupr (CADENA 1);
Ejemplo 8.34
1ERA FORMA:
char NOMBRE1(30),
gets (NOMBRE1);
cout <<”En mayúsculas es :“<< strupr (NOMBRE1):
F) ATOF.- Convierte una cadena caracteres a un valor de doble precisión
Sintaxis: atof (CADENA);
G) ATOL.- Convierte una cadena de caracteres aun valor entero o a un valor entero largo.
Sintaxis: atol (CADENA);
H) ITOA.- Convierte un numero entero en uno cadena de caracteres
Sintaxis: itoa (VALOR, CADENA, BASE);
Donde:
281
Lic. Elmer Alberto León Zárate
Valor
-Es el valor a transformar a cadena.
Cadena
- Cadena donde ira el resultado
Base
- Colocar a la base en la que se transformara el número
Ejemplo 8.35
Realizar un programa que ingrese un numero entero y determine su base binaria
utilizar la función itoa.
# include <conio.h>
# include < bcd.h>
# include <string.h>
# include < stdlib.h>
# include< stdio.h>
void main()
{
clrscr();
char a (15);
int n;
puts(“ingrese un número a cambiar de base:”);
cin>> n;
itoa (n, a, 16);
cout<<” en base 2 es: “<<a<<”/n”;
getch() ;
}
8.14 GRAFICOS EN C++
Para crear gráficos en C++, necesita el fichero # include < graphics.h > y los pasos son
los siguientes:

Activar la librería graphics.h
282
CAPITULO VIII: Lenguaje de programación C++

Colocar los controladores y Detecciones de gráficos en C++

Colocar los comandos para la creación de gráficos

Cerrar los gráficos con closegraph( )

Tener en cuenta las coordenadas
283
Lic. Elmer Alberto León Zárate
8.14.1 CONSTANTES GRAFICAS
COLORES OSCUROS
-
0
NEGRO
-
1
AZUL MARINO CLARO
-
2
VERDE PERICO
-
3
VERDE CLARO
-
4
ROJO
-
5
MORADO O VIOLETA
-
6
CAFÉ CLARO
-
7
GRIS CLARO
COLORES CLAROS
-
8
GRIS FUERTE
-
9
AZUL MARINO CLARO
-
10
VERDE
-
11
AZUL CLARO
-
12
ROJO CLARO
-
13
ROSA MEXICANO
-
14
AMARILLO
-
15
BLANCO
284
CAPITULO VIII: Lenguaje de programación C++
8.14.2 JUSTIFICACION DE TEXTO
HORIZONTAL
-
0 LEFT_TEXT (JUSTIFICAR IZQUIERDA)
-
1 CENTER_TEXT (JUSTIFICAR CENTRADA)
-
2 RIGHT_TEXT (JUSTIFICAR DERECHA)
-
0 BOTTOM_TEXT (JUSTFICACION ABAJO)
-
1 CENTER_TEXT (JUSTFICACION CENTRADA)
-
2 TOP_TEXT (JUSTFICACION ALTA)
VERTICAL
8.14.3 BASE PARA LA CREACION DE GRAFICOS
# include<graphics.h>
# include<stdio.h>
# include<conio.h>
void main( )
{
int controlador, modo=1;
controlador=DETECT;
initgraph(&controlador, modo, “ ”);
/* Aquí colocar los comandos de creación de gráficos */
getch( );
closegraph( );}
285
Lic. Elmer Alberto León Zárate
8.14.4 FUNCIONES GRAFICAS
1. PUTPIXEL
:
Crea un pixel en la posición X Y.
putpixel( x , y , color);
2. LINE
:
Crea una línea
line( x1, y1, x2, y2);
3. ARC
:
Dibuja un arco
arc(x , y , anguloinicio , angulofinal , radio);
4. BAR
:
Traza una barra
bar( x1, y1, x2, y2 );
5. BAR3D
:
Traza una barra en 3 dimensiones
bar3d(x1,y1,x2,y2,tamaño _de_proyección,1);
1 topon
6. RECTANGLE
:
0 topoff
Crea un rectángulo
rectangle(x1,y1,x2,y2)
7. LINETO
:
Crea una línea desde la posición actual
lineto( x ,y );
8. CLEARDEVICE :
Limpia Pantalla
cleardevice( );
9. SETCOLOR
:
Cambia el color de los trazos
setcolor(color);
10. SETBKCOLOR :
Cambia el color del fondo
setbkcolor(color);
11. PIESLICE
:
Traza un sector circular
286
CAPITULO VIII: Lenguaje de programación C++
pieslice(x,y,ángulo inicial, ángulo final, radio);
12. SETCOLOR
:
Cambia el color de los trazos
setcolor(color);
8.14.5 FUNCIONES DE TEXTO EN MODO GRAFICO
Tipo de letra
0 tipo de letra por defecto
1 triplex
2 pequeña
3 sanserif
4 gótica
Tamaño
Puede variar de 1 a 10 (Incrementando el tamaño)
Valores de dirección
0
forma horizontal
1
forma vertical
1. SETTEXTSTYLE
: Se configura el tamaño tipo de letra y su forma
settextstyle(tipodeletra, dirección, tamaño);
2. OUTTEXTXY
: Escribe un texto en la coordenada dada.
outtextxy (x,y, “texto”);
287
Lic. Elmer Alberto León Zárate
8.15 RELACION DE EJERCICIOS:
1. Programa que ingrese 3 alumnos con 3 Notas cada uno y determine el promedio de
cada uno (Utilizar arreglos unidimensionales y Funciones).
2. Ingrese N valores a un arreglo y determinar cuántos pares o impares se han ingresado
en el arreglo utilizar funciones.
3. Programa que ingrese 15 números enteros a un arreglo unidimensional y decida si dos
de estos enteros, cualquiera que ellas sean sumen 15. Utilizando funciones.
4. Programa que ingrese 10 números a un arreglo unidimensional, y diga cuál es el
número que se repite más de los ingresados.
5. Programa que ingrese 5 nombres de personas con su respectivo tipo de sexo y edad, a
un arreglo para cada uno y determinar cuántos son: Mayores de Edad, menores de
edad, cantidad de Hombres, cantidad de mujeres, hombres mayores de edad, mujeres
mayores de Edad.
6. Realizar el siguiente menú:
 Ingreso de Datos (Nombres-Paterno-Materno-Edad-Sexo)
 Listado de los Datos ingresados
 Listado de Nombres y Edad
 Listado de Paterno, Materno y Nombres
 Listado de Paterno, Nombres y Edad
 Salir
Utilizar Arreglos para ingreso de Datos, funciones, Switch
7. Programa que ingrese 10 Nombres con sus respectivas 3 Notas por alumno y
determinar su promedio, mostrar quien es el alumno con mayor promedio (utilizar
arreglos unidimensionales y Funciones).
288
CAPITULO VIII: Lenguaje de programación C++
8. Ingresar una matriz N x N y Determinar la Suma de todos sus elementos
9. Ingresar una matriz N x N y Determinar el mayor valor ingresado en la matriz
10. Ingresar una matriz de 3x3 determinar los siguientes resultados a través de un menú de
opciones :
 Ingreso de datos de la matriz
 La suma de primera fila
 La suma de última fila
 La suma de la fila central
 La multiplicación de la primera columna
 La multiplicación de la última columna
 La suma de la diagonal principal
 La multiplicación de la diagonal secundaria
 Salir
11. Ingresar una matriz de FxC y determinar la suma de los valores de la frontera
12. Ingresar una matriz de FxC y determinar la Suma de la Primera y Última Fila
13. Ingresar una matriz de FxC y determinar el producto de la primera y la última
columna.
14. Realizar un programa que ingrese el orden de la matriz (Filas y Columnas) para 2
matrices A y B y Determine la Suma de matrices.
15. Realizar un programa que ingrese el orden de la matriz (Filas y Columnas) para 2
matrices A y B y Determine la Resta de matrices.
16. Realizar un programa que ingrese el orden de la matriz para 2 matrices A (Fila1,
Columna1) y B (Columna2, Fila2) y Determine la Multiplicación de matrices.
289
Lic. Elmer Alberto León Zárate
17. Realizar un programa que ingrese el orden de la matriz para una matriz A y devuelva
la transpuesta de la matriz
18. Ingresar en un arreglo de 3x3 números enteros y realizar la determinante
19. Cubo Mágico 1, Programa que ingrese un número 5 a una variable N y con los
números del 1 al 9, colocarlos en cada casillero para que la suma horizontal, vertical
y sus diagonales siempre sumen 15. Definir un Arreglo de 3 x 3, para mostrar los
resultados, la variable N debe ser colocada en el centro del Arreglo Bidimensional.
20. Cubo Mágico 2, Programa que ingrese un número 4 a una variable N y con los
números del 0 al 8, colocarlos en cada casillero para que la suma horizontal, vertical y
sus diagonales siempre sumen 12. Definir un Arreglo de 3 x 3, para mostrar los
resultados, la variable N debe ser colocada en el centro del Arreglo Bidimensional.
21. Distribuir 1, Definir un Arreglo Bidimensional de 4 x 4, y distribuya los números del 1
al 12 en las casillas de tal modo que la suma de cada lado sea 22.
22. Distribuir 2, Definir un arreglo Bidimensional de 4 x 4, y distribuya los números del 1
al 12 en las casillas de modo que la suma de cada lado sea 26
23. Permitir el ingreso de N datos a una estructura de arreglos con los siguientes campos:
PATERNO, MATERNO, NOMBRES, EDAD, SEXO, PROMEDIO DE NOTAS.
Generar el siguiente menú :

Reporte Total de Datos

Reporte Total de Hombres
290
CAPITULO VIII: Lenguaje de programación C++

Reporte Total de Mujeres

Reporte de los mayores de Edad

Reporte de los menores de Edad

Reporte de los desaprobados

Reporte de los aprobados

Reporte de Mujeres mayores de Edad aprobadas

Salir
Su opción es:
24. Se pide emitir la planilla de pago del personal de una empresa considerando los
siguientes datos por empleado. Código, Apellidos (nombres, paterno, materno),
Sueldo (Básico, Horas extras, Bruto).
PLANILLA DE SUELDOS
HORAS
CODIGO
NOMBRES PATERNO MATERNO BASICO
EXTRAS
XXXX
XXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXX
XXXXX
999.99
99
BRUTO
999.99
999.99
99
BRUTO
999.99
25. En una Biblioteca se desea tener un control sobre los préstamos de sus libros, los
cuales tienen los siguientes datos: CODIGO, TITULO, AUTOR, AÑO DE EDICION,
FECHA DE DEVOLUCION. Realizar el siguiente menú :

Reporte Total de Libros

Mostrar los libros ordenados en forma Ascendente por año
291
Lic. Elmer Alberto León Zárate

Consulta

Salir
Su opción es:
Formato de Consulta:
Código del Libro
: Aquí se ingresara un código
Titulo
: xxxx xxx
Autor
: xxxxx xxxx
Fecha de devolución: xxxxxx xxx
26. Realizar una Estructura de Datos para que muestre la TABLA de posiciones de 8
equipos de Fútbol de Primera división a un arreglo, Ingresar el Nombre del Equipo
Cantidad de partidos jugados, cantidad de partidos ganados (3 puntos), cantidad de
partidos empatados (1 punto) y cantidad de partidos perdidos( 0 punto), Determinar en
un menú lo siguiente :
 Campeón del Torneo
 Equipos que Irán a la copa Libertadores (3 primeros)
 Equipos que bajan a segunda división (2 últimos)
 Mostrar la Tabla de Posiciones de todos los equipos
27. Ingresar a una estructura de Datos los siguientes campos para un alumno, Apellidos,
Sexo, Nota 1, Nota 2, Nota 3, para un total de N alumnos de un aula. Determinar por
medio de un menú las siguientes opciones, utilizar funciones :

Listado de los alumnos y su promedio

Cantidad de alumnos aprobados y Desaprobados en porcentaje.

Cantidad de Hombres y mujeres aprobadas

Alumno con mayor promedio
292
CAPITULO VIII: Lenguaje de programación C++
28. Ingresar a una estructura de Datos los siguientes campos para un alumno, Apellidos,
Edad, prueba 1, prueba 2, prueba 3, prueba 4, para un total de N alumnos de un aula.
Determinar por medio de un menú las siguientes opciones Utilizar Funciones :

Listado de los alumnos y su promedio

Cantidad de alumnos aprobados y Desaprobados en porcentaje.

Listado de los mayores y menores de edad con su promedio

Alumno con menor promedio
29. Crear un archivo de texto llamado DATOS.TXT para los programas de Ficheros, el
primero guardara los datos personales del autor del programa (nombres, paterno,
materno), el siguiente programa mostrara el contenido del mismo.
30. Crea un programa de fichero que agregue los siguientes datos al archivo
DATOS.TXT, edad, sexo, Estado Civil.
31. Crear un Programa que pida el nombre del fichero y luego llenar N personas a un
Arreglo de Estructuras con los siguientes campos: CODIGO, NOMBRES,
PATERNO, MATERNO. Utilizando Funciones.
32. Crear un programa que Lea un Archivo de Texto y muestre los contenidos de los
archivos creados en el programa del ejercicio Nº 31, utilizando Funciones.
33. Crear un programa que permita agregar más datos o información a los registros
creados en el ejercicio Nº 31.
34. Crear el Siguiente menú de opciones, Todos con uso de Funciones
MENÚ DE OPCIONES
1. Ingreso de datos al fichero
2. Listado de los datos del fichero
3. Agregar datos al fichero
293
Lic. Elmer Alberto León Zárate
4. Salir
Su opción es:
NOTA: Para un total de N personas que se ingresara en la opción 2 del menú, Utilizar
Funciones, Arreglos y Estructuras para los siguientes campos del alumno: Nº
MATRICULA, PATERNO, MATERNO, NOMBRES, CARRERA, CICLO,
TURNO, SECCION.
35. Crear un archivo de texto que almacene todos los datos de una factura en un archivo
llamado factura.txt con el siguiente formato
Factura Nº 00001
CODIGO
DESCRIPCION CANTIDAD
PRECIO
TOTAL
A001
MENÚ 1
3
4.00
12.00
....
....
....
.....
.....
36. Crear un archivo Binario que ingrese 10 registros con los siguientes campos ORDEN,
NOMBRE, PATERNO, EDAD, SUELDO de una Estructura de datos.
37. Crear un programa que lea los datos creados en el archivo binario del ejercicio Nº 36.
38. Crear un programa que ingrese un número de Orden y muestre a que registro le
pertenece. Utilizar el archivo del ejercicio Nº 36.
39. Realizar los 3 programas anteriores en un menú, utilizando funciones, estructura,
Binarios.
294
CAPITULO VIII: Lenguaje de programación C++
40. Realizar la siguiente estructura:
CODIGO
NOMBRE PATERNO MATERNO CICLO
ESPECIALIDAD
DEL
ALUMNO
Para un total de 10 alumnos utilizando: Archivos Binarios, Estructura de Datos,
Funciones y menú.
Generar el Siguiente menú de opciones:
MENÚ DE OPCIONES
 Ingreso de datos al fichero
 Listado de los datos del fichero
 Búsqueda por el código del alumno
 Salir
Su opción es:
41. Crear un archivo Binario que almacene todos los datos de una factura en un archivo
llamado factura.dat con el siguiente formato:
Factura Nº 00001
CODIGO
DESCRIPCIÓN CANTIDAD
PRECIO
TOTAL
A001
Producto
3
4.00
12.00
....
....
....
.....
.....
Dentro del archivo solo guardara el numero de Factura y luego cuando se
quiera ver el contenido de la Factura solo se digitara el numero de factura.
295
Lic. Elmer Alberto León Zárate
42. Realizar un programa que ingrese una de caracteres y luego muestre el texto en
caracteres.
43. Realizar un programa que ingrese una cadena de caracteres y realizar el siguiente
menú.

Numero de caracteres.

Convertirlos en mayúsculas

Convertirlas en minúsculas.

Todas las vocales se conviertan en.

Texto invertido.

Salir.
44. Permitir el ingreso de una clave para realizar un programa a cualquiera y que solo
permite el ingreso de 3 veces la clave luego emitir el mensaje ERROR DE CLAVE y
terminar el programa.
45. Determinar si una cadena de caracteres es un palíndromo ( es un texto que se lee igual
hacia la derecha o hacia la izquierda) Ejemplo: Radar, somos
46. Realizar un programa que ingrese un número entero de no más de 4 cifras y mostrar el
equivalente en palabras. Ejemplo : 2000 dos mil 2001 dos mil uno
296
DISCUSIÓN
Considerando que el presente trabajo no tiene resultados experimentales,
obtenidos en gabinete o laboratorio no es posible realizar una discusión en ese
sentido. Sin embargo podemos realizar una discusión respecto de otros trabajos.
La elaboración del texto esta destinada al dictado de la asignatura
Programación de computadoras, estructurado en xxxxx capítulos donde se exponen
los principales conceptos de la informática y sus aplicaciones.
El texto “PROGRAMACION DE COMPUTADORAS Y SUS APLICACIONES”
a diferencia de otros, ha sido redactado en un lenguaje simple e incluso por cada
capítulo se presenta una relación de ejemplos desarrollados para una mejor
comprensión. La mayoría de los textos responsables de los temas tratados se
encuentran escritos en diferentes idiomas, lo que dificulta su entendimiento por
parte del estudiantado. Por lo que estos textos no pueden ser usados en el dictado
de la asignatura.
Por lo expuesto podemos concluir que el presente texto facilitara el proceso
de enseñanza y aprendizaje en esta materia y será de gran utilidad a los profesores
y alumnos universitarios interesados en las aplicaciones de la informática a las
ciencias e ingenierías.
297
REFERENCIAS BIBLIOGRAFICAS
1.- JOYANES AGUILAR, LUIS;
Fundamentos de programación,
FERNANDEZ AZUELA, MATILDE;
Madrid: McGraw-Hill, 2a edición, 1998.
RODRIGUEZ BAENA, LUIS
2.- DEL AGUILA S,W.
Algoritmos y diagramas de flujo, Lima:
Gómez, 1a edición, 1992.
3.-JOYANES AGUILAR, LUIS.
C++ a su alcance,
Madrid: McGraw-Hill, 1a edición, 1994.
4.-CEVALLOS SIERRA, FRANCISCO. Curso de programación C++,
Madrid: RA-MA, 1a edición, 1997.
5.- DELORES M, ETTER
Solución de problemas de ingeniería con
MATLAB, México: Prentice-Hall, 2a edición,
1998.
6.- NAKAMURA, CHOICHIRO
Análisis Numérico y Visualización Grafica
con
Matlab,
México:
Prentice–Hall,
1a
edición, 2000.
7.- STROUSTRUP, BJARNE.
El Lenguaje de programación C++,
Madrid: Addison-Wesley, 3a edición, 2002.
8. - STROUSTRUP, BJARNE.
The C++ Programming Language,
Madrid: Addison-Wesley, 3a edición, 2000.
9.- STROUSTRUP, BJARNE.
The Design and Evolution of C++,
ÇMadrid: Addison-Wesley, 1a edición, 1994.
298
10.- COPLIEN, JAMES.
Advanced C++:Programming Styles and Idioms,
Madrid: Addison-Wesley, 3a edición, 1992.
11.- MUSSER, D.R.
Effective C++,
Madrid: Addison – Wesley, 2a edición, 1997.
12.- FORD, W – TOPP, W.
Data structures with C++,
México: Prentice – Hall, 2a edición, 2002.
299
APENDICE
DIAGRAMA DE LAS ESTRUCTURAS DE DATOS
300
Descargar