MaterialEstudio_Algoritmia y Estructura de Datos.pdf

96
ALGORITMIA Y ESTRUCTURA DE DATOS

Transcript of MaterialEstudio_Algoritmia y Estructura de Datos.pdf

  • ALGORITMIA Y

    ESTRUCTURA DE DATOS

  • Pg. 2

    Asignatura: Algoritmia y Estructura de Datos

    Universidad Continental de Ciencias e Ingeniera

    Material publicado con fines de estudio

    Primera edicin

    Huancayo, 2013

  • Pg. 3

    Asignatura: Algoritmia y Estructura de Datos

    PRESENTACIN

    Algoritmia y Estructura de Datos es una asignatura que tiene como finalidad proporcionar al

    estudiante, los conocimientos necesarios en las tcnicas y estructuras de datos para la

    programacin basada en el enfoque estructurado, requeridos en su formacin bsica para poder

    desarrollar programas en otros niveles ms avanzados. La competencia a desarrollar es: Construye

    algoritmos en un lenguaje de programacin, utilizando las sentencias bsicas de

    programacin, diferenciando su uso para la propuesta de solucin de un problema, y con ello

    construye programas computacionales utilizando mdulos de programa (funciones y

    procedimientos), valorando la reutilizacin de los mdulo, y utilizando las diferentes

    estructuras de datos: estticas y dinmicas para almacenar datos temporalmente,

    diferenciando el uso de las estructuras con respecto al uso de los archivos como

    almacenamiento de datos permanente, promoviendo el inters por otras tcnicas de

    almacenamiento.

    El presente material consta de cuatro unidades: Unidad I: Algoritmos y Programacin

    Estructurada presenta conceptos, representaciones y programacin del algoritmo, con sus tcnicas:

    Sentencias Bsicas de Programacin: Secuenciales, Selectivas y Repetitivas. Unidad II:

    Modularizacin en la Programacin Estructurada, es decir, se puede dividir a un programa complejo,

    en segmentos de programa mas simples (Modularizacin), y poder ser reutilizados en otros

    programas, a travs del uso de funciones y procedimientos, y en algunos casos usando el concepto

    de recursividad. Unidad III: Estructuras de Datos, donde se expone las formas de almacenamiento

    temporal de datos a travs estructuras tanto del tipo estticas (arreglos, registros, clases) como

    dinmicas (listas, pilas, colas, rboles, grafos). Unidad IV: Ficheros (Archivos), en esta ultima

    unidad, se expone una forma de almacenamiento de datos mas ventajosa que las estructuras de

    datos explicadas previamente, para poder manipular y operar dichos datos, desarrollados a partir del

    texto Fundamentos de Programacin (Joyanes Aguilar Luis, 2008).

    Es recomendable que el estudiante desarrolle una permanente lectura de estudio junto a la

    elaboracin de programas en un lenguaje de programacin, as como la investigacin en otros

    textos y va internet. El contenido del material se complementar con las lecciones presenciales y a

    distancia que se desarrollan en la asignatura.

    Agradecemos a quienes con sus aportes y sugerencias han contribuido a mejorar la presente

    edicin, que slo tiene el valor de una introduccin al conocimiento de las estructuras de datos para

    la programacin en un computador.

    Los autores

  • Pg. 4

    Asignatura: Algoritmia y Estructura de Datos

    NDICE

    Pg.

    PRESENTACIN 3 NDICE 4 PRIMERA UNIDAD Tema N 1: Algoritmo 6 1.1 Definicin del Algoritmo 6 1.2 Caractersticas de un algoritmo 7 1.3 Instrucciones Algortmicas Bsicas 7 1.4 Representacin del Algoritmo 8 Tema N 2: Programacin Estructurada 9 2.1 Programa 9 2.2 Lenguaje de Programacin 9 2.3 Programas Traductores 10 2.4 Definicin Programacin Estructurada 10 2.5 Resolucin de un Problema 11 Tema N 3: Sentencias Bsicas de Programacin 12 3.1 Estructura Bsica Simple o Secuencial 12 3.2 Estructura Bsica Selectiva 14 3.3 Estructura Bsica Repetitiva 22 SEGUNDA UNIDAD Tema N 4: Modularizacin de Programas 30 4.1 Paso de Parmetros 30 4.2 Procedimientos 31 4.3 Funciones 31 Tema N 5: Libreras de Programacin creadas por el usuario 36 Tema N 6: Funciones Recursivas 38 TERCERA UNIDAD Tema N 7: Estructuras de Datos 40 7.1 Definicin de Estructura de Datos 40 7.2 Clasificacin de Estructura de Datos 40 Tema N 8: Arreglos Unidimensionales 41 8.1 Actualizacin de Arreglos Unidimensionales 42 8.2 Bsqueda de Arreglos Unidimensionales 45 8.3 Ordenacin de Arreglos Unidimensionales 47 Tema N 9: Arreglos Bidimensionales 51 9.1 Actualizacin de Arreglos Bidimensionales 54 9.2 Aplicacin de Arreglos Bidimensionales 56 Tema N 10: Registro (Estructura) 60 Tema N 11: Union 64 Tema N 12: Tipos de Datos Abstractos (TDA) 64 Tema N 13: Clases y Programacin Orientada a Objetos 65 Tema N 14: Punteros a Direccin de Memoria 67

  • Pg. 5

    Asignatura: Algoritmia y Estructura de Datos

    14.1 Declaracin de variables tipo puntero 67 Tema N 15: Estructuras de Datos Estticas 71 15.1 Lista Enlazada Simple 71 15.2 Lista Enlazadas Circular 76 15.3 Lista Enlazada Doble 76 15.4: Colas 77 15.5 Pilas 80 Tema N 16: Estructuras de Datos Dinmicas 82 16.1 rbol General 82 16.2 rbol Binario 87 16.3 rboles Binarios de Bsqueda( ABB ) 88 16.4 Grafos 92 CUARTA UNIDAD Tema N 17: Archivos (Ficheros) 93 BIBLIOGRAFA Y DIRECCIONES ELECTRNICAS 96

  • Pg. 6

    Asignatura: Algoritmia y Estructura de Datos

    PRIMERA UNIDAD

    Tema N 1: Algoritmo

    1.1 Definicin de Algoritmo

    La palabra algoritmo se dio en honor del matemtico persa del siglo IX, Khowrizm.

    Un algoritmo es un conjunto ordenado y finito de instrucciones que conducen a la solucin de un problema.

    Por ejemplo:

    - Al instalar un equipo de sonido ejecutamos las instrucciones (algoritmo) contenidas en el manual del equipo.

    - Algoritmo matemtico de Euclides para la obtencin del mximo comn divisor de dos nmeros.

    Si un algoritmo puede ser ejecutado por una computadora, se dice que es un algoritmo computacional; en caso contrario, se dice que es un algoritmo no computacional.

    Para que un algoritmo sea computacional se debe expresar en instrucciones a travs de un lenguaje de programacin, teniendo como resultado un programa.

    Todo algoritmo puede ser descompuesto en tres partes:

    Entrada de datos.

    Proceso.

    Salida de resultados.

    En cada uno de ellos se necesita el uso de variables:

    Variable:

    Es una localizacin o casillero en la memoria principal que almacena un valor que puede cambiar en el transcurso de la ejecucin del programa. Tiene un nombre, un tipo de dato y un valor. Antes de poder utilizar una variable es necesario declararla especificando su nombre y su tipo de dato.

    Ejemplo 1:

    Entero edad

    Ejemplo 2:

    Real peso, talla

    PROCESO E

    Datos

    S

    Resultado

  • Pg. 7

    Asignatura: Algoritmia y Estructura de Datos

    1.2 Caractersticas de un algoritmo

    Ser preciso: los pasos del algoritmo deben desarrollarse en un orden estricto, ya que el desarrollo de cada paso debe obedecer a un orden lgico.

    Ser definido. en el rea de programacin, el algoritmo se desarrolla como paso fundamental para desarrollar un programa. El computador solo desarrollar las tareas programadas y con los datos suministrados; no puede improvisar el dato que necesite para realizar un proceso.

    Ser finito: implica que el nmero de pasos de un algoritmo, por grande y complicado que sea el problema que soluciona, debe ser limitado, es decir debe llegar a un final.

    Presentacin formal: para que el algoritmo sea entendido por cualquier persona interesada es necesario que se exprese en alguna de las formas comnmente aceptadas; si no puede no ser muy til ya que solo lo entender quien lo dise. Las formas de presentacin de algoritmos son: el pseudocdigo, diagrama de flujo y diagramas de Nassi/Schneiderman, entre otras.

    Correccin: el algoritmo debe ser correcto, debe solucionar el problema para el cual fue diseado. Para garantizar que el algoritmo logre el objetivo, es necesario ponerlo a prueba: verificacin o prueba de escritorio.

    Eficiencia: es evaluar los recursos que requiere para almacenar datos y para ejecutar operaciones frente al beneficio que ofrece. En cuanto menos recursos requiere ser ms eficiente el algoritmo.

    1.3 Instrucciones Algortmicas Bsicas

    a. Entrada: Consiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una variable. En general, la accin de ingresar un dato a una variable se expresa en el pseudocdigo mediante la palabra LEER, de la siguiente forma:

    LEER variable

    Ejemplo: LEER edad

    b. Salida: Consiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla. En general, la accin de mostrar el valor de una variable se expresa en el pseudocdigo mediante la palabra IMPRIMIR (ESCRIBIR) de la siguiente forma:

    IMPRIMIR variable

    Ejemplo: IMPRIMIR TotalCompra

    c. Asignacin: Consiste en dar a una variable el valor de una expresin. La asignacin se expresa en el pseudocdigo de la siguiente forma:

    variable = expresin o variable expresin

    Donde variable y el valor de expresin deben tener el mismo tipo de dato.

    Ejemplo:

    resultado numero1 + numero 2

  • Pg. 8

    Asignatura: Algoritmia y Estructura de Datos

    1.4 Representacin del Algoritmo

    a. Pseudocdigo: Es la representacin del algoritmo en lenguaje natural. Ejemplo: sumar dos nmeros enteros.

    INICIO entero numero1, numero2, resultado Leer numero1 Leer numero2 resultado numero1 + numero 2 Escribir El resultado de la suma es: Escribir resultado FIN

    b. Diagrama de Flujo Estructurado: Representacin con flujos entre los procesos a realizar. Los principales smbolos de representacin para este diagrama son.

    c. Diagrama Nassi/Schneiderman (N-S)

    Representacin en bloques, es decir cada uno de los procesos como ingreso/salida de datos, decisiones, acciones, repeticiones; estn representados en bloques de tareas consecutivos.

    INICIO

    Declaracin de variables

    Lectura de Datos

    Accin 1

    Accin 2

    Accin n

    Reporte de Datos

    FIN

    Inicio/Fin del algoritmo

    Procesos del algoritmo

    Entada/Salida Estndar de Datos del algoritmo

    Flujo de recorrido entre Procesos del algoritmo

    Punto de Decisin del algoritmo

    Subrutinas en el algoritmo

    Conector del algoritmo en la misma hoja

    Conector del algoritmo en otra hoja

  • Pg. 9

    Asignatura: Algoritmia y Estructura de Datos

    Actividades

    Elaborar el algoritmo y su respectiva representacin, identificando los elementos de entrada y los elementos de salida, para los siguientes casos:

    a. El proceso de asistir a clases a un centro de estudios.

    b. El proceso de solicitar un libro en la biblioteca de una universidad.

    c. El proceso de un punto de ventas de un supermercado.

    d. El proceso de intercambiar dos valores numricos.

    e. El proceso de calcular la regla de tres simple.

    f. El proceso de matrcula para elaborar una lista de contactos digital.

    g. El proceso de Matrcula en una universidad.

    Tema N 2: Programacin Estructurada

    2.1 Programa

    Secuencia de instrucciones que especifican las operaciones que debe realizar la computadora, en la cual cada paso del algoritmo est expresado por medio de una instruccin.

    2.2 Lenguaje de Programacin

    Conjunto de sentencias utilizadas para escribir secuencias de instrucciones que para que ejecute un programa en una computadora.

    a. Lenguaje Mquina: Lenguaje de programacin que la computadora interpreta y ejecuta directamente, y est compuesto de instrucciones codificadas en binario (0, 1).

    b. Lenguaje de Bajo Nivel: tambin llamados lenguajes ensambladores, permiten al programador escribir instrucciones de un programa usando abreviaturas del lenguaje natural (ingls), tambin llamadas palabras nemotcnicas (ADD, DIV, SUB, etc).

    c. Lenguaje de Alto Nivel: permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintcticas muy similares al lenguaje natural (ingls).

  • Pg. 10

    Asignatura: Algoritmia y Estructura de Datos

    2.3 Programas Traductores

    Traducen los programas fuente de a cdigo mquina. Pueden ser:

    a. Intrpretes: es un traductor que toma un programa fuente, lo traduce y a continuacin lo ejecuta.

    b. Compilador: es un traductor que toma un programa fuente, y lo traduce sentencia por sentencia.

    La compilacin es el proceso de traduccin del programa fuente a programa objeto (traducido a cdigo mquina), a travs de un programa enlazador, para conducir al programa ejecutable.

    2.4 Definicin Programacin Estructurada

    Conjunto de tcnicas para escribir, verificar, depurar, y mantener los programas, es una metodologa de desarrollo de programas llamada refinamientos sucesivos: se plantea una operacin como un todo y se divide en segmentos ms sencillos o de menor complejidad. Una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones, esta integracin debe ser sencilla.

    PROGRAMA

    FUENTE

    COMPILADOR

    (Traductor)

    PROGRAMA

    OBJETO

    PROGRAMA

    ENLAZADOR

    PROGRAMA

    EJECUTABLE

    PROGRAMA

    FUENTE

    INTERPRETE

    PROGRAMA

    EJECUTABLE

    PROGRAMA

    FUENTE

    COMPILADOR

    PROGRAMA

    OBJETO

  • Pg. 11

    Asignatura: Algoritmia y Estructura de Datos

    La representacin grafica de la programacin estructurada se realiza a travs de diagramas de flujo o flow chart, Diagramas N-S, el cual representa el programa con sus entradas, procesos y salidas.

    El conjunto de tcnicas para este enfoque son:

    a. Recursos Abstractos

    Descomponer una determinada accin compleja en acciones ms simples, para ser ejecutadas y que sern instrucciones.

    b. Diseo Descendente

    El problema se descompone en niveles o pasos sucesivos: que hace? como lo hace?

    c. Estructuras bsicas

    Son estructuras de control para el programa:

    Secuenciales

    Selectivas

    Repetitivas

    ste conjunto de tcnicas permite elaborar programas en cualquier lenguaje de programacin.

    Las estructuras bsicas mencionadas sern desarrolladas mas adelante en otras sesiones de clase.

    2.5 Resolucin de un Problema

    Los siguientes pasos propuestos para la resolucin de problemas estn basados en el Ciclo de Vida Clsico en la Construccin de un Software.

    1. Anlisis del Problema

    2. Diseo del Algoritmo

    3. Expresar el algoritmo en un programa.

    4. Ejecucin y Validacin del programa.

    Que hace ?

    Como hace?

  • Pg. 12

    Asignatura: Algoritmia y Estructura de Datos

    Tema N 3: Sentencias Bsicas de Programacin

    Las sentencias de programacin a utilizar es una las tcnicas de programacin del enfoque estructurado: Estructuras Bsicas.

    3.1 Estructura Bsica Simple o Secuencial

    Es una estructura paso a paso, sin bifurcaciones ni repeticiones; donde la salida de un proceso es entrada para otro.

    Diagrama de Flujo:

    Diagrama N-S:

    INICIO

    Declaracin de variables

    Lectura de Datos

    Accin 1

    Accin 2

    Accin n

    Reporte de Datos

    FIN

    Ejemplo

    Calcular el rea de un tringulo. Area = (base * altura) / 2

    Solucin

    Leyenda de Datos base: valor de la base del tringulo altura: valor de la altura del triangulo Area: valor del resultado del clculo del rea del tringulo

    INICIO

    Declaracin de Variables

    Lectura de Datos

    Accin 1

    Accin n

    FIN

    Accin 2

    Reporte de Datos

  • Pg. 13

    Asignatura: Algoritmia y Estructura de Datos

    Diagrama de Flujo:

    Diagrama N-S:

    INICIO

    real base, altura, Area

    Leer base

    Leer altura

    Area (base * altura) / 2;

    Escribir El valor del rea para el tringulo es:

    Escribir Area

    FIN

    Cdigo en C:

    #include

    using namespace std;

    void main( )

    { float base, altura, Area;

    coutbase;

    cout

  • Pg. 14

    Asignatura: Algoritmia y Estructura de Datos

    Cond 1

    3.2 Estructura Bsica Selectiva

    Es una estructura que tiene un punto de decisin para realizar un conjunto de acciones. Pueden ser:

    E. B. Selectiva Simple

    E. B. Selectiva Compuesta

    E. B. Selectiva Anidada

    E. B. Selectiva Mltiple

    a. Estructura Bsica Selectiva Simple:

    Se tiene un punto de decisin que evala una condicin y si es Verdadero, ejecuta un conjunto de Acciones.

    Diagrama de Flujo:

    Diagrama N-S:

    INICIO

    Declaracin de variables

    Lectura de Datos

    V F

    Accin 1

    Accin 2

    Accin n

    Reporte de Datos

    FIN

    Declaracin de Variables

    Lectura de Datos

    INICIO

    Accin n

    FIN

    Accin 1

    Reporte de Datos

    Cond 1

    V F

  • Pg. 15

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo

    Sumar dos nmeros enteros positivos c = a + b

    Solucin

    Diagrama de Flujo:

    Diagrama N-S:

    Cdigo C: #include

    using namespace std;

    int main( )

    { float a, b, c;

    couta; cout0 V F

    INICIO

  • Pg. 16

    Asignatura: Algoritmia y Estructura de Datos

    Cond 1

    if (a>0 && b>0)

    { c = a + b;

    cout

  • Pg. 17

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo:

    Sumar dos nmeros enteros si son positivos, sino multiplicarlos.

    Solucin:

    Diagrama de Flujo

    Diagrama N-S

    Cdigo C: #include

    using namespace std;

    void main( )

    { int a, b, c;

    couta;

    cout0

    V F

    c a * b

    Escribir El valor de la

    multiplicacion es , c

  • Pg. 18

    Asignatura: Algoritmia y Estructura de Datos

    Cond 2

    Cond 1

    if(a>0 && b> 0)

    { c = a + b;

    cout

  • Pg. 19

    Asignatura: Algoritmia y Estructura de Datos

    F V

    F V

    Ejemplo:

    Ingresar un nmero entero y si es positivo y diferente de cero, reportar si se encuentra entre los diez primeros nmeros.

    Solucin:

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    entero a

    Leer a

    a > 0

    Escribir No es un nmero mayor que cero

    a>=1 && a>10

    Escribir Son mas de los primeros 10 Escribir Primeros 10

    FIN

    Cdigo C: #include

    using namespace std;

    void main( )

    { int a;

    couta;

    if(a>0)

    if(a>=1 && a

  • Pg. 20

    Asignatura: Algoritmia y Estructura de Datos

    Cond 1 1 2 3

    d. Estructura Bsica Selectiva Mltiple: se tiene un punto de decisin que evala ms de dos alternativas para realizar un conjunto de acciones.

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    Declaracin de variables

    Lectura de Datos

    default

    Accin 1 Accin 2 Accin 3 Accin 4

    Accin n Accin m Accin m Accin m

    Reporte de Datos

    FIN

    Ejemplo

    Ingresa cinco nmeros e imprime que vocal es.

    Solucin:

    INICIO

    Declaracin de Variables

    Lectura de Datos

    Accin m

    FIN

    Accin 2

    Reporte de Datos

    Cond 1 default

    1

    Accin n

    Accin 1

    3 2

    Accin m

    Accin 3

    Accin m

    Accin 4

    Accin 4

    Leyenda de Datos

    num: valor del numero entero positivo

  • Pg. 21

    Asignatura: Algoritmia y Estructura de Datos

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    entero num

    Leer num

    num 1 2 3 4 5 default

    Escribir Vocal A

    Escribir Vocal E

    Escribir Vocal I

    Escribir Vocal O

    Escribir Vocal U

    Escribir No es Vocal

    FIN

    Cdigo C: #include

    using namespace std;

    void main( )

    { int num;

    coutnum;

    switch(num)

    { case 1: cout

  • Pg. 22

    Asignatura: Algoritmia y Estructura de Datos

    3.3 Estructura Bsica Repetitiva

    Es una estructura permite iterar o repetir un conjunto de acciones dada una condicin. Pueden ser:

    E. B. Repetitiva Mientras

    E. B. Repetitiva Hacer-Mientras

    E. B. Repetitiva Para

    a. Estructura Bsica Repetitiva Mientras: primero evala una expresin condicional y si es verdadera permite realizar el conjunto de acciones y regresa evaluar nuevamente la expresin condicional, hasta que deje de cumplir (Falso).

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    Declaracin de variables

    Lectura de Datos

    Cond 1

    Accin 1

    .

    Accin n

    Accin 2

    Reporte de Datos

    FIN

    Ejemplo

    Imprimir la serie Fibonacci, menor a un lmite dado: 0,1,1,2,3,5,8,13,.

    Cond 1

    INICIO

    Declaracin de Variables

    Lectura de Datos

    Accin n

    FIN

    Accin 1

    V

    F

    Accin 2

  • Pg. 23

    Asignatura: Algoritmia y Estructura de Datos

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    entero lim, a=0, b=1, c

    Leer lim

    Escribir a

    b

  • Pg. 24

    Asignatura: Algoritmia y Estructura de Datos

    while(b

  • Pg. 25

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo

    Leer un nmero entero mayor que cero, sino es as, volver a solicitar el nmero con esas condiciones.

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    entero num

    Leer num

    num

  • Pg. 26

    Asignatura: Algoritmia y Estructura de Datos

    do{

    do{ coutm;

    }while(m=m && m>0)

    { n=n-m;

    venta=venta+m;

    cs++;

    if(n>0)

    { cout

  • Pg. 27

    Asignatura: Algoritmia y Estructura de Datos

    c. Estructura Bsica Repetitiva Para: permite repetir un conjunto de acciones, secuencialmente hasta llegar a un lmite dado.

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    Declaracin de variables

    Lectura de Datos

    i = 0 ; i

  • Pg. 28

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo:

    Calcular el Factorial de un nmero.

    Diagrama de Flujo

    Diagrama N-S

    INICIO

    entero num, i , p =1

    Leer num

    i = 1 ; i

  • Pg. 29

    Asignatura: Algoritmia y Estructura de Datos

    Actividades

    Elaborar el Pseudo cdigo, Diagrama de Flujo y Diagrama N-S, y Cdigo en C respectivo para:

    1. La presin, el volumen y la temperatura de una masa de aire se relacionan por la formula:

    Masa = (presin * volumen)/(0.37 * (temperatura + 460))

    Calcular la masa respectiva.

    2. En un hospital existen tres reas: Ginecologa, Pediatra, Traumatologa. El presupuesto anual del hospital se reparte conforme a la siguiente tabla:

    rea Porcentaje del presupuesto

    i. Ginecologa 40%

    ii. Traumatologa 30%

    iii. Pediatra 30%

    Obtener la cantidad de dinero que recibir cada rea, para cualquier monto presupuestal.

    3. Encuentre el menor de tres nmeros dados.

    4. Una fbrica de TV necesita que le ayuden a controlar el manejo de sus inventarios y pedidos de venta.

    Cuando llega un pedido, un programa debe verificar si existe suficiente cantidad de TV en inventario. Si es as, debe reportar un mensaje PEDIDO COMPLETO y se debe dar la disminucin del inventario.

    Adems se necesita reportar:

    El nmero de TV que quedan en el inventario final.

    El nmero de pedidos completos.

    El nmero de pedidos incompletos.

    El nmero de TV vendidos.

    El nmero de TV que faltan para completar los pedidos incompletos.

    5. Lea un nmero entero e indique cual es su dgito mayor.

    6. Suponga que tiene la calificacin final de un grupo de 40 alumnos, calcular la calificacin promedio y la calificacin mas baja de todo el grupo.

    7. Cuantos dgitos pares y cuantos dgitos impares tiene un nmero entero.

    8. En una universidad se pueden llevar hasta 22 crditos en un ciclo. Elabora el cdigo que permita a un alumno matricularse sin pasarse del lmite.

    9. Una vendedora de pan tiene n unidades de pan al comenzar el da. Si cada cliente le pide m panes, cuantos clientes son atendidos completamente, cuantos panes quedan para el ultimo cliente?

    10. Elabore el cdigo para una tienda para leer por cada cliente el monto total de su compra; Al final del da reportar la cantidad total de ventas y el nmero de clientes atendidos.

    11. Un censador recopila datos del ltimo censo nacional, al final de un da desea conocer de las persona encuestadas el porcentaje que tiene estudios de primaria, el porcentaje que tiene estudios de secundaria, porcentaje de carrera tcnica, porcentaje de estudios profesionales, y porcentaje con estudios de post grado.

  • Pg. 30

    Asignatura: Algoritmia y Estructura de Datos

    SEGUNDA UNIDAD

    Tema N 4: Modularizacin de Programas

    4.1 Paso de Parmetros

    Para llamar un bloque de cdigo ms de una vez, es tener las instrucciones en subprogramas que se invocan cada vez que se necesiten. Los subprogramas son partes separadas de cdigo que ejecutan tareas pequeas de un programa principal.

    Parmetros de entrada (valor)

    Guarda en memoria una copia temporal de la variable, dentro del procedimiento solo se utiliza la copia, cuando se modifica el valor del parmetro solo afecta al almacenamiento temporal, la variable actual fuera del procedimiento nunca se toca.

    Parmetros de entrada/salida (referencia)

    Los cambios que se efecten sobre dicha variable dentro del procedimiento se mantienen incluso despus de que este haya terminado, es decir los cambios afectan al programa principal.

    Ejemplo:

  • Pg. 31

    Asignatura: Algoritmia y Estructura de Datos

    4.2 Procedimientos

    Se utilizan para imprimir valores a ser utilizados en el programa.

    Declaracin:

    void NombreProcedimiento( )

    void NombreProcedimiento (argumentos)

    4.3 Funciones

    Se utilizan para retornar un valor a ser utilizado en el programa.

    Declaracin:

    Tipo_dato NombreFuncin( )

    Tipo_dato NombreFuncin(argumentos)

    Si se tiene el siguiente programa simple para sumar dos nmeros:

    //Programa Simple

    #include

    using namespace std;

    void main()

    { int a,b,c;

    couta;

    coutb;

    c=a+b;

    cout

  • Pg. 32

    Asignatura: Algoritmia y Estructura de Datos

    //Procedimientos con Argumentos: Ejemplo1

    #include

    using namespace std;

    void sumar(int a, int b)

    { int c;

    c=a+b;

    cout

  • Pg. 33

    Asignatura: Algoritmia y Estructura de Datos

    //Funciones con Argumentos: Ejemplo1

    #include

    using namespace std;

    int sumar(int a, int b)

    { int c;

    c=a+b;

    return c;

    }

    void main()

    { int sum,a,b;

    couta;

    coutb;

    sum=sumar(a,b);

    cout

  • Pg. 34

    Asignatura: Algoritmia y Estructura de Datos

    Otra Manera de definir un Procedimiento y una Funcin:

    //Procedimientos con Argumentos

    #include

    using namespace std;

    void sumar(int a, int b);

    int main()

    { int a,b;

    couta;

    coutb;

    sumar(a,b);

    return 0;

    }

    void sumar(int a, int b)

    { int c;

    c=a+b;

    cout

  • Pg. 35

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplos:

    1. Elaborar un programa para calcular a la funcin de acuerdo a lo sgte.:

    y = x 2 + 5 si x = 2

    2. Para repartir una herencia se tiene en cuenta: Si la cantidad de hijos es menor a 4, se repartir exactamente entre el nmero de hijos; si son cuatro o ms hijos, la mitad le tocar al hermano mayor y el resto se dividir entre los dems hermanos.

    #include

    using namespace std;

    float ecuaciones()

    { float x,y;

    coutx;

    if(x

  • Pg. 36

    Asignatura: Algoritmia y Estructura de Datos

    Actividades

    Construir los programas usando funciones y procedimientos en Cdigo en C respectivo para:

    1. Realizar un programa que tenga un mdulo reciba dos argumentos a, b (enteros) y que intercambie los valores de dichas variables.

    -> Elaborar un mdulo para leer a y b.

    2. En un banco, a los clientes que de tipo 1, 2, 3, que aperturan cuentas de Ahorro(A), Corriente (C), o Valores (V), todos en nuevos soles, se les otorga un bono (dlares), de acuerdo a la sgte. Tabla:

    Reportar el Tipo de Cliente, la Cuenta que apertura, el monto total de la cuenta.

    Considere el ingreso del tipo de cambio de moneda al da.

    3. En un colegio, a la pensin de sus alumnos de tipo A, B, C, de acuerdo al promedio obtenido, le asignan becas:

    De acuerdo a la beca obtenida, se le descuenta al pago de su pensin:

    Mostrar el tipo de alumno, la beca obtenida, y el monto total de pago de pensin,

    4. Elaborar los mdulos de programa adecuados que permita leer las edades de n personas y reporte el mayor, el menor y el promedio de edades.

    Tema N 5: Libreras de Programacin creadas por el usuario

    Las libreras estndar del procesador del lenguaje C: iostream.h, math.h, conio.h, stdio.h, etc., existen liberas de cabecera (header, de alli la extensin .h) que pueden ser creadas por el programador, y ser invocadas en diferentes programas fuente (el programa con extensin .cpp) como parte de la reutilizacin de cdigo.

    Cuenta:

    Tipo cliente

    A C V

    1 $ 500 $ 400 $ 300

    2 $ 400 $ 300 $ 200

    3 $ 300 $ 200 $ 100

    Promedio

    Alumno

    0 10 11 - 16 17 -20

    A A ++ A + A -

    B B ++ B + B -

    C C ++ C+ C -

    A ++ = 5 % A + = 7% A - = 10 %

    B ++ = 3 % B + = 5 % B - = 7 %

    C ++ = 1 % C+ = 3% C - = 5 %

  • Pg. 37

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo 1:

    Leer un nmero entero diferente a cero, y si es positivo, reportar El numero es positivo, caso contrario es negativo.

    Solucin:

    - Crear la librera con extensin .h para la funcin de lectura de datos enteros, llamado lecturadato.h.

    - Crear el programa .cpp que invoca a la librera .h , lecturadato.h, creada por el programador.

    Ejemplo 2:

    Desarrollar la sgte. Ecuacin solo si son nmeros positivos y diferentes a cero.

    y = x * (2x - a)

    Solucin:

    - La funcin para la lectura de datos enteros y diferentes a cero ya fue creada para el programa del ejemplo 1.

    - Solo se crear el programa fuente con extensin .cpp para desarrollar la ecuacin.

    #include

    using namespace std;

    int leedatoe()

    { int dato;

    do{

    coutdato;

    }while(dato==0);

    return dato;

    }

    #include

    #include c:\programas\lecturadato.h

    using namespace std;

    void main()

    { int num;

    num=leedatoe();

    if(num>0)

    cout

  • Pg. 38

    Asignatura: Algoritmia y Estructura de Datos

    Actividades

    Construir los programas usando funciones y procedimientos y libreras de programacin:

    1. Una empresa categoriza a sus artculos como A, B y C, adems a sus clientes como Excelente(E), Bueno(B), Regular(R) y Malo(M), estableciendo polticas de descuento (en %) de acuerdo a la sgte. tabla:

    Tipo Artculo

    Tipo Cliente A B C

    Excelente (E) 40 30 20

    Bueno (B) 30 20 10

    Regular (R) 20 10 0

    Malo (M) 0 0 0

    El cliente Excelente y Bueno puede pagar en Efectivo, Cheque o crdito, el cliente Regular puede pagar en Efectivo o Cheque y el cliente Malo solo paga en efectivo.

    2. En un cajero se puede realizar las operaciones de depsito, saldo, y retiro. Elabore un programa permitir a un cliente realizar estas operaciones las veces que lo requiera.

    Tema N 6: Funciones Recursivas

    Se denominan funciones recursivas a aquellas que se invocan a s mismas en un programa.

    Hay que tener algunas cosas en cuenta en las funciones recursivas:

    - Toda funcin recursiva debe tener algn punto de finalizacin.

    - La funcin debe tender a ese punto de finalizacin.

    La funcin factorial:

    n!

    4! = 4 * 3 * 2 * 1

    4 * 3! Es decir n*(n-1)!

    3! = 3 * 2 * 1

    3 * 2! Es decir n*(n-1)!

    2! = 2 * 1

    2 * 1! Es decir n*(n-1)!

    1! = 1 * 0!

    0! = 1

    int factorial(int n)

    { if (n == 0)

    return 1;

    else

    return n*factorial(n-1);

    }

    4! = 4 * 3 * 2 * 1

    4 * 3!

    3! = 3 * 2 * 1

    3 * 2!

    2! = 2 * 1

    2 * 1!

    1! = 1 * 0!

    0! = 1

    1 * 1 * 2 * 3 * 4 = 24

  • Pg. 39

    Asignatura: Algoritmia y Estructura de Datos

    La funcin multiplicacin:

    a * b

    3 * 4 = 3 + 3 + 3 + 3

    3 + (3 * 3)

    3 * 3 = 3 + 3 + 3

    3 + (3 * 2)

    3 * 2 = 3 + 3

    3 + (3 *1)

    3 * 1 = 3

    int multiplica(int a, int b)

    { if (a == 0 || b == 0)

    return 0;

    else

    if (b == 1)

    return a;

    else

    return a+multiplica(a,b-1);

    }

    Actividades

    Investigar y Exponer las funciones recursivas de:

    1. Serie Fibonacci

    2. Mximo Comn Divisor

    3. Torres de Hanoi.

    3 * 4 = 3 + 3 + 3 + 3

    3 + (3 * 3)

    3 * 3 = 3 + 3 + 3

    3 + (3 * 2)

    3 * 2 = 3 + 3

    3 + (3 *1) 3 * 1 = 3 3 + 3 + 3 + 3 = 12

  • Pg. 40

    Asignatura: Algoritmia y Estructura de Datos

    - Arreglos - Registros - Archivos - Cadenas

    - Listas - Pilas - Colas

    - Arboles - Grafos

    TERCERA UNIDAD

    Tema N 7: Estructuras de Datos

    7.1 Definicin de Estructura de Datos

    Una estructura de datos es una coleccin de datos que se caracteriza por su organizacin y por el conjunto de operaciones que se definen para su manipulacin.

    7.2 Clasificacin de Estructura de Datos

    Estructura de Datos

    Simples

    Estructuras de Datos

    Compuestos

    Estructuras de Datos Estticos: Son aquellas en las que la cantidad de memoria que ocupan se define antes de ejecutar el programa. Durante la ejecucin del mismo este tamao asignado no puede alterarse.

    Estructuras de Datos Dinmicos: Son aquellas en las que no es necesario reservar espacio de memoria antes de ejecutar el programa, ya que este espacio se puede asignar durante su ejecucin segn se necesite. As mismo dicho espacio puede ser liberado para poder ser utilizado por otros datos.

    Actividades

    Investigar y Exponer cuales son las estructuras de datos:

    1. Estndar.

    2. Creadas por el Programador.

    - Enteros - Reales - Caracter

    Estructuras de Datos Estndar

    Estructuras de Datos No Estndar (Definidos por el programador)

    Lineales

    Estructuras de Datos Dinmicos

    Estructuras de Datos Estticos

    No Lineales

  • Pg. 41

    Asignatura: Algoritmia y Estructura de Datos

    //Programa para promediar las alturas de los alumnos

    #include

    #define N 5

    using namespace std;

    void leerarre(double array[ ])

    { int i;

    for(i=0;i

  • Pg. 42

    Asignatura: Algoritmia y Estructura de Datos

    El siguiente programa lee un arreglo de nmeros enteros y encuentra el mayor y menor elemento. El mx de elementos es 100 pero solo ingresa n elementos.

    8.1 Actualizacin de Arreglos Unidimensionales

    Los Arreglos necesitan actualizarse mientras se efecta algn proceso con ellos. La actualizacin de arreglos consiste en tres operaciones: Aadir elementos al final del arreglo (siempre y cuando exista espacio en el arreglo), Insertar elementos en cualquier posicin del arreglo y Eliminar elementos.

    Aadir

    //Aadir un valor en la ultima posicin #include

    #define MAX 100

    using namespace std;

    int leenum()

    { int num;

    do{ coutnum; cout

  • Pg. 43

    Asignatura: Algoritmia y Estructura de Datos

    void ingresadatos(int V[MAX], int n)

    { int i;

    cout

  • Pg. 44

    Asignatura: Algoritmia y Estructura de Datos

    void mostrar(int V[MAX], int n)

    { int i;

    cout

  • Pg. 45

    Asignatura: Algoritmia y Estructura de Datos

    void mostrar(int V[MAX], int n)

    { int i;

    cout

  • Pg. 46

    Asignatura: Algoritmia y Estructura de Datos

    ingresadatos(A,num); cout

  • Pg. 47

    Asignatura: Algoritmia y Estructura de Datos

    void bbinaria(int a[MAX], int n)

    { int elem; int BAJO, ALTO, CENTRAL; BAJO=1; ALTO=n;

    cout

  • Pg. 48

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplos:

    1. Elaborar un programa que dado dos arreglos numricos A y B de n1 y n2 elementos respectivamente, guarde en un tercer arreglo C los elementos que estn en A pero no estn en B. Ejemplo:

    5 15 5

    8 9 12

    12 8 2

    6 6

    9 45

    2 22

    7

    Solucin:

    #include

    #define MAX 100

    using namespace std;

    void ingresadatos(int V[MAX], int n,char titu[20])

    { int i;

    cout

  • Pg. 49

    Asignatura: Algoritmia y Estructura de Datos

    for(i=0;i

  • Pg. 50

    Asignatura: Algoritmia y Estructura de Datos

    void mostrar(int V[MAX], int n, char titu[20])

    { int i;

    cout

  • Pg. 51

    Asignatura: Algoritmia y Estructura de Datos

    10. Crear un mdulo de programa donde se eliminen los elementos repetidos en un Arreglo de n elementos.

    11. Buscar un elemento en un arreglo de n elementos, utilizando bsqueda binaria (previamente ordenado con el mtodo de la burbuja y sin que exista elementos repetidos), y eliminarlo.

    Tema N 9: Arreglos Bidimensionales

    Tambin llamado matrices, es un conjunto finito y ordenado de elementos de un mismo tipo de dato. La definicin de un arreglo es como sigue:

    TipoDato NombreMatriz[nfilas][ncolumnas]

    Ejm. Entero M[4][5]

    columnas

    filas

    Para declarar un arreglo bidimensional en lenguaje C++ se sigue la siguiente sintaxis:

    Tipo de Dato Nombre del arreglo [# filas] [# columnas];

    Lectura y Presentacin de Datos en una Matriz: #include

    #define MAX 100

    using namespace std;

    int leenum()

    {int num;

    do{ cin>>num; cout

  • Pg. 52

    Asignatura: Algoritmia y Estructura de Datos

    void main()

    { int B[MAX][MAX]; int nf,nc;

    cout

  • Pg. 53

    Asignatura: Algoritmia y Estructura de Datos

    void diagonalsecundaria(int M[MAX][MAX], int nf, int nc)

    { int i,j,k;

    k=nc-1;

    if(nf==nc)

    { for(i=0;i

  • Pg. 54

    Asignatura: Algoritmia y Estructura de Datos

    9.1 Actualizacin de Arreglos Bidimensionales

    //Insertar fila y columna de una matriz

    //Se entiende que se realizan los procedimientos de lectura de datos

    int insertar_fila(int M[MAX][MAX], int nf, int nc)

    { int i,j,pos;

    do{ coutpos;

    }while(posnf);

    for(i=nf-1;i>=pos;i--)

    for(j=0;j

  • Pg. 55

    Asignatura: Algoritmia y Estructura de Datos

    //Borrar fila y columna de una matriz

    .. //Se entiende que se realizan los procedimientos de lectura de datos

    int borrar_fila(int M[MAX][MAX], int nf, int nc)

    { int i,j,pos;

    do{ coutpos;

    }while(pos=nf);

    for(i=pos;i

  • Pg. 56

    Asignatura: Algoritmia y Estructura de Datos

    9.2 Aplicacin de Arreglos Bidimensionales

    1. Imprimir lo nmeros que rodean a un nmero X, la primera vez que se encuentra en la Matriz incluido el nmero X:

    4 3 7 9 3 7 9

    M 1 4 5 8 4 5 8

    2 5 4 1 5 4 1

    7 -6 3 4

    Solucin:

    .. //Se entiende que se realizan los procedimientos de lectura de datos

    void rodean(int M[MAX][MAX], int nf, int nc,int n)

    {int i,j;

    int f,c;

    int ban=0;

    for(i=0;i

  • Pg. 57

    Asignatura: Algoritmia y Estructura de Datos

    0 1 2 3

    0

    1

    2

    0 1 2 3

    0

    1

    2

    0 1 2 3

    0

    1

    2

    0 1 2 3

    0

    1

    2

    2. Ingresa un Numero N y luego imprime fila y columna N de la matriz, si solo existe la fila N, solo se imprime dicha fila.

    3 5 2 1 1

    6 -5 7 9 9

    8 1 4 -3 -3

    3 5 2 1 2

    6 -5 7 9 7

    8 1 4 -3 8 1 4 -3

    Solucin:

    .. //Se entiende que se realizan los procedimientos de lectura de datos void seleccion(int M[MAX][MAX], int nf, int nc)

    { int i,j,n;

    do{ coutn;

    }while(n=nf && n>=nc));

    cout

  • Pg. 58

    Asignatura: Algoritmia y Estructura de Datos

    3. Invertir Diagonal Principal de una Matriz:

    6 8 1 4 8 1

    M 7 2 5 M 7 2 5

    1 5 4 1 5 6

    .. //Se entiende que se realizan los procedimientos de lectura de datos

    void mostrar(int M[MAX][MAX], int nf, int nc)

    { int i,j;

    cout

  • Pg. 59

    Asignatura: Algoritmia y Estructura de Datos

    //Se entiende que se realizan los procedimientos de lectura de datos

    void mostrar(int M[MAX][MAX], int nf, int nc)

    {

    int i,j;

    cout

  • Pg. 60

    Asignatura: Algoritmia y Estructura de Datos

    Tema N 10: Registro (Estructura)

    Una estructura (registro) es un tipo definido por el usuario en base a otros tipos de datos con el objeto de reunir informacin de un mismo elemento o entidad, a diferencia de un arreglo que tiene datos homogneos.

    Ejemplo:

    Juan 19 1.73 M

    nombre

    (cadena)

    edad

    (int)

    Talla

    (float)

    sexo

    (char)

    Cada componente de la estructura se denomina campo.

    Declaracin: struct nombre{

    char f[5];

    char e[3];

    int s;

    char a;

    };

    Ejemplo:

    Datos afines

    respecto a la

    estructura.

    #include

    using namespace std;

    struct{

    int dia;

    int mes;

    long int anual;

    }hoy;

    void main( )

    {

    couthoy.dia;

    couthoy.mes;

    couthoy.anual;

    cout

  • Pg. 61

    Asignatura: Algoritmia y Estructura de Datos

    struct domicilio{

    char nombre[30];

    char calle[30];

    int num;

    char ciudad[20];

    };

    typedef struct domicilio;

    void main( )

    {

    domicilio Oficina, casa;

    }

    Uso del typedef: Siempre en los programas se realiza una tarea de modelado de los datos que consiste en convertir los datos reales en datos aplicables en un programa informtico. En C existe una palabra reservada llamada typedef que sirve para crear tipos de datos propios. Permite dar una mayor claridad y simplicidad al cdigo, aunque su uso es opcional. Su sintaxis es la siguiente:

    typedef definicinDelTipo NombreDelTipoDeDatos

    Definir estructuras con typedef

    #include

    using namespace std;

    struct direccion{

    char nombre[30];

    char calle[30];

    int num;

    char ciudad[30];

    };

    void main( )

    { direccion oficina, casa;

    cout

  • Pg. 62

    Asignatura: Algoritmia y Estructura de Datos

    Asignacin de estructuras

    #include

    #include

    using namespace std;

    typedef struct{

    char nombre[25];

    char apellidos[50];

    int edad;

    } Persona;

    void main( )

    { Persona p1,p2;

    strcpy(p1.nombre,"Pepe");

    strcpy(p1.apellidos,"Villegas Varas");

    p1.edad=12;

    p2=p1; // Asignacin de estructuras

    cout

  • Pg. 63

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo de Invocacin de una Estructura en Otra:

    Utilizar estructuras anidadas: una para fecha con da, mes y ao; y otra para persona, la cual se invocar como inscrito y tiene nombres, apellidos, nacimiento (que es del tipo fecha), y sexo. Reportar los datos ingresados.

    #include

    #include

    #define N 50

    using namespace std;

    struct fecha{

    int dia;

    int mes;

    long int anual;

    };

    struct persona{

    char nombres[N];

    char apellidos[N];

    fecha fnacimiento;

    char sexo[10];

    };

    void main()

    { persona inscrito;

    cout

  • Pg. 64

    Asignatura: Algoritmia y Estructura de Datos

    Tema N 11: Union

    Son a primera vista, entidades muy similares a las estructuras, estn formadas por un nmero cualquiera de miembros, al igual que aquellas, pero en ste caso no existen simultneamente todos los miembros, y slo uno de ellos tendr un valor vlido.

    A diferencia de la Estructura, esta es una localidad de memoria que se utiliza para compartir datos de diferentes tipos.

    Ejemplo: Entonces struct tabla {

    char nombre[30];

    char tipo;

    char cadena[5];

    int entero;

    };

    Actividades

    1. Elaborar un programa en C, para demostrar el uso y la diferencia de la unin con respecto a los registros.

    Tema N 12: Tipos de Datos Abstractos (TDA)

    Es un tipo de dato definido por el programador, que consta de datos y operaciones.

    Ejm: clases, listas, pilas, colas.

    TDA = Representacin (datos) + Operaciones (funciones y procedimientos)

    Actividades

    1. Investigar y exponer los tipos de datos abstractos que se pueden usar en la construccin de un programa.

    Si tipo es c , se

    utiliza cadena, pero

    si es e , se utiliza

    entero.

    struct tabla{

    char nombre[30];

    char tipo;

    union {

    char cadena[5];

    int entero;

    } dato;

    };

    class alumno

    {

    private:

    string nombre;

    string carrera;

    public:

    alumno();

    ~alumno();

    void ingresar();

    void imprimir();

    };

    alumno

    nombre

    carrera

    ingresar

    imprimir

  • Pg. 65

    Asignatura: Algoritmia y Estructura de Datos

    Tema N 13: Clases y Programacin Orientada a Objetos

    Es una tcnica o estilo de programacin basada en elementos bsicos llamados objetos.

    Objeto: Es una entidad que se caracteriza por determinados atributos llamados datos miembro y por ciertas funciones denominados funciones miembro o mtodos que permiten su manipulacin.

    Clase: Una clase es la definicin formal de los atributos y funciones miembro de un conjunto de objetos que se realiza en un programa.

    class < nombre de la clase >

    { < private:/public: >

    tipodato atributo;

    tipodato atributo;

    tipodato atributo;

    < private:/public: >

    Funcion/procedimiento();

    Funcion/procedimiento();

    Funcion/procedimiento();

    };

    Los datos y funciones miembro pueden ser definidos como private o public.

    private: slo pueden ser accesados desde funciones miembro.

    public: pueden ser accesados directamente, sin utilizar funciones miembro.

    Usualmente se debe declarar los datos miembro tipo private y las funciones miembro tipo public.

    Para accesar desde fuera del objeto a sus datos pblicos y funciones miembro pblicas escribe.

    < nombre del objeto >.< dato miembro >

    < nombre del objeto >.< funcion miembro >

    Constructor: Un constructor es una funcin miembro que permite inicializar los datos miembro de un objeto. Tiene las siguientes caractersticas:

    - Su nombre es igual al de la clase.

    - No devuelve valores.

    - Puede haber ms de un constructor.

    - Se invoca al momento de declarar al objeto.

    Destructor: Un destructor es una funcin que permite liberar el rea de memoria ocupada por un objeto cuando este ya no va ser usado .Sus caractersticas son:

    - Su nombre es igual al de la clase pero precedido por el smbolo ~ .

    - No devuelve valores.

    - Slo puede haber un destructor.

    - Se invoca al momento de salir o abandonar el mbito donde fue creado el objeto.

  • Pg. 66

    Asignatura: Algoritmia y Estructura de Datos

    #include

    #include

    using namespace std;

    class alumno

    { private:

    string nombre;

    string carrera;

    public:

    alumno();

    ~alumno();

    void ingresar();

    void imprimir();

    };

    alumno::alumno()

    { nombre=" ";

    carrera=" ";

    }

    alumno::~alumno()

    {

    }

    void alumno::ingresar()

    { coutnombre;

    coutcarrera;

    }

    void alumno::imprimir()

    { cout

  • Pg. 67

    Asignatura: Algoritmia y Estructura de Datos

    Tema N 14: Punteros a Direccin de Memoria

    Un puntero es un tipo especial de variable, que almacena el valor de una direccin de memoria, esta direccin puede ser la de una variable individual, pero mas frecuentemente ser la de un elemento de un array, una estructura u objeto de una clase. Los punteros, tambien pertenecen a un tipo, se dice que un puntero 'apunta a' ese tipo al que pertenece.

    MEMORIA

    200

    p 800

    800

    x 23

    p es una variable tipo puntero.

    x es una variable tipo int apuntada por p.

    14.1 Declaracin de variables tipo puntero

    tipo de dato apuntado * variable tipo puntero:

    Ejemplos:

    int *p; // p es una variable tipo puntero que apunta a una variable tipo int.

    float *q; // q es una variable tipo puntero que apunta a una variable tipo float.

    char *r; // r es una variable tipo puntero que apunta a una variable tipo char.

    Para hacer referencia a la variable apuntada se usa la notacin:

    *variable tipo puntero

    Ejemplo:

    MEMORIA

    200

    p 800

    800

    x 23

    *p

    *p es otro nombre para la variable x

  • Pg. 68

    Asignatura: Algoritmia y Estructura de Datos

    Variables estticas

    Son aquellas que se declaran expresamente en los programas y a las que el sistema operativo asigna una posicin de memoria antes de la ejecucin del mismo.

    Variables dinmicas

    Son variables que se crean y se destruyen durante la ejecucin del programa. No son declaradas explcitamente en los programas.

    Operador &

    Devuelve la direccin de memoria de una variable. Su sintaxis es:

    & nombre de variable

    Ejemplo:

    #include

    using namespace std;

    void main ()

    { int x,y; // Variables de tipo entero

    int *p; // Puntero a una variable de tipo entero

    // Leemos la direccin de la variable x mediante & y lo almacenamos en la variable puntero p

    p = &x; // p contiene la direccin en la que se encuentra x

    // Utilizando el operador *, podemos acceder a su informacin. *p representa ahora el valor de la variable x

    *p = 10; // Ahora x contiene el valor 10

    cout

  • Pg. 69

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo: int *p;

    float *q;

    p = new int; // crea una variable dinmica de tipo int y hace que p apunte a ella.

    q = new float;// crea una variable dinmica de tipo float y hace que q apunte a ella.

    NOTA:

    No se puede asignar un valor constante a una variable tipo puntero ni ingresar un valor por teclado para ella.

    int *p;

    p = 800; // ERROR

    cin>>p; // ERROR Si es posible imprimir el valor de un puntero: cout

  • Pg. 70

    Asignatura: Algoritmia y Estructura de Datos

    Constante NULL

    Es una constante predefinida en C++ cuyo valor es cero (0) y sirve para inicializar una variable tipo puntero que no apunta a ninguna variable.

    variable tipo puntero = NULL;

    void main()

    { int *p;

    p = new int;

    *p = 17;

    cout

  • Pg. 71

    Asignatura: Algoritmia y Estructura de Datos

    Tema N 15: Estructuras de Datos Dinmicas

    15.1 Lista Enlazada Simple

    Una lista enlazada es una estructura de datos dinmica formada por un conjunto de elementos llamados nodos.

    Cada nodo consta de dos partes:

    - Una que contiene el dato.

    - Otra que contiene la direccin del siguiente nodo.

    Nodo

    Dato Direcc nodo sig

    Los nodos son variables dinmicas que se crean y destruyen de acuerdo a los requerimientos del proceso.

    - Para acceder a la lista es necesario un puntero que contenga la direccin del primer nodo.

    - Si la lista est vaca dicho puntero tendr el valor NULL.

    - El ltimo elemento de la lista se reconoce porque su puntero al siguiente tiene valor NULL.

    Representacin Grfica de una Lista Enlazada

    Lista

    9.1 Listas Simplemente Enlazadas

    Es un conjunto de elementos en los que cada elemento contiene la posicin o direccin del sgte. campo de la Lista.

    Donde cada elemento de la lista simplemente enlazada llamado nodo se define:

    struct nodo{

    int n; //el campo puede ser string, float, estructura, etc.

    nodo * sgte; // direccin al siguiente nodo

    };

    12 30 21 54 NULL

    NULL Lista

  • Pg. 72

    Asignatura: Algoritmia y Estructura de Datos

    ListasSE.h

    #include

    #include

    #define MAX 100

    using namespace std;

    struct nodo

    { int dato;

    nodo *sig;

    };

    typedef nodo *pnodo;

    class lista

    { private:

    pnodo pL;

    public:

    lista();

    ~lista();

    void insertar_comienzo();

    void insertar_final();

    void insertar_despues();

    void eliminar_inicio();

    void eliminar_final();

    void buscar();

    pnodo buscar_despues(int x);

    void buscar_anterior();

    void imprimir();

    };

    lista::lista()

    {

    pL = NULL;

    }

    lista::~lista()

    {

    pnodo p,q;

    if ( pL != NULL )

    { p = pL;

    while ( p != NULL )

    { q = (*p).sig;

    delete p;

    p = q;

    }

    pL=p;

    }

    }

    void lista::insertar_comienzo()

    {

    pnodo nuevo;

    int valor;

    coutvalor;

    nuevo = new nodo;

    (*nuevo).dato = valor;

    (*nuevo).sig = pL;

    pL = nuevo;

    }

  • Pg. 73

    Asignatura: Algoritmia y Estructura de Datos

    void lista::insertar_final()

    { pnodo nuevo,aux;

    int valor;

    nuevo = new nodo;

    coutvalor;

    (*nuevo).dato = valor;

    (*nuevo).sig = NULL;

    if ( pL == NULL )

    pL = nuevo;

    else

    { aux = pL;

    while ( (*aux).sig != NULL )

    aux = (*aux).sig;

    (*aux).sig = nuevo;

    }

    }

    void lista::insertar_despues()

    { pnodo nuevo,r,temp;

    int num;

    nuevo=new nodo;

    cout(*nuevo).dato;

    coutnum;

    r=lista::buscar_despues(num);

    if(r==NULL)

    cout

  • Pg. 74

    Asignatura: Algoritmia y Estructura de Datos

    if(ban==0)

    {cout

  • Pg. 75

    Asignatura: Algoritmia y Estructura de Datos

    void lista::eliminar_inicio()

    { pnodo aux;

    if(pL==NULL)

    { cout

  • Pg. 76

    Asignatura: Algoritmia y Estructura de Datos

    cout

  • Pg. 77

    Asignatura: Algoritmia y Estructura de Datos

    Gracias a los punteros ant y sig es que puede recorrerse la LDE en forma bidireccional, lo cual constituye una ventaja importante frente a una lista enlazada simple que slo puede recorrerse en un sentido.

    En contraparte, el espacio ocupado en memoria es mayor debido a la inclusin de un segundo puntero.

    Para tener acceso a la lista es necesario un puntero Ld que contenga la direccin del primer nodo.

    El campo ant del primer nodo tiene valor NULO, pues no existe un nodo anterior a este, anlogamente, el ltimo nodo tiene tambin en su campo sig el valor NULO para expresar el hecho de que no existe un siguiente nodo.

    ListaDE NULL

    NULL

    Actividades

    1. Utilizando los algoritmos de implementacin de la lista simplemente enlazada, implementar los programas para:

    a. Lista Circular.

    b. Lista Doblemente Enlazada.

    15.4 Colas

    Una Cola es una lista ordenada de elementos en la cual las inserciones se realizan por un extremo llamado Final y las eliminaciones por el otro extremo denominado Frente. Una Cola es una estructura tipo FIFO ( First In - First Out ) ya que los elementos se sacan de la cola en el mismo orden en que fueron insertados. La estructura de los nodos de una cola es la siguiente:

    Para especificar una cola son necesarios dos punteros, uno que apunte al primer elemento de la cola y el otro al ltimo elemento de la cola.

    Cola NULL

    En una cola se definen dos operaciones:

    Encolar: insertar un nuevo elemento al final de la cola

    Desencolar: eliminar el elemento del comienzo de la cola

    12 30 21 54

    dato sig

    12 30 21 54

  • Pg. 78

    Asignatura: Algoritmia y Estructura de Datos

    Cola.h

    #include

    using namespace std;

    struct nodo

    { int dato;

    nodo *sig;

    };

    typedef nodo *pnodo;

    class cola

    { private:

    pnodo pL;

    public:

    cola();

    ~cola();

    void encolar();

    void desencolar();

    void mostrar();

    };

    cola::cola()

    { pL = NULL; }

    cola::~cola()

    { pnodo p,q;

    if ( pL != NULL )

    { p = pL;

    while ( p != NULL )

    { q = (*p).sig;

    delete p;

    p = q;

    }

    pL=p;

    }

    }

    void cola::encolar()

    { pnodo nuevo,aux;

    int valor;

    nuevo = new nodo;

    coutvalor;

    (*nuevo).dato = valor;

    (*nuevo).sig = NULL;

    if ( pL == NULL )

    pL = nuevo;

    else

    { aux = pL;

    while ( (*aux).sig != NULL )

    aux = (*aux).sig;

    (*aux).sig = nuevo;

    }

    }

  • Pg. 79

    Asignatura: Algoritmia y Estructura de Datos

    void cola::desencolar()

    { pnodo aux;

    if(pL==NULL)

    { cout

  • Pg. 80

    Asignatura: Algoritmia y Estructura de Datos

    15.5 Pilas

    Una Pila es una lista de elementos en la cual las inserciones y las eliminaciones se realizan por un mismo extremo llamado Cima.

    Una Pila es una estructura tipo LIFO ( Last In - First Out ) ya que los elementos se sacan de la pila en orden contrario al que fueron insertados.

    La estructura de los nodos de una pila es la siguiente:

    Para especificar una pila es necesario un puntero, que apunte al primer elemento de la pila, es decir a la cima.

    Pila NULL

    En una pila slo estn permitidas dos operaciones:

    Apilar: Insertar un elemento por el lado de la cima

    Desapilar: Eliminar el elemento de la cima de la pila

    Pila.h

    #include

    using namespace std;

    struct nodo

    { int dato;

    nodo *sig;

    };

    typedef nodo *pnodo;

    class stack

    { private:

    pnodo pL;

    public:

    stack();

    ~stack();

    void apilar();

    void desapilar();

    void mostrar();

    };

    stack::stack()

    { pL = NULL;

    }

    stack::~stack()

    { pnodo p,q;

    if ( pL != NULL )

    { p = pL;

    dato sig

    12 30 21 54

  • Pg. 81

    Asignatura: Algoritmia y Estructura de Datos

    while ( p != NULL )

    { q = (*p).sig;

    delete p;

    p = q;

    }

    pL=p;

    }

    }

    void stack::apilar()

    { pnodo nuevo,aux;

    int valor;

    nuevo = new nodo;

    coutvalor;

    (*nuevo).dato = valor;

    (*nuevo).sig = NULL;

    if ( pL == NULL )

    pL = nuevo;

    else

    { aux = pL;

    while ( (*aux).sig != NULL )

    aux = (*aux).sig;

    (*aux).sig = nuevo;

    }

    }

    void stack::desapilar()

    {pnodo aux=pL,temp;

    if(pL==NULL)

    { cout

  • Pg. 82

    Asignatura: Algoritmia y Estructura de Datos

    Pila.cpp

    #include

    #include "Pila.h"

    using namespace std;

    void main()

    { stack S; int opc;

    do

    { cout

  • Pg. 83

    Asignatura: Algoritmia y Estructura de Datos

    Conceptos Bsicos sobre rboles

    Hoja: Todo nodo que no tiene hijos.

    Ejemplo: B, C, H, I, P, Q, K, L, M, N

    Peso del rbol: Cantidad de Hojas.

    Ejemplo: 10

    Camino: Enlace entre dos nodos consecutivos y rama es un camino que termina en hoja.

    Ejemplo: camino ( A , Q ) = A E J Q

    Longitud del camino: Es la cantidad de aristas que conforman un camino.

    Ejemplo: longitud_camino ( A , Q ) = 3

    Nivel: Cada nodo tiene asociado un nivel, determinado por la logintud de camino desde la raiz hasta el nodo especifico.

    Ejemplo:

    Nivel 0 A

    Nivel 1 B,C,D,E,F,G

    Nivel 2 H,I,J,K,L,M,N

    Nivel 3 P,Q

    Profundidad de un rbol: Es el numero mximo de nodos en una rama. Es decir nivel mas alto de los nodos ms uno.

    Ejemplo:

    profundidad = nivel +1

    profundidad = 3 +1 = 4

    Representacin Primer Hijo Siguiente Hermano

    Cada nodo del rbol solo tiene dos punteros, uno para apuntar a su primer hijo y otro para apuntar a su siguiente hermano.

    A

    B C D E F G

    H I J K L M N

    P Q

  • Pg. 84

    Asignatura: Algoritmia y Estructura de Datos

    #include

    #define MAX 10

    using namespace std;

    struct nodo

    { int dato;

    nodo * hijo;

    nodo * her;

    };

    typedef nodo *pnodo;

    class arbol

    {public: //cambiar a privada para recursividad de mostrar

    pnodo rpri;

    public:

    arbol();

    ~arbol();

    pnodo buscar(pnodo aux, pnodo pos,int d);

    void mostrar(pnodo aux);

    void inserta_principal();

    void inserta_hijo();

    void inserta_hermano();

    };

    arbol::arbol()

    {rpri =NULL;}

    arbol::~arbol()

    { }

    pnodo arbol::buscar(pnodo aux, pnodo pos, int d)

    { pnodo aux2;

    if (aux==NULL)

    { pos=NULL; }

    else

    { if((*aux).dato ==d)

    { pos=aux;

    }

    else

    {

    aux2=(*aux).hijo;

    do

    { while(aux2!=NULL && (*aux2).hijo ==NULL)

    { if((*aux2).dato==d)

    { pos=aux2;

    break;

    }

    aux2=(*aux2).her;

    }

    if(aux2==NULL && pos==NULL)

    return NULL;

    if(aux2!=NULL)

    { pos=buscar(aux2,pos,d);

    aux2=(*aux2).her;

    }

    else

    break;

    }while(aux2!=NULL);

    }

    }

    return pos;

    }

  • Pg. 85

    Asignatura: Algoritmia y Estructura de Datos

    void arbol::mostrar(pnodo aux)

    {pnodo aux2,aux3;

    //usando recursion para mostrar

    if(aux==rpri)

    { cout

  • Pg. 86

    Asignatura: Algoritmia y Estructura de Datos

    void arbol::inserta_hermano()

    {pnodo herma,pos=NULL;

    int num;

    herma=new nodo;

    cout

  • Pg. 87

    Asignatura: Algoritmia y Estructura de Datos

    16.2 rbol Binario

    Un rbol Binario es aquel en el que cada uno de sus nodos puede tener 0, 1 o 2 hijos.

    Raiz

    Subarbol

    Izquierdo

    Subarbol

    Derecho

    Ejemplo:

    A

    B C

    D E F

    G

    Recorrido de rboles Binarios

    a) Recorrido en Orden

    Recorrer el subrbol izquierdo en orden

    Visitar el nodo raz

    Recorrer el subrbol derecho en orden

    b) Recorrido en Pre-Orden

    Visitar el nodo raz

    Recorrer el subrbol izquierdo en pre-orden

    Recorrer el subrbol derecho en pre-orden

    c) Recorrido en Post-Orden

    Recorrer el subrbol izquierdo en post-orden

    Recorrer el subrbol derecho en post-orden

    Visitar el nodo raz

    rbol de Expresin

    Es un rbol binario en el que las hojas contienen los operandos y los nodos internos los operadores de una expresin matemtica.

    Ejemplo: ( a ^ ( b * c ) ) + ( ( d * e ) f ) / g )

    +

    /

    a g

    b c

    -

    f

    d e

    *

    *

    ^

  • Pg. 88

    Asignatura: Algoritmia y Estructura de Datos

    16.3 rboles Binarios de Bsqueda ( ABB )

    Un ABB es un rbol binario en el que para todos sus nodos ( excepto sus hojas ) se cumple que el dato almacenado en l, es mayor a todos los datos de los nodos del subrbol izquierdo pero menor a todos los datos de los nodos del subrbol derecho.

    Ejemplo:

    6

    2 8

    1 4

    3

    10

    9

    Para poder tener acceso al rbol es necesario un puntero que contenga la direccin de la raz.

    arbolabb.h

    #include

    using namespace std;

    struct nodoABB

    { nodoABB *hizq;

    int dato;

    nodoABB *hder;

    };

    typedef nodoABB *pnodoABB;

    class abb

    { private:

    pnodoABB praiz;

    public:

    abb();

    ~abb();

    pnodoABB getraiz();

    pnodoABB buscar( int x );

    void insertar( int x );

    void imprimeenorden( pnodoABB p );

    void imprimepreorden( pnodoABB p );

    void imprimepostorden( pnodoABB p );

    void eliminaarbol( pnodoABB p );

    };

    abb::abb()

    { praiz = NULL;

    }

    abb::~abb()

    { eliminaarbol(praiz);

    praiz = NULL;

    }

  • Pg. 89

    Asignatura: Algoritmia y Estructura de Datos

    pnodoABB abb::getraiz()

    { return praiz;

    }

    pnodoABB abb::buscar( int x )

    { pnodoABB p; int ok;

    if ( praiz == NULL )

    return NULL;

    else

    { ok = 0;

    p = praiz;

    while ( p != NULL && ok == 0 )

    if ( (*p).dato == x )

    ok = 1;

    else

    if ( x < (*p).dato )

    p = (*p).hizq;

    else

    p = (*p).hder;

    return p;

    }

    }

    void abb::insertar( int x )

    { pnodoABB p,q,r,pos;

    char h;

    p = new nodoABB;

    (*p).dato = x;

    (*p).hizq = NULL;

    (*p).hder = NULL;

    if ( praiz == NULL )

    praiz = p;

    else

    { pos=buscar(x);

    if(pos!=NULL)

    cout

  • Pg. 90

    Asignatura: Algoritmia y Estructura de Datos

    void abb::imprimeenorden( pnodoABB p )

    {

    pnodoABB Ai,Ad;

    if ( p != NULL )

    { Ai = (*p).hizq;

    Ad = (*p).hder;

    imprimeenorden(Ai);

    cout

  • Pg. 91

    Asignatura: Algoritmia y Estructura de Datos

    ArbolBinario.cpp

    #include

    #include "arbolabb.h"

    using namespace std;

    void main()

    { abb A;

    pnodoABB b,r;

    int i, x, sn, n, cn,opc;

    do

    { cout

  • Pg. 92

    Asignatura: Algoritmia y Estructura de Datos

    16.4 Grafos

    Un grafo es el objeto abstracto bsico de estudio en teora de los grafos. Informalmente, un grafo se concibe y se representa como un conjunto de objetos llamados vrtices o nodos unidos por enlaces llamados aristas. Las aristas pueden tener direccin (grafo dirigido).

    Consta de vrtices (o nodos) y aristas. Los vrtices son objetos que contienen informacin y las aristas son conexiones entre vrtices.

    Un camino entre dos vrtices es una lista de vrtices en la que dos elementos sucesivos estn conectados por una arista del grafo.

    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.

    Un camino simple es un camino desde un nodo a otro en el que ningn nodo se repite (no se pasa dos veces). Si el camino simple tiene como primer y ltimo elemento al mismo nodo se denomina ciclo. Cuando el grafo no tiene ciclos tenemos un rbol (ver rboles). Varios rboles independientes forman un bosque. Un rbol de expansin de un grafo es una reduccin del grafo en el que solo entran a formar parte el nmero mnimo de aristas que forman un rbol y conectan a todos los nodos.

    Segn el nmero de aristas que contiene, un grafo es completo si cuenta con todas las aristas posibles (es decir, todos los nodos estn conectados con todos), disperso si tiene relativamente pocas aristas y denso si le faltan pocas para ser completo. 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: estos son llamados grafos no dirigidos. Sin embargo, en ocasiones tenemos que las uniones son unidireccionales. Estas uniones se suelen dibujar con una flecha y definen un grafo dirigido. Cuando las aristas llevan un coste asociado (un entero al que se denomina peso) el grafo es ponderado. Una red es un grafo dirigido y ponderado.

    Grafo no dirigido

    Grafo dirigido

    Ejemplo:

    La imagen es una representacin del siguiente grafo:

    V:={1,2,3,4,5,6}

    E:={{1,2},{1,5},{2,3},{2,5},{3,4},{4,5},{4,6}}

    El hecho que el vrtice 1 sea adyacente con el vrtice 2 puede ser denotado como 1 ~ 2.

    En la Teora de las categoras una categora puede ser considerada como un multigrafo dirigido, con los objetos como vrtices y los morfismos como aristas dirigidas.

    En ciencias de la computacin los grafos dirigidos son usados para representar mquinas de estado finito y algunas otras estructuras discretas.

    Una relacin binaria R en un conjunto X es un grafo dirigido simple. Dos vrtices a, b en X estn conectados por una arista dirigida ab si aRb.

    Actividades

    1. Utilizando las estructuras de datos estudiadas, construir el programa que implemente la definicin y las operaciones de un grafo.

  • Pg. 93

    Asignatura: Algoritmia y Estructura de Datos

    CUARTA UNIDAD

    Tema N 17: Archivos (Ficheros)

    Existen programas que trabajan con informacin almacenada en memoria principal, pero no es apropiado porque:

    - Los datos con los que necesita trabajar el programa son demasiado grandes (ocupan mucha memoria) para que entren en la memoria principal.

    - Interesa mantener la informacin despus de cada ejecucin, por eso se necesita utilizar datos procedentes de otros programas (editores, etc.), o generar datos para que puedan ser utilizados por otros programas.

    Para estos casos se necesitan ficheros para contener la informacin en memoria secundaria (disco duro, cds, etc.).

    Conceptos Bsicos

    CAMPO: El campo es la unidad minima de informacin de un registro. Es un item de campos elementales como nombre, numero de empleados, ciudad, etc. Los caracteres se agrupan en campos de datos. Se caracteriza por su tamano o longitud y su tipo de dato, por lo general se supone como longitud fija.

    Ejemplo: Campos

    Nombre Direccion FechaNacimiento

    Los datos contenidos en un campo pueden dividirse en subcampos.

    Ejemplo para el campo fecha:

    0 7 0 4 2 0 0 8

    Dia Mes Ano

    REGISTRO: Es una coleccin de informacin por lo general relacionada a una entidad en particular. Los registros organizados en campos se llaman registros lgicos.

    Ejemplo:

    Empleado

    Pueden ser todos de longitud fija, es decir para el ejemplo anterior, los registros empleados pueden contener el mismo nmero de campos: nombre, fecha de nacimiento, direccion, etc.

    FICHERO: Es una coleccin de registros relacionados entre si, con aspectos en comun y organizados para un propsito especifico.

    Nombre Direccion FechaNacimiento

  • Pg. 94

    Asignatura: Algoritmia y Estructura de Datos

    BASE DE DATOS: Es una coleccin de archivos que contienen datos relacionados y se acceden a traves de un conjunto de programas. En C++ un fichero es simplemente un flujo externo que se puede abrir para entrada (dando lugar a un flujo de archivo de entrada), para salida (dando lugar a un flujo de archivo de salida) o para entrada-salida (archivo o fichero de entrada-salida o archivo de E/S).

    Una biblioteca en C++ que proporciona funciones y operadores para el manejo de ficheros es la

    biblioteca fstream. #include

    Declaracin de Variables de tipo "Fichero":

    ifstream nombrefichero; // Para ficheros de entrada

    ofstream nombrefichero; // Para ficheros de salida

    Apertura de Ficheros de Texto:

    (La lectura y la escritura en un archivo de texto se puede realizar directamente con los operadores > al igual que se realiza sobre los flujos estndares cin y cout.

    // Apertura para Lectura

    in.open(nombrefichero);

    // Apertura para Escritura(borra el contenido si lo hubiera)

    out.open(nombrefichero);

    // Apertura para aadir datos al final

    out.open(nombrefichero,ios::app);

    // Apertura para Lectura y Escritura

    in.open(nombrefichero,ios::in|ios:: out);

    // Apertura para Lectura y Escritura

    out.open(nombrefichero,ios::in|ios:: out);

    Apertura de Ficheros Binarios:

    Tiene la informacin tal cual est en memoria, es decir, sin convertirla a texto, La manera de leer y escribir en ficheros binarios consiste en utilizar las funciones read() y write().

    // Apertura para Lectura

    in.open(nombre,ios::binary);

    // Apertura para Escritura(borra el contenido si lo hubiera)

    out.open(nombre,ios::binary);

    // Apertura para aadir datos al final

    out.open(nombre,ios::binary| ios::app);

    // Apertura para Lectura y Escritura

    in.open(nombre, ios::binary |ios::in | ios:: out);

    // Apertura para Lectura y Escritura

    out.open(nombre, ios::binary |ios::in | ios:: out);

    Cierre de ficheros.

    Un fichero anteriormente abierto y con un descriptor asociado a l debe ser cerrado con el fin de liberar los recursos asociados a l de la siguiente forma:

    nombrefichero.close()

  • Pg. 95

    Asignatura: Algoritmia y Estructura de Datos

    Ejemplo 1: Crear Archivos1.cpp (para crear un fichero llamado ejemplo.txt)

    Deteccin de fin de fichero y otras funciones.

    La funcin eof() que devuelve true si se ha alcanzado el final del fichero y falso en cualquier otro caso.

    Ejemplo2: Leer el archivo creado ejemplo.txt.

    Actividades

    1. Presentar el algoritmo de Ordenacin sobre:

    a. Ordenacin por Seleccin.

    b. Ordenacin por Insercin Directa.

    c. Ordenacin por Insercin Binaria.

    d. Ordenacin Shell.

    e. Ordenacin Heapsort.

    f. Ordenacin Quicksort.

    #include

    #include

    using namespace std;

    void main()

    { ofstream fichero("ejemplo.txt"); //Fichero de salida

    fichero

  • Pg. 96

    Asignatura: Algoritmia y Estructura de Datos

    REFERENCIAS BIBLIOGRFICAS

    Y DIRECCIONES ELECTRNICAS

    Ceballos Sierra, Francisco. C / C++ curso de programacin. 6ta ed. Mexico: AlfaOmega; 2006. Joyanes Aguilar, Luis. Fundamentos de Programacin. 2da. ed. Espaa: McGraw-Hill; 2003. Joyanes Aguilar, Luis. Estructura de Datos. 1ra. ed. Espaa: McGraw-Hill; 2000. Raffo Lecca, Eduardo. Turbo C++. 1 ed. Lima: Mundigraph; 2000. Baeza Yates, Ricardo. Algorimtia. Dpto. de Cs. de la Computacin, Univ. de Chile: 2002. Disponible en www.dcc.uchile.cl/~rbaeza/inf/algoritmia.pdf Cceres Gonzlez Abdiel E. Dr. Apuntes para el curso de Estructuras de datos en C/C++ . ITESM-CCM: 2005. Disponible en http://bjcu.uca.edu.ni/LibrosIsti/estrdatos.pdf Rodrguez Moreno, Pedro. El Lenguaje C (Programacin Avanzada). Sistemas de Computacin I (IECI) Departamento de Sistemas de Informacin. Facultad de Ciencias Empresariales. Chile; 2005. Disponible en http://www.face.ubiobio.cl/~prodrigu/sc1/Cap2-Lenguaje-C-(Programacion-Avanzada)-part-1.pdf