i n d i c e - unac.edu.pe · 7.5 matlab y el algebra lineal. 172 7.6 comandos de ... las...

300
1 I N D I C E Pág. INDICE 1 RESUMEN 5 INTRODUCCION 6 MARCO TEORICO 9 MATERIALES Y METODOS 11 RESULTADOS 12 CAPÍTULO I 1. HARDWARE Y SOFTWARE. 13 1.1 Hardware 13 1.2 Software. 33 1.3 Conceptos Básicos 41 1.4 Relación de Ejercicios 42 CAPÍTULO II 2. HERRAMIENTAS DE PROGRAMACIÓN. 47 2.1 Análisis del problema 47 2.2 Diseño del algoritmo 48 2.3 Diagramas de Flujo 48 2.3 Pseudocódigo. 51 2.4 Relación de ejercicios 52

Upload: duongthu

Post on 25-Sep-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

1

I N D I C E

Pág.

INDICE 1

RESUMEN 5

INTRODUCCION 6

MARCO TEORICO 9

MATERIALES Y METODOS 11

RESULTADOS 12

CAPÍTULO I

1. HARDWARE Y SOFTWARE. 13

1.1 Hardware 13

1.2 Software. 33

1.3 Conceptos Básicos 41

1.4 Relación de Ejercicios 42

CAPÍTULO II

2. HERRAMIENTAS DE PROGRAMACIÓN. 47

2.1 Análisis del problema 47

2.2 Diseño del algoritmo 48

2.3 Diagramas de Flujo 48

2.3 Pseudocódigo. 51

2.4 Relación de ejercicios 52

2

CAPITULO III

3. PROGRAMACIÓN ESTRUCTURADA. 54

3.1 Secuenciales 54

3.2 Selectivas 55

3.3 Repetitivas. 58

3.4 Relación de ejercicios 62

CAPÍTULO IV

4. ESTRUCTURA DE DATOS. 65

4.1 Tipos de datos 65

4.2 Estructura de datos 68

4.2.1Estaticas. 68

4.2.2 Dinámicas 102

4.3 Relación de Ejercicios. 133

CAPITULO V

5. TEORÍA DE GRAFOS. 136

5.1 Conceptos Básicos. 136

5.2 Representación de grafos. 139

5.3 Exploración de grafos. 143

5.4 Relación de ejercicios. 145

CAPÍTULO VI

6. ORDENAMIENTO Y BÚSQUEDA DE DATOS. 147

6.1 Ordenamiento de datos. 147

6.2 Búsqueda de datos. 158

6.3 Relación de ejercicios. 166

3

CAPÍTULO VII

7. SOFTWARE DE PROGRAMACIÓN MATLAB. 168

7.1 Introducción. 168

7.2 Operadores 169

7.3 Variables. 171

7.4 Expresiones. 171

7.5 Matlab y el algebra lineal. 172

7.6 Comandos de programación. 192

7.7 Gráficos 2-D. 199

7.8 Gráficos 3-D. 204

7.9 Relación de ejercicios. 212

CAPÍTULO VIII

8. LENGUAJE DE PROGRAMACIÓN C++. 220

8.1 Introducción. 220

8.2 Operadores. 221

8.3 Tipos de datos. 223

8.4 Constantes. 224

8.5 Variables. 225

8.6 Entrada y salida de datos. 226

8.7 Instrucciones de control. 227

8.8 Funciones. 241

8.9 Librería de funciones creadas por el usuario. 246

8.10 Arreglos. 246

8.11 Estructuras en C++. 258

8.12 Archivos en C++. 264

4

8.13 Cadenas de caracteres en C++. 278

8.14 Gráficos en C++. 282

8.15 Relación de ejercicios. 287

DISCUSION 297

REFERENCIAS BIBLIOGRAFICAS 298

APENDICE 300

Diagrama de las estructuras de datos 300

5

RESUMEN

En este trabajo de investigación se ha elaborado un texto de naturaleza teórico-práctico

que expone de forma sistemática y detallada, las definiciones y ejemplos más importantes de

las Estructuras de datos, Herramientas de programación, Ordenamiento y búsqueda de datos,

Software Matlab y el Lenguaje de programación C++, permitiendo el dictado de la asignatura

de programación de computadoras correspondiente al cuarto ciclo académico del currículo de

estudios de la Escuela profesional de Matemática de la Facultad de Ciencias Naturales y

Matemática de la Universidad Nacional del Callao.

El texto “Programación de computadoras y sus aplicaciones” procura hacer

comprender la asignatura en referencia y así mismo pretende preparar al estudiante para que

emprenda con éxito el estudio de asignaturas de ciclos posteriores, tales como: Investigación

Operativa I y II, Matemática Computacional I, II y III, Métodos matemáticos y los Cursos de

seminario I y II de la Línea del Análisis Numérico y Matemática Computacional.

El texto está basado, en su plan general y en algunas extensiones de su

contenido, en los textos mencionados en los referenciales; sin embargo, la diferencia es que

aquí hemos recopilado lo necesario para el desarrollo de la asignatura de programación de

computadoras y además tenemos ejercicios de aplicación para cada uno de los capítulos a un

nivel adecuado, lo que le da un carácter integral y funcional a la obra.

El resultado muestra que, en comparación con los textos elaborados por otros autores

mencionados en la referencia bibliográfica, el texto “PROGRAMACION DE

COMPUTADORAS Y SUS APLICACIONES” hace más dinámico y fácil el proceso de

enseñanza y aprendizaje de esta asignatura.

6

INTRODUCCION

Con el avance de la ciencia y la tecnología nos enfrentamos a una manera diferente de

enseñar las matemáticas y sus aplicaciones.

La asignatura de programación de computadoras proporciona las herramientas

necesarias para la utilización de la computadora como un complemento para el estudio de las

ciencias e ingeniería.

No podemos estar al margen del avance de la tecnología informática que se ha

convertido en una herramienta de investigación para la resolución de complejos problemas

planteados en la realización y aplicación de modelos matemáticos de Ingeniería u otras

disciplinas. Por tanto es necesario contar con un texto que nos permita utilizar de forma

eficiente sus aplicaciones a la matemática e ingeniería.

Es muy limitado la bibliografía, especialmente en textos que logren compilar y

tratar todos los temas relacionados con la asignatura de programación de computadoras,

encontramos en la literatura mayormente que ponen énfasis a ciertos temas. Se requiere un

texto donde podamos relacionar conocimientos teóricos y aplicaciones prácticas, experiencias

de aplicaciones en diferentes ramas de la ciencia e ingenierías. Por lo que es importante

recopilar toda información posible, que se encuentra dispersa, ordenándola en forma sencilla

y razonada, dando origen a la creación del Texto: “Programación de computadoras y sus

aplicaciones.”

En este sentido el problema de la investigación consistió en elaborar un texto de

naturaleza teórico-práctico que oriente adecuadamente el desarrollo sistemático y concreto de

la asignatura de “PROGRAMACION DE COMPUTADORAS” con aplicaciones

fundamentales para estudiantes de ciencias e ingeniería.

7

El presente trabajo constituye una investigación de gabinete (búsqueda, recopilación,

ordenación y centralización de material bibliográfico). Es necesario indicar que con el

presente texto no se pretende agotar un tema bastante extenso, complejo y que guarda relación

con otras áreas tanto en ciencia e ingenierías, por el contrario se desea exponer de manera

pragmática y accesible los temas contenidos en el syllabus de “Programación de

Computadoras” para que sirva de guía y referencia preferencialmente para los estudiantes

universitarios de la especialidad matemática y afines.

OBJETIVO GENERAL

Desarrollar - preparar, redactar y editar - un texto de “Programación de Computadoras

y sus aplicaciones” en el que se compile información técnica y científica existente, que sirva

de guía y referencia bibliográfica para los estudiantes de ciencias e ingenierías principalmente

de la Universidad Nacional del Callao.

OBJETIVOS ESPECÍFICOS

Complementar y afianzar los conocimientos impartidos en la asignatura de

Programación de computadoras.

Presentar al lector conceptos y aplicaciones sobre temas específicos tales como:

hardware y software, herramientas de programación, programación estructurada, estructuras

de datos, teoría de grafos, ordenamiento y búsqueda de datos, lenguajes de programación

matlab y C++.

El texto: “Programación de Computadoras y sus aplicaciones” permitirá que el usuario

lector, sea estudiante o no, tenga un material de consulta de primera mano a su disposición,

en donde se centralizará la información científica y técnica existente, relacionadas con las

herramientas básicas de programación y sus aplicaciones a las ciencias e ingeniería.

8

La información que se recopilará, está frecuentemente dispersa en libros, revistas y

manuales, entre otros, de procedencia nacional e internacional. Se compilará después de una

exhaustiva revisión y análisis del material utilizado, es allí donde radica la importancia del

presente trabajo, porque permitirá generar una fuente bibliográfica de constante consulta de

los estudiantes de matemática y ramas afines.

El Texto: “Programación de computadoras y sus aplicaciones” permitirá cubrir parte

de la brecha existente por la falta de bibliografía aplicada, donde se incluyan los nuevos

avances de la tecnología informática.

9

MARCO TEORICO

Existen pocos textos que logren compilar y tratar todos los temas relacionados con la

programación académica del curso de programación de computadoras, se encuentra

bibliografía que ponen énfasis en algunos temas y en otros no.

Todos los capítulos en su integridad contienen material aprovechable (teoría-practica)

para los estudiantes de ciencias e ingenierías.

Los temas más importantes acorde con la programación académica y que se trataran en

este texto son los siguientes:

PROGRAMACION ESTRUCTURADA

La programación estructurada es una forma de escribir programas de ordenador de

forma clara. Para ello utiliza únicamente tres estructuras: secuencia, selección e iteración;

siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional

(GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las

necesidades de programación existentes en los años 1960, principalmente debido a las

aplicaciones gráficas, por lo que las técnicas de programación estructurada no son suficientes.

Ello ha llevado al desarrollo de nuevas técnicas, tales como la programación orientada a

objetos y el desarrollo de entornos de programación que facilitan la programación de grandes

aplicaciones (Joyanes Aguilar, Fernandez Azuela & Rodriguez Baena, 1998).

ESTRUCTURA DE DATOS

La estructura de datos es una forma de organizar un conjunto de datos elementales con

el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se

tiene en un sistema (Joyanes Aguilar & Zahonero Martinez,1998).

10

TEORIA DE GRAFOS

La teoría de grafos estudia las propiedades de los grafos (también llamadas gráficas).

Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección de

pares de vértices, llamados aristas que pueden ser orientados o no. Típicamente, un grafo se

representa mediante una serie de puntos (los vértices) conectados por líneas (las aristas).

SOFTWARE MATLAB

MATLAB es un software desarrollado en un ambiente de algoritmo de interacción,

visualización y análisis de datos.Con esta herramienta se puede resolver problemas

computacionales técnicos más rápido que con los tradicionales lenguajes de programación,

tales como: C, C++ y Fortran.

Es usado para una gran variedad de cálculos científicos y de ingeniería, especialmente

para control automático y diseño de procesos además de otra variedad de aplicaciones tales

como: procesamiento de señal e imágenes, comunicaciones y modelamiento financiero

(Nakamura, 2000).

LENGUAJE DE PROGRAMACION C++

El Lenguaje de Programación C++ fue creado por Bjarne Stroustrup en 1985 como

una extensión del Lenguaje C, el mismo que es más consistente y conocido que otros

lenguajes de programación científicos.

El Lenguaje de Programación C++ es de propósito general porque ofrece control de

flujo, estructuras sencillas y un buen conjunto de operadores. Se puede utilizar en varios tipos

de aplicación (Stroustrup, 2002).

11

MATERIALES Y MÉTODOS

MATERIALES

El texto “PROGRAMACION DE COMPUTADORAS Y SUS APLICACIONES” no

está sujeto a experimento de laboratorio, sin embargo se ha desarrollado sobre la base de

textos, que se propone en la referencia: Nakamura Choichiro(2000), Stroustrup Bjarne(2002),

Delores Etter(1998), software especializado y experiencias propias en el dictado de la

asignatura Programación de Computadoras.

Además también se ha usado material de tipo técnico en el diseño e impresión de

informes trimestrales y final. Toda la información ha sido procesada en una computadora

personal, usando Microsoft Word y en concordancia con las directivas vigentes, mediante el

cual se han editado y elaborado los esquemas y dibujos relacionados a los diversos temas

desarrollados.

MÉTODOS

Luego de realizar la recolección de datos necesarios para la investigación. Los

métodos usados en la discusión de los temas de cada capítulo son clasificados en: Inductivo,

deductivo e inductivo-deductivo.

El método deductivo es conciso y lógico que permite desarrollar la asignatura de

Programación de Computadoras en forma concreta y ordenada.

El método inductivo-deductivo ha hecho posible mostrar el desarrollo de los

programas codificados en el lenguaje de programación C++ y que describen la solución de

problemas concretos de los estudiantes de ciencias e ingenierías así como también, el análisis

de las soluciones para los ejercicios presentados. Estos métodos han permitido que el trabajo

tenga contenido y mayor calidad

12

RESULTADOS

El resultado del presente trabajo de investigación es el texto:

“PROGRAMACION DE COMPUTADORAS Y SUS APLICACIONES” cuyo contenido se

expone en ocho capítulos distribuidos en el orden señalado en el índice y que se presenta en

las paginas siguientes.

En cada capítulo se exponen, en forma clara y directa, los conceptos y leyes

asociados a los temas tratados, a fin de que el estudiante pueda tener una buena referencia

para comprender la solución de los problemas que se presentan al final del capítulo.

Por otro se han elaborado algunas figuras de diagramas de flujo con el fin de

facilitar la comprensión de los programas desarrollados y luego poder codificarlo en el

Lenguaje de programación C++.

Adicionalmente se diseñaron por cada capítulo una relación de ejercicios que

fueron propuestos para ser resueltos con los temas enseñados.

El uso del texto: “PROGRAMACION DE COMPUTADORAS Y SUS

APLICACIONES” permite unificar los conceptos teóricos con los prácticos, lo cual favorece

el proceso enseñanza-aprendizaje de la asignatura de Programación de computadora de

acuerdo a la propuesta silábica para su dictado. Además permite afianzar en el estudiante los

conceptos informáticos básicos y aplicarlos en diferentes áreas.

13

CAPITULO I

HARDWARE Y SOFTWARE

1.1 HARDWARE

¿QUÉ ES UNA COMPUTADORA?

Figura 1.1 Computadora

Definición 1.1 Persona o Dispositivo mecánico o electrónico que realiza cómputos, o sea,

que cuenta o calcula aritméticamente. Su función fundamental es sumar y restar.

La diferencia entre una computadora y una calculadora es que ésta no solo cuenta,

además realiza cálculos mucho más complejos como manejo de exponentes, raíz cuadrada,

etc.

La comúnmente denominada COMPUTADORA realiza funciones mucho más

complejas que contar y calcular, además de trabajar con números también efectúa funciones

lógicas, trabaja con información concreta: palabras, imágenes, sonidos.

Por la tanto la Real Academia de la Lengua la ha titulado como ORDENADOR.

Lic. Elmer Alberto León Zárate

14

Definición 1.2 El ordenador es una máquina de propósito general que gracias a su

velocidad recibe todo tipo de información, la procesa o sea la ordena y una vez procesada la

emite ya digerida para su interpretación.

Definición 1.3 El ordenador es un conjunto de circuitos electrónicos comprimidos en una

pastilla de silicio (llamada Chip), siendo su función fundamental la de encausar las señales

electromagnéticas de un dispositivo a otro.

Definición 1.4 El ordenador es en realidad el MICROPROCESADOR, o sea un

conmutador, es el cerebro y razón de ser del ente denominado computadora. Todo lo demás

que le rodea y se le es conectado no es más que dispositivos mediante los cuales el cerebro se

alimenta de energía e interactúa con el medio ambiente y por lo tanto con nosotros los

usuarios.

COMPONENTES BÁSICOS DE HARDWARE

Al conjunto físico de todos los dispositivos y elementos internos y externos de una

computadora suele denominarse el HARDWARE. Esto es, Equipo Duro. Dichos elementos

son entre los más importantes los siguientes:

1.1.1 UNIDAD CENTRAL DE PROCESO

Definición 1.5 Es en sí en cerebro, el cual se compone a su vez de Unidad Aritmética,

Lógica y de control. Esta unidad trabaja en base a un reloj maestro que coordina la ejecución

de todas las operaciones que realiza el microprocesador.

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 ejecución de tareas esta determinado completamente por el

microprocesador el cual subdivide a las computadoras en diferentes tipos, entre ellos algunas

ya obsoletas como son: las llamadas 8086 XT, 80286, 80386, 80486 y Pentium (80586),

bautizadas así por la compañía fabricante INTEL la cual ha proveído desde las primeras PC’s

y hasta hoy a la mayoría de maquiladoras de computadoras con sus modelos de cerebro.

Sin embargo Intel no es ya el único fabricante de microprocesadores para las

Computadoras Personales, compiten también en el mercado compañías como Cyrix, AMD,

Power Pc, Digital Equipment, etc. Sin embargo, aunque en competencia la mayoría de esas

compañías ofrecen microprocesadores equivalentes a los estándares ofrecido serie por serie

por Intel Corporation.

El modelo de un microprocesador nos indica sobre todo el PODER o sea el potencial

de tareas que un microprocesador puede ejecutar a la vez y su reloj nos indica su

Lic. Elmer Alberto León Zárate

16

VELOCIDAD de sincronización con la cual éstas son realizadas. Así entre una computadora

286 y una 486 hay una notable diferencia de poder y velocidad incomparable ya que a la

primera no podremos agregarle u ordenarle tantas cosas como a la segunda; y por otro lado

entre una 486 de 25 Mhz y una 486 de 50 Mhz estamos hablando que las dos tienen el mismo

poder, pero la segunda dobla la velocidad a la primera.

1.1.2 TARJETA PRINCIPAL

Definición 1.6 También llamada Tarjeta Madre o Motherboard es donde se encuentran las

conexiones básicas para todos los componentes de la computadora, los cuales giran en torno

al microprocesador. Es básicamente la que permite o no el futuro crecimiento de las

habilidades de cualquier computadora, una tarjeta con una arquitectura muy cerrada terminará

con la vida de todo el equipo en el momento que ésta requiera una reparación o mejora, éste

fue el caso de la mayoría de las computadoras que existieron en el pasado, como por

mencionar algunas: Comodore 64, Tandy 1000 e incluso todas las XT´s y algunas 286 de

IBM.

Estas se pueden clasificar en la actualidad en:

- Arquitectura de 8 bits: Primeras XT

- Arquitectura ISA 8 -16 bits. La mayoría de las actuales clones

- Arquitectura EISA o MCA de 32 bits. La mayoría 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 MATEMÁTICO O NUMÉRICO

Definición 1.7 Es un microprocesador de instalación opcional, también denominado

Unidad de punto flotante que auxilia al microprocesador en el uso eficiente de programas de

graficación, cálculos matemáticos complejos y diseño entre tantos, lo cual al especializarse

dichas funciones acelera la velocidad con que una computadora puede responder a

necesidades tan sofisticadas.

En la actualidad ya vienen incluidos en todas las computadoras nuevas, ya que el

poder que exigen no puede descartar la falta de éste microprocesador. Si usted desea saber si

su computadora cuenta con uno de ellos, sólo vea, si en el modelo tiene agregada el par de

letras DX en el caso contrario, usted necesitará en el futuro inmediato su instalación. Sobre

todo no queda duda si su maquina en lugar de este par de letras presenta otras como SX, como

por ejemplo: 486 SX de 25 Mhz.

En caso que usted necesite la instalación de uno de ellos, debe asegurarse primero lo

siguiente:

Lic. Elmer Alberto León Zárate

18

Que su motherboard cuente con un slot disponible específico para el

coprocesador matemático.

Que el que le venden sea de la misma marca que el Microprocesador Principal

de su computadora

Que trabaje a la misma velocidad que lo hace el Microprocesador Principal de

su computadora. Esto es, si usted cuenta con una computadora 486 SX de 25

Mhz, el coprocesador debe ser un 487 SX de 25 Mhz. Como puede usted

observar el coprocesador es algo así como la mitad del microprocesador

completo.

Figura 1.4 Coprocesador matemático

1.1.4 LA MEMORIA

Definición 1.8 Es la capacidad de almacenar información, la cual se realiza en bancos

separados de la UCP. Su unidad de almacenamiento es el BYTE que es la capacidad de

almacenar un carácter: una letra, número o cualquier símbolo como #, $, &, etc.

CAPITULO I: Hardware y Software

19

Figura 1.5 Memorias

TIPOS DE MEMORIAS:

a) MEMORIA ROM

Definición 1.9 Esta memoria es sólo de lectura, y sirve para almacenar el programa básico

de iniciación, instalado desde fábrica. Este programa entra en función en cuanto es encendida

la computadora y su primera función es la de reconocer los dispositivos, (incluyendo memoria

de trabajo), dispositivos.

b) MEMORIA RAM

Definición 1.10 Esta es la denominada memoria de acceso aleatorio o sea, como puede

leerse también puede escribirse en ella, tiene la característica de ser volátil, esto es, que sólo

opera mientras esté encendida la computadora. En ella son almacenadas tanto las

instrucciones que necesita ejecutar el microprocesador como los datos que introducimos y

deseamos procesar, así como los resultados obtenidos de esto.

Lic. Elmer Alberto León Zárate

20

Por lo tanto, programa que se desea ejecutar en la computadora, programa que

máximo debe ser del mismo tamaño que la capacidad de dicha memoria, de lo contrario se

verá imposibilitada de ejecutarlo.

Observación 1.1

Cuando se vea en la necesidad de adquirir un programa de cómputo,

independientemente de cual o para que sea, lea muy bien las instrucciones antes de pagarlo,

puesto que en ellas debe especificar claramente la cantidad recursos mínimos necesarios que

debe tener su equipo para trabajar con éste. Búsquelos con el título,

Observación 1.2

Como puede usted ver, si al momento de apagar nuestra computadora se volatilizan

nuestros datos almacenados en la memoria RAM, requerimos por lo tanto, de medios que

almacenamiento por tiempo indefinido que nos garanticen la seguridad y confiabilidad de

nuestros datos, o sea, otro tipo de memorias.

1.1.5 MEMORIAS AUXILIARES

Por las características propias del uso de la memoria ROM y el manejo de la RAM,

existen varios medios de almacenamiento de información, entre los más comunes se

encuentran:

CAPITULO I: Hardware y Software

21

a) EL DISQUETE, FLOPPY O DISCO FLEXIBLE

Definición 1.11 Es un medio o soporte de almacenamiento de datos formado por una pieza

circular de material magnético, fina y flexible encerrada en una cubierta de plástico cuadrada

o rectangular. Esta tecnología actualmente muy poco se utiliza.

b) CINTA DE RESPALDO

Definición 1.12 Son como las cintas de cassette de audio y pueden almacenar desde 20

Mbytes hasta 2 Gigabytes o más. Son medios de almacenamiento muy económicos y sobre

todo muy rápidos, ya que pueden almacenar todo un disco duro en un pequeño cassette en

unos cuantos minutos.

Figura 1.6 Cintas de respaldo

c) DISCO DURO

Definición 1.13 El Cuál se instala fijo dentro de la computadora, son más rápidos y

seguros que las unidades de lectura de disquete y cuyas capacidades de almacenamiento van

desde los 40 Gigabytes hasta 500 Gigabytes. Los más rápidos andan por debajo de los 15

milisegundos de acceso de la información. En la actualidad evite comprar discos con

capacidades menores a 40 Gb. En poco tiempo no le servirán prácticamente para nada.

Lic. Elmer Alberto León Zárate

22

Figura 1.7 Disco duro

d) CD-ROM o DISCO COMPACTO

Definición 1.14 Son de mayor capacidad ya que mínimo son de 720 Mbytes y pueden

llegar a almacenar en el futuro alrededor de algunos Terabytes. Se recomienda ir comprando

equipo que contengan éste dispositivo, ya que gracias a las grandes cantidades de información

tan variada que pueden soportar éste tipo de almacenamiento, ya se comienza a construir las

grandes bases de información en un sólo disco: Enciclopedias, Cursos, Viajes turísticos, los

periódicos y revistas del futuro que tenemos frente a nosotros.

Figura 1.8 Disco compacto

CAPITULO I: Hardware y Software

23

1.1.6 FUENTE DE PODER

Definición 1.15 Una fuente de poder o alimentación es un dispositivo que convierte la

tensión alterna de la red de suministro, en una o varias tensiones, prácticamente continuas,

que alimentan los distintos circuitos del ordenador al que se conecta.

Tanto el microprocesador como todos los circuitos que forman los dispositivos se

alimentan de cantidades muy pequeñas de energía necesitan de una fuente que les suministre

y regule la cantidad necesaria. Ya que cualquier variación en el voltaje podría ser suficiente

para quemar dichos circuitos.

Figura 1.9 Fuente de poder

1.1.7 DISPOSITIVOS DE CRECIMIENTO

Definición 1.16 Son las puertas que están listas para recibir la conexión de cualquier otro

aparato o tarjeta que permita ampliar las capacidades de trabajo de una computadora, y son el

punto más importante para asegurarnos haber hecho una buena inversión. Estos son las

Ranuras de Expansión y los puertos.

Los puertos son los puntos de conexión que ya vienen con la computadora y que

permiten la instalación rápida de los dispositivos más comunes, como lo son el teclado, la

impresora, el monitor, etc.

Lic. Elmer Alberto León Zárate

24

1.1.8 DISPOSITIVOS DE ENTRADA DE INFORMACIÓN

Son todos aquellos que permiten al microprocesador la obtención de la información e

instrucciones a seguir en determinado momento. Gracias a ellos, nosotros podemos

comunicarnos con la computadora. Entre los más utilizados se encuentran:

a) EL TECLADO

Definición 1.17 Es un periférico de entrada o dispositivo, en parte inspirado en el teclado

de las máquinas de escribir, que utiliza una disposición de botones o teclas, para que actúen

como palancas mecánicas o interruptores electrónicos que envían información a la

computadora. Después de las tarjetas perforadas y las cintas de papel, la interacción a través

de los teclados al estilo teletipo se convirtió en el principal medio de entrada para las

computadoras. El teclado tiene entre 99 y 127 teclas aproximadamente.

Figura 1.10 Teclado

b) El MOUSE

Definición 1.18 Este dispositivo permite simular el señalamiento de pequeños dibujos o

localidades como si fuera hecho con el dedo índice, gracias a que los programas que lo

aprovechan presentan sobre la pantalla una flecha que al momento de deslizar el dispositivo

CAPITULO I: Hardware y Software

25

sobre una superficie plana mueve la flecha en la dirección que se haga sobre la pantalla. Una

vez señalado, permite escoger objetos e incluso tomarlos y cambiarlos de lugar.

Figura 1.11 Mouse

c) LOS RASTREADORES ÓPTICOS O ESCANNERS

Definición 1.19 Son prácticamente pequeñas copiadoras, que mediante haces de luz

digitalizan punto por punto una imagen y la transfieren a la memoria de la computadora en

forma de archivo, el tipo de información que pueden rastrear se las da su tipo, incluso los hay

que rastrean a colores.

Figura 1.12 Scanner

La calidad de éstos está representada por la resolución máxima a la que pueden

rastrear una imagen, los hay desde 300 dpi hasta 2400, aunque a la hora de comprarlos se

debe tomar en cuenta por un lado la máxima calidad de salida de su impresora y la cantidad

Lic. Elmer Alberto León Zárate

26

de espacio disponible en su disco duro, así como el tamaño de la memoria RAM de su

máquina, ya que de no coincidir nunca podrá usar su rastreador más allá de las capacidades de

su equipo.

Una de las funciones más sobresalientes de los rastreadores de imágenes son las de

permitir que programas inteligentes de reconocimiento de caracteres conviertan la imagen del

documento rastreado en texto libre que puede, una vez convertido ser modificable incluso

letra por letra.

1.- Escáner manual: Se parece al ratón y a medida que se desplaza por una

superficie lisa va convirtiendo la imagen en archivo, son muy lentos y requieren de

mucha precisión para evitar errores en la imagen obtenida.

2.- Escáner de cama: Son básicamente pequeñas copiadoras que al igual qué éstas,

rastrean el documento depositado en su pantalla. Son muy rápidos, precisos y cada

vez más baratos.

3.- Lápiz óptico: También se le conoce como pantalla rastreadora de código de

barras, muy conocidos por nosotros en los grandes supermercados, los cuales

interpretan información codificada mediante un sistema de barras.

4.- Micrófonos mediante tarjetas de audio: Comenzamos a ver a nuestro

alrededor sistemas de cómputo basados en el reconocimiento de voz que puede

efectuar una computadora mediante una tarjeta instalada específicamente para

convertir la voz en bits y viceversa, así ya comenzamos a ver aparatos controlados por

voz, como algunos que nos contestan por teléfono cuando llamamos a algún banco

para pedir nuestro saldo.

CAPITULO I: Hardware y Software

27

1.1.9 DISPOSITIVOS DE SALIDA DE INFORMACIÓN

Son todos aquellos que nos permiten obtener la información procesada por la

computadora, y entre los más comunes se encuentran:

a) EL MONITOR

Definición 1.20 Es un aparato de los llamados CTR (Tubo de rayos Catódicos) en los

cuales se pueden representar los datos de tipo texto o gráficos procesados por la computadora.

El estándar en vídeo de las modernas computadoras se basa en el sistema VGA, el cual le da

al usuario la capacidad de poder representar en la pantalla no sólo imágenes de mejor calidad

sino que incluso se pueden apreciar en calidad normal fotografías auténticas, dicha capacidad

no la tenía ninguno de los sistemas de vídeo anteriores a éste.

Figura 1.13 Monitor

Al momento de escoger una computadora es muy importante que nos hagan saber de

su calidad, marca y garantía individual, ya que este aparato por si sólo es el que: puede

contaminar más, a menor calidad cansará y deteriorará más nuestra vista, consume mucha

energía, se calienta más que todo el equipo, etc.

Lic. Elmer Alberto León Zárate

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 imágenes detalladas, realísticas o

precisas. Esto deben tomarlo en cuenta sobre todo aquellas personas que requieren equipo de

cómputo para prestar servicios de Diseño Gráfico, Arquitectura, Edición de Vídeo, Imprentas,

etc.

A la capacidad de generar imágenes de calidad de un monitor se le llama resolución y

se determina por la cantidad de puntos o “pixeles” que contenga la pantalla. Así un monitor

de 640x480 (El estándar en VGA) representará con menor calidad y cantidad de colores las

imágenes realísticas que uno de 1024x768 comúnmente denominado SuperVGA. También los

hay intermedios de 800x600 puntos.

Además un monitor de sistema VGA normal puede representar imágenes máximo

hasta 256 tonalidades diferentes en cambio uno mejor podrá manejar hasta 16 millones de

tonos en color, aquí reside la razón de su resolución y rapidez.

Tanto la calidad de imagen, precisión y rapidez están soportadas por la llamada Tarjeta

de Vídeo, la cual toma la información de la memoria principal, la almacena en la memoria

propia y le ordena al monitor el orden y acomodo de la información punto por punto. Todo lo

anterior significa que si usted cambia de tipo de monitor así también deberá cambiar el tipo de

Tarjeta de vídeo.

b) LA IMPRESORA

Estas actúan como máquinas de escribir, es decir, vacían la información contenida en

la memoria principal en papel. Y se clasifican en cuatro tipos principales:

CAPITULO I: Hardware y Software

29

1.- MATRICIAL DE PUNTOS

Definición 1.21 Son las más rápidas y vendidas, buenas para el trabajo común de oficina,

aunque ruidosas son las más económicas por hoja impresa y baratas en el mercado. También

se denominan así porque su sistema de impresión esta basado en el mismo de la maquina de

escribir, esto es, un rodillo, papel normal, una cinta entintada, pero en lugar de una cuña con

el tipo de letra aquí se substituye por una cabeza de agujas, las cuales salen en secuencia

vertical punzando los puntos indicados para formar la letra.

Esto lo hacen línea vertical por línea vertical por letra por palabra por renglón. Como

puede usted observar en cualquier momento, esto lo hacen tan rápido que apenas alcanzamos

a apreciar como se va dibujando el renglón de letras dejando atrás ese típico ruido de oficina

computarizada.

La medida de rapidez y calidad es la cantidad de caracteres que pueden imprimir por

segundo, entre las medianas de precio y de buena velocidad de encuentran de 260 y 350 CPS.

Estas características hacen de las impresoras de agujas las impresoras más útiles y económicas

en el trabajo cotidiano de una oficina o empresa.

Figura 1.14 Impresora matricial

Lic. Elmer Alberto León Zárate

30

2.- INYECCION DE TINTA

Definición 1.22 Estas funcionan muy parecido a las de matriz de puntos, solo que en vez

de agujas tienen pequeñísimos microtubos decenas de veces más delgados que un cabello

humano por donde arrojan pequeños chorros o gotas de tinta que al tocar el papel se dispersan

y forman una imagen del texto de muy buen calidad, aunque son baratas son por lo general

más lentas que la de agujas, pero tiene la gran ventaja de manejar alta calidad, incluso las de

colores son las más populares sobre todo en uso profesional, estudiantil y doméstico.

Por un precio razonable se pueden encontrar impresoras de calidad tal a colores que

pueden representar con un muy buen porcentaje de fidelidad una fotografía real a 720x720

DPI (puntos por pulgada).

Figura 1.15 Impresora inyección de tinta

3.-IMPRESORA LASER

Definición 1.23 El sistema es totalmente distinto al de las demás y es más bien parecido al

de una copiadora tradicional, o sea, papel magnetizado con un polvo-tinta muy fino que al ser

fundido con un haz láser crean un documento de calidad inigualable que llega alcanzar hasta

los 600 DPI.

CAPITULO I: Hardware y Software

31

Aunque siguen bajando rápidamente de precio, son las más caras por hoja impresa, sin

embargo son las únicas con calidad de imprenta, son la herramienta imprescindible para una

imprenta, edición fotográfica o negocio de diseño gráfico. La velocidad de éstas como de las

de inyección de tinta se mide en Hojas por minuto.

Figura 1.16 Impresora laser

4.-LOS PLOTTERS

Definición 1.24 Son grandes impresoras basadas en plumillas de colores que permiten a

los Arquitectos o Ingenieros convertir un plano o trazo de líneas contenido en la memoria de

su computadora en un auténtico gran plano listo para su envió, ahorrando mediante éstos

sofisticados implementos tanto el diseño a mano de los planos como la heliografía necesaria

para su reproducción.

Figura 1.17 Plotter

Lic. Elmer Alberto León Zárate

32

1.1.10 DISPOSITIVOS DE ENTRADA Y SALIDA DE INFORMACIÓN

Son aquellos mediante los cuales podemos tanto accesar como introducir información

o instrucciones al microprocesador. Entre los más comunes:

a) UNIDADES DE LECTURA/ESCRITURA DE DISQUETES

Definición 1.25 Estas se especializan en leer la información almacenada en los disquetes,

así como escribir en estos los datos a ser almacenados. Según su densidad de escritura será el

tipo de disquete que podrán leer o escribir.

b) MONITORES ITERATIVOS

Definición 1.26 Existen monitores especiales que presentan información como cualquier

monitor lo hace, permitiendo además introducir información señalando con nuestro dedo

sobre ellos, aunque más caros que el simple hecho de comprar un ratón, son muy útiles en

áreas abiertas donde es preciso rapidez y aguante en el uso del dispositivo, como lo es el

hecho de hacer reservaciones en aeropuertos.

c) DISPOSITIVO DE MODEM O FAX-MODEM

Cuando nosotros hablamos por teléfono enviamos por cable señales análogas que al

llegar al otro aparato se convierten en voz nuevamente, sin embargo las computadoras no son

aparatos que generen esas señales u ondas, muy por el contrario una computadora

internamente esta todo el tiempo generando interrupciones en forma de 1´s y 0´s o sea bits,

también llamada frecuencia digital.

Definición 1.27 El Módem es un aparato que una vez conectado uno por computadora por

un lado modula la señal binaria en ondas o señales análogas permitiendo de ésta manera

CAPITULO I: Hardware y Software

33

aprovechar la infraestructura telefónica existente en nuestro mundo para enviar por la misma

vía, voz, datos, imágenes y una vez del otro lado demodula dichas señales convirtiéndolas de

nuevo en bits que al ser interpretados reproducen en la computadora la información recibida

desde el otro lado del mundo.

Aunada a ésta capacidad las nuevas computadoras vienen con una tarjeta de módem

con fax combinado, al cual le llaman fax-módem lo cual significa que además de poder

conectarse con cualquier computadora sincronizada con nosotros en cualquier parte del

mundo, también podemos conectarnos con otras personas, empresas o instituciones que

aunque no tengan computadora si tengan un fax convencional como el que ya es

imprescindible en cualquier empresa.

Si observamos detenidamente un fax convencional encontraremos qué éste dispositivo

es 3 aparatos en uno, o sea:

Tiene rastreador que fotocopia el documento a ser enviado

Es módem, porque modula de ida y demodula al recibir la imagen rastreada

Es impresora porque vacía en papel la información recibida.

1.2 SOFTWARE

Dentro de los componentes básicos, el SOFTWARE o Equipo Blando, es la otra

mitad de la computadora, el alma o la materia gris, ya que las necesidades de crecimiento y de

capacidad han surgido para hacer realidad toda la creatividad, ingenio y desempeño humano.

Definición 1.28 El Software son todas las instrucciones y datos que corren en mayor o

menor medida dentro del ordenador, es decir, la información misma, la razón del ser del

Hardware. En nuestros tiempos a medida que la magia de la electrónica ponen al alcance de

todos estas prodigiosas maquinas verdaderas prótesis mentales, mediante el abaratamiento de

Lic. Elmer Alberto León Zárate

34

la tecnología y por tanto de los costos, en dirección completamente opuesta aumenta la

inversión de los servicios y programas necesarios para optimizar dichos equipos.

En sus orígenes la programación de los ordenadores era hecho sólo, para y por los

mismos científicos que las construían para propósitos muy específicos. El cálculo de la

trayectoria de los proyectiles usados en la II Guerra Mundial, y posteriormente usos muy

parecidos, hasta que mucho después que fue utilizada en el Censo de los Estados Unidos fue

reconociéndose su valor en el campo administrativo donde estuvo hasta hace 2 décadas,

cuando gracias a la Computadora Personal pasaron al dominio público donde con tantas

necesidades fueron surgiendo las aplicaciones diversas para cada oficio.

1.2.1 LOS SISTEMAS OPERATIVOS

Para que una maquina basada completamente en electrónica y un ser humano, ser con

miles de años de evolución obviamente no ha sido fácil la comunicación entre ambos. Desde

sus orígenes los primeros diseñadores y creadores de éstas se dieron cuenta que necesitaban

algo más que permitiera la fácil interpretación de las instrucciones así como de los resultados

obtenidos, para lo cuál crearon un Programa básico que toda computadora debe cargar

primero en su memoria para poderse comunicar y comprender con un ser humano.

Definición 1.29 El Sistema Operativo es programa básico que se carga al momento de

encender la máquina y sirve de intérprete entre el frío lenguaje de la maquina electrónica y el

complejo idioma humano, el Sistema operativo es pues, el gobierno interno de la máquina.

En la actualidad existen varios sistemas operativos para diferentes necesidades y tipos

de computadoras, entre los más conocidos y utilizados actualmente se encuentran los

siguientes:

CAPITULO I: Hardware y Software

35

Definición 1.30 El MS-DOS Microsoft (Disk Operative System) es un sistema operativo

con cual de una u otra forma hemos estado más familiarizados desde la aparición de las

Computadoras Personales y sobre el cuál trabajan la mayoría de los programas usados tanto

en la pequeña, mediana y grande empresa, así como en Industrias, Instituciones y hogares por

millones de gentes alrededor del mundo. Su versión más nueva a la fecha es la 6.22

Definición 1.31 El OS/2 WARP Diseñado por IBM es el competidor más cercano de MS-

DOS sobre todo por sus grandes capacidades de interconexión de equipos y facilidad de uso

bajo ambiente gráfico.

Definición 1.32 El Netware diseñado por Novell, líder mundial en sistemas operativos

para redes de computadoras que ha conquistado al mundo de la informática por el poder y

versatilidad de sus funciones, así como su extremada capacidad de interconectar

computadoras y recursos de tan variadas capacidades y marcas.

Definición 1.33 El Unix es un sistema operativo de alto rendimiento utilizado actualmente

en grandes proyectos y para necesidades de intercomunicación a nivel internacional y de gran

volumen de operaciones diarias.

En resumen, podemos afirmar que ninguna computadora obedecerá las instrucciones

de ningún programa independientemente de su utilidad sin haber cargado en su memoria

dicho intérprete al momento de encenderse, ya que de esto dependerá su funcionamiento y

eficiencia.

APLICACIONES MÁS POPULARES EN EL MUNDO DE LA INFORMÁTICA

A diferencia de algunos años atrás, hoy existe una infinidad de aplicaciones para

satisfacer desde diversiones o entretenimiento de niños hasta sofisticados programas de

investigación científica; más sin embargo, para las necesidades de la mayoría de los mortales

Lic. Elmer Alberto León Zárate

36

que trabajamos en Instituciones o Empresas y aún para los particulares existe un número

preciso de aplicaciones, que como herramientas no deben faltar en ninguna computadora de

uso personal.

1.2.2 PROCESADORES DE TEXTO

Definición 1.34 También llamados Procesadores de palabras, fueron los primeros en servir

de atracción en la adquisición de una computadora, ya que sustituyen absolutamente el trabajo

de una tradicional maquina de escribir, a nuestras fechas han evolucionado tanto que ya sólo

les falta tomar dictado, - y no les falta mucho para hacerlo pero dentro de las necesidades de

escritura actuales en la mayoría de ellos podemos encontrar las siguientes funciones:

Escribir de corrido y una sola vez todo nuestro documento

Permiten con suma rapidez y flexibilidad hacer modificaciones al contenido, como:

mover párrafos o bloques de texto completo de una hoja a otra, entre documentos e

incluso entre programas.

Cambiar en un instante palabras o frases repetidas por sinónimos sin importar la

cantidad de ellas

Permiten modificar en la marcha el escrito sin desperdiciar papel, ni tiempo.

Se puede cambiar de opinión una vez impreso el documento y en unos segundos

cambiar completamente el estilo, diseño, formato e incluso el tipo y tamaño de la letra

deseada.

Podemos verificar la ortográfica del documento e incluso de ciertas áreas, así como

también buscar sinónimos relacionados con ciertas palabras o frases dudosas.

CAPITULO I: Hardware y Software

37

Se pueden crear cartas o documentos de tipo constante, ya sea para circulares o

formatos específicos incluso de facturación y manipularlos rápidamente.

Analizar el documento desde distintos ángulos sin necesidad de imprimirlo.

Permitir que el programa corrija automáticamente nuestra ortografía o incluso nos

ayude a escribir más pronto mediante palabras que va aprendiendo.

Crear Documentos estilo periodístico a base de columnas, con gráficos, imágenes o

fotografías e incluso en formato cuadricular.

Cuentan palabras, deshacen los cambios, imprimen partes, etc.

COMPAÑÍA QUE LO PRODUCE NOMBRE Y VERSIÓN

Microsoft Notepad, WordPad, Word para Windows

Novell Wordperfect para DOS y Windows

Software Libre OpenOffice, Latex

IBM Lotus SmartSuite – Word Pro

1.2.3 HOJAS ELECTRÓNICAS

Definición 1.35 También denominadas Hojas de cálculo, casi junto con los procesadores

de texto han invadido toda la administración con sus bondades, es una de las herramientas

imprescindibles en cualquier empresa, ya que gracias a ella, la mayor parte del trabajo

rutinario de arrastrar el lápiz se convierte en un proceso tranquilo y sistemático para cualquier

tarea que involucra complejas fórmulas y procesos basados en análisis, proyecciones,

presupuestos, amortizaciones, cálculos básicos pero repetidos en cantidades, etc.

Entre las capacidades de las modernas hojas de cálculo, encontramos las siguientes:

Diseño basado en la hoja tabular a base de renglones y columnas

Rápida escritura de fórmulas autocalculables

Lic. Elmer Alberto León Zárate

38

Inmensa cantidad de funciones automáticas para necesidades financieras, científicas,

matemáticas, lógicas, de texto, etc.

Diseño y formato fácil de corregir y ampliar

Estilo, tipo y tamaño de letra fácilmente modificables

Manipulación de hojas en libros de trabajo

Implementación avanzada de varios gráficos estadísticos

Incrustación de texto e imágenes de diseño gráfico

Impresión inteligente fácilmente controlable

Poder en la manipulación de grandes cantidades de registros de información

Diseño, Generación e Impresión rápida de reportes y listados.

Herramientas flexibles de proyección y análisis para la planeación y la oportuna toma

de decisiones

Facilidad de uso y aprendizaje entre otras.

COMPAÑÍA QUE LA PRODUCE NOMBRE Y VERSIÓN

Microsoft Excel para Windows

IBM Lotus SmartSuite – Lotus 123

Software Libre Open Office

1.2.4 ADMINISTRADORES DE BASES DE DATOS

Definición 1.36 Cuándo las necesidades de manejo de información dentro de la empresa

crecen desorbitadamente, no hay mejor herramienta que los programas de administración de

Bases de Datos, los cuáles gracias a la facilidad de sus procesos nos permiten rápidamente

crear, trabajar y modificar conjuntos específicos de registros con los cuales es su momento es

muy práctico consultar datos precisos, obtener listados ordenados y extracciones directas de

CAPITULO I: Hardware y Software

39

registros basadas en criterios de búsqueda que satisfagan la necesidad inmediata del jefe del

departamento diciendo .... !!Quiero un listado de todos los clientes de la zona norte del país,

que sean del sexo masculino, con edad mayor a 40 años, que tengan saldo menor a N$100,000

y ventas anuales promedio, etc.

Entre sus funciones principales tenemos las siguientes:

Permiten crear fácilmente cualquier estructura de registro y comenzar a capturar la

información deseada

Mediante sofisticados pero sencillos lenguajes o procedimientos facilitan la

programación de sistemas específicos

Sus consultas son muy rápidas

Permiten ordenar grandes cantidades de información en poco tiempo.

Son muy útiles para las listas y reportes basados en condiciones de búsqueda.

Son los únicos capaces de manipular grandes cantidades de registros al mismo tiempo.

Tienen la capacidad de relacionar y manipular varias bases de datos creadas para

distinto propósito y en tiempos distintos.

Los hay tanto para usuarios finales como para Programadores expertos

COMPAÑÍA QUE LO PRODUCE NOMBRE Y VERSIÓN

Microsoft Access, SQL Server

Microsoft Fox Pro 2.6 para Windows / DOS

Software Libre Mysql

IBM DB2, Informix

Oracle Oracle

Lic. Elmer Alberto León Zárate

40

1.2.5 OTRAS APLICACIONES POPULARES EN LAS EMPRESAS

NOMBRE COMPAÑÍA QUE LO PRODUCE ÁREA DE APLICACIÓN

Autocad 2011 Autodesk Diseño Arquitectónico 3D

Bancos Apemex, Compaq, Microsip Control de Bancos y conciliaciones

Caja Apemex Sistema de punto de venta

Contpaq Computación en Acción Sistema de Contabilidad Integral

Coreldraw Corel Diseño Gráfico Publicitario

MegaPak Computación en Acción Facturación, Inventarios, CxC y CxP

Money 2.0 Microsoft Administración de finanzas personales

Nómina Microsip Sistema de Nómina

Organizer Lotus Organizador diario

Page Maker 4 Aldus Edición Tipográfica

Photoshop Adobe Edición fotográfica y Diseño

Ilustrator Adobe Edición de Gráficos e Imágenes

Premiere Adobe Edición de Videos

Power Point Microsoft Presentaciones Gráficas

Project 2.0 Microsoft Administración de Proyectos

CAPITULO I: Hardware y Software

41

1.3 CONCEPTOS BASICOS

1.3.1 INFORMÁTICA

Definición 1.37 Ciencia que se encarga de la organización y mantenimiento de la

información haciendo uso de las sistemas integrados de Cómputo.

1.3.2 COMPUTACIÓN

Definición 1.38 Conjunto de métodos y técnicas que permiten administrar, manipular y

controlar en forma automática y correcta la información utilizando para ello la ayuda de un

Computador

1.3.3 SECUENCIA PARA EL PROCESAMIENTO DE DATOS

Ilustración 1.1 Procesamiento de datos

1.3.4 LENGUAJE DE PROGRAMACION

Definición 1.39 Es un conjunto de palabras adaptadas y/o modificadas a partir de un

Lenguaje humano y que permiten comunicarnos con el computador, a través de las cuales le

indicamos a la computadora los procesos a llevar a cabo.

1.3.5 ALGORITMO

Definición 1.40 Un Algoritmo se puede definir como un conjunto de reglas,

procedimientos y/o instrucciones lógicas que se deben ejecutar en un orden especifico para

resolver el problema.

Lic. Elmer Alberto León Zárate

42

El uso de los algoritmos tiene un gran valor estratégico en las computadoras, ya que ellas

pueden resolver un determinado problema después de que se le ha dicho como resolverlo.

Todo algoritmo debe cumplir las siguientes características fundamentales:

Un algoritmo debe ser preciso e indicar el orden de realización de cada paso.

Un algoritmo debe estar bien definido. Si se elabora varios algoritmos todos deben

dar el mismo resultado.

Un algoritmo debe ser finito. Todo algoritmo tiene que terminar en algún

momento, es decir tiene un número determinado de pasos.

1.3.6 PROGRAMA

Definición 1.41 Es el conjunto de instrucciones escritas en un orden lógico y codificados

en un determinado Lenguaje de Programación, las cuales permiten llevar a cabo un

determinado proceso previamente establecido.

Un programa en la PC es un conjunto de instrucciones, ordenes dadas a la maquina que

producirán la ejecución de una determinada tarea. También es un medio para conseguir un fin.

1.4 RELACION DE EJERCICIOS:

Seleccionar la alternativa correcta en las siguientes preguntas:

1. Las computadoras son máquinas de procesamiento de información diseñadas para

transformar información.

a) Verdadero.

b) Falso.

2. ¿Cuál de las siguientes no es una clasificación de las computadoras?

a) Computadoras portátiles.

b) Computadoras incorporadas y de propósito especial.

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 fracción

de su costo.

a) Macrocomputadora.

b) Estación de trabajo.

c) Computadoras de propósito especial.

d) Ninguna de las anteriores.

4. Son utilizadas comúnmente por bancos y aerolíneas.

a) Estación de trabajo.

b) Computadoras de propósito especial.

c) Macrocomputadoras.

d) Ninguna de las anteriores.

5. El hardware se refiere a la parte física de una computadora.

a) Verdadero.

b) Falso.

6. Las computadoras lleva acabo operaciones aritméticas o lógicas con la información,

esta tarea se realiza en el CPU y es propia de:

a) Recibir entradas.

b) Producir salidas.

c) Almacenar información.

d) Procesar información.

7. Proporciona un conjunto de teclas alfabéticas, numéricas, de puntuación, de símbolos y

de control.

a) Ratón.

Lic. Elmer Alberto León Zárate

44

b) Monitor.

c) Teclado.

d) CPU.

8. Consiste en presionar rápidamente dos veces el botón primario del ratón.

a) Clic sostenido.

b) Clic.

c) Clic arrastrado.

d) Ninguna de las anteriores.

9. Consiste en mantener presionado el botón primario del ratón y mover el ratón para

desplazar algún elemento en la pantalla.

a) Clic.

b) Clic arrastrado.

c) Clic sostenido.

d) Ninguna de las anteriores.

10. El software es:

a) El equipo físico de las computadoras.

b) El conjunto de instrucciones que las computadoras emplean para manipular datos.

c) Los componentes de entrada de la computadora.

d) El teclado y el ratón.

11. No es una categoría de software:

a) Sistemas operativos.

b) Lenguajes de programación.

c) Dispositivos de entrada.

d) Software de aplicación.

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. ¿Cuál de los siguientes no es un tipo de sistema operativo de interfaz gráfica?

a) MS-DOS.

b) Windows 2000.

c) Windows XP.

d) Macintosh.

14. Es un programa que traduce un lenguaje de alto nivel a lenguaje máquina y genera un

archivo programa o ejecutable.

a) Suite de aplicaciones.

b) Sistema operativo.

c) Windows 98.

d) Compilador.

15. La unidad de disco es un vínculo con cualquier elemento al que puede tener acceso

desde una computadora, como un programa, archivo, carpeta, unidad de disco,

impresora u otra computadora.

a) Verdadero.

b) Falso

16. Una carpeta es una zona o división lógica de almacenamiento.

a) Verdadero

b) Falso

Lic. Elmer Alberto León Zárate

46

17. Un archivo es un símbolo en pantalla que representa un programa, un archivo de datos

u otra entidad o función de la computadora.

a) Verdadero.

b) Falso.

18. Un acceso directo es un vínculo con cualquier elemento al que puede tener acceso

desde una computadora, como un programa, archivo, carpeta, unidad de disco,

impresora u otra computadora.

a) Verdadero.

b) Falso.

19. Una ventana es un símbolo en pantalla que presenta la ubicación actual del ratón.

a) Verdadero.

b) Falso.

20. Un menú es una representación en pantalla que enlista las opciones de tareas

disponibles dentro de un programa.

a) Verdadero.

b) Falso.

47

CAPITULO II

HERRAMIENTAS DE PROGRAMACION

2.1 ANALISIS DEL PROBLEMA

Requisitos:

Comprensión de la Naturaleza del problema.

El Problema debe estar bien definido.

Las especificaciones de Entrada y Salida de los datos sean descritas con

detalle.

Deberá responder a las siguientes preguntas:

a) ¿Que información debe proporcionar la resolución del problema?

La respuesta que obtenga aquí indicara los resultados deseados o las salidas

del Problema.

b) ¿Que datos se necesitan para resolver el problema?

Aquí indicara que datos se proporcionaran o las entradas del Problema.

Ejemplo 2.1

Leer el radio de un círculo y calcular su superficie y la longitud de la circunferencia.

ANALISIS:

Los Datos de Entrada : 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 León Zárate

48

2.2 DISEÑO DEL ALGORITMO

La información o dato proporcionada al algoritmo constituye su entrada y la

información producida por el algoritmo constituye su Salida.

Ejemplo 2.2

Leer el radio de un círculo y calcular su superficie y la longitud de la circunferencia.

Inicio

Ingresar valor de la Radio del círculo

Calcular Superficie

Superficie 3.141592 * Radio ^ 2

Calcular Circunferencia

Circunferencia 3.141592 * Radio * 2

Imprimir el Valor de la Superficie

Imprimir el Valor de la Longitud de la Circunferencia

Fin

2.3 DIAGRAMA DE FLUJO (FLOWCHART)

Definición 2.1 Un DF es un Diagrama que utiliza los símbolos (cajas) y que tiene los pasos

del Algoritmo escritos en esas cajas unidas por una flecha denominadas líneas de flujo que

indican la secuencia en que se deben ejecutar.

CAPITULO II: Herramientas de programación

49

SÍMBOLOS PRINCIPALES DE UN DIAGRAMA DE FLUJO

SIMBOLO DESCRIPCION

TERMINAL: Representa el inicio y el Final de un

programa

ENTRADA/SALIDA: Todo tipo de Introducción de

Datos en la memoria desde entrada (Leer) o Salida

(imprimir) de información.

PROCESO: Cualquier tipo de operación que pueda

originar cambio de valor almacenada en la memoria,

operaciones aritméticas, etc.

DECISIÓN: Indica operaciones Lógicas o de

Comparación entre los datos.

DECISIÓN MULTIPLE: de acuerdo a la

comparación que se tenga resultara una función.

CONECTOR: enlaza 2 o más partes del organigrama.

LINEA DE FLUJO: indica el sentido de ejecución delas operaciones.

LINEA CONECTORA: Sirve para unir dossímbolos.

LLAMADA A LA SUBRUTINA: Es un modulo

independiente del programa principal, realiza una tarea

determinada y retorna al programa principal.

Lic. Elmer Alberto León Zárate

50

Ejemplo 2.3

Realizar el Diagrama de Flujo de la Suma de todos los números pares entre 2 y 100.

Ilustración 2.1 Diagrama de flujo de suma de pares

CAPITULO II: Herramientas de programación

51

2.4 PSEUDOCODIGO

Definición 2.2 Es un lenguaje de descripción del algoritmo, esto es la traducción de un

problema a un lenguaje de Programación escogido por el usuario.

La ventaja de un Pseudocódigo es que al usarlo en la planificación de un programa, el

programador se puede concentrar en la Lógica y en las estructuras de control y no

preocuparse de las reglas de un Lenguaje de Programación.

Todo algoritmo empieza con la palabra Inicio y termina con la Palabra Fin. Entre estas

palabras se escriben las instrucciones o acciones por línea.

Ejemplo 2.4

Pseudocódigo para determinar e imprimir el mayor valor de DOS números ingresados.

Inicio

Leer A, B

SI el valor A es mayor que el valor de B HACER

Establecer MAYOR con el valor A

DE LO CONTRARIO

Establecer MAYOR con el valor B

FIN_SI

Visualizar MAYOR

Fin

Ejemplo 2.5

Pseudocódigo para calcular la suma de 1+2+3+....100

Inicio

Establecer CONTADOR a 1

Establecer SUMA a 0

Lic. Elmer Alberto León Zárate

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 números menores de 50 elevados al

cuadrado.

2. Definir el algoritmo para que encuentre la media Aritmética de un conjunto de

números hasta 100.

3. Definir el Algoritmo para contar los pares e impares hay en una relación de 10

números enteros ingresados.

4. Definir un Algoritmo para promediar la entrada de 5 Notas ingresadas eliminando la

Nota mas baja que tenga el Alumno.

5. Definir un Algoritmo para encontrar el Promedio de 4 Notas ingresadas aumentado un

Nota cualquiera ingresada después de las 4 notas.

CAPITULO II: Herramientas de programación

53

6. Definir un Algoritmo para escribir un programa que pida el ingreso de N números que

calcule su promedio.

7. Definir un Algoritmo que ingrese las edades de tres personas y contar cuantos son

mayores y menores de Edad.

8. Definir un Algoritmo que ingrese un monto por capital a una cuenta, si el Capital se

excede en 1000 Soles aumentar en 5% al Capital de lo Contrario reducir el 2% al

Capital.

9. Definir el Algoritmo para hallar el elevado enésimo de un número cualquiera.

10. Definir el algoritmo para ordenar ascendentemente el ingreso de 20 números enteros

positivos.

54

CAPITULO III

PROGRAMACION ESTRUCTURADA

La programación estructurada hace los programas más fáciles de escribir, verificar,

leer y mantener. Los programas deben estar dotados de una estructura que puede ser:

Secuenciales

Selectivas

Repetitivas

3.1 ESTRUCTURAS SECUENCIALES

Definición 3.1 Es aquella en la que la una instrucción sigue a otra en secuencia. Las tareas

se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente

hasta el final del proceso.

Ilustración 3.1 Estructura Secuencial

INICIO

< INSTRUCCIÓN 1 >

< INSTRUCCIÓN 2 >

..................................

< INSTRUCCIÓN n >

FIN

CAPITULO III: Programación estructurada

55

3.2 ESTRUCTURAS SELECTIVAS

Definición 3.2 En las estructuras selectivas se evalúa una condición y en función del

resultado de la misma se realiza una opción u otra. Las condiciones se especifican usando

expresiones lógicas.

Las estructuras selectivas pueden ser:

Simples

Dobles

Múltiples

3.2.1 ESTRUCTURA SIMPLE (SI-ENTONCES)

Ejecuta una determinada acción cuando se cumple una condición.

Tener en cuenta:

Si la condición es verdadera, entonces ejecuta la acción o acciones.

Si la condición es Falsa, entonces no hacer nada.

Ilustración 3.2 Estructura Selectiva Simple

Lic. Elmer Alberto León Zárate

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 función de cómo se cumpla la condición dada.

Ilustración 3.3 Estructura Selectiva Simple

CAPITULO III: Programación 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 (SEGÚN SEA-CASO DE)

La estructura de decisión múltiple evaluara una expresión que podrá tomar N

valores distintos 1, 2, 3,4,..n. Según se escoja uno de estos valores en la condición, se

realizara una de las acciones.

PSEUDOCODIGO

SEGÚN SEA CONDICION HACER

Expresión 1 : Acción 1

Expresión 2 : Acción 2

Expresión 3 : Acción 3

SINO : Acción

FIN_SEGÚN

Lic. Elmer Alberto León Zárate

58

PSEUDOCODIGO EN INGLES

CASE CONDICION OF

Expresión 1 : Acción 1

Expresión 2 : Acción 2

Expresión 3 : Acción 3

OTHERWISE // ELSE

Action

END_CASE

OBSERVACIONES DE LA ALTERNATIVA MULTIPLE

- Algunos lenguajes de programación delimitan las acciones para las instrucciones

compuestas con las palabras Inicio Fin (pascal Begin End).

- Los valores que toman las expresiones no siempre serán consecutivos o únicos,

también se pueden considerar rangos de constantes numéricas o de caracteres.

Según sea expresión hacer

2, 4, 6,8: escribir números pares

1, 2, 3, 5,7: escribir números impares

Fin_segun

3.3 ESTRUCTURAS REPETITIVAS

Definición 3.3 Son las estructuras que repiten una secuencia de instrucciones un número

determinado de veces y se denominan Bucles. Repite la misma secuencia de acciones un

número determinado de veces.

CAPITULO III: Programación estructurada

59

3.3.1 ESTRUCTURA MIENTRAS-HACER (WHILE - DO)

Permite al programa llevar a cabo la ejecución secuencial de un proceso

mientras la condición establecida se cumpla o sea verdad.

Ilustración 3.4 Estructura Repetitiva Mientras-Hacer

PSEUDOCODIGO

MIENTRAS <CONDICION> HACER

INSTRUCCIONES VERDADERAS

FIN_MIENTRAS

PSEUDOCODIGO EN INGLES

WHILE <CONDICION> DO

INSTRUCCIONES VERDADERAS

ENDWHILE

DO WHILE <CONDICION>

INSTRUCCIONES VERDADERAS

ENDDO

Lic. Elmer Alberto León Zárate

60

3.3.2 ESTRUCTURA REPETIR – HASTA (REPEAT - UNTIL)

Permite al programa llevar a cabo la ejecución secuencial de un proceso

mientras que la condición establecida no se cumpla.

Cuando la condición se cumpla se continuara la ejecución del programa

después de HASTA.

Ilustración 3.5 Estructura Repetitiva Repetir - Hasta

ACCIONES OINSTRUCCIONES

CONDICIONFALSO

VERDADERO

PSEUDOCODIGO

REPETIR

INSTRUCCIONES

HASTA <CONDICION>

PSEUDOCODIGO EN INGLES

REPEAT

INSTRUCCIONES

UNTIL <CONDICION>

CAPITULO III: Programación estructurada

61

3.3.3 ESTRUCTURA DESDE–HACER O PARA–HACER (FOR.TO.DO)

Permite ejecutar un bloque de instrucciones un numero especifico de veces,

luego se continuara la ejecución del programa de FIN_PARA.

Ilustración 3.6 Estructura Repetitiva Para - Hacer

PSEUDOCODIGO

PARA VARIABLE = VALOR INICIAL HASTA VALOR FINAL HACER

INSTRUCCIONES

FIN_PARA

PSEUDOCODIGO EN INGLES

FOR I = 1 TO VALOR FINAL DO

INSTRUCCIONES

ENDFOR

Lic. Elmer Alberto León Zárate

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 número entero y genere la tabla de multiplicar de dicho número.

4. Calcular:

!!21

2

n

nxx

5. Calcular la suma de los N números enteros positivos y terminar con número negativo.

6. Sumar los números enteros de 100 a 200 mediante a) Estructura Repetir b) Estructura

Mientras c) Estructura Desde

7. Se desea leer las calificaciones de una clase y contar él número total de aprobados.

8. Representar las siguientes condiciones en forma de alternativa simple, en pseucodigo y

diagrama de flujo:

Colocar un mensaje a cada uno.

para los mayores de edad

para los menores de edad

para los mayores de edad dentro de 2 años

para los desaprobado en su promedio

para los aprobados en su 4 nota

para numero par

para un numero impar

para los mayores de 30 años por su fecha de nacimiento

9. Representar las siguientes condiciones en forma de alternativa compuesta en

pseucodigo y diagrama de flujo:

CAPITULO III: Programación 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 años

10. Hacer su diagrama de flujo y pseudocódigo para la suma de los N primeros números

enteros cuadrados 12+22+32...n2

11. Hacer su diagrama de flujo y pseudocódigo para calcular la planilla de una empresa, se

ingresa el número de los empleados y para cada uno de ellos se ingresa el número de

horas y el salario por hora, se calcula el pago y se acumula para el total de la planilla.

12. Hacer su diagrama de flujo y pseudocódigo para un restaurant ofrece un descuento del

10% para consumos de hasta 30 nuevos soles, un descuento de 20% para consumos

mayores y para ambos casos aplica un impuesto del 15%. Determinar el importe a

pagar por lo consumido.

13. Hacer su diagrama de flujo y pseudocódigo para determinar el mayor valor ingresado

de 5 números enteros.

14. Hacer su diagrama de flujo y pseudocódigo para leer 100 números ingresados.

Determinar la media de los números positivos y la media de los números negativos.

15. Pseudocódigo que pida el ingreso de un número para el día de la semana e indique a

que día se refiere.

16. Se desea convertir las calificaciones A,B,C,D,E a calificaciones numéricas

14,13,12,11,10 respectivamente

17. Pseudocódigo que nos indique si un numero entero tiene 1, 2,3 o más dígitos

considerar los negativos.

Lic. Elmer Alberto León Zárate

64

18. Realizar un Pseudocódigo que solo permita el ingreso de números enteros y cuando

ingrese un impar se termina el ingreso.

19. Desarrollar un Pseudocódigo que permita ingresar los datos de N alumnos. Para cada

alumno se ingresara su nombre y 6 notas. Calcular el promedio para cada uno de estos

alumnos. El proceso terminara cuando se ingrese la palabra FIN como un nombre de

un alumno. Al final mostrara el promedio general de todos los alumnos.

20. Realizar un Pseudocódigo que permita el ingreso de una clave de acceso, si la clave

ingresada es correcta, entonces mostrar el mensaje “BIENVENIDO AL SISTEMA”,

en caso contrario “CLAVE INCORRECTA”, se debe permitir máximo 3 intentos.

65

CAPITULO IV

ESTRUCTURAS DE DATOS

4.1TIPOS DE DATOS

Definición 4.1 El Tipo de Datos de una variable es el conjunto de valores que dicha

variable puede asumir

Todos lo Lenguajes de Programación de alto nivel tienen incorporados Tipos de Datos

básicos tales como enteros, reales, caracteres y lógicos.

El tipo de Datos de una variable en un programa para un lenguaje de alto nivel

requiere de una Declaración de Tipo la cual tiene 2 objetivos:

1. Separar el espacio de memoria que los valores de la variable requieran.

2. Interpretar correctamente el contenido de la memoria a la que la variable acceda. Es decir

si el tipo de datos separado en memoria es entero todos los datos que se almacenen serán

enteros.

4.1.1 DATOS NUMERICOS

Definición 4.2 Es el conjunto de los valores numéricos. Estos pueden representarse en dos

formas distintas:

TIPO NUMERICO ENTERO (INTEGER )

TIPO NUMERICO REAL (REAL)

Lic. Elmer Alberto León Zárate

66

A) ENTEROS

Definición 4.3 El tipo entero es un subconjunto finito de los números enteros. Los enteros

son números completos, no tienen componentes fraccionarios o decimales y pueden ser

negativos o positivos. Ejm: 5, -5

Los números enteros máximos y mínimos de una computadora suelen ser –32768 a

+32767, los números enteros fuera de este rango no se suelen representar como números

enteros, sino como reales, en algunos lenguajes de Programación hay excepciones.

B) REALES

Definición 4.4 El tipo real consiste en un subconjunto de los números reales. Los números

reales siempre tienen un punto decimal y pueden ser positivos o negativos. Un número real

consta de un entero y una parte decimal. Ejm:

0.08 3739.41

0.09 –52.321

En aplicaciones científicas se requiere una representación especial para manejar

números muy grandes, como la masa de la tierra o muy pequeños como la masa del electrón.

Una PC solo puede representar un número fijo de dígitos. Este numero puede variar de

una maquina con otra, siendo ocho dígitos un numero típico. Este límite provocara problemas

para representar algunos números como:

9876543210 0.00000000387

Existe un tipo de representación denominado Notación exponencial o científica y que

se utiliza para números muy grandes o muy pequeños. Así:

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 * 1020

Ejemplo 4.2

Si el número fuera 0.0000000000123456

Y luego en forma de potencia de 10 1.23456 * 10-11

4.1.2. DATOS LOGICOS (BOOLEANOS)

Definición 4.5 El tipo Lógico es aquel que solo puede tomar uno de dos valores.

Verdadero (TRUE) False (FALSE)

Este tipo de datos se utiliza para representar las alternativas (SI/NO) a determinadas

condiciones. Por ejemplo cuando se pide determinar si el valor es par la respuesta será

Verdadera y Falsa según sea el valor del número.

4.1.3 DATOS TIPO CARÁCTER

Definición 4.6 Es el conjunto finito y ordenado de valores de caracteres que la

computadora reconoce, un dato tipo carácter contiene un solo carácter.

Los caracteres que reconocen las diferentes computadoras no son estándar, sin embargo, la

mayoría reconoce los siguientes caracteres alfabéticos y numéricos:

CARACTERES ALFABETICOS: (A..... Z) (a..... z)

CARACTERES NUMERICOS: (1, 2, 3.... 9, 0)

Lic. Elmer Alberto León Zárate

68

CARACTERES ESPECIALES: (+ - * / ^, < > $...)

4.2 ESTRUCTURA DE DATOS

Definición 4.7 Es una colección de datos que pueden ser caracterizados por su

organización y las operaciones que se definan en ella.

Estáticos: arreglos, registro, archivo, conjunto, cadena.

Dinámicos: Listas, Pilas, Colas, Listas enlazadas, árboles.

4.2.1 ESTRUCTURA DE DATOS ESTATICAS

A) ARREGLOS

Definición 4.8 Es una estructura de Datos utilizado para almacenar datos de un mismo

tipo.Un arreglo se define como el conjunto de datos finito, ordenado y homogéneo.

1.- ARREGLO UNIDIMENSIONAL

Definición 4.9 Un arreglo unidimensional es una secuencia de datos finitos, que todos sus

elementos son del mismo tipo.

Los elementos del arreglo se determinan a través de un conjunto de índices.

Nombre [1] Nombre [2] Nombre [3] . . . Nombre [n]

Ejemplo de Arreglo Unidimensional de N elementos

Notación:

Nombre (1), nombre (2)...

Nombre [1], nombre [2]...

CAPITULO IV: Estructuras de datos

69

Observación 4.1

El arreglo unidimensional tiene un solo nombre de variable que representa a todos los

elementos.

Observación 4.2

En algunos casos el índice del arreglo empieza en 0 ó 1

Observación 4.3

El índice indica la posición ordenada de cómo se ingresan los datos

Observación 4.4

El número de elementos de un vector se denomina RANGO DEL VECTOR

Los vectores se almacenan en memoria central de la Computadora:

MEMORIA

NUMERO [1] DIRECCION N

NUMERO [2] DIRECCION N+1

NUMERO [3] DIRECCION N+2

NUMERO [50] DIRECCION N+49

Lic. Elmer Alberto León Zárate

70

El valor mínimo permitido de un vector se denomina LIMITE INFERIOR del vector

y el valor máximo permitido se denomina LIMITE SUPERIOR.

Cada elemento de un vector se puede procesar como si fuese una variable simple al

ocupar una posición de memoria.

NUMERO [10] 100

NUMERO [20] ‘DIEZ’

La salida seria ESCRIBIR (NUMERO [10])

NOTACIONES ALGORITMICAS PARA VECTORES UNIDIMENSIONALES

EN ALGORITMOS

Ejemplo 4.3

En pascal:

VAR

NOMBRE_DE_LA_VARIABLE: ARRAY [1...10] OF TIPO DE DATOS;

Ejemplo 4.4

En Visual Basic:

DIM NOMBRE_DE_LA_VARIABLE (NUMERO) AS TIPO DE DATOS

DIM NOMBRE (VALOR INICIAL TO VALOR FINAL) AS TIPO DE DATOS

Ejemplo 4.5

Dim contadores (5) as integer

Dim contadores (1 to 5) as string

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] Añade en la variable SUMA el valor de NUMERO[5]

X[5] X[5] + 3.5 Suma 3.5 a X[5]

X[11] X[2] + X[4] Almacena la suma de X[2] y X[4]

Observacion 4.5

Los Arreglos pueden tener por índice:

x[1], x[2], x[3]... x[n] empieza en 1

x[0], x[1], x[2] ... x[n-1] empieza en cero

x[-3], x[-2], x[-1], x[+0], x[+1], x[+2], x[+3] limite –3 y +3

OPERACIONES CON VECTORES (ARREGLOS)

Las operaciones que se puede realizar con vectores durante el proceso de resolución de

un problema son:

a) ASIGNACION

La asignación tiene la siguiente forma:

NOTAS [ 14 ] 20 Asigna El Valor 20 Al Elemento 14 Del Arreglo

Lic. Elmer Alberto León Zárate

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 posición 1 del arreglo A

Escribir ( A [2] )Imprimir el valor de la posición 2 del arreglo A

I=19 Leer ( A [i] ) Ingrese un valor para la posición 19

i=1, i=2, i=3 Escribir (A[i]) Imprime 3 valores si tuviera una

Función Repetitiva.

c) RECORRIDO

Se puede acceder a los elementos de un Vector o Arreglo para introducir Datos

(leer) o imprimir su contenido (escribir).

A la operación de efectuar una acción general sobre todos los elementos del

arreglo se la denomina RECORRIDO DEL VECTOR.

CAPITULO IV: Estructuras de datos

73

Ejemplo 4.7

Pseudocódigo para permitir el INGRESO de 5 números

Inicio

PARA índice=1 HASTA 5 HACER

LEER números [índice]

FIN_PARA

Fin

Ejemplo 4.8

Pseudocódigo para IMPRIMIR los 5 números ingresados anteriormente

Inicio

PARA índice 1 HASTA 5 HACER

ESCRIBIR números[indice]

FIN_PARA

Fin

Ejemplo 4.9

Pseudocódigo para ingresar 20 números utilizando MIENTRAS O REPETIR,

CONTADORES.

INICIO

Índice 1

MIENTRAS Índice < 21 hacer

LEER número[ índice ]

Lic. Elmer Alberto León Zárate

74

Índice índice + 1

FIN_MIENTRAS

FIN

d) AÑADIR

Un arreglo llamado PROMEDIO se ha dimensionado a seis elementos pero

solo han sido llenados cuatro valores, se podrán añadir dos elementos más con una

simple operación de asignación.

PROM [1] PROM [2] PROM [3] PROM [4] PROM [5] PROM [6]

10 11 20 11

En la realización del Pseudocódigo:

PROM [5] 20

PROM [6] 10

e) INSERTAR

Coloca uno o más elementos en una determinada posición del arreglo.

Ejemplo 4.10

Pseudocódigo para el arreglo llamado LETRAS de 8 elementos, Agregar el elemento

CC en la posición LETRAS[3]

LETRAS[1] LETRAS[2] LETRAS[3] LETRAS[4] LETRAS[5]

AA BB DD EE FF

INICIO

//ALGORITMO DE INGRESO DE DATOS MAXIMO HASTA 6 ELEMENTOS

POSICION 3

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 operación de borrar provoca el movimiento hacia arriba de los elementos

inferiores.

2.- ARREGLO DE VARIAS DIMENSIONES

Los Arreglos no Unidimensionales se dividen en 2 grupos:

ARREGLOS BIDIMENSIONALES

ARREGLOS MULTIDIMENSIONALES

a) ARREGLOS BIDIMENSIONALES:

Definición 4.10 Se considera como un vector de vectores, es un conjunto de

elementos todos del mismo tipo el cual el orden de los elementos es significativo y en

el que se necesita especificar los subíndices para poder identificar cada uno de los

elementos del arreglo.

FILA 1 10 10 10 10

FILA 2 11 11 11 11

FILA 3 12 12 12 12

FILA 4 13 13 13 13

COLUMNA 1 COLUMNA 1 COLUMNA 3 COLUMNA 4

Lic. Elmer Alberto León Zárate

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 Notación Algorítmica se Representa:

NOMBRE_DE_LA_MATRIZ[ I..N,J..N]

NOTACIONES ALGORITMICAS PARA VECTORES BIDIMENSIONALES

En pascal :

VAR

NOMBRE_DE_LA_VARIABLE: ARRAY [1..10,1..5] OF TIPO DE DATOS;

ALGORITMO DE LLENADO DE DATOS DEL ARREGLO BIDIMENSIONAL

INICIO

PARA INDICE_FILA NUMERO INICIAL HASTA NUMERO FINAL HACER

PARA INDICE_COLUMNA NUMERO INICIAL HASTA NUMERO FINAL

HACER

LEERDATOENNOMBRE_DEL_ARREGLO[INDICE_FILA,INDICE_COLUMNA]

FIN_PARA

FIN_PARA

FIN

CAPITULO IV: Estructuras de datos

77

b) ARREGLOS MULTIDIMENSIONALES

Puede ser definido de tres, cuatro o más dimensiones.

Ejemplo 4.11

Un arreglo de tres dimensiones puede tener:

- 5 Cursos de un alumno

- Tipo de sexo

- 6 ciclos años

B) REGISTROS

Definición 4.11 Es una colección de información, normalmente relativa a una entidad

particular. Un registro es una colección de campos lógicamente relacionado, que pueden ser

tratados como una unidad por algún programa.

Observación 4.6

Este tipo de arreglos se caracterizan por tener un solo índice.

Observación 4.7

A los espacios reservados para cada numeración se les conoce con el nombre de

CAMPOS y a la disposición consecutiva de campos se denomina REGISTRO.

Observación 4.8

El acceso a los datos individuales de un elemento se realiza de dos formas:

PRIMERO : Utilizando un punto antes del campo

A [1].código abc0001

Lic. Elmer Alberto León Zárate

78

A [1].Nombre Oscar Ibáñez

A [1].Promedio 17.4

A [1].Edad 29

Ingresar 5 datos al registro declarado:

PARA INDICE 1 HASTA 5 HACER

INICIO

LEER A[INDICE].CODIGO

LEER A[INDICE].NOMBRE

LEER A[INDICE].PROMEDIO

LEER A[INDICE].EDAD

FIN

FIN_PARA

SEGUNDO : Utilizando la palabra CON (WITH)

CON REGISTRO A[3] HACER

INICIO

ESCRIBIR CODIGO

ESCRIBIR NOMBRE

ESCRIBIR PROMEDIO

ESCRIBIR EDAD

FIN

Ingresar 5 datos al registro declarado:

PARA INDICE 1 HASTA 5 HACER

CON REGISTRO A[INDICE] HACER

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

Definición 4.12 Un archivo es un conjunto ordenado de datos que tienen entre sí una

relación lógica y están almacenados en un soporte de información adecuado para la

comunicación con el computador. En un archivo se almacena información referente a un

mismo tema de una forma estructurada con el fin de manipular los datos de una manera

individual. Un archivo está formado por estructuras de datos más simples denominados

Lic. Elmer Alberto León Zárate

80

registros. Todos los registros de un archivo son del mismo tipo, es decir, un archivo está

formado por un conjunto de registros homogéneos. Cada registro está formado por campos

que contienen información referente a un elemento o característica en particular dentro del

archivo. Además un registro puede tener un campo clave cuyo valor sirve para identificar de

forma única el registro, y por tanto, dicho valor no puede aparecer repetido en otro registro

diferente.

CLASIFICACIÓN DE LOS ARCHIVOS SEGÚN SU USO

Archivos permanentes.- Contienen información que varía poco a lo largo del tiempo.

Archivos de movimientos.- En ellos se almacena la información que se utilizará para

actualizar los archivos maestros. Sus registros denominados movimientos son de tres

clases: altas, bajas y cambios.

Archivos de maniobra o trabajo.- Tienen una vida limitada, normalmente igual a la

duración de la ejecución de un programa y se utilizan como auxiliares de las

anteriores.

ORGANIZACIÓN DE ARCHIVOS

Al diseñar un archivo, dependiendo del uso que se va a hacer del mismo y del soporte

utilizado, se pueden elegir diferentes maneras de organizar sus registros, siendo las

principales organizaciones las siguientes:

- Secuencial

- Directa o aleatoria

- Secuencial indexada

CAPITULO IV: Estructuras de datos

81

1. ORGANIZACIÓN SECUENCIAL

Definición 4.13 Es aquélla en la cual los registros ocupan posiciones consecutivas de

memoria, y sólo se puede acceder a ellos de uno en uno a partir del primero.

En un archivo secuencial no se pueden hacer operaciones de escritura cuando se está

leyendo, ni operaciones de lectura cuando se está escribiendo.

Por otro lado, para actualizarlos es preciso crear nuevos archivos donde se copien los

registros que vayan a permanecer, modificados o no, junto con los nuevos.

Acceso secuencial

Registro 1 Registro 2 Registro 3 Registro 4 Registro 5

2. ORGANIZACIÓN DIRECTA O ALEATORIA

Definición 4.14 En un archivo con esta organización, también denominada relativa, las

informaciones se colocan y se acceden aleatoriamente mediante su posición, es decir,

indicando el lugar relativo que ocupan dentro del conjunto de posiciones posibles.

En esta organización se pueden leer y escribir registros, en cualquier orden y en

cualquier lugar.

Presenta el inconveniente de que es tarea del programador establecer la relación entre

la posición que ocupa un registro y su contenido; además puede desaprovecharse parte del

espacio destinado al archivo ya que pueden quedar huecos libres entre unos registros y otros.

Su principal ventaja es la rapidez de acceso a un registro cualquiera, ya que para ello no es

preciso pasar por los anteriores.

Lic. Elmer Alberto León Zárate

82

Acceso directo

Registro 2 Registro 1 Registro 5

Posición 1 Posición 2 Posición 3 Posición 4 Posición 5

3. ORGANIZACIÓN SECUENCIAL INDEXADA

Un archivo con esta organización consta de 3 áreas:

Área de índices

Área primaria

Área de excedentes (overflow)

Definición 4.15 El área primaria contendrá los registros de datos, clasificados en orden

ascendente por su campo clave.

Definición 4.16 El área de índices es un archivo secuencial creado por el sistema, en el

que cada registro establece una división (segmento) en el área primaria y contiene la dirección

de comienzo del segmento y la clave más alta del mismo. De esta manera, el sistema accede

de forma directa a un segmento del área primaria a partir del área de índices, de forma similar

a la búsqueda de un capítulo de un libro a partir de su índice.

Definición 4.17 El área de excedentes para añadir nuevos registros que no pueden ser

colocados en el área primaria cuando se produce una actualización del archivo.

Presenta la ventaja de un rápido acceso por medio de la clave del registro y además el

sistema se encarga de relacionar la posición de cada registro con su contenido por medio del

área de índices.

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

después 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

CREACIÓN

Definición 4.18 Consiste en la escritura o grabación en un medio de almacenamiento de

todos los registros que van a formar el archivo

COPIA

Definición 4.19 Consiste en crear un nuevo archivo como duplicación de otro existente.

CONSULTA

Definición 4.20 Se realiza para obtener el contenido de uno o varios registros. En muchos

casos irá precedida por la búsqueda de los mismos.

Lic. Elmer Alberto León Zárate

84

CLASIFICACIÓN

Definición 4.21 Es la operación consistente en reubicar los registros de tal forma que

queden ordenados con respecto a los valores de un campo que denominamos clave de

ordenación.

CONCATENACIÓN

Definición 4.22 Dados dos archivos con registros de igual estructura, se trata de obtener

uno solo en que figuren todos los registros del primero y a continuación todos los del

segundo.

INTERSECCIÓN

Definición 4.23 Dados dos archivos de igual estructura se trata de obtener otro en el que

figuren lo registros comunes a ambos.

FUSIÓN O MEZCLA

Definición 4.24 A partir de dos archivos de igual estructura clasificados por un mismo

campo, se obtiene como resultado un archivo que contiene los registros de ambos y que

mantiene la ordenación.

PARTICIÓN

Definición 4.25 Consiste en descomponer un archivo en dos, atendiendo a alguna

característica de sus registros.

CAPITULO IV: Estructuras de datos

85

ACTUALIZACIÓN

Definición 4.26 Es la operación de modificar un archivo por medio de un archivo de

movimientos, conteniendo altas, bajas y modificaciones que hay que realizar sobre el archivo

maestro.

REORGANIZACIÓN

Definición 4.27 Reubica los registros de un archivo que ha sufrido actualizaciones, para

ocupar los posibles huecos libres intermedios resultantes de bajas de registros para optimizar

la ocupación de la memoria, liberando la que no estaba aprovechada.

BORRADO

Definición 4.28 Eliminación total del archivo, cuando ya no se necesite, dejando libre la

memoria del dispositivo de almacenamiento utilizado.

D) CONJUNTOS (SET)

Supongamos que debemos construir un programa Pascal que cuente el número de

vocales no acentuadas que aparecen en un texto. Se nos podría ocurrir inmediatamente, ir

tomando el texto carácter a carácter, aplicarle la función UPCASE y decidir si se trata de

alguno de los caracteres 'A', 'E', 'I', 'O','U'. En este caso, incrementaríamos un contador y

pasaríamos a analizar el siguiente carácter; en caso contrario, pasaríamos directamente al

siguiente carácter.

Ejemplo 4.12

Codificacion en Pascal

FOR C:=1 TO LENGTH (Texto) DO

Lic. Elmer Alberto León Zárate

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, sería más cómodo aislar el conjunto de caracteres 'A', 'E', 'I', 'O' y 'U' y,

para cada carácter del texto, decidir si pertenece o no al conjunto de vocales:

Ejemplo 4.13

Para cada carácter Texto[C] ....

Si UPCASE (Texto[C]) pertenece a VOCALES, entonces ..

Incrementar contador de vocales,

En caso contrario, no realizar ninguna acción.

¿ Se puede hacer esto en Turbo Pascal ? La respuesta es sí, mediante el tipo de dato

estructurado CONJUNTO (SET en inglés).

CONSTANTES Y VARIABLES DE TIPO SET

Podemos definir CONJUNTOS particulares de elementos de cualquiera de los

siguientes tipos base:

BYTE

CHAR

BOOLEAN

Abstractos (de 1 byte)

Es decir, podemos aislar conjuntos de elementos a partir de cualquier tipo ordinal de

tamaño 1 byte.

CAPITULO IV: Estructuras de datos

87

Para definir una constante de tipo CONJUNTO, después de la palabra CONST, el

identificador de la constante y el signo igual, se escriben todos los elementos del tipo base que

queremos que constituyan el conjunto, separados por comas y encerrados entre corchetes.

Ejemplo 4.14

Conjuntos constantes (constantes de tipo SET) válidos serían:

CONST VOCALES = ['A','E','I','O','U'];

PARES = [2,4,6,8,0];

De esta manera, con el identificador VOCALES hemos aislado un conjunto de

elementos del tipo base CHAR, y con el identificador PARES lo hemos hecho del tipo base

BYTE.

Se obtendría el mismo resultado si la especificación de los elementos constituyentes se

realizase en distinto orden;

Ejemplo 4.15

CONST VOCALES = ['U','E','O','A','I'];

PARES = [0,2,4,6,8];

Si en la definición de un conjunto, los elementos, o algunos de los elementos

constituyentes son consecutivos, se puede utilizar una notación similar a la de los subrangos.

Ejemplo 4.16

CONST HEXADIG = ['A'..'F','0'..'9'];

NUMEROS = [0..100,125];

HEXADIG define un conjunto de 16 elementos del tipo base CHAR y NUMEROS uno

de 102 elementos del tipo BYTE.

Lic. Elmer Alberto León Zárate

88

Para declarar variables de tipo CONJUNTO, después de la palabra VAR, el

identificador de la variable y los dos puntos, se escriben las palabras reservadas SET OF

seguidas del identificador del tipo base o subrango del mismo. Así,

VAR LETRAS : SET OF CHAR;

NUMERO: SET OF BYTE;

MAYUS : SET OF 'A'....’Z';

DECEN : SET OF 10...99;

BOOLE : SET OF BOOLEAN;

Serían declaraciones válidas de variables de tipo SET. LETRAS es una variable que

podrá contener cualquier conjunto de caracteres; NUMERO podrá contener cualquier

conjunto de números que pertenezcan al rango 0..255; MAYUS podrá contener cualquier

conjunto de caracteres pertenecientes al rango 'A'..'Z', DECEN cualquier conjunto de números

pertenecientes al rango 10..99 y BOOLE cualquier subconjunto del conjunto

{FALSE,TRUE}.

Como ocurre con todas las variables en Pascal, cuando se declaran las variables de tipo

SET no contienen ningún conjunto concreto: podemos decir que están vacías. Declarar en un

programa una variable de tipo SET OF CHAR, por ejemplo, significa disponer de una

estructura de datos capaz de contener cualquier subconjunto del tipo CHAR; desde el

conjunto vacío (empty set, en inglés) hasta el conjunto completo.

La carga con un conjunto concreto de elementos de una variable de tipo SET, se realiza

con la instrucción de asignación. Así, las variables declaradas anteriormente se podrían cargar

Ejemplo 4.17

LETRAS := ['A','E','I','O','U'];

NUMERO := [1..50,75,91];

CAPITULO IV: Estructuras de datos

89

MAYUS := ['A','B','S'];

DECEN := [10,20,30,40,50,60,70,80,90];

BOOLE := []; { conjunto vacío }

Como hemos dicho, el tipo base no puede tener más de 256 valores posibles y los

valores ordinales de los valores menor y mayor del tipo base deben estar en el rango 0..255.

Por esta razón el tipo base de un SET no puede ser de los tipos SHORTINT, INTEGER,

LONGINT ni WORD. Igualmente no puede serlo el subrango -100..100, por ejemplo, así

como algún tipo abs-tracto con más de 256 valores enumerados.

Ya sabemos definir constantes y declarar variables de tipo SET. También es posible,

como para otros tipos de datos, definir tipos SET, con TYPE:

TYPE NOMBRE = STRING [15];

CALEN = SET OF 1...31;

VAR NAME : NOMBRE;

MES : CALEN;

Por último, podemos también definir constantes con tipo (o variables inicializadas) de

tipo SET, de la forma habitual.

Ejemplo 4.18

TYPE DIGITOS = SET OF 0..9;

CONST DIGIPARES : DIGITOS = [0,2,4,6,8];

VOCALES: SET OF 'A'....’Z' = ['A','E','I','O','U'];

CIENTOS : SET OF BYTE = [100,200];

Un gran inconveniente de los datos tipo SET es que no se pueden leer por teclado con

READLN ni escribir en pantalla con WRITE/LN.

Lic. Elmer Alberto León Zárate

90

OPERADORES RELACIONALES PARA EL TIPO SET

Con el tipo SET se pueden utilizar los siguientes operadores binarios de comparación

(que por tanto, dan resultado BOOLEAN), con los siguientes significados:

OPERADOR OPERACION TIPO DE OPERANDOS

=

<>

<=

>=

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 sólo si A y B contienen exactamente los mismos elementos; en

caso contrario resulta FALSE.

ii) A <> B : es TRUE si y sólo si A y B no contienen exactamente los mismos elementos; en

caso contrario resulta FALSE.

iii) A <= B : es TRUE si y sólo si cada miembro de A lo es también de B; i.e., si A

está incluí-do en B (A es subconjunto de B).

CAPITULO IV: Estructuras de datos

91

iv) A >= B : es TRUE si y sólo si cada miembro de B lo es también de A; i.e., si A incluye a

B (A es superconjunto de B).

v) T IN A : retorna TRUE cuando el valor del operando de tipo ordinal, T, es un miembro

del operando de tipo SET, A; en caso contrario devuelve FALSE.

Ejemplos 4.19

Si A = ['a','e','i','o','u']; B = ['a','i','u']; T = 'o', entonces:

WRITE (A = B); {FALSE}

WRITE (A <> B); {TRUE}

WRITE (A <= B); {FALSE}

WRITE (A >= B); {TRUE}

WRITE (T IN A); {TRUE}

WRITE (T IN B); {FALSE}

Podemos ya codificar en Pascal el programa, del que hablamos al principio del tema,

que cuenta las vocales de un texto, utilizando el tipo SET y el operador IN; por ejemplo, de la

siguiente manera: Si TXT es una variable de tipo STRING que hemos cargado por teclado;

VO-WELS es la constante tipo SET formada por ['A','E','I','O','U'] y CONT es una variable

BYTE que utilizaremos para contar las vocales del texto, tendríamos:

FOR K: =1 TO LENGTH (TXT) DO

IF UPCASE (TXT [K]) IN VOWELS THEN

CONT:=CONT+1;

OTROS OPERADORES PARA EL TIPO SET

Existen tres operadores binarios, con los símbolos +, - y *, de los operadores

aritméticos, que aplicados a operandos de tipos SET compatibles adquieren los siguientes

significados:

Lic. Elmer Alberto León Zárate

92

OPERADOR OPERACION TIPO DE OPERANDOS

+

-

*

Unión de Conjuntos

Diferencia de Conjuntos

Intersección de Conjuntos

Tipos Set compatibles

Tipos Set compatibles

Tipos Set compatibles

El resultado de estas operaciones sigue las reglas de la lógica de conjuntos: si A y B son

SET's compatibles, entonces:

i) A + B : resulta un conjunto formado por los elementos que están en A, en B o en

ambos conjuntos.

ii) A - B : resulta un conjunto formado por los elementos que están en A y no están en

B.

iii) A * B : resulta un conjunto formado por los elementos que están simultáneamente

en A y B.

Ejemplos 4.20

Si A = ['a','e','i','o','u'] y B = ['a','i','u'], entonces:

A + B = ['a','e','i','o','u']

A - B = ['e','o']

A * B = ['a','i','u']

Corresponden a las conocidas UNION, DIFERENCIA e INTERSECCION de

conjuntos.

E) CADENAS

Definición 4.29 Una cadena de caracteres es una secuencia de cero o más símbolos, que

incluyen letras del alfabeto, dígitos y caracteres especiales.

CAPITULO IV: Estructuras de datos

93

El juego de caracteres:

Los Lenguajes de Programación utilizan juego de caracteres para comunicarse con las

computadoras.

Los códigos de comunicación con las PC son 2:

ASCII (American Standard Code for Information Interchange)

El código Ascii básico utiliza 7 bits para cada carácter a representar que supone a 128

caracteres distintos, el código Ascii ampliado utiliza 8 bits y en este caso consta de 256

caracteres.

El código ASCII se compone de los siguientes tipos de caracteres:

Alfabéticos (a,b,c...z, A,B,C...Z)

Numéricos (0,1,2,3,4,5,6,7,8,9)

Especiales (+,-,*, /, {,}, [,], <,>...)

CARACTERES ASCII PRINCIPALES O MÁS USADOS

VALOR ASCII CARÁCTER TECLA VALOR ASCII CARÁCTER TECLA

13 ENTER 41 )

27 ESCAPE 42 *

32 Barra Espaciadora 43 +

33 ! 44 ,

34 “ 45 -

35 # 46 .

36 $ 47 /

37 % 48 0

38 & 49 1

39 ‘ 50 2

40 ( 51 3

Lic. Elmer Alberto León Zárate

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 carácter y también consta de 256 caracteres, solo es utilizado por la

firma IBM y sus componentes.

Nota:

En general, un carácter de cualquier tipo ocupara un byte de almacenamiento de

memoria.

1. CADENAS DE LONGITUD FIJA

Definición 4.30 Son cadenas con longitud declarada al inicio de la Programación en la cual

cuenta blancos a la izquierda o derecha o en la separación de letras.

V

V

I

I

S

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

Dimensión de la Cadena: 20

2. CADENAS DE LONGITUD VARIABLE CON UN MAXIMO

Definición 4.31 Son aquellas que cuentan con dos campos uno contiene la Longitud de la

cadena y otro la longitud actual.

1

17

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 máxima

Lic. Elmer Alberto León Zárate

96

15 es la longitud actual del Arreglo

3. CADENAS DE LONGITUD INDEFINIDA

Definición 4.32 Son aquellas que se unen a través de un puntero estas listas contienen

caracteres empaquetados de la forma (2/elemento carácter).

6

6

V

V

I

I

S

S

U

U

A

A

L

L

DONDE

6 es la Longitud Actual

OPERACIONES CON CADENAS

Las operaciones más usadas son:

CALCULO DE LA LONGITUD

COMPARACION

CONCATENACION

EXTRACCION DE SUBCADENAS

BUSQUEDA DE INFORMACION

CONVERTIR CADENAS EN NUMEROS Y VICEVERSA

INSERTAR CADENAS

BORRAR CADENAS

CAMBIAR CADENAS

a) CALCULO DE LA LONGITUD DE UNA CADENA

Definición 4.33 La Longitud de la cadena es el número de caracteres de la cadena.

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 o‘tiene 23 caracteres

La operación de determina la longitud de la cadena se representara por la función

cuyo formato es:

LONGITUD (Cadena de Caracteres)

Dicha formula tiene acceso a datos tipo carácter pero el resultado será

numérico.

Ejemplos:

LONGITUD (‘MICROSOFT VISUAL STUDIO') 23 caracteres

LONGITUD (‘ ') 3 caracteres

LONGITUD (‘ ESTRUCTURA DE DATOS’) 21 caracteres

(19 letras) y (3 espacios)

Observación 4.9

En consecuencia el resultado de la longitud de una cadena de caracteres es

Entero se pueden realizar expresiones Aritméticas con el.

Ejemplo 4.22

10 + 15 + longitud (‘ ESTRUCTURA DE DATOS ’)

4 + 5 * 2 + longitud (‘visual basic’) + longitud (‘ ‘)

b) COMPARACION

Definición 4.34 Los criterios de comparación de cadenas se basan en el orden

numérico del código ASCII como código de referencia:

Lic. Elmer Alberto León Zárate

98

Ejemplo 4.23

‘A’ > ‘B’

‘A’ = ‘a’

COMPARACION DE IGUALDAD: Utilizar el Signo Igual

‘AREVALO’ = ‘AREVALO’ verdadero

‘AREVALO’ = ‘Arévalo’ falso

‘AREVALO’ = ‘Arévalo ’ falso

Ejemplo 4.24

COMPARACION DE DESIGUALDAD: Utilizar <>

‘Arévalo’ < ‘AREVALO’

‘Cáceres’ > ‘Arévalo’

‘AREVALO’ > ‘Arévalo’

c) CONCATENACION

Definición 4.35 Es la operación que reúne varias cadenas de caracteres en una

sola, pero conservando el orden en que se les llame o invoque.

Mayormente los símbolos más usados son: & + // o

‘MICROSOFT’ + ‘VISUAL’ + ‘BASIC’ ‘MICROSOFTVISUALBASIC’

‘MICROSOFT’ & ‘VISUAL’ &‘BASIC’ ‘MICROSOFT VISUAL BASIC’

Si:

A = ‘Microsoft’ B=’Visual’ C=’Basic’

D=A+’ ‘+B+’ ‘+C

CAPITULO IV: Estructuras de datos

99

d) EXTRACCION DE SUBCADENAS

Definición 4.36 Es aquella que permite la extracción de una parte específica de una

cadena llamándose así Subcadena.

Utilizar la siguiente función:

SUBCADENA (‘Cadena ‘, Posición Inicial, longitud de la subcadena)

En este caso la Subcadena estará compuesta por la cantidad de caracteres que

extraiga desde la posición actual y la longitud de la misma.

SUBCADENA (‘Cadena ‘, Posición Inicial)

En este caso la Subcadena estará formado por caracteres de la cadena desde la

posición inicial hacia al final de la misma.

Ejemplo 4.25

Subcadena (‘abcdefg’, 2,4) bcde

e) BUSQUEDA DE INFORMACION

Definición 4.37 Localiza si una subcadena forma parte de la cadena, devolviendo

para este caso la posición exacta del primer encuentro de izquierda a derecha

POSICION (CADENA1, CADENA2)

Supongamos que la Cadena es C=’ESTRUCTURA DE LA INFORMACION’

POSICION(C, ‘DE’) Resultado 12

f) CONVERTIR CADENAS EN NUMEROS O VICEVERSA

Definición 4.38 Se declara una variable del tipo a cambiar y en la programación se

iguala a la variable cuyo valor es lo contrario.

Lic. Elmer Alberto León Zárate

100

Función:

Cadena = Función Cambiante a cadena (valor numérico)

Numero = Función cambiante a numero (Valor de texto)

EN C: <STDLIB.H> ATOI (CADENA) ITOA, FCVT

EN BASIC:

- VAL: Devuelve los números contenidos en una cadena.

VAL (cadena)

- STR: Devuelve la representación de cadena en números.

STR (numero)

g) INSERTAR CADENAS

Definición 4.39 Inserta una subcadena dentro de una cadena más larga = y en

determinada posición.

Sintaxis: INSERTAR (Cadena, posición, Subcadena)

Idea: Si el texto es: ABCD El nuevo texto sera: ABXXCD

Algoritmo para insertar cadenas:

Inicio

Devolver (Subcadena (Cadena, 1, posición-1) + “cadena a insertar” + Subcadena

(cadena, posicion, longitud (cadena)-Posicion+1))

Fin

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

INFORMACIÓN

Subcadena (cadena, 1, (12-1)) ESTRUCTURA_

Cadena a insertar DE LA_

Subcadena (cadena, 12, (22-12+1) INFORMACION

h) BORRAR CADENAS

Definición 4.40 Elimina determinados caracteres de cuerdo a una posición y la

cantidad de caracteres a borrar.

Sintaxis: BORRAR (Cadena, posición, Longitud a eliminar)

Idea: Si el texto es: ABCD El nuevo texto será: AD

Algoritmo para BORRAR cadenas:

Inicio

Devolver (Subcadena (Cadena, 1, posición - 1) +

Subcadena (cadena, posicion+longitud, Longitud (cadena) –posición–longitud+1))

Fin

Ejemplo 4.27

CADENA= I N F O R M A C I O N, debemos borrar las letras “FORMA” de tal

manera que la nueva cadena será “INCION”

Subcadena (cadena, 1, (3-1)) IN

Subcadena (cadena, 3+5,11-3-5+1) CION

Lic. Elmer Alberto León Zárate

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

Definición 4.41 Una lista se define como una serie de N elementos E1, E2,..., EN, ordenados

de manera consecutiva, es decir, el elemento Ek (que se denomina elemento k-ésimo) es previo

al elemento Ek+1. Si la lista contiene 0 elementos se denomina como lista vacía.

Las operaciones que se pueden realizar en la lista son: insertar un elemento en la

posición k, borrar el k-ésimo elemento, buscar un elemento dentro de la lista y preguntar si la

lista esta vacía.

CAPITULO IV: Estructuras de datos

103

Una manera simple de implementar una lista es utilizando un arreglo. Sin embargo, las

operaciones de inserción y borrado de elementos en arreglos son ineficientes, puesto que para

insertar un elemento en la parte media del arreglo es necesario mover todos los elementos que

se encuentren delante de él, para hacer espacio, y al borrar un elemento es necesario mover

todos los elementos para ocupar el espacio desocupado. Una implementación más eficiente

del TDA se logra utilizando listas enlazadas.

A continuación se presenta una implementación en Java del TDA utilizando listas

enlazadas y sus operaciones asociadas:

estaVacia (): devuelve verdadero si la lista esta vacía, falso en caso contrario.

insertar(x, k): inserta el elemento x en la k-ésima posición de la lista.

buscar(x): devuelve la posición en la lista del elemento x.

buscarK (k): devuelve el k-ésimo elemento de la lista.

eliminar(x): elimina de la lista el elemento x.

En la implementación con listas enlazadas es necesario tener en cuenta algunos

detalles importantes: si solamente se dispone de la referencia al primer elemento, el añadir o

remover en la primera posición es un caso especial, puesto que la referencia a la lista enlazada

debe modificarse según la operación realizada. Además, para eliminar un elemento en

particular es necesario conocer el elemento que lo antecede, y en este caso, ¿qué pasa con el

primer elemento, que no tiene un predecesor?

Para solucionar estos inconvenientes se utiliza la implementación de lista enlazada con

nodo cabecera. Con esto, todos los elementos de la lista tendrán un elemento previo, puesto

Lic. Elmer Alberto León Zárate

104

que el previo del primer elemento es la cabecera. Una lista vacía corresponde, en este caso, a

una cabecera cuya referencia siguiente es null.

Ilustración 4.1 Esquema de una lista

Los archivos NodoLista.java, IteradorLista.java y Lista.java contienen una

implementación completa del TDA lista. La clase NodoLista implementa los nodos de la lista

enlazada, la clase Lista implementa las operaciones de la lista propiamente tal, y la clase

IteradorLista implementa objetos que permiten recorrer la lista y posee la siguiente interfaz:

Avanzar (): avanza el iterador al siguiente nodo de la lista.

Obtener (): retorna el elemento del nodo en donde se encuentra el iterador.

Costo de las operaciones en tiempo:

Insertar/eliminar elemento en k-ésima posición:O(k).Se puede hacer en O(1)?

Buscar elemento x: O(N) (promedio).

B) PILAS

Definición 4.42 Una pila (stack o pushdown en inglés) es una lista de elementos de la cual

sólo se puede extraer el último elemento insertado. La posición en donde se encuentra dicho

elemento se denomina tope de la pila. También se conoce a las pilas como listas LIFO (LAST

IN - FIRST OUT: el último que entra es el primero que sale).

CAPITULO IV: Estructuras de datos

105

Ilustración 4.2 Esquema de una pila

La interfaz de este TDA provee las siguientes operaciones:

apilar(x): inserta el elemento x en el tope de la pila (push en inglés).

desapilar (): retorna el elemento que se encuentre en el tope de la pila y lo elimina de

ésta (pop en inglés).

tope (): retorna el elemento que se encuentre en el tope de la pila, pero sin eliminarlo

de ésta (top en inglés).

estaVacia (): retorna verdadero si la pila no contiene elementos, falso en caso

contrario (isEmpty en inglés).

Observación 4.10

Algunos autores definen desapilar como sacar el elemento del tope de la pila sin

retornarlo.

Lic. Elmer Alberto León Zárate

106

IMPLEMENTACIÓN DEL TDA PILA

A continuación se muestran dos maneras de implementar una pila: utilizando un

arreglo y utilizando una lista enlazada. En ambos casos el costo de las operaciones es de O

(1).

1.- IMPLEMENTACIÓN UTILIZANDO ARREGLOS

Para implementar una pila utilizando un arreglo, basta con definir el arreglo del tipo de

dato que se almacenará en la pila. Una variable de instancia indicará la posición del tope de la

pila, lo cual permitirá realizar las operaciones de inserción y borrado, y también permitirá

saber si la pila esta vacía, definiendo que dicha variable vale -1 cuando no hay elementos en

el arreglo.

class PilaArreglo

{

private Object[] arreglo;

private int tope;

private int MAX_ELEM=100; /máximo numero de elemento en la pila

public PilaArreglo()

{

arreglo=new Object[MAX_ELEM];

tope=-1; // inicialmente la pila esta vacía

}

public void apilar(Object x)

{

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 León Zárate

108

{

if (tope==-1)

{

return true;

}

else

{

return false;

}

}

}

El inconveniente de esta implementación es que es necesario fijar de antemano el

número máximo de elementos que puede contener la pila, MAX_ELEM, y por lo tanto al

apilar un elemento es necesario controlar que no se inserte un elemento si la pila esta llena.

Sin embargo, en Java es posible solucionar este problema creando un nuevo arreglo más

grande que el anterior, el doble por ejemplo, y copiando los elementos de un arreglo a otro:

public void apilar(Object x)

{

if (tope+1<MAX_ELEM) // si esta llena se produce OVERFLOW

{

tope++;

arreglo[tope]=x;

}

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.- IMPLEMENTACIÓN UTILIZANDO LISTAS ENLAZADAS

En este caso no existe el problema de tener que fijar el tamaño máximo de la pila

(aunque siempre se está acotado por la cantidad de memoria disponible!). La implementación

es bastante simple: los elementos siempre se insertan al principio de la lista (apilar) y siempre

se extrae el primer elemento de la lista (desapilar y tope), por lo que basta con tener una

referencia al principio de la lista enlazada. Si dicha referencia es null, entonces la pila esta

vacía.

class PilaLista

{

Lic. Elmer Alberto León Zárate

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 aplicación que se le de a la pila es necesario definir que acción

realizar en caso de que ocurra overflow (rebalse de la pila) o underflow (intentar desapilar

cuando la pila esta vacía). Java posee un mecanismo denominado excepciones, que permite

realizar acciones cuando se producen ciertos eventos específicos (como por ejemplo overflow

o underflow en una pila).

En ambas implementaciones el costo de las operaciones que provee el TDA tiene

costo O (1).

Ejemplo 4.28

Para eliminar la recursividad suponer que una función F realiza un llamado recursivo

dentro de su código, lo que se ilustra en el siguiente esquema:

Lic. Elmer Alberto León Zárate

112

Ilustración 4.3 Esquema de recursividad

Si la llamada recursiva es lo último que hace la función F, entonces dicha llamada se

puede substituir por un ciclo while. Este caso es conocido como tail recursion y en lo posible

hay que evitarlo en la programación, ya que cada llamada recursiva ocupa espacio en la

memoria del computador, y en el caso del tail recursion es muy simple eliminarla.

void imprimir(int[] a, int j) // versión recursiva

{

if (j<a.length)

{

System.out.println(a[j]);

imprimir(a, j+1); // tail recursión

}

}

void imprimir(int[] a, int j) // versión iterativa

{

while (j<a.length)

{

System.out.println(a[j]);

CAPITULO IV: Estructuras de datos

113

j=j+1;

}

}

En el caso general, cuando el llamado recursivo se realiza en medio de la función F, la

recursión se puede eliminar utilizando una pila.

Ejemplo 4.29

Recorrido en preorden de un árbol binario.

// "raiz" es la referencia a la raiz del arbol

// Llamado inicial: preorden(raiz)

// Versión recursiva

void preorden(Nodo nodo)

{

if (nodo!=null)

{

System.out.print(nodo.elemento);

preorden(nodo.izq);

preorden(nodo.der);

}

}

// Primera versión iterativa

void preorden(Nodo nodo)

{

Lic. Elmer Alberto León Zárate

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 versión iterativa

// Dado que siempre el ultimo nodo apilado dentro del bloque if es

// aux.izq podemos asignarlo directamente a aux hasta que éste sea

// null, es decir, el bloque if se convierte en un bloque while

// Y se cambia el segundo apilar por una asignacion de la referencia

void preorden(Nodo nodo)

{

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 más eficientes que los recursivos, la

eliminación de recursividad (excepto en el caso de tail recursion) le quita claridad al código

del programa. Por lo tanto:

A menudo es conveniente eliminar el tail recursion.

Un método recursivo es menos eficiente que uno no recursivo, pero sólo en pocas

oportunidades vale la pena eliminar la recursión.

Lic. Elmer Alberto León Zárate

116

C) COLAS

Definición 4.43 Una cola (queue en inglés) es una lista de elementos en donde siempre se

insertan nuevos elementos al final de la lista y se extraen elementos desde el inicio de la lista.

También se conoce a las colas como listas FIFO (FIRST IN - FIRST OUT: el primero que

entra es el primero que sale).

Ilustración 4.4 Esquema de cola

Las operaciones básicas en una cola son:

encolar(x): inserta el elemento x al final de la cola (enqueue en inglés).

sacar (): retorna el elemento que se ubica al inicio de la cola (dequeue en inglés).

estaVacia (): retorna verdadero si la cola esta vacía, falso en caso contrario.

Al igual que con el TDA pila, una cola se puede implementar tanto con arreglos como

con listas enlazadas. A continuación se verá la implementación usando un arreglo.

Las variables de instancia necesarias en la implementación son:

primero: indica el índice de la posición del primer elemento de la cola, es decir, la

posición el elemento a retornar cuando se invoque sacar.

CAPITULO IV: Estructuras de datos

117

ultimo: indica el índice de la posición de último elemento de la cola. Si se invoca

encolar, el elemento debe ser insertado en el casillero siguiente al que indica la

variable.

numElem: indica cuántos elementos posee la cola. Definiendo MAX_ELEM como el

tamaño máximo del arreglo, y por lo tanto de la cola, entonces la cola esta vacía si

numElem==0 y está llena si numElem==MAX_ELEM.

Ilustración 4.5 Esquema de elementos en una cola

Un detalle faltante es el siguiente: ¿qué pasa si la variable ultimo sobrepasa el rango

de índices del arreglo? Esto se soluciona definiendo que si después de insertar un elemento el

índice ultimo == MAX_ELEM, entonces se asigna ultimo = 0, y los siguientes elementos

serán insertados al comienzo del arreglo. Esto no produce ningún efecto en la lógica de las

operaciones del TDA, pues siempre se saca el elemento referenciado por el índice primero,

aunque en valor absoluto primero > ultimo. Este enfoque es conocido como implementación

con arreglo circular, y la forma más fácil de implementarlo es haciendo la aritmética de

subíndices módulo MAX_ELEM.

Lic. Elmer Alberto León Zárate

118

Ilustración 4.6 Esquema de elementos en una cola para implementar con arreglo circular

class ColaArreglo

{

private Object[] arreglo;

private int primero, ultimo, numElem;

private int MAX_ELEM=100; /maximo numero de elemento en la cola

public ColaArreglo()

{

arreglo=new Object[MAX_ELEM];

primero=0;

ultimo=MAX_ELEM-1;

numElem=0;

}

public void encolar(Object x)

{

if (numElem<MAX_ELEM) // si esta llena se produce OVERFLOW

{

ultimo= (ultimo+1) %MAX_ELEM;

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 aplicación, se debe definir qué hacer en

caso de producirse OVERFLOW o UNDERFLOW.

Con esta implementación, todas las operaciones del TDA cola tienen costo O (1).

Lic. Elmer Alberto León Zárate

120

D) LISTAS ENLAZADAS

Definición 4.44 En Ciencias de la Computación, una lista enlazada es una de las

estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de

datos. Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios

y una o dos referencias (punteros) al nodo anterior y/o posterior. El principal beneficio de las

listas enlazadas respecto a los arreglos convencionales es que el orden de los elementos

enlazados puede ser diferente al orden de almacenamiento en la memoria o el disco,

permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.

Una lista enlazada es un tipo de dato auto-referenciado porque contienen un puntero o

link a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminación de

nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto está

previamente identificado o localizado), pero no permiten un acceso aleatorio. Existen

diferentes tipos de listas enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas,

Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares.

Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes tales

como Lisp y Scheme tiene estructuras de datos ya construidas, junto con operaciones para

acceder a las listas enlazadas. Lenguajes imperativos u orientados a objetos tales como C o

C++ y Java, respectivamente, disponen de referencias para crear listas enlazadas.

CAPITULO IV: Estructuras de datos

121

TIPOS DE LISTAS ENLAZADAS

1.-LISTAS SIMPLES ENLAZADAS

Definición 4.45 La lista enlazada básica es la lista enlazada simple la cual tiene un enlace

por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vacía, si

es el último nodo.

Ilustración 4.7 Esquema de lista enlazada simple

Una lista enlazada simple contiene dos valores: el valor actual del nodo y un enlace al

siguiente nodo

2.- LISTA DOBLEMENTE ENLAZADA

Definición 4.46 Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o

lista enlazadas de dos vías. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta

al valor NULL o a la lista vacía si es el primer nodo; y otro que apunta al siguiente nodo

siguiente, o apunta al valor NULL o a la lista vacía si es el último nodo.

Ilustración 4.8 Esquema de lista doblemente enlazada

Una lista doblemente enlazada contiene tres valores: el valor, el link al nodo siguiente,

y el link al anterior

Lic. Elmer Alberto León Zárate

122

En algún lenguaje de muy bajo nivel, XOR-Linking ofrece una vía para implementar

listas doblemente enlazadas, usando una sola palabra para ambos enlaces, aunque el uso de

esta técnica no se suele utilizar.

3.- LISTAS ENLAZADAS CIRCULARES

Definición 4.47 En una lista enlazada circular, el primer y el último nodo están unidos

juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente

enlazadas. Para recorrer un lista enlazada circular podemos empezar por cualquier nodo y

seguir la lista en cualquier dirección hasta que se regrese hasta el nodo original. Desde otro

punto de vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni

fin. Este tipo de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar

todos los nodos de una lista a partir de uno dado.

Ilustración 4.9 Esquema de lista enlazada circular

Una lista enlazada circular que contiene tres valores enteros

a) Listas enlazadas circulares simples

Definición 4.48 Cada nodo tiene un enlace, similar al de las listas enlazadas simples,

excepto que el siguiente nodo del último apunta al primero. Como en una lista enlazada

simple, los nuevos nodos pueden ser solo eficientemente insertados después de uno que ya

tengamos referenciado. Por esta razón, es usual quedarse con una referencia solamente al

CAPITULO IV: Estructuras de datos

123

último elemento en una lista enlazada circular simple, esto nos permite rápidas inserciones al

principio, y también permite accesos al primer nodo desde el puntero del último nodo. [1]

b) Lista Enlazada Doblemente Circular

Definición 4.49 En una lista enlazada doblemente circular, cada nodo tiene dos enlaces,

similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo

apunta al último y el enlace siguiente del último nodo, apunta al primero. Como en una lista

doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier

punto con acceso a algún nodo cercano. Aunque estructuralmente una lista circular

doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede

establecer el nodo apuntado que está en la cabeza o al nodo cola, y así mantener el orden tan

bien como en una lista doblemente enlazada.

NODOS CENTINELAS

Definición 4.50 Un nodo centinela (también llamado falso nodo o nodo ficticio) es un

nodo que se ubica al principio y/o al final de la lista, el cual no es usado para guardar datos.

Su propósito es simplificar o agilizar algunas operaciones, asegurando que cualquier nodo

tiene otro anterior o posterior, y que toda la lista (incluso alguna que no contenga datos)

siempre tenga un “primer y último” nodo.

APLICACIONES DE LAS LISTAS ENLAZADAS

Las listas enlazadas son usadas como módulos para otras muchas estructuras de datos,

tales como pilas, colas y sus variaciones.

Lic. Elmer Alberto León Zárate

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 práctica tiene su

origen en el lenguaje de programación Lisp, donde las listas enlazadas son una estructura de

datos primaria (aunque no la única), y ahora es una característica común en el estilo de

programación funcional.

A veces, las listas enlazadas son usadas para implementar arreglos asociativos, y estas

en el contexto de las llamadas listas asociativas. Hay pocas ventajas en este uso de las listas

enlazadas; hay mejores formas de implementar éstas estructuras, por ejemplo con árboles

binarios de búsqueda equilibrados. Sin embargo, a veces una lista enlazada es dinámicamente

creada fuera de un subconjunto propio de nodos semejante a un árbol, y son usadas más

eficientemente para recorrer ésta serie de datos

VENTAJAS

Como muchas opciones en programación y desarrollo, no existe un único método

correcto para resolver un problema. Una estructura de lista enlazada puede trabajar bien en un

caso pero causar problemas en otros. He aquí una lista con algunas de las ventajas más

comunes que implican las estructuras de tipo lista. En general, teniendo una colección

dinámica donde los elementos están siendo añadidos y eliminados frecuentemente e importa

la localización de los nuevos elementos introducidos se incrementa el beneficio de las listas

enlazadas.

Ventajas de usar listas: Las listas son dinámicas, es decir, podemos almacenar en ellas

tantos elementos como necesitemos, siempre y cuando haya espacio suficiente espacio en

memoria. Al insertar un elemento en la lista, la operación tiene un tiempo constante

CAPITULO IV: Estructuras de datos

125

independientemente de la posición en la que se inserte, solo se debe crear el nodo y modificar

los enlaces. Esto no es así en los arreglos, ya que si el elemento lo insertamos al inicio o en

medio, tenemos un tiempo lineal debido a que se tienen que mover todos los elementos que se

encuentran a la derecha de la posición donde lo vamos a insertar y después insertar el

elemento en dicha posición; solo al insertar al final del arreglo se obtienen tiempos constantes.

Al eliminar un elemento paso lo mismo que se menciono en el punto anterior.

DESVENTAJAS DE USAR LISTAS:

El acceso a un elemento es más lento, debido a que la información no está en

posiciones contiguas de memoria, por lo que no podemos acceder a un elemento con base en

su posición como se hace en los arreglos.

OPERACIONES EN LISTAS ENLAZADAS

Las operaciones que podemos realizar sobre una lista enlazada son las siguientes:

a) RECORRIDO. Esta operación consiste en visitar cada uno de los nodos que forman

la lista. Para recorrer todos los nodos de la lista, se comienza con el primero, se toma

el valor del campo liga para avanzar al segundo nodo, el campo liga de este nodo nos

dará la dirección del tercer nodo, y así sucesivamente.

b) INSERCIÓN. Esta operación consiste en agregar un nuevo nodo a la lista. Para esta

operación se pueden considerar tres casos:

Insertar un nodo al inicio.

Insertar un nodo antes o después de cierto nodo.

Insertar un nodo al final.

Lic. Elmer Alberto León Zárate

126

c) BORRADO. La operación de borrado consiste en quitar un nodo de la lista,

redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos:

Eliminar el primer nodo.

Eliminar el último nodo.

Eliminar un nodo con cierta información.

Eliminar el nodo anterior o posterior al nodo cierta con información.

d) BÚSQUEDA. Esta operación consiste en visitar cada uno de los nodos, tomando al

campo liga como puntero al siguiente nodo a visitar.

E) ÁRBOLES

Definición 4.51 Un árbol se define como una colección de nodos organizados en forma

recursiva. Cuando hay 0 nodos se dice que el árbol esta vacío, en caso contrario el árbol

consiste en un nodo denominado raíz, el cual tiene 0 o más referencias a otros árboles,

conocidos como subárboles. Las raíces de los subárboles se denominan hijos de la raíz, y

consecuentemente la raíz se denomina padre de las raíces de sus subárboles. Una visión

gráfica de esta definición recursiva se muestra en la siguiente figura:

Ilustración 4.10 Esquema de un árbol

CAPITULO IV: Estructuras de datos

127

Definición 4.52 Los nodos que no poseen hijos se denominan hojas. Dos nodos que tienen

el padre en común se denominan hermanos.

Definición 4.53 Un camino entre un nodo n1 y un nodo nk está definido como la secuencia

de nodos n1, n2,..., nk tal que ni es padre de ni+1, 1 <= i < k. El largo del camino es el número

de referencias que componen el camino, que para el ejemplo son k-1. Existe un camino desde

cada nodo del árbol a sí mismo y es de largo 0. Nótese que en un árbol existe un único camino

desde la raíz hasta cualquier otro nodo del árbol. A partir del concepto de camino se definen

los conceptos de ancestro y descendiente: un nodo n es ancestro de un nodo m si existe un

camino desde n a m; un nodo n es descendiente de un nodo m si existe un camino desde m a

n.

Definición 4.54 Se define la profundidad del nodo nk como el largo del camino entre la

raíz del árbol y el nodo nk. Esto implica que la profundidad de la raíz es siempre 0. La altura

de un nodo nk es el máximo largo de camino desde nk hasta alguna hoja. Esto implica que la

altura de toda hoja es 0. La altura de un árbol es igual a la altura de la raíz, y tiene el mismo

valor que la profundidad de la hoja más profunda. La altura de un árbol vacío se define como

-1.

Ejemplo 4.30

La siguiente figura muestra los conceptos previamente descritos:

Lic. Elmer Alberto León Zárate

128

Ilustración 4.11 Esquema de los elementos de un árbol

A es la raíz del árbol.

A es padre de B, C y D.

E y F son hermanos, puesto que ambos son hijos de B.

E, J, K, L, C, P, Q, H, N y O son las hojas del árbol.

El camino desde A a J es único, lo conforman los nodos A-B-F-J y es de largo 3.

D es ancestro de P, y por lo tanto P es descendiente de D.

L no es descendiente de C, puesto que no existe un camino desde C a L.

La profundidad de C es 1, de F es 2 y de Q es 4.

La altura de C es 0, de F es 1 y de D es 3.

La altura del árbol es 4 (largo del camino entre la raíz A y la hoja más profunda, P o

Q).

CAPITULO IV: Estructuras de datos

129

ÁRBOLES BINARIOS

Definición 4.55 Un árbol binario es un árbol en donde cada nodo posee 2 referencias a

subárboles (ni más, ni menos). En general, dichas referencias se denominan izquierda y

derecha, y consecuentemente se define el subárbol izquierdo y subárbol derecho del árbol.

Ilustración 4.12 Esquema de un árbol binario

En este caso, la implementación del nodo de un árbol binario es como sigue:

class NodoArbolBinario

{

Object elemento;

NodoArbolBinario izq;

NodoArbolBinario der;

}

Los nodos en sí que conforman un árbol binario se denominan nodos internos, y todas

las referencias que son null se denominan nodos externos.

Lic. Elmer Alberto León Zárate

130

Ilustración 4.13 Esquema de un árbol binario con nodos internos y externos

PROPIEDADES DE LOS ÁRBOLES BINARIOS

Propiedad 4.1

Si se define i = número de nodos internos, e = número de nodos externos, entonces se

tiene que:

e = i+1

Propiedad 4.2

Sea n = número de nodos internos. Se define:

In = suma del largo de los caminos desde la raíz a cada nodo interno (largo de caminos

internos).

En = suma del largo de los caminos desde la raíz a cada nodo externo (largo de

caminos externos).

Se tiene que:

CAPITULO IV: Estructuras de datos

131

En = In+2n

Propiedad 4.3

¿Cuántos árboles binarios distintos se pueden construir con n nodos internos?

n 0 1 2 3

bn 1 1 2 5

¿bn?

Ejemplo 4.31

b4 = b0*b3 + b1*b2 + b2*b1 + b3*b0 = 5 + 2 + 2 + 5 = 14.

Este tipo de ecuaciones se puede resolver y la solución es la siguiente:

La serie de números que genera bn se conoce como números de Catalán.

Asintóticamente:

Lic. Elmer Alberto León Zárate

132

Ejemplo 4.32

La siguiente figura muestra un ejemplo de un árbol de expresiones matemáticas. En un

árbol de expresiones las hojas corresponden a los operandos de la expresión (variables o

constantes), mientras que los nodos restantes contienen operadores. Dado que los operadores

matemáticos son binarios (o unarios como en el caso del operador signo -), un árbol de

expresiones resulta ser un árbol binario.

Ilustración 4.14 Esquema de un árbol binario de expresiones matemáticas

Un árbol de expresiones se puede evaluar de la siguiente forma:

Si la raíz del árbol es una constante o una variable se retorna el valor de ésta.

Si la raíz resulta ser un operador, entonces recursivamente se evalúan los

subárboles izquierdo y derecho, y se retorna el valor que resulta al operar los

valores obtenidos de las evaluaciones de los subárboles con el operador

respectivo.

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: raíz - subárbol izquierdo - subárbol derecho.

Inorden: subárbol izquierdo - raiz - subárbol derecho.

Postorden: subárbol izquierdo - subárbol derecho - raíz.

Ejemplos 4.33

Recorrido del árbol de expresiones anterior en preorden se obtiene: * + a b - c d

Recorrido del árbol de expresiones en inorden se obtiene: a + b * c - d

Recorrido del árbol de expresiones en postorden se obtiene: a b + c d - *

La expresión que se obtiene con el recorrido en postorden se conoce como notación

polaca.

4.3 RELACION DE EJERCICIOS:

1. Realiza el pseudocódigo que permita el ingreso de 5 alumnos con 4 notas cada uno y

determine el promedio por cada alumno y al final determine el promedio de los

promedios obtenidos por cada estudiante.

2. Calcular la suma de los elementos de un arreglo bidimensional de n elementos.

3. Realizar el algoritmo para determinar la mayor nota ingresada a un arreglo de notas de

4x4.

Lic. Elmer Alberto León Zárate

134

4. Realizar el algoritmo para ingresar un arreglo bidimensional de numero y luego

determine:

La suma de la primera fila

La multiplicación de la última fila

La suma de primera columna

La multiplicación de la última columna

La suma de la diagonal principal

La multiplicación de la diagonal secundaria

5. Escribir un pseudocódigo que permita sumar el número de elementos positivos y el de

negativos de una matriz n.

6. De una lista de n elementos escribir el pseudocódigo que permita insertar el valor x en

un lugar ingresado por el usuario.

7. Leer una matriz de 3x3 y calcular la suma de sus filas y la suma de sus columnas.

8. Se tiene una lista de n nombres en un arreglo unidimensional, escribir el pseudocódigo

que solicite el nombre de un alumno y lo busque en la lista.

9. Obtener el promedio de cierta cantidad de alumnos, considerando para cada alumno

los siguientes datos, código, nombre, sexo, promedio de prácticas y notas de exámenes

parciales y final. Luego mostrar él numero de alumnos aprobados - desaprobados

personas del sexo masculino – femenino.

10. Se pide emitir el pago mensual del personal de una empresa considerando los

siguientes datos por empleado: código, área, sueldo básico, y horas extras.

11. Realizar un algoritmo para el borrado de un elemento. Por ejemplo: Eliminar el

elemento repetido

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 botón command que

se llame Concatenación.

Text3.Text = Text1.Text + Text2.Text

Text3.Text = Text1.Text & Text2.Text

136

CAPITULO V

TEORIA DE GRAFOS

5.1 CONCEPTOS BASICOS

Definición 5.1 Un grafo es un objeto matemático que se utiliza para representar circuitos,

redes, etc. Los grafos son muy utilizados en computación, ya que permiten resolver problemas

muy complejos.

Definición 5.2 Un grafo consta de vértices (o nodos) y aristas. Los vértices son objetos que

contienen información y las aristas son conexiones entre vértices. Para representarlos, se

suelen utilizar puntos para los vértices y líneas para las conexiones, aunque hay que recordar

siempre que la definición de un grafo no depende de su representación.

Definición 5.3 Un camino entre dos vértices es una lista de vértices en la que dos

elementos sucesivos están conectados por una arista del grafo. Así, el camino AJLOE es un

camino que comienza en el vértice A y pasa por los vértices J, L y O (en ese orden) y al final

va del O al E. El grafo será conexo si existe un camino desde cualquier nodo del grafo hasta

cualquier otro. Si no es conexo constará de varias componentes conexas.

Definición 5.4 Un camino simple es un camino desde un nodo a otro en el que ningún nodo

se repite (no se pasa dos veces). Si el camino simple tiene como primer y último elemento al

mismo nodo se denomina ciclo. Cuando el grafo no tiene ciclos tenemos un árbol. Varios

árboles independientes forman un bosque. Un árbol de expansión de un grafo es una

CAPITULO V: Teoria de grafos

137

reducción del grafo en el que solo entran a formar parte el número mínimo de aristas que

forman un árbol y conectan a todos los nodos.

Definición 5.5 Un grafo es completo si cuenta con todas las aristas posibles (es decir, todos

los nodos están conectados con todos), disperso si tiene relativamente pocas aristas y denso si

le faltan pocas para ser completo.

Definición 5.6 Un grafo no dirigido es cuando las aristas son la mayor parte de las veces

bidireccionales, es decir, si una arista conecta dos nodos A y B se puede recorrer tanto en

sentido hacia B como en sentido hacia A.

Definición 5.7 Un grafo dirigido es cuando las aristas son unidireccionales. Estas uniones

se suelen dibujar con una flecha.

Definición 5.8 Un grafo es ponderado cuando las aristas llevan un coste asociado (un

entero al que se denomina peso).

Definición 5.9 Una red es un grafo dirigido y ponderado.

Definición 5.10 Dos grafos son isomorfos cuando sólo queda lo esencial del dibujo: la

forma de las aristas no son relevantes, sólo importan sus extremidades (o cabos); la posición

de los vértices tampoco, y se puede variar para obtener un grafo más claro, y hasta sus

nombres se pueden cambiar. Generalmente, se considera que colocar los vértices en forma de

polígono regular da grafos muy legibles.

Lic. Elmer Alberto León Zárate

138

Ilustración 5.1 Esquema de grafos isomorfos

COLORACION DE UN MAPA

Cuatro colores son siempre suficientes para colorear un mapa. El mapa siguiente

muestra que tres colores no bastan: Si se empieza por el país central a y se esfuerza uno en

utilizar el menor número de colores, entonces en la corona alrededor de a alternan dos

colores. Llegando al país h se tiene que introducir un cuarto color. Lo mismo sucede en i si se

emplea el mismo método.

Ilustración 5.2 Esquema de un mapa coloreado

CAPITULO V: Teoria de grafos

139

5.2 REPRESENTACIÓN DE GRAFOS

Una característica especial en los grafos es que podemos representarlos utilizando dos

estructuras de datos distintas. En los algoritmos que se aplican sobre ellos veremos que

adoptarán tiempos distintos dependiendo de la forma de representación elegida. En particular,

los tiempos de ejecución variarán en función del número de vértices y el de aristas, por lo que

la utilización de una representación u otra dependerá en gran medida de si el grafo es denso o

disperso.

Para nombrar los nodos utilizaremos letras mayúsculas, aunque en el código

deberemos hacer corresponder cada nodo con un entero entre 1 y V (número de vértices) de

cara a la manipulación de los mismos.

5.2.1 REPRESENTACIÓN POR MATRIZ DE ADYACENCIA

Es la forma más común de representación y la más directa. Consiste en una tabla de

tamaño V x V, en que la que a[i] [j] tendrá como valor 1 si existe una arista del nodo i al nodo

j. En caso contrario, el valor será 0. Cuando se trata de grafos ponderados en lugar de 1 el

valor que tomará será el peso de la arista. Si el grafo es no dirigido hay que asegurarse de que

se marca con un 1 (o con el peso) tanto la entrada a[i] [j] como la entrada a[j] [i], puesto que

se puede recorrer en ambos sentidos.

int V, A;

int a[maxV][maxV];

void inicializar()

{

int i,x,y,p;

Lic. Elmer Alberto León Zárate

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 implementación se ha supuesto que los vértices se nombran con una letra

mayúscula y no hay errores en la entrada. Evidentemente, cada problema tendrá una forma de

entrada distinta y la inicialización será conveniente adaptarla a cada situación. En todo caso,

esta operación es sencilla si el número de nodos es pequeño. Si, por el contrario, la entrada

fuese muy grande se pueden almacenar los nombres de nodos en un árbol binario de búsqueda

o utilizar una tabla de dispersión, asignando un entero a cada nodo, que será el utilizado en la

matriz de adyacencia.

Como se puede apreciar, la matriz de adyacencia siempre ocupa un espacio de

V*V, es decir, depende solamente del número de nodos y no del de aristas, por lo que será útil

para representar grafos densos.

CAPITULO V: Teoria de grafos

141

5.2.2 REPRESENTACIÓN POR LISTA DE ADYACENCIA

Otra forma de representar un grafo es por medio de listas que definen las aristas que

conectan los nodos. Lo que se hace es definir una lista enlazada para cada nodo, que

contendrá los nodos a los cuales es posible acceder. Es decir, un nodo A tendrá una lista

enlazada asociada en la que aparecerá un elemento con una referencia al nodo B si A y B

tienen una arista que los une. Obviamente, si el grafo es no dirigido, en la lista enlazada de B

aparecerá la correspondiente referencia al nodo A.

Las listas de adyacencia serán estructuras que contendrán un valor entero (el número

que identifica al nodo destino), así como otro entero que indica el coste en el caso de que el

grafo sea ponderado.

Ejemplo 5.1

En este ejemplo se ha utilizado un nodo z ficticio en la cola (ver listas, apartado

cabeceras y centinelas).

struct nodo

{

int v;

int p;

nodo *sig;

};

int V,A; // vértices y aristas del grafo

struct nodo *a[maxV], *z;

Lic. Elmer Alberto León Zárate

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 representación por listas de adyacencia, por tanto, será

más adecuada para grafos dispersos.

CAPITULO V: Teoria de grafos

143

Hay que tener en cuenta un aspecto importante y es que la implementación con listas

enlazadas determina fuertemente el tratamiento del grafo posterior. Como se puede ver en el

código, los nodos se van añadiendo a las listas según se leen las aristas, por lo que nos

encontramos que un mismo grafo con un orden distinto de las aristas en la entrada producirá

listas de adyacencia diferentes y por ello el orden en que los nodos se procesen variará. Una

consecuencia de esto es que si un problema tiene varias soluciones la primera que se

encuentre dependerá de la entrada dada. Podría presentarse el caso de tener varias soluciones

y tener que mostrarlas siguiendo un determinado orden. Ante una situación así podría ser muy

conveniente modificar la forma de meter los nodos en la lista (por ejemplo, hacerlo al final y

no al principio, o incluso insertarlo en una posición adecuada), de manera que el algoritmo

mismo diera las soluciones ya ordenadas.

5.3 EXPLORACIÓN DE GRAFOS

A la hora de explorar un grafo, nos encontramos con dos métodos distintos. Ambos

conducen al mismo destino (la exploración de todos los vértices o hasta que se encuentra uno

determinado), si bien el orden en que éstos son "visitados" decide radicalmente el tiempo de

ejecución de un algoritmo, como se verá posteriormente.

En primer lugar, una forma sencilla de recorrer los vértices es mediante una función

recursiva, lo que se denomina búsqueda en profundidad. La sustitución de la recursión (cuya

base es la estructura de datos pila) por una cola nos proporciona el segundo método de

búsqueda o recorrido, la búsqueda en amplitud o anchura.

Lic. Elmer Alberto León Zárate

144

Ilustración 5.3 Esquema de exploración de grafos

Suponiendo que el orden en que están almacenados los nodos en la estructura de datos

correspondiente es A-B-C-D-E-F... (El orden alfabético), tenemos que el orden que seguiría el

recorrido en profundidad sería el siguiente:

A-B-E-I-F-C-G-J-K-H-D

En un recorrido en anchura el orden sería, por contra:

A-B-C-D-E-G-H-I-J-K-F

Es decir, en el primer caso se exploran primero los verdes y luego los marrones,

pasando primero por los de mayor intensidad de color. En el segundo caso se exploran

primero los verdes, después los rojos, los naranjas y, por último, el rosa.

Es destacable que el nodo D es el último en explorarse en la búsqueda en profundidad

pese a ser adyacente al nodo de origen (el A). Esto es debido a que primero se explora la rama

del nodo C, que también conduce al nodo D.

CAPITULO V: Teoria de grafos

145

En estos ejemplos hay que tener en cuenta que es fundamental el orden en que los

nodos están almacenados en las estructuras de datos. Si, por ejemplo, el nodo D estuviera

antes que el C, en la búsqueda en profundidad se tomaría primero la rama del D (con lo que el

último en visitarse sería el C), y en la búsqueda en anchura se exploraría antes el H que el G.

5.4 RELACION DE EJERCICIOS:

1.- La matriz de adyacencia del grafo G es

1110

1101

1011

0111

Construir su grafo e indicar si es conexo.

2.- Sea A la matriz de adyacencia de un multígrafo G con vértices {v1, v2,..., vn} y sea a23=3

una de las entradas de A. Entonces,

A) Existe un camino con tres vértices entre v2 y v3.

B) Hay tres aristas con extremos los vértices v2 y v3.

C) Hay tres vértices adyacentes con v2 y v3

3.- Dadas las matrices de adyacencia A, B y C de tres grafos

0111

1011

1101

1110

;

0101

1001

0001

1110

;

0110

1010

1101

0010

C

BA

A) A y B son isomorfos

B) A y C son isomorfos

C) B y C son isomorfos

Lic. Elmer Alberto León Zárate

146

4.- Teniendo en cuenta la región exterior ¿cuántos colores son necesarios para colorear las

regiones del mapa?

A) Tres

B) Cuatro

C) Cinco

5.- Los grafos de la figura, ¿son isomorfos?

A) No, porque uno es plano y el otro no

B) Sí, pues existe un isomorfismo entre ellos.

C) Sí, porque tienen el mismo número de vértices y aristas.

147

CAPITULO VI

ORDENAMIENTO Y BUSQUEDA DE DATOS

6.1 ORDENAMIENTO DE DATOS

Debido a que las estructuras de datos son utilizadas para almacenar información, para

poder recuperar esa información de manera eficiente es deseable que aquella esté ordenada.

Existen varios métodos para ordenar las diferentes estructuras de datos básicas.

En general los métodos de ordenamiento no son utilizados con frecuencia, en algunos

casos sólo una vez. Hay métodos muy simples de implementar que son útiles en los casos en

dónde el número de elementos a ordenar no es muy grande (Ej., Menos de 500 elementos).

Por otro lado hay métodos sofisticados, más difíciles de implementar pero que son más

eficientes en cuestión de tiempo de ejecución.

Los métodos sencillos por lo general requieren de aproximadamente n x n pasos para

ordenar n elementos.

Los métodos directos son: Inserción, Intercambio y Selección. Los métodos más

complejos o Avanzados son: Shell, Quicksort y Heapsort.

Definición 6.1 El ordenar un grupo de datos significa mover los datos o sus referencias

para que queden en una secuencia tal que represente un orden, el cual puede ser numérico,

alfabético o incluso alfanumérico, ascendente o descendente.

Lic. Elmer Alberto León Zárate

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 tamaño del registro. Es por ello que es deseable evitar al máximo el movimiento de

los registros. Una alternativa es el crear una tabla de referencias a los registros y mover las

referencias y no los datos.

A continuación se mostrarán los métodos de ordenamiento empezando por el más

sencillo y avanzando hacia los más sofisticados.

La eficiencia de los algoritmos se mide por el número de comparaciones e

intercambios que tienen que hacer, es decir, se toma n como el número de elementos que tiene

el arreglo a ordenar y se dice que un algoritmo realiza O(n2) comparaciones cuando compara

n veces los n elementos, n x n = n2.

ANÁLISIS DE ALGORITMOS NOTACIÓN DE ORDEN

Una función f(n) se define de orden O (g(n)), es decir, f(n) = O (g(n)) si existen

constantes positivas n0 y c tales que:

| f(n) | = c * <= | g(n) | , para toda n > n0

100 n3 => O(n3)

6n2 + 2n + 4 => O(n2)

1024 => O(1)

1+2+3+4+...+n-1+n= n * (n+1)/2 = O(n2)

CAPITULO VI: Ordenamiento y búsqueda de datos

149

6.1.1 METODOS DIRECTOS

A).MÉTODO DE INSERCIÓN

Este es uno de los métodos más sencillos. Consta de tomar uno por uno los elementos

de un arreglo y recorrerlo hacia su posición con respecto a los anteriormente ordenados. Así

empieza con el segundo elemento y lo ordena con respecto al primero. Luego sigue con el

tercero y lo coloca en su posición ordenada con respecto a los dos anteriores, así

sucesivamente hasta recorrer todas las posiciones del arreglo. Este es el algoritmo:

Procedimiento Insertion Sort

Este procedimiento recibe el arreglo de datos a ordenar a [] y altera las posiciones de

sus elementos hasta dejarlos ordenados de menor a mayor. N representa el número de

elementos que contiene a [].

Paso 1: [Para cada pos. del arreglo] For i <- 2 to N do

Paso 2: [Inicializa v y j] j <- i.

Paso 3: [Compara v con los anteriores] While a [j-1] > v AND j>1 do

Paso 4: [Recorre los datos mayores] Set a[j] <- a [j-1],

Paso 5: [Decrementa j] set j <- j-1.

Paso 5: [Inserta v en su posición] Set a[j] <- v.

Paso 6: [Fin] End.

Ejemplo 6.1

Si el arreglo a ordenar es a = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e'],

Lic. Elmer Alberto León Zárate

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 posición actual de v.

Luego compara esta 's' con lo que hay en la posición j-1, es decir, con 'a'. Debido a que

's' no es menor que 'a' no sucede nada y avanza i.

Ahora v toma el valor 'o' y lo compara con 's', como es menor recorre a la 's' a la

posición de la 'o'; decrementa j, la cual ahora tiene la posición en dónde estaba la 's'; Compara

a 'o' con a [j-1], es decir, con 'a'. Como no es menor que la 'a' sale del for y pone la 'o' en la

posición a[j]. El resultado hasta este punto es el arreglo siguiente: a = ['a','o','s','r',....]

Así se continúa y el resultado final es el arreglo ordenado:

a = ['a','a','e','e','g','i','l','m','n','o','p','r','s','t','x']

B).MÉTODO DE INTERCAMBIO

El bubble sort, también conocido como ordenamiento burbuja, funciona de la siguiente

manera: Se recorre el arreglo intercambiando los elementos adyacentes que estén

desordenados. Se recorre el arreglo tantas veces hasta que ya no haya cambios. Prácticamente

lo que hace es tomar el elemento mayor y lo va recorriendo de posición en posición hasta

ponerlo en su lugar.

Procedimiento Bubble Sort

Paso 1: [Inicializa i al final de arreglo] For i <- N downto 1 do

Paso 2: [Inicia desde la segunda pos.] For j <- 2 to i do

Paso 4: [Si a [j-1] es mayor que el que le sigue] If a [j-1] < a[j] then

Paso 5: [Los intercambia] Swap(a, j-1, j).

CAPITULO VI: Ordenamiento y búsqueda de datos

151

Paso 7: [Fin] End.

Tiempo de ejecución del bubble sort:

para el mejor caso (un paso) O(n)

peor caso n(n-1)/2

promedio O(n2)

C) MÉTODO DE SELECCIÓN

El método de ordenamiento por selección consiste en encontrar el menor de todos los

elementos del arreglo e intercambiarlo con el que está en la primera posición. Luego el

segundo más pequeño, y así sucesivamente hasta ordenar todo el arreglo.

Procedimiento Selection Sort

Paso 1: [Para cada pos. del arreglo] For i <- 1 to N do

Paso 2: [Inicializa la pos. del menor] menor <- i

Paso 3: [Recorre todo el arreglo] For j <- i+1 to N do

Paso 4: [Si a[j] es menor] If a[j] < a [menor] then

Paso 5: [Reasigna el apuntador al menor] min = j

Paso 6: [Intercambia los datos de la pos.min y posición i] 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 León Zárate

152

primera 'a'. De manera que no ocurre ningún cambio. Luego se procede a buscar el siguiente

elemento y se encuentra la segunda 'a'. Esta se intercambia con el dato que está en la siguiente

posición, la 's', quedando el arreglo así después de dos recorridos: a =

['a','a','o','r','t','i','n','g','e','x','s','m','p','l','e'].

El siguiente elemento, el tercero en orden de menor mayor es la primera 'e', la cual se

intercambia con lo que está en la tercera posición, o sea, la 'o'. Le sigue la segunda 's', la cual

es intercambiada con la 'r'. El arreglo ahora se ve de la siguiente manera: a =

['a','a','e','e','t','i','n','g','o','x','s','m','p','l','r']. De esta manera se va buscando el elemento que

debe ir en la siguiente posición hasta ordenar todo el arreglo.

El número de comparaciones que realiza este algoritmo es:

Para el primer elemento se comparan n-1 datos, en general para el elemento i-ésimo

se hacen n-i comparaciones, por lo tanto, el total de comparaciones es:

La sumatoria para i de 1 a n-1 (n-i) = 1/2 n (n-1).

6.1.2 METODOS AVANZADOS

A).MÉTODO SHELL

Denominado así por su desarrollador Donald Shell (1959), ordena una estructura de

una manera similar a la del Bubble Sort, sin embargo no ordena elementos adyacentes sino

que utiliza una segmentación entre los datos. Esta segmentación puede ser de cualquier

tamaño de acuerdo a una secuencia de valores que empiezan con un valor grande (pero menor

al tamaño total de la estructura) y van disminuyendo hasta llegar al '1'. Una secuencia que se

CAPITULO VI: Ordenamiento y búsqueda 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 (n1.2) en el mejor caso y de O (n1.25) en el caso promedio.

void shellsort (int a [], int n)

/* Este procedimiento recibe un arreglo a ordenar a [] y el tamaño del arreglo n.

Utiliza en este caso una serie de t=6 incrementos h= [1,4,13,40,121,364] para el

proceso (asumimos que el arreglo no es muy grande). */

B).MÉTODO QUICKSORT

El método Quicksort divide la estructura en dos y ordena cada mitad recursivamente.

Tiene la ventaja de que utiliza un tiempo proporcional a: n log (n), su desventaja

radica en que se requiere de un espacio extra para el procedimiento.

Lic. Elmer Alberto León Zárate

154

Este tipo de ordenamiento es útil cuando se tiene una estructura ordenada y los

nuevos datos a añadir se almacenan en una estructura temporal para después agregarlos a la

estructura original de manera que vuelva a quedar ordenada.

Procedimiento Quicksort

#include<stdio.h>

void ordenar (int *,int,int);

void main()

{ // Dar valores al array

ordenar(array,0,N-1); // Para llamar a la función

}

void ordenar(int *array, int desde, int hasta)

{

int i,d,aux; // i realiza la búsqueda de izquierda a derecha

// y j realiza la búsqueda de derecha a izquierda.

if(desde>=hasta)

return;

for(i=desde+1,d=hasta;;) // Valores iniciales de la búsqueda.

{

for(;i<=hasta && array[i]<=array[desde];i++); // Primera búsqueda

for(;d>=0 && array[d]>=array[desde];d--); // segunda búsqueda

if(i<d) // si no se han cruzado:

{

aux=array[i]; // Intercambiar.

CAPITULO VI: Ordenamiento y búsqueda 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 búsqueda se sale del array

d=desde; // es que el pivote es el elemento

// más pequeño: se cambia con él mismo.

aux=array[d]; // Colocar el pivote

array[d]=array[desde]; // en su posición.

array[desde]=aux;

ordenar(array,desde,d-1); // Ordenar el primer array.

ordenar(array,d+1,hasta); // Ordenar el segundo array.

}

C).MÉTODO HEAPSORT

Este método garantiza que el tiempo de ejecución siempre es de: O(n log n)

El significado de heap en ciencia computacional es el de una cola de prioridades

(priority queue). Tiene las siguientes características:

Un heap es un arreglo de n posiciones ocupado por los elementos de la cola. (Nota:

se utiliza un arreglo que inicia en la posición 1 y no en cero, de tal manera que al

implementarla en C se tienen n+1 posiciones en el arreglo.)

Lic. Elmer Alberto León Zárate

156

Se mapea un árbol binario de tal manera en el arreglo que el nodo en la posición i es

el padre de los nodos en las posiciones (2*i) y (2*i+1).

El valor en un nodo es mayor o igual a los valores de sus hijos. Por consiguiente, el

nodo padre tiene el mayor valor de todo su subárbol.

HeapSort consiste esencialmente en:

convertir el arreglo en un heap

construir un arreglo ordenado de atrás hacia adelante (mayor a menor) repitiendo los

siguientes pasos:

o sacar el valor máximo en el heap (el de la posición 1)

o poner ese valor en el arreglo ordenado

o reconstruir el heap con un elemento menos

Utilizar el mismo arreglo para el heap y el arreglo ordenado.

Procedimiento Heapsort

/* Recibe como parámetros un arreglo a ordenar y un entero que indica el numero de

datos a ordenar */

void heapsort (int a [], int N)

{

int k;

for (k=N/2; k>=1; k--)

downheap (a,N,k);

while (N > 1)

{

CAPITULO VI: Ordenamiento y búsqueda 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 León Zárate

158

6.2 BUSQUEDA DE DATOS

Definición 6.2 La búsqueda de un elemento dentro de un array es una de las operaciones

más importantes en el procesamiento de la información, y permite la recuperación de datos

previamente almacenados. El tipo de búsqueda se puede clasificar como interna o externa,

según el lugar en el que esté almacenada la información (en memoria o en dispositivos

externos). Todos los algoritmos de búsqueda tienen dos finalidades:

- Determinar si el elemento buscado se encuentra en el conjunto en el que se busca.

- Si el elemento está en el conjunto, hallar la posición en la que se encuentra.

En este apartado nos centramos en la búsqueda interna. Como principales algoritmos

de búsqueda en arrays tenemos la búsqueda secuencial, la binaria y la búsqueda utilizando

tablas de hash.

6.2.1 BÚSQUEDA SECUENCIAL

Consiste en recorrer y examinar cada uno de los elementos del array hasta encontrar el

o los elementos buscados, o hasta que se han mirado todos los elementos del array.

for(i=j=0;i<N;i++)

if(array[i]==elemento)

{

solucion[j]=i;

j++;

}

CAPITULO VI: Ordenamiento y búsqueda de datos

159

Este algoritmo se puede optimizar cuando el array está ordenado, en cuyo caso la

condición de salida cambiaría a:

for(i=j=0;array[i]<=elemento;i++)

O cuando sólo interesa conocer la primera ocurrencia del elemento en el array:

for(i=0;i<N;i++)

if(array[i]==elemento)

break;

En este último caso, cuando sólo interesa la primera posición, se puede utilizar un

centinela, esto es, dar a la posición siguiente al último elemento de array el valor del

elemento, para estar seguro de que se encuentra el elemento, y no tener que comprobar a cada

paso si seguimos buscando dentro de los límites del array:

array[N]=elemento;

for(i=0;;i++)

if(array[i]==elemento)

break;

Si al acabar el bucle, i vale N es que no se encontraba el elemento. El número medio

de comparaciones que hay que hacer antes de encontrar el elemento buscado es de (N+1)/2.

6.2.2 BÚSQUEDA BINARIA O DICOTÓMICA

Para utilizar este algoritmo, el array debe estar ordenado. La búsqueda binaria consiste

en dividir el array por su elemento medio en dos subarrays más pequeños, y comparar el

Lic. Elmer Alberto León Zárate

160

elemento con el del centro. Si coinciden, la búsqueda se termina. Si el elemento es menor,

debe estar (si está) en el primer subarray, y si es mayor está en el segundo.

Ejemplo 6.3

Buscar el elemento 3 en el array {1,2,3,4,5,6,7,8,9} se realizarían los siguientes pasos:

Se toma el elemento central y se divide el array en dos: {1,2,3,4}-5-{6,7,8,9}

Como el elemento buscado (3) es menor que el central (5), debe estar en el primer

subarray: {1,2,3,4}

Se vuelve a dividir el array en dos: {1}-2-{3,4}

Como el elemento buscado es mayor que el central, debe estar en el segundo subarray:

{3,4}

Se vuelve a dividir en dos: {}-3-{4}

Como el elemento buscado coincide con el central, lo hemos encontrado.

Si al final de la búsqueda todavía no lo hemos encontrado, y el subarray a dividir está

vacío {}, el elemento no se encuentra en el array. La implementación sería:

int desde,hasta,medio,elemento,posicion; // desde y

// Hasta indican los límites del array que se está mirando.

int array[N];

// Dar valor a elemento.

for (desde=0, hasta=N-1; desde<=hasta;)

{

if (desde==hasta) // si el array sólo tiene un elemento:

CAPITULO VI: Ordenamiento y búsqueda de datos

161

{

if (array [desde]==elemento) // si es la solución:

posicion=desde; // darle el valor.

else // si no es el valor:

posicion=-1; // no está en el array.

break; // Salir del bucle.

}

medio= (desde+hasta)/2; // Divide el array en dos.

if (array [medio]==elemento) // Si coincide con el central:

{

posicion=medio; // ese es la solución

break; // y sale del bucle.

}

else if (array[medio]>elemento) // si es menor:

hasta=medio-1; // elige el array izquierda.

else // y si es mayor:

desde=medio+1; // elige el array de la derecha.

}

En general, este método realiza log (2, N+1) comparaciones antes de encontrar el

elemento, o antes de descubrir que no está. Este número es muy inferior que el necesario para

la búsqueda lineal para casos grandes.

Este método también se puede implementar de forma recursiva, siendo la función

recursiva la que divide al array en dos más pequeños.

Lic. Elmer Alberto León Zárate

162

6.2.3 BÚSQUEDA MEDIANTE TRANSFORMACIÓN DE CLAVES

(HASHING)

Es un método de búsqueda que aumenta la velocidad de búsqueda, pero que no

requiere que los elementos estén ordenados. Consiste en asignar a cada elemento un índice

mediante una transformación del elemento. Esta correspondencia se realiza mediante una

función de conversión, llamada función hash. La correspondencia más sencilla es la identidad,

esto es, al número 0 se le asigna el índice 0, al elemento 1 el índice 1, y así sucesivamente.

Pero si los números a almacenar son demasiado grandes esta función es inservible. Por

ejemplo, se quiere guardar en un array la información de los 1000 usuarios de una empresa, y

se elige el número de DNI como elemento identificativo. Es inviable hacer un array de

100.000.000 elementos, sobre todo porque se desaprovecha demasiado espacio. Por eso, se

realiza una transformación al número de DNI para que nos dé un número menor, por ejemplo

coger las 3 últimas cifras para guardar a los empleados en un array de 1000 elementos. Para

buscar a uno de ellos, bastaría con realizar la transformación a su DNI y ver si está o no en el

array.

La función de hash ideal debería ser biyectiva, esto es, que a cada elemento le

corresponda un índice, y que a cada índice le corresponda un elemento, pero no siempre es

fácil encontrar esa función, e incluso a veces es inútil, ya que puedes no saber el número de

elementos a almacenar. La función de hash depende de cada problema y de cada finalidad, y

se pueden utilizar con números o cadenas, pero las más utilizadas son:

A) Restas sucesivas: esta función se emplea con claves numéricas entre las que existen

huecos de tamaño conocido, obteniéndose direcciones consecutivas. Por ejemplo, si el

CAPITULO VI: Ordenamiento y búsqueda de datos

163

número de expediente de un alumno universitario está formado por el año de entrada en la

universidad, seguido de un número identificativo de tres cifras, y suponiendo que entran un

máximo de 400 alumnos al año, se le asignarían las claves:

1998-000 --> 0 = 1998000-1998000

1998-001 --> 1 = 1998001-1998000

1998-002 --> 2 = 1998002-1998000

1998-399 --> 399 = 1998399-1998000

1999-000 --> 400 = 1999000-1998000+400

yyyy-nnn --> N = yyyynnn-1998000+ (400*(yyyy-1998))

B) Aritmética modular: el índice de un número es resto de la división de ese número entre

un número N prefijado, preferentemente primo. Los números se guardarán en las direcciones

de memoria de 0 a N-1. Este método tiene el problema de que cuando hay N+1 elementos, al

menos un índice es señalado por dos elementos (teorema del palomar). A este fenómeno se le

llama colisión, y es tratado más adelante. Si el número N es el 13, los números siguientes

quedan transformados en:

13000000 --> 0

12345678 --> 7

13602499 --> 1

71140205 --> 6

73062138 --> 6

C) Mitad del cuadrado: consiste en elevar al cuadrado la clave y coger las cifras centrales.

Este método también presenta problemas de colisión:

Lic. Elmer Alberto León Zárate

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 número y utilizar los elementos restantes

como índice. También se produce colisión. Por ejemplo, si un número de 8 cifras se debe

ordenar en un array de 1000 elementos, se pueden coger el primer, el tercer y las últimas

cifras para formar un nuevo número:

13000000 --> 100

12345678 --> 138

13602499 --> 169

71140205 --> 715

73162135 --> 715

E) Plegamiento: consiste en dividir el número en diferentes partes, y operar con ellas

(normalmente con suma o multiplicación). También se produce colisión. Por ejemplo, si

dividimos el número de 8 cifras en 3, 3 y 2 cifras y se suman, dará otro número de tres cifras

(y si no, se cogen las tres últimas cifras):

13000000 --> 130=130+000+00

12345678 --> 657=123+456+78

71140205 --> 118 --> 1118=711+402+05

CAPITULO VI: Ordenamiento y búsqueda 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 posición. Este método es poco eficaz, porque al nuevo

elemento se le asigna un índice que podrá estar ocupado por un elemento posterior a él, y la

búsqueda se ralentiza, ya que no se sabe la posición exacta del elemento.

También se pueden reservar unos cuantos lugares al final del array para alojar a las

colisiones. Este método también tiene un problema: ¿Cuánto espacio se debe reservar?

Además, sigue la lentitud de búsqueda si el elemento a buscar es una colisión.

Lo más efectivo es, en vez de crear un array de número, crear un array de punteros,

donde cada puntero señala el principio de una lista enlazada. Así, cada elemento que llega a

un determinado índice se pone en el último lugar de la lista de ese índice. El tiempo de

búsqueda se reduce considerablemente, y no hace falta poner restricciones al tamaño del

array, ya que se pueden añadir nodos dinámicamente a la lista.

Lic. Elmer Alberto León Zárate

166

6.3 RELACION DE EJERCICIOS:

1.- Insertar los elementos: 67, 46, 88, 93, 81, 26 y 17 en una tabla de dispersión cerrada de

tamaño b=10 y la función de dispersión h (k) = k mod b.si es necesario aplicar la función de

redispersion lineal hi(k)= [h (k)+ i] mod b.

2.-Ordenar el siguiente arreglo aplicando el método Heapsort.

E X A M E N D E P R O G R A M A C I O N

3.- En un arreglo V se guardan los apellidos de N alumnos. Aplique el primer método de

intercambio para ordenar en forma ascendente, de tal manera que:

Ap1 Ap2 Ap3 Ap4 ……… Apn.

4. En cierta empresa se maneja tres listas (Vectores P, Q, R) que contienen los datos de los N

artículos que se venden.

a) El vector P contiene los códigos de los artículos.

b) El vector Q contiene los nombres de los artículos

c) El vector Q contiene los precios de los artículos.

Ordene los arreglos en forma descendente utilizando el método de selección.

5. Escriba un algoritmo para que utilizando la búsqueda secuencial e informe todas las

ocurrencias de los datos X en un vector T de 77 elementos.

6. Dado un arreglo NOMBRES que contiene los nombres de N alumnos ordenado

alfabéticamente, escriba un programa que encuentre en el arreglo un nombre dado. Si lo

encuentra debe informar la posición en que la encontró. En caso contrario debe enviar un

mensaje adecuado.

7. Se tienen tres vectores de Z elementos:

El vector A con los nombres

CAPITULO VI: Ordenamiento y búsqueda de datos

167

El vector B con los promedios

El vector C con el número de materias aprobadas.

Escriba un algoritmo que lea un nombre, lo busque y si lo encuentra informe su

promedio y número de materias aprobadas. Si el nombre dado no está en el arreglo, envié un

mensaje adecuado.

a) Considere que los arreglos están ordenados.

b) Considere que los arreglos están desordenados.

168

CAPITULO VII

SOFTWARE DE PROGRAMACION MATLAB

7.1 INTRODUCCIÒN

Definición 7.1 MATLAB es un entorno de computación y desarrollo de aplicaciones

totalmente integrado orientado para llevar a cabo proyectos en donde se encuentre elevados

cálculos matemáticos y su visualización gráfica.

MATLAB integra análisis numérico, cálculo matricial, proceso de señal y

visualización gráfica.

Definición 7.2 MATLAB es la disponibilidad de los paquetes especializados llamados

Toolboxes orientados a ingenieros, científicos y técnicos. Entre los más destacados están:

- Procesamiento de señal

- The MATLAB Math Library

- Matemáticas Simbólicas

- Procesamiento de Imagen

- The MATLAB compiler

- Estadística

- Diseño de Sistemas de control

- Identificación de Sistema

- Optimización

- Diseño de control no lineal

- Lógica Difusa

- Splines

CAPITULO VII: Software de programación Matlab

169

7.2 OPERADORES

7.2.1 OPERADORES LOGICOS

OPERADOR DESCRIPCION

& Y

¡ O

~ NO

7.2.2 OPERADORES ARITMETICOS

ESCALAR MATRIZ VECTOR DESCRIPCION

+ + + Adición

- - - Sustracción

* * .* Multiplicación

/ / ./ División hacia la derecha

\ \ \. División hacia la izquierda

^ ‘ .’ Transpuesta

7.2.3 OPERADORES RELACIONALES

OPERADOR DESCRIPCION

< Menor que

<= Menor o igual que

> Mayor que

>= Mayor o igual que

Lic. Elmer Alberto León Zárate

170

== Igual

~= No igual

7.2.4 CARACTERES ESPECIALES

CARACTERES DESCRIPCION

[] Para formar matrices y vectores

() Define precedencia en expresiones aritméticas

, Separador de elementos de una matriz, argumentos de funciones y

declaraciones.

; Separador de declaraciones, termina renglones de una matriz

Ejemplo 7.1

>> 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 programación 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

Definición 7.3 Las variables deben tener un nombre según las siguientes reglas:

no pueden comenzar con un número, pero si pueden tener números en los caracteres

siguientes.

Las mayúsculas y minúsculas se diferencian en los nombres de variables.

Los nombres de variables no pueden contener operadores ni puntos.

No es necesario definir el tipo de variable ó tamaño (si se usa un vector y después se

expande).

7.4 EXPRESIONES

Definición 7.4 Una expresión en MATLAB, puede ser:

una variable ó un número (ejemplo: variable 1,x,3,22.3)

Un comando aplicado (ejemplo: norm (A), sin (2*pi))

Una expresión matemática (ejemplo: 2+3* variab1^4.5)

Lic. Elmer Alberto León Zárate

172

Observación 7.1

Cualquiera de las expresiones anteriores si se escribe en la línea de comandos (>>)

devolverá el nombre de la variable y su valor, si no tiene nombre MATLAB devolverá ans =

resultado.

Observación 7.2

Si la expresión termina en un punto y coma MATLAB no imprime su valor en la

pantalla, pero si realiza al cálculo.

7.5 MATLAB Y EL ALGEBRA LINEAL

Para crear un vector introducimos los valores deseados separados por espacios (o

comas) todo ello entre corchetes []. Si lo que queremos es crear una matriz lo hacemos de

forma análoga pero separando las filas con puntos y comas (;).

Generalmente usaremos letras mayúsculas cuando nombremos a las matrices y

minúsculas para vectores y escalares. Esto no es imprescindible y Matlab no lo exige, pero

resulta útil.

Ejemplo 7.13

>> x = [5 7 -2 4 -6] % es un vector, los elementos los separamos con espacios

x =

5 7 -2 4 -6

Ejemplo 7.14

>> y = [2, 1, 3,7] % es otro vector, los elementos los separamos con comas

CAPITULO VII: Software de programación 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

subíndices, así x(n) sería el n-ésimo elemento del vector x. Si queremos acceder al último

podemos indicarlo usando end como subíndice.

Ejemplo 7.17

>> x = [5 7 -2 4 -6];

>> x (2) % segundo elemento del vector x

Lic. Elmer Alberto León Zárate

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 notación de dos puntos (:),

así x (m: n) nos da todos los elementos desde el m-ésimo hasta el n-ésimo del vector x.

Ejemplo 7.19

>> x (2:4) % devuelve desde el segundo al cuarto elemento del vector x

ans =

7 -2 4

Si introducimos un número entre el primero y el segundo también separado por dos

puntos (:) se mostrarán los elementos del primero al último indicado, incrementados según el

número que aparece en el centro (o decrementados si el número es negativo).

Ejemplo 7.20

>> x (1:2:5) % devuelve el primero, tercero y quinto elemento del vector x

ans =

5 -2 -6

CAPITULO VII: Software de programación 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 paréntesis fuera

de los corchetes.

Ejemplo 7.21

>> x ([3 5 1]) % devuelve el tercer, quinto y primer elemento del vector x

ans =

-2 -6 5

Para acceder a los elementos de una matriz necesitamos dar dos valores, el primero

indica la fila y el segundo la columna.

Ejemplo 7.22

>> A = [1 2 3; 4 5 6];

>> A (2,1) % elemento de la matriz que está en la fila 2 y en la columna 1

ans =

4

Si queremos que escriba toda una fila usaremos los dos puntos para indicar que

queremos todos los elementos.

Ejemplo 7.23

>> A (2, :) % escribe la segunda fila de la matriz

ans =

4 5 6

Lic. Elmer Alberto León Zárate

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 sería muy parecido.

Ejemplo 7.25

>> A (2,2:3) % escribe de la segunda fila de la matriz, las columnas de la 2 a la 3

ans =

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 programación 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 además otra forma de identificar cada elemento de una matriz, de modo

que podemos acceder a un elemento de una matriz indicando sólo un valor y no dos, pero

debemos saber que el orden elegido por Matlab es por columnas así los elementos de la matriz

A serían denominados:

Ejemplo 7.29

Como la matriz A que teníamos era

A =

1 2 3

4 5 6

>>A (5) %accede al elemento 5 de la matriz, es decir, igual que si escribiéramos A

(1,3)

ans =

3

Lic. Elmer Alberto León Zárate

178

Pero es preferible para evitar confusiones trabajar con los elementos de las

matrices indicando la fila y la columna correspondiente.

7.5.2 CONSTRUCCIÓN ABREVIADA DE ALGUNOS VECTORES

A parte de definir un vector introduciendo cada uno de sus elementos, también

podemos crearlo haciendo uso de las siguientes sentencias:

(a: b) crea un vector que comienza en el valor a y acaba en el valor b aumentando de 1 en 1.

(a: c: b) crea un vector q comienza en el valor a y acaba en el valor b aumentando de c en c.

linspace (a,b,c) genera un vector linealmente espaciado entre los valores a y b con c

elementos.

linspace (a,b) genera un vector linealmente espaciado entre los valores a y b con 100

elementos.

logspace (a,b,c) genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b

con c elementos.

logspace (a,b) genera un vector logarítmicamente espaciado entre los valores 10^a y 10^b

con 50 elementos.

Ejemplo 7.30

>> (1:7) % crea un vector que comienza en 1, aumenta de 1 en 1 y acaba en 7

ans =

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 programación 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 León Zárate

180

Ejemplo 7.36

>> logspace (0,2,4) % genera un vector logarítmicamente espaciado entre 10^0 y 10^2

con 4 elementos

ans =

1.0000 4.6416 21.5443 100.0000

7.5.3 CONSTRUCCIÓN DE ALGUNAS MATRICES

Al igual que pasa con los vectores, existen unas sentencias que nos ayudan a crear más

rápidamente algunas matrices que Matlab ya tiene predefinidas (m y n deben tomar valores

naturales):

zeros (n) crea una matriz cuadrada n x n de ceros.

zeros (m,n) crea una matriz m x n de ceros.

ones (n) crea una matriz cuadrada n x n de unos.

ones (m,n) crea una matriz m x n de unos.

rand (n) crea una matriz cuadrada n x n de números aleatorios con distribución uniforme

(0,1).

rand (m,n) crea una matriz m x n de números aleatorios con distribución uniforme (0,1).

randn (n) crea una matriz n x n de números aleatorios con distribución normal (0,1).

randn (m,n) crea una matriz m x n de números aleatorios con distribución normal (0,1).

eye (n) crea una matriz cuadrada n x n de unos en la diagonal y ceros el resto.

eye (m,n) crea una matriz m x n de unos en la diagonal y ceros el resto.

magic (n) crea una matriz cuadrada n x n de enteros de modo que sumen lo mismo las filas y

las columnas.

CAPITULO VII: Software de programación Matlab

181

hilb (n) crea una matriz cuadrada n x n de Hilbert, es decir, los elementos (i,j) responden a la

expresión (1/(i+j-1)).

invhilb (n) crea una matriz cuadrada n x n que es la inversa de la matriz de Hilbert.

Ejemplo 7.37

>> zeros (3) % matriz cuadrada 3 x 3 de ceros

ans =

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 según la uniforme (0,1)

Lic. Elmer Alberto León Zárate

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 según la normal (0,1)

ans =

0.8156 1.2902 1.1908 -0.0198 -1.6041

0.7119 0.6686 -1.2025 -0.1567 0.2573

Ejemplo 7.42

>> eye (2) % matriz identidad o unidad

ans =

1 0

0 1

Ejemplo 7.43

>> magic (4) % matriz mágica 4 x 4

ans =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

CAPITULO VII: Software de programación 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 BÁSICAS CON MATRICES

Lic. Elmer Alberto León Zárate

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 % multiplicación de matrices

ans =

1 3

3 7

Ejemplo 7.47

>> A .* B % multiplicación 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 programación 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 número 2 a la matriz se suma ese número 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 León Zárate

186

7.5.6 FUNCIONES PARA EL ANÁLISIS DE MATRICES

(Con A matriz, v vector y n número natural)

Ejemplo 7.53

>> diag (v) % crea una matriz diagonal a partir del vector v

ans =

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 programación 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 León Zárate

188

ans =

2

Ejemplo 7.60

>> rref (A) % reducción mediante Gauss

ans =

1.0000 0 -1.0000 -4.6667

0 1.0000 2.0000 4.3333

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 programación 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 León Zárate

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 programación Matlab

191

Ejemplo 7.69

>> expm (A)

ans =

23.1407 0

7.6091 2.8497

COMANDOS AVANZADOS

Definición 7.5 Cada comando en MATLAB es un archivo con extensión .m por lo tanto

es necesario tener las librerías donde se encuentran los comandos que se desean utilizar.

MATLAB no distingue entre mayúsculas y minúsculas en los comandos.

ARCHIVOS CON EXTENSIÓN . M

Todos los comandos pueden utilizarse directamente desde la línea de comandos del

MATLAB (>>).

Un archivo (con extensión .m) debe contener el programa (para modificarlo, revisarlo,

correcto otra vez …)

Para trabajar estos archivos es necesario saber:

- que es: Es un archivo de texto como cualquier otro donde se encuentra el listado del

programa.

- Desde Windows: con el NOTEPAD cambiando el tipo de archivo a “todos los

archivos (*,*)” antes de grabarlo.

- En el Editor de MATLAB.

Lic. Elmer Alberto León Zárate

192

- El archivo debe quedar grabado en el mismo directorio que MATLAB para poder

correrlo

7.6 COMANDOS DE PROGRAMACIÓN

7.6.1 COMMAND END

Determina hasta cual orden llega el efecto de if, for y while.

7.6.2 COMANDO IF

Verifica si se cumple la condición, si es verdadero ó falso ejecuta la acción

correspondiente.

SINTAXIS:

if (condición), (acción 1) [else, (acción 2)] end;

Donde las ordenes entre [] son opcionales:

(acción 1) = se ejecuta si la condición es verdadera

(acción 2) = se ejecuta si la condición es falsa

(condición) puede ser:

a==b a<b a>b

a<=b a>=b a~=b

Ejemplo 7.70

% uso de if

n = 0;

CAPITULO VII: Software de programación 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 condición es verdadera ejecuta la acción correspondiente.

SINTAXIS

while (condición), (acción) end;

Donde:

(acción) son las ordenes a ejecutar

Lic. Elmer Alberto León Zárate

194

(condición) puede ser igual a la condición del comando if.

Ejemplo 7.71

% uso del comando while

n=0

while n<=2

n

n=n+1;

end;

SALIDA

n =

0

n =

1

n =

2

7.6.4 COMANDO FOR

Utiliza un contador y es útil si se quiere repetir una parte del programa un número

determinado de veces.

SINTAXIS

for (contador), (acción) end;

CAPITULO VII: Software de programación Matlab

195

Donde:

(acción) = son las ordenes a ejecutar hasta que el contador llega a su valor final

(contador) = Es de la forma:

variable = a [ : b] : c

Donde:

variable es el contador

a es el valor inicial del contador

b es el segundo valor del contador (opcional, si de omite b = a +1), determina el

incremento del contador.

c es el valor final del contador.

Ejemplo 7.72

% uso del for

for i = 0.5 : 2.0

i % MATLAB muestra su valor

end;

SALIDA

i =

0

i =

0.5

i =

1

i =

Lic. Elmer Alberto León Zárate

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 (`También se puede escribir así´);

SALIDA

1 2 3 4 9 11

1 2 7

CAPITULO VII: Software de programación Matlab

197

6 3 4

Texto de Prueba

También se puede escribir así

7.6.6 COMANDO INPUT

Se utiliza para que el programa pida valores de variables mientras se ejecuta:

SINTAXIS

Variable = input (texto);

Donde:

variable es un nombre valido donde se almacena el valor que se pregunta.

Texto puede ser una variable ó una cadena

Ejemplo 7.74

% uso de input

a = 0;

a = input (`Ingrese el valor de a; ´);

texto = `Cual es el nuevo valor de a: ´;

a

a = input (texto);

a

SALIDA

Ingrese el valor de a: (espera)

a =

Lic. Elmer Alberto León Zárate

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 números primos menores que 100.

clc,

disp('Estos son los números primos menores de 100')

disp (2)

for i=3:100

n=2;

while n <= sqrt(i)

if rem(i,n)==0

n=i;

else n=n+1;

end

end

if n~=i disp(i)

end

end

Ejemplo 7.76

CAPITULO VII: Software de programación 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 número es: ')

disp(Suma)

7.7 GRÁFICAS 2-D

La orden plot genera una gráfica. Los argumentos deben ser vectores de la misma

longitud.

Ejemplo 7.77

>> x = [-2 -1 0 1 2 3]; y = [4 1 0 1 4 9];

>> plot (x,y)

Lic. Elmer Alberto León Zárate

200

Figura 7.1 Esquema de grafico con el comando plot

Si queremos cambiar la apariencia de la gráfica basta pinchar en el último botón de la

barra de herramientas y se abrirán unos cuadros en los laterales que nos permitirán ir haciendo

los cambios deseados como darle nombre a los ejes.

Figura 7.2 Esquema de grafico para modificación

La función plot nos permite otras opciones como superponer gráficas sobre los

mismos ejes:

Ejemplo 7.78

>> x = [-2 -1 0 1 2 3]; y = [4 1 0 1 4 9]; z = [6 5 3 7 5 2];

>> plot (x,y,x,z)

CAPITULO VII: Software de programación Matlab

201

Figura 7.3 Esquema de 2 gráficos con el comando plot

Ejemplo 7.79

También podemos usar distintos tipos de líneas para el dibujo de la gráfica:

>> plot (x,y,'*')

Figura 7.4 Esquema de grafico con otro tipo de línea

Además podemos colocar etiquetas o manipular la gráfica:

Etiqueta sobre el eje X de la gráfica actual: >> xlabel('texto')

Etiqueta sobre el eje Y de la gráfica actual: >> ylabel('texto')

Título en la cabecera de la gráfica actual: >> title('texto')

Texto en el lugar especificado por las coordenadas: >> text(x,y, 'texto')

Texto, el lugar lo indicamos después con el ratón: >> gtext('texto')

Lic. Elmer Alberto León Zárate

202

Dibujar una rejilla: >> grid

Fija valores máximo y mínimo de los ejes: >> axis ([xmin xmax ymin ymax])

Fija que la escala en los ejes sea igual: >> axis equal

Fija que la gráfica sea un cuadrado: >> axis square

Desactiva axis equal y axis square: >> axis normal

Abre una ventana de gráfico: >> hold on

Borra lo que hay en la ventana de gráfico: >> hold off

Todas estas órdenes se las podemos dar desde la propia ventana de la gráfica una vez

que hemos abierto las opciones con el botón indicado anteriormente.

Otros comandos relacionados con las gráficas son los siguientes:

Para obtener una información más detallada se recomienda utilizar la ayuda de Matlab:

>> help <orden>

Una ventana gráfica se puede dividir en m particiones horizontales y en n verticales,

de modo que cada subventana tiene sus propios ejes, y para hacer esto vamos a usar subplot

(m,n,p) donde p indica la subdivisión que se convierte en activa.

CAPITULO VII: Software de programación 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 polígonos podemos usar la función plot pero teniendo en cuenta que el

último punto de ambos vectores deben coincidir para que la gráfica quede cerrada. Pero si lo

que queremos es que quede coloreado todo el interior del polígono debemos usar mejor la

función fill, tiene tres argumentos, los dos vectores que forman los puntos y un tercer

argumento para indicar el color.

Ejemplo 7.81

>> x = [-2 0 2 0 -2]; y = [4 8 4 0 4];

>> plot (x,y)

Lic. Elmer Alberto León Zárate

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 polígono, 'r' indica el color rojo

Figura 7.7 Esquema de grafico con fondo

7.8 GRAFICOS 3-D

También podemos crear gráficas en 3 dimensiones, se trata de extender la orden de

plot (2-D) a plot3 (3-D) donde el formato será igual pero los datos estarán en tripletes:

Ejemplo 7.83

>> x = -720:720; y = sind (x); z = cosd (x);

>> plot3 (x,y,z)

CAPITULO VII: Software de programación Matlab

205

Figura 7.8 Esquema de grafico en 3-D

Podemos hacer girar la gráfica usando de la barra de herramientas el botón

correspondiente o hacerla más grande o más pequeña. Al igual que ocurría con las gráficas en

dos dimensiones podemos nombrar los ejes o hacer modificaciones entrando en opciones con

el botón.

Si queremos representar un polígono en 3 dimensiones lo haremos con la función fill3

de forma similar a fill pero ahora con 4 argumentos, siendo el cuarto el que indica el color.

Ejemplo 7.84

>> x = [-2 0 2 0 -2];

>> y = [4 8 4 0 4];

>> z = [3 5 10 5 3];

>> fill3 (x,y,z,'b') % dibuja en 3-D, 'b' indica el color azul

Figura 7.9 Esquema de grafico relleno en 3-D

Lic. Elmer Alberto León Zárate

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 gráfica de malla se usa

la orden mesh(X,Y,Z), mesh acepta un argumento opcional para controlar los colores.

También puede tomar una matriz simple como argumento: mesh(Z).

Ejemplo 7.85

>> x = -10:0.5:10; y = -10:0.5:10;

>> [X,Y] = meshgrid (x,y); % crea matrices para hacer la malla

>> Z = sin (sqrt (X .^2 + Y .^2)) ./ sqrt (X .^ 2 + Y .^ 2 + 0.1);

>> mesh (X,Y,Z) % dibuja la gráfica

Figura 7.10 Esquema de grafico de superficie de malla

Hubiera dado igual si hubiéramos escrito:

>> [X,Y] = meshgrid (-10:0.5:10);

>> Z = sin (sqrt (X .^2 + Y .^ 2)) ./ sqrt (X .^ 2 + Y .^ 2 + 0.1);

>> mesh (X,Y,Z)

CAPITULO VII: Software de programación Matlab

207

Gráfica de superficie:

Es similar a la gráfica de malla, pero aquí se rellenan los espacios entre líneas. La

orden que usamos es surf con los mismos argumentos que para mesh.

Ejemplo 7.86

>> surf (X,Y,Z)

Figura 7.11 Esquema de grafico de superficie

Las gráficas de contorno en 2-D y 3-D se generan usando respectivamente las

funciones contour y contour3.

Ejemplo 7.87

>> contour (X,Y,Z) % dibuja las líneas de contorno

Figura 7.12 Esquema de contorno en 2-D

Lic. Elmer Alberto León Zárate

208

La función pcolor transforma la altura a un conjunto de colores.

Ejemplo 7.88

>> pcolor (X,Y,Z)

Figura 7.13 Esquema de grafico con pcolor

Manipulación de gráficos:

Fija el ángulo de visión especificando el azimut y la elevación:

>> view(az,el)

Coloca su vista en un vector de coordenada cartesiana (x,y,z) en el espacio 3-D:

>>view([x,y,z])

Almacena en az y el los valores del azimut y de la elevación de la vista actual:

>> [az,el]=view

Añade etiquetas de altura a los gráficos de contorno:

>> clabel(C,h)

Añade una barra de color vertical mostrando las transformaciones:

>> colorbar

CAPITULO VII: Software de programación Matlab

209

Ejemplo 7.89

>> surf (X,Y,Z)

>> view (10,70)

Figura 7.14 Esquema de grafico con superficie

>> colorbar % añade la barra de color a la figura actual

Figura 7.15 Esquema de grafico con superficie y barra

Lic. Elmer Alberto León Zárate

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 programación Matlab

211

Figura 7.17 Esquema de grafico de contorno en 2-D

Comprensión de los mapas de color:

La sentencia colormap (M) instala a la matriz M como el mapa de color a utilizar por

la figura actual.

Lic. Elmer Alberto León Zárate

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é instrucción debemos teclear para obtener?:

» v= (0 2 4 6 8 10)

a. v=0:2:10

b. v=linspace(0,10,6)

c. Todas son correctas

d. v=[0 2 4 6 8 10]

2. Dado A= [1 2 3;4 5 6 ] ¿Qué devuelve: >>ones(size(A))?.

a. Error

b. [1 1 1;1 1 1]

c. [1 1 1]

CAPITULO VII: Software de programación 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] ¿Cómo se obtiene el elemento 4?

a. v(4)

b. v[4]

c. v(3)

d. v[3]

7. Dado el vector v= [7 6 5 4 3 2 1] ¿Qué devuelve la instrucción >>x=v (1:3)?

a. x=[3 2 1]

b. [1 2 3]

c. [7 6 5 4 3]

d. x=[7 6 5]

8. Dado el vector v= [7 6 5 4 3 2 1] ¿Qué devuelve la instrucción >>x=v ([3 5 1 7])?

a. x=[5 3 7 1]

Lic. Elmer Alberto León Zárate

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 instrucción >>x=v (3:-1:1)?

a. x=[3 2 1]

b. x=[]

c. x=[3 -1 1]

d. x=[5 6 7]

10. Dado el vector v= [7 6 5 4 3 2 1]. Calcula lo que devuelve la instrucción: >>v (:)

a. Error

b. [7 6 5 4 3 2 1]

c. [7 6 5 4 3 2 1]’

d. :

11. Dada A= [1 2 3; 4 5 6; 7 8 9]. Calcula lo que devuelve la instrucción: >>A (3 3)=0

a. A= [0 0 0;0 0 0;0 0 0]

b. A= [1 2 3;4 5 6;7 8 0]

c. A=0

d. A[3 3]=0

12. Dada A= [1 2 3; 4 5 6; 7 8 9]. Calcula lo que devuelve la instrucción: >>E=A (1:2,2:3)

a. [2 3;5 6]

b. [1 2;2 3]

c. (1:2,2:3)

d. [1:2,2:3]

13. Dada A= [1 2 3; 4 5 6; 7 8 9]. Calcula lo que devuelve la instrucción: >>B=A (3:-1:1,1:3)

CAPITULO VII: Software de programación 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 León Zárate

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. ¿Cómo representarías en Matlab el polinomio: P(X)=-x4+x2-1?

24. ¿Qué ocurre si intentamos sumar A= [1 2 3; 4 5 6; 7 8 9] y B= [1 2 3]?.

a. Error

b. [2 4 6;5 7 9;8 10 12]

c. [2 3 4;6 7 8;10 11 12]

d. Ninguna es correcta

25. ¿Qué ocurre si intentamos sumar A= [1 2; 3 4] y B= [5 6; 7 8]?.

a. [6 8;10 12]

b. Error

c. [8 6;12 10]

d. Ninguna es correcta

26. Calcular la suma de A= [] y B= [3]?.

a. []

b. Error

c. [3]

d. [[3]]

27. Calcular A*B, con A= [1; 2; 3] y B= [6]?.

a. [6;12;18]

CAPITULO VII: Software de programación Matlab

217

b. Error

c. []

d. [6 12 18]’

28. Dado el vector v= [1 2 3], usando las funciones de álgebra, ¿qué instrucción debemos

ejecutar para obtener la matriz: A= [1 0 0; 1 2 0; 0 0 3]?

29. Dada A= [1 2 3; 4 5 6; 7 8 9], ¿qué instrucción debemos ejecutar para obtener la matriz: [1

0 0; 1 5 0; 0 0 9]?

30. Dada A= [1 2 3; 4 5 6; 7 8 9], ¿qué instrucción debemos ejecutar para obtener la matriz: [1

2 3; 0 5 6; 0 0 9]?

31. Usando las funciones de álgebra lineal, ¿Cómo podemos obtener la matriz: [0 1 0 0 0; 1 0

1 0 0; 0 1 0 1 0; 0 0 1 0 1; 0 0 0 1 0]?

32. Genera una matriz de tamaño 6x6, que esté formada en sus tres primeras filas y columnas

por una matriz de elementos aleatorios, en sus tres siguientes filas y sus tres primeras

columnas por la matriz identidad, en sus tres siguientes columnas y tres primeras filas

compuestas por ceros y en las tres últimas filas y tres últimas columnas por una matriz

diagonal compuesta por los elementos de la diagonal de A.

33. Representar gráficamente en [0,10] la función.

f(x) = e(-x/4) *sin(x)

34. Representar gráficamente en [-10,10] la función.

f(x) = (7*x2-sin(x))/(2*x+3)

35. Escribe una función que devuelva como resultado el mayor de los elementos de un vector.

36. Escribe una función que dada una matriz A de orden nxm, permute los renglones k e i.

Function [B]=permuta(A, k, i).

Lic. Elmer Alberto León Zárate

218

37. Escribe una función que determine el número de entradas igual a cero de una matriz A.

Function [nc]=ceros(A).

38. Escribe una función que represente a un número natural n en base 2, la salida es un vector

v de ceros o unos. Debe usar funciones de Matlab como mod y el comando while.

Function[v]=basedos(n).

39. Escribir un programa en MATLAB que determine si dados 4 números a, b, c, d están en

progresión aritmética

40. Escribir las sentencias de MATLAB necesarias para obtener los cuadrados de los números

pares entre 0 y 50. Crear una tabla con cada entero y su cuadrado.

41. Determinar cuantas veces se ejecutará un bucle for si escribimos:

a. for n = 7:10

b. for j = 7:-1:10

c. for i = 1:10:10

d. for –10:3:-7

42. Determinar el valor de x al final de los siguientes bucles:a) x= 0;

for x = 1:10

x = x+1;

end

b) x = 0;

for x = 1:10

y = x + x;

end

c) x = 0;

CAPITULO VII: Software de programación 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. ¿Cuántas 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 Programación C++ fue creado por Bjarne Stroustrup en 1985

como una extensión del Lenguaje C, el mismo que es mas consistente y conocido

que otros lenguajes de programación científicos.

Definición 8.1 El Lenguaje de Programación C++ es de propósito general porque

ofrece control de flujo, estructuras sencillas y un buen conjunto de operadores. Se

puede utilizar en varios tipos de aplicación.

Este Lenguaje ha sido creado estrechamente ligado al sistema operativo

UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje

no esta ligado a ningún sistema operativo ni a ninguna máquina concreta.

Sus características principales son:

- Es un Lenguaje que Incluye a versiones anteriores de Lenguaje C

- Abstracción de Datos

- Permite definir nuevos tipos de Datos

- Permite la programación orientada a objetos

- Varias funciones pueden compartir el mismo nombre.

- Permite definir una función como miembro de una estructura.

- Incluye Operadores para reservar y liberar memoria.

CAPITULO VIII: Lenguaje de programación C++

221

8.2 OPERADORES

Definición 8.2 Son símbolos que se utiliza para manipular datos.

Existen los siguientes tipos de operadores:

8.2.1 OPERADORES DE ASIGNACIÓN

Definición 8.3 Es el símbolo “=” que se utiliza para dar un valor a una variable.

A = 3; coloca directamente un valor

A = b; se le da un valor de otra variable

A=b=c=3; da un valor a varias variables

A=b=c=d; todos toman el valor de la variable d

8.2.2 OPERADORES ARITMÉTICOS

Definición 8.4 Son símbolos que indican los cálculos que se deben realizar sobre

una o más variables dentro de una expresión.

+ suma suma = a + b

++ Incrementar un uno x = x + 1; // x = x++; // x +=1;

- resta resta = a – b

-- Decremento en uno x = x - 1; // x = x - -; // x -=1;

Lic. Elmer Alberto León Zárate

222

* Multiplicación i = i * j; // i * = j;

/ División x= x / 2; // x /=2;

% modulo Resto de la división de enteros.

8.2.3 OPERADORES DE COMPARACIÓN

Definición 8.5 Son símbolos para indicar la relación que hay entre dos o mas

valores.

= == igual que, cumple sin son iguales

!= distinto que, lo contrario de igual

>, <, >=, <= mayor, menor, mayor o igual y menor o igual

8.2.4 OPERADORES LÓGICOS

Definición 8.6 Son símbolos que sirven para unir varias comparaciones

&& & and ( alt + 38 )

|| | or ( alt + 124 )

! not

8.2.5 PRIORIDAD DE LOS OPERADORES

( )

CAPITULO VIII: Lenguaje de programación C++

223

++ -- &

* / %

+ -

< <= > >=

== ¡=

&&

||

=

8.3 TIPOS DE DATOS

Definición 8.7 Son los atributos de una parte de los datos que indica al ordenador

(y/o el programador) algo sobre la clase de datos sobre los que se va a procesar.

8.3.1 ENTEROS

Para números enteros con el siguiente rango:

int -32768 ... 32767

long -2147483648 ... 2147483647

Lic. Elmer Alberto León Zárate

224

8.3.2 REALES (COMA FLOTANTE)

Para números reales con el siguiente rango:

float -3.40E+38… -1.17E-37 para negativos

float 1.17E-37 ... 3.40E+38 para positivos

double -1.79E+308 ... –2.22E-307 para negativos

double 2.22E-307 ... 1.79E+308 para positivos

8.3.3 CARACTER

Para caracteres solos y cadenas de caracteres:

char [cantidad]

8.4 CONSTANTES

Definición 8.8 Son aquellos datos que no pueden cambiar a lo largo de la ejecución

de un programa.

Sintaxis: Dentro de la Función Principal

1. Declarar la Variable

2. Variable = valor_según_declaración

Dentro de las Librerías de Cabecera

CAPITULO VIII: Lenguaje de programación 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

Definición 8.9 Son aquellos datos que puede cambiar su valor dentro de la

ejecución del programa.

8.5.1 PRIMERA FORMA (DECLARACIÓN GLOBAL): Estas se declaran después

de las librerías y sirven para todo el programa, incluyendo las funciones definidas

por el usuario.

# include < conio.h >

# include < stdio.h >

tipo_dato variables globales;

void main()

{

}

Lic. Elmer Alberto León Zárate

226

8.5.2 SEGUNDA FORMA (DECLARACIÓN LOCAL): Estas se declaran dentro de la

función principal ó las funciones definidas por el usuario en el programa.

# include < conio.h >

# include < stdio.h >

void main()

{

tipo_dato variables locales;

}

8.6 ENTRADA Y SALIDA DE DATOS

Las Librerías que se activa para la entrada y salida de datos son:

- #include < stdio.h >

- #include < bcd.h >

8.6.1 ENTRADA

FUNCIÓN CIN : ( # include < stdio.h > # include < bcd.h > )

Sintaxis:

cin >>apuntador de Variable;

cin >>Variable 1>>Variable 2;

CAPITULO VIII: Lenguaje de programación 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

FUNCIÓN COUT: (# include < stdio.h > - # include< bcd.h >)

Forma:

cout << “mensaje de Salida “;

cout << “mensaje de Salida “<<Variable <<Variable;

cout << “mensaje de Salida \n “<<Variable <<” \n” <<Variable;

Ejemplo 8.4

cout << “los números son “<< a << b <<c;

Para una mejor ubicación del texto en la pantalla colocar el comando:

gotoxy (Coordenadas_x, Coordenada_y); cout...

8.7 INSTRUCCIONES DE CONTROL

Definición 8.10 Las Instrucciones de Control permiten que los programas sean más

estructurados y puedan de esta forma solucionar todo tipo de problemas (Joyanes

Aguilar, 1994).

Lic. Elmer Alberto León Zárate

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

Definición 8.11 Se realizan mediante las instrucciones if, if...else, switch y

permiten evaluar una condición o expresión y en función del resultado de la misma

se realizara una acción u otra.

A) IF.-Toma una decisión referente al bloque de sentencias a ejecutar en un

programa, basándose en el resultado (Verdadero o falso) de una Condición.

1ra Sintaxis:

if (Condición _ verdadera)

Sentencias Ejecutables;

2da Sintaxis:

if (Condición)

{ ......................

Sentencias Ejecutables;

......................

CAPITULO VIII: Lenguaje de programación C++

229

}

else

{ ......................;

Sentencias Ejecutables

......................;}

Observación 8.1

Si la condición a evaluar en el IF necesita más opciones colocar:

&& (and) || (or)

Ejemplo 8.5

CONDICION PARA ENCONTRAR NÚMEROS PARES

if (N % 2! = 1)

cout <<” NUMERO PAR”

Ejemplo 8.6

CONDICION PARA LOS NUMEROS NEGATIVOS O NÚMEROS CERO

if ((N < 0) || (N==0))

cout <<” NUMERO NEGATIVO O CERO”

Lic. Elmer Alberto León Zárate

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 función del

valor de una expresión.

Sintaxis:

switch (EXPRESION)

{

case 1: Sentencias Ejecutables;

CAPITULO VIII: Lenguaje de programación 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 ‘ Carácter ’

4) C++ no soporta varios casos en el mismo lugar paras esto se utiliza :

Case 1:

Case 2:

5) Necesita utilizar la sentencia BREAK al finalizar cada CASE. Break hace que

la ejecución del programa continúe después del SWITCH.

Lic. Elmer Alberto León Zárate

232

6) Si no se coloca SWITCH la ejecución del programa se reanuda en las demás

CASE.

7) El conjunto de sentencias de cada CASE no necesita encerrarse entre llaves.

8.7.2 REPETITIVAS

Definición 8.12 Estas instrucciones hacen que una sección del programa se repita

un cierto número de veces. La repetición continua mientras una condición sea

verdadera, cuando la decisión es falsa el bucle termina y el control pasa a las

sentencias a continuación del bucle, existen tres clases de Bucles for, while y

do...while.

A) FOR.- El bucle FOR, ejecuta una sección de código un número fijo de veces.

Sintaxis:

for (exp1; exp2; exp3)

Sentencia Ejecutables;

for (exp1; exp2; exp3) for (exp1, exp A; exp2, exp B; exp3, Exp B) {

.......................; { ...................;

Sentencia Ejecutables; Sentencia Ejecutables;

.....................; ....................;

} }

CAPITULO VIII: Lenguaje de programación C++

233

Donde:

exp1 : Es el Valor inicial ( Signo =)

exp2 : Condición(Signo <=, >=, <, >)

exp3 : Es el Operador de incremento o decremento ( i + + , i - - )

Ejemplo 8.8

IMPRIMIR LOS 10 PRIMEROS NÚMEROS.

int i;

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

cout << “\n” << i;

Ejemplo 8.9

IMPRIMIR LOS 20 PRIMEROS NUMERO EN FORMA DESCENDENTE

int i;

for (i = 20; i >= 1; i - - )

cout << “\n” << i;

B) WHILE.- El bucle while ejecuta un bloque de sentencias ejecutables mientras su

condición sea verdad.

Sintaxis:

Lic. Elmer Alberto León Zárate

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 programación C++

235

{ cout << “\n” << c;

c - - ;

}

Observación 8.2

¿COMO INGRESAR UNA CADENA, SI VARIABLE SE DECLARA COMO CHAR?

UTILIZAR getline (VARIABLE, CANTIDAD_DECLARADA);

char nombre [40];

cout << “ingrese su nombre completo:”;

cin.getline(nombre,40);

Observación 8.3

¿COMO CONTROLAR LA CANTIDAD DE DECIMALES DE UNA RESPUESTA?

UTILIZAR #include < iomanip. h >

setprecision (CANTIDAD_DE_DECIMALES)

float raiz_cuadrada, n;

cout << “ingrese un numero entero:”; cin >> n;

raiz_cuadrada = pow (n, 0.5);

Lic. Elmer Alberto León Zárate

236

cout << “La raíz es:” << setprecision (2) << raiz_cuadrada;

Observación 8.4

¿COMO IMPRIMIR VARIAS REPUESTAS SEPARADOS POR UN ESPACIO DETERMINADO?

UTILIZAR #include < iomanip. h >

setw (CANTIDAD_DE_ESPACIOS)

cout << a << setw (5) << b << setw (5) << c; // Ancho

cout << a << “\t” << b << “\t” << c; //tabulador

C) DO... WHILE.- Ejecuta un bloque de sentencias, una o más veces, dependiendo

de la condición que tiene que ser verdadera.

Sintaxis:

do

{

...................... ;

SENTENCIAS EJECUTABLES;

...................... ;

}

CAPITULO VIII: Lenguaje de programación C++

237

while (CONDICIÓN _ VERDADERA);

Ejemplo 8.12

INGRESAR NUMEROS Y TERMINAR CUANDO SE INGRESE UN NUMERO

NEGATIVO DEVOLVIENDO LA SUMA.

SUMA = 0;

cin >> N;

do{ SUMA + = N;

cin >> N;

} while (N > 0);

Ejemplo 8.13

COLOCAR ¿DESEA CONTINUAR S/N? PARA RETORNAR A UN

PROGRAMA

char OP;

do

{ clrscr();

cout <<” INGRESE UN NUMERO:”;

cin >> N;

Lic. Elmer Alberto León Zárate

238

cout <<” DESEA SEGUIR S/N:”;

cin >> OP;

} while (OP == ‘S’);

8.7.3 DE SALTO

Definición 8.13 Estas instrucciones hacen que en un determinado momento de la

ejecución del programa se traslade a otra parte o abandone una instrucción

repetitiva y pueda continuar con el resto del programa, existen tres clases: break,

continue y goto.

A) BREAK.- Hace finalizar la ejecución del Ciclo ó bucle: DO, FOR, SWITCH,

WHILE más interno que lo contenga.

Sintaxis:

break;

BREAK solamente finaliza la ejecución de la sentencia de donde esta incluida.

Ejemplo 8.14

Imprimir los 4 primeros números enteros

n=1;

while(n < 5)

CAPITULO VIII: Lenguaje de programación C++

239

{

cout<< n;

if (n == 4)

break;

else

n++;

}

B) CONTINUE.- Traslada la ejecución del programa a la última línea del Ciclo ó

bucle: DO, FOR, SWITCH, WHILE más interno que lo contenga.

Sintaxis:

continue;

Ejemplo 8.15

Imprimir los números entre 1 y 50 que no sean múltiplos de 5

n=1;

while(n < 50)

{

Lic. Elmer Alberto León Zárate

240

if (n % 5 == 0)

continue;

else

cout<< n;

n++;

}

C) GOTO.- Traslada la ejecución del programa a una línea específica identificada

por una etiqueta.

Sintaxis:

goto etiqueta;

......................

......................

Etiqueta: bloque de SENTENCIAS;

Ejemplo 8.16

Calcular el área de un triangulo

Inicio: { cout<<” Ingrese la base del triangulo:”;

CAPITULO VIII: Lenguaje de programación 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

Definición 8.14 Es una colección independiente de declaraciones y sentencias,

generalmente realiza una tarea específica, En C++ existe una función por naturaleza

y es el programa principal:

void main ( )

{

……………

}

Lic. Elmer Alberto León Zárate

242

Cuando se llama a una función el control pasa a la función para su ejecución,

una vez finalizado el trabajo de la función devuelve el control a la función que lo

llamó.

void main( ) Función1( ) Función2( )

{ { {

Función1 ( ); Instrucciones; Instrucciones;

Instrucción; Función2 ( ); }

}

Instrucción;

}

Observación 8.5

- Una función no pertenece al programa

- En el programa sólo se le llama

- El cuerpo de una función es la parte funcional de un programa.

- Una función siempre debe estar fuera de la función principal main( ).

PASOS PARA DEFINIR UNA FUNCIÓN:

1. Tener en cuenta las variables globales o locales

CAPITULO VIII: Lenguaje de programación C++

243

2. En C++ se debe declarar una función antes de utilizarla, colocándolo el

encabezado de la función

int suma (int a, int b);

3. Comenzar con la función

Sintaxis:

TIPO NOMBRE (TIPO VARIABLE DE ENTRADA)

{

DECLARACIONES DE VARIABLES LOCALES;

SENTENCIAS EJECUTABLES;

return [VARIABLE;] // Variables de Salida

}

Donde:

TIPO : Indica el tipo de Datos que devolverá la función luego de su uso (no

es necesario, solo en casos que se quiera hacer referencia a la salida).

NOMBRE : Es el nombre de la función, trata de no tenerlo como variable.

Lic. Elmer Alberto León Zárate

244

TIPO VARIABLE DE ENTRADA

Aquí se colocan las Variables con su respectivo tipo de Datos que entraran a

la función para su posterior uso, reemplazando a la variable verdadera.

Si dentro de la función se hace uso de variables que no pertenecen a la

función MAIN solo se declararan dentro de la función, como una variable local.

FORMAS:

SUMA ( ); Función 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 FUNCIÓN – SENTENCIA RETURN

Indicara que variable retornara con el valor, solo puede haber un solo retorno

y en algunos casos no se coloca valor de retorno cuando se trata de varios valores.

Sintaxis:

return variable;

CAPITULO VIII: Lenguaje de programación C++

245

Observación 8.6

- Esta variable debe estar declarado dentro de la función o como variable

global.

- En el valor de retorno también se le puede alterar su devolución

return (N)

return (N + 2)

return (N * 2)

LLAMADA A LA FUNCIÓN

Una llamada se realiza para que la función tenga efecto.

Sintaxis:

[Variable =] Nombre_de_la_función (parámetros o argumentos)

Ejemplo 8.17

Suma ( )

cout << suma ( )

Su = suma ( )

Lic. Elmer Alberto León Zárate

246

8.9 LIBRERÍA DE FUNCIONES CREADAS POR EL USUARIO

Definición 8.15 Son un programa fichero que tiene las funciones que serán

compiladas en forma separada y pueda ser utilizado en cualquier programa de C++.

Pasos:

a) Se crean solo funciones dentro de un programa, indicando en la parte

superior los prototipos de las funciones y los ficheros.

b) Luego, una vez terminado la función grabarlo con un nombre y extensión

(.hpp) (por ejemplo: Sumatoria. hpp o Factorial. hpp)

c) Se pueden colocar varias funciones dentro de este programa( .hpp)

d) No ejecutar un programa hpp, mas bien cerrarlo.

e) Dentro de un programa cpp, llamar a la función que se encuentra dentro

del programa hpp.

Sintaxis:

En la Cabecera del programa CPP:

# include “NombredelFichero.hpp”

8.10 ARREGLOS

Definición 8.16 Los arreglos son estructuras de datos, que permiten el

almacenamiento masivo de información.

CAPITULO VIII: Lenguaje de programación 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 demás

Se puede acceder a cada elemento indicando el número de índice.

Se pueden manipular con operaciones de cualquier tipo

Los Arreglos se presentan en dos formas:

8.10.1 VECTORES O ARREGLOS UNIDIMENSIONALES

Definición 8.17 Son listas de datos que pueden almacenar un número determinado

de datos.

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 León Zárate

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 [TAMAÑO_APROX];

Observación 8.7

Si el tipo de datos del arreglo es de caracteres su declaración será:

char nombre_del_arreglo [tamaño_aprox] [cantidad_de_espacios];

Ejemplo 8.19

Declarar el ingreso de 5 notas enteras: int notas [ 5 ] ;

CAPITULO VIII: Lenguaje de programación C++

249

Ejemplo 8.20

Declarar el ingreso de 5 nombres de personas : char nombres [5] [20];

8.10.2 MATRICES O ARREGLOS BIDIMENSIONALES

Definición 8.18 Son Arreglos que tienen 2 dimensiones.

1 2 3 4

1 10 8 13 11

2 10 8 13 11

3 10 8 13 11

4 10 8 13 11

Una Matriz está compuesta:

Nombre del Arreglo

Índice filas : 0, 1, 2, 3,... n (utilizar estructuras repetitivas)

Índice Columnas : 0, 1, 2, 3,... n (utilizar estructuras repetitivas)

Datos : Son los datos ingresados al arreglo de un mismo

tipo.

Lic. Elmer Alberto León Zárate

250

Ejemplo 8.21

Nombre del Arreglo: NÚMERO

1 2 3 4

1 A E I M

2 B F J N

3 C G K O

4 D H L P

Para acceder a cada elemento solo se escribirá el nombre de la variable

arreglo y los índices.

Para acceder a la Letra A (NÚMERO [ 1 ][ 1 ])

Para acceder a la Letra L (NÚMERO [ 4 ][ 3 ])

Sintaxis:

TIPO_DATOS NOM_ARREGLO [TAMAÑO_FILAS] [TAMAÑO_COLUMNAS];

Observación 8.8

Al hacer referencia de cada elemento de un arreglo Bidimensional se coloca

el nombre del arreglo luego la fila y la columna.

Ejemplo 8.22

Ingresar un arreglo Bidimensional de 3 x 3 y determinar la suma de todos sus

Elementos.

CAPITULO VIII: Lenguaje de programación C++

251

for( I = 1 ; I < = 3 ; I + + )

for( j = 1 ;j < = 3 ; j + + )

cin>> números [I] [j];

for( I = 1 ; I < = 3 ; I + + )

for( j = 1 ;j < = 3 ; j + + )

suma=suma+números[ I ] [ j ] ;

cout<<”la suma es “<< suma;

8.10.3 RELACION DE EJERCICIOS RESUELTOS

1. En una Función recursiva determinar si un número es primo o no, y termine con el

ingreso de un número negativo.

#include<conio.h>

#include<stdio.h>

void main()

{

int n,i,p=0;

clrscr();

printf ("ingrese un numero entero :");

scanf ("%d",&n);

i=1;

while(i<=n)

{

if (n%i==0)

Lic. Elmer Alberto León Zárate

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 Mínimo Común múltiplo de 2 números ingresados, utilizando Función

recursiva.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

int mcd(int w,int z);

int mcm(int x,int y,int k);

void main()

{clrscr();int a,b,x;

cout<<"INGRESE DOS NÚMEROS: "; cin>>a>>b;

x=mcd(a,b);

mcm(a,b,x);

getch();

return 0;

}

CAPITULO VIII: Lenguaje de programación 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 Máximo Común Divisor de 2 números ingresados, utilizando

Recursividad.

#include<conio.h>

#include<bcd.h>

#include<stdio.h>

int n1,n2,m2,m1,mayor,menor,r;

void main()

{

clrscr();

Lic. Elmer Alberto León Zárate

254

cout<<"Ingrese 2 números para sacar el máximo común divisor:";

cin>>n1, n2;

if(n1>n2)

{ mayor=n1;

menor=n2;

}

else

{ mayor=n2;

menor=n1;

}

while(mayor%menor!=0)

{ r=mayor%menor;

mayor=menor;

menor=r;

}

cout<<menor;

getch();

}

4. Función recursiva para listar los 100 primeros números primos.

#include<conio.h>

#include<stdio.h>

#include<bcd.h>

int divisor();

int primos();

CAPITULO VIII: Lenguaje de programación C++

255

int i=2,c=0,n=1,s=0;

void main()

{ clrscr();

cout<<"los 100 números primos son:\n";

cout<<"1"<<"\t"<<"2"<<"\t"<<"3"<<"\t"<<"5"<<"\t" <<"7";

primos(); getch();

}

int primos()

{ if(i>450)

return 0;

else

{

if((i%2!=0)&&(i%3!=0)&&(i%5!=0)&&(i%7!=0))

cout<<i<<"\t";

i+=1;

}

primos();

}

5. Función recursiva para listar los 30 primeros números primos.

#include<bcd.h>

#include<stdio.h>

#include<conio.h>

int primos();

int i=2;

Lic. Elmer Alberto León Zárate

256

void main()

{ clrscr();

cout<<"los 30 primeros números primos son:\t";

cout<<1<<"\t"<<2<<"\t"<<3<<"\t"<<5<<"\t"<<7;

primos();

getch();

}

int primos()

{ if (i>110)

return 0;

else if((i%2!=0)&&(i%3!=0)&&(i%7!=0)&&(i%5!=0))

cout<<"\t"<<i;

i+=1;

primos();

}

6.-Construir una función que reciba un numero entero de 4 cifras y determine el

digito mayor así como el digito menor contenido en dicho numero.

Ejemplo: 1520

Digito mayor: 5

Digito menor 0

#include<conio.h>

#include<stdio.h>

#include<bcd.h>

compara1(int a);

CAPITULO VIII: Lenguaje de programación 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 León Zárate

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++

Definición 8.19 Una estructura se puede definir como una colección de Datos de diferentes

tipos de datos, lógicamente relacionados.

Definición 8.20 Una estructura se utiliza cuando de un objeto se va a nombrar varias

características ó atributos.

CREACIÓN DE UNA ESTRUCTURA

Crear una estructura es definir un nuevo tipo de datos, denominado TIPO

ESTRUCTURA

CAPITULO VIII: Lenguaje de programación 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 León Zárate

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; // También puede ser DATOS ALUMNO;

// PARA EL ALMACENAMIENTO DE DATOS EN ESTA ESTRUCTURA

cin >> alumno.nombre; // gets (ALUMNO. NOMBRE)

cin >> alumno.edad;

// PARA LA SALIDA DE DATOS EN ESTRUCTURA:

cout << alumno.nombre;

// SE PUEDEN REALIZAR OPERACIONES CON LOS DATOS DE ESTRUCTURA

if (alumno.sueldo == 500)

if (alumno.edad > 18)

cout << alumno.edad + 1;

CAPITULO VIII: Lenguaje de programación 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 León Zárate

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 Hernández 10 20

. ................ ............ ............. ...........

El acceso a cada elemento del Arreglo

Variable_Tipo_Estructura [índice]. Campo

Ejemplo 8.25

Declarar el ingreso de 50 alumnos con los siguientes campos: PATERNO, MATERNO,

NOMBRE, CARRERA PROFESIONAL, CICLO, TURNO y simular el llenado.

// Declaración

struct item

{

char paterno [20], materno [20], nombres [20], carrera [30], turno [10];

int ciclo;

} alumno [50];

// Llenado de datos

CAPITULO VIII: Lenguaje de programación 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) ;

}

Observación 8.9

Si existen campos que tienen que subdividirse dentro de la declaración de una

estructura se tiene que declarar una nueva estructura dentro de la estructura y se seguirán

llamando por medio de puntos.

Ejemplo 8.26

Fecha de Nacimiento Día, mes, año

Apellidos Paterno, Materno, Nombres

Edad y promedio

struct datos

{ struct a

{

char nombre[20],paterno[20],materno[20];

} apellidos;

struct f

{

int dia,mes,año;

Lic. Elmer Alberto León Zárate

264

} fecha;

int edad;

float promedio;

} alumno[20];

8.12 ARCHIVOS EN C++

Definición 8.21 Los Archivos o Ficheros es una colección de información que almacena y

recupera información para poder manipularla en cualquier momento, a esto se le llama

Funciones de Entrada/Salida (Input / Output)

Antes de conectar un archivo con el programa y realizar operaciones de Entrada y

Salida activar la librería < fstream.h > el cual define las siguientes clases:

CLASE IFSTREAM

Permite el manejo de archivos cuyo acceso sea solamente de Entrada (Lectura)

( I NPUT F ILE STREAM ).

Esta clase dispone de los siguientes métodos o funciones más utilizados:

- open ( NOMBRE ) Abre el Archivo

- close( ) Cierra el Archivo

- get ( CARACTER ) Obtiene el carácter o byte

- eof( ) Determina si se alcanzo el final del archivo

CLASE OFSTREAM

Permite el manejo de archivos solamente de grabación o salida Escritura

(O UTPUT F ILE STREAM ).

Esta clase dispone de los siguientes métodos o funciones más utilizados:

CAPITULO VIII: Lenguaje de programación 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 Añadir al Final del Registro

ios : : binary Permite abrir archivos binarios

Para la combinación de ambos ios : : in |ios : : out

- close( )

- eof ( )

8.12.1 OPERACIONES DE ARCHIVOS DE TEXTO

Las operaciones requeridas para manipular un archivo son:

Abrir un archivo

Leer y Escribir datos en un archivo

Lic. Elmer Alberto León Zárate

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 métodos diferentes:

Definir la librería fstream.h

Llamara a la función open ( ), para la apertura del archivo.

Sintaxis:

fstream NOMBRE_ARCHIVO;

NOMBRE_ARCHIVO.open (“Nombre.dat”, ios : : in);

fstream NOMBRE_ARCHIVO ( “NOMBRE.DAT” , ios : : in );

Ejemplo 8.27

// DECLARACION

fstream ARCHIVO1;

ARCHIVO1.open (“DATOS.DAT”, ios:: in);

// DECLARACION

fstream ARCHIVO1 (“DATOS.DAT”, ios:: in);

CAPITULO VIII: Lenguaje de programación 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

CARACTERÍSTICAS

Ocupa menos espacio que los archivos de textos.

No contienen caracteres de espacio en blanco.

Los datos no están organizados en líneas más bien en forma de Registros de una Base

de Datos.

El formato Binario es más preciso para números.

CLASE FSTREAM

La entrada es de Lectura y Escritura normalmente para binarios.

8.12.3 OPERACIONES DE ARCHIVOS BINARIOS

A) ABRIR EL ARCHIVO

Lic. Elmer Alberto León Zárate

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, TAMAÑO_ESTRUCTURA_BYTE);

D) LECTURA DE CARACTERES DE FLUJO

ARCHIVO1.get ((char), CONTADOR_BYTES ++ ) ;

ARCHIVO1.read((char*)&Estructura, TAMAÑO_ESTRUCTURA_BYTES);

// AQUÍ SE IMPRIMEN LOS DATOS

// AQUÍ SE COMPARAN DATOS PARA SU BUSQUEDA, SOLO NUMEROS

Observación 8.10

El Tamaño de la Estructura en Bytes para la lectura no es conocido utilizar el comando:

sizeof(Estructura);

Ejemplo 8.29

sizeof(persona);

sizeof(empleado);

CAPITULO VIII: Lenguaje de programación C++

269

8.12.4 RELACION DE EJERCICIOS RESUELTOS

1.- Programa para la creación de un archivo de texto

#include<conio.h>

#include<stdio.h>

#include<bcd.h>

#include<fstream.h>

void main()

{

clrscr();

char nombres[20],paterno[20],materno[20];

fstream x;

x.open("demo.txt",ios::out);

cout<<"ingrese su nombre completo : ";gets(nombres);

cout<<"ingrese su apellido paterno:”;gets(paterno);

cout<<"ingrese su apellido materno: ";gets(materno);

x << nombres <<"\n";

x << paterno <<"\n";

x << materno <<"\n";

x.close();

}

2.- Programa para la lectura de un archivo de texto. Solo permite que se lean los datos mas no

manipularlo.

#include<conio.h>

Lic. Elmer Alberto León Zárate

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 programación 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 creación de un archivo de texto

#include<conio.h>

#include<stdio.h>

#include<dos.h>

#include<fstream.h>

void main()

{

clrscr();

ofstream archsal("copia.dat",ios::out);

if (!archsal) { cerr<<"Nose puede abrir el archivo";

exit(-1); }

char car;

while(cin.get(car))

archsal.put(car);

clrscr();

}

Lic. Elmer Alberto León Zárate

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 más datos a un archivo de texto ya creado

#include<conio.h>

#include<stdio.h>

#include<bcd.h>

#include<fstream.h>

void main()

{

clrscr();

CAPITULO VIII: Lenguaje de programación 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 creación de un archivo de texto

#include<stdlib.h>

#include<fstream.h>

#include<stdio.h>

Lic. Elmer Alberto León Zárate

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 programación 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 creación de un archivo de texto

#include<conio.h>

#include<fstream.h>

#include<bcd.h>

void main()

{ fstream archivo("copia.dat",ios::out);

char car;

while(cin.get(car))

archivo.put(car);}

10.- Escribe datos dentro de un archivo binario utilizando las funciones put y write para 5

registros empleado.

#include<conio.h>

#include<stdio.h>

Lic. Elmer Alberto León Zárate

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 programación 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 León Zárate

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++

Definición 8.22 Una cadena de caracteres es un Arreglo Unidimensional, en el cual todos

los elementos contenidos en el son de tipo carácter.

8.13.1 LEER UNA CADENA DE CARACTERES

FUNCIÓN cin>>

FUNCIÓN gets: Lee caracteres y lo almacena en una variable especificada, a diferencia de la

función cin, la función gets permite la entrada de una cadena de caracteres formada por

palabras separadas por espacios en blanco sin ningún tipo de formato.

El cin actúa como separador de variable al dejar espacio solo para caracteres.

Sintaxis:

gets (CADENA);

CAPITULO VIII: Lenguaje de programación C++

279

8.13.2 ESCRBIR UNA CADENA DE CARACTERES

FUNCION cout<<

FUNCION puts: Escribe una cadena de caracteres en la salida estándar y reemplazar

el carácter nulo de terminación de la Cadena (\0) por el carácter nueva línea (\n).

Sintaxis:

puts (CADENA);

8.13.3 ARREGLO DE CADENA DE CARACTERES

En un arreglo de cadenas de caracteres cada elemento es un arreglo de caracteres. Es

un arreglo de 2 dimensiones de tipo char.

Sintaxis:

char CADENA [N° ELEMENTOS] [LONGITUD DE LA CADENA];

8.13.4 FUNCIONES DE CADENAS DE CARACTERES

Para utilizar las Funciones de tipo Cadena se tiene que activar la librería INCLUDE

<STRING.H>

A) STRCAT._ Agrega toda la cadena2 en la cadena1 y el resultado es devuelto en la cadena1

Sintaxis:

strcat(CADENA1, CADENA2);

Ejemplo 8.30

1ERA FORMA: char NOMBRE1 (30), NOMBRE2 ( 30);

gets (NOMBRE1) ; gets ( NOMBRE2);

cout<<”La unión de las cadenas es:“<< strcat(NOMBRE1, NOMBRE2);

Lic. Elmer Alberto León Zárate

280

2DA FORMA: char NOMBRE1 (30) , NOMBRE2 (30);

gets ( NOMBRE1); gets ( NOMBRE2);

strcat ( NOMBRE1, NOMBRE2);

cout<<” La unión de las cadenas es: << NOMBRE1;

B) STRCPY.- Esta función copia cadena2 en la cadena 1 y el resultado lo devuelve en la

cadena 1.

Sintaxis:

STRCPY (CADENA 1, CADENA2);

Ejemplo 8.31

1ERA FORMA: char NOMBRE 1 (30), NOMBRE2 (30);

gets (NOMBRE1); gets (NOMBRE2);

cout <<”La Nueva cadena es :“<< strcpy (NOMBRE 1, NOMBRE2):

2DA FORMA: char NOMBRE1 (30), NOMBRE (2);

gets (NOMBRE1); gets (NOMBRE2);

srtcpy (NOMBRE1, NOMBRE2);

cout<<” LA NUEVA CADENA ES; “<< NOMBRE1;

C) STRLEN .- Esta función devuelve la longitud de la cadena

Sintaxis:

strlen (CADENA 1);

Ejemplo 8.32

char NOMBRE1 (30),

gets (NOMBRE1);

CAPITULO VIII: Lenguaje de programación C++

281

cout <<”La Longitud de la cadena es :“<< strlen(NOMBRE 1)

D) STRLWR.- Convierte la Cadena de mayúsculas a minúsculas

Sintaxis:

strlwr (CADENA 1);

Ejemplo 8.33

1ERA FORMA: char NOMBRE1 (30),

gets (NOMBRE1);

cout <<”En minúsculas es:” << strlwr (NOMBRE 1)

E) STRUPR.- Convierte la cadena de minúsculas a mayúsculas

Sintaxis:

strupr (CADENA 1);

Ejemplo 8.34

1ERA FORMA: char NOMBRE1(30),

gets (NOMBRE1);

cout <<”En mayúsculas es :“<< strupr (NOMBRE1):

F) ATOF.- Convierte una cadena caracteres a un valor de doble precisión

Sintaxis: atof (CADENA);

G) ATOL.- Convierte una cadena de caracteres aun valor entero o a un valor entero largo.

Sintaxis: atol (CADENA);

H) ITOA.- Convierte un numero entero en uno cadena de caracteres

Sintaxis: itoa (VALOR, CADENA, BASE);

Donde:

Lic. Elmer Alberto León Zárate

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 número

Ejemplo 8.35

Realizar un programa que ingrese un numero entero y determine su base binaria

utilizar la función itoa.

# include <conio.h> # include < bcd.h> # include< stdio.h>

# include <string.h> # include < stdlib.h>

void main()

{

clrscr();

char a (15);

int n;

puts(“ingrese un número a cambiar de base:”);

cin>> n;

itoa (n, a, 16);

cout<<” en base 2 es: “<<a<<”/n”;

getch() ;

}

8.14 GRAFICOS EN C++

Para crear gráficos en C++, necesita el fichero # include < graphics.h > y los pasos son

los siguientes:

Activar la librería graphics.h

CAPITULO VIII: Lenguaje de programación C++

283

Colocar los controladores y Detecciones de gráficos en C++

Colocar los comandos para la creación de gráficos

Cerrar los gráficos con closegraph( )

Tener en cuenta las coordenadas

Lic. Elmer Alberto León Zárate

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 programación 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 creación de gráficos */

getch( );

closegraph( );}

Lic. Elmer Alberto León Zárate

286

8.14.4 FUNCIONES GRAFICAS

1. PUTPIXEL : Crea un pixel en la posición X Y.

putpixel( x , y , color);

2. LINE : Crea una línea

line( x1, y1, x2, y2);

3. ARC : Dibuja un arco

arc(x , y , anguloinicio , angulofinal , radio);

4. BAR : Traza una barra

bar( x1, y1, x2, y2 );

5. BAR3D : Traza una barra en 3 dimensiones

bar3d(x1,y1,x2,y2,tamaño _de_proyección,1);

1 topon 0 topoff

6. RECTANGLE : Crea un rectángulo

rectangle(x1,y1,x2,y2)

7. LINETO : Crea una línea desde la posición actual

lineto( x ,y );

8. CLEARDEVICE : Limpia Pantalla

cleardevice( );

9. SETCOLOR : Cambia el color de los trazos

setcolor(color);

10. SETBKCOLOR : Cambia el color del fondo

setbkcolor(color);

11. PIESLICE : Traza un sector circular

CAPITULO VIII: Lenguaje de programación 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 pequeña

3 sanserif

4 gótica

Tamaño

Puede variar de 1 a 10 (Incrementando el tamaño)

Valores de dirección

0 forma horizontal

1 forma vertical

1. SETTEXTSTYLE : Se configura el tamaño tipo de letra y su forma

settextstyle(tipodeletra, dirección, tamaño);

2. OUTTEXTXY : Escribe un texto en la coordenada dada.

outtextxy (x,y, “texto”);

Lic. Elmer Alberto León Zárate

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 cuántos pares o impares se han ingresado

en el arreglo utilizar funciones.

3. Programa que ingrese 15 números enteros a un arreglo unidimensional y decida si dos

de estos enteros, cualquiera que ellas sean sumen 15. Utilizando funciones.

4. Programa que ingrese 10 números a un arreglo unidimensional, y diga cuál es el

número que se repite más de los ingresados.

5. Programa que ingrese 5 nombres de personas con su respectivo tipo de sexo y edad, a

un arreglo para cada uno y determinar cuántos son: Mayores de Edad, menores de

edad, cantidad de Hombres, cantidad de mujeres, hombres mayores de edad, mujeres

mayores de Edad.

6. Realizar el siguiente menú:

Ingreso de Datos (Nombres-Paterno-Materno-Edad-Sexo)

Listado de los Datos ingresados

Listado de Nombres y Edad

Listado de Paterno, Materno y Nombres

Listado de Paterno, Nombres y Edad

Salir

Utilizar Arreglos para ingreso de Datos, funciones, Switch

7. Programa que ingrese 10 Nombres con sus respectivas 3 Notas por alumno y

determinar su promedio, mostrar quien es el alumno con mayor promedio (utilizar

arreglos unidimensionales y Funciones).

CAPITULO VIII: Lenguaje de programación 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 través de un menú de

opciones :

Ingreso de datos de la matriz

La suma de primera fila

La suma de última fila

La suma de la fila central

La multiplicación de la primera columna

La multiplicación de la última columna

La suma de la diagonal principal

La multiplicación de la diagonal secundaria

Salir

11. Ingresar una matriz de FxC y determinar la suma de los valores de la frontera

12. Ingresar una matriz de FxC y determinar la Suma de la Primera y Última Fila

13. Ingresar una matriz de FxC y determinar el producto de la primera y la última

columna.

14. Realizar un programa que ingrese el orden de la matriz (Filas y Columnas) para 2

matrices A y B y Determine la Suma de matrices.

15. Realizar un programa que ingrese el orden de la matriz (Filas y Columnas) para 2

matrices A y B y Determine la Resta de matrices.

16. Realizar un programa que ingrese el orden de la matriz para 2 matrices A (Fila1,

Columna1) y B (Columna2, Fila2) y Determine la Multiplicación de matrices.

Lic. Elmer Alberto León Zárate

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 números enteros y realizar la determinante

19. Cubo Mágico 1, Programa que ingrese un número 5 a una variable N y con los

números del 1 al 9, colocarlos en cada casillero para que la suma horizontal, vertical

y sus diagonales siempre sumen 15. Definir un Arreglo de 3 x 3, para mostrar los

resultados, la variable N debe ser colocada en el centro del Arreglo Bidimensional.

20. Cubo Mágico 2, Programa que ingrese un número 4 a una variable N y con los

números del 0 al 8, colocarlos en cada casillero para que la suma horizontal, vertical y

sus diagonales siempre sumen 12. Definir un Arreglo de 3 x 3, para mostrar los

resultados, la variable N debe ser colocada en el centro del Arreglo Bidimensional.

21. Distribuir 1, Definir un Arreglo Bidimensional de 4 x 4, y distribuya los números del 1

al 12 en las casillas de tal modo que la suma de cada lado sea 22.

22. Distribuir 2, Definir un arreglo Bidimensional de 4 x 4, y distribuya los números del 1

al 12 en las casillas de modo que la suma de cada lado sea 26

23. Permitir el ingreso de N datos a una estructura de arreglos con los siguientes campos:

PATERNO, MATERNO, NOMBRES, EDAD, SEXO, PROMEDIO DE NOTAS.

Generar el siguiente menú :

Reporte Total de Datos

Reporte Total de Hombres

CAPITULO VIII: Lenguaje de programación 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 opción es:

24. Se pide emitir la planilla de pago del personal de una empresa considerando los

siguientes datos por empleado. Código, Apellidos (nombres, paterno, materno),

Sueldo (Básico, Horas extras, Bruto).

PLANILLA DE SUELDOS

CODIGO NOMBRES PATERNO MATERNO BASICOHORAS

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 préstamos de sus libros, los

cuales tienen los siguientes datos: CODIGO, TITULO, AUTOR, AÑO DE EDICION,

FECHA DE DEVOLUCION. Realizar el siguiente menú :

Reporte Total de Libros

Mostrar los libros ordenados en forma Ascendente por año

Lic. Elmer Alberto León Zárate

292

Consulta

Salir

Su opción es:

Formato de Consulta:

Código del Libro : Aquí se ingresara un código

Titulo : xxxx xxx

Autor : xxxxx xxxx

Fecha de devolución: xxxxxx xxx

26. Realizar una Estructura de Datos para que muestre la TABLA de posiciones de 8

equipos de Fútbol de Primera división a un arreglo, Ingresar el Nombre del Equipo

Cantidad de partidos jugados, cantidad de partidos ganados (3 puntos), cantidad de

partidos empatados (1 punto) y cantidad de partidos perdidos( 0 punto), Determinar en

un menú lo siguiente :

Campeón del Torneo

Equipos que Irán a la copa Libertadores (3 primeros)

Equipos que bajan a segunda división (2 últimos)

Mostrar la Tabla de Posiciones de todos los equipos

27. Ingresar a una estructura de Datos los siguientes campos para un alumno, Apellidos,

Sexo, Nota 1, Nota 2, Nota 3, para un total de N alumnos de un aula. Determinar por

medio de un menú las siguientes opciones, utilizar funciones :

Listado de los alumnos y su promedio

Cantidad de alumnos aprobados y Desaprobados en porcentaje.

Cantidad de Hombres y mujeres aprobadas

Alumno con mayor promedio

CAPITULO VIII: Lenguaje de programación 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 más datos o información a los registros

creados en el ejercicio Nº 31.

34. Crear el Siguiente menú de opciones, Todos con uso de Funciones

MENÚ DE OPCIONES

1. Ingreso de datos al fichero

2. Listado de los datos del fichero

3. Agregar datos al fichero

Lic. Elmer Alberto León Zárate

294

4. Salir

Su opción es:

NOTA: Para un total de N personas que se ingresara en la opción 2 del menú, Utilizar

Funciones, Arreglos y Estructuras para los siguientes campos del alumno: Nº

MATRICULA, PATERNO, MATERNO, NOMBRES, CARRERA, CICLO,

TURNO, SECCION.

35. Crear un archivo de texto que almacene todos los datos de una factura en un archivo

llamado factura.txt con el siguiente formato

Factura Nº 00001

CODIGO DESCRIPCION CANTIDAD PRECIO TOTAL

A001 MENÚ 1 3 4.00 12.00

.... .... .... ..... .....

36. Crear un archivo Binario que ingrese 10 registros con los siguientes campos ORDEN,

NOMBRE, PATERNO, EDAD, SUELDO de una Estructura de datos.

37. Crear un programa que lea los datos creados en el archivo binario del ejercicio Nº 36.

38. Crear un programa que ingrese un número de Orden y muestre a que registro le

pertenece. Utilizar el archivo del ejercicio Nº 36.

39. Realizar los 3 programas anteriores en un menú, utilizando funciones, estructura,

Binarios.

CAPITULO VIII: Lenguaje de programación 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

Búsqueda por el código del alumno

Salir

Su opción es:

41. Crear un archivo Binario que almacene todos los datos de una factura en un archivo

llamado factura.dat con el siguiente formato:

Factura Nº 00001

CODIGO DESCRIPCIÓN CANTIDAD PRECIO TOTAL

A001 Producto 3 4.00 12.00

.... .... .... ..... .....

Dentro del archivo solo guardara el numero de Factura y luego cuando se

quiera ver el contenido de la Factura solo se digitara el numero de factura.

Lic. Elmer Alberto León Zárate

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 mayúsculas

Convertirlas en minúsculas.

Todas las vocales se conviertan en.

Texto invertido.

Salir.

44. Permitir el ingreso de una clave para realizar un programa a cualquiera y que solo

permite el ingreso de 3 veces la clave luego emitir el mensaje ERROR DE CLAVE y

terminar el programa.

45. Determinar si una cadena de caracteres es un palíndromo ( es un texto que se lee igual

hacia la derecha o hacia la izquierda) Ejemplo: Radar, somos

46. Realizar un programa que ingrese un número entero de no más de 4 cifras y mostrar el

equivalente en palabras. Ejemplo : 2000 dos mil 2001 dos mil uno

297

DISCUSIÓN

Considerando que el presente trabajo no tiene resultados experimentales,

obtenidos en gabinete o laboratorio no es posible realizar una discusión en ese

sentido. Sin embargo podemos realizar una discusión respecto de otros trabajos.

La elaboración del texto esta destinada al dictado de la asignatura

Programación de computadoras, estructurado en xxxxx capítulos donde se exponen

los principales conceptos de la informática y sus aplicaciones.

El texto “PROGRAMACION DE COMPUTADORAS Y SUS APLICACIONES”

a diferencia de otros, ha sido redactado en un lenguaje simple e incluso por cada

capítulo se presenta una relación de ejemplos desarrollados para una mejor

comprensión. La mayoría de los textos responsables de los temas tratados se

encuentran escritos en diferentes idiomas, lo que dificulta su entendimiento por

parte del estudiantado. Por lo que estos textos no pueden ser usados en el dictado

de la asignatura.

Por lo expuesto podemos concluir que el presente texto facilitara el proceso

de enseñanza y aprendizaje en esta materia y será de gran utilidad a los profesores

y alumnos universitarios interesados en las aplicaciones de la informática a las

ciencias e ingenierías.

298

REFERENCIAS BIBLIOGRAFICAS

1.- JOYANES AGUILAR, LUIS; Fundamentos de programación,

FERNANDEZ AZUELA, MATILDE; Madrid: McGraw-Hill, 2a edición, 1998.

RODRIGUEZ BAENA, LUIS

2.- DEL AGUILA S,W. Algoritmos y diagramas de flujo, Lima:

Gómez, 1a edición, 1992.

3.-JOYANES AGUILAR, LUIS. C++ a su alcance,

Madrid: McGraw-Hill, 1a edición, 1994.

4.-CEVALLOS SIERRA, FRANCISCO. Curso de programación C++,

Madrid: RA-MA, 1a edición, 1997.

5.- DELORES M, ETTER Solución de problemas de ingeniería con

MATLAB, México: Prentice-Hall, 2a edición,

1998.

6.- NAKAMURA, CHOICHIRO Análisis Numérico y Visualización Grafica

con Matlab, México: Prentice–Hall, 1a

edición, 2000.

7.- STROUSTRUP, BJARNE. El Lenguaje de programación C++,

Madrid: Addison-Wesley, 3a edición, 2002.

8. - STROUSTRUP, BJARNE. The C++ Programming Language,

Madrid: Addison-Wesley, 3a edición, 2000.

9.- STROUSTRUP, BJARNE. The Design and Evolution of C++,

ÇMadrid: Addison-Wesley, 1a edición, 1994.

299

10.- COPLIEN, JAMES. Advanced C++:Programming Styles and Idioms,

Madrid: Addison-Wesley, 3a edición, 1992.

11.- MUSSER, D.R. Effective C++,

Madrid: Addison – Wesley, 2a edición, 1997.

12.- FORD, W – TOPP, W. Data structures with C++,

México: Prentice – Hall, 2a edición, 2002.

300

APENDICE

DIAGRAMA DE LAS ESTRUCTURAS DE DATOS