Anda di halaman 1dari 300

1

I N D I C E
Pg.
INDICE 1
RESUMEN 5
INTRODUCCION 6
MARCO TEORICO 9
MATERIALES Y METODOS 11
RESULTADOS 12
CAPTULO I
1. HARDWARE Y SOFTWARE. 13
1.1 Hardware 13
1.2 Software. 33
1.3 Conceptos Bsicos 41
1.4 Relacin de Ejercicios 42
CAPTULO II
2. HERRAMIENTAS DE PROGRAMACIN. 47
2.1 Anlisis del problema 47
2.2 Diseo del algoritmo 48
2.3 Diagramas de Flujo 48
2.3 Pseudocdigo. 51
2.4 Relacin de ejercicios 52
2
CAPITULO III
3. PROGRAMACIN ESTRUCTURADA. 54
3.1 Secuenciales 54
3.2 Selectivas 55
3.3 Repetitivas. 58
3.4 Relacin de ejercicios 62
CAPTULO 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 Dinmicas 102
4.3 Relacin de Ejercicios. 133
CAPITULO V
5. TEORA DE GRAFOS. 136
5.1 Conceptos Bsicos. 136
5.2 Representacin de grafos. 139
5.3 Exploracin de grafos. 143
5.4 Relacin de ejercicios. 145
CAPTULO VI
6. ORDENAMIENTO Y BSQUEDA DE DATOS. 147
6.1 Ordenamiento de datos. 147
6.2 Bsqueda de datos. 158
6.3 Relacin de ejercicios. 166
3
CAPTULO VII
7. SOFTWARE DE PROGRAMACIN MATLAB. 168
7.1 Introduccin. 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 programacin. 192
7.7 Grficos 2-D. 199
7.8 Grficos 3-D. 204
7.9 Relacin de ejercicios. 212
CAPTULO VIII
8. LENGUAJE DE PROGRAMACIN C++. 220
8.1 Introduccin. 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 Librera de funciones creadas por el usuario. 246
8.10 Arreglos. 246
8.11 Estructuras en C++. 258
8.12 Archivos en C++. 264
4
8.13 Cadenas de caracteres en C++. 278
8.14 Grficos en C++. 282
8.15 Relacin de ejercicios. 287
DISCUSION 297
REFERENCIAS BIBLIOGRAFICAS 298
APENDICE 300
Diagrama de las estructuras de datos 300
5
RESUMEN
En este trabajo de investigacin se ha elaborado un texto de naturaleza terico-prctico
que expone de forma sistemtica y detallada, las definiciones y ejemplos ms importantes de
las Estructuras de datos, Herramientas de programacin, Ordenamiento y bsqueda de datos,
Software Matlab y el Lenguaje de programacin C++, permitiendo el dictado de la asignatura
de programacin de computadoras correspondiente al cuarto ciclo acadmico del currculo de
estudios de la Escuela profesional de Matemtica de la Facultad de Ciencias Naturales y
Matemtica de la Universidad Nacional del Callao.
El texto Programacin 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: Investigacin
Operativa I y II, Matemtica Computacional I, II y III, Mtodos matemticos y los Cursos de
seminario I y II de la Lnea del Anlisis Numrico y Matemtica 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 programacin de
computadoras y adems tenemos ejercicios de aplicacin para cada uno de los captulos a un
nivel adecuado, lo que le da un carcter integral y funcional a la obra.
El resultado muestra que, en comparacin con los textos elaborados por otros autores
mencionados en la referencia bibliogrfica, el texto PROGRAMACION DE
COMPUTADORAS Y SUS APLICACIONES hace ms dinmico y fcil el proceso de
enseanza y aprendizaje de esta asignatura.
6
INTRODUCCION
Con el avance de la ciencia y la tecnologa nos enfrentamos a una manera diferente de
ensear las matemticas y sus aplicaciones.
La asignatura de programacin de computadoras proporciona las herramientas
necesarias para la utilizacin de la computadora como un complemento para el estudio de las
ciencias e ingeniera.
No podemos estar al margen del avance de la tecnologa informtica que se ha
convertido en una herramienta de investigacin para la resolucin de complejos problemas
planteados en la realizacin y aplicacin de modelos matemticos de Ingeniera u otras
disciplinas. Por tanto es necesario contar con un texto que nos permita utilizar de forma
eficiente sus aplicaciones a la matemtica e ingeniera.
Es muy limitado la bibliografa, especialmente en textos que logren compilar y
tratar todos los temas relacionados con la asignatura de programacin de computadoras,
encontramos en la literatura mayormente que ponen nfasis a ciertos temas. Se requiere un
texto donde podamos relacionar conocimientos tericos y aplicaciones prcticas, experiencias
de aplicaciones en diferentes ramas de la ciencia e ingenieras. Por lo que es importante
recopilar toda informacin posible, que se encuentra dispersa, ordenndola en forma sencilla
y razonada, dando origen a la creacin del Texto: Programacin de computadoras y sus
aplicaciones.
En este sentido el problema de la investigacin consisti en elaborar un texto de
naturaleza terico-prctico que oriente adecuadamente el desarrollo sistemtico y concreto de
la asignatura de PROGRAMACION DE COMPUTADORAS con aplicaciones
fundamentales para estudiantes de ciencias e ingeniera.
7
El presente trabajo constituye una investigacin de gabinete (bsqueda, recopilacin,
ordenacin y centralizacin de material bibliogrfico). Es necesario indicar que con el
presente texto no se pretende agotar un tema bastante extenso, complejo y que guarda relacin
con otras reas tanto en ciencia e ingenieras, por el contrario se desea exponer de manera
pragmtica y accesible los temas contenidos en el syllabus de Programacin de
Computadoras para que sirva de gua y referencia preferencialmente para los estudiantes
universitarios de la especialidad matemtica y afines.
OBJETIVO GENERAL
Desarrollar - preparar, redactar y editar - un texto de Programacin de Computadoras
y sus aplicaciones en el que se compile informacin tcnica y cientfica existente, que sirva
de gua y referencia bibliogrfica para los estudiantes de ciencias e ingenieras principalmente
de la Universidad Nacional del Callao.
OBJETIVOS ESPECFICOS
Complementar y afianzar los conocimientos impartidos en la asignatura de
Programacin de computadoras.
Presentar al lector conceptos y aplicaciones sobre temas especficos tales como:
hardware y software, herramientas de programacin, programacin estructurada, estructuras
de datos, teora de grafos, ordenamiento y bsqueda de datos, lenguajes de programacin
matlab y C++.
El texto: Programacin de Computadoras y sus aplicaciones permitir que el usuario
lector, sea estudiante o no, tenga un material de consulta de primera mano a su disposicin,
en donde se centralizar la informacin cientfica y tcnica existente, relacionadas con las
herramientas bsicas de programacin y sus aplicaciones a las ciencias e ingeniera.
8
La informacin que se recopilar, est frecuentemente dispersa en libros, revistas y
manuales, entre otros, de procedencia nacional e internacional. Se compilar despus de una
exhaustiva revisin y anlisis del material utilizado, es all donde radica la importancia del
presente trabajo, porque permitir generar una fuente bibliogrfica de constante consulta de
los estudiantes de matemtica y ramas afines.
El Texto: Programacin de computadoras y sus aplicaciones permitir cubrir parte
de la brecha existente por la falta de bibliografa aplicada, donde se incluyan los nuevos
avances de la tecnologa informtica.
9
MARCO TEORICO
Existen pocos textos que logren compilar y tratar todos los temas relacionados con la
programacin acadmica del curso de programacin de computadoras, se encuentra
bibliografa que ponen nfasis en algunos temas y en otros no.
Todos los captulos en su integridad contienen material aprovechable (teora-practica)
para los estudiantes de ciencias e ingenieras.
Los temas ms importantes acorde con la programacin acadmica y que se trataran en
este texto son los siguientes:
PROGRAMACION ESTRUCTURADA
La programacin estructurada es una forma de escribir programas de ordenador de
forma clara. Para ello utiliza nicamente tres estructuras: secuencia, seleccin e iteracin;
siendo innecesario el uso de la instruccin o instrucciones de transferencia incondicional
(GOTO, EXIT FUNCTION, EXIT SUB o mltiples RETURN).
Hoy en da las aplicaciones informticas son mucho ms ambiciosas que las
necesidades de programacin existentes en los aos 1960, principalmente debido a las
aplicaciones grficas, por lo que las tcnicas de programacin estructurada no son suficientes.
Ello ha llevado al desarrollo de nuevas tcnicas, tales como la programacin orientada a
objetos y el desarrollo de entornos de programacin que facilitan la programacin 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 manipulacin. Un dato elemental es la mnima informacin que se
tiene en un sistema (Joyanes Aguilar & Zahonero Martinez,1998).
10
TEORIA DE GRAFOS
La teora de grafos estudia las propiedades de los grafos (tambin llamadas grficas).
Un grafo es un conjunto, no vaco, de objetos llamados vrtices (o nodos) y una seleccin de
pares de vrtices, llamados aristas que pueden ser orientados o no. Tpicamente, un grafo se
representa mediante una serie de puntos (los vrtices) conectados por lneas (las aristas).
SOFTWARE MATLAB
MATLAB es un software desarrollado en un ambiente de algoritmo de interaccin,
visualizacin y anlisis de datos.Con esta herramienta se puede resolver problemas
computacionales tcnicos ms rpido que con los tradicionales lenguajes de programacin,
tales como: C, C++ y Fortran.
Es usado para una gran variedad de clculos cientficos y de ingeniera, especialmente
para control automtico y diseo de procesos adems de otra variedad de aplicaciones tales
como: procesamiento de seal e imgenes, comunicaciones y modelamiento financiero
(Nakamura, 2000).
LENGUAJE DE PROGRAMACION C++
El Lenguaje de Programacin C++ fue creado por Bjarne Stroustrup en 1985 como
una extensin del Lenguaje C, el mismo que es ms consistente y conocido que otros
lenguajes de programacin cientficos.
El Lenguaje de Programacin C++ es de propsito general porque ofrece control de
flujo, estructuras sencillas y un buen conjunto de operadores. Se puede utilizar en varios tipos
de aplicacin (Stroustrup, 2002).
11
MATERIALES Y MTODOS
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 Programacin de Computadoras.
Adems tambin se ha usado material de tipo tcnico en el diseo e impresin de
informes trimestrales y final. Toda la informacin 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.
MTODOS
Luego de realizar la recoleccin de datos necesarios para la investigacin. Los
mtodos usados en la discusin de los temas de cada captulo son clasificados en: Inductivo,
deductivo e inductivo-deductivo.
El mtodo deductivo es conciso y lgico que permite desarrollar la asignatura de
Programacin de Computadoras en forma concreta y ordenada.
El mtodo inductivo-deductivo ha hecho posible mostrar el desarrollo de los
programas codificados en el lenguaje de programacin C++ y que describen la solucin de
problemas concretos de los estudiantes de ciencias e ingenieras as como tambin, el anlisis
de las soluciones para los ejercicios presentados. Estos mtodos han permitido que el trabajo
tenga contenido y mayor calidad
12
RESULTADOS
El resultado del presente trabajo de investigacin es el texto:
PROGRAMACION DE COMPUTADORAS Y SUS APLICACIONES cuyo contenido se
expone en ocho captulos distribuidos en el orden sealado en el ndice y que se presenta en
las paginas siguientes.
En cada captulo 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 solucin de los problemas que se presentan al final del captulo.
Por otro se han elaborado algunas figuras de diagramas de flujo con el fin de
facilitar la comprensin de los programas desarrollados y luego poder codificarlo en el
Lenguaje de programacin C++.
Adicionalmente se disearon por cada captulo una relacin de ejercicios que
fueron propuestos para ser resueltos con los temas enseados.
El uso del texto: PROGRAMACION DE COMPUTADORAS Y SUS
APLICACIONES permite unificar los conceptos tericos con los prcticos, lo cual favorece
el proceso enseanza-aprendizaje de la asignatura de Programacin de computadora de
acuerdo a la propuesta silbica para su dictado. Adems permite afianzar en el estudiante los
conceptos informticos bsicos y aplicarlos en diferentes reas.
13
CAPITULO I
HARDWARE Y SOFTWARE
1.1 HARDWARE
QU ES UNA COMPUTADORA?
Figura 1.1 Computadora
Definicin 1.1 Persona o Dispositivo mecnico o electrnico que realiza cmputos, o sea,
que cuenta o calcula aritmticamente. Su funcin fundamental es sumar y restar.
La diferencia entre una computadora y una calculadora es que sta no solo cuenta,
adems realiza clculos mucho ms complejos como manejo de exponentes, raz cuadrada,
etc.
La comnmente denominada COMPUTADORA realiza funciones mucho ms
complejas que contar y calcular, adems de trabajar con nmeros tambin efecta funciones
lgicas, trabaja con informacin concreta: palabras, imgenes, sonidos.
Por la tanto la Real Academia de la Lengua la ha titulado como ORDENADOR.
Lic. Elmer Alberto Len Zrate
14
Definicin 1.2 El ordenador es una mquina de propsito general que gracias a su
velocidad recibe todo tipo de informacin, la procesa o sea la ordena y una vez procesada la
emite ya digerida para su interpretacin.
Definicin 1.3 El ordenador es un conjunto de circuitos electrnicos comprimidos en una
pastilla de silicio (llamada Chip), siendo su funcin fundamental la de encausar las seales
electromagnticas de un dispositivo a otro.
Definicin 1.4 El ordenador es en realidad el MICROPROCESADOR, o sea un
conmutador, es el cerebro y razn de ser del ente denominado computadora. Todo lo dems
que le rodea y se le es conectado no es ms que dispositivos mediante los cuales el cerebro se
alimenta de energa e interacta con el medio ambiente y por lo tanto con nosotros los
usuarios.
COMPONENTES BSICOS DE HARDWARE
Al conjunto fsico 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 ms importantes los siguientes:
1.1.1 UNIDAD CENTRAL DE PROCESO
Definicin 1.5 Es en s en cerebro, el cual se compone a su vez de Unidad Aritmtica,
Lgica y de control. Esta unidad trabaja en base a un reloj maestro que coordina la ejecucin
de todas las operaciones que realiza el microprocesador.
CAPITULO I: Hardware y Software
15
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 ejecucin 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 compaa fabricante INTEL la cual ha provedo desde las primeras PCs
y hasta hoy a la mayora 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 tambin en el mercado compaas como Cyrix, AMD,
Power Pc, Digital Equipment, etc. Sin embargo, aunque en competencia la mayora de esas
compaas ofrecen microprocesadores equivalentes a los estndares 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
Lic. Elmer Alberto Len Zrate
16
VELOCIDAD de sincronizacin 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
Definicin 1.6 Tambin llamada Tarjeta Madre o Motherboard es donde se encuentran las
conexiones bsicas para todos los componentes de la computadora, los cuales giran en torno
al microprocesador. Es bsicamente 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 reparacin o mejora, ste
fue el caso de la mayora de las computadoras que existieron en el pasado, como por
mencionar algunas: Comodore 64, Tandy 1000 e incluso todas las XTs 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 mayora de las actuales clones
- Arquitectura EISA o MCA de 32 bits. La mayora de las de IBM o
compatibles de marca de calidad que se venden actualmente.
CAPITULO I: Hardware y Software
17
Figura 1.3 Tarjeta principal
1.1.3 EL COPROCESADOR MATEMTICO O NUMRICO
Definicin 1.7 Es un microprocesador de instalacin opcional, tambin denominado
Unidad de punto flotante que auxilia al microprocesador en el uso eficiente de programas de
graficacin, clculos matemticos complejos y diseo 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, slo vea, si en el modelo tiene agregada el par de
letras DX en el caso contrario, usted necesitar en el futuro inmediato su instalacin. 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 instalacin de uno de ellos, debe asegurarse primero lo
siguiente:
Lic. Elmer Alberto Len Zrate
18
- Que su motherboard cuente con un slot disponible especfico para el
coprocesador matemtico.
- 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 matemtico
1.1.4 LA MEMORIA
Definicin 1.8 Es la capacidad de almacenar informacin, la cual se realiza en bancos
separados de la UCP. Su unidad de almacenamiento es el BYTE que es la capacidad de
almacenar un carcter: una letra, nmero o cualquier smbolo como #, $, &, etc.
CAPITULO I: Hardware y Software
19
Figura 1.5 Memorias
TIPOS DE MEMORIAS:
a) MEMORIA ROM
Definicin 1.9 Esta memoria es slo de lectura, y sirve para almacenar el programa bsico
de iniciacin, instalado desde fbrica. Este programa entra en funcin en cuanto es encendida
la computadora y su primera funcin es la de reconocer los dispositivos, (incluyendo memoria
de trabajo), dispositivos.
b) MEMORIA RAM
Definicin 1.10 Esta es la denominada memoria de acceso aleatorio o sea, como puede
leerse tambin puede escribirse en ella, tiene la caracterstica de ser voltil, esto es, que slo
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.
Lic. Elmer Alberto Len Zrate
20
Por lo tanto, programa que se desea ejecutar en la computadora, programa que
mximo debe ser del mismo tamao que la capacidad de dicha memoria, de lo contrario se
ver imposibilitada de ejecutarlo.
Observacin 1.1
Cuando se vea en la necesidad de adquirir un programa de cmputo,
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 mnimos necesarios que
debe tener su equipo para trabajar con ste. Bsquelos con el ttulo,
Observacin 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 caractersticas propias del uso de la memoria ROM y el manejo de la RAM,
existen varios medios de almacenamiento de informacin, entre los ms comunes se
encuentran:
CAPITULO I: Hardware y Software
21
a) EL DISQUETE, FLOPPY O DISCO FLEXIBLE
Definicin 1.11 Es un medio o soporte de almacenamiento de datos formado por una pieza
circular de material magntico, fina y flexible encerrada en una cubierta de plstico cuadrada
o rectangular. Esta tecnologa actualmente muy poco se utiliza.
b) CINTA DE RESPALDO
Definicin 1.12 Son como las cintas de cassette de audio y pueden almacenar desde 20
Mbytes hasta 2 Gigabytes o ms. Son medios de almacenamiento muy econmicos y sobre
todo muy rpidos, ya que pueden almacenar todo un disco duro en un pequeo cassette en
unos cuantos minutos.
Figura 1.6 Cintas de respaldo
c) DISCO DURO
Definicin 1.13 El Cul se instala fijo dentro de la computadora, son ms rpidos y
seguros que las unidades de lectura de disquete y cuyas capacidades de almacenamiento van
desde los 40 Gigabytes hasta 500 Gigabytes. Los ms rpidos andan por debajo de los 15
milisegundos de acceso de la informacin. En la actualidad evite comprar discos con
capacidades menores a 40 Gb. En poco tiempo no le servirn prcticamente para nada.
Lic. Elmer Alberto Len Zrate
22
Figura 1.7 Disco duro
d) CD-ROM o DISCO COMPACTO
Definicin 1.14 Son de mayor capacidad ya que mnimo 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 informacin
tan variada que pueden soportar ste tipo de almacenamiento, ya se comienza a construir las
grandes bases de informacin en un slo disco: Enciclopedias, Cursos, Viajes tursticos, los
peridicos y revistas del futuro que tenemos frente a nosotros.
Figura 1.8 Disco compacto
CAPITULO I: Hardware y Software
23
1.1.6 FUENTE DE PODER
Definicin 1.15 Una fuente de poder o alimentacin es un dispositivo que convierte la
tensin alterna de la red de suministro, en una o varias tensiones, prcticamente 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 pequeas de energa necesitan de una fuente que les suministre
y regule la cantidad necesaria. Ya que cualquier variacin en el voltaje podra ser suficiente
para quemar dichos circuitos.
Figura 1.9 Fuente de poder
1.1.7 DISPOSITIVOS DE CRECIMIENTO
Definicin 1.16 Son las puertas que estn listas para recibir la conexin de cualquier otro
aparato o tarjeta que permita ampliar las capacidades de trabajo de una computadora, y son el
punto ms importante para asegurarnos haber hecho una buena inversin. Estos son las
Ranuras de Expansin y los puertos.
Los puertos son los puntos de conexin que ya vienen con la computadora y que
permiten la instalacin rpida de los dispositivos ms comunes, como lo son el teclado, la
impresora, el monitor, etc.
Lic. Elmer Alberto Len Zrate
24
1.1.8 DISPOSITIVOS DE ENTRADA DE INFORMACIN
Son todos aquellos que permiten al microprocesador la obtencin de la informacin e
instrucciones a seguir en determinado momento. Gracias a ellos, nosotros podemos
comunicarnos con la computadora. Entre los ms utilizados se encuentran:
a) EL TECLADO
Definicin 1.17 Es un perifrico de entrada o dispositivo, en parte inspirado en el teclado
de las mquinas de escribir, que utiliza una disposicin de botones o teclas, para que acten
como palancas mecnicas o interruptores electrnicos que envan informacin a la
computadora. Despus de las tarjetas perforadas y las cintas de papel, la interaccin a travs
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
Definicin 1.18 Este dispositivo permite simular el sealamiento de pequeos 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
CAPITULO I: Hardware y Software
25
sobre una superficie plana mueve la flecha en la direccin que se haga sobre la pantalla. Una
vez sealado, permite escoger objetos e incluso tomarlos y cambiarlos de lugar.
Figura 1.11 Mouse
c) LOS RASTREADORES PTICOS O ESCANNERS
Definicin 1.19 Son prcticamente pequeas 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 informacin 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 resolucin mxima 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 mxima calidad de salida de su impresora y la cantidad
Lic. Elmer Alberto Len Zrate
26
de espacio disponible en su disco duro, as como el tamao de la memoria RAM de su
mquina, ya que de no coincidir nunca podr usar su rastreador ms all de las capacidades de
su equipo.
Una de las funciones ms sobresalientes de los rastreadores de imgenes 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.- Escner manual: Se parece al ratn y a medida que se desplaza por una
superficie lisa va convirtiendo la imagen en archivo, son muy lentos y requieren de
mucha precisin para evitar errores en la imagen obtenida.
2.- Escner de cama: Son bsicamente pequeas copiadoras que al igual qu stas,
rastrean el documento depositado en su pantalla. Son muy rpidos, precisos y cada
vez ms baratos.
3.- Lpiz ptico: Tambin se le conoce como pantalla rastreadora de cdigo de
barras, muy conocidos por nosotros en los grandes supermercados, los cuales
interpretan informacin codificada mediante un sistema de barras.
4.- Micrfonos mediante tarjetas de audio: Comenzamos a ver a nuestro
alrededor sistemas de cmputo basados en el reconocimiento de voz que puede
efectuar una computadora mediante una tarjeta instalada especficamente para
convertir la voz en bits y viceversa, as ya comenzamos a ver aparatos controlados por
voz, como algunos que nos contestan por telfono cuando llamamos a algn banco
para pedir nuestro saldo.
CAPITULO I: Hardware y Software
27
1.1.9 DISPOSITIVOS DE SALIDA DE INFORMACIN
Son todos aquellos que nos permiten obtener la informacin procesada por la
computadora, y entre los ms comunes se encuentran:
a) EL MONITOR
Definicin 1.20 Es un aparato de los llamados CTR (Tubo de rayos Catdicos) en los
cuales se pueden representar los datos de tipo texto o grficos procesados por la computadora.
El estndar en vdeo 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 slo imgenes de mejor calidad
sino que incluso se pueden apreciar en calidad normal fotografas autnticas, dicha capacidad
no la tena ninguno de los sistemas de vdeo 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 garanta individual, ya que este aparato por si slo es el que: puede
contaminar ms, a menor calidad cansar y deteriorar ms nuestra vista, consume mucha
energa, se calienta ms que todo el equipo, etc.
Lic. Elmer Alberto Len Zrate
28
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 imgenes detalladas, realsticas o
precisas. Esto deben tomarlo en cuenta sobre todo aquellas personas que requieren equipo de
cmputo para prestar servicios de Diseo Grfico, Arquitectura, Edicin de Vdeo, Imprentas,
etc.
A la capacidad de generar imgenes de calidad de un monitor se le llama resolucin y
se determina por la cantidad de puntos o pixeles que contenga la pantalla. As un monitor
de 640x480 (El estndar en VGA) representar con menor calidad y cantidad de colores las
imgenes realsticas que uno de 1024x768 comnmente denominado SuperVGA. Tambin los
hay intermedios de 800x600 puntos.
Adems un monitor de sistema VGA normal puede representar imgenes mximo
hasta 256 tonalidades diferentes en cambio uno mejor podr manejar hasta 16 millones de
tonos en color, aqu reside la razn de su resolucin y rapidez.
Tanto la calidad de imagen, precisin y rapidez estn soportadas por la llamada Tarjeta
de Vdeo, la cual toma la informacin de la memoria principal, la almacena en la memoria
propia y le ordena al monitor el orden y acomodo de la informacin punto por punto. Todo lo
anterior significa que si usted cambia de tipo de monitor as tambin deber cambiar el tipo de
Tarjeta de vdeo.
b) LA IMPRESORA
Estas actan como mquinas de escribir, es decir, vacan la informacin contenida en
la memoria principal en papel. Y se clasifican en cuatro tipos principales:
CAPITULO I: Hardware y Software
29
1.- MATRICIAL DE PUNTOS
Definicin 1.21 Son las ms rpidas y vendidas, buenas para el trabajo comn de oficina,
aunque ruidosas son las ms econmicas por hoja impresa y baratas en el mercado. Tambin
se denominan as porque su sistema de impresin esta basado en el mismo de la maquina de
escribir, esto es, un rodillo, papel normal, una cinta entintada, pero en lugar de una cua 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 lnea vertical por lnea vertical por letra por palabra por rengln. Como
puede usted observar en cualquier momento, esto lo hacen tan rpido que apenas alcanzamos
a apreciar como se va dibujando el rengln de letras dejando atrs ese tpico 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 caractersticas hacen de las impresoras de agujas las impresoras ms tiles y econmicas
en el trabajo cotidiano de una oficina o empresa.
Figura 1.14 Impresora matricial
Lic. Elmer Alberto Len Zrate
30
2.- INYECCION DE TINTA
Definicin 1.22 Estas funcionan muy parecido a las de matriz de puntos, solo que en vez
de agujas tienen pequesimos microtubos decenas de veces ms delgados que un cabello
humano por donde arrojan pequeos 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
ms lentas que la de agujas, pero tiene la gran ventaja de manejar alta calidad, incluso las de
colores son las ms populares sobre todo en uso profesional, estudiantil y domstico.
Por un precio razonable se pueden encontrar impresoras de calidad tal a colores que
pueden representar con un muy buen porcentaje de fidelidad una fotografa real a 720x720
DPI (puntos por pulgada).
Figura 1.15 Impresora inyeccin de tinta
3.-IMPRESORA LASER
Definicin 1.23 El sistema es totalmente distinto al de las dems y es ms bien parecido al
de una copiadora tradicional, o sea, papel magnetizado con un polvo-tinta muy fino que al ser
fundido con un haz lser crean un documento de calidad inigualable que llega alcanzar hasta
los 600 DPI.
CAPITULO I: Hardware y Software
31
Aunque siguen bajando rpidamente de precio, son las ms caras por hoja impresa, sin
embargo son las nicas con calidad de imprenta, son la herramienta imprescindible para una
imprenta, edicin fotogrfica o negocio de diseo grfico. La velocidad de stas como de las
de inyeccin de tinta se mide en Hojas por minuto.
Figura 1.16 Impresora laser
4.-LOS PLOTTERS
Definicin 1.24 Son grandes impresoras basadas en plumillas de colores que permiten a
los Arquitectos o Ingenieros convertir un plano o trazo de lneas contenido en la memoria de
su computadora en un autntico gran plano listo para su envi, ahorrando mediante stos
sofisticados implementos tanto el diseo a mano de los planos como la heliografa necesaria
para su reproduccin.
Figura 1.17 Plotter
Lic. Elmer Alberto Len Zrate
32
1.1.10 DISPOSITIVOS DE ENTRADA Y SALIDA DE INFORMACIN
Son aquellos mediante los cuales podemos tanto accesar como introducir informacin
o instrucciones al microprocesador. Entre los ms comunes:
a) UNIDADES DE LECTURA/ESCRITURA DE DISQUETES
Definicin 1.25 Estas se especializan en leer la informacin almacenada en los disquetes,
as como escribir en estos los datos a ser almacenados. Segn su densidad de escritura ser el
tipo de disquete que podrn leer o escribir.
b) MONITORES ITERATIVOS
Definicin 1.26 Existen monitores especiales que presentan informacin como cualquier
monitor lo hace, permitiendo adems introducir informacin sealando con nuestro dedo
sobre ellos, aunque ms caros que el simple hecho de comprar un ratn, 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 telfono enviamos por cable seales anlogas que al
llegar al otro aparato se convierten en voz nuevamente, sin embargo las computadoras no son
aparatos que generen esas seales u ondas, muy por el contrario una computadora
internamente esta todo el tiempo generando interrupciones en forma de 1s y 0s o sea bits,
tambin llamada frecuencia digital.
Definicin 1.27 El Mdem es un aparato que una vez conectado uno por computadora por
un lado modula la seal binaria en ondas o seales anlogas permitiendo de sta manera
CAPITULO I: Hardware y Software
33
aprovechar la infraestructura telefnica existente en nuestro mundo para enviar por la misma
va, voz, datos, imgenes y una vez del otro lado demodula dichas seales convirtindolas de
nuevo en bits que al ser interpretados reproducen en la computadora la informacin recibida
desde el otro lado del mundo.
Aunada a sta capacidad las nuevas computadoras vienen con una tarjeta de mdem
con fax combinado, al cual le llaman fax-mdem lo cual significa que adems de poder
conectarse con cualquier computadora sincronizada con nosotros en cualquier parte del
mundo, tambin 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 mdem, porque modula de ida y demodula al recibir la imagen rastreada
- Es impresora porque vaca en papel la informacin recibida.
1.2 SOFTWARE
Dentro de los componentes bsicos, 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 desempeo humano.
Definicin 1.28 El Software son todas las instrucciones y datos que corren en mayor o
menor medida dentro del ordenador, es decir, la informacin misma, la razn del ser del
Hardware. En nuestros tiempos a medida que la magia de la electrnica ponen al alcance de
todos estas prodigiosas maquinas verdaderas prtesis mentales, mediante el abaratamiento de
Lic. Elmer Alberto Len Zrate
34
la tecnologa y por tanto de los costos, en direccin completamente opuesta aumenta la
inversin de los servicios y programas necesarios para optimizar dichos equipos.
En sus orgenes la programacin de los ordenadores era hecho slo, para y por los
mismos cientficos que las construan para propsitos muy especficos. El clculo de la
trayectoria de los proyectiles usados en la II Guerra Mundial, y posteriormente usos muy
parecidos, hasta que mucho despus que fue utilizada en el Censo de los Estados Unidos fue
reconocindose su valor en el campo administrativo donde estuvo hasta hace 2 dcadas,
cuando gracias a la Computadora Personal pasaron al dominio pblico 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 electrnica y un ser humano, ser con
miles de aos de evolucin obviamente no ha sido fcil la comunicacin entre ambos. Desde
sus orgenes los primeros diseadores y creadores de stas se dieron cuenta que necesitaban
algo ms que permitiera la fcil interpretacin de las instrucciones as como de los resultados
obtenidos, para lo cul crearon un Programa bsico que toda computadora debe cargar
primero en su memoria para poderse comunicar y comprender con un ser humano.
Definicin 1.29 El Sistema Operativo es programa bsico que se carga al momento de
encender la mquina y sirve de intrprete entre el fro lenguaje de la maquina electrnica y el
complejo idioma humano, el Sistema operativo es pues, el gobierno interno de la mquina.
En la actualidad existen varios sistemas operativos para diferentes necesidades y tipos
de computadoras, entre los ms conocidos y utilizados actualmente se encuentran los
siguientes:
CAPITULO I: Hardware y Software
35
Definicin 1.30 El MS-DOS Microsoft (Disk Operative System) es un sistema operativo
con cual de una u otra forma hemos estado ms familiarizados desde la aparicin de las
Computadoras Personales y sobre el cul trabajan la mayora de los programas usados tanto
en la pequea, mediana y grande empresa, as como en Industrias, Instituciones y hogares por
millones de gentes alrededor del mundo. Su versin ms nueva a la fecha es la 6.22
Definicin 1.31 El OS/2 WARP Diseado por IBMes el competidor ms cercano de MS-
DOS sobre todo por sus grandes capacidades de interconexin de equipos y facilidad de uso
bajo ambiente grfico.
Definicin 1.32 El Netware diseado por Novell, lder mundial en sistemas operativos
para redes de computadoras que ha conquistado al mundo de la informtica por el poder y
versatilidad de sus funciones, as como su extremada capacidad de interconectar
computadoras y recursos de tan variadas capacidades y marcas.
Definicin 1.33 El Unix es un sistema operativo de alto rendimiento utilizado actualmente
en grandes proyectos y para necesidades de intercomunicacin a nivel internacional y de gran
volumen de operaciones diarias.
En resumen, podemos afirmar que ninguna computadora obedecer las instrucciones
de ningn programa independientemente de su utilidad sin haber cargado en su memoria
dicho intrprete al momento de encenderse, ya que de esto depender su funcionamiento y
eficiencia.
APLICACIONES MS POPULARES EN EL MUNDO DE LA INFORMTICA
A diferencia de algunos aos atrs, hoy existe una infinidad de aplicaciones para
satisfacer desde diversiones o entretenimiento de nios hasta sofisticados programas de
investigacin cientfica; ms sin embargo, para las necesidades de la mayora de los mortales
Lic. Elmer Alberto Len Zrate
36
que trabajamos en Instituciones o Empresas y an para los particulares existe un nmero
preciso de aplicaciones, que como herramientas no deben faltar en ninguna computadora de
uso personal.
1.2.2 PROCESADORES DE TEXTO
Definicin 1.34 Tambin llamados Procesadores de palabras, fueron los primeros en servir
de atraccin en la adquisicin de una computadora, ya que sustituyen absolutamente el trabajo
de una tradicional maquina de escribir, a nuestras fechas han evolucionado tanto que ya slo
les falta tomar dictado, - y no les falta mucho para hacerlo pero dentro de las necesidades de
escritura actuales en la mayora 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 prrafos 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 sinnimos sin importar la
cantidad de ellas
- Permiten modificar en la marcha el escrito sin desperdiciar papel, ni tiempo.
- Se puede cambiar de opinin una vez impreso el documento y en unos segundos
cambiar completamente el estilo, diseo, formato e incluso el tipo y tamao de la letra
deseada.
- Podemos verificar la ortogrfica del documento e incluso de ciertas reas, as como
tambin buscar sinnimos relacionados con ciertas palabras o frases dudosas.
CAPITULO I: Hardware y Software
37
- Se pueden crear cartas o documentos de tipo constante, ya sea para circulares o
formatos especficos incluso de facturacin y manipularlos rpidamente.
- Analizar el documento desde distintos ngulos sin necesidad de imprimirlo.
- Permitir que el programa corrija automticamente nuestra ortografa o incluso nos
ayude a escribir ms pronto mediante palabras que va aprendiendo.
- Crear Documentos estilo periodstico a base de columnas, con grficos, imgenes o
fotografas e incluso en formato cuadricular.
- Cuentan palabras, deshacen los cambios, imprimen partes, etc.
COMPAA QUE LO PRODUCE NOMBRE Y VERSIN
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 ELECTRNICAS
Definicin 1.35 Tambin denominadas Hojas de clculo, casi junto con los procesadores
de texto han invadido toda la administracin 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 lpiz se convierte en un proceso tranquilo y sistemtico para cualquier
tarea que involucra complejas frmulas y procesos basados en anlisis, proyecciones,
presupuestos, amortizaciones, clculos bsicos pero repetidos en cantidades, etc.
Entre las capacidades de las modernas hojas de clculo, encontramos las siguientes:
- Diseo basado en la hoja tabular a base de renglones y columnas
- Rpida escritura de frmulas autocalculables
Lic. Elmer Alberto Len Zrate
38
- Inmensa cantidad de funciones automticas para necesidades financieras, cientficas,
matemticas, lgicas, de texto, etc.
- Diseo y formato fcil de corregir y ampliar
- Estilo, tipo y tamao de letra fcilmente modificables
- Manipulacin de hojas en libros de trabajo
- Implementacin avanzada de varios grficos estadsticos
- Incrustacin de texto e imgenes de diseo grfico
- Impresin inteligente fcilmente controlable
- Poder en la manipulacin de grandes cantidades de registros de informacin
- Diseo, Generacin e Impresin rpida de reportes y listados.
- Herramientas flexibles de proyeccin y anlisis para la planeacin y la oportuna toma
de decisiones
- Facilidad de uso y aprendizaje entre otras.
COMPAA QUE LA PRODUCE NOMBRE Y VERSIN
Microsoft Excel para Windows
IBM Lotus SmartSuite Lotus 123
Software Libre Open Office
1.2.4 ADMINISTRADORES DE BASES DE DATOS
Definicin 1.36 Cundo las necesidades de manejo de informacin dentro de la empresa
crecen desorbitadamente, no hay mejor herramienta que los programas de administracin de
Bases de Datos, los cules gracias a la facilidad de sus procesos nos permiten rpidamente
crear, trabajar y modificar conjuntos especficos de registros con los cuales es su momento es
muy prctico consultar datos precisos, obtener listados ordenados y extracciones directas de
CAPITULO I: Hardware y Software
39
registros basadas en criterios de bsqueda que satisfagan la necesidad inmediata del jefe del
departamento diciendo .... !!Quiero un listado de todos los clientes de la zona norte del pas,
que sean del sexo masculino, con edad mayor a 40 aos, que tengan saldo menor a N$100,000
y ventas anuales promedio, etc.
Entre sus funciones principales tenemos las siguientes:
- Permiten crear fcilmente cualquier estructura de registro y comenzar a capturar la
informacin deseada
- Mediante sofisticados pero sencillos lenguajes o procedimientos facilitan la
programacin de sistemas especficos
- Sus consultas son muy rpidas
- Permiten ordenar grandes cantidades de informacin en poco tiempo.
- Son muy tiles para las listas y reportes basados en condiciones de bsqueda.
- 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 propsito y en tiempos distintos.
- Los hay tanto para usuarios finales como para Programadores expertos
COMPAA QUE LO PRODUCE NOMBRE Y VERSIN
Microsoft Access, SQL Server
Microsoft Fox Pro 2.6 para Windows / DOS
Software Libre Mysql
IBM DB2, Informix
Oracle Oracle
Lic. Elmer Alberto Len Zrate
40
1.2.5 OTRAS APLICACIONES POPULARES EN LAS EMPRESAS
NOMBRE COMPAA QUE LO PRODUCE REA DE APLICACIN
Autocad 2011 Autodesk Diseo Arquitectnico 3D
Bancos Apemex, Compaq, Microsip Control de Bancos y conciliaciones
Caja Apemex Sistema de punto de venta
Contpaq Computacin en Accin Sistema de Contabilidad Integral
Coreldraw Corel Diseo Grfico Publicitario
MegaPak Computacin en Accin Facturacin, Inventarios, CxC y CxP
Money 2.0 Microsoft Administracin de finanzas personales
Nmina Microsip Sistema de Nmina
Organizer Lotus Organizador diario
Page Maker 4 Aldus Edicin Tipogrfica
Photoshop Adobe Edicin fotogrfica y Diseo
Ilustrator Adobe Edicin de Grficos e Imgenes
Premiere Adobe Edicin de Videos
Power Point Microsoft Presentaciones Grficas
Project 2.0 Microsoft Administracin de Proyectos
CAPITULO I: Hardware y Software
41
1.3 CONCEPTOS BASICOS
1.3.1 INFORMTICA
Definicin 1.37 Ciencia que se encarga de la organizacin y mantenimiento de la
informacin haciendo uso de las sistemas integrados de Cmputo.
1.3.2 COMPUTACIN
Definicin 1.38 Conjunto de mtodos y tcnicas que permiten administrar, manipular y
controlar en forma automtica y correcta la informacin utilizando para ello la ayuda de un
Computador
1.3.3 SECUENCIA PARA EL PROCESAMIENTO DE DATOS
Ilustracin 1.1 Procesamiento de datos
1.3.4 LENGUAJE DE PROGRAMACION
Definicin 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 travs de las cuales le
indicamos a la computadora los procesos a llevar a cabo.
1.3.5 ALGORITMO
Definicin 1.40 Un Algoritmo se puede definir como un conjunto de reglas,
procedimientos y/o instrucciones lgicas que se deben ejecutar en un orden especifico para
resolver el problema.
Lic. Elmer Alberto Len Zrate
42
El uso de los algoritmos tiene un gran valor estratgico en las computadoras, ya que ellas
pueden resolver un determinado problema despus de que se le ha dicho como resolverlo.
Todo algoritmo debe cumplir las siguientes caractersticas fundamentales:
- Un algoritmo debe ser preciso e indicar el orden de realizacin 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 algn
momento, es decir tiene un nmero determinado de pasos.
1.3.6 PROGRAMA
Definicin 1.41 Es el conjunto de instrucciones escritas en un orden lgico y codificados
en un determinado Lenguaje de Programacin, 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
producirn la ejecucin de una determinada tarea. Tambin es un medio para conseguir un fin.
1.4 RELACION DE EJERCICIOS:
Seleccionar la alternativa correcta en las siguientes preguntas:
1. Las computadoras son mquinas de procesamiento de informacin diseadas para
transformar informacin.
a) Verdadero.
b) Falso.
2. Cul de las siguientes no es una clasificacin de las computadoras?
a) Computadoras porttiles.
b) Computadoras incorporadas y de propsito especial.
CAPITULO I: Hardware y Software
43
c) Calculadoras.
d) Microcomputadoras y minicomputadoras.
3. Tienen un poder similar al de la minicomputadora, pero representan solo una fraccin
de su costo.
a) Macrocomputadora.
b) Estacin de trabajo.
c) Computadoras de propsito especial.
d) Ninguna de las anteriores.
4. Son utilizadas comnmente por bancos y aerolneas.
a) Estacin de trabajo.
b) Computadoras de propsito especial.
c) Macrocomputadoras.
d) Ninguna de las anteriores.
5. El hardware se refiere a la parte fsica de una computadora.
a) Verdadero.
b) Falso.
6. Las computadoras lleva acabo operaciones aritmticas o lgicas con la informacin,
esta tarea se realiza en el CPU y es propia de:
a) Recibir entradas.
b) Producir salidas.
c) Almacenar informacin.
d) Procesar informacin.
7. Proporciona un conjunto de teclas alfabticas, numricas, de puntuacin, de smbolos y
de control.
a) Ratn.
Lic. Elmer Alberto Len Zrate
44
b) Monitor.
c) Teclado.
d) CPU.
8. Consiste en presionar rpidamente dos veces el botn primario del ratn.
a) Clic sostenido.
b) Clic.
c) Clic arrastrado.
d) Ninguna de las anteriores.
9. Consiste en mantener presionado el botn primario del ratn y mover el ratn para
desplazar algn elemento en la pantalla.
a) Clic.
b) Clic arrastrado.
c) Clic sostenido.
d) Ninguna de las anteriores.
10. El software es:
a) El equipo fsico 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 ratn.
11. No es una categora de software:
a) Sistemas operativos.
b) Lenguajes de programacin.
c) Dispositivos de entrada.
d) Software de aplicacin.
CAPITULO I: Hardware y Software
45
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. Cul de los siguientes no es un tipo de sistema operativo de interfaz grfica?
a) MS-DOS.
b) Windows 2000.
c) Windows XP.
d) Macintosh.
14. Es un programa que traduce un lenguaje de alto nivel a lenguaje mquina 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 vnculo 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 divisin lgica de almacenamiento.
a) Verdadero
b) Falso
Lic. Elmer Alberto Len Zrate
46
17. Un archivo es un smbolo en pantalla que representa un programa, un archivo de datos
u otra entidad o funcin de la computadora.
a) Verdadero.
b) Falso.
18. Un acceso directo es un vnculo 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 smbolo en pantalla que presenta la ubicacin actual del ratn.
a) Verdadero.
b) Falso.
20. Un men es una representacin en pantalla que enlista las opciones de tareas
disponibles dentro de un programa.
a) Verdadero.
b) Falso.
47
CAPITULO II
HERRAMIENTAS DE PROGRAMACION
2.1 ANALISIS DEL PROBLEMA
Requisitos:
- Comprensin 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 informacin debe proporcionar la resolucin 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 crculo y calcular su superficie y la longitud de la circunferencia.
ANALISIS:
- Los Datos de Entrada : Radio del Circulo (Tipo de Datos REAL)
- Las Datos Salida : Superficie del Circulo Circunferencia del
Circulo
- Variables : RADIO, AREA, CIRCUNFERENCIA (Tipo REAL)
Lic. Elmer Alberto Len Zrate
48
2.2 DISEO DEL ALGORITMO
La informacin o dato proporcionada al algoritmo constituye su entrada y la
informacin producida por el algoritmo constituye su Salida.
Ejemplo 2.2
Leer el radio de un crculo y calcular su superficie y la longitud de la circunferencia.
Inicio
Ingresar valor de la Radio del crculo
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)
Definicin 2.1 Un DF es un Diagrama que utiliza los smbolos (cajas) y que tiene los pasos
del Algoritmo escritos en esas cajas unidas por una flecha denominadas lneas de flujo que
indican la secuencia en que se deben ejecutar.
CAPITULO II: Herramientas de programacin
49
SMBOLOS PRINCIPALES DE UN DIAGRAMA DE FLUJO
SIMBOLO DESCRIPCION
TERMINAL: Representa el inicio y el Final de un
programa
ENTRADA/SALIDA: Todo tipo de Introduccin de
Datos en la memoria desde entrada (Leer) o Salida
(imprimir) de informacin.
PROCESO: Cualquier tipo de operacin que pueda
originar cambio de valor almacenada en la memoria,
operaciones aritmticas, etc.
DECISIN: Indica operaciones Lgicas o de
Comparacin entre los datos.
DECISIN MULTIPLE: de acuerdo a la
comparacin que se tenga resultara una funcin.
CONECTOR: enlaza 2 o ms partes del organigrama.
LINEA DE FLUJO: indica el sentido de ejecucin de
las operaciones.
LINEA CONECTORA: Sirve para unir dos
smbolos.
LLAMADA A LA SUBRUTINA: Es un modulo
independiente del programa principal, realiza una tarea
determinada y retorna al programa principal.
Lic. Elmer Alberto Len Zrate
50
Ejemplo 2.3
Realizar el Diagrama de Flujo de la Suma de todos los nmeros pares entre 2 y 100.
Ilustracin 2.1 Diagrama de flujo de suma de pares
CAPITULO II: Herramientas de programacin
51
2.4 PSEUDOCODIGO
Definicin 2.2 Es un lenguaje de descripcin del algoritmo, esto es la traduccin de un
problema a un lenguaje de Programacin escogido por el usuario.
La ventaja de un Pseudocdigo es que al usarlo en la planificacin de un programa, el
programador se puede concentrar en la Lgica y en las estructuras de control y no
preocuparse de las reglas de un Lenguaje de Programacin.
Todo algoritmo empieza con la palabra Inicio y termina con la Palabra Fin. Entre estas
palabras se escriben las instrucciones o acciones por lnea.
Ejemplo 2.4
Pseudocdigo para determinar e imprimir el mayor valor de DOS nmeros 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
Pseudocdigo para calcular la suma de 1+2+3+....100
Inicio
Establecer CONTADOR a 1
Establecer SUMA a 0
Lic. Elmer Alberto Len Zrate
52
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 nmeros menores de 50 elevados al
cuadrado.
2. Definir el algoritmo para que encuentre la media Aritmtica de un conjunto de
nmeros hasta 100.
3. Definir el Algoritmo para contar los pares e impares hay en una relacin de 10
nmeros 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 despus de las 4 notas.
CAPITULO II: Herramientas de programacin
53
6. Definir un Algoritmo para escribir un programa que pida el ingreso de N nmeros 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 ensimo de un nmero cualquiera.
10. Definir el algoritmo para ordenar ascendentemente el ingreso de 20 nmeros enteros
positivos.
54
CAPITULO III
PROGRAMACION ESTRUCTURADA
La programacin estructurada hace los programas ms fciles de escribir, verificar,
leer y mantener. Los programas deben estar dotados de una estructura que puede ser:
- Secuenciales
- Selectivas
- Repetitivas
3.1 ESTRUCTURAS SECUENCIALES
Definicin 3.1 Es aquella en la que la una instruccin 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.
Ilustracin 3.1 Estructura Secuencial
INICIO
< INSTRUCCIN 1 >
< INSTRUCCIN 2 >
..................................
< INSTRUCCIN n >
FIN
CAPITULO III: Programacin estructurada
55
3.2 ESTRUCTURAS SELECTIVAS
Definicin 3.2 En las estructuras selectivas se evala una condicin y en funcin del
resultado de la misma se realiza una opcin u otra. Las condiciones se especifican usando
expresiones lgicas.
Las estructuras selectivas pueden ser:
- Simples
- Dobles
- Mltiples
3.2.1 ESTRUCTURA SIMPLE (SI-ENTONCES)
Ejecuta una determinada accin cuando se cumple una condicin.
Tener en cuenta:
- Si la condicin es verdadera, entonces ejecuta la accin o acciones.
- Si la condicin es Falsa, entonces no hacer nada.
Ilustracin 3.2 Estructura Selectiva Simple
Lic. Elmer Alberto Len Zrate
56
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 funcin de cmo se cumpla la condicin dada.
Ilustracin 3.3 Estructura Selectiva Simple
CAPITULO III: Programacin estructurada
57
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 (SEGN SEA-CASO DE)
La estructura de decisin mltiple evaluara una expresin que podr tomar N
valores distintos 1, 2, 3,4,..n. Segn se escoja uno de estos valores en la condicin, se
realizara una de las acciones.
PSEUDOCODIGO
SEGN SEA CONDICION HACER
Expresin 1 : Accin 1
Expresin 2 : Accin 2
Expresin 3 : Accin 3
SINO : Accin
FIN_SEGN
Lic. Elmer Alberto Len Zrate
58
PSEUDOCODIGO EN INGLES
CASE CONDICION OF
Expresin 1 : Accin 1
Expresin 2 : Accin 2
Expresin 3 : Accin 3
OTHERWISE // ELSE
Action
END_CASE
OBSERVACIONES DE LA ALTERNATIVA MULTIPLE
- Algunos lenguajes de programacin delimitan las acciones para las instrucciones
compuestas con las palabras Inicio Fin (pascal Begin End).
- Los valores que toman las expresiones no siempre sern consecutivos o nicos,
tambin se pueden considerar rangos de constantes numricas o de caracteres.
Segn sea expresin hacer
2, 4, 6,8: escribir nmeros pares
1, 2, 3, 5,7: escribir nmeros impares
Fin_segun
3.3 ESTRUCTURAS REPETITIVAS
Definicin 3.3 Son las estructuras que repiten una secuencia de instrucciones un nmero
determinado de veces y se denominan Bucles. Repite la misma secuencia de acciones un
nmero determinado de veces.
CAPITULO III: Programacin estructurada
59
3.3.1 ESTRUCTURA MIENTRAS-HACER (WHILE - DO)
Permite al programa llevar a cabo la ejecucin secuencial de un proceso
mientras la condicin establecida se cumpla o sea verdad.
Ilustracin 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
Lic. Elmer Alberto Len Zrate
60
3.3.2 ESTRUCTURA REPETIR HASTA (REPEAT - UNTIL)
Permite al programa llevar a cabo la ejecucin secuencial de un proceso
mientras que la condicin establecida no se cumpla.
Cuando la condicin se cumpla se continuara la ejecucin del programa
despus de HASTA.
Ilustracin 3.5 Estructura Repetitiva Repetir - Hasta
ACCIONES O
INSTRUCCIONES
CONDICION
FALSO
VERDADERO
PSEUDOCODIGO
REPETIR
INSTRUCCIONES
HASTA <CONDICION>
PSEUDOCODIGO EN INGLES
REPEAT
INSTRUCCIONES
UNTIL <CONDICION>
CAPITULO III: Programacin estructurada
61
3.3.3 ESTRUCTURA DESDEHACER O PARAHACER (FOR.TO.DO)
Permite ejecutar un bloque de instrucciones un numero especifico de veces,
luego se continuara la ejecucin del programa de FIN_PARA.
Ilustracin 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
Lic. Elmer Alberto Len Zrate
62
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 nmero entero y genere la tabla de multiplicar de dicho nmero.
4. Calcular:
! ! 2
1
2
n
n x
x + + +
5. Calcular la suma de los N nmeros enteros positivos y terminar con nmero negativo.
6. Sumar los nmeros 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 nmero 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 aos
- 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 aos por su fecha de nacimiento
9. Representar las siguientes condiciones en forma de alternativa compuesta en
pseucodigo y diagrama de flujo:
CAPITULO III: Programacin estructurada
63
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 aos
10. Hacer su diagrama de flujo y pseudocdigo para la suma de los N primeros nmeros
enteros cuadrados 1
2
+2
2
+3
2
...n
2
11. Hacer su diagrama de flujo y pseudocdigo para calcular la planilla de una empresa, se
ingresa el nmero de los empleados y para cada uno de ellos se ingresa el nmero 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 pseudocdigo 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 pseudocdigo para determinar el mayor valor ingresado
de 5 nmeros enteros.
14. Hacer su diagrama de flujo y pseudocdigo para leer 100 nmeros ingresados.
Determinar la media de los nmeros positivos y la media de los nmeros negativos.
15. Pseudocdigo que pida el ingreso de un nmero para el da de la semana e indique a
que da se refiere.
16. Se desea convertir las calificaciones A,B,C,D,E a calificaciones numricas
14,13,12,11,10 respectivamente
17. Pseudocdigo que nos indique si un numero entero tiene 1, 2,3 o ms dgitos
considerar los negativos.
Lic. Elmer Alberto Len Zrate
64
18. Realizar un Pseudocdigo que solo permita el ingreso de nmeros enteros y cuando
ingrese un impar se termina el ingreso.
19. Desarrollar un Pseudocdigo 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 Pseudocdigo 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 mximo 3 intentos.
65
CAPITULO IV
ESTRUCTURAS DE DATOS
4.1TIPOS DE DATOS
Definicin 4.1 El Tipo de Datos de una variable es el conjunto de valores que dicha
variable puede asumir
Todos lo Lenguajes de Programacin de alto nivel tienen incorporados Tipos de Datos
bsicos tales como enteros, reales, caracteres y lgicos.
El tipo de Datos de una variable en un programa para un lenguaje de alto nivel
requiere de una Declaracin 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 sern
enteros.
4.1.1 DATOS NUMERICOS
Definicin 4.2 Es el conjunto de los valores numricos. Estos pueden representarse en dos
formas distintas:
- TIPO NUMERICO ENTERO (INTEGER )
- TIPO NUMERICO REAL (REAL)
Lic. Elmer Alberto Len Zrate
66
A) ENTEROS
Definicin 4.3 El tipo entero es un subconjunto finito de los nmeros enteros. Los enteros
son nmeros completos, no tienen componentes fraccionarios o decimales y pueden ser
negativos o positivos. Ejm: 5, -5
Los nmeros enteros mximos y mnimos de una computadora suelen ser 32768 a
+32767, los nmeros enteros fuera de este rango no se suelen representar como nmeros
enteros, sino como reales, en algunos lenguajes de Programacin hay excepciones.
B) REALES
Definicin 4.4 El tipo real consiste en un subconjunto de los nmeros reales. Los nmeros
reales siempre tienen un punto decimal y pueden ser positivos o negativos. Un nmero real
consta de un entero y una parte decimal. Ejm:
0.08 3739.41
0.09 52.321
En aplicaciones cientficas se requiere una representacin especial para manejar
nmeros muy grandes, como la masa de la tierra o muy pequeos como la masa del electrn.
Una PC solo puede representar un nmero fijo de dgitos. Este numero puede variar de
una maquina con otra, siendo ocho dgitos un numero tpico. Este lmite provocara problemas
para representar algunos nmeros como:
9876543210 0.00000000387
Existe un tipo de representacin denominado Notacin exponencial o cientfica y que
se utiliza para nmeros muy grandes o muy pequeos. As:
CAPITULO IV: Estructuras de datos
67
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 * 10
20
Ejemplo 4.2
Si el nmero fuera 0.0000000000123456
Y luego en forma de potencia de 10 1.23456 * 10
-11
4.1.2. DATOS LOGICOS (BOOLEANOS)
Definicin 4.5 El tipo Lgico 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 segn sea el valor del nmero.
4.1.3 DATOS TIPO CARCTER
Definicin 4.6 Es el conjunto finito y ordenado de valores de caracteres que la
computadora reconoce, un dato tipo carcter contiene un solo carcter.
Los caracteres que reconocen las diferentes computadoras no son estndar, sin embargo, la
mayora reconoce los siguientes caracteres alfabticos y numricos:
CARACTERES ALFABETICOS: (A..... Z) (a..... z)
CARACTERES NUMERICOS: (1, 2, 3.... 9, 0)
Lic. Elmer Alberto Len Zrate
68
CARACTERES ESPECIALES: (+ - * / ^, < > $...)
4.2 ESTRUCTURA DE DATOS
Definicin 4.7 Es una coleccin de datos que pueden ser caracterizados por su
organizacin y las operaciones que se definan en ella.
Estticos: arreglos, registro, archivo, conjunto, cadena.
Dinmicos: Listas, Pilas, Colas, Listas enlazadas, rboles.
4.2.1 ESTRUCTURA DE DATOS ESTATICAS
A) ARREGLOS
Definicin 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 homogneo.
1.- ARREGLO UNIDIMENSIONAL
Definicin 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 travs de un conjunto de ndices.
Nombre [1] Nombre [2] Nombre [3] . . . Nombre [n]
Ejemplo de Arreglo Unidimensional de N elementos
Notacin:
Nombre (1), nombre (2)...
Nombre [1], nombre [2]...
CAPITULO IV: Estructuras de datos
69
Observacin 4.1
El arreglo unidimensional tiene un solo nombre de variable que representa a todos los
elementos.
Observacin 4.2
En algunos casos el ndice del arreglo empieza en 0 1
Observacin 4.3
El ndice indica la posicin ordenada de cmo se ingresan los datos
Observacin 4.4
El nmero 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
Lic. Elmer Alberto Len Zrate
70
El valor mnimo permitido de un vector se denomina LIMITE INFERIOR del vector
y el valor mximo permitido se denomina LIMITE SUPERIOR.
Cada elemento de un vector se puede procesar como si fuese una variable simple al
ocupar una posicin 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
CAPITULO IV: Estructuras de datos
71
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]
SUMANUMERO [1]+NUMERO[5] Almacena la suma de NUMERO[1] y
NUMERO[2] en la variable SUMA.
SUMASUMA+NUMERO[5] Aade 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 resolucin de
un problema son:
a) ASIGNACION
La asignacin tiene la siguiente forma:
NOTAS [ 14 ] 20 Asigna El Valor 20 Al Elemento 14 Del Arreglo
Lic. Elmer Alberto Len Zrate
72
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 posicin 1 del arreglo A
- Escribir ( A [2] )Imprimir el valor de la posicin 2 del arreglo A
- I=19 Leer ( A [i] ) Ingrese un valor para la posicin 19
- i=1, i=2, i=3 Escribir (A[i]) Imprime 3 valores si tuviera una
Funcin 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 operacin de efectuar una accin general sobre todos los elementos del
arreglo se la denomina RECORRIDO DEL VECTOR.
CAPITULO IV: Estructuras de datos
73
Ejemplo 4.7
Pseudocdigo para permitir el INGRESO de 5 nmeros
Inicio
PARA ndice=1 HASTA 5 HACER
LEER nmeros [ndice]
FIN_PARA
Fin
Ejemplo 4.8
Pseudocdigo para IMPRIMIR los 5 nmeros ingresados anteriormente
Inicio
PARA ndice 1 HASTA 5 HACER
ESCRIBIR nmeros[indice]
FIN_PARA
Fin
Ejemplo 4.9
Pseudocdigo para ingresar 20 nmeros utilizando MIENTRAS O REPETIR,
CONTADORES.
INICIO
ndice 1
MIENTRAS ndice < 21 hacer
LEER nmero[ ndice ]
Lic. Elmer Alberto Len Zrate
74
ndice ndice + 1
FIN_MIENTRAS
FIN
d) AADIR
Un arreglo llamado PROMEDIO se ha dimensionado a seis elementos pero
solo han sido llenados cuatro valores, se podrn aadir dos elementos ms con una
simple operacin de asignacin.
PROM [1] PROM [2] PROM [3] PROM [4] PROM [5] PROM [6]
10 11 20 11
En la realizacin del Pseudocdigo:
PROM [5] 20
PROM [6] 10
e) INSERTAR
Coloca uno o ms elementos en una determinada posicin del arreglo.
Ejemplo 4.10
Pseudocdigo para el arreglo llamado LETRAS de 8 elementos, Agregar el elemento
CC en la posicin 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
CAPITULO IV: Estructuras de datos
75
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 operacin 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:
Definicin 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 subndices 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
Lic. Elmer Alberto Len Zrate
76
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 Notacin Algortmica 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
CAPITULO IV: Estructuras de datos
77
b) ARREGLOS MULTIDIMENSIONALES
Puede ser definido de tres, cuatro o ms dimensiones.
Ejemplo 4.11
Un arreglo de tres dimensiones puede tener:
- 5 Cursos de un alumno
- Tipo de sexo
- 6 ciclos aos
B) REGISTROS
Definicin 4.11 Es una coleccin de informacin, normalmente relativa a una entidad
particular. Un registro es una coleccin de campos lgicamente relacionado, que pueden ser
tratados como una unidad por algn programa.
Observacin 4.6
Este tipo de arreglos se caracterizan por tener un solo ndice.
Observacin 4.7
A los espacios reservados para cada numeracin se les conoce con el nombre de
CAMPOS y a la disposicin consecutiva de campos se denomina REGISTRO.
Observacin 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].cdigo abc0001
Lic. Elmer Alberto Len Zrate
78
A [1].Nombre Oscar Ibez
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
CAPITULO IV: Estructuras de datos
79
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
Definicin 4.12 Un archivo es un conjunto ordenado de datos que tienen entre s una
relacin lgica y estn almacenados en un soporte de informacin adecuado para la
comunicacin con el computador. En un archivo se almacena informacin 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 ms simples denominados
Lic. Elmer Alberto Len Zrate
80
registros. Todos los registros de un archivo son del mismo tipo, es decir, un archivo est
formado por un conjunto de registros homogneos. Cada registro est formado por campos
que contienen informacin referente a un elemento o caracterstica en particular dentro del
archivo. Adems 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.
CLASIFICACIN DE LOS ARCHIVOS SEGN SU USO
- Archivos permanentes.- Contienen informacin que vara poco a lo largo del tiempo.
- Archivos de movimientos.- En ellos se almacena la informacin 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
duracin de la ejecucin de un programa y se utilizan como auxiliares de las
anteriores.
ORGANIZACIN DE ARCHIVOS
Al disear 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
CAPITULO IV: Estructuras de datos
81
1. ORGANIZACIN SECUENCIAL
Definicin 4.13 Es aqulla en la cual los registros ocupan posiciones consecutivas de
memoria, y slo 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. ORGANIZACIN DIRECTA O ALEATORIA
Definicin 4.14 En un archivo con esta organizacin, tambin denominada relativa, las
informaciones se colocan y se acceden aleatoriamente mediante su posicin, es decir,
indicando el lugar relativo que ocupan dentro del conjunto de posiciones posibles.
En esta organizacin se pueden leer y escribir registros, en cualquier orden y en
cualquier lugar.
Presenta el inconveniente de que es tarea del programador establecer la relacin entre
la posicin que ocupa un registro y su contenido; adems 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.
Lic. Elmer Alberto Len Zrate
82
Acceso directo
Registro 2 Registro 1 Registro 5
Posicin 1 Posicin 2 Posicin 3 Posicin 4 Posicin 5
3. ORGANIZACIN SECUENCIAL INDEXADA
Un archivo con esta organizacin consta de 3 reas:
- rea de ndices
- rea primaria
- rea de excedentes (overflow)
Definicin 4.15 El rea primaria contendr los registros de datos, clasificados en orden
ascendente por su campo clave.
Definicin 4.16 El rea de ndices es un archivo secuencial creado por el sistema, en el
que cada registro establece una divisin (segmento) en el rea primaria y contiene la direccin
de comienzo del segmento y la clave ms 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 bsqueda de un captulo de un libro a partir de su ndice.
Definicin 4.17 El rea de excedentes para aadir nuevos registros que no pueden ser
colocados en el rea primaria cuando se produce una actualizacin del archivo.
Presenta la ventaja de un rpido acceso por medio de la clave del registro y adems el
sistema se encarga de relacionar la posicin de cada registro con su contenido por medio del
rea de ndices.
CAPITULO IV: Estructuras de datos
83
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
despus de sucesivas actualizaciones.
rea de ndices
01
AC
04
CH
06
GF
rea primaria
AA - AB - AC - BC - CH - FA - GF -
01 02 03 04 05 06
rea de excedentes
FM - AN -
OPERACIONES SOBRE ARCHIVOS
CREACIN
Definicin 4.18 Consiste en la escritura o grabacin en un medio de almacenamiento de
todos los registros que van a formar el archivo
COPIA
Definicin 4.19 Consiste en crear un nuevo archivo como duplicacin de otro existente.
CONSULTA
Definicin 4.20 Se realiza para obtener el contenido de uno o varios registros. En muchos
casos ir precedida por la bsqueda de los mismos.
Lic. Elmer Alberto Len Zrate
84
CLASIFICACIN
Definicin 4.21 Es la operacin consistente en reubicar los registros de tal forma que
queden ordenados con respecto a los valores de un campo que denominamos clave de
ordenacin.
CONCATENACIN
Definicin 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 continuacin todos los del
segundo.
INTERSECCIN
Definicin 4.23 Dados dos archivos de igual estructura se trata de obtener otro en el que
figuren lo registros comunes a ambos.
FUSIN O MEZCLA
Definicin 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 ordenacin.
PARTICIN
Definicin 4.25 Consiste en descomponer un archivo en dos, atendiendo a alguna
caracterstica de sus registros.
CAPITULO IV: Estructuras de datos
85
ACTUALIZACIN
Definicin 4.26 Es la operacin de modificar un archivo por medio de un archivo de
movimientos, conteniendo altas, bajas y modificaciones que hay que realizar sobre el archivo
maestro.
REORGANIZACIN
Definicin 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 ocupacin de la memoria, liberando la que no estaba aprovechada.
BORRADO
Definicin 4.28 Eliminacin 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 nmero de
vocales no acentuadas que aparecen en un texto. Se nos podra ocurrir inmediatamente, ir
tomando el texto carcter a carcter, aplicarle la funcin UPCASE y decidir si se trata de
alguno de los caracteres 'A', 'E', 'I', 'O','U'. En este caso, incrementaramos un contador y
pasaramos a analizar el siguiente carcter; en caso contrario, pasaramos directamente al
siguiente carcter.
Ejemplo 4.12
Codificacion en Pascal
FOR C:=1 TO LENGTH (Texto) DO
Lic. Elmer Alberto Len Zrate
86
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, sera ms cmodo aislar el conjunto de caracteres 'A', 'E', 'I', 'O' y 'U' y,
para cada carcter del texto, decidir si pertenece o no al conjunto de vocales:
Ejemplo 4.13
Para cada carcter Texto[C] ....
Si UPCASE (Texto[C]) pertenece a VOCALES, entonces ..
Incrementar contador de vocales,
En caso contrario, no realizar ninguna accin.
Se puede hacer esto en Turbo Pascal ? La respuesta es s, mediante el tipo de dato
estructurado CONJUNTO (SET en ingls).
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
tamao 1 byte.
CAPITULO IV: Estructuras de datos
87
Para definir una constante de tipo CONJUNTO, despus 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) vlidos seran:
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 obtendra el mismo resultado si la especificacin 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 definicin de un conjunto, los elementos, o algunos de los elementos
constituyentes son consecutivos, se puede utilizar una notacin 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.
Lic. Elmer Alberto Len Zrate
88
Para declarar variables de tipo CONJUNTO, despus 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;
Seran declaraciones vlidas de variables de tipo SET. LETRAS es una variable que
podr contener cualquier conjunto de caracteres; NUMERO podr contener cualquier
conjunto de nmeros que pertenezcan al rango 0..255; MAYUS podr contener cualquier
conjunto de caracteres pertenecientes al rango 'A'..'Z', DECEN cualquier conjunto de nmeros
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 ningn conjunto concreto: podemos decir que estn vacas. 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 vaco (empty set, en ingls) hasta el conjunto completo.
La carga con un conjunto concreto de elementos de una variable de tipo SET, se realiza
con la instruccin de asignacin. As, las variables declaradas anteriormente se podran cargar
Ejemplo 4.17
LETRAS := ['A','E','I','O','U'];
NUMERO := [1..50,75,91];
CAPITULO IV: Estructuras de datos
89
MAYUS := ['A','B','S'];
DECEN := [10,20,30,40,50,60,70,80,90];
BOOLE := []; { conjunto vaco }
Como hemos dicho, el tipo base no puede tener ms 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 razn 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 algn tipo abs-tracto con ms de 256 valores enumerados.
Ya sabemos definir constantes y declarar variables de tipo SET. Tambin 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 tambin 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.
Lic. Elmer Alberto Len Zrate
90
OPERADORES RELACIONALES PARA EL TIPO SET
Con el tipo SET se pueden utilizar los siguientes operadores binarios de comparacin
(que por tanto, dan resultado BOOLEAN), con los siguientes significados:
OPERADOR OPERACION TIPO DE OPERANDOS
=
<>
<=
>=
IN
Igualdad de Conjuntos
Desigualdad de Conjuntos
Subconjunto de
Superconjunto de
Pertenencia a
Tipos Set compatibles
Tipos Set compatibles
Tipos Set compatibles
Tipos Set compatibles
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 slo si A y B contienen exactamente los mismos elementos; en
caso contrario resulta FALSE.
ii) A <> B : es TRUE si y slo si A y B no contienen exactamente los mismos elementos; en
caso contrario resulta FALSE.
iii) A <= B : es TRUE si y slo si cada miembro de A lo es tambin de B; i.e., si A
est inclu-do en B (A es subconjunto de B).
CAPITULO IV: Estructuras de datos
91
iv) A >= B : es TRUE si y slo si cada miembro de B lo es tambin 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, tendramos:
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 smbolos +, - y *, de los operadores
aritmticos, que aplicados a operandos de tipos SET compatibles adquieren los siguientes
significados:
Lic. Elmer Alberto Len Zrate
92
OPERADOR OPERACION TIPO DE OPERANDOS
+
-
*
Unin de Conjuntos
Diferencia de Conjuntos
Interseccin de Conjuntos
Tipos Set compatibles
Tipos Set compatibles
Tipos Set compatibles
El resultado de estas operaciones sigue las reglas de la lgica de conjuntos: si A y B son
SET's compatibles, entonces:
i) A + B : resulta un conjunto formado por los elementos que estn en A, en B o en
ambos conjuntos.
ii) A - B : resulta un conjunto formado por los elementos que estn en A y no estn en
B.
iii) A * B : resulta un conjunto formado por los elementos que estn simultneamente
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
Definicin 4.29 Una cadena de caracteres es una secuencia de cero o ms smbolos, que
incluyen letras del alfabeto, dgitos y caracteres especiales.
CAPITULO IV: Estructuras de datos
93
El juego de caracteres:
Los Lenguajes de Programacin utilizan juego de caracteres para comunicarse con las
computadoras.
Los cdigos de comunicacin con las PC son 2:
ASCII (American Standard Code for Information Interchange)
El cdigo Ascii bsico utiliza 7 bits para cada carcter a representar que supone a 128
caracteres distintos, el cdigo Ascii ampliado utiliza 8 bits y en este caso consta de 256
caracteres.
El cdigo ASCII se compone de los siguientes tipos de caracteres:
- Alfabticos (a,b,c...z, A,B,C...Z)
- Numricos (0,1,2,3,4,5,6,7,8,9)
- Especiales (+,-,*, /, {,}, [,], <,>...)
CARACTERES ASCII PRINCIPALES O MS USADOS
VALOR ASCII CARCTER TECLA VALOR ASCII CARCTER 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
Lic. Elmer Alberto Len Zrate
94
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)
CAPITULO IV: Estructuras de datos
95
Utiliza 8 bits por carcter y tambin consta de 256 caracteres, solo es utilizado por la
firma IBM y sus componentes.
Nota:
En general, un carcter de cualquier tipo ocupara un byte de almacenamiento de
memoria.
1. CADENAS DE LONGITUD FIJA
Definicin 4.30 Son cadenas con longitud declarada al inicio de la Programacin en la cual
cuenta blancos a la izquierda o derecha o en la separacin de letras.
V
V
I
I
S
S
U
U
A
A
L
L
B
B
A
A
S
S
I
I
C
C
V
V
I
I
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
1
10
1
11
1
12
1
13
1
14
1
15
1
16
1
17
1
18
1
19
2
20
Dimensin de la Cadena: 20
2. CADENAS DE LONGITUD VARIABLE CON UN MAXIMO
Definicin 4.31 Son aquellas que cuentan con dos campos uno contiene la Longitud de la
cadena y otro la longitud actual.
1
17
1
15
V
V
I
I
S
S
U
U
A
A
L
L
B
B
A
A
S
S
I
I
C
C
V
V
I
I
DONDE:
17 es la longitud mxima
Lic. Elmer Alberto Len Zrate
96
15 es la longitud actual del Arreglo
3. CADENAS DE LONGITUD INDEFINIDA
Definicin 4.32 Son aquellas que se unen a travs de un puntero estas listas contienen
caracteres empaquetados de la forma (2/elemento carcter).
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 ms 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
Definicin 4.33 La Longitud de la cadena es el nmero de caracteres de la cadena.
CAPITULO IV: Estructuras de datos
97
Ejemplo 4.21
M i c r o s o f t V i s u a l S t u d i otiene 23 caracteres
La operacin de determina la longitud de la cadena se representara por la funcin
cuyo formato es:
LONGITUD (Cadena de Caracteres)
Dicha formula tiene acceso a datos tipo carcter pero el resultado ser
numrico.
Ejemplos:
LONGITUD (MICROSOFT VISUAL STUDIO') 23 caracteres
LONGITUD ( ') 3 caracteres
LONGITUD ( ESTRUCTURA DE DATOS) 21 caracteres
(19 letras) y (3 espacios)
Observacin 4.9
En consecuencia el resultado de la longitud de una cadena de caracteres es
Entero se pueden realizar expresiones Aritmticas con el.
Ejemplo 4.22
10 + 15 + longitud ( ESTRUCTURA DE DATOS )
4 + 5 * 2 + longitud (visual basic) + longitud ( )
b) COMPARACION
Definicin 4.34 Los criterios de comparacin de cadenas se basan en el orden
numrico del cdigo ASCII como cdigo de referencia:
Lic. Elmer Alberto Len Zrate
98
Ejemplo 4.23
- A > B
- A = a
COMPARACION DE IGUALDAD: Utilizar el Signo Igual
- AREVALO = AREVALO verdadero
- AREVALO = Arvalo falso
- AREVALO = Arvalo falso
Ejemplo 4.24
COMPARACION DE DESIGUALDAD: Utilizar <>
- Arvalo < AREVALO
- Cceres > Arvalo
- AREVALO > Arvalo
c) CONCATENACION
Definicin 4.35 Es la operacin que rene varias cadenas de caracteres en una
sola, pero conservando el orden en que se les llame o invoque.
Mayormente los smbolos ms usados son: & + // o
MICROSOFT + VISUAL + BASIC MICROSOFTVISUALBASIC
MICROSOFT & VISUAL &BASIC MICROSOFT VISUAL BASIC
Si:
A = Microsoft B=Visual C=Basic
D=A+ +B+ +C
CAPITULO IV: Estructuras de datos
99
d) EXTRACCION DE SUBCADENAS
Definicin 4.36 Es aquella que permite la extraccin de una parte especfica de una
cadena llamndose as Subcadena.
Utilizar la siguiente funcin:
SUBCADENA (Cadena , Posicin Inicial, longitud de la subcadena)
En este caso la Subcadena estar compuesta por la cantidad de caracteres que
extraiga desde la posicin actual y la longitud de la misma.
SUBCADENA (Cadena , Posicin Inicial)
En este caso la Subcadena estar formado por caracteres de la cadena desde la
posicin inicial hacia al final de la misma.
Ejemplo 4.25
Subcadena (abcdefg, 2,4) bcde
e) BUSQUEDA DE INFORMACION
Definicin 4.37 Localiza si una subcadena forma parte de la cadena, devolviendo
para este caso la posicin 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
Definicin 4.38 Se declara una variable del tipo a cambiar y en la programacin se
iguala a la variable cuyo valor es lo contrario.
Lic. Elmer Alberto Len Zrate
100
Funcin:
Cadena = Funcin Cambiante a cadena (valor numrico)
Numero = Funcin cambiante a numero (Valor de texto)
EN C: <STDLIB.H> ATOI (CADENA) ITOA, FCVT
EN BASIC:
- VAL: Devuelve los nmeros contenidos en una cadena.
VAL (cadena)
- STR: Devuelve la representacin de cadena en nmeros.
STR (numero)
g) INSERTAR CADENAS
Definicin 4.39 Inserta una subcadena dentro de una cadena ms larga = y en
determinada posicin.
Sintaxis: INSERTAR (Cadena, posicin, Subcadena)
Idea: Si el texto es: ABCD El nuevo texto sera: ABXXCD
Algoritmo para insertar cadenas:
Inicio
Devolver (Subcadena (Cadena, 1, posicin-1) + cadena a insertar + Subcadena
(cadena, posicion, longitud (cadena)-Posicion+1))
Fin
CAPITULO IV: Estructuras de datos
101
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
INFORMACIN
Subcadena (cadena, 1, (12-1)) ESTRUCTURA_
Cadena a insertar DE LA_
Subcadena (cadena, 12, (22-12+1) INFORMACION
h) BORRAR CADENAS
Definicin 4.40 Elimina determinados caracteres de cuerdo a una posicin y la
cantidad de caracteres a borrar.
Sintaxis: BORRAR (Cadena, posicin, Longitud a eliminar)
Idea: Si el texto es: ABCD El nuevo texto ser: AD
Algoritmo para BORRAR cadenas:
Inicio
Devolver (Subcadena (Cadena, 1, posicin - 1) +
Subcadena (cadena, posicion+longitud, Longitud (cadena) posicinlongitud+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
Lic. Elmer Alberto Len Zrate
102
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
Definicin 4.41 Una lista se define como una serie de N elementos E
1
, E
2
,..., E
N
, ordenados
de manera consecutiva, es decir, el elemento E
k
(que se denomina elemento k-simo) es previo
al elemento E
k+1
. Si la lista contiene 0 elementos se denomina como lista vaca.
Las operaciones que se pueden realizar en la lista son: insertar un elemento en la
posicin k, borrar el k-simo elemento, buscar un elemento dentro de la lista y preguntar si la
lista esta vaca.
CAPITULO IV: Estructuras de datos
103
Una manera simple de implementar una lista es utilizando un arreglo. Sin embargo, las
operaciones de insercin 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 implementacin ms eficiente
del TDA se logra utilizando listas enlazadas.
A continuacin se presenta una implementacin en Java del TDA utilizando listas
enlazadas y sus operaciones asociadas:
- estaVacia (): devuelve verdadero si la lista esta vaca, falso en caso contrario.
- insertar(x, k): inserta el elemento x en la k-sima posicin de la lista.
- buscar(x): devuelve la posicin 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 implementacin con listas enlazadas es necesario tener en cuenta algunos
detalles importantes: si solamente se dispone de la referencia al primer elemento, el aadir o
remover en la primera posicin es un caso especial, puesto que la referencia a la lista enlazada
debe modificarse segn la operacin realizada. Adems, 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 implementacin de lista enlazada con
nodo cabecera. Con esto, todos los elementos de la lista tendrn un elemento previo, puesto
Lic. Elmer Alberto Len Zrate
104
que el previo del primer elemento es la cabecera. Una lista vaca corresponde, en este caso, a
una cabecera cuya referencia siguiente es null.
Ilustracin 4.1 Esquema de una lista
Los archivos NodoLista.java, IteradorLista.java y Lista.java contienen una
implementacin 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 posicin:O(k).Se puede hacer en O(1)?
- Buscar elemento x: O(N) (promedio).
B) PILAS
Definicin 4.42 Una pila (stack o pushdown en ingls) es una lista de elementos de la cual
slo se puede extraer el ltimo elemento insertado. La posicin en donde se encuentra dicho
elemento se denomina tope de la pila. Tambin se conoce a las pilas como listas LIFO (LAST
IN - FIRST OUT: el ltimo que entra es el primero que sale).
CAPITULO IV: Estructuras de datos
105
Ilustracin 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 ingls).
- desapilar (): retorna el elemento que se encuentre en el tope de la pila y lo elimina de
sta (pop en ingls).
- tope (): retorna el elemento que se encuentre en el tope de la pila, pero sin eliminarlo
de sta (top en ingls).
- estaVacia (): retorna verdadero si la pila no contiene elementos, falso en caso
contrario (isEmpty en ingls).
Observacin 4.10
Algunos autores definen desapilar como sacar el elemento del tope de la pila sin
retornarlo.
Lic. Elmer Alberto Len Zrate
106
IMPLEMENTACIN DEL TDA PILA
A continuacin 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.- IMPLEMENTACIN 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 posicin del tope de la
pila, lo cual permitir realizar las operaciones de insercin y borrado, y tambin permitir
saber si la pila esta vaca, 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; /mximo numero de elemento en la pila
public PilaArreglo()
{
arreglo=new Object[MAX_ELEM];
tope=-1; // inicialmente la pila esta vaca
}
public void apilar(Object x)
{
CAPITULO IV: Estructuras de datos
107
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()
Lic. Elmer Alberto Len Zrate
108
{
if (tope==-1)
{
return true;
}
else
{
return false;
}
}
}
El inconveniente de esta implementacin es que es necesario fijar de antemano el
nmero mximo 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 ms
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;
}
CAPITULO IV: Estructuras de datos
109
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.- IMPLEMENTACIN UTILIZANDO LISTAS ENLAZADAS
En este caso no existe el problema de tener que fijar el tamao mximo de la pila
(aunque siempre se est acotado por la cantidad de memoria disponible!). La implementacin
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
vaca.
class PilaLista
{
Lic. Elmer Alberto Len Zrate
110
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;
CAPITULO IV: Estructuras de datos
111
}
}
public boolean estaVacia()
{
return lista==null;
}
}
Dependiendo de la aplicacin que se le de a la pila es necesario definir que accin
realizar en caso de que ocurra overflow (rebalse de la pila) o underflow (intentar desapilar
cuando la pila esta vaca). Java posee un mecanismo denominado excepciones, que permite
realizar acciones cuando se producen ciertos eventos especficos (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 funcin F realiza un llamado recursivo
dentro de su cdigo, lo que se ilustra en el siguiente esquema:
Lic. Elmer Alberto Len Zrate
112
Ilustracin 4.3 Esquema de recursividad
Si la llamada recursiva es lo ltimo que hace la funcin 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 programacin, 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) // versin recursiva
{
if (j<a.length)
{
System.out.println(a[j]);
imprimir(a, j+1); // tail recursin
}
}
void imprimir(int[] a, int j) // versin iterativa
{
while (j<a.length)
{
System.out.println(a[j]);
CAPITULO IV: Estructuras de datos
113
j=j+1;
}
}
En el caso general, cuando el llamado recursivo se realiza en medio de la funcin F, la
recursin 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)
// Versin recursiva
void preorden(Nodo nodo)
{
if (nodo!=null)
{
System.out.print(nodo.elemento);
preorden(nodo.izq);
preorden(nodo.der);
}
}
// Primera versin iterativa
void preorden(Nodo nodo)
{
Lic. Elmer Alberto Len Zrate
114
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 versin 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)
{
CAPITULO IV: Estructuras de datos
115
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 ms eficientes que los recursivos, la
eliminacin de recursividad (excepto en el caso de tail recursion) le quita claridad al cdigo
del programa. Por lo tanto:
- A menudo es conveniente eliminar el tail recursion.
- Un mtodo recursivo es menos eficiente que uno no recursivo, pero slo en pocas
oportunidades vale la pena eliminar la recursin.
Lic. Elmer Alberto Len Zrate
116
C) COLAS
Definicin 4.43 Una cola (queue en ingls) 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.
Tambin se conoce a las colas como listas FIFO (FIRST IN - FIRST OUT: el primero que
entra es el primero que sale).
Ilustracin 4.4 Esquema de cola
Las operaciones bsicas en una cola son:
- encolar(x): inserta el elemento x al final de la cola (enqueue en ingls).
- sacar (): retorna el elemento que se ubica al inicio de la cola (dequeue en ingls).
- estaVacia (): retorna verdadero si la cola esta vaca, falso en caso contrario.
Al igual que con el TDA pila, una cola se puede implementar tanto con arreglos como
con listas enlazadas. A continuacin se ver la implementacin usando un arreglo.
Las variables de instancia necesarias en la implementacin son:
- primero: indica el ndice de la posicin del primer elemento de la cola, es decir, la
posicin el elemento a retornar cuando se invoque sacar.
CAPITULO IV: Estructuras de datos
117
- ultimo: indica el ndice de la posicin 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 cuntos elementos posee la cola. Definiendo MAX_ELEM como el
tamao mximo del arreglo, y por lo tanto de la cola, entonces la cola esta vaca si
numElem==0 y est llena si numElem==MAX_ELEM.
Ilustracin 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 despus de insertar un elemento el
ndice ultimo == MAX_ELEM, entonces se asigna ultimo = 0, y los siguientes elementos
sern insertados al comienzo del arreglo. Esto no produce ningn efecto en la lgica 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 implementacin
con arreglo circular, y la forma ms fcil de implementarlo es haciendo la aritmtica de
subndices mdulo MAX_ELEM.
Lic. Elmer Alberto Len Zrate
118
Ilustracin 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;
CAPITULO IV: Estructuras de datos
119
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 aplicacin, se debe definir qu hacer en
caso de producirse OVERFLOW o UNDERFLOW.
Con esta implementacin, todas las operaciones del TDA cola tienen costo O (1).
Lic. Elmer Alberto Len Zrate
120
D) LISTAS ENLAZADAS
Definicin 4.44 En Ciencias de la Computacin, 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 eliminacin 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.
CAPITULO IV: Estructuras de datos
121
TIPOS DE LISTAS ENLAZADAS
1.-LISTAS SIMPLES ENLAZADAS
Definicin 4.45 La lista enlazada bsica 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 vaca, si
es el ltimo nodo.
Ilustracin 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
Definicin 4.46 Un tipo de lista enlazada ms sofisticado es la lista doblemente enlazada o
lista enlazadas de dos vas. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta
al valor NULL o a la lista vaca si es el primer nodo; y otro que apunta al siguiente nodo
siguiente, o apunta al valor NULL o a la lista vaca si es el ltimo nodo.
Ilustracin 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
Lic. Elmer Alberto Len Zrate
122
En algn lenguaje de muy bajo nivel, XOR-Linking ofrece una va para implementar
listas doblemente enlazadas, usando una sola palabra para ambos enlaces, aunque el uso de
esta tcnica no se suele utilizar.
3.- LISTAS ENLAZADAS CIRCULARES
Definicin 4.47 En una lista enlazada circular, el primer y el ltimo nodo estn 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 direccin 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 ms usado para dirigir buffers para ingerir datos, y para visitar
todos los nodos de una lista a partir de uno dado.
Ilustracin 4.9 Esquema de lista enlazada circular
Una lista enlazada circular que contiene tres valores enteros
a) Listas enlazadas circulares simples
Definicin 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 despus de uno que ya
tengamos referenciado. Por esta razn, es usual quedarse con una referencia solamente al
CAPITULO IV: Estructuras de datos
123
ltimo elemento en una lista enlazada circular simple, esto nos permite rpidas inserciones al
principio, y tambin permite accesos al primer nodo desde el puntero del ltimo nodo.
[1]
b) Lista Enlazada Doblemente Circular
Definicin 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 algn 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
Definicin 4.50 Un nodo centinela (tambin 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 propsito 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 mdulos para otras muchas estructuras de datos,
tales como pilas, colas y sus variaciones.
Lic. Elmer Alberto Len Zrate
124
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 prctica tiene su
origen en el lenguaje de programacin Lisp, donde las listas enlazadas son una estructura de
datos primaria (aunque no la nica), y ahora es una caracterstica comn en el estilo de
programacin 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 bsqueda equilibrados. Sin embargo, a veces una lista enlazada es dinmicamente
creada fuera de un subconjunto propio de nodos semejante a un rbol, y son usadas ms
eficientemente para recorrer sta serie de datos
VENTAJAS
Como muchas opciones en programacin y desarrollo, no existe un nico mtodo
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 ms
comunes que implican las estructuras de tipo lista. En general, teniendo una coleccin
dinmica donde los elementos estn siendo aadidos y eliminados frecuentemente e importa
la localizacin de los nuevos elementos introducidos se incrementa el beneficio de las listas
enlazadas.
Ventajas de usar listas: Las listas son dinmicas, 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 operacin tiene un tiempo constante
CAPITULO IV: Estructuras de datos
125
independientemente de la posicin 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 posicin donde lo vamos a insertar y despus insertar el
elemento en dicha posicin; 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 ms lento, debido a que la informacin no est en
posiciones contiguas de memoria, por lo que no podemos acceder a un elemento con base en
su posicin 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 operacin 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 direccin del tercer nodo, y as sucesivamente.
b) INSERCIN. Esta operacin consiste en agregar un nuevo nodo a la lista. Para esta
operacin se pueden considerar tres casos:
- Insertar un nodo al inicio.
- Insertar un nodo antes o despus de cierto nodo.
- Insertar un nodo al final.
Lic. Elmer Alberto Len Zrate
126
c) BORRADO. La operacin de borrado consiste en quitar un nodo de la lista,
redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos:
- Eliminar el primer nodo.
- Eliminar el ltimo nodo.
- Eliminar un nodo con cierta informacin.
- Eliminar el nodo anterior o posterior al nodo cierta con informacin.
d) BSQUEDA. Esta operacin consiste en visitar cada uno de los nodos, tomando al
campo liga como puntero al siguiente nodo a visitar.
E) RBOLES
Definicin 4.51 Un rbol se define como una coleccin de nodos organizados en forma
recursiva. Cuando hay 0 nodos se dice que el rbol esta vaco, en caso contrario el rbol
consiste en un nodo denominado raz, el cual tiene 0 o ms referencias a otros rboles,
conocidos como subrboles. Las races de los subrboles se denominan hijos de la raz, y
consecuentemente la raz se denomina padre de las races de sus subrboles. Una visin
grfica de esta definicin recursiva se muestra en la siguiente figura:
Ilustracin 4.10 Esquema de un rbol
CAPITULO IV: Estructuras de datos
127
Definicin 4.52 Los nodos que no poseen hijos se denominan hojas. Dos nodos que tienen
el padre en comn se denominan hermanos.
Definicin 4.53 Un camino entre un nodo n
1
y un nodo n
k
est definido como la secuencia
de nodos n
1
, n
2
,..., n
k
tal que n
i
es padre de n
i+1
, 1 <= i < k. El largo del camino es el nmero
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. Ntese que en un rbol existe un nico camino
desde la raz 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.
Definicin 4.54 Se define la profundidad del nodo n
k
como el largo del camino entre la
raz del rbol y el nodo n
k
. Esto implica que la profundidad de la raz es siempre 0. La altura
de un nodo n
k
es el mximo largo de camino desde n
k
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 raz, y tiene el mismo
valor que la profundidad de la hoja ms profunda. La altura de un rbol vaco se define como
-1.
Ejemplo 4.30
La siguiente figura muestra los conceptos previamente descritos:
Lic. Elmer Alberto Len Zrate
128
Ilustracin 4.11 Esquema de los elementos de un rbol
- A es la raz 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 raz A y la hoja ms profunda, P o
Q).
CAPITULO IV: Estructuras de datos
129
RBOLES BINARIOS
Definicin 4.55 Un rbol binario es un rbol en donde cada nodo posee 2 referencias a
subrboles (ni ms, ni menos). En general, dichas referencias se denominan izquierda y
derecha, y consecuentemente se define el subrbol izquierdo y subrbol derecho del rbol.
Ilustracin 4.12 Esquema de un rbol binario
En este caso, la implementacin 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.
Lic. Elmer Alberto Len Zrate
130
Ilustracin 4.13 Esquema de un rbol binario con nodos internos y externos
PROPIEDADES DE LOS RBOLES BINARIOS
Propiedad 4.1
Si se define i = nmero de nodos internos, e = nmero de nodos externos, entonces se
tiene que:
e = i+1
Propiedad 4.2
Sea n = nmero de nodos internos. Se define:
- I
n
= suma del largo de los caminos desde la raz a cada nodo interno (largo de caminos
internos).
- E
n
= suma del largo de los caminos desde la raz a cada nodo externo (largo de
caminos externos).
Se tiene que:
CAPITULO IV: Estructuras de datos
131
E
n
= I
n
+2n
Propiedad 4.3
Cuntos rboles binarios distintos se pueden construir con n nodos internos?
n 0 1 2 3
b
n
1 1 2 5
b
n
?
Ejemplo 4.31
b
4
= b
0
*b
3
+ b
1
*b
2
+ b
2
*b
1
+ b
3
*b
0
= 5 + 2 + 2 + 5 = 14.
Este tipo de ecuaciones se puede resolver y la solucin es la siguiente:
La serie de nmeros que genera b
n
se conoce como nmeros de Cataln.
Asintticamente:
Lic. Elmer Alberto Len Zrate
132
Ejemplo 4.32
La siguiente figura muestra un ejemplo de un rbol de expresiones matemticas. En un
rbol de expresiones las hojas corresponden a los operandos de la expresin (variables o
constantes), mientras que los nodos restantes contienen operadores. Dado que los operadores
matemticos son binarios (o unarios como en el caso del operador signo -), un rbol de
expresiones resulta ser un rbol binario.
Ilustracin 4.14 Esquema de un rbol binario de expresiones matemticas
Un rbol de expresiones se puede evaluar de la siguiente forma:
- Si la raz del rbol es una constante o una variable se retorna el valor de sta.
- Si la raz resulta ser un operador, entonces recursivamente se evalan los
subrboles izquierdo y derecho, y se retorna el valor que resulta al operar los
valores obtenidos de las evaluaciones de los subrboles con el operador
respectivo.
CAPITULO IV: Estructuras de datos
133
RECORRIDOS DE RBOLES BINARIOS
Existen tres formas principales para recorrer un rbol binario en forma recursiva. Estas
son:
- Preorden: raz - subrbol izquierdo - subrbol derecho.
- Inorden: subrbol izquierdo - raiz - subrbol derecho.
- Postorden: subrbol izquierdo - subrbol derecho - raz.
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 expresin que se obtiene con el recorrido en postorden se conoce como notacin
polaca.
4.3 RELACION DE EJERCICIOS:
1. Realiza el pseudocdigo 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.
Lic. Elmer Alberto Len Zrate
134
4. Realizar el algoritmo para ingresar un arreglo bidimensional de numero y luego
determine:
- La suma de la primera fila
- La multiplicacin de la ltima fila
- La suma de primera columna
- La multiplicacin de la ltima columna
- La suma de la diagonal principal
- La multiplicacin de la diagonal secundaria
5. Escribir un pseudocdigo que permita sumar el nmero de elementos positivos y el de
negativos de una matriz n.
6. De una lista de n elementos escribir el pseudocdigo 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 pseudocdigo
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, cdigo, nombre, sexo, promedio de prcticas y notas de exmenes
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: cdigo, rea, sueldo bsico, y horas extras.
11. Realizar un algoritmo para el borrado de un elemento. Por ejemplo: Eliminar el
elemento repetido
CAPITULO IV: Estructuras de datos
135
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 botn command que
se llame Concatenacin.
Text3.Text = Text1.Text + Text2.Text
Text3.Text = Text1.Text & Text2.Text
136
CAPITULO V
TEORIA DE GRAFOS
5.1 CONCEPTOS BASICOS
Definicin 5.1 Un grafo es un objeto matemtico que se utiliza para representar circuitos,
redes, etc. Los grafos son muy utilizados en computacin, ya que permiten resolver problemas
muy complejos.
Definicin 5.2 Un grafo consta de vrtices (o nodos) y aristas. Los vrtices son objetos que
contienen informacin y las aristas son conexiones entre vrtices. Para representarlos, se
suelen utilizar puntos para los vrtices y lneas para las conexiones, aunque hay que recordar
siempre que la definicin de un grafo no depende de su representacin.
Definicin 5.3 Un camino entre dos vrtices es una lista de vrtices en la que dos
elementos sucesivos estn conectados por una arista del grafo. As, el camino AJLOE es un
camino que comienza en el vrtice A y pasa por los vrtices 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.
Definicin 5.4 Un camino simple es un camino desde un nodo a otro en el que ningn 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 expansin de un grafo es una
CAPITULO V: Teoria de grafos
137
reduccin del grafo en el que solo entran a formar parte el nmero mnimo de aristas que
forman un rbol y conectan a todos los nodos.
Definicin 5.5 Un grafo es completo si cuenta con todas las aristas posibles (es decir, todos
los nodos estn conectados con todos), disperso si tiene relativamente pocas aristas y denso si
le faltan pocas para ser completo.
Definicin 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.
Definicin 5.7 Un grafo dirigido es cuando las aristas son unidireccionales. Estas uniones
se suelen dibujar con una flecha.
Definicin 5.8 Un grafo es ponderado cuando las aristas llevan un coste asociado (un
entero al que se denomina peso).
Definicin 5.9 Una red es un grafo dirigido y ponderado.
Definicin 5.10 Dos grafos son isomorfos cuando slo queda lo esencial del dibujo: la
forma de las aristas no son relevantes, slo importan sus extremidades (o cabos); la posicin
de los vrtices tampoco, y se puede variar para obtener un grafo ms claro, y hasta sus
nombres se pueden cambiar. Generalmente, se considera que colocar los vrtices en forma de
polgono regular da grafos muy legibles.
Lic. Elmer Alberto Len Zrate
138
Ilustracin 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 pas central a y se esfuerza uno en
utilizar el menor nmero de colores, entonces en la corona alrededor de a alternan dos
colores. Llegando al pas h se tiene que introducir un cuarto color. Lo mismo sucede en i si se
emplea el mismo mtodo.
Ilustracin 5.2 Esquema de un mapa coloreado
CAPITULO V: Teoria de grafos
139
5.2 REPRESENTACIN DE GRAFOS
Una caracterstica especial en los grafos es que podemos representarlos utilizando dos
estructuras de datos distintas. En los algoritmos que se aplican sobre ellos veremos que
adoptarn tiempos distintos dependiendo de la forma de representacin elegida. En particular,
los tiempos de ejecucin variarn en funcin del nmero de vrtices y el de aristas, por lo que
la utilizacin de una representacin u otra depender en gran medida de si el grafo es denso o
disperso.
Para nombrar los nodos utilizaremos letras maysculas, aunque en el cdigo
deberemos hacer corresponder cada nodo con un entero entre 1 y V (nmero de vrtices) de
cara a la manipulacin de los mismos.
5.2.1 REPRESENTACIN POR MATRIZ DE ADYACENCIA
Es la forma ms comn de representacin y la ms directa. Consiste en una tabla de
tamao 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;
Lic. Elmer Alberto Len Zrate
140
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 implementacin se ha supuesto que los vrtices se nombran con una letra
mayscula y no hay errores en la entrada. Evidentemente, cada problema tendr una forma de
entrada distinta y la inicializacin ser conveniente adaptarla a cada situacin. En todo caso,
esta operacin es sencilla si el nmero de nodos es pequeo. Si, por el contrario, la entrada
fuese muy grande se pueden almacenar los nombres de nodos en un rbol binario de bsqueda
o utilizar una tabla de dispersin, 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 nmero de nodos y no del de aristas, por lo que ser til
para representar grafos densos.
CAPITULO V: Teoria de grafos
141
5.2.2 REPRESENTACIN 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 sern estructuras que contendrn un valor entero (el nmero
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; // vrtices y aristas del grafo
struct nodo *a[maxV], *z;
Lic. Elmer Alberto Len Zrate
142
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 representacin por listas de adyacencia, por tanto, ser
ms adecuada para grafos dispersos.
CAPITULO V: Teoria de grafos
143
Hay que tener en cuenta un aspecto importante y es que la implementacin con listas
enlazadas determina fuertemente el tratamiento del grafo posterior. Como se puede ver en el
cdigo, los nodos se van aadiendo a las listas segn 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. Podra presentarse el caso de tener varias soluciones
y tener que mostrarlas siguiendo un determinado orden. Ante una situacin as podra 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 posicin adecuada), de manera que el algoritmo
mismo diera las soluciones ya ordenadas.
5.3 EXPLORACIN DE GRAFOS
A la hora de explorar un grafo, nos encontramos con dos mtodos distintos. Ambos
conducen al mismo destino (la exploracin de todos los vrtices o hasta que se encuentra uno
determinado), si bien el orden en que stos son "visitados" decide radicalmente el tiempo de
ejecucin de un algoritmo, como se ver posteriormente.
En primer lugar, una forma sencilla de recorrer los vrtices es mediante una funcin
recursiva, lo que se denomina bsqueda en profundidad. La sustitucin de la recursin (cuya
base es la estructura de datos pila) por una cola nos proporciona el segundo mtodo de
bsqueda o recorrido, la bsqueda en amplitud o anchura.
Lic. Elmer Alberto Len Zrate
144
Ilustracin 5.3 Esquema de exploracin de grafos
Suponiendo que el orden en que estn almacenados los nodos en la estructura de datos
correspondiente es A-B-C-D-E-F... (El orden alfabtico), tenemos que el orden que seguira el
recorrido en profundidad sera el siguiente:
A-B-E-I-F-C-G-J-K-H-D
En un recorrido en anchura el orden sera, 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, despus los rojos, los naranjas y, por ltimo, el rosa.
Es destacable que el nodo D es el ltimo en explorarse en la bsqueda 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 tambin conduce al nodo D.
CAPITULO V: Teoria de grafos
145
En estos ejemplos hay que tener en cuenta que es fundamental el orden en que los
nodos estn almacenados en las estructuras de datos. Si, por ejemplo, el nodo D estuviera
antes que el C, en la bsqueda en profundidad se tomara primero la rama del D (con lo que el
ltimo en visitarse sera el C), y en la bsqueda en anchura se explorara antes el H que el G.
5.4 RELACION DE EJERCICIOS:
1.- La matriz de adyacencia del grafo G es

1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
Construir su grafo e indicar si es conexo.
2.- Sea A la matriz de adyacencia de un multgrafo G con vrtices {v
1
, v
2
,..., vn} y sea a
23
=3
una de las entradas de A. Entonces,
A) Existe un camino con tres vrtices entre v
2
y v
3
.
B) Hay tres aristas con extremos los vrtices v
2
y v
3
.
C) Hay tres vrtices adyacentes con v
2
y v
3
3.- Dadas las matrices de adyacencia A, B y C de tres grafos

=
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
;
0 1 0 1
1 0 0 1
0 0 0 1
1 1 1 0
;
0 1 1 0
1 0 1 0
1 1 0 1
0 0 1 0
C
B A
A) A y B son isomorfos
B) A y C son isomorfos
C) B y C son isomorfos
Lic. Elmer Alberto Len Zrate
146
4.- Teniendo en cuenta la regin exterior cuntos 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 nmero de vrtices y aristas.
147
CAPITULO VI
ORDENAMIENTO Y BUSQUEDA DE DATOS
6.1 ORDENAMIENTO DE DATOS
Debido a que las estructuras de datos son utilizadas para almacenar informacin, para
poder recuperar esa informacin de manera eficiente es deseable que aquella est ordenada.
Existen varios mtodos para ordenar las diferentes estructuras de datos bsicas.
En general los mtodos de ordenamiento no son utilizados con frecuencia, en algunos
casos slo una vez. Hay mtodos muy simples de implementar que son tiles en los casos en
dnde el nmero de elementos a ordenar no es muy grande (Ej., Menos de 500 elementos).
Por otro lado hay mtodos sofisticados, ms difciles de implementar pero que son ms
eficientes en cuestin de tiempo de ejecucin.
Los mtodos sencillos por lo general requieren de aproximadamente n x n pasos para
ordenar n elementos.
Los mtodos directos son: Insercin, Intercambio y Seleccin. Los mtodos ms
complejos o Avanzados son: Shell, Quicksort y Heapsort.
Definicin 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 numrico,
alfabtico o incluso alfanumrico, ascendente o descendente.
Lic. Elmer Alberto Len Zrate
148
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 tamao del registro. Es por ello que es deseable evitar al mximo 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 continuacin se mostrarn los mtodos de ordenamiento empezando por el ms
sencillo y avanzando hacia los ms sofisticados.
La eficiencia de los algoritmos se mide por el nmero de comparaciones e
intercambios que tienen que hacer, es decir, se toma n como el nmero 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.
ANLISIS DE ALGORITMOS NOTACIN DE ORDEN
Una funcin f(n) se define de orden O (g(n)), es decir, f(n) = O (g(n)) si existen
constantes positivas n
0
y c tales que:
| f(n) | = c * <= | g(n) | , para toda n > n
0
100 n
3
=> O(n
3
)
6n
2
+ 2n + 4 => O(n
2
)
1024 => O(1)
1+2+3+4+...+n-1+n= n * (n+1)/2 = O(n
2
)
CAPITULO VI: Ordenamiento y bsqueda de datos
149
6.1.1 METODOS DIRECTOS
A).MTODO DE INSERCIN
Este es uno de los mtodos ms sencillos. Consta de tomar uno por uno los elementos
de un arreglo y recorrerlo hacia su posicin 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 posicin 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 nmero 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 posicin] 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'],
Lic. Elmer Alberto Len Zrate
150
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 posicin actual de v.
Luego compara esta 's' con lo que hay en la posicin 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
posicin de la 'o'; decrementa j, la cual ahora tiene la posicin en dnde 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
posicin a[j]. El resultado hasta este punto es el arreglo siguiente: a = ['a','o','s','r',....]
As se contina 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).MTODO DE INTERCAMBIO
El bubble sort, tambin conocido como ordenamiento burbuja, funciona de la siguiente
manera: Se recorre el arreglo intercambiando los elementos adyacentes que estn
desordenados. Se recorre el arreglo tantas veces hasta que ya no haya cambios. Prcticamente
lo que hace es tomar el elemento mayor y lo va recorriendo de posicin en posicin 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).
CAPITULO VI: Ordenamiento y bsqueda de datos
151
Paso 7: [Fin] End.
Tiempo de ejecucin del bubble sort:
- para el mejor caso (un paso) O(n)
- peor caso n(n-1)/2
- promedio O(n
2
)
C) MTODO DE SELECCIN
El mtodo de ordenamiento por seleccin consiste en encontrar el menor de todos los
elementos del arreglo e intercambiarlo con el que est en la primera posicin. Luego el
segundo ms pequeo, 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 posicin i] Swap(a, min, j).
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
Lic. Elmer Alberto Len Zrate
152
primera 'a'. De manera que no ocurre ningn 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
posicin, la 's', quedando el arreglo as despus 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 posicin, 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 posicin hasta ordenar todo el arreglo.
El nmero 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).MTODO 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 segmentacin entre los datos. Esta segmentacin puede ser de cualquier
tamao de acuerdo a una secuencia de valores que empiezan con un valor grande (pero menor
al tamao total de la estructura) y van disminuyendo hasta llegar al '1'. Una secuencia que se
CAPITULO VI: Ordenamiento y bsqueda de datos
153
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 (n
1.2
) en el mejor caso y de O (n
1.25
) en el caso promedio.
void shellsort (int a [], int n)
/* Este procedimiento recibe un arreglo a ordenar a [] y el tamao 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).MTODO QUICKSORT
El mtodo 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.
Lic. Elmer Alberto Len Zrate
154
Este tipo de ordenamiento es til cuando se tiene una estructura ordenada y los
nuevos datos a aadir se almacenan en una estructura temporal para despus 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 funcin
}
void ordenar(int *array, int desde, int hasta)
{
int i,d,aux; // i realiza la bsqueda de izquierda a derecha
// y j realiza la bsqueda de derecha a izquierda.
if(desde>=hasta)
return;
for(i=desde+1,d=hasta;;) // Valores iniciales de la bsqueda.
{
for(;i<=hasta && array[i]<=array[desde];i++); // Primera bsqueda
for(;d>=0 && array[d]>=array[desde];d--); // segunda bsqueda
if(i<d) // si no se han cruzado:
{
aux=array[i]; // Intercambiar.
CAPITULO VI: Ordenamiento y bsqueda de datos
155
array[i]=array[d];
array[d]=aux;
}
else // si se han cruzado:
break; // salir del bucle.
}
if(d==desde-1) // Si la segunda bsqueda se sale del array
d=desde; // es que el pivote es el elemento
// ms pequeo: se cambia con l mismo.
aux=array[d]; // Colocar el pivote
array[d]=array[desde]; // en su posicin.
array[desde]=aux;
ordenar(array,desde,d-1); // Ordenar el primer array.
ordenar(array,d+1,hasta); // Ordenar el segundo array.
}
C).MTODO HEAPSORT
Este mtodo garantiza que el tiempo de ejecucin 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 caractersticas:
- Un heap es un arreglo de n posiciones ocupado por los elementos de la cola. (Nota:
se utiliza un arreglo que inicia en la posicin 1 y no en cero, de tal manera que al
implementarla en C se tienen n+1 posiciones en el arreglo.)
Lic. Elmer Alberto Len Zrate
156
- Se mapea un rbol binario de tal manera en el arreglo que el nodo en la posicin 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 subrbol.
HeapSort consiste esencialmente en:
- convertir el arreglo en un heap
- construir un arreglo ordenado de atrs hacia adelante (mayor a menor) repitiendo los
siguientes pasos:
o sacar el valor mximo en el heap (el de la posicin 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 parmetros 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)
{
CAPITULO VI: Ordenamiento y bsqueda de datos
157
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;
}
Lic. Elmer Alberto Len Zrate
158
6.2 BUSQUEDA DE DATOS
Definicin 6.2 La bsqueda de un elemento dentro de un array es una de las operaciones
ms importantes en el procesamiento de la informacin, y permite la recuperacin de datos
previamente almacenados. El tipo de bsqueda se puede clasificar como interna o externa,
segn el lugar en el que est almacenada la informacin (en memoria o en dispositivos
externos). Todos los algoritmos de bsqueda 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 posicin en la que se encuentra.
En este apartado nos centramos en la bsqueda interna. Como principales algoritmos
de bsqueda en arrays tenemos la bsqueda secuencial, la binaria y la bsqueda utilizando
tablas de hash.
6.2.1 BSQUEDA 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++;
}
CAPITULO VI: Ordenamiento y bsqueda de datos
159
Este algoritmo se puede optimizar cuando el array est ordenado, en cuyo caso la
condicin de salida cambiara a:
for(i=j=0;array[i]<=elemento;i++)
O cuando slo 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 slo interesa la primera posicin, se puede utilizar un
centinela, esto es, dar a la posicin 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 lmites 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 nmero medio
de comparaciones que hay que hacer antes de encontrar el elemento buscado es de (N+1)/2.
6.2.2 BSQUEDA BINARIA O DICOTMICA
Para utilizar este algoritmo, el array debe estar ordenado. La bsqueda binaria consiste
en dividir el array por su elemento medio en dos subarrays ms pequeos, y comparar el
Lic. Elmer Alberto Len Zrate
160
elemento con el del centro. Si coinciden, la bsqueda 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 realizaran 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 bsqueda todava no lo hemos encontrado, y el subarray a dividir est
vaco {}, el elemento no se encuentra en el array. La implementacin sera:
int desde,hasta,medio,elemento,posicion; // desde y
// Hasta indican los lmites 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 slo tiene un elemento:
CAPITULO VI: Ordenamiento y bsqueda de datos
161
{
if (array [desde]==elemento) // si es la solucin:
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 solucin
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 mtodo realiza log (2, N+1) comparaciones antes de encontrar el
elemento, o antes de descubrir que no est. Este nmero es muy inferior que el necesario para
la bsqueda lineal para casos grandes.
Este mtodo tambin se puede implementar de forma recursiva, siendo la funcin
recursiva la que divide al array en dos ms pequeos.
Lic. Elmer Alberto Len Zrate
162
6.2.3 BSQUEDA MEDIANTE TRANSFORMACIN DE CLAVES
(HASHING)
Es un mtodo de bsqueda que aumenta la velocidad de bsqueda, pero que no
requiere que los elementos estn ordenados. Consiste en asignar a cada elemento un ndice
mediante una transformacin del elemento. Esta correspondencia se realiza mediante una
funcin de conversin, llamada funcin hash. La correspondencia ms sencilla es la identidad,
esto es, al nmero 0 se le asigna el ndice 0, al elemento 1 el ndice 1, y as sucesivamente.
Pero si los nmeros a almacenar son demasiado grandes esta funcin es inservible. Por
ejemplo, se quiere guardar en un array la informacin de los 1000 usuarios de una empresa, y
se elige el nmero 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 transformacin al nmero de DNI para que nos d un nmero 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, bastara con realizar la transformacin a su DNI y ver si est o no en el
array.
La funcin de hash ideal debera 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
fcil encontrar esa funcin, e incluso a veces es intil, ya que puedes no saber el nmero de
elementos a almacenar. La funcin de hash depende de cada problema y de cada finalidad, y
se pueden utilizar con nmeros o cadenas, pero las ms utilizadas son:
A) Restas sucesivas: esta funcin se emplea con claves numricas entre las que existen
huecos de tamao conocido, obtenindose direcciones consecutivas. Por ejemplo, si el
CAPITULO VI: Ordenamiento y bsqueda de datos
163
nmero de expediente de un alumno universitario est formado por el ao de entrada en la
universidad, seguido de un nmero identificativo de tres cifras, y suponiendo que entran un
mximo de 400 alumnos al ao, se le asignaran 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) Aritmtica modular: el ndice de un nmero es resto de la divisin de ese nmero entre
un nmero N prefijado, preferentemente primo. Los nmeros se guardarn en las direcciones
de memoria de 0 a N-1. Este mtodo tiene el problema de que cuando hay N+1 elementos, al
menos un ndice es sealado por dos elementos (teorema del palomar). A este fenmeno se le
llama colisin, y es tratado ms adelante. Si el nmero N es el 13, los nmeros 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 mtodo tambin presenta problemas de colisin:
Lic. Elmer Alberto Len Zrate
164
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 nmero y utilizar los elementos restantes
como ndice. Tambin se produce colisin. Por ejemplo, si un nmero 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 nmero:
13000000 --> 100
12345678 --> 138
13602499 --> 169
71140205 --> 715
73162135 --> 715
E) Plegamiento: consiste en dividir el nmero en diferentes partes, y operar con ellas
(normalmente con suma o multiplicacin). Tambin se produce colisin. Por ejemplo, si
dividimos el nmero de 8 cifras en 3, 3 y 2 cifras y se suman, dar otro nmero 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
CAPITULO VI: Ordenamiento y bsqueda de datos
165
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 posicin. Este mtodo es poco eficaz, porque al nuevo
elemento se le asigna un ndice que podr estar ocupado por un elemento posterior a l, y la
bsqueda se ralentiza, ya que no se sabe la posicin exacta del elemento.
Tambin se pueden reservar unos cuantos lugares al final del array para alojar a las
colisiones. Este mtodo tambin tiene un problema: Cunto espacio se debe reservar?
Adems, sigue la lentitud de bsqueda si el elemento a buscar es una colisin.
Lo ms efectivo es, en vez de crear un array de nmero, crear un array de punteros,
donde cada puntero seala 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
bsqueda se reduce considerablemente, y no hace falta poner restricciones al tamao del
array, ya que se pueden aadir nodos dinmicamente a la lista.
Lic. Elmer Alberto Len Zrate
166
6.3 RELACION DE EJERCICIOS:
1.- Insertar los elementos: 67, 46, 88, 93, 81, 26 y 17 en una tabla de dispersin cerrada de
tamao b=10 y la funcin de dispersin h (k) = k mod b.si es necesario aplicar la funcin de
redispersion lineal h
i
(k)= [h (k)+ i] mod b.
2.-Ordenar el siguiente arreglo aplicando el mtodo 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 mtodo de
intercambio para ordenar en forma ascendente, de tal manera que:
Ap1 s Ap2 s Ap3 s Ap4 s s Apn.
4. En cierta empresa se maneja tres listas (Vectores P, Q, R) que contienen los datos de los N
artculos que se venden.
a) El vector P contiene los cdigos de los artculos.
b) El vector Q contiene los nombres de los artculos
c) El vector Q contiene los precios de los artculos.
Ordene los arreglos en forma descendente utilizando el mtodo de seleccin.
5. Escriba un algoritmo para que utilizando la bsqueda 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
alfabticamente, escriba un programa que encuentre en el arreglo un nombre dado. Si lo
encuentra debe informar la posicin 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
CAPITULO VI: Ordenamiento y bsqueda de datos
167
- El vector B con los promedios
- El vector C con el nmero de materias aprobadas.
Escriba un algoritmo que lea un nombre, lo busque y si lo encuentra informe su
promedio y nmero de materias aprobadas. Si el nombre dado no est en el arreglo, envi un
mensaje adecuado.
a) Considere que los arreglos estn ordenados.
b) Considere que los arreglos estn desordenados.
168
CAPITULO VII
SOFTWARE DE PROGRAMACION MATLAB
7.1 INTRODUCCIN
Definicin 7.1 MATLAB es un entorno de computacin y desarrollo de aplicaciones
totalmente integrado orientado para llevar a cabo proyectos en donde se encuentre elevados
clculos matemticos y su visualizacin grfica.
MATLAB integra anlisis numrico, clculo matricial, proceso de seal y
visualizacin grfica.
Definicin 7.2 MATLAB es la disponibilidad de los paquetes especializados llamados
Toolboxes orientados a ingenieros, cientficos y tcnicos. Entre los ms destacados estn:
- Procesamiento de seal
- The MATLAB Math Library
- Matemticas Simblicas
- Procesamiento de Imagen
- The MATLAB compiler
- Estadstica
- Diseo de Sistemas de control
- Identificacin de Sistema
- Optimizacin
- Diseo de control no lineal
- Lgica Difusa
- Splines
CAPITULO VII: Software de programacin Matlab
169
7.2 OPERADORES
7.2.1 OPERADORES LOGICOS
OPERADOR DESCRIPCION
& Y
O
~ NO
7.2.2 OPERADORES ARITMETICOS
ESCALAR MATRIZ VECTOR DESCRIPCION
+ + + Adicin
- - - Sustraccin
* * .* Multiplicacin
/ / ./ Divisin hacia la derecha
\ \ \. Divisin hacia la izquierda
^ . Transpuesta
7.2.3 OPERADORES RELACIONALES
OPERADOR DESCRIPCION
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
Lic. Elmer Alberto Len Zrate
170
== Igual
~= No igual
7.2.4 CARACTERES ESPECIALES
CARACTERES DESCRIPCION
[] Para formar matrices y vectores
() Define precedencia en expresiones aritmticas
, Separador de elementos de una matriz, argumentos de funciones y
declaraciones.
; Separador de declaraciones, termina renglones de una matriz
Ejemplo 7.1
>> 13/3
ans = 4.3333
Ejemplo 7.2
>> 3/13
ans = 62.3333
Ejemplo 7.3
>> 4^ 2
ans = 16
Ejemplo 7.4
>> 2* pi^ 3
ans = 62.01255336059
Ejemplo 7.5
>>a = [0 1 2 3 4 5 6 7 8 9 10]
a = 0 1 2 3 4 5 6 7 8 9 10
Ejemplo 7.6
>>t = 0: 2: 20
t = 0 2 4 6 8 10 12 14
Ejemplo 7.7
>>b = a + 3
b = 3 4 5 6 7 8 9 10 11 12 13
Ejemplo 7.8
>>t = [1; 3; 5]
t = 1
3
5
Ejemplo 7.9
>>c = a + b
c = 3 4 5 6 7 8 9 11 13 15 17
19 21 23
CAPITULO VII: Software de programacin Matlab
171
Ejemplo 7.10
>>d
ans=
1 3 5
Ejemplo 7.11
>>f = [4; 6; 9]
f =
4
6
9
Ejemplo 7.12
>>d.*f
ans=
4
18
45
7.3 VARIABLES
Definicin 7.3 Las variables deben tener un nombre segn las siguientes reglas:
- no pueden comenzar con un nmero, pero si pueden tener nmeros en los caracteres
siguientes.
- Las maysculas y minsculas 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 tamao (si se usa un vector y despus se
expande).
7.4 EXPRESIONES
Definicin 7.4 Una expresin en MATLAB, puede ser:
- una variable un nmero (ejemplo: variable 1,x,3,22.3)
- Un comando aplicado (ejemplo: norm (A), sin (2*pi))
- Una expresin matemtica (ejemplo: 2+3* variab1^4.5)
Lic. Elmer Alberto Len Zrate
172
Observacin 7.1
Cualquiera de las expresiones anteriores si se escribe en la lnea de comandos (>>)
devolver el nombre de la variable y su valor, si no tiene nombre MATLAB devolver ans =
resultado.
Observacin 7.2
Si la expresin termina en un punto y coma MATLAB no imprime su valor en la
pantalla, pero si realiza al clculo.
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 anloga pero separando las filas con puntos y comas (;).
Generalmente usaremos letras maysculas cuando nombremos a las matrices y
minsculas 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
CAPITULO VII: Software de programacin Matlab
173
y =
2 1 3 7
Ejemplo 7.15
>> z = [0 1 2,3 4,5] % es otro vector, da igual separar los elementos por comas o
espacios
z =
0 1 2 3 4 5
Ejemplo 7.16
>> A = [1 2 3; 4 5 6] % es una matriz con 2 filas y 3 columnas
A =
1 2 3
4 5 6
7.5.1 DIRECCIONAMIENTO DE ELEMENTOS DE VECTORES Y
MATRICES
Para acceder a los elementos individuales de un vector lo haremos utilizando
subndices, as x(n) sera el n-simo elemento del vector x. Si queremos acceder al ltimo
podemos indicarlo usando end como subndice.
Ejemplo 7.17
>> x = [5 7 -2 4 -6];
>> x (2) % segundo elemento del vector x
Lic. Elmer Alberto Len Zrate
174
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 notacin 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 nmero entre el primero y el segundo tambin separado por dos
puntos (:) se mostrarn los elementos del primero al ltimo indicado, incrementados segn el
nmero que aparece en el centro (o decrementados si el nmero es negativo).
Ejemplo 7.20
>> x (1:2:5) % devuelve el primero, tercero y quinto elemento del vector x
ans =
5 -2 -6
CAPITULO VII: Software de programacin Matlab
175
Otra forma de obtener un conjunto concreto de elementos del vector es indicando entre
corchetes [] las posiciones de los elementos que queremos obtener poniendo parntesis 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 =
4 5 6
Lic. Elmer Alberto Len Zrate
176
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 sera 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 =
5 6
Ejemplo 7.26
>> A (2, [3 1]) % escribe de la segunda fila de la matriz, las columnas 3 y 1
ans =
6 4
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 =
5 6
CAPITULO VII: Software de programacin Matlab
177
2 3
Ejemplo 7.28
>> A (end, [1 3]) % escribe de la ltima fila, las columnas 1 y 3
ans =
4 6
Matlab tiene adems otra forma de identificar cada elemento de una matriz, de modo
que podemos acceder a un elemento de una matriz indicando slo un valor y no dos, pero
debemos saber que el orden elegido por Matlab es por columnas as los elementos de la matriz
A seran denominados:
Ejemplo 7.29
Como la matriz A que tenamos era
A =
1 2 3
4 5 6
>>A (5) %accede al elemento 5 de la matriz, es decir, igual que si escribiramos A
(1,3)
ans =
3
Lic. Elmer Alberto Len Zrate
178
Pero es preferible para evitar confusiones trabajar con los elementos de las
matrices indicando la fila y la columna correspondiente.
7.5.2 CONSTRUCCIN ABREVIADA DE ALGUNOS VECTORES
A parte de definir un vector introduciendo cada uno de sus elementos, tambin
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 logartmicamente espaciado entre los valores 10^a y 10^b
con c elementos.
logspace (a,b) genera un vector logartmicamente 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 =
1 2 3 4 5 6 7
Ejemplo 7.31
>> (1:3:10) % crea un vector que comenzando en 1, aumenta de 3 en 3 hasta el 10
CAPITULO VII: Software de programacin Matlab
179
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 =
1 5 9
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 =
2 4 6
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
Lic. Elmer Alberto Len Zrate
180
Ejemplo 7.36
>> logspace (0,2,4) % genera un vector logartmicamente espaciado entre 10^0 y 10^2
con 4 elementos
ans =
1.0000 4.6416 21.5443 100.0000
7.5.3 CONSTRUCCIN DE ALGUNAS MATRICES
Al igual que pasa con los vectores, existen unas sentencias que nos ayudan a crear ms
rpidamente 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 nmeros aleatorios con distribucin uniforme
(0,1).
rand (m,n) crea una matriz m x n de nmeros aleatorios con distribucin uniforme (0,1).
randn (n) crea una matriz n x n de nmeros aleatorios con distribucin normal (0,1).
randn (m,n) crea una matriz m x n de nmeros aleatorios con distribucin 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.
CAPITULO VII: Software de programacin Matlab
181
hilb (n) crea una matriz cuadrada n x n de Hilbert, es decir, los elementos (i,j) responden a la
expresin (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 =
0 0 0
0 0 0
0 0 0
Ejemplo 7.38
>> zeros (2,5) % matriz 2 x 5 de ceros
ans =
0 0 0 0 0
0 0 0 0 0
Ejemplo 7.39
>> ones (2,3) % matriz de unos
ans =
1 1 1
1 1 1
Ejemplo 7.40
>> rand (2,4) % matriz de valores aleatorios entre 0 y 1 segn la uniforme (0,1)
Lic. Elmer Alberto Len Zrate
182
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 segn 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 =
1 0
0 1
Ejemplo 7.43
>> magic (4) % matriz mgica 4 x 4
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
CAPITULO VII: Software de programacin Matlab
183
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 BSICAS CON MATRICES
Lic. Elmer Alberto Len Zrate
184
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 % multiplicacin de matrices
ans =
1 3
3 7
Ejemplo 7.47
>> A .* B % multiplicacin elemento a elemento
ans =
1 2
0 4
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
CAPITULO VII: Software de programacin Matlab
185
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 nmero 2 a la matriz se suma ese nmero a cada elemento
ans =
3 4
5 6
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
Lic. Elmer Alberto Len Zrate
186
7.5.6 FUNCIONES PARA EL ANLISIS DE MATRICES
(Con A matriz, v vector y n nmero natural)
Ejemplo 7.53
>> diag (v) % crea una matriz diagonal a partir del vector v
ans =
1 0 0
0 2 0
0 0 3
Ejemplo 7.54
>> A = [1 2 3 4; 7 8 9 2; 2 4 6 8]
A =
1 2 3 4
7 8 9 2
2 4 6 8
CAPITULO VII: Software de programacin Matlab
187
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 =
3 4
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
Lic. Elmer Alberto Len Zrate
188
ans =
2
Ejemplo 7.60
>> rref (A) % reduccin mediante Gauss
ans =
1.0000 0 -1.0000 -4.6667
0 1.0000 2.0000 4.3333
0 0 0 0
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
2 4 6 0
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
0 0 6 8
CAPITULO VII: Software de programacin Matlab
189
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
Lic. Elmer Alberto Len Zrate
190
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
CAPITULO VII: Software de programacin Matlab
191
Ejemplo 7.69
>> expm (A)
ans =
23.1407 0
7.6091 2.8497
COMANDOS AVANZADOS
Definicin 7.5 Cada comando en MATLAB es un archivo con extensin .m por lo tanto
es necesario tener las libreras donde se encuentran los comandos que se desean utilizar.
MATLAB no distingue entre maysculas y minsculas en los comandos.
ARCHIVOS CON EXTENSIN . M
Todos los comandos pueden utilizarse directamente desde la lnea de comandos del
MATLAB (>>).
Un archivo (con extensin .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.
Lic. Elmer Alberto Len Zrate
192
- El archivo debe quedar grabado en el mismo directorio que MATLAB para poder
correrlo
7.6 COMANDOS DE PROGRAMACIN
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 condicin, si es verdadero falso ejecuta la accin
correspondiente.
SINTAXIS:
if (condicin), (accin 1) [else, (accin 2)] end;
Donde las ordenes entre [] son opcionales:
(accin 1) = se ejecuta si la condicin es verdadera
(accin 2) = se ejecuta si la condicin es falsa
(condicin) puede ser:
a==b a<b a>b
a<=b a>=b a~=b
Ejemplo 7.70
% uso de if
n = 0;
CAPITULO VII: Software de programacin Matlab
193
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 condicin es verdadera ejecuta la accin correspondiente.
SINTAXIS
while (condicin), (accin) end;
Donde:
(accin) son las ordenes a ejecutar
Lic. Elmer Alberto Len Zrate
194
(condicin) puede ser igual a la condicin 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 nmero
determinado de veces.
SINTAXIS
for (contador), (accin) end;
CAPITULO VII: Software de programacin Matlab
195
Donde:
(accin) = 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 =
Lic. Elmer Alberto Len Zrate
196
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 (`Tambin se puede escribir as);
SALIDA
1 2 3 4 9 11
1 2 7
CAPITULO VII: Software de programacin Matlab
197
6 3 4
Texto de Prueba
Tambin 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 =
Lic. Elmer Alberto Len Zrate
198
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 nmeros primos menores que 100.
clc,
disp('Estos son los nmeros 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
CAPITULO VII: Software de programacin Matlab
199
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 nmero es: ')
disp(Suma)
7.7 GRFICAS 2-D
La orden plot genera una grfica. 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)
Lic. Elmer Alberto Len Zrate
200
Figura 7.1 Esquema de grafico con el comando plot
Si queremos cambiar la apariencia de la grfica basta pinchar en el ltimo botn de la
barra de herramientas y se abrirn unos cuadros en los laterales que nos permitirn ir haciendo
los cambios deseados como darle nombre a los ejes.
Figura 7.2 Esquema de grafico para modificacin
La funcin plot nos permite otras opciones como superponer grficas 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)
CAPITULO VII: Software de programacin Matlab
201
Figura 7.3 Esquema de 2 grficos con el comando plot
Ejemplo 7.79
Tambin podemos usar distintos tipos de lneas para el dibujo de la grfica:
>> plot (x,y,'*')
Figura 7.4 Esquema de grafico con otro tipo de lnea
Adems podemos colocar etiquetas o manipular la grfica:
Etiqueta sobre el eje X de la grfica actual: >> xlabel('texto')
Etiqueta sobre el eje Y de la grfica actual: >> ylabel('texto')
Ttulo en la cabecera de la grfica actual: >> title('texto')
Texto en el lugar especificado por las coordenadas: >> text(x,y, 'texto')
Texto, el lugar lo indicamos despus con el ratn: >> gtext('texto')
Lic. Elmer Alberto Len Zrate
202
Dibujar una rejilla: >> grid
Fija valores mximo y mnimo de los ejes: >> axis ([xmin xmax ymin ymax])
Fija que la escala en los ejes sea igual: >> axis equal
Fija que la grfica sea un cuadrado: >> axis square
Desactiva axis equal y axis square: >> axis normal
Abre una ventana de grfico: >> hold on
Borra lo que hay en la ventana de grfico: >> hold off
Todas estas rdenes se las podemos dar desde la propia ventana de la grfica una vez
que hemos abierto las opciones con el botn indicado anteriormente.
Otros comandos relacionados con las grficas son los siguientes:
Para obtener una informacin ms detallada se recomienda utilizar la ayuda de Matlab:
>> help <orden>
Una ventana grfica 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 subdivisin que se convierte en activa.
CAPITULO VII: Software de programacin Matlab
203
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 polgonos podemos usar la funcin plot pero teniendo en cuenta que el
ltimo punto de ambos vectores deben coincidir para que la grfica quede cerrada. Pero si lo
que queremos es que quede coloreado todo el interior del polgono debemos usar mejor la
funcin 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)
Lic. Elmer Alberto Len Zrate
204
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 polgono, 'r' indica el color rojo
Figura 7.7 Esquema de grafico con fondo
7.8 GRAFICOS 3-D
Tambin podemos crear grficas 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 estarn en tripletes:
Ejemplo 7.83
>> x = -720:720; y = sind (x); z = cosd (x);
>> plot3 (x,y,z)
CAPITULO VII: Software de programacin Matlab
205
Figura 7.8 Esquema de grafico en 3-D
Podemos hacer girar la grfica usando de la barra de herramientas el botn
correspondiente o hacerla ms grande o ms pequea. Al igual que ocurra con las grficas en
dos dimensiones podemos nombrar los ejes o hacer modificaciones entrando en opciones con
el botn.
Si queremos representar un polgono en 3 dimensiones lo haremos con la funcin 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
Lic. Elmer Alberto Len Zrate
206
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 grfica de malla se usa
la orden mesh(X,Y,Z), mesh acepta un argumento opcional para controlar los colores.
Tambin 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 grfica
Figura 7.10 Esquema de grafico de superficie de malla
Hubiera dado igual si hubiramos 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)
CAPITULO VII: Software de programacin Matlab
207
Grfica de superficie:
Es similar a la grfica de malla, pero aqu se rellenan los espacios entre lneas. 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 grficas 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 lneas de contorno
Figura 7.12 Esquema de contorno en 2-D
Lic. Elmer Alberto Len Zrate
208
La funcin pcolor transforma la altura a un conjunto de colores.
Ejemplo 7.88
>> pcolor (X,Y,Z)
Figura 7.13 Esquema de grafico con pcolor
Manipulacin de grficos:
Fija el ngulo de visin especificando el azimut y la elevacin:
>> 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 elevacin de la vista actual:
>> [az,el]=view
Aade etiquetas de altura a los grficos de contorno:
>> clabel(C,h)
Aade una barra de color vertical mostrando las transformaciones:
>> colorbar
CAPITULO VII: Software de programacin Matlab
209
Ejemplo 7.89
>> surf (X,Y,Z)
>> view (10,70)
Figura 7.14 Esquema de grafico con superficie
>> colorbar % aade la barra de color a la figura actual
Figura 7.15 Esquema de grafico con superficie y barra
Lic. Elmer Alberto Len Zrate
210
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)
CAPITULO VII: Software de programacin Matlab
211
Figura 7.17 Esquema de grafico de contorno en 2-D
Comprensin 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.
Lic. Elmer Alberto Len Zrate
212
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 instruccin 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]
CAPITULO VII: Software de programacin Matlab
213
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] Cmo 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 instruccin >>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 instruccin >>x=v ([3 5 1 7])?
a. x=[5 3 7 1]
Lic. Elmer Alberto Len Zrate
214
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 instruccin >>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 instruccin: >>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 instruccin: >>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 instruccin: >>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 instruccin: >>B=A (3:-1:1,1:3)
CAPITULO VII: Software de programacin Matlab
215
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)
Lic. Elmer Alberto Len Zrate
216
>>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. Cmo representaras 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]
CAPITULO VII: Software de programacin Matlab
217
b. Error
c. []
d. [6 12 18]
28. Dado el vector v= [1 2 3], usando las funciones de lgebra, qu instruccin 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 instruccin 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 instruccin debemos ejecutar para obtener la matriz: [1
2 3; 0 5 6; 0 0 9]?
31. Usando las funciones de lgebra lineal, Cmo 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 tamao 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 grficamente en [0,10] la funcin.
f(x) = e(-x/4) *sin(x)
34. Representar grficamente en [-10,10] la funcin.
f(x) = (7*x2-sin(x))/(2*x+3)
35. Escribe una funcin que devuelva como resultado el mayor de los elementos de un vector.
36. Escribe una funcin que dada una matriz A de orden nxm, permute los renglones k e i.
Function [B]=permuta(A, k, i).
Lic. Elmer Alberto Len Zrate
218
37. Escribe una funcin que determine el nmero de entradas igual a cero de una matriz A.
Function [nc]=ceros(A).
38. Escribe una funcin que represente a un nmero 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 nmeros a, b, c, d estn en
progresin aritmtica
40. Escribir las sentencias de MATLAB necesarias para obtener los cuadrados de los nmeros
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;
CAPITULO VII: Software de programacin Matlab
219
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. Cuntas veces se ejecuta el bucle?
x = 2;
while x <= 200
x = x^2;
end
220
CAPITULO VIII
LENGUAJE DE PROGRAMACION C++
8.1 INTRODUCCION
El Lenguaje de Programacin C++ fue creado por Bjarne Stroustrup en 1985
como una extensin del Lenguaje C, el mismo que es mas consistente y conocido
que otros lenguajes de programacin cientficos.
Definicin 8.1 El Lenguaje de Programacin C++ es de propsito general porque
ofrece control de flujo, estructuras sencillas y un buen conjunto de operadores. Se
puede utilizar en varios tipos de aplicacin.
Este Lenguaje ha sido creado estrechamente ligado al sistema operativo
UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje
no esta ligado a ningn sistema operativo ni a ninguna mquina concreta.
Sus caractersticas principales son:
- Es un Lenguaje que Incluye a versiones anteriores de Lenguaje C
- Abstraccin de Datos
- Permite definir nuevos tipos de Datos
- Permite la programacin orientada a objetos
- Varias funciones pueden compartir el mismo nombre.
- Permite definir una funcin como miembro de una estructura.
- Incluye Operadores para reservar y liberar memoria.
CAPITULO VIII: Lenguaje de programacin C++
221
8.2 OPERADORES
Definicin 8.2 Son smbolos que se utiliza para manipular datos.
Existen los siguientes tipos de operadores:
8.2.1 OPERADORES DE ASIGNACIN
Definicin 8.3 Es el smbolo = 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 ARITMTICOS
Definicin 8.4 Son smbolos que indican los clculos que se deben realizar sobre
una o ms variables dentro de una expresin.
+ suma suma = a + b
++ Incrementar un uno x = x + 1; // x = x++; // x +=1;
- resta resta = a b
-- Decremento en uno x = x - 1; // x = x - -; // x -=1;
Lic. Elmer Alberto Len Zrate
222
* Multiplicacin i = i * j; // i * = j;
/ Divisin x= x / 2; // x /=2;
% modulo Resto de la divisin de enteros.
8.2.3 OPERADORES DE COMPARACIN
Definicin 8.5 Son smbolos para indicar la relacin 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 LGICOS
Definicin 8.6 Son smbolos que sirven para unir varias comparaciones
&& & and ( alt + 38 )
|| | or ( alt + 124 )
! not
8.2.5 PRIORIDAD DE LOS OPERADORES
( )
CAPITULO VIII: Lenguaje de programacin C++
223
++ -- &
* / %
+ -
< <= > >=
== =
&&
||
=
8.3 TIPOS DE DATOS
Definicin 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 nmeros enteros con el siguiente rango:
int -32768 ... 32767
long -2147483648 ... 2147483647
Lic. Elmer Alberto Len Zrate
224
8.3.2 REALES (COMA FLOTANTE)
Para nmeros 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
Definicin 8.8 Son aquellos datos que no pueden cambiar a lo largo de la ejecucin
de un programa.
Sintaxis: Dentro de la Funcin Principal
1. Declarar la Variable
2. Variable = valor_segn_declaracin
Dentro de las Libreras de Cabecera
CAPITULO VIII: Lenguaje de programacin C++
225
#define nombre _ constante Valor _ constante
Ejemplo 8.1
float pi; pi = 3.14159
Ejemplo 8.2
#define pi 3.14159
8.5 VARIABLES
Definicin 8.9 Son aquellos datos que puede cambiar su valor dentro de la
ejecucin del programa.
8.5.1 PRIMERA FORMA (DECLARACIN GLOBAL): Estas se declaran despus
de las libreras 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()
{
}
Lic. Elmer Alberto Len Zrate
226
8.5.2 SEGUNDA FORMA (DECLARACIN LOCAL): Estas se declaran dentro de la
funcin 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 Libreras que se activa para la entrada y salida de datos son:
- #include < stdio.h >
- #include < bcd.h >
8.6.1 ENTRADA
- FUNCIN CIN : ( # include < stdio.h > # include < bcd.h > )
Sintaxis:
cin >>apuntador de Variable;
cin >>Variable 1>>Variable 2;
CAPITULO VIII: Lenguaje de programacin C++
227
Ejemplo 8.3
cin >> n1 >>n2 >>n3 ;
NOTA: No importa que tipo de datos sea, no se tiene que especificar.
8.6.2 SALIDA
- FUNCIN 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 nmeros son << a << b <<c;
Para una mejor ubicacin del texto en la pantalla colocar el comando:
gotoxy (Coordenadas_x, Coordenada_y); cout...
8.7 INSTRUCCIONES DE CONTROL
Definicin 8.10 Las Instrucciones de Control permiten que los programas sean ms
estructurados y puedan de esta forma solucionar todo tipo de problemas (Joyanes
Aguilar, 1994).
Lic. Elmer Alberto Len Zrate
228
Estas instrucciones pueden ser:
- Selectivas (if, if...else, switch)
- Repetitivas (for, while y do...while)
- De Salto ( break, continue, goto )
8.7.1 SELECTIVAS
Definicin 8.11 Se realizan mediante las instrucciones if, if...else, switch y
permiten evaluar una condicin o expresin y en funcin del resultado de la misma
se realizara una accin u otra.
A) IF.-Toma una decisin referente al bloque de sentencias a ejecutar en un
programa, basndose en el resultado (Verdadero o falso) de una Condicin.
1ra Sintaxis:
if (Condicin _ verdadera)
Sentencias Ejecutables;
2da Sintaxis:
if (Condicin)
{ ......................
Sentencias Ejecutables;
......................
CAPITULO VIII: Lenguaje de programacin C++
229
}
else
{ ......................;
Sentencias Ejecutables
......................;}
Observacin 8.1
Si la condicin a evaluar en el IF necesita ms opciones colocar:
&& (and) || (or)
Ejemplo 8.5
CONDICION PARA ENCONTRAR NMEROS PARES
if (N % 2! = 1)
cout << NUMERO PAR
Ejemplo 8.6
CONDICION PARA LOS NUMEROS NEGATIVOS O NMEROS CERO
if ((N < 0) || (N==0))
cout << NUMERO NEGATIVO O CERO
Lic. Elmer Alberto Len Zrate
230
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 funcin del
valor de una expresin.
Sintaxis:
switch (EXPRESION)
{
case 1: Sentencias Ejecutables;
CAPITULO VIII: Lenguaje de programacin C++
231
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 Carcter
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 ejecucin del programa contine despus del SWITCH.
Lic. Elmer Alberto Len Zrate
232
6) Si no se coloca SWITCH la ejecucin del programa se reanuda en las dems
CASE.
7) El conjunto de sentencias de cada CASE no necesita encerrarse entre llaves.
8.7.2 REPETITIVAS
Definicin 8.12 Estas instrucciones hacen que una seccin del programa se repita
un cierto nmero de veces. La repeticin continua mientras una condicin sea
verdadera, cuando la decisin es falsa el bucle termina y el control pasa a las
sentencias a continuacin del bucle, existen tres clases de Bucles for, while y
do...while.
A) FOR.- El bucle FOR, ejecuta una seccin de cdigo un nmero 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;
.....................; ....................;
} }
CAPITULO VIII: Lenguaje de programacin C++
233
Donde:
- exp1 : Es el Valor inicial ( Signo =)
- exp2 : Condicin(Signo <=, >=, <, >)
- exp3 : Es el Operador de incremento o decremento ( i + + , i - - )
Ejemplo 8.8
IMPRIMIR LOS 10 PRIMEROS NMEROS.
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
condicin sea verdad.
Sintaxis:
Lic. Elmer Alberto Len Zrate
234
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)
CAPITULO VIII: Lenguaje de programacin C++
235
{ cout << \n << c;
c - - ;
}
Observacin 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);
Observacin 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);
Lic. Elmer Alberto Len Zrate
236
cout << La raz es: << setprecision (2) << raiz_cuadrada;
Observacin 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 ms veces, dependiendo
de la condicin que tiene que ser verdadera.
Sintaxis:
do
{
...................... ;
SENTENCIAS EJECUTABLES;
...................... ;
}
CAPITULO VIII: Lenguaje de programacin C++
237
while (CONDICIN _ 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;
Lic. Elmer Alberto Len Zrate
238
cout << DESEA SEGUIR S/N:;
cin >> OP;
} while (OP == S);
8.7.3 DE SALTO
Definicin 8.13 Estas instrucciones hacen que en un determinado momento de la
ejecucin del programa se traslade a otra parte o abandone una instruccin
repetitiva y pueda continuar con el resto del programa, existen tres clases: break,
continue y goto.
A) BREAK.- Hace finalizar la ejecucin del Ciclo bucle: DO, FOR, SWITCH,
WHILE ms interno que lo contenga.
Sintaxis:
break;
BREAK solamente finaliza la ejecucin de la sentencia de donde esta incluida.
Ejemplo 8.14
Imprimir los 4 primeros nmeros enteros
n=1;
while(n < 5)
CAPITULO VIII: Lenguaje de programacin C++
239
{
cout<< n;
if (n == 4)
break;
else
n++;
}
B) CONTINUE.- Traslada la ejecucin del programa a la ltima lnea del Ciclo
bucle: DO, FOR, SWITCH, WHILE ms interno que lo contenga.
Sintaxis:
continue;
Ejemplo 8.15
Imprimir los nmeros entre 1 y 50 que no sean mltiplos de 5
n=1;
while(n < 50)
{
Lic. Elmer Alberto Len Zrate
240
if (n % 5 == 0)
continue;
else
cout<< n;
n++;
}
C) GOTO.- Traslada la ejecucin del programa a una lnea especfica 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:;
CAPITULO VIII: Lenguaje de programacin C++
241
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
Definicin 8.14 Es una coleccin independiente de declaraciones y sentencias,
generalmente realiza una tarea especfica, En C++ existe una funcin por naturaleza
y es el programa principal:
void main ( )
{

}
Lic. Elmer Alberto Len Zrate
242
Cuando se llama a una funcin el control pasa a la funcin para su ejecucin,
una vez finalizado el trabajo de la funcin devuelve el control a la funcin que lo
llam.
void main( ) Funcin1( ) Funcin2( )
{ { {
Funcin1 ( ); Instrucciones; Instrucciones;
Instruccin; Funcin2 ( ); }
}
Instruccin;
}
Observacin 8.5
- Una funcin no pertenece al programa
- En el programa slo se le llama
- El cuerpo de una funcin es la parte funcional de un programa.
- Una funcin siempre debe estar fuera de la funcin principal main( ).
PASOS PARA DEFINIR UNA FUNCIN:
1. Tener en cuenta las variables globales o locales
CAPITULO VIII: Lenguaje de programacin C++
243
2. En C++ se debe declarar una funcin antes de utilizarla, colocndolo el
encabezado de la funcin
int suma (int a, int b);
3. Comenzar con la funcin
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 funcin luego de su uso (no
es necesario, solo en casos que se quiera hacer referencia a la salida).
NOMBRE : Es el nombre de la funcin, trata de no tenerlo como variable.
Lic. Elmer Alberto Len Zrate
244
TIPO VARIABLE DE ENTRADA
Aqu se colocan las Variables con su respectivo tipo de Datos que entraran a
la funcin para su posterior uso, reemplazando a la variable verdadera.
Si dentro de la funcin se hace uso de variables que no pertenecen a la
funcin MAIN solo se declararan dentro de la funcin, como una variable local.
FORMAS:
SUMA ( ); Funcin Sin Argumentos
int SUMA ( );
int SUMA (int A); Funcion con 1 entrada
int SUMA ( int A,int B) ; Funcion con 2 entradas
int SUMA ( int A, float C, int B) Funcion con 3 entradas
VALOR RETORNADO POR UNA FUNCIN 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;
CAPITULO VIII: Lenguaje de programacin C++
245
Observacin 8.6
- Esta variable debe estar declarado dentro de la funcin o como variable
global.
- En el valor de retorno tambin se le puede alterar su devolucin
return (N)
return (N + 2)
return (N * 2)
LLAMADA A LA FUNCIN
Una llamada se realiza para que la funcin tenga efecto.
Sintaxis:
[Variable =] Nombre_de_la_funcin (parmetros o argumentos)
Ejemplo 8.17
Suma ( )
cout << suma ( )
Su = suma ( )
Lic. Elmer Alberto Len Zrate
246
8.9 LIBRERA DE FUNCIONES CREADAS POR EL USUARIO
Definicin 8.15 Son un programa fichero que tiene las funciones que sern
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 funcin grabarlo con un nombre y extensin
(.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 funcin que se encuentra dentro
del programa hpp.
Sintaxis:
En la Cabecera del programa CPP:
# include NombredelFichero.hpp
8.10 ARREGLOS
Definicin 8.16 Los arreglos son estructuras de datos, que permiten el
almacenamiento masivo de informacin.
CAPITULO VIII: Lenguaje de programacin C++
247
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 dems
- Se puede acceder a cada elemento indicando el nmero de ndice.
- Se pueden manipular con operaciones de cualquier tipo
Los Arreglos se presentan en dos formas:
8.10.1 VECTORES O ARREGLOS UNIDIMENSIONALES
Definicin 8.17 Son listas de datos que pueden almacenar un nmero determinado
de datos.
0 1 .... n
NOMBRE
DEL
ARREGLO
Dato 1 Dato 2 .....

Dato N
Un vector est compuesto:
Nombre del Arreglo
ndice : 0, 1, 2, 3,... n (Utilizar Estructuras Repetitivas)
Lic. Elmer Alberto Len Zrate
248
Datos : Son los datos ingresados al arreglo de un mismo
tipo.
Ejemplo 8.18
0 1 2 3 4
NOTAS 08 09 10 11 10
NOMBRES ANA LUISA LIZA JANET ELISA
PROMEDIOS 10.5 11.50 3.45 19.55 0.025
Para acceder a cada elemento solo se escribir el nombre de la variable
arreglo y el ndice.
- Para acceder a Janet NOMBRES [ 3 ]
- Para acceder a 3.45 PROMEDIOS [ 2 ]
Sintaxis:
TIPO_DE_DATOS NOMBRE_DEL_ARREGLO [TAMAO_APROX];
Observacin 8.7
Si el tipo de datos del arreglo es de caracteres su declaracin ser:
char nombre_del_arreglo [tamao_aprox] [cantidad_de_espacios];
Ejemplo 8.19
- Declarar el ingreso de 5 notas enteras: int notas [ 5 ] ;
CAPITULO VIII: Lenguaje de programacin C++
249
Ejemplo 8.20
- Declarar el ingreso de 5 nombres de personas : char nombres [5] [20];
8.10.2 MATRICES O ARREGLOS BIDIMENSIONALES
Definicin 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.
Lic. Elmer Alberto Len Zrate
250
Ejemplo 8.21
Nombre del Arreglo: NMERO
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 (NMERO [ 1 ][ 1 ])
- Para acceder a la Letra L (NMERO [ 4 ][ 3 ])
Sintaxis:
TIPO_DATOS NOM_ARREGLO [TAMAO_FILAS] [TAMAO_COLUMNAS];
Observacin 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.
CAPITULO VIII: Lenguaje de programacin C++
251
for( I = 1 ; I < = 3 ; I + + )
for( j = 1 ;j < = 3 ; j + + )
cin>> nmeros [I] [j];
for( I = 1 ; I < = 3 ; I + + )
for( j = 1 ;j < = 3 ; j + + )
suma=suma+nmeros[ I ] [ j ] ;
cout<<la suma es << suma;
8.10.3 RELACION DE EJERCICIOS RESUELTOS
1. En una Funcin recursiva determinar si un nmero es primo o no, y termine con el
ingreso de un nmero 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)
Lic. Elmer Alberto Len Zrate
252
{ 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 Mnimo Comn mltiplo de 2 nmeros ingresados, utilizando Funcin
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 NMEROS: "; cin>>a>>b;
x=mcd(a,b);
mcm(a,b,x);
getch();
return 0;
}
CAPITULO VIII: Lenguaje de programacin C++
253
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 Mximo Comn Divisor de 2 nmeros ingresados, utilizando
Recursividad.
#include<conio.h>
#include<bcd.h>
#include<stdio.h>
int n1,n2,m2,m1,mayor,menor,r;
void main()
{
clrscr();
Lic. Elmer Alberto Len Zrate
254
cout<<"Ingrese 2 nmeros para sacar el mximo comn 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. Funcin recursiva para listar los 100 primeros nmeros primos.
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
int divisor();
int primos();
CAPITULO VIII: Lenguaje de programacin C++
255
int i=2,c=0,n=1,s=0;
void main()
{ clrscr();
cout<<"los 100 nmeros 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. Funcin recursiva para listar los 30 primeros nmeros primos.
#include<bcd.h>
#include<stdio.h>
#include<conio.h>
int primos();
int i=2;
Lic. Elmer Alberto Len Zrate
256
void main()
{ clrscr();
cout<<"los 30 primeros nmeros 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 funcin 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);
CAPITULO VIII: Lenguaje de programacin C++
257
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)
Lic. Elmer Alberto Len Zrate
258
{ // Si el numero fuera 1520
if (a>mayor) // 1 > 0
mayor=a; // mayor=1
else
mayor=mayor;
return mayor;
}
compara2 (int a)
{ // Si el numero fuera 1520
if (a<menor) // 1 < 0
menor=a; // menor=1
else
menor=menor;
return menor;
}
8.11 ESTRUCTURAS EN C++
Definicin 8.19 Una estructura se puede definir como una coleccin de Datos de diferentes
tipos de datos, lgicamente relacionados.
Definicin 8.20 Una estructura se utiliza cuando de un objeto se va a nombrar varias
caractersticas atributos.
CREACIN DE UNA ESTRUCTURA
- Crear una estructura es definir un nuevo tipo de datos, denominado TIPO
ESTRUCTURA
CAPITULO VIII: Lenguaje de programacin C++
259
- 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;
Lic. Elmer Alberto Len Zrate
260
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; // Tambin 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;
CAPITULO VIII: Lenguaje de programacin C++
261
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();
}
Lic. Elmer Alberto Len Zrate
262
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 Hernndez 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.
// Declaracin
struct item
{
char paterno [20], materno [20], nombres [20], carrera [30], turno [10];
int ciclo;
} alumno [50];
// Llenado de datos
CAPITULO VIII: Lenguaje de programacin C++
263
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) ;
}
Observacin 8.9
Si existen campos que tienen que subdividirse dentro de la declaracin de una
estructura se tiene que declarar una nueva estructura dentro de la estructura y se seguirn
llamando por medio de puntos.
Ejemplo 8.26
Fecha de Nacimiento Da, mes, ao
Apellidos Paterno, Materno, Nombres
Edad y promedio
struct datos
{ struct a
{
char nombre[20],paterno[20],materno[20];
} apellidos;
struct f
{
int dia,mes,ao;
Lic. Elmer Alberto Len Zrate
264
} fecha;
int edad;
float promedio;
} alumno[20];
8.12 ARCHIVOS EN C++
Definicin 8.21 Los Archivos o Ficheros es una coleccin de informacin que almacena y
recupera informacin 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 librera < 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 mtodos o funciones ms utilizados:
- open ( NOMBRE ) Abre el Archivo
- close( ) Cierra el Archivo
- get ( CARACTER ) Obtiene el carcter o byte
- eof( ) Determina si se alcanzo el final del archivo
CLASE OFSTREAM
Permite el manejo de archivos solamente de grabacin o salida Escritura
(O UTPUT F ILE STREAM).
Esta clase dispone de los siguientes mtodos o funciones ms utilizados:
CAPITULO VIII: Lenguaje de programacin C++
265
- open ( NOMBRE) Abre el archivo
- close( ) Cierra el archivo
- put (CARACTER) Graba un caracter o byte
- eof( ) 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 Aadir al Final del Registro
- ios : : binary Permite abrir archivos binarios
- Para la combinacin 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
Lic. Elmer Alberto Len Zrate
266
- 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 mtodos diferentes:
- Definir la librera fstream.h
- Llamara a la funcin 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);
CAPITULO VIII: Lenguaje de programacin C++
267
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
CARACTERSTICAS
- Ocupa menos espacio que los archivos de textos.
- No contienen caracteres de espacio en blanco.
- Los datos no estn organizados en lneas ms bien en forma de Registros de una Base
de Datos.
- El formato Binario es ms preciso para nmeros.
CLASE FSTREAM
La entrada es de Lectura y Escritura normalmente para binarios.
8.12.3 OPERACIONES DE ARCHIVOS BINARIOS
A) ABRIR EL ARCHIVO
Lic. Elmer Alberto Len Zrate
268
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, TAMAO_ESTRUCTURA_BYTE);
D) LECTURA DE CARACTERES DE FLUJO
ARCHIVO1.get ((char), CONTADOR_BYTES ++ ) ;
ARCHIVO1.read((char*)&Estructura, TAMAO_ESTRUCTURA_BYTES);
// AQU SE IMPRIMEN LOS DATOS
// AQU SE COMPARAN DATOS PARA SU BUSQUEDA, SOLO NUMEROS
Observacin 8.10
El Tamao de la Estructura en Bytes para la lectura no es conocido utilizar el comando:
sizeof(Estructura);
Ejemplo 8.29
sizeof(persona);
sizeof(empleado);
CAPITULO VIII: Lenguaje de programacin C++
269
8.12.4 RELACION DE EJERCICIOS RESUELTOS
1.- Programa para la creacin 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>
Lic. Elmer Alberto Len Zrate
270
#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);
CAPITULO VIII: Lenguaje de programacin C++
271
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 creacin 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();
}
Lic. Elmer Alberto Len Zrate
272
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 ms datos a un archivo de texto ya creado
#include<conio.h>
#include<stdio.h>
#include<bcd.h>
#include<fstream.h>
void main()
{
clrscr();
CAPITULO VIII: Lenguaje de programacin C++
273
//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 creacin de un archivo de texto
#include<stdlib.h>
#include<fstream.h>
#include<stdio.h>
Lic. Elmer Alberto Len Zrate
274
#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>
CAPITULO VIII: Lenguaje de programacin C++
275
#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 creacin 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>
Lic. Elmer Alberto Len Zrate
276
#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>
CAPITULO VIII: Lenguaje de programacin C++
277
#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++);
Lic. Elmer Alberto Len Zrate
278
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++
Definicin 8.22 Una cadena de caracteres es un Arreglo Unidimensional, en el cual todos
los elementos contenidos en el son de tipo carcter.
8.13.1 LEER UNA CADENA DE CARACTERES
FUNCIN cin>>
FUNCIN gets: Lee caracteres y lo almacena en una variable especificada, a diferencia de la
funcin cin, la funcin gets permite la entrada de una cadena de caracteres formada por
palabras separadas por espacios en blanco sin ningn tipo de formato.
El cin acta como separador de variable al dejar espacio solo para caracteres.
Sintaxis:
gets (CADENA);
CAPITULO VIII: Lenguaje de programacin C++
279
8.13.2 ESCRBIR UNA CADENA DE CARACTERES
FUNCION cout<<
FUNCION puts: Escribe una cadena de caracteres en la salida estndar y reemplazar
el carcter nulo de terminacin de la Cadena (\0) por el carcter nueva lnea (\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 librera 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 unin de las cadenas es:<< strcat(NOMBRE1, NOMBRE2);
Lic. Elmer Alberto Len Zrate
280
2DA FORMA: char NOMBRE1 (30) , NOMBRE2 (30);
gets ( NOMBRE1); gets ( NOMBRE2);
strcat ( NOMBRE1, NOMBRE2);
cout<< La unin de las cadenas es: << NOMBRE1;
B) STRCPY.- Esta funcin 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 funcin devuelve la longitud de la cadena
Sintaxis:
strlen (CADENA 1);
Ejemplo 8.32
char NOMBRE1 (30),
gets (NOMBRE1);
CAPITULO VIII: Lenguaje de programacin C++
281
cout <<La Longitud de la cadena es :<< strlen(NOMBRE 1)
D) STRLWR.- Convierte la Cadena de maysculas a minsculas
Sintaxis:
strlwr (CADENA 1);
Ejemplo 8.33
1ERA FORMA: char NOMBRE1 (30),
gets (NOMBRE1);
cout <<En minsculas es: << strlwr (NOMBRE 1)
E) STRUPR.- Convierte la cadena de minsculas a maysculas
Sintaxis:
strupr (CADENA 1);
Ejemplo 8.34
1ERA FORMA: char NOMBRE1(30),
gets (NOMBRE1);
cout <<En maysculas es :<< strupr (NOMBRE1):
F) ATOF.- Convierte una cadena caracteres a un valor de doble precisin
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:
Lic. Elmer Alberto Len Zrate
282
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 nmero
Ejemplo 8.35
Realizar un programa que ingrese un numero entero y determine su base binaria
utilizar la funcin itoa.
# include <conio.h> # include < bcd.h> # include< stdio.h>
# include <string.h> # include < stdlib.h>
void main()
{
clrscr();
char a (15);
int n;
puts(ingrese un nmero 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 grficos en C++, necesita el fichero # include < graphics.h > y los pasos son
los siguientes:
- Activar la librera graphics.h
CAPITULO VIII: Lenguaje de programacin C++
283
- Colocar los controladores y Detecciones de grficos en C++
- Colocar los comandos para la creacin de grficos
- Cerrar los grficos con closegraph( )
- Tener en cuenta las coordenadas
Lic. Elmer Alberto Len Zrate
284
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
CAPITULO VIII: Lenguaje de programacin C++
285
8.14.2 JUSTIFICACION DE TEXTO
HORIZONTAL
- 0 LEFT_TEXT (JUSTIFICAR IZQUIERDA)
- 1 CENTER_TEXT (JUSTIFICAR CENTRADA)
- 2 RIGHT_TEXT (JUSTIFICAR DERECHA)
VERTICAL
- 0 BOTTOM_TEXT (JUSTFICACION ABAJO)
- 1 CENTER_TEXT (JUSTFICACION CENTRADA)
- 2 TOP_TEXT (JUSTFICACION ALTA)
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 creacin de grficos */
getch( );
closegraph( );}
Lic. Elmer Alberto Len Zrate
286
8.14.4 FUNCIONES GRAFICAS
1. PUTPIXEL : Crea un pixel en la posicin X Y.
putpixel( x , y , color);
2. LINE : Crea una lnea
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,tamao _de_proyeccin,1);
1 topon 0 topoff
6. RECTANGLE : Crea un rectngulo
rectangle(x1,y1,x2,y2)
7. LINETO : Crea una lnea desde la posicin 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
CAPITULO VIII: Lenguaje de programacin C++
287
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 pequea
3 sanserif
4 gtica
Tamao
Puede variar de 1 a 10 (Incrementando el tamao)
Valores de direccin
0 forma horizontal
1 forma vertical
1. SETTEXTSTYLE : Se configura el tamao tipo de letra y su forma
settextstyle(tipodeletra, direccin, tamao);
2. OUTTEXTXY : Escribe un texto en la coordenada dada.
outtextxy (x,y, texto);
Lic. Elmer Alberto Len Zrate
288
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 cuntos pares o impares se han ingresado
en el arreglo utilizar funciones.
3. Programa que ingrese 15 nmeros 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 nmeros a un arreglo unidimensional, y diga cul es el
nmero que se repite ms 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 cuntos 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).
CAPITULO VIII: Lenguaje de programacin C++
289
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 travs 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 multiplicacin de la primera columna
- La multiplicacin de la ltima columna
- La suma de la diagonal principal
- La multiplicacin 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 Multiplicacin de matrices.
Lic. Elmer Alberto Len Zrate
290
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 nmeros enteros y realizar la determinante
19. Cubo Mgico 1, Programa que ingrese un nmero 5 a una variable N y con los
nmeros 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 Mgico 2, Programa que ingrese un nmero 4 a una variable N y con los
nmeros 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 nmeros 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 nmeros 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
CAPITULO VIII: Lenguaje de programacin C++
291
- 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 opcin es:
24. Se pide emitir la planilla de pago del personal de una empresa considerando los
siguientes datos por empleado. Cdigo, Apellidos (nombres, paterno, materno),
Sueldo (Bsico, Horas extras, Bruto).
PLANILLA DE SUELDOS
CODIGO NOMBRES PATERNO MATERNO BASICO
HORAS
EXTRAS
XXXX XXXXXX XXXXXX XXXXX 999.99 99
BRUTO 999.99
XXXX XXXXXX XXXXXX XXXXX 999.99 99
BRUTO 999.99
25. En una Biblioteca se desea tener un control sobre los prstamos de sus libros, los
cuales tienen los siguientes datos: CODIGO, TITULO, AUTOR, AO DE EDICION,
FECHA DE DEVOLUCION. Realizar el siguiente men :
- Reporte Total de Libros
- Mostrar los libros ordenados en forma Ascendente por ao
Lic. Elmer Alberto Len Zrate
292
- Consulta
- Salir
Su opcin es:
Formato de Consulta:
Cdigo del Libro : Aqu se ingresara un cdigo
Titulo : xxxx xxx
Autor : xxxxx xxxx
Fecha de devolucin: xxxxxx xxx
26. Realizar una Estructura de Datos para que muestre la TABLA de posiciones de 8
equipos de Ftbol de Primera divisin 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 :
- Campen del Torneo
- Equipos que Irn a la copa Libertadores (3 primeros)
- Equipos que bajan a segunda divisin (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
CAPITULO VIII: Lenguaje de programacin C++
293
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 ms datos o informacin 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
Lic. Elmer Alberto Len Zrate
294
4. Salir
Su opcin es:
NOTA: Para un total de N personas que se ingresara en la opcin 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 nmero 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.
CAPITULO VIII: Lenguaje de programacin C++
295
40. Realizar la siguiente estructura:
CODIGO
DEL
ALUMNO
NOMBRE PATERNO MATERNO CICLO ESPECIALIDAD
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
- Bsqueda por el cdigo del alumno
- Salir
Su opcin 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 DESCRIPCIN 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.
Lic. Elmer Alberto Len Zrate
296
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 maysculas
- Convertirlas en minsculas.
- 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 palndromo ( es un texto que se lee igual
hacia la derecha o hacia la izquierda) Ejemplo: Radar, somos
46. Realizar un programa que ingrese un nmero entero de no ms de 4 cifras y mostrar el
equivalente en palabras. Ejemplo : 2000 dos mil 2001 dos mil uno
297
DISCUSIN
Considerando que el presente trabajo no tiene resultados experimentales,
obtenidos en gabinete o laboratorio no es posible realizar una discusin en ese
sentido. Sin embargo podemos realizar una discusin respecto de otros trabajos.
La elaboracin del texto esta destinada al dictado de la asignatura
Programacin de computadoras, estructurado en xxxxx captulos donde se exponen
los principales conceptos de la informtica 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
captulo se presenta una relacin de ejemplos desarrollados para una mejor
comprensin. La mayora 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 enseanza y aprendizaje en esta materia y ser de gran utilidad a los profesores
y alumnos universitarios interesados en las aplicaciones de la informtica a las
ciencias e ingenieras.
298
REFERENCIAS BIBLIOGRAFICAS
1.- JOYANES AGUILAR, LUIS; Fundamentos de programacin,
FERNANDEZ AZUELA, MATILDE; Madrid: McGraw-Hill, 2
a
edicin, 1998.
RODRIGUEZ BAENA, LUIS
2.- DEL AGUILA S,W. Algoritmos y diagramas de flujo, Lima:
Gmez, 1
a
edicin, 1992.
3.-JOYANES AGUILAR, LUIS. C++ a su alcance,
Madrid: McGraw-Hill, 1
a
edicin, 1994.
4.-CEVALLOS SIERRA, FRANCISCO. Curso de programacin C++,
Madrid: RA-MA, 1
a
edicin, 1997.
5.- DELORES M, ETTER Solucin de problemas de ingeniera con
MATLAB, Mxico: Prentice-Hall, 2
a
edicin,
1998.
6.- NAKAMURA, CHOICHIRO Anlisis Numrico y Visualizacin Grafica
con Matlab, Mxico: PrenticeHall, 1
a
edicin, 2000.
7.- STROUSTRUP, BJARNE. El Lenguaje de programacin C++,
Madrid: Addison-Wesley, 3
a
edicin, 2002.
8. - STROUSTRUP, BJARNE. The C++ Programming Language,
Madrid: Addison-Wesley, 3
a
edicin, 2000.
9.- STROUSTRUP, BJARNE. The Design and Evolution of C++,
Madrid: Addison-Wesley, 1
a
edicin, 1994.
299
10.- COPLIEN, JAMES. Advanced C++:Programming Styles and Idioms,
Madrid: Addison-Wesley, 3
a
edicin, 1992.
11.- MUSSER, D.R. Effective C++,
Madrid: Addison Wesley, 2
a
edicin, 1997.
12.- FORD, W TOPP, W. Data structures with C++,
Mxico: Prentice Hall, 2
a
edicin, 2002.
300
APENDICE
DIAGRAMA DE LAS ESTRUCTURAS DE DATOS

Anda mungkin juga menyukai