You are on page 1of 139

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD

ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA


CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA


ESCUELA DE CIENCIAS BSICAS, TECNOLOGA E INGENIERA
PROGRAMA DE INGENIERA DE SISTEMAS

301304 INTRODUCCIN A LA PROGRAMACIN


MIRIAN BENAVIDES RUANO
(Director Nacional)

SERGIO BERMDEZ
ROJAS Acreditador

PASTO
Julio de 2012

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ASPECTOS DE PROPIEDAD INTELECTUAL Y VERSIONAMIENTO

El presente mdulo fue diseado en el ao 2004 por el Ing. IVAN


ARTURO LPEZ, docente de la UNAD, y ubicado en el CEAD de Popayn, el
Ing. Lpez es Ingeniero de Sistemas, y especialista en Pedagoga para el
Desarrollo del Aprendizaje Autnomo y Estudiante master educacin y tics
UOC (Universidad Oberta de Catalua). Ha tenido tres actualizaciones, una
desarrollada por el Ing. Ivn Lpez en los aos 2005, la segunda hecha en el
ao 2008 por la Ing. IRINA NARVEZ ESPINOSA, quien ha sido tutora de la
UNAD en los CEAD de Acacias y Jos Acevedo y Gmez, desde el ao 2001, es
Ingeniera de Sistemas, especialista en Pedagoga para el Desarrollo del
Aprendizaje Autnomo y aspirante al ttulo de magster en Informtica
Educativa.
En el ao 2009 el Ing. SERGIO BERMDEZ ROJAS, tutor del CEAD
Barranquilla, apoy el proceso de revisin de estilo del mdulo y dio aportes
disciplinares, didcticos y pedaggicos en el proceso de acreditacin de material
didctico desarrollado en el mes de JULIO de 2009.
En ENERO de 2011 el mdulo fue actualizado por la Ing. MIRIAN
BENAVIDES RUANO, Docente Auxiliar en el CEAD Pasto, Ingeniera de
Sistemas, Especialista en Docencia Universitaria y Especialista en Informtica y
Telemtica, quien se desempea como Directora del curso a nivel nacional desde
AGOSTO de 2010. Quien adems realiz La actualizacin ms reciente en
JULIO de 2012.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

INTRODUCCIN

El curso de introduccin a la programacin es de gran importancia puesto que


permite familiarizar al estudiante con la metodologa requerida para la resolucin
de problemas a travs de medios informticos, presentando los elementos
bsicos en la programacin. Para ello, es indispensable que los estudiantes
cuenten con los conocimientos adquiridos en el curso de algoritmos. El lenguaje
de programacin que se utilizar es C, bajo los paradigmas de programacin
estructurada y procedural.
Este mdulo est organizado por unidades, captulos y lecciones. Inicia
retomando los aspectos generales de la programacin, un acercamiento al
lenguaje de programacin C, las caractersticas del editor que se utilizar y las
estructuras de programacin bsicas a utilizar como las sentencias de control
selectivas y repetitivas. Tambin se abordan temas como el trabajo con funciones
y la recursividad.
En la segunda unidad se aborda el tema de las estructuras estticas para
almacenamiento de informacin, y se dedica todo un captulo a este tema,
aunque no es suficiente para abordar todos los apartados, por lo que se confirma
la necesidad de que el estudiante se apropie de los temas e investigue ms por
su cuenta, aproveche los recursos de biblioteca y las consultas de Internet para
ampliar aun ms los conceptos. Se trabaja el tema de vectores (unidimensionales
y bidimensionales), y las cadenas de caracteres, los mtodos de ordenamiento y
de bsqueda, as como el trabajo con punteros.
Finalmente, en atencin a la importancia del almacenamiento de informacin en
medios externos, para permitir su recuperacin en el momento que se necesite,
en la tercera unidad se reflexiona sobre el manejo de estructuras y archivos,
donde se destacan los aspectos ms importantes como caractersticas,
clasificacin y mecanismos de acceso a la informacin.
Aunque para la realizacin del mdulo se han realizado esfuerzos por sintetizar
los temas ms importantes de la programacin, es indispensable que los
estudiantes no se queden nicamente con lo expuesto en este documento, sino
que traten de profundizar ms, aprovechando las mltiples opciones que se
ofrecen en la red; esta tarea puede ser apasionante, pues es la base para
abordar los temas que se acercan cuando inicien el trabajo con bases de datos.
Para terminar, solo resta decir que este mdulo est construido, con base en una
recopilacin de conceptos de diferente autores, que llevarn al estudiante a un
aprendizaje significativo, complementado con ejercicios, una amplia referencia
bibliogrfica y direcciones web, que posibilitarn una mayor autonoma y
confianza por parte del estudiante.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

NDICE DE CONTENIDO
ITEM

TEMA

PAG

INTRODUCCIN

1.0

UNIDAD 1: INTRODUCCIN A LA PROGRAMACIN EN C

1.1

CAPITULO 1: GENERALIDADES

11

1.1.1

Leccin 1: Revisin de conceptos generales de programacin

11

1.1.2

Leccin 2: Historia del Lenguaje C

13

1.1.3

Leccin 3: Traductores de lenguaje

15

1.1.4

Leccin 4: Editor de Lenguaje C

16

1.1.5

Leccin 5: Depuracin de Programas

19

1.2

CAPITULO 2: CONCEPTOS BSICOS DE LOS PROGRAMAS EN C

22

1.2.1

Leccin 6: Estructura general de un programa en C

22

1.2.2

Leccin 7: Elementos de un programa en C

24

1.2.3

Leccin 8: Tipos de datos

24

1.2.4

Leccin 9: Entradas y salidas

26

1.2.5

Leccin 10: Operadores y expresiones

28

1.3

CAPITULO 3: SENTENCIAS DE CONTROL Y FUNCIONES

30

1.3.1

Leccin 11: Sentencias de control selectiva if else, switch

30

1.3.2

Leccin 12: Sentencias de control repetitivas for, while, do while

32

1.3.3

Leccin 13: Funciones, declaracin

34

1.3.4

Leccin 14: Llamados de funcin

36

1.3.5

Leccin 15: Recursividad

37

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

1.4

ACTIVIDADES DE AUTOEVALUACIN DE LA UNIDAD 1

39

2.0

UNIDAD 2: ARREGLOS

40

2.1

CAPITULO 4: ARREGLOS Y CADENAS

41

2.1.1

Leccin 16: Definicin y Declaracin

41

2.1.2

Leccin 17: Arreglos Unidimensionales

44

2.1.3

Leccin 18: Arreglos Bidimensionales

46

2.1.4

Leccin 19: Cadenas de Caracter

47

2.1.5

Leccin 20: Funciones de cadena

48

2.2

CAPITULO 5: ORDENACIN Y BSQUEDA

51

2.2.1

Leccin 21: Importancia de la organizacin de datos

51

2.2.2

Leccin 22: Ordenacin

51

2.2.3

Leccin 23: Mtodos de ordenacin

53

2.2.4

Leccin 24: Bsqueda

69

2.2.5

Leccin 25: Mtodos de bsqueda

70

2.3

CAPITULO 6: PUNTEROS O APUNTADORES

74

2.3.1

Leccin 26: Definicin

74

2.3.2

Leccin 27: Declaracin de punteros

74

2.3.3

Leccin 28: Operadores de punteros

75

2.3.4

Leccin 29: Apuntadores y funciones

78

2.3.5

Leccin 30: Apuntadores y arreglos

79

2.4

ACTIVIDADES DE AUTOEVALUACIN DE LA UNIDAD 2

82

3.0

UNIDAD 3: ESTRUCTURAS Y ARCHIVOS

83

3.1

CAPITULO 7: ESTRUCTURAS

86

3.1.1

Leccin 31: Declaracin de una Estructura

86

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

3.1.2

Leccin 32: Asignacin de Estructuras

87

3.1.3

Leccin 33: Estructuras Anidadas

88

3.1.4

Leccin 34: Estructuras Annimas

89

3.1.5

Leccin 35: Ejercicios

92

3.2

CAPITULO 8: ARCHIVOS

93

3.2.1

Leccin 36: Definicin

93

3.2.2

Leccin 37: Caractersticas de los Archivos

94

3.2.3

Leccin 38: Clasificacin de los Archivos

95

3.2.4

Leccin 39: Tipos de Archivos

97

3.2.5

Leccin 40: Ejercicios

98

3.3

CAPITULO 9: ACCESO A LOS ARCHIVOS

99

3.3.1

Leccin 41: Operaciones que se realizan a los Archivos

99

3.3.2

Leccin 42: Organizacin y acceso de los Archivos

101

3.3.3

Leccin 43: Instrucciones para manejar archivos

102

3.3.4

Leccin 44: Archivos tipo Texto

105

3.3.5

Leccin 45: Archivos de acceso directo

114

3.4

ACTIVIDADES DE AUTOEVALUACIN DE LA UNIDAD 3

121

BIBLIOGRAFA

113

ANEXO 1: Tipos de Datos

124

ANEXO 2: ndice de funciones

128

ANEXO 3: Errores Comunes de Programacin

135

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

LISTADO DE TABLAS

TEMA

PAG

TABLA 1. Tipos de datos bsicos

25

TABLA 2. Funciones para trabajar con archivos

97

TABLA 3. Tipos de datos

124

TABLA 4. Operadores

127

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

LISTADO DE GRFICOS Y FIGURAS

TEMA

PAG

FIGURA 1. Proceso de compilacin y linkado

16

FIGURA 2. Entorno de trabajo Dev-C++

17

FIGURA 3. Torres de Hanoi

39

FIGURA 4. Vector

44

FIGURA 5. Matriz

46

FIGURA 6. Ventana de ejecucin 1

106

FIGURA 7. Recomendacin

107

FIGURA 8. Ventana de ejecucin 2

109

FIGURA 9. Ventana de ejecucin 3

112

FIGURA 10. Ventana de ejecucin 4

115

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

UNIDAD 1
Nombre de
Unidad
Introduccin

la

INTRODUCCIN A LA PROGRAMACIN EN C
En la primera unidad se busca crear el enlace de los conceptos que los
estudiantes han adquirido en el curso previo de algoritmos y la utilizacin
de un lenguaje de programacin, en este caso C, como medio para
desarrollar soluciones computacionales, expresadas en programas. Para
lograrlo se parte de reconocer los conceptos generales de programacin,
analizar la importancia del lenguaje C, revisando su trayectoria,
analizando su entono de trabajo y las estructuras que utiliza para el
desarrollo de programas.
Para abordar de manera adecuada la construccin de programas, se
estudian los tipos de datos, las sentencias de control de datos, tanto
selectivas como repetitivas, y el manejo de funciones.
Cabe resaltar que si bien es cierto que para la construccin del presente
mdulo, se tuvo en cuenta textos de autores reconocidos y sitios web
especializados en programacin, es vital que todos los estudiantes estn
siempre atentos a las posibilidades que les ofrece la web, mediante
diversos recursos multimediales (videos, tutoriales, textos en lnea) para
ampliar y profundizar sus conocimientos.

Justificacin

La primera unidad permite que el estudiante realice un repaso sobre la


conceptualizacin del tema de programacin de computadores, y lo va
involucrando en actividades prcticas utilizando el editor para el lenguaje
C.
Es importante que los estudiantes retomen el modulo de algoritmos, para
recordar algunos de los conceptos olvidados, y consulten bibliografa de
los temas que se van abordando.

Intencionalidades
Formativas

Afianzar conocimientos referentes a la programacin de computadoras,


con un lenguaje especifico
Propsitos de la unidad

Realizar recuento de las principales caractersticas de


programacin de computadoras
Manejar el entorno de programacin con el compilador C
Fortalecer los temas de funciones

la

Objetivos de la unidad

Conocer la funcionalidad del editor del compilador aqu utilizado.


Motivar a descubrir que otras funciones tiene el editor del lenguaje.
Determinar las tcnicas de programacin, utilizando C, como
lenguaje de base.

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Competencias de la unidad

El estudiante domina los conceptos previos necesarios para el


desarrollo de programas en C
El estudiante reconoce el funcionamiento general del editor de C
El estudiante aplica las funciones como herramienta fundamental en
la modularizacin de los programas

Metas de aprendizaje
El estudiante es capaz de desarrollar programas mediante la utilizacin
de funciones.

Denominacin de
captulos

Captulo 1: Generalidades
Captulo 2: Conceptos bsicos de los programas en C
Captulo 3: Sentencias de control y funciones

10

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 1: GENERALIDADES

Introduccin
Es fundamental iniciar el curso de introduccin a la programacin, abordando
contenidos que ubiquen al estudiante en el entorno de trabajo, por ello se
incluyen temticas generales de gran importancia para comprender los conceptos
bsicos de programacin estructurada y procedural.
Es as como se han elegido cinco lecciones que parten de informacin general
sobre los aspectos ms relevantes de la programacin, los requerimientos que se
deben tener en cuenta antes de iniciar con la codificacin propiamente dicha de
programas en el Lenguaje C, la descripcin del entorno de trabajo del lenguaje,
donde se explica de manera general la forma como se construye un programa,
utilizando el entorno propio del lenguaje de programacin y las estructuras
bsicas que constituyen un programa en C.
Se analiza la temtica de los compiladores y de manera especfica el compilador
del lenguaje C, para apoyar al estudiante en la comprensin sobre la forma como
un conjunto de instrucciones debidamente estructuradas pueden lograr la
construccin de programas que sirvan de solucin a problemas especficos que
puedan ser resueltos mediante un sistema informtico, partiendo de
interpretaciones adecuadas, diseos slidos y revisiones constantes para
posibilitar depuraciones ptimas que solucionen problemas lgicos y de sintaxis.
Finalmente, debido a que el tema de la programacin es bastante amplio, es
indispensable que el estudiante utilice todos los recursos que se encuentren a su
alcance para lograr una verdadera comprensin de los temas expuestos, puesto
que el mdulo constituye un punto de partida para avanzar en su proceso de
aprendizaje. Queda abierta entonces la invitacin a consultar la bibliografa
sugerida y aprovechar todas las herramientas que se encuentran en la web para
avanzar en el proceso de construccin de conocimiento.

Leccin 1: Revisin de conceptos generales de programacin


Programacin: es un proceso mediante el cual se convierten especificaciones
generales de la solucin de un problema, en instrucciones que el computador
puede interpretar y que producen los resultados deseados (desarrollo de
software).
Programa: lista de instrucciones que el computador sigue para convertir datos en
informacin. Estas dependen del lenguaje de programacin que se utilice.

11

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Un programa debe ser:


Confiable y funcional
Comprensible
Documentado
Fases para la creacin de un programa

Definicin del problema: clara y precisa


Anlisis del problema: requiere identificar
o Datos de salida (informacin que debe producir el programa)
o Datos de entrada (datos que debe suministrar el usuario para lograr
los resultados esperados
o Datos de proceso (frmulas necesarias para procesar los datos)
Diseo de la solucin: lista ordenada y cronolgica de los pasos a seguir
para lograr resultados (diagramas de flujo, pseudocdigo, etc.). Debe ser
simple, clara, precisa, exacta, tener un orden lgico e indicar su inicio y
final.
Codificacin: escribir la solucin del problema en un lenguaje de
programacin (traducir el diagrama de flujo o pseudocdigo en
instrucciones que puedan ser interpretadas por el computador)
Prueba y depuracin: ejecutar el software para identificar y eliminar los
errores (de sintaxis o de tipo lgico)
Documentacin: gua que facilita futuras modificaciones del software

Programacin estructurada: se caracteriza por organizar las instrucciones de


manera secuencial, de tal manera que es posible leer la codificacin desde el
inicio hasta el final en forma continua sin saltar de un lugar a otro, siguiendo el
camino lgico establecido por el programador.
En este paradigma de programacin se debe prestar especial atencin a la etapa
de diseo de la solucin, una vez establecidos los pasos secuenciales, la
codificacin es ms fcil.
Caractersticas: la estructura del programa se realiza de la manera ms clara y
precisa posible, para ello utiliza:
Secuencia: sucesin simple de operaciones
Seleccin: bifurcacin condicional de una o ms operaciones
Iteraccin: repeticin de tareas mientras se cumple una o ms condiciones
Ventajas:
Tiene una estructura clara y por ende una buena presentacin.
Es ms fcil de comprender
Facilita la revisin de la codificacin
Reduce el tiempo de prueba y depuracin

12

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Programacin Procedural: es un tipo de programacin estructurada en donde el


cdigo se divide en porciones llamadas "procedimientos" o "funciones". Este tipo
de programas permite que una porcin de programa sea llamada varias veces sin
que tenga que volver a escribir todo el cdigo, simplemente se realiza el llamado a
la funcin o procedimiento que se requiere. Este tipo de programacin se basa en
subdividir un programa en piezas lgicas para reducir su complejidad segn el
principio de "divide y vencers".
Identacin: utilizacin de sangras (espacios) para facilitar la lectura del programa
puesto que muestra en forma grfica las relaciones entre las instrucciones.
Para aprovechar la identacin en un programa en C se sugiere:
Escribir en la misma columna los indicadores de inicio y fin de cada bloque
de sentencias
Utilizar diferentes sangras para indicar anidamientos de instrucciones
Escribir una instruccin por lnea
Lenguaje de Programacin C
Segn Cesar Becerra:
C es un lenguaje de nivel medio: combina elementos de lenguajes de alto
nivel con la funcionalidad del ensamblador.
Su cdigo es transportable: funciona en equipos APPLEE como en IBM.
Es estructurado: permite el uso de subrutinas (parte del cdigo que maneja
sus propias variables y que pueden ser llamadas en diferentes partes del
programa principal)
Funcionalidad: en un comienzo se utiliz por su potencia y eficacia en
programas de sistemas (sistemas operativos, interpretes, editores,
ensambladores, compiladores, administradores de bases de datos); pero
actualmente para todo tipo de desarrollos.
C es compilador, los lenguajes al ser ejecutados pueden interpretarse (lnea
a lnea), o compilarse (utiliza compilador para ejecutarse, todo el programa
fuente se convierte en programa objeto, de manera que el compilador lo
ejecuta directamente).

Leccin 2: Historia del Lenguaje C


Para hablar de la historia del lenguaje C, es indispensable mencionar que en 1967
Martin Richard creo el lenguaje BCPL que fue la base para la creacin del
lenguaje B escrito por Ken Thompson en 1970.
El lenguaje C es nace por la necesidad de evolucionar el lenguaje de
programacin anterior, el lenguaje B, con el objetivo de recodificar el sistema
13

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

operativo UNIX que, hasta esa fecha, se programaba directamente en


ensamblador, con el inconveniente de estar vinculado a mquinas concretas
(segn el juego de instrucciones de cada mquina). Por tanto, se haca necesario
un lenguaje que permitiese al programador abstraerse de la capa hardware y
conseguir una mayor portabilidad del cdigo, algo que se realiz en B (basndose
en el BCPL de Martin Richard de 1967).
Lo nuevo que Dennis Ritchie le incorpor a C, fue los tipos y estructuras de datos
que consiguen clarificar la programacin y obtener un lenguaje mucho ms
eficiente. Ritchie dise, desde 1970 a 1972 junto a Brian Kernighan, un lenguaje
que permita realizar una programacin estructurada en la que se podan
economizar las expresiones a usar y con el que los desarrolladores podran contar
con un buen conjunto de operadores y tipos de datos para programar tanto en alto
como en bajo nivel de manera simultnea.
Entre sus caractersticas:

Ncleo de lenguaje simple que incluye funciones matemticas y de manejo


de archivos proporcionadas por bibliotecas
Lenguaje flexible que permita programar de manera estructurada y no
estructurada
Inclusin de un sistema de tipos que impeda la realizacin de operaciones
sin sentido
Acceso a memoria de bajo nivel mediante el uso de punteros
Conjunto reducido de palabras reservadas
Paso de parmetros a funciones por valor
Tipos de datos agregados (struct) que permitan combinar, bajo un mismo
tipo, datos de tipos distintos y manejarlos como uno solo.

Como el C es un lenguaje muy poderoso y flexible su uso se difundi muy


rpidamente ms all de los laboratorios Bell. Los programadores de todo el
mundo comenzaron a usarlo para escribir todo tipo de programas. Sin embargo,
diferentes organizaciones comenzaron a utilizar muy pronto sus propias versiones
del C, las pequeas diferencias entre las implementaciones comenzaron a dar
problemas a los programadores. Para resolver este problema, el American National
Stndards (ANSI) formo un comit en 1983 para establecer una definicin estndar
del C, que lleg a ser conocida como C estndar ANSI. Con unas cuantas
excepciones, todos los compiladores del C modernos de adhieren a este estndar.
El lenguaje C inicialmente fue creado para la programacin de:

Sistemas operativos
Intrpretes
Editores
Ensambladores
Compiladores
14

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Administradores de bases de datos.


Actualmente, debido a sus caractersticas, puede ser utilizado para todo tipo de
programas.
En 1983 se form el comit para el estndar ANSI C, con el objetivo de crear un
lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en
1972. Hasta entonces el estndar lo marcaba el libro escrito en 1978 por estos dos
autores mencionados.
En 1980, se comenz a desarrollar el lenguaje C++, su autor fue B. Stroustrup.
Al comienzo era una extensin del lenguaje C que fue denominada C with clases,
sin embargo es considerado por muchos autores como un lenguaje diferente al C.
La evolucin de C++ ha continuado con la aparicin de Java, un lenguaje creado
simplificando algunas cosas de C++ y aadiendo otras, que se utiliza para realizar
aplicaciones en Internet.
El C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a
objetos. Como lenguaje procedural se asemeja al C y es compatible con l,
aunque ya se ha dicho que presenta ciertas ventajas. Como lenguaje orientado a
objetos, se basa en una filosofa completamente diferente, que exige del
programador un completo cambio de mentalidad. Las caractersticas propias de la
Programacin Orientada a Objetos (Object Oriented Programming, u OOP) de
C++ son modificaciones mayores que s cambian radicalmente su naturaleza.
Es de anotar, que para el curso se trabajar con el lenguaje de programacin C,
utilizando los paradigmas de programacin estructurada y procedural.

Leccin 3: Traductores de lenguaje


Al escribir un programa en un lenguaje de programacin determinado, este no se
puede ejecutar directamente, porque el computador no entiende las rdenes, para
lograrlo es indispensable traducirlo en trminos que el procesador del computador
pueda interpretar lo que se le pide hacer. Para realizar ese proceso se tienen los
traductores, que no son otra cosa que programas que tienen como misin analizar
los programas que se han escrito en un lenguaje de alto nivel (programas fuente),
en este caso C, y los traducen a cdigo mquina. Ahora bien, en el computador en
que se ejecuta el programa, el procesador lee e interpreta ese cdigo mquina.
Para entender mejor el proceso de conversin, es necesario aclarar ciertos
trminos:

Programa fuente: es la codificacin escrita por el programador en un lenguaje


15

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

de alto nivel, contiene las sentencias del programa en un lenguaje de


programacin. Para que sea ejecutable debe ser traducido.
Compilador: es el programa que se encarga de traducir los programa fuentes
escritos en el lenguaje de alto nivel a lenguaje de mquina y adems
comprueba que las llamadas a las funciones de librera se realicen de manera
correcta.
Programa objeto: es el programa fuente traducido por el compilador a cdigo
mquina. Hay que recordar, que el programa an no es directamente
ejecutable en esta etapa.
Linker (montador o enlazador): Es el programa encargado de insertar al
programa objeto el cdigo mquina de las funciones de las libreras (archivos
de biblioteca) usadas en el programa y realizar el proceso de montaje, que
producir un programa ejecutable .exe. Las librerias son una coleccin de
cdigo (funciones) ya programado y traducido a cdigo mquina, listo para
utilizar en un programa y que facilita la labor del programador.

Programa Ejecutable: Traduccin completa a cdigo mquina,


realizada por el enlazador, del programa fuente y que ya es directamente
ejecutable.
Representacin de la compilacin y linkado.

Programa
fuente

Compilacin

Programa
objeto

Enlazador

Programa
ejecutable

FIGURA 1. Proceso de compilacin y linkado


De lo anterior se deduce que el cdigo escrito por el programador es el programa
fuente y para que ese programa se ejecute y cumpla el objetivo para el que fue
creado, debe pasar por los procesos de compilacin (programa objeto) y enlace
(programa ejecutable). Al realizar el programa fuente se deben tener cuenta que
las sentencias y sintaxis sean correctas, de lo contrario no se puede compilar.
Leccin 4: Editor de lenguaje C
Para trabajar con C, se utilizar el entorno integrado de desarrollo Dev-C++, que
permite trabajar tanto con C, como con C++. Dev-C++ es un software de libre
distribucin, sujeto a los trminos de la Licencia Pblica General (GPL) de GNU.

16

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Su entorno de trabajo es bastante cmodo y fcil de asimilar, con seguridad la


prctica le permitir familiarizarse con l y lograr buenos desempeos.
Como en el sistema Windows, se trabaja con ventanas que tienen ttulo, barra de
men, barra de conos de acceso rpido, barra de estado y la ventana para
escribir la codificacin del programa.

FIGURA 2. Entorno de trabajo Dev-C++


Antes de iniciar el trabajo con Dev-C++, se recomienda que se personalicen las
siguientes opciones:

Herramientas / Opciones del Entorno / Interfaz / Idioma: Espaol (Castellano)


Herramientas / Opciones de Compilador / Configuracin / Compilador de C /
Soporte para Programas ANSI Estndar en C: Yes.
Herramientas / Opciones de Compilador / Configuracin / Linker / Generar
Informacin de Debug: Yes.
Herramientas / Opciones del Entorno / Principal / Crear archivos de respaldo
(Copia de Seguridad).
Herramientas / Opciones del Editor / Principal / Resaltar llaves y parntesis
concordantes.
17

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Herramientas / Opciones del Editor / Sintaxis / Pre-configuraciones: Classic.

A continuacin se describen las tareas ms importantes:

Editar un programa

Un archivo fuente nuevo: Archivo / Nuevo / Cdigo Fuente. La forma corta es


Ctrl+N
Un fichero fuente ya existente: Archivo / Abrir Proyecto o Archivo. La forma
corta es Ctrl+O
Un fichero fuente ya existente, y que se edit recientemente (Dev-C++ guarda
un historial de los ltimos 10 ficheros fuente distintos que se han abierto):
Archivo / Abrir Archivo Reciente.

Guardar un Fichero Fuente

Archivo / Guardar. La forma corta es Ctrl+S

Compilar un programa

Ejecutar / Compilar. La forma corta es Ctrl+F9

Recuerde que al compilar se tiene el cdigo objeto del programa, pero an no se


tiene el archivo ejecutable. Para generar el ejecutable se debe compilar y ejecutar.

Ejecutar y compilar

Ejecutar / Compilar y Ejecutar. La forma corta es F9

El resultado de la compilacin se pueden observar en la pestaa (ubicada en la


parte inferior) Resultado de la compilacin y Compilador.
Cmo Ejecutar un programa

Para ejecutar un programa, previamente compilado: Ejecutar / Ejecutar. La


forma corta es Ctrl+F10
Para realizar compilacin y ejecucin en un solo paso: Ejecutar / Compilar y
Ejecutar. La forma corta es F9

La ejecucin del programa se realizar en una ventada de MS-DOS emergente.


Por defecto, el fichero ejecutable se crea en el mismo directorio donde se
almacen el fichero fuente.
18

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Cerrar ventanas de edicin

Cierra el documento que se encuentra activo: Archivo / Cerrar. La forma corta


es Alt+F4, o bien, pulsar sobre el editor que se desea cerrar con el botn
derecho del ratn y elegir la opcin Cerrar.
Si hay varios documentos activos y se desea cerrarlos todos, basta con seguir
cualquiera de los procesos anteriores y seleccionar Cerrar Todo.

Leccin 5: Depuracin de programas


La depuracin permite determinar las causas de los errores y por tanto facilita la
correccin de los mismos, en un programa determinado.
El proceso de depuracin
1. Estudio de los sntomas del error
2. Determinacin de las causas
3. Correccin
4. Prueba.
Pueden existir varias causas de error que se pueden agrupar en dos grandes
grupos:
1.- Errores de sintaxis
2.- Errores lgicos:
Para el primer caso, al momento de compilar el programa, ste detecta los
errores y es posible corregirlos.
Mirar anexo referente a errores comunes de programacin y algunas buenas
prcticas de programacin, propuesto por Miguel . Toledo Martnez1
Los errores lgicos son ms difciles de corregir, pues el compilador no los
detecta. Un ejemplo vlido se muestra al analizar un programa para el pago de la
nmina de 500 empleados, se produce una equivocacin a la hora de hacer la
frmula de los descuentos, en lugar de realizar la resta se hace una suma. Como
se puede ver en este ejemplo es un error muy grave, pero de anlisis y no
de sintaxis, por lo tanto el programa no lo detectar. Por lo tanto es indispensable
realizar una buena interpretacin del problema para desarrollar el diseo y
codificacin del programa.

19

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Deteccin de Errores
Cuando la fase de compilacin no ha terminado con xito, en la parte inferior de la
ventana principal aparece activada la pestaa Compilador, con tres columnas:

Lnea: Indica la lnea donde el compilador detect el error sobre el fichero


fuente. Realmente el error puede estar en dicha lnea o en alguna de las
anteriores. Haciendo doble click en esta fila de la pestaa Compilacin, el
cursor se ubicar sobre la lnea del fichero fuente donde el compilador detect
el error.
Unidad: Indica la ubicacin del fichero en la unidad de almacenamiento.
Mensaje: Indica el tipo de error detectado por el compilador. En esta columna
tambin aparece una fila que no tiene asociado nmero de lnea, y que brinda
informacin sobre la funcin en la que se produjo el error.

Despus de corregir un error, se sugiere guardar el archivo y volver a compilar.


Esto hay que hacerlo siempre, aunque aparezcan ms errores en la ventana, ya
que es muy posible que el resto de los errores sean consecuencia del primero.
Cmo Depurar programas
Un depurador permite ejecutar paso a paso un programa, observando el valor de
las variables que ms interesan. Por lo tanto es una herramienta muy til para
detectar errores lgicos que de otro modo resultaran muy difciles de localizar.
Dev C++ cuenta con el depurador gdb integrado. Antes de compilar, y para que se
aada al fichero ejecutable cierta informacin que luego utilizar el depurador de
programas, se debe comprobar que est seleccionada la siguiente opcin:
Herramientas / Opciones de Compilador / Configuracin / Linker / Generar
Informacin de Debug: Yes.
Comenzar la depuracin
1. Colocar el cursor sobre la primera instruccin de main.
2. Pulsar Ctrl+F5, o bien mover el ratn a la parte ms izquierda de una lnea de
cdigo y pulsar el botn izquierdo del ratn en dicha posicin, o bien Depurar /
Aadir / Quitar punto de ruptura. Esto har que quede marcada la instruccin,
indicando que se insertado un punto de ruptura (la lnea quedar marcada en
rojo) que obligar al depurador a detenerse en este punto. Para eliminar los
puntos de ruptura se realiza la misma operacin que para marcarlos.
3. Pulsar F8, o bien, Depurar / Depurar (esto se puede hacer en el Men
Principal, o en las pestaas inferiores), con lo que comenzar la ejecucin
paso a paso del programa, indicndose en azul cul ser la siguiente lnea que
se ejecutar. Adems aparecer una ventana de MS-DOS para que se realicen
las entradas y salidas que el programa necesite durante su depuracin.

20

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Control de la depuracin.
Siguiente Paso (F7): ejecuta la siguiente instruccin del programa (la marcada en
color azul). Cuando dicha instruccin contiene una llamada a una funcin/mtodo,
dicha funcin/mtodo se ejecuta completamente tras seleccionar Siguiente Paso.
Esta posibilidad es muy til cuando hay seguridad de que esa funcin/mtodo no
contiene ningn tipo de error.
Avanzar Paso a Paso (Shift+F7): ejecuta la siguiente instruccin del programa. Si
dicha instruccin contiene una llamada a una funcin o mtodo el ndice de
ejecucin (lnea marcada en azul) se situar en la primera sentencia de dicha
funcin/mtodo para ejecutarlo paso a paso.
Saltar Paso (Ctrl+F7): Ejecuta instrucciones hasta alcanzar el siguiente punto de
ruptura. Cuando no hay puntos de ruptura situados despus de la sentencia
actual, se ejecutarn todas las instrucciones hasta finalizar el programa.
Ir a cursor (Shift+F4): ejecuta sentencias hasta el lugar donde se sita el cursor.
Parar ejecucin (Ctrl+Alt+F2): Detiene la ejecucin paso a paso, sin necesidad
de llegar al final del programa.
Visualizacin del contenido de las variables
Para ello existe la ventana Watch, que se activa pulsando la pestaa Depurar
situada en la parte izquierda del entorno.
Cuando se quiere aadir una variable a dicha ventana se puede: pulsar la opcin
Aadir Watch (F4) para despus escribir el nombre de la variable, o seleccionar
la variable con el ratn y pulsar Aadir Watch.
Para eliminar una variable de la ventana Watch, se marca y se pulsa Quitar
Watch.

21

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 2: CONCEPTOS BSICOS DE LOS PROGRAMAS EN C


Introduccin
C es un lenguaje de programacin de propsito general que utiliza, en relacin a
otros lenguajes, una cantidad bastante limitada de trminos especficos, y cuenta
con control de flujo, estructuras sencillas y un buen conjunto de operadores. Se
podra decir que es un lenguaje pequeo, sencillo y no est especializado en
ningn tipo de aplicacin, lo que lo convierte en un lenguaje potente, con un
campo de aplicacin muy amplio que facilita los procesos de aprendizaje, porque
con dedicacin en poco tiempo se puede conocer lo esencial para desarrollar
buenos programas
En este captulo se abordarn los conceptos bsicos necesarios para iniciar este
recorrido sobre programacin.
Leccin 6: Estructura general de un programa en C
Un programa en C est constituido bsicamente por:

Directivas del pre-procesador:


[declaracin de variables globales]
[prototipos de funciones]
Funcin main
[definiciones de funciones]

Directivas del Pre-procesador: las directivas son instrucciones que se le dan al


compilador antes de que se compile el programa principal. Las ms usuales son:
#include y #define. La directiva #include indica al compilador que lea el archivo
fuente que est a continuacin, y su contenido lo inserte en la posicin donde se
encuentra dicha directiva.
Los archivos mencionados se conocen como archivos de cabecera o archivos de
inclusin. Por ejemplo se puede indicarle al compilador que se va a hacer uso
de las funcionalidades que proporcionan ciertas bibliotecas (en este caso
predefinidas), de tal manera que para emplear la biblioteca de entrada/salida
iostream se debe incluir iostream.h.
#include <iostream.h>
La directiva #define, indica al compilador que defina un tem de datos u operacin
para el programa que se est desarrollando. Por ejemplo:
#define CANTIDAD 100
Esta instruccin indica que se sustituya CANTIDAD por el valor 100, cada vez que
22

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

aparezca en el programa.
Declaracin de variables y constantes globales: las variables y constantes
globales son aquellas cuyo valor afecta a todo el programa, esto es que se
reconocen en todas las funciones donde se utilicen. Deben ubicarse antes de la
funcin main(), se indica el tipo de dato y el nombre de la variable. Ejemplo:
Int VARIABLE1;
Cabecera de funciones: se realiza una descripcin a manera de prototipo
de las funciones que se crearan ms adelante. Ejemplo:
Int funcion1();
Funcin main(): todo programa escrito en C est constituido por funciones, y la
funcin principal es main(), que no puede faltar en ningn programa. Luego del
termino main() se escribe el bloque de cdigo, que generalmente incluye
llamadas a otras funciones definidas por el usuario. Ejemplo de su estructura:
int main()
{ sentencia 1;
sentencia 2;

return(0)
}
Las variables y constantes globales se definen antes de la funcin principal
main(), asi como las variables y constantes locales se declaran en la cabecera del
cuerpo de la funcin principal y de otra funcin definida por usuario.
Las sentencias que se incluyen en las funciones, finaliza con punto y coma (;).
Definicin de funciones: es necesario crear las funciones que se definieron
como prototipos para darle viabilidad al programa. Las funciones se crean para
realizar una tarea especfica, pueden devolver o no datos y utilizar o no
argumentos. Todas las funciones tienen nombre. Recuerde que debe declarar su
prototipo antes de la funcin principal main(), de lo contrario al compilar el
programa se generar un error.
Sentencias: cada una de las ordenes que se le da al compilador por medio del
lenguaje para que efectu una accin. Las sentencias finalizan con punto y coma
(;).

23

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Leccin 7: Elementos de un programa en C


Los elementos ms relevantes de un programa en C son:

Identificadores: un identificador es una secuencia de caracteres, letras,


dgitos y subrayados (_). Para escribir un identificador se debe tener en cuenta:
o El primer carcter slo puede ser una letra o un subrayado (no pueden
iniciar con dgitos).
o Son sensibles a las maysculas, esto es, existe diferencia entre: UNAD,
Unad, uNad.
o Pueden tener cualquier longitud, pero slo son significativos los 32
primeros.
o No pueden ser palabras reservadas, como if, switch, int, entre otras.

Palabras reservadas: son trminos especiales que hacen parte del lenguaje y
tienen un significado especial. Estas palabras reservadas no se pueden utilizar
como nombre de identificador o funcin.
Las siguientes son palabras reservadas: asm, enum, auto, extern, break, float,
case, for, char, goto, const, if, signed, sizeof, static, struct, switch, typedef,
continue, default, do, double, else, int, long, register, return, short, union,
unsigned, void, volatile, while.

Comentarios: es toda la informacin que se aade al archivo del programa y


que es ignorada por el compilador. Generalmente son aclaraciones que se
realizan sobre las estructuras y datos que se estn manejando. En C los
comentarios inician por /* y terminan con */ y cuando el comentario alcanza
en una sola lnea se utiliza //ejemplo de comentario de una lnea.

Signos de puntuacin y separadores: todas las sentencia en C terminan con


punto y coma (;). Los separadores son espacios en blanco, tabulaciones,
retornos de carro y avances de lnea. Los signos que tambin se utilizan son:
!%[]^\&;*'(:)<->+?=,{.}/~"

Archivos de cabecera: son archivos especiales que contienen declaraciones


de elementos y funciones de la biblioteca. Utiliza la directiva #include para
insertar los archivos de cabecera. Ejemplo: si va a utilizar las funciones printf()
y scanf() debe declarar la librera stdio.h asi:
#include <stdio.h> /* o bien */ #include "stdio.h"

Leccin 8: Tipos de datos


C no cuenta con muchos tipos de datos predefinidos, sin embargo si tiene la
24

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

capacidad para crear sus propios tipos de datos. Los tipos bsicos son;
Enteros
Nmeros de coma flotante (reales)
Caracteres
La siguiente tabla muestra los distintos tipos de dato que se pueden usar en C
para declarar variables.

TIPO
char
int
double
float

pointer

long double

TIPOS DE DATOS BSICOS RECONOCIDOS POR TURBO C


TAMAO en
RANGO de Valores que
Bytes de la Variable
Puede Almacenar
Cuando Usamos
1
0..255
...Z, $
Para almacenar
2
-32767..32768
nmeros enteros
Para almacenar
nmeros Reales
8
1.7E-308..1.7E308
Variables que
4
3E-38..3E38
almacenan nmeros
reales.
Punteros near, es, _es, ss
Para variables que
2 byte
guardan direcciones
de memoria
10 bytes
3.4E-4932 a 1.1 E 4932
Variables Reales

TABLA 1. Tipos de datos bsicos


Declaracin de Variables
Antes del main() o despus de l se deben definir las variables, ejemplo:
float a, b, x;
Las variables que se declaran dentro del main() se dice que son variables
locales, las que se declaran antes del main() se dicen globales.
Una variable se puede declarar de las siguientes maneras:
Formato general: tipo_de_dato nombre_variable = valor_inicial. Ejemplo;
int variable1 = 100;
Se pueden declarar mltiples variables en una lnea, asi:
int edad, tipo, categora = 2; //tipo de dato entero
int v1; int v2;
int serie1 = 123, serie2 = 456;
float nota1=2.5; //tipo de dato real
char letra = C //tipo de dato caracter

25

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Leccin 9: Entradas y salidas


Se iniciar por analizar cmo se realiza la presentacin de datos e informacin por
pantalla, para ello se puede utilizar las funciones printf() o cout, aunque esta ltima
corresponde ms al lenguaje de C++.
Salidas por pantalla

printf( ) es una funcin standar de salida de C, est disponible al incluir stdio.h


tiene 2 partes: nombre de la funcin y sus argumentos. Ej. printf(mi edad es
%d\n, edad).
o Primer argumento: es una cadena de caracteres que puede tener
caracteres y/o secuencias de escape y/o cdigos de formato. Las
secuencias de escape inician con \.
Ej. \n secuencia de escape que indica retorno de carro (nueva lnea); y los
cdigos de formato inician con %. Ej: %d indica que un entero se
visualizar en forma decimal entera.
o Segundo argumento contiene la o las variables que se van a mostrar. Los
argumentos se separan mediante una coma.
o El nmero de variables debe corresponder al nmero de indicadores de
formato que se tienen en el primer argumento.
o Ejemplo:
int a = 10, b = 20, c;
printf(\nEl valor de a es %d,a); // 1 indicador y 1 variable
printf(\nEl valor de b es %d, b); // 1 indicador y 1 variable
c= a + b;
printf(\n %d + % d = %d, a,b,c); // 3 indicadores y 3 variables
Los indicadores de formato son:
%c
caracter
%d int
%ld long int
%f
float
%lf
double
%s
cadena
Un pequeo programa sera el siguente:
#include<stdio.h>
#include<conio.h>
int main()
{ int edad = 20;
printf(Mi nombre es Mara y tengo %d,edad);
getch();
return(0);
}

cout << imprime en pantalla la informacin, sea esta una cadena de texto (se
escribe entre comillas dobles) o el valor que contiene una variable. Adems se
puede incluir indicadores de formato que indican una tarea especfica como
saltar una lnea o tabular. Requiere incluir la librera iostram.h
26

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Ejemplos:

int x = 10;
cout << Programa de Ingeniera; // imprime una cadena
cout << \n; // ejecuta un salto de lnea
cout << x; // imprime el valor que contiene la variable x
cout << \n El valor de x es ; // imprime El valor de x es 10

Almacenar datos
Los datos se pueden almacenar en las variables desde la codificacin, a esto se le
conoce como asignar valores.
Ejemplos: int a = 30; // declaracin de una variable y asignacin de valor
float b;
// declaracin de una variable
b = 35.45 // asignacin de un valor a la variable b
Entradas por teclado

scanf(): la funcin scanf(), disponible al incluir stdio.h, permite leer datos por
teclado. La funcin scanf se usa de un modo similar a printf(), su primer
argumento es una cadena con marcas de formato. A ste le siguen una o ms
direcciones de memoria. Si desea leer por teclado el valor de una variable
entera a, puede hacerlo as: scanf ("%d", &a);
Observe que la variable cuyo valor se lee por teclado va obligatoriamente
precedida por el operador &: es as como se obtiene la direccin de memoria
en la que se almacena el valor de la variable. Uno de los errores ms
comunes es omitir el carcter & que debe preceder a todas las variables
escalares en scanf .
Sintaxis: scanf(indicador_de_formato, identificador)
o Los argumentos indican los tipos de datos que se van leer y el nombre
de las variables donde se van a guardar. Ej: scanf(%d, &pies).
o A los identificadores les precede el &, salvo cuando se trata de vectores,
como es el caso de las cadenas.
o Para almacenar un carcter utilice cscanf( );
o Ejemplo: int a;
char letra, palabra[10];
printf(Digite un nmero : );
scanf(%d , &a);
printf(\n Digite una vocal : );
cscanf(%c, &letra);
printf(\n Digite una palabra : );
scanf(%s, palabra);

27

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Leccin 10: Operadores y expresiones


Una expresin es una sucesin de operadores y operandos debidamente
relacionados que especifican un clculo.
Ejemplo:
int a=10, b=20, total=0;
total = a + b; //sta es una expresin
Operadores
Los operadores se clasifican en:

Operador de asignacin: permite asignar un valor a una variable numrica. El


operador igual (=) asigna el valor de la expresin derecha a la variable situada
en la izquierda. Ej. A = 10; //almacena el valor 10 en la variable A.

Operadores aritmticos: se utilizan para realizar operaciones aritmticas


bsicas.
o Suma: +
o Resta: o Multiplicacin: *
o Divisin: /
o Mdulo: %
Se utiliza para encontrar el valor del residuo de una
divisin. Ej. x = 5 / 2; // el valor que se almacena en x es 1
o Incremento: ++ Incrementa el valor de una variable de tipo numrico en
1. Ej. int x = 10;
x++; // el valor de x es 11
o Decremento: -- Decrementa el valor de una variable de tipo numrico
en 1. Ej. int y = 5;
y--; // el valor de y es 4
Las prioridades de ejecucin son:
o ++ y --,
o *, /, %
o +, -

Operadores Lgicos
o && es conocido como and (y). Se utiliza para unir condiciones, para que
la expresin sea verdadera, todas las condiciones que se unen deben
ser verdaderas.
o || operador or (o). La sentencia es verdadera cuando una de las
condiciones es verdadera. (alt-124).
o ! niega la expresin o condicin. Ej. !(a>b) indica a no es mayor que b

28

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Otros Operadores Relacionales

> mayor que


< menor que
>= mayor o igual que
<= menor o igual que
= = igual. Se utiliza para condiciones

29

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 3: SENTENCIAS DE CONTROL Y FUNCIONES

Introduccin
La forma ms razonable de encarar el desarrollo de un programa complicado es
aplicar lo que se ha dado en llamar "Programacin Top-Down".
Esto implica que, luego de conocer cul es la meta a alcanzar, se subdivide esta
en otras varias tareas concurrentes, por ejemplo:
Leer un teclado, procesar datos, mostrar los resultados. Luego a estas se las
vuelve a dividir en otras menores:
Y as se contina hasta llegar a tener un gran conjunto de pequeas y simples
tareas, del tipo de "leer una tecla" "imprimir un caracter". Luego slo resta
abocarse a resolver cada una de ellas por separado. De esta forma el
programador, slo se las tendr que ver con diminutas piezas de programa, de
pocas lneas, cuya escritura y correccin posterior es una tarea simple.
Tal es el criterio con que est estructurado el lenguaje C, donde una de sus
herramientas fundamentales son las funciones. Todo compilador comercial trae
una gran cantidad de Libreras de toda ndole, matemticas, de entrada - salida,
de manejo de textos, de manejo de grficos, etc, que solucionan la mayor parte
de los problemas bsicos de programacin.
Ahora bien, para que esos bloques de cdigo cumplan tareas especficas, es
indispensable incluir sentencias de control y repetitivas que apoyan el diseo
estructural de un programa y que se debe utilizar en atencin a lo que se requiere
lograr en la tarea.

Leccin 11: Sentencias de control selectivas if else, switch


Las sentencias condicionales permiten elegir entre dos o ms opciones.

if else: Se utiliza para elegir entre dos opciones.


Sintaxis: if (condicion) sentencia si la condicin es verdadera
else sentencia si la condicin es falsa.
En C, si se utiliza ms de una sentencia es necesario utilizar llaves.
Ejs: if (a= = b) printf(iguales);
else printf(diferentes);
if (a= = b)
30

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

{ c++;
x = z;
}
else
{ v--;
y = t;
}
Los if pueden anidarse para evaluar varias condiciones. Ej.
if (condicion1)
{ sentencia 1;
sentencia 2;
if (condicin 2)
{ if (condicin 3)
{ sentencia 3;
sentencia 4;
}
else
{ sentencia 5;
sentencia 6;
}
}
}
else
{ sentencia 7;
sentencia 8;
}

switch: es una sentencia de bifurcacin mltiple, que permite comparar una


variable sucesivamente frente a una lista de constantes enteras o de carcter.
Al encontrar una coincidencia se ejecuta el bloque de sentencias respectivas.
Sintaxis: switch(variable)
{ case constante1:
{ bloque de sentencias;
break;
}
case constante2:
{ bloque de sentencias;
break;
}
case constante3:
{ bloque de sentencias;
break;
}
default:
{ bloque de sentencias;
31

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

}
}
La opcin default se ejecuta cuando no hay coincidencias y es opcional.
Se diferencia de if en que slo permite comprobar por igualdad.
Ej. char letra;
printf(Digite letra : ); cscanf(%c,&letra);
switch ( letra)
{ case a:
printf ( letra a );
break;
case e:
printf ( letra e );
break;
case i:
printf ( letra i );
break;
case o:
printf ( letra o );
break;
case u:
printf ( letra u );
break;
default :
printf ( no es vocal );
}

Leccin 12: Sentencias de control repetitivas for, while, do while


Las sentencias de control repetitivas, conocidas tambin como ciclos, permiten
repetir un conjunto de instrucciones, mientras se cumpla una condicin. Utiliza una
variable control y puede interrumpirse mediante la instruccin break.

for (inicializacin ; condicin ; incremento)


{ bloque de sentencias;
}
Ej. Imprimir los nmeros pares comprendidos entre 0 y 20.
int i, residuo;
for (i=1 ; i<=20; i++)
{ residuo = i % 2;
if ( !residuo) printf(\n %d, i);
}
Si nicamente existe una sentencia que ejecutar la sintaxis es:
int i;
for(i=1; i<=10; i++) printf(%d, i);
32

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

La siguiente sintaxis for( ; ; ) crea un ciclo infinito, a menos que exista una
condicin interna que obligue a salir del ciclo. Ej.
int i;
char r;
for ( ; ; )
{ printf(Desea continuar (s/n) : );
cscanf(%c,&r);
if ( r != s) break;
}
Sentencia break: se utiliza para terminar la ejecucin de un ciclo. Ejemplo:
int i;
for(i=0; i<=10; i++)
{ printf (\n %d,i);
if (i= =5) break;
} // nicamente imprime los nmeros del 0 al 5.

Ciclo while: ejecuta un bloque de sentencias mientras la condicin que evala


es verdadera. Las condiciones que debe cumplir son:
o Antes del ciclo la variable que se evala debe tener un valor que haga la
condicin verdadera.
o Dentro del ciclo la variable control debe cambiar para que en algn
momento la condicin sea falsa y pueda terminar el ciclo.
Ej. Verificar si el valor digitado en nota, es un nmero entre 0 y 5.
float nota;
printf(Digite nota : );
scanf (%f ,&nota);
while ( nota <0 || nota > 5)
{ printf(NOTA INCORRECTA);
printf(Digite nota : );
scanf (%f ,&nota);
}

Ciclo do .. while: ejecuta un bloque de sentencias y al final verifica si la


condicin es verdadera. La diferencia fundamental entre los ciclos while y do
while, es que el primero evala la condicin al inicio del ciclo y el segundo la
evala al final. Esto hace que el bloque de sentencias en do while, se ejecuten
por lo menos una vez.
Sintaxis: do
{ bloque de sentencias;
}
while (condicin) ;
Ej.:
33

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

int op;
do
{ printf(\n\n);
printf(1. Llenar informacin );
printf(\n2. Mostrar informacin );
printf(\n3. Eliminar informacin );
printf(\n4. Salir );
printf(\n\n);
printf(Elija opcin : );
scanf(%d, &op);
switch(op)
{ case 1:
{ printf(\n Llenar);
break;
}
case 1:
{ printf(\n Mostrar);
break;
}
case 1:
{ printf(\n Eliminar);
break;
}
}
while(op!=4);
printf(\nDigite una tecla para continuar );
getch( );
}

Leccin 13: Funciones, declaracin


Todo programa bien estructurado utiliza funciones creadas por el programador, a
continuacin se describen los pasos bsicos para trabajar con funciones.
Definicin de una Funcin: la definicin de una funcin puede ubicarse en
cualquier lugar del programa, con slo dos restricciones: debe hallarse luego de
dar su prototipo, y no puede estar dentro de la definicin de otra funcin (incluida
main() ). Es decir que a diferencia de Pascal, en C las definiciones no pueden
anidarse.
NOTA: no confundir definicin con llamada; una funcin puede llamar a tantas
otras como desee.
La definicin debe comenzar con un encabezamiento, que debe coincidir
34

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

totalmente con el prototipo declarado para la misma, y a continuacin del mismo,


encerradas por llaves se escribirn las sentencias que la componen; por ejemplo:
#include <stdio.h>
float mi_funcion(int i, double j ); /* DECLARACION observe que termina en ";" */
main()
{

float k ; int p ; double z ;


...........
/* LLAMADA a la funcin */
k = mi_funcion( p, z );
...........
/* fin de la funcin main() */

float mi_funcion(int i, double j ) /* DEFINICION observe que NO lleva ";" */


{
float n
...................
printf("%d", i );
/* LLAMADA a otra funcin */
...................
return ( 2 * n );
/* RETORNO devolviendo un valor float */
}

Declaracin de una Funcin: antes de escribir una funcin es necesario


informarle al Compilador los tamaos de los valores que se le enviarn en el stack
y el tamao de los valores que ella retornar al programa invocante.
Estas informaciones estn contenidas en la DECLARACIN del PROTOTIPO DE
LA FUNCIN.
Formalmente dicha declaracin queda dada por:
tipo del valor de retorno
nombre_de_la_funcin(lista de tipos de parmetros)
Algunos ejemplos :
float mi_funcion(int i, double j ) ;
double otra_funcion(void) ;
otra_mas(long p) ;
void la_ultima(long double z, char y, int x, unsigned long w) ;
El primer trmino del prototipo indica el tipo de dato retornado por la funcin; en
caso de obviarse el mismo, se toma por omisin el tipo int. Sin embargo, aunque
35

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

la funcin devuelva este tipo de dato, para evitar malas interpretaciones es


conveniente explicitarlo. Ya que el "default" del tipo de retorno es el int, se debe
indicar cuando la funcin NO retorna nada, esto se realiza por medio de la
palabra void (sin valor). Cuando no se envan argumentos, el parntesis
correspondiente queda vacio.
La declaracin debe anteceder, en el programa, a la definicin de la funcin. Es
normal, por razones de legibilidad de la documentacin, encontrar todas las
declaraciones de las funciones usadas en el programa, en el HEADER del mismo,
junto con los include de los archivos *.h que tienen los prototipos de las funciones
de Librera.
Si una ms de nuestras funciones son usadas habitualmente, se puede
disponer su prototipo en un archivo de texto, e incluirlo las veces que se necesite.

Leccin 14: Llamados de Funcin


Una vez que en su programa se ha definido una funcin, esta puede ser llamada
las veces que sean necesarias. Para llamar a una funcin basta con hacer
referencia a su nombre y si la misma requiere de parmetros estos debern
indicarse dentro de parntesis.
Para llamar a una funcin que no requiera de parmetros se deber indicar el
nombre de la misma seguida de parntesis vacios. Por ejemplo, para llamar
una funcin llamada cuadrado, se escribira:
cuadrado();
Si la funcin cuadrado utiliza un parmetro de tipo int, se escribira:
cout << cuadrado(25);
cout << cuadrado(X);
Si la funcin cuadrado utiliza un parmetro y adems devuelve un valor, su
llamada sera:
R = cuadrado(X); // guardar en R el cuadrado de X
Prototipos: para utilizar una funcin en un programa, se requiere en primer lugar
declararla y despus definirla. La declaracin de la funcin le indica al compilador
el nombre, el tipo de dato devuelto por la funcin y los parmetros pasados a la
funcin. A la declaracin de una funcin se le llama tambin el prototipo
Un prototipo es una declaracin de una funcin. Consiste simplemente en el
encabezado de la funcin, terminado con punto y coma (;) lo que hace es avisar
al compilador, como se va a llamar la funcin y si recibe y devuelve informacin
La estructura de un prototipo es:
<tipo> func(<lista de declaracin de parmetros>);
36

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Ejemplo:
int Mayor(int a, int b); // es un prototipo de funcin que devuelve un entero y
recibe dos parmetros enteros.
Aunque C permite realizar el prototipo de la siguiente manera:
int Mayor(int,int);
Sin necesidad de escribir el nombre de las variables; entonces La estructura de
un programa en C quedara as:
[directivas del pre-procesador: include y define]
[declaracin de variables y constantes globales]
[prototipos de funciones]
funcin main ()
[definiciones de funciones] //definidas en los prototipos

Leccin 15: Recursividad


Esta es la propiedad que tienen las funciones en C de poder llamarse a s
mismas. Se dice que una funcin es recursiva cuando se autollama. No todas
las funciones pueden llamarse a s mismas (ser recursivas), deben
estar diseadas especialmente para que tengan un final y no se conviertan en
ciclos o bucles infinitos.
Es importante notar que cuando una funcin se llama a s misma, una nueva
copia de esta funcin es la que se ejecuta. Las variables locales de la segunda
funcin no interfieren con las variables locales de la primera, as mismo, las
variables locales no se pueden afectar mutuamente. Se tomar como ejemplo
un programa que calcule el factorial de un nmero entero introducido por el
usuario. El factorial est definido como el producto del nmero en cuestin por
todos los nmeros enteros menores que l, de tal manera que el factorial de
5=5*4*3*2*1 = 120. El cdigo puede quedar as:
#include <iostream.h>
double factorial(int valor);
int K=1; // variable global, para un contador general
int main()
{
int num;
cout << "Introduzca un numero" << endl;
cin >> num;
37

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

cout << endl;


cout << El factorial del nmero es << factorial(num) << endl;
cout << "La funcin se llamo en forma recursiva " << k << " veces" << endl;
return 0;
}
double factorial(int valor)
{
double R;
if(valor<=1) return 1;
else
{
R= (valor*factorial(valor-1)); K = K+1;
}
return resultado;
}
1. La funcin se declara de tipo doble, puesto que los valores que retorna la
funcin pueden ser demasiado grandes.
2. Tambin se utiliza una variable global (K), que sirve de contador, para
determinar el nmero de iteraciones que la funcin se repite
3. El programa empieza solicitndole un nmero entero y despus llama por
primera vez a la funcin factorial ( ). La recursividad necesita una condicin
para terminar el proceso en el momento especifico, por sta razn, la funcin
factorial () determina en primer lugar si el valor pasado como parmetro de la
funcin es igual a 1, en cuyo caso la funcin retorna 1. Si el valor del
parmetro es mayor que 1, entonces la funcin factorial ( ) se llama a s
misma tomando como parmetro el valor original menos uno, multiplicando
ste valor por el valor del parmetro original y almacenando el
resultado en la variable llamada resultado. (se recomienda realizar una
prueba de escritorio para entender un poco ms el movimiento de la
funcin y sus iteraciones).

38

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ACTIVIDADES DE AUTOEVALUACIN DE LA UNIDAD 1


Existe un ejercicio clsico, la intencionalidad no es transcribirlo, es leer los
enunciados y desarrollarlo utilizando funciones recursivas, se trata de las torres
de Hanoi
La Leyenda: En una ciudad antigua en la India, los monjes de un templo tienen
que mover una pila de 64 discos sagrados a partir de una localizacin a otra. Los
discos son frgiles; solamente uno se puede llevar al mismo tiempo. Un disco no
se puede colocar encima de un disco ms pequeo, menos valioso. Y,
hay solamente otra localizacin en el templo (adems de la original y de la
localizacin de destino) bastante sagrada y solo una pila de discos se puede
colocar all. As pues, los monjes comienzan a mover discos hacia adelante y
hacia atrs, entre la pila original, la pila en la nueva localizacin, y la
localizacin intermedia, manteniendo siempre el orden (ms grande en el fondo,
ms pequeo en la tapa). La leyenda consiste en que, antes de que los monjes
hagan el movimiento final de terminar la pila nueva en la nueva localizacin, el
templo se convertir en polvo y el mundo terminar. T qu crees? .........Bueno
dejmonos de leyendas y vamos a lo que vamos.......
El "Juego" torres de Hanoi consiste en tres palos, en el cual el primer palo tiene N
nmero de argollas colocadas de tal manera que las ms grandes siempre deben
estar por debajo de las ms pequeas...el segundo palo le podremos llamar palo
auxiliar y es el que nos ayudar de cierta manera a lograr el desarrollo del juego
el cual ser lograr pasar todas las argollas al tercer palo de tal manera que se
mueve una argolla a la vez y que nunca una argolla grande quede encima
de una pequea

FIGURA 3. Torres de Hanoi

39

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

UNIDAD 2
Nombre de la Unidad
ARREGLOS
En la unidad 1 ya se estudi el tema de algunos tipos bsicos de datos,
Introduccin

como por ejemplo char, int y float. El lenguaje C permite, organizar


y almacenar datos, de diversas maneras, una de las formas utilizadas
son las variables que guardan un solo dato a la vez. Tambin hay
estructuras ms complejas, como es el caso de los arreglos.
Arreglo: coleccin ordenada de elementos de un mismo tipo. Ordenada
significa que cada elemento tiene una ubicacin determinada dentro del
arreglo, la cual se debe conocer para lograr tener acceso a uno de sus
elementos.
Se iniciar con los arreglos unidimensionales, luego los arreglos
bidimensionales, tambin llamados matrices, se estudiar un tipo
especial de arreglo, como es la cadena, con las funciones ms
importantes para trabajar con ellas. Tambin se abordar los temas de
ordenacin y bsqueda de datos. Y finalizar con el tema de punteros o
apuntadores.

Justificacin

Todo programa de computador utiliza datos, que una vez procesados se


convierten en informacin, es decir que pasan de ser datos simples a
datos con significados, que ayudan a entender una situacin. Pues bien,
el reto es que esos datos se organicen y almacenen de tal manera, que
faciliten su manipulacin y administracin.
Cuando se necesita un dato especfico se recurre al proceso de
bsqueda, y para que sta sea ms gil, una gran ayuda es que los
datos estn organizados en atencin a uno o varios criterios. De ah la
importancia de conocer como se almacenan datos de igual tipo, y como
se realizan los procesos de ordenacin y bsqueda.

Intencionalidades
Formativas

Conceptuar referente a estructuras de datos que manipulan volumen


mayor de informacin
Propsitos de la unidad
Conocer el trabajo que se realiza con vectores, arreglos y
cadenas de caracteres.
Realizar bsquedas y ordenamientos utilizando algoritmos
diseados para tal fin.
Interpretar el trabajo con punteros o apuntadores
Objetivos de la unidad
Tener claridad en la importancia que tienen los vectores, los
arreglos y las cadenas de caracteres.
Tener claridad en los criterios de bsqueda y ordenamiento.
Analizar el trabajo con punteros o apuntadores

40

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
Competencias de la unidad
Dominar las tcnicas de bsqueda y ordenamiento aplicado a
estructuras bsicas de la programacin.
El estudiante aplica los vectores y arreglos como herramienta
fundamental en la programacin de computadoras.
El estudiante utiliza los punteros para almacenar y acceder a la
informacin.
.
Metas de aprendizaje
Realizar programas con un nivel medio de complejidad

Denominacin de
captulos

Arreglos y cadenas
Ordenacin y bsqueda
Punteros o apuntadores

41

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 4: ARREGLOS Y CADENAS

Introduccin
Esta unidad permite el acercamiento al mundo de los datos estructurados,
para tal efecto se iniciar con los datos ms sencillos como son los arreglos
unidimensionales, luego se trabajar con arreglos bidimensionales, conocidos
tambin como matrices, para continuar con las cadenas de caracteres.
Adems de la importancia de conocer como se almacena la informacin, es
indispensable saber cmo acceder a ella; estos temas sern aclarados en la
organizacin y bsqueda de datos, donde se analizarn diferentes propuestas
para realizar esos procesos.

Leccin 16: Definicin y Declaracin


Los arreglos son una coleccin de variables del mismo tipo que se referencian
utilizando un nombre comn. Un arreglo consta de posiciones de
memoria contigua. La direccin ms baja corresponde al primer elemento y la
ms alta al ltimo. Un arreglo puede tener una o varias dimensiones. Para
acceder a un elemento en particular de un arreglo se usa un ndice.
El formato para declarar un arreglo unidimensional es:
tipo nombre_arr [ tamao ]
Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez
elementos se hace de la siguiente forma:
int listanum[10];
En C, todos los arreglos usan cero como ndice para el primer elemento. Por
tanto, el ejemplo anterior declara un arreglo de enteros con diez elementos
desde listanum[0] hasta listanum[9].
La forma como pueden ser accesados los elementos de un arreglo, es:
listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/
num = listanum[2]; /* Asigna el contenido del 3er elemento a la variable
num */
El lenguaje C no realiza comprobacin de contornos en los arreglos. En el caso
de que sobrepase el final durante una operacin de asignacin, entonces
42

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

se asignarn valores a otra variable o a un trozo del cdigo, esto es, si se


dimensiona un arreglo de tamao N, se puede referenciar el arreglo por encima
de N sin provocar ningn mensaje de error en tiempo de compilacin o ejecucin,
incluso aunque probablemente se provoque el fallo del programa. Como
programador se es responsable de asegurar que todos los arreglos sean lo
suficientemente grandes para guardar los datos que se indicarn en el programa.
C permite arreglos con ms de una dimensin, el formato general es:
tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN];
Por ejemplo un arreglo de enteros bidimensionales se escribir como:
int tabladenums[50][50];
Observar que para declarar cada dimensin lleva sus propios parntesis
cuadrados.
Para acceder los elementos se procede de forma similar al ejemplo del arreglo
unidimensional, esto es,
tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3 fila y la 4
columna*/
num = tabladenums[25][16];
A continuacin se muestra un ejemplo que asigna al primer elemento de un
arreglo bidimensional cero, al siguiente 1, y as sucesivamente.
main()
{
int t,i,num[3][4];
for(t=0; t<3; ++t)
for(i=0; i<4; ++i)
num[t][i]=(t*4)+i*1;
for(t=0; t<3; ++t)
{
for(i=0; i<4; ++i)
printf("num[%d][%d]=%d ", t,i,num[t][i]);
printf("\n");
}
}
En C se permite la inicializacin de arreglos, debiendo seguir el siguiente
formato:
43

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

tipo nombre_arr[ tam1 ][ tam2 ] ... [ tamN] = {lista-valores};


Por ejemplo:
int i[10] = {1,2,3,4,5,6,7,8,9,10};
int num[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

Leccin 17: Arreglos Unidimensionales


Tambin son llamados arrays unidimensionales y lo podramos definir como un
conjunto de variables del mismo tipo y tamao que ocupan posiciones
consecutivas en la memoria del ordenador. El tamao en memoria que ocupa un
array es siempre fijo y no puede variar. Para calcular el tamao en memoria que
puede ocupar un array slo se tiene que multiplicar el nmero de elementos del
array por el tamao en bytes del tipo de este. Es decir se aplica la siguiente
frmula:
bytes totales = sizeof(tipo base) * nmero de elementos
Para declarar un vector se utiliza la siguiente sintaxis:
int vector[X];
Donde x, es un valor numrico que indica el nmero de elementos que contendr
el vector.
En un arreglo unidimensional, el ndice se ubica de forma grfica tal y como lo ve
en la siguiente figura.

VECTOR[X]
0

FIGURA 4. Vector
Como se puede observar slo se necesita de un ndice (x) para acceder a cada
elemento de la lista. Por ejemplo si se quisiera rellenar la casilla 4 dndole el
valor 10, solo tendra que escribir la sentencia: vector[4]=10;
Cuando un array se pasa como argumento de una funcin, no se pasa una copia
completa del array, sino slo la direccin del primer elemento del array. Para
44

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

hacer referencia a la direccin de inicio de un array se puede utilizar cualquiera


de estas dos formas (siendo ms habitual la segunda)
Int *P, *Q;
P=&array[0]; /* Apunta al inicio del array, posicin 0 */
Q=array;
/* Realiza la misma funcin que la lnea de cdigo anterior */
Ejemplo del uso de un vector:
#include <stdio.h>
#include <conio.h>
main()
{
int vector[7]; /* tipo nombre_del_array[Tamao] */
/* Contador */
int c;
for(c=0;c<=6;c++)
{
printf("Numero para guardar en vector[%d]: ",c);
scanf("%d",&vector[c]);
}
for(c=0;c<=6;c++)
{
printf("\nValor Vector[%d]=%d",c,vector[c]);
}
getch();
}

Las principales operaciones que se realizan con un array son:

Acceso: cada elemento de un array se nombra con el identificador del array


al que perteneces seguido de su posicin entre corchetes [n-1]. Es decir, si en
un array[10], queremos nombrar la 4 posicin, esta sera array[3].

Asignacin: normalmente para asignar valores a un array se utiliza un bucle


for. El
ejemplo anterior muestra perfectamente el comportamiento y la
funcionalidad de este bucle.
El ndice del for ha de ser capaz de recorrer todas las casillas del array.

Iniciacin: a un array se le puede dar valores iniciales, (donde lista de valores


es una lista de constante separadas por comas) para ello se declarara de la
siguiente forma:

45

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Tipo nombre_array[tamao]={lista_valores};
int lista[6]={2,4,6,8,1,5};
int datos[100]={0};
int num[4]={4,5};

// todos se inicializan a 0
// equivale a {4,5,0,0}

Es muy importante que se inicialicen los arrays antes de usarlos, ya que


la declaracin slo reserva espacio en memoria para el array declarado,
sin asignacin por defecto por parte del sistema.

Leccin 18: Arreglos Bidimensionales

Se conocen tambin como MATRICES. Son arreglos de dos dimensiones que


utilizan dos ndices para indicar la posicin de cada elemento, el primero indica el
nmero de la fila y el segundo el nmero de la columna (los ndices inician en 0).
Ejemplo de una matriz de 3 filas y 5 columnas, que contiene datos de tipo carcter
char matriz[3][5]
0
1
2
3
4
ndice de columnas

ndice de
filas

FIGURA 5. Matrz

El carcter g se encuentra en matriz [1][2]


Ejemplo:
#include <stdio.h>
#include <conio.h>
main()
{
char matriz[7][7]; /* Declaracin de matriz de 7*7 caracteres */
int c,d;
/* Contadores */
for(c=0;c<=6;c++)
{
for(d=0;d<=6;d++)
46

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

{
printf("Caracter para guardar en matriz[%d][%d]: ",c,d);
scanf("%c",&matriz[c][d]);
getchar();
}
}
for(c=0;c<=6;c++)
{
for(d=0;d<=6;d++)
{
printf("\nValor matriz[%d][%d]=%c",c,d,matriz[c][d]);
}
}
getch();
}

Leccin 19: Cadenas de Carcter


A diferencia de otros lenguajes de programacin que emplean un tipo
denominado cadena string para manipular un conjunto de smbolos, en C, se
debe simular mediante un arreglo de caracteres, en donde la terminacin de la
cadena se debe indicar con nulo. Un nulo se especifica como '\0'. Por lo anterior,
cuando se declare un arreglo de caracteres se debe considerar un carcter
adicional a la cadena ms larga que se vaya a guardar. Por ejemplo, si se quiere
declarar un arreglo cadena que guarde una cadena de diez caracteres, se har
como:
char cadena[11];
Se pueden hacer tambin inicializaciones de arreglos de caracteres en donde
automticamente C asigna el caracter nulo al final de la cadena, de la siguiente
forma:
char nombre_arr[ tam ]="cadena";
Por ejemplo, el siguiente fragmento inicializa cadena con ``hola'':
char cadena[5]="hola";
El cdigo anterior es equivalente a: char cadena[5]={'h','o','l','a','\0'};
Para asignar la entrada estndar a una cadena se puede usar la funcin scanf
con la opcin %s (observar que no se requiere usar el operador &), de igual forma
47

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

para mostrarlo en la salida estndar.


Por ejemplo:
main()
{
char nombre[15], apellidos[30];
printf("Introduce tu nombre: ");
scanf("%s",nombre);
printf("Introduce tus apellidos: ");
scanf("%s",apellidos);
printf("Usted es %s %s\n",nombre,apellidos);
}
El lenguaje C no maneja cadenas de caracteres, como se hace con enteros o
flotantes, por lo que lo siguiente no es vlido:
main()
{
char nombre[40], apellidos[40], completo[80];
nombre="Jos Mara";
/* Ilegal */
apellidos="Morelos y Pavn";
/* Ilegal */
completo="Gral."+nombre+appellidos; /* Ilegal */
}

Leccin 20: Funciones de cadena


Existen funciones de carcter y cadena que amplan sus posibilidades de uso, a
continuacin se explican algunas de ellas.
Funciones de Carcter
Para trabajarlas es necesario incluir en los programas la librera ctype.h

toupper( variable_char ): convierte un caracter a maysculas.


Ej. 1 char rta = s;
rta = toupper( rta ); // en la variable rta se encuentra ahora el carcter S
Ej. 2 char x;
x = toupper(getche( )); // guarda en la variable x una letra en maysculas
// digitada por el usuario.
Ej. 3
if ( toupper( getche( ) = = S) // verifica que la letra digitada por el
// usuario sea S.

tolower( variable_char) convierte un carcter a minsculas.


48

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Funciones de Cadena
Para trabajar con cadenas es necesario utilizar ciertas funciones, que requieren
incluir en el programa la libreria: string.h

strcpy(cadena1,cadena2): copia en cadena1 el contenido de cadena2.


El primer argumento deben ser de tipo array de caracteres, el segundo puede
ser un array de caracteres o una expresin encerrada entre comillas dobles.
Ej. 1
char t1[20];
strcpy(t1,HOLA);
Ej. 2
char t2[20], t3[20]=PASTO;
strcpy(t1,t2);

strcat(cadena1, cadena2): se utiliza para unir dos cadenas. El resultado se


guarda en la cadena1.
Ej. 1
char t1[20]=HOLA;
strcat(t1,JUAN);
Ej. 2
char t1[20]=HOLA, t2[20]=MUNDO;
strcat(t1,t2);
Si se requiere un espacio, este debe estar incluido en una de las cadenas

strcmp(cadena1, cadena2): compara dos cadenas y devuelve el valor 0 si las


cadenas son iguales. Si la cadena1 es lexicogrficamente mayor que la
cadena2, devuelve un valor positivo, de lo contrario ser negativo.
Como la funcin devuelve un valor entero, es necesario asignarlo a una
variable de ese tipo, y luego evaluarla
Ej 1.
int rta;
rta = strcmp(HOLA,hola);
if (rta= =0) printf(iguales);
else printf(diferentes);
Ej. 2
int rta;
char t1[2]=a,t2[2]=A;
rta = strcmp(t1,t2);
if (rta= = 0) printf(iguales);
else printf(diferentes);
Ej. 3
int rta;
char t1[20]=SISTEMAS;
rta = strcmp(t1,informatica);
if (rta= = 0) printf(iguales);
else printf(diferentes);
Ej. 4
char t1[10]:
for( ; ; )
{ printf(\ndigite una palabra); gets(t1);
49

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

if (strcpm(salir,t1)) break;
}

strlen(cadena): devuelve el nmero de caracteres que tiene la cadena.


Ej. 1
int x;
x = strlen(informatica);
E. 2
int x;
char t1[10]=CALI;
x = strlen(t1);
Ej. 3
int x;
char t1[20]
x = strlen(gets(t1));

50

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 5: ORDENACIN Y BSQUEDA


Introduccin
Al realizar diversas actividades, se guarda informacin que posteriormente se
retomar. Para que esta ltima tarea sea ms fcil, es importante que la
informacin est organizada de acuerdo a criterios predefinidos. De estos temas
se trata el presente captulo de los mtodos de ordenacin y bsqueda de datos,
como se realizan, que caractersticas tienen, etc.
Leccin 21: Importancia de la organizacin de datos
La organizacin es una labor comn que se realiza cotidianamente, es un
proceso tan comn en la vida diaria, que generalmente no se analiza mucho en la
forma como se lleva a cabo. La organizacin hace referencia a colocar
informacin
de
una
manera
especial basndose en un criterio de
ordenamiento.
En la ciencia de la computacin la organizacin de datos tambin cumple un rol
muy importante, ya sea como un fin en s o como parte de otros procedimientos
ms complejos. En gran medida de la organizacin de los datos depende el
tiempo que se requiere para realizar bsquedas de informacin, tarea que es
bastante frecuente en los sistemas computacionales.
En atencin a la importancia que reviste la organizacin de los datos, se han
desarrollado muchas tcnicas en este mbito, cada una con caractersticas
especficas, con ventajas y desventajas sobre las dems. El propsito principal
de un ordenamiento es el de facilitar la bsqueda de informacin.
El ordenar un grupo de datos significa mover los datos o sus referencias para que
queden en una secuencia tal que represente un orden, el cual puede ser
numrico, alfabtico o incluso alfanumrico, ascendente o descendente.

Leccin 22: Ordenacin


La ordenacin o clasificacin de datos (sort, en ingls) es una operacin
consistente en disponer un conjunto estructura de datos en algn
determinado orden con respecto a uno de los campos de elementos del conjunto.
Por ejemplo, cada elemento del conjunto de datos de una gua telefnica tiene un
campo nombre, un campo direccin y un campo nmero de telfono; la gua
telefnica est dispuesta en orden alfabtico de nombres; los elementos
numricos se pueden ordenar en orden creciente o decreciente de acuerdo al
valor numrico del elemento. En terminologa de ordenacin, el elemento por el
cual est ordenado un conjunto de datos (o se est buscando) se denomina
clave.
51

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Una coleccin de datos (estructura) puede ser almacenada en un archivo, un


array (vector o tabla), un array de registros, una lista enlazada o un rbol. Cuando
los datos estn almacenados en un array, una lista enlazada o un rbol, se
denomina ordenacin interna. Si los datos estn almacenados en un archivo, el
proceso de ordenacin se llama ordenacin externa.
Una lista se dice que est ordenada por la clave k si la lista est en orden
ascendente o descendente con respecto a esta clave. La lista se dice que est en
orden ascendente si: i < j implica que k[i] <= k[j] y se dice que est en orden
descendente si: i > j implica que k[i] <= k[j] para todos los elementos de la lista.
Por ejemplo, para una gua telefnica, la lista est clasificada en orden
ascendente por el campo clave k, donde k[i] es el nombre del abonado (apellidos,
nombre).
4

14

21

32

45

orden ascendente

75

70

35

16

14

12

orden descendente

Zacarias Rodriguez Martinez Lopez Garcia

orden descendente

Los mtodos (algoritmos) de ordenacin son numerosos, por ello se debe prestar
especial atencin en su eleccin. Cmo se sabe cul es el mejor algoritmo? La
eficiencia es el factor que mide la calidad y rendimiento de un algoritmo. En el
caso de la operacin de ordenacin, dos criterios se suelen seguir a la hora de
decidir qu algoritmo de entre los que resuelven la ordenacin es el ms
eficiente:
1) tiempo menor de ejecucin en computadora.
2) menor nmero de instrucciones.
Sin embargo, no siempre es fcil efectuar estas medidas: puede no disponerse de
instrucciones para medida de tiempo aunque no sea ste el caso del lenguaje
C, y las instrucciones pueden variar, dependiendo del lenguaje y del propio
estilo del programador. Por esta razn, el mejor criterio para medir la eficiencia de
un algoritmo es aislar una operacin especfica clave en la ordenacin y contar el
nmero de veces que se realiza. As, en el caso de los algoritmos de ordenacin,
se utilizar como medida de su eficiencia el nmero de comparaciones entre
elementos efectuados. El algoritmo de ordenacin A ser ms eficiente que el B,
si requiere menor nmero de comparaciones.
As, en el caso de ordenar los elementos de un vector, el nmero de
comparaciones ser funcin del nmero de elementos (n) del vector (array). Por
consiguiente, se puede expresar el nmero de comparaciones en trminos de n
(por ejemplo, n+4, o bien n2 en lugar de nmeros enteros.

52

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Se utiliza el orden ascendente sobre vectores o listas (arrays


unidimensionales). Los mtodos de ordenacin se suelen dividir en dos
grandes grupos:
directos burbuja, seleccin, insercin
indirectos (avanzados) Shell, ordenacin rpida, ordenacin por mezcla,
Radixsort
En el caso de listas pequeas, los mtodos directos se muestran eficientes, sobre
todo porque los algoritmos son sencillos; su uso es muy frecuente. Sin embargo,
en listas grandes estos mtodos se muestran ineficaces y es preciso recurrir a los
mtodos avanzados.

Leccin 23: Mtodos de ordenacin


Mtodo Burbuja
El Ordenamiento de Burbuja (Bubble Sort en ingls) es un sencillo algoritmo de
ordenamiento. Funciona revisando cada elemento de la lista que va a ser
ordenada con el siguiente, intercambindolos de posicin si estn en el orden
equivocado. Es necesario revisar varias veces toda la lista hasta que no
se necesiten ms intercambios, lo cual significa que la lista est ordenada. Este
algoritmo obtiene su nombre de la forma con la que suben por la lista los
elementos durante los intercambios, como si fueran pequeas "burbujas".
Tambin es conocido como el mtodo del intercambio directo. Dado que solo
usa comparaciones para operar elementos, se lo considera un algoritmo de
comparacin, siendo el ms sencillo de implementar.
Este es el mtodo ms fcil de utilizar y aprender, tambin se lo conoce como
ordenamiento directo o de intercambio, consiste en: que va comparando cada
elemento del arreglo con el siguiente; si un elemento es mayor que el que le
sigue, entonces se intercambian (dependiendo si se quiere ordenar
ascendente o descendentemente); esto producir que en el arreglo quede
como su ltimo elemento, el ms grande. Este proceso deber repetirse
recorriendo todo el arreglo hasta que no ocurra ningn intercambio. Los
elementos que van quedando ordenados ya no se comparan, los pasos son:
Los pasos a dar son:
1. se decide como se quiere el resultado del ordenamiento, si ascendente o
descendente
2. Comparar A[1] y A[2]; Si estn en orden, se mantienen como estn; en caso
contrario, se intercambian entres s.

53

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

3. A continuacin se comparan los elementos 2 y 3; de nuevo se intercambian si


es necesario.
4. El proceso contina hasta que cada elemento del vector ha sido comparado
con sus elementos adyacentes y se han realizado los intercambios necesarios.
Este ser el algoritmo
Para i =1 hasta n haga
si elemento[i] > elemento [i+1] haga
Temporal = Elemento[i] Elemento[i] = Elemento [i+1] Elemento [i+1]
= Temporal
fin si
fin para
Para poder realizar este intercambio se debe apoyar en una variable temporal que
permite almacenar uno de los valores por un periodo, para que no se pierda.
Ahora analice el cdigo
#include <conio.h>
#include <iostream.h>
// Prototipos de las funciones.
void MostrarVector(int *arreglo, int n);
void burbuja(int *arreglo, int n);
int main()
{
int n; // Numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos < 100:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"Digite valor para la posicin :"<< i+1<<" ";
cin>>arreglo[i];
}
cout<<"\nVector
Leido:\n";
MostrarVector(arreglo,n);
cout<<"\nProcesamiento
Burbuja:\n";
burbuja(arreglo, n);
54

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

cout<<"\nVector Ordenado:\n";
MostrarVector(arreglo,n);
getch();
return(0);
}
// Muestra en pantalla el vector
void MostrarVector(int *arreglo, int n)
{
int i; // Contador
for (i=0;i<n;i++)
cout<<arreglo[i];
cout<<"\n";
}
// Ordenamiento por burbuja.
void burbuja(int *arreglo, int n)
{
int i,j; // Contadores
int temporal; // Variable para intercambio de contenidos
for (i=0;i<n-1;i++)
for (j=0;j<n-1;j++)
if (arreglo[j]>arreglo[j+1])
{
temporal=arreglo[j];
arreglo[j]=arreglo[j+1];
arreglo[j+1]=temporal;
}
}
Esta es la lista:
4-3-5-2-1
Existen 5 elementos. Es decir, n toma el valor 5. Se inicia comparando el primero
con el segundo elemento. 4 es mayor que 3, as que se intercambian.
Ahora se tiene:
3-4-5-2-1
Ahora se compara el segundo con el tercero: 4 es menor que 5, as que no se
hace nada. Se contina con el tercero y el cuarto: 5 es mayor que 2.

55

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Se intercambia y se obtiene:
3-4-2-5-1
Se compara el cuarto y el quinto: 5 es mayor que 1. Se intercambia
nuevamente:
3-4-2-1-5
Repitiendo este proceso se obtienen los siguientes resultados:
3-2-1-4-5
2-1-3-4-5
1-2-3-4-5
Nuevamente se sugiere la realizacin de nuevas pruebas de escritorio para
entender mejor el comportamiento de este programa.
Tambin existen formas de mejorar la efectividad de este algoritmo, se le sugiere
tratar de implementar soluciones que mejoren los procesos en este algoritmo

Mtodo de Insercin
En este tipo de algoritmo los elementos que van a ser ordenados son
considerados uno a la vez. Cada elemento es INSERTADO en la posicin
apropiada con respecto al resto de los elementos ya ordenados.
As por ejemplo, si se tiene el vector
53

15

27

31

29

11

59

Se puede insertar el elemento 15 en la posicin 1 y mover el 53 a la posicin 2,


con lo que se tienen los dos primeros elementos ordenados, como se puede
apreciar.
15

53

27

31

29

11

59

Repitiendo el proceso anterior pero con la casilla 3, se puede observar que la


sublista a la izquierda esta ordenada y los movimientos seran:
15

53

27

31

29

11

59

7
56

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Como resultado:
15

27

53

31

29

11

59

Como se puede observar el mtodo se basa en comparaciones y


desplazamientos sucesivos. El algoritmo de ordenacin de un vector X para N
elementos se realiza recorriendo el vector e
insertando el elemento
correspondiente en el lugar adecuado. El siguiente pseudocdigo da una
idea general de la labor a realizar:
para i =2 hasta i = n haga
Inserte X[i] en la posicin adecuada entre X[1] y X[i-1]
fin para
El desarrollo de esta operacin de insercin se puede realizar en dos partes
principales. La primera determinar en qu lugar debe ir el elemento que se est
evaluando.
lugar = i temporal = X[i]
para j =1 hasta j = i - 1 haga
si temporal < X[j] haga
lugar = j
salir para
fin si
fin para

La segunda, empieza con preguntar si se debe mover el elemento y si es as se


corren hacia la derecha del lugar de insercin, los elementos as:
si lugar < i haga
para j = i 1 hasta j = lugar en decrementos de 1 haga
X[j+1] = X[j]
fin para
X[lugar] = temporal
fin si

De esta forma el pseudocdigo final queda de la siguiente manera:


para i =2 hasta i = n
haga lugar = i
temporal = X[i]
para j =1 hasta j = i - 1 haga
57

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

si temporal < X[j] haga


lugar = j
salir para
fin si
fin para
si lugar < i haga
para j = i 1 hasta j = lugar en decrementos de 1 haga
X[j+1] = X[j]
fin para
X[lugar] = temporal
fin si
fin para
La codificacin sera:
#include <conio.h>
#include <iostream.h>
#define MAXNUM 100
// Prototipos de las funciones.
void MostrarVector(int *arreglo, int n);
void insercion(int *arreglo, int n);
int main()
{
int n; // numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"por favor escriba el valor en la posicion :" <<i+1;
cin>>arreglo[i];
}
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
cout<<"\nOrdenamiento por insercin:\n";
insercion(arreglo, n);
cout<<"\nVector Ordenado:\n";
MostrarVector(arreglo,n);
getch();
return(0);
}
58

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

// funcin para mostrar por pantalla


void MostrarVector(int *arreglo, int n)
{
int i; // Contador
for (i=0;i<n;i++)
cout<< arreglo[i];
cout<<"\n";
}

// funcin que realiza el ordenamiento


void insercion(int *arreglo, int n)
{
int i,j; // Contadores
int temporal; // Variable que conserva el elemento X[i]
int lugar; // Variable del lugar donde se debe insertar
for (i=1;i<n;i++)
{
lugar=i;
temporal= arreglo[i];
for (j=0;j<=i-1;j++)
{
if (temporal<arreglo[j])
{
lugar=j;
break;
}
}
if (lugar<i)
{
for (j=i-1;j>=lugar;j--)
arreglo[j+1]=arreglo[j];
arreglo[lugar]=temporal;
}
}
}

Mtodo Shell
Toma este nombre de su inventor Donald Shell, es como utilizar el ordenamiento
burbuja pero comparando e intercambiando los elementos. La idea es seleccionar
fragmentos de un arreglo para ser ordenados y ordenarlos por el mtodo directo.
Luego se toman nuevos fragmentos hasta quedar ordenado por completo

59

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

El algoritmo ser:
salto = n div 2
mientras salto <> 0 haga
repita
cambios = 0
para i N1 hasta n salto haga
si X[i] > X[i+salto] haga
temporal = X[i]
X[i] = X[i+salto]
X[i+salto] = temporal
cambios = 1
fin si
fin para
hasta que cambios = 0 salto = saldo div 2
fin mientras

Es momento de realizar la prueba de escritorio, considere el siguiente vector:


4

10

Se decide ordenarlo en forma ascendente:


Salto = 4 y es <> 0
Cambio = 0
I=1
4

10

Como la condicin no se cumple 4 no es mayor que siete, se incremente i y


contina el proceso
Variable i = 2
4

10

Como se puede observar el nmero 10 si es mayor que el 2 por lo tanto hay un


intercambio y el vector resultante es:
4

10

60

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

La variable cambio toma el valor de 1, el proceso contina hasta que i llega a nsalto, para el primer caso hasta 4, luego se divide nuevamente en 2 y luego en
uno.
Ahora analice el cdigo
#include <conio.h>
#include <iostream.h>
// Prototipos de las funciones.
void MostrarVector(int *arreglo, int n);
int shell(int *arreglo, int n);
int main()
{
int n; // El numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos < 100:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"digite valor para ["<<i+1<<"] ";
cin>>arreglo[i];
}
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
cout<<"\nOrdenamiento por shell:\n";
cout<<"\n Numero iterciones" <<shell(arreglo, n);
cout<<"\nVector Ordenado:\n";
MostrarVector(arreglo,n);
getch();
return(0);
}
// Muestra en pantalla el vector
void MostrarVector(int *arreglo, int n)
{
int i; // Contador
for (i=0;i<n;i++)
cout<< arreglo[i]<<" ";
cout<<"\n";
61

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

}
// Ordenamiento por shell.
int shell(int *arreglo, int n)
{
int ciclos=0; // Contador de ciclos i
nt i; // Contador
int salto; // Variable para el tamao del salto
int temporal; // Variable para intercambio de contenidos
int cambio; // Variable lgica para detener una iteracin
salto=n/2;
while (salto!=0)
{
do
{
cambio=0;
for(i=0;i<n-salto;i++)
{
ciclos++;
if(arreglo[i]>arreglo[i+salto])
{
temporal=arreglo[i];
arreglo[i]=arreglo[i+salto];
arreglo[i+salto]=temporal;
cambio=1;
}
}
} while (cambio!=0);
salto=salto/2;
}
return ciclos;
}

Mtodo Quicksort
Algoritmo desarrollado por Charles Hoare propuesto en 1962. Para cada paso,
se escoge un elemento "a" de alguna posicin especfica dentro del arreglo.
Ese elemento "a" es el que se proceder a colocar en el lugar que le corresponda.
Por conveniencia se seleccionar a "a" como el primer elemento del arreglo. El
elemento "a" se procede a comparar con el resto de los elementos del arreglo.
Una forma puede ser: comparar "a" con el ltimo elemento del arreglo. En la
comparacin, si el elemento "a" toma la ltima posicin y el ltimo elemento toma
62

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

la posicin 1 se procede a seguir comparando a "a" pero ahora con el segundo


elemento. Si "a" resulta ser menor que el segundo elemento se hace el
intercambio y se procede a comparar "a" con el penltimo y as sucesivamente
hasta que "a" se compara con todos los elementos restantes del arreglo. Note que
cada vez que ocurre un intercambio de valores, la comparacin de "a" se hace
con los elementos del arreglo que se encuentran en posicin contraria a la que se
est haciendo.
Una vez que se termin de comparar "a" con todos los elementos, "a" ya se
encuentra en su lugar y a la izquierda de "a" quedan todos los elementos
menores a l y a su derecha todos los mayores.
Se toma el sub-arreglo izquierdo (los menores de "a") y se realiza el mismo
procedimiento. Se toma el sub-arreglo derecho (los mayores de "a") y se realiza
el mismo procedimiento. Este proceso se realiza hasta que los sub-arreglos sean
de un elemento.
Obsrvelo grficamente, tomado el siguiente vector
43

90

52

87

100

-10

68

13

21

45

Las variables izq (izquierda) y der (derecha), una variable para controlar el punto
pvot (pivote), que se puede mirar su comportamiento en los extremos resaltados
Izq

Der

10

11

12

PosPiv

Pivote

11

43

90

50

87

100

10

68

13

21

45

50

43

En este caso la posicin ms a la izquierda es 0, la ms a la derecha es 12, se


escoge como "pivote" el primer trmino de la lista, es decir la posicin ms a la
izquierda, tal como est escrito en la tabla anterior.
Se procede a comparar el pivote, 43, con el valor ms a la derecha, posicin 12
cuyo valor es 50. Se verifica que 43 y 50 estn en posiciones relativas,
ascendentemente, adecuadas, por esto comenzamos a movernos a la izquierda,
decrementando Der, as:
Izq

Der

10

11

12

PosPiv

Pivote

11

43

90

50

87

100

10

68

13

21

45

50

43

63

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Se compara ahora el pivote 43, en posicin cero, con el nmero en posicin


der=11, es decir 45, nuevamente estn en posiciones relativas adecuadas a
nuestro ordenamiento ascendente, por esto se decremento derecha (Der--):
Izq

Der

10

11

12

PosPiv

Pivote

11

43

90

50

87

100

10

68

13

21

45

50

43

Se compara ahora 43 con 21 de la posicin der=10, no estn en posiciones


relativas ordenadas, se proceder entonces a su intercambio, quedando el vector,
paso a paso as:
Izq

Der

10

11

12

PosPiv

Pivote

10

43

90

50

87

100

10

68

13

21

45

50

43

21

90

50

87

100

10

68

13

43

45

50

10

Se actualiza la posicin del pivote, ahora est en 10, y se comienza a comparar


desde la izquierda, como lo seala la flecha en la tabla anterior. As se compara
43 con 21, los cuales estn en posiciones relativas adecuadas:

Izq

Der

10

11

12

PosPiv

Pivote

10

21

90

50

87

100

10

68

13

43

45

50

10

43

Por esto se incrementa izquierda y se compara el 43 con el 2, igualmente estn


en orden ascendente relativo; se incrementa izquierda nuevamente llegando a
donde est el nmero 90 en la posicin 2 del vector:
Izq

Der

10

11

12

PosPiv

Pivote

10

21

90

50

87

100

10

68

13

43

45

50

10

43

El 90 al compararlo con el pivote 43 es mayor, por esto debern ser


intercambiados, y actualizada la posicin del pivote:
64

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Izq

Der

10

11

12

PosPiv

Pivote

10

21

90

50

87

100

10

68

13

43

45

50

10

43

2
21

43

50

87

100

10

68

13

90

45

50

Siguiendo este proceso se obtiene la siguiente secuencia de posiciones:


Izq

Der

10

11

12

PosPiv

Pivote

90

21

43

50

87

100

10

68

13

90

45

50

43

Izq

Der

10

11

12

PosPiv

Pivote

21

43

50

87

100

10

68

13

90

45

50

43

9
21

50

87

100

10

68

13

43

90

45

50

Izq

Der

10

11

12

PosPiv

Pivote

21

50

87

100

10

68

13

43

90

45

50

43

Izq

Der

10

11

12

PosPiv

Pivote

21

50

87

100

10

68

13

43

90

45

50

43

21

43

87

100

10

68

13

50

90

45

50

Izq

De
r

10

11

3
12

PosPi
v

Pivote

65

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
3

21

43

87

10
0

10

Izq

De
r

21

43

87

100

21

13

87

100

68

13

50

90

45

50

43

1
0

11

1
2

PosPi

Pivote

-10

68

1
3

5
0

9
0

45

5
0

43

-10

68

4
3

5
0

9
0

45

5
0

Izq

Der

10

11

12

PosPiv

Pivote

21

13

87

100

10

68

43

50

90

45

50

43

Izq

Der

10

11

12

PosPiv

Pivote

21

13

87

100

10

68

43

50

90

45

50

43

21

13

43

100

10

68

87

50

90

45

50

Izq

Der

10

11

12

PosPiv

Pivote

21

13

43

100

10

68

87

50

90

45

50

43

Izq

Der

10

11

12

PosPiv

Pivote

21

13

43

100

10

68

87

50

90

45

50

43

6
21

13

10

100

43

68

87

50

90

45

50

Izq

Der

10

11

12

PosPiv

Pivote

21

13

100

43

68

87

50

90

45

50

43

66

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION
10

Izq

Der

10

11

12

PosPiv

Pivote

21

13

10

100

43

68

87

50

90

45

50

43

21

13

10

43

100

68

87

50

90

45

50

Al avanzar desde la derecha hacia la izquierda, la variable Der se encuentra con


la posicin donde est el pivote, e Izq ya estaba en el mismo valor, es decir las
tres variables "se encuentran en el mismo sitio", as:
Izq

Der

10

11

12

PosPiv

Pivote

21

13

10

43

100

68

87

50

90

45

50

43

Se observa que el valor del pivote, 43, est en el sitio que le corresponde en
ordenamiento ascendente, y que a su izquierda se forma una sublista,
desordenada, desde la posicin 0 a la 4, con todos sus elementos menores; y una
sublista a la derecha, desde la posicin 6 hasta la 12, en desorden y con todos
mayores que el pivote. A partir de este punto se procede con el mismo
procedimiento seguido para la lista completa, en cada una de las sublistas y por
separado.
Con lo anterior se puede describir el siguiente algoritmo para que usted mediante
una prueba de escritorio verifique que hace
#include <conio.h>
#include <iostream.h>
// Prototipos de las funciones.
void MostrarVector(int *arreglo, int n);
void QuickSort(int *arreglo, int l, int r);
void intercambiar(int *arreglo, int pos1, int pos2);

int main()
{
int n; // numero de elementos del vector
int i; // Contador
int arreglo[100]; // Arreglo de enteros
67

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

system(cls);
cout<<"Digite el numero de elementos:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"Digite valor para la posicion :[" <<i+1<<"] ";
cin>>arreglo[i];
}
cout<<"\nVector Leido:\n";
MostrarVector(arreglo,n);
cout<<"\nOrdenamiento por QuickSort:\n";
QuickSort(arreglo,0,n-1);
cout<<"\nVector Ordenado:\n";
MostrarVector(arreglo,n);
getch();
return(0);
}
// Muestra en pantalla el vector
void MostrarVector(int *arreglo, int n)
{
int i; // Contador
for (i=0;i<n;i++)
cout<<arreglo[i]<< " ";
cout<<"\n";
}
// Ordenamiento QuickSort.
void QuickSort(int *arreglo, int izquierda, int derecha)
{
int mayor; // Posicion de un elemento mayor al pivote
int menor; // Posicion de un elemento menor al pivote
int pivote; // Elemento pivote
if (izquierda < derecha)
{
pivote = arreglo[derecha];
mayor = izquierda-1;
menor = derecha;
while (mayor <= menor)
{
while (mayor <= derecha)
{
mayor++;
if (arreglo[mayor] >= pivote) break;
68

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

}
while (menor >= izquierda)
{
menor--;
if (arreglo[menor] <= pivote) break;
}
if (mayor < menor) intercambiar(arreglo,mayor,menor);
}
intercambiar(arreglo,derecha,mayor);
QuickSort(arreglo,izquierda,mayor-1);
QuickSort(arreglo,mayor+1,derecha);
}
}
void intercambiar(int arreglo[], int pos1, int pos2)
{
int temporal; // Variable para intercambio de contenidos
temporal = arreglo[pos1];
arreglo[pos1] = arreglo[pos2];
arreglo[pos2] = temporal;
}
Bueno slo queda que usted que es una persona muy pila, indague ms acerca
de estos mtodos, tanto de bsqueda como de ordenamiento , o realice nuevas
mejoras a estos programas aqu desarrollados.

Leccin 24: Bsqueda


La bsqueda es una tarea que se realiza permanentemente, en toda actividad,
por ejemplo, cuando se est en un supermercado uno busca artculos en
particular, en una multitud de gente se busca a alguien en especial, en un
directorio se busca a una persona. Como se observa la bsqueda est
presente en cada una de las actividades.
Un algoritmo de bsqueda es aquel que est diseado para localizar un
elemento concreto dentro de una estructura de datos. Consiste en solucionar un
problema de existencia o no de un elemento determinado en un conjunto finito de
elementos, es decir, si el elemento en cuestin pertenece o no a dicho conjunto,
adems de su localizacin dentro de ste.
Este problema puede reducirse a devolver la existencia de un nmero en un
vector.

69

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Leccin 25: Mtodos de bsqueda


Mtodo Lineal
Es el mtodo para buscar algo dentro de un arreglo, donde se hace un recorrido
de inicio a fin, realizando las comparaciones necesarias hasta encontrar el
elemento requerido.
Para entenderlo mejor se realiza el algoritmo necesario
encontro = FALSE
para k= 0 hasta n haga
si X[k] = ValorBuscado haga
mostrar Elemento encontrado en la posicin , k
encontro = TRUE
k=n;
fin si
fin para
si encontro = FALSE haga
mostrar No se encontr el elemento
fin si

A continuacin un ejemplo de bsqueda lineal


#include <conio.h>
#include <iostream.h>
// Prototipos de las funciones.
void mostrar(int *arreglo, int n);
int buscar(int valor, int *arreglo, int n);
int main()
{
int n; // numero de elementos del vector < 100
int valor; // El numero a buscar
int i; // Contador
int x; // Almacenar el valor devuelto por la funcin
int arreglo[100]; // Arreglo de enteros
system(cls);
cout<<"Digite el numero de elementos:";
cin>>n;
for (i=0;i<n;i++)
{
cout<<"Digite el dato ", i;
70

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

cin>>arreglo[i];
}
cout<<"Digite el numero a buscar:";
cin>>valor; cout<<"\nVector Leido:\n";
mostrar(arreglo,n);
cout<<"\nBusqueda lineal:\n";
if ((x=buscar(valor, arreglo, n)) != -1)
cout<<"\nEncontrado en la posicion \n"<<x+1;
else
cout<<"\nNo existe en el arreglo\n";
getch();
}
// funcin que permite mostrar en la pantalla el vector
void mostrar(int *arreglo, int n)
{
int i; // Contador
for (i=0;i<n;i++)
cout<< arreglo[i];
cout<<"\n";
}
// funcin Bsqueda lineal.
int buscar(int valor, int *arreglo, int n)
{
int i; // Contador
for (i=n-1; i>=0; i--)
if (valor == arreglo[i]) break;
// condicional para encontrar el elemento
return (i);
}
Se recomienda realizar prueba de escritorio para determinar el comportamiento
del anterior cdigo.

Binaria
Este algoritmo permite buscar de una manera ms eficiente un dato dentro de un
arreglo, para hacer esto se determina el elemento central del arreglo y se
compara con el valor que se est buscando, si coincide termina la bsqueda y en
caso de no ser as se determina si el dato es mayor o menor que el elemento
central, de esta forma se elimina una mitad del arreglo junto con el elemento
central para repetir el proceso hasta encontrarlo o tener solo un elemento en el
71

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

arreglo. Para poder aplicar este algoritmo se requiere que el arreglo este
ordenado. Su implementacin es la siguiente:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define TAM 15
main()
{
int a[TAM], busca, temp, bajo, alto, central, i;
printf("Llenando el arreglo con nmeros aleatorios\n");
for (int i=0; i< TAM; i++)
a[i]=rand()%100; //llena el vector con 15 nmeros aleatorios entre 0 y 100
//Implementacin de Ordenamiento por burbuja de menor a mayor
printf ("Ordenando arreglo...\n");
for (int j=1; j <= TAM; j++)
for (i=0; i< TAM-1; i++)
if (a[i] > a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
//Implementacin de bsqueda binaria
printf ("\nIntroduce un numero a buscar: ");
scanf ("%d", &busca);
bajo = 0;
alto = TAM-1;
central = (bajo+alto)/2;
while (bajo < alto && busca != a[central])
{
if(busca > a[central])
bajo = central+1;
else
alto = central-1;
central=(bajo+alto)/2;
}
if (busca == a[central])
printf("\n%d encontrado en posicion %d", busca, central);
72

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

else
printf("\n%d no existe", busca);
printf ("\n\nEl arreglo ordenado era\n\n");
for (i=0; i< TAM; i++)
printf ("%d ", a[i]);
getch();
}

Mtodo de Hash
La idea principal de este mtodo consiste en aplicar una funcin que traduce el
valor del elemento buscado en un rango de direcciones relativas. Una desventaja
importante de este mtodo es que puede ocasionar colisiones.
funcion hash (valor_buscado)
inicio
hash <- valor_buscado mod numero_primo
fin
inicio <- hash (valor)
il <- inicio encontrado <- falso
repite
si arreglo[il] = valor entonces encontrado <- verdadero
en caso contrario il <- (il +1) mod N
hasta encontrado o il = inicio
fin

73

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 6: PUNTEROS O APUNTADORES

Introduccin
Los apuntadores son una parte fundamental de C. Si usted no puede usar los
apuntadores apropiadamente entonces est perdiendo la potencia y la flexibilidad
que C ofrece bsicamente.
El lenguaje C, usa los apuntadores en forma extensiva. Por qu?

Es la nica forma de expresar algunos clculos.


Se genera cdigo compacto y eficiente.
Es una herramienta muy poderosa.
C usa apuntadores explcitamente con: Arreglos, Estructuras y Funciones

Leccin 26: Definicin


Un puntero o apuntador es una variable que contiene la direccin de memoria
de un dato o de otra variable que contiene al dato, esto es, que el puntero apunta
al espacio fsico donde est el dato o la variable. Puede apuntar a un objeto de
cualquier tipo, por ejemplo: a una estructura o a una funcin.
Es muy importante prestar especial atencin a la creacin de punteros, puesto
que si por error apuntan a algn lugar inesperado, se puede producir una
violacin de memoria, lo que constituye un gran error.
Leccin 27: Declaracin de Punteros
Puntero: es una variable a la que se asigna una direccin de memoria. El puntero
debe definirse con el mismo tipo de la variable a la cual apunta.
Ejemplo: si se define la variable llamada X, de tipo entero, el puntero que
contendr su direccin debe ser de tipo entero, as:
int X; \\ define la variable X de tipo entero
int *px; \\ define un variable tipo puntero llamada px
Para diferenciar un apuntador de otra variable, al nombre del puntero se le
antepone un asterisco (*) Ejemplo: int *px;
Al definir un apuntador o puntero, este contiene una direccin que no indica una
variable conocida, si se desea que contenga la direccin de una variable, esta se
debe asignar.

74

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

La sintaxis es: px=&x; con esta instruccin ahora se tiene almacenado en px la


direccin de memoria donde se encuentra la variable x.
A la variable x, se le debe asignar un valor, porque hasta el momento esta vaca.
Esto se puede hacer de dos formas:
X=10;

*px = 10;
Se debe tener claro que de acuerdo a las asignaciones que se realicen, se van a
presentar diferencias en el contenido de las variables y los apuntadores.
Ej. int x, *px;
px = &x; \\ asigna a px la direccin de la variable x
*px = 10; \\ asigna el valor 10 a la variable x, es lo mismo que decir x = 10.
\\ Prcticamente la expresin *px es la variable x.
Ejercicio: analizar el siguiente programa
main ( )
{ int x, *px;
px = &x;
*px = 0;
*px = *px + 5;
x = *px 1;
printf ( %d %d , x, *px );
getch ( );
}

main ( )
{ int x, *px;
px = &x;
x = 0;
x = x + 5;
x = x 1;
printf ( %d %d , x, *px );
getch ( );
}

Para declarar un puntero se debe situar un asterisco delante del nombre de la


variable tipo puntero.
char *ptr1; //puntero a un char "utilizado para las cadenas de longitud variable".
int *ptr2; //puntero a un entero.
float *ptr3; //puntero a un float
int *p1, num1, num2, *p2; //punteros a enteros *p1, *p2
Para recuperar la direccin de la variable a la que se apunta, se debe situar &
delante de la variable.
Ej.: p1=&num1;

Leccin 28: Operadores de Punteros


Un apuntador es una variable que contiene la direccin en memoria de otra
variable. Se pueden tener apuntadores a cualquier tipo de variable.
El operador unario o mondico & devuelve la direccin de memoria de una
variable.
75

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

El operador de indireccin o dereferencia * devuelve el ``contenido de un objeto


apuntado por un apuntador''.
Para declarar un apuntador para una variable entera hacer:
int *apuntador;
Se debe asociar a cada apuntador un tipo particular. Por ejemplo, no se puede
asignar la direccin de un short int a un long int.
Para tener una mejor idea, considerar el siguiente cdigo:
main()
{
int x = 1, y = 2;
int *ap;
ap = &x;
y = *ap;
x = ap;
*ap = 3;
}

Cuando se compile el cdigo se mostrar el siguiente mensaje:


warning: assignment makes integer from pointer without a cast.
Con el objetivo de entender el comportamiento del cdigo suponga que la variable
x est en la localidad de la memoria 100, y en 200 y ap en 1000. Nota: un
apuntador es una variable, por lo tanto, sus valores necesitan ser guardados en
algn lado.
int x = 1, y = 2;
int *ap;
ap = &x;
100
x 1

200
y 2

1000
ap 100

Las variables x e y son declaradas e inicializadas con 1 y 2 respectivamente, ap


es declarado como un apuntador a entero y se le asigna la direccin de x (&x).
Por lo que ap se carga con el valor 100.
y = *ap;

76

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

100
x 1

200
y 1

1000
ap 100

Despus y obtiene el contenido de ap. En el ejemplo ap apunta a la localidad de


memoria 100 -- la localidad de x. Por lo tanto, y obtiene el valor de x -- el cual es
1.
x = ap;
100

200

x 100 y 1

1000
ap 100

Como se ha visto C no es muy estricto en la asignacin de valores de diferente


tipo (apuntador a entero). As que es perfectamente legal (aunque el compilador
genera un aviso de cuidado) asigna el valor actual de ap a la variable x. El valor
de ap en ese momento es 100.
*ap = 3;
100
x 3

200
y 1

1000
ap 100

Finalmente se asigna un valor al contenido de un apuntador (*ap).


Importante: Cuando un apuntador es declarado, apunta a algn lado. Se debe
inicializar el apuntador antes de usarlo. Por lo que:
main()
{
int *ap;
*ap = 100;
}
puede generar un error en tiempo de ejecucin o presentar un comportamiento
errtico.
El uso correcto ser:
main()
{
int *ap;
int x;
ap = &x;
77

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

*ap = 100;
}

Con los apuntadores se puede realizar tambin aritmtica entera, por ejemplo:
main()
{
float *flp, *flq;
*flp = *flp + 10;
++*flp;
(*flp)++;
flq = flp;
}

NOTA: Un apuntador a cualquier tipo de variable es una direccin en memoria la


cual es una direccin entera, pero un apuntador NO es un entero.
La razn por la cual se asocia un apuntador a un tipo de dato, es porque se debe
conocer en cuntos bytes est guardado el dato. De tal forma, que cuando se
incrementa un apuntador, se incrementa el apuntador por un ``bloque'' de
memoria, en donde el bloque est en funcin del tamao del dato.
Por lo tanto para un apuntador a un char, se agrega un byte a la direccin y para
un apuntador a entero o a flotante se agregan 4 bytes. De esta forma si a un
apuntador a flotante se le suman 2, el apuntador entonces se mueve dos
posiciones float que equivalen a 8 bytes.

Leccin 29: Apuntadores y funciones


Cuando C pasa argumentos a funciones, los pasa por valor, es decir, si el
parmetro es modificado dentro de la funcin, una vez que termina la funcin el
valor pasado de la variable permanece inalterado.
Hay muchos casos en que se quiere alterar el argumento pasado a la funcin y
recibir el nuevo valor una vez que la funcin ha terminado. Para hacer lo anterior
se debe usar una llamada por referencia, en C se puede simular pasando un
puntero al argumento. Con esto se provoca que la computadora pase la
direccin del argumento a la funcin.
Para entender mejor lo anterior considere la funcin swap() que intercambia el
valor de dos argumentos enteros:

78

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

void swap(int *px, int *py);


main()
{
int x, y;
x = 10; y = 20;
printf("x=%d\ty=%d\n",x,y);
swap(&x, &y);
printf("x=%d\ty=%d\n",x,y);
getch();
}

void swap(int *px, int *py)


{
int temp;
temp = *px; /* guarda el valor de la direccion x */
*px = *py;
/* pone y en x */
*py = temp; /* pone x en y */
}

Leccin 30: Apuntadores y Arreglos


Existe una relacin estrecha entre los punteros y los arreglos. En C, un nombre
de un arreglo es un ndice a la direccin de comienzo del arreglo. En esencia, el
nombre de un arreglo es un puntero al arreglo. Considere lo siguiente:
int a[10], x;
int *ap;
ap = &a[0];
/* ap apunta a la direccin de a[0] */
x = *ap;
/* A x se le asigna el contenido de ap (a[0] en este caso) */
*(ap + 1) = 100; /* Se asigna al segundo elemento de 'a' el valor 100 usando ap*/
Como se puede observar en el ejemplo la sentencia a[1] es idntica a *(ap+1). Se
debe tener cuidado ya que C no hace una revisin de los lmites del arreglo, por
lo que se puede ir fcilmente ms all del arreglo en memoria y sobreescribir
otras cosas.
C sin embargo es mucho ms sutil en su relacin entre arreglos y apuntadores.
Por ejemplo se puede teclear solamente:
ap = a; en vez de ap = &a[0];
y tambin *(a + i) en vez de a[i], esto es, &a[i] es equivalente con a+i.
Y como se ve en el ejemplo, el direccionamiento de apuntadores se puede
79

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

expresar como:
a[i] que es equivalente a *(ap + i)
Sin embargo los apuntadores y los arreglos son diferentes:
Un apuntador es una variable. Se puede hacer ap = a y ap++.
Un arreglo NO ES una variable.
Hacer a = ap y a++ ES ILEGAL.
NOTA: Esta parte es muy importante, asegrese de haberla entendido.
Con lo comentado se puede entender como los arreglos son pasados a
las funciones. Cuando un arreglo es pasado a una funcin lo que en realidad se le
est pasando es la localidad de su elemento inicial en memoria.
Por lo tanto:
strlen(s) es equivalente a strlen(&s[0])
Esta es la razn por la cual se declara la funcin como:
int strlen(char s[]); y una declaracin equivalente es int strlen(char *s); ya que char
s[] es igual que char *s.
La funcin strlen() es una funcin de la biblioteca estndar que regresa la longitud
de una cadena. Se muestra enseguida la versin de esta funcin que podra
escribirse:
int strlen(char *s)
{
char *p = s;
while ( *p != '\0' )
p++;
return p - s;
}
Se muestra enseguida una funcin para copiar una cadena en otra. Al igual que
en el ejercicio anterior existe en la biblioteca estndar una funcin que hace lo
mismo.
void strcpy(char *s, char *t)
{
while ( (*s++ = *t++) != '\0' );
}
80

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

En los dos ltimos ejemplos se emplean apuntadores y asignacin por valor.


Nota: Se emplea el uso del carcter nulo con la sentencia while para encontrar el
fin de la cadena.

81

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ACTIVIDADES DE AUTOEVALUACIN DE LA UNIDAD 2

1: Recopilacin de preguntas de seleccin mltiple con nica


respuesta
A. Propsito principal de un ordenamiento es
1. Facilitar las bsquedas de los miembros de un conjunto
ordenado
2. Buscar los elementos de un conjunto
3. Ordenar en base a su valor
B. Cuando es conveniente usar los ordenamientos
a. Cuando se requiere hacer una cantidad considerable de
bsquedas
b. Cuando se tienen varios directorios
c. Cuando se considera el factor del tiempo

C. En este tipo de algoritmos cada elemento es comparado contra los


dems
a. Algoritmo de enumeracin
b. Algoritmo de insercin
c. Algoritmo de intercambio
D. En este algoritmo los elementos que van a ser ordenados son
considerados uno a la vez
a. Algoritmo de burbuja
b. Algoritmo de shell
c. Algoritmos de inserccin
E. Compara cada elemento del arreglo con el siguiente, si el elemento
es mayor que l se sigue, entonces surge un intercambio.
a. Mtodo de Burbuja
b. Mtodo de Quicksort
c. Mtodo de Shell
F. Este tipo de algoritmos se selecciona o se busca el elemento ms
pequeo o ms grande de todo el conjunto de elementos y se coloca
en la posicin adecuada

82

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

a. Algoritmo de Shell
b. Algoritmo de seleccin
c. Algoritmo de seleccin directa
G. Este ordenamiento lleva el nombre de su inventor
a. Ordenamiento Quicksort
b. Ordenamiento de Burbuja
c. Ordenamiento de Shell

2) Deduzca, indague, consulte, cules son las ventajas y/o desventajas de los
mtodos de bsqueda y ordenamiento aqu expuestos

3) Realice un programa que permita introducir en un arreglo de n elementos


valores de tipo entero y a travs de un men, realizar las siguientes funciones:
A. Ingreso de datos
B. Bsqueda
C. Ordenamiento
D. Estadstica
E. Salir
En cada uno de los mens se incluir, un segundo submen, por ejemplo el item
nmero 3 Ordenamiento puede incluir los mtodos de:
Por burbuja
Por insercin
Y as sucesivamente, en el men estadista, se debe presentar un informe de la
cantidad de iteraciones que cumple una opcin de las anteriores.

83

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

UNIDAD 3
Nombre de la Unidad
Introduccin

ESTRUCTURAS Y ARCHIVOS
Los archivos como coleccin de datos sirven como entrada y salida
de datos al computador y son manejados con programas.
Los archivos pueden ser contrastados con Arrays y registros. En un
registro se deben especificar los campos, l nmero de elementos de
un arrays (o arreglo), el nmero de caracteres en una cadena, entre
otros, por esto se denotan como: Estructuras Estticas.
En los archivos no se requiere de un tamao predeterminado, esto
significa que se pueden tener archivos de datos ms grandes o
pequeos, segn se necesiten.
Cada archivo es referenciado por su identificador (su nombre).

Justificacin
Hasta el momento slo se ha trabajado con vectores que almacenan
datos del mismo tipo y que tienen un tamao definido, que no se
puede cambiar durante la ejecucin del programa. Afortunadamente
los lenguajes de programacin C y C++, dejan al usuario construir o
combinar diversidad de datos para conformar estructuras complejas
de informacin, lo que ampla las posibilidades de trabajo con datos.
Adems, hasta el momento los datos que se procesaban en un
programa se perdan, cuando ste dejaba de ejecutarse, puesto que
se estaba trabajando con memoria principal, ahora la solucin llega
con la construccin de estructuras que se puedan almacenar y
acceder en forma de archivos, que se almacenan en memoria
secundaria.

84

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Intencionalidades
Formativas

Determinar los mecanismos que se utilizan para combinar diferentes


tipos de datos
Propsitos de la unidad
Manipular diversidad de datos en forma simultnea
Grabar datos en unidades de almacenamiento fsicas

Objetivos de la unidad
Desarrollar programas que manipulen cantidad de datos de
diferentes tipos y que puedan almacenarse y recuperase en
cualquier momento
Competencias de la unidad
Dominar el manejo de estructuras con diversidad de datos
Comprender como se almacenan y recuperan datos en
medios fiscos
Metas de aprendizaje
Realizar programas que presten un verdadero
cuando se trate de guardar informacin

Denominacin de
captulos

servicio,

ESTRUCTURAS
ARCHIVOS
ACCESO A LOS ARCHIVOS

85

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 7: ESTRUCTURAS

Introduccin
Las estructuras estn compuestas, como ya se dijo, por una serie de
componentes individuales llamados miembros, para hacerlo ms grafico se puede
decir que al ingresar datos de una persona como su nombre, apellido, direccin,
salario, edad cada tipo de informacin corresponde a un miembro de la
estructura. Una estructura no tiene restricciones para contener un nmero
determinado de miembros, e inclusive se pueden realizar estructuras que
contengan otras estructuras.

Leccin 31: Declaracin de una Estructura


En C una estructura es una coleccin de variables que se referencian bajo el
mismo nombre. Una estructura proporciona un medio conveniente para mantener
junta informacin relacionada.
Al crear o definir una estructura se forma una plantilla que puede usar el
programador para definir una variable de tipo estructura. Las variables que
conforman la estructura son llamadas (elementos) de la estructura.
EJEMPLO:
struct dire
{
char nombre[30];
char direccin[30];
char ciudad[30];
int telefono;
int prefijo;
};
Para definir una variable de tipo estructura se procede as:
struct dire cliente;
La variable en memoria se la puede imaginar as:
CLIENTE
NOMBRE

DIRECCION

CIUDAD

TELEFONO

PREFIJO

De lo anterior se debe sacar como conclusin que la variable cliente, almacena 5


datos diferentes, que son: NOMBRE, DIRECCION, CIUDAD, TELEFONO,
PREFIJO.
86

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Otra manera de declarar la misma variable es as:


typedef struct {
char nombre[30];
char direccin[30];
char ciudad[30];
int telefono;
int prefijo;
} dire;
En este caso se ha definido un tipo de dato llamado dire, que es una
estructura
Para definir variables de ese tipo slo se necesita escribir: dire cliente;
EJEMPLO:
Se desea crear una variable de tipo estructura para almacenar un nmero
complejo.
Recuerde que un nmero complejo, tiene parte real, parte imaginaria
Si quedo claro lo anterior, entonces se puede escribir:
typedef struct {
double p_real;
double p_imaginario;
} complejo;
Para definir dos variables del tipo complejo, se escribe:
complejo a, b;

Leccin 32: Asignacin de Estructuras


Para ingresar datos a una variable de tipo estructura, se puede hacer de dos
maneras:
Por medio de una instruccin de lectura o por medio de una instruccin
de asignacin:
INGRESANDO UN DATO CON LA INSTRUCCIN cin: para ingresar datos con
esta instruccin se procede as:
cin>>nombre_variable.nombre_campo;
EJEMPLO:
La instruccin:
cin>>a.p_real;
Permite ingresar un nmero real a la variable p_real de la variable a

87

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

INGRESANDO UN DATO CON LA INSTRUCCIN DE ASIGNACIN:


Para ingresar datos con esta instruccin se procede as:
nombre_variable.nombre_campo=variable ;
EJEMPLO:
El siguiente programa muestra cmo se puede utilizar una variable de tipo
estructura en un problema de suma de complejos:
#include <conio.h>
#include <iostream.h>
main()
{
typedef struct {
float parte_real;
float parte_imaginaria;
}complejo;
complejo
a,b,c;
system(cls) ;
cout<<"Escriba la parte real de a : ";
cin>>a.parte_real;
cout<<"\nEscriba la parte imaginaria de a : ";
cin>>a.parte_imaginaria;
cout<<"\nEscriba la parte real de b : ";
cin>>b.parte_real;
cout<<"\nEscriba la parte imaginaria de b : ";
cin>>b.parte_imaginaria;
c.parte_real=a.parte_real + b.parte_real;
c.parte_imaginaria=a.parte_imaginaria + b.parte_imaginaria;
cout<<\n <<a.parte_real<<"+ i"<<a.parte_imaginaria;
cout<<\n <<b.parte_real<<"+ i"<<b.parte_imaginaria;
cout<<\n <<c.parte_real<<"+ i"<<c.parte_imaginaria;
getch();
}

Leccin 33: Estructuras Anidadas


Tambin est permitido anidar estructuras, con lo cual se pueden conseguir
superestructuras muy elaboradas.
Los miembros de una estructura pueden ser, a su vez, de un tipo de dato
estructurado. Analice el siguiente ejemplo donde se declara un tipo de dato
llamado Directorio que contiene la direccin, el telfono y un tipo de dato
estructurado llamado Contacto integrada por el nombre, el apellido y la ciudad
88

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Ejemplo:
typedef struct
{
char nombre[20];
char apellido[20];
char ciudad[15];
} Contacto;
typedef struct
{
Contacto lista[100];
char direccion[30];
char telefono[8];
} Directorio;
Directorio cliente; //declaracin de la estructura cliente, de tipo directorio
...
En este caso para acceder a los miembros de la variable cliente, de tipo Directorio,
se deben utilizar ndices y el operador de acceso a miembro.
EJEMPLO: as se escribe la ciudad del tercer contacto que se encuentra en
Directorio, en la variable cliente:
printf(%s, cliente.lista[2].ciudad);
En general, no es una prctica corriente definir estructuras dentro de estructuras,
ya que tienen un mbito local, y para acceder a ellas se necesita hacer referencia
a la estructura ms externa.

Leccin 34: Estructuras Annimas


Antes se dijo, al hablar sobre la sintaxis de las declaraciones de estructuras, que
debe aparecer o bien el identificador de estructura, o bien declararse alguna
variable de ese tipo. Bien, eso no es del todo cierto. Hay situaciones donde se
pueden omitir ambos identificadores.
Una estructura annima es la que carece de identificador de tipo de estructura y
de declaracin de objetos del tipo de estructura.
Por ejemplo, revice esta declaracin:
struct stAnonima {
struct {
int x;
int y;
89

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

};
int z;
};
Para acceder a los campos x o y se usa la misma forma que para el campo z:

stAnonima
Anonima;
Anonima.x = 0;
Anonima.y = 0;
Anonima.z = 0;
Pero, cul es la utilidad de esto?
Pues, la verdad, no mucha, al menos cuando se usa con estructuras.
El mtodo usado para declarar la estructura dentro de la estructura es la forma
annima, como ver no tiene identificador de tipo de estructura ni de campo. El
nico lugar donde es legal el uso de estructuras annimas es en el interior de
estructuras y uniones.
Se puede usar el operador sizeof para calcular el espacio de memoria necesario
para almacenar una estructura.
Sera lgico suponer que sumando el tamao de cada elemento de una
estructura, se podra calcular el tamao de la estructura completa, pero no
siempre es as. Por ejemplo:
#include <iostream.h>
#include <conio.h>
struct A { int x;
char a;
int y;
char b;
};
struct B { int x;
int y;
char a;
char b;
};
main()
{
cout << "Tamao de int: "<< sizeof(int) << endl;
cout << "Tamao de char: "<< sizeof(char) << endl;
90

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

cout << "Tamao de estructura A: "<< sizeof(A) << endl;


cout << "Tamao de estructura B: "<< sizeof(B) << endl;
return 0;
}
El resultado, usando Dev-C++, es el siguiente:
Tamao de int: 4
Tamao de char: 1
Tamao de estructura A: 16
Tamao de estructura B: 12
Si se hacen las cuentas, en ambos casos el tamao de la estructura debera ser
el mismo, es decir, 4+4+1+1=10 bytes. Sin embargo en el caso de la estructura A
el tamao es 16 y en el de la estructura B es 12, por qu?
La explicacin es algo denominado alineacin de bytes (byte-aling). Para mejorar
el rendimiento del procesador no se accede a todas las posiciones de memoria.
En el caso de microprocesadores de 32 bits (4 bytes), es mejor si slo se accede
a posiciones de memoria mltiplos de cuatro, de modo que el compilador intenta
alinear los objetos con esas posiciones.
En el caso de objetos int es fcil, ya que ocupan cuatro bytes, pero con los
objetos char no, ya que slo ocupan uno.
Cuando se accede a datos de menos de cuatro bytes la alineacin no es tan
importante. El rendimiento se ve afectado sobre todo cuando hay que leer datos
de cuatro bytes que no estn alineados.
En el caso de la estructura A se ha intercalado campos int con char, de modo
que el campo int y, se alinea a la siguiente posicin mltiplo de cuatro, dejando
tres posiciones libres despus del campo a. Lo mismo pasa con el campo b.

0 1
x

vaco

8
y

10 11 12 13 14 15
b

vaco

En el caso de la estructura B hemos agrupado los campos de tipo char al final de


la estructura, de modo que se aprovecha mejor el espacio, y slo se desperdician
los dos bytes sobrantes despus de b.

91

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

0 1
x

10 11

vaco

Leccin 35: Ejercicios


1. Escribir un programa que almacene en un array los nombres y nmeros
de telfono de 10 personas. El programa debe leer los datos introducidos
por el usuario y guardarlos en memoria (en el array). Despus debe ser
capaz de buscar el nombre correspondiente a un nmero de telfono y el
telfono correspondiente a una persona. Ambas opciones deben se
accesibles a travs de un men, as como la opcin de salir del programa.
El men debe tener esta forma, ms o menos:
a) Buscar por nombre
b) Buscar por nmero de telfono
c) Salir
Elige una opcin:
Nota: No olvides que para comparar cadenas se debe usar una funcin,
no el operador ==.
2. Para almacenar fechas podemos crear una estructura con tres campos:
ao, mes y da. Los das pueden tomar valores entre 1 y 31, los meses
entre 1 y 12 y los aos, dependiendo de la aplicacin, pueden requerir
distintos rangos de valores. Para este ejemplo se considerar suficientes
128 aos, entre 1960 y 2087. En ese caso el ao se obtiene sumando
1960 al valor de ao.
El ao 2003 se almacena como 43. Usando
estructuras, y ajustando los tipos de los campos, se necesita un char para
dia, un char para mes y otro para ao. Disear una estructura anloga,
llamada fecha, pero usando campos de bits. Usar slo un entero corto sin
signo (unsigned short), es decir, un entero de 16 bits. Los nombres de
los campos sern: dia, mes y anno.
3. Basndose en la estructura de bits del ejercicio anterior, escribir una
funcin para mostrar fechas: void Mostrar(fecha);. El formato debe ser:
"dd de mmmmmm de aaaa", donde dd es el da, mmmmmm el mes con
letras, y aaaa el ao. Usar un array para almacenar los nombres de los
meses.
4. Basndose en la estructura de bits del ejercicio anterior, escribir una
funcin bool ValidarFecha(fecha), que verifique si la fecha entregada
como parmetro es vlida. El mes tiene que estar en el rango de 1
92

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

a 12, dependiendo del mes y del ao, el da debe estar entre 1 y 28, 29,
30 31. El ao siempre ser vlido, ya que debe estar en el rango de 0
a 127. Para validar los das se usar un array int DiasMes[] = {31, 28, 31,
30, 31, 30, 31, 31, 30, 31, 30, 31};. Para el caso de que el mes sea
febrero, se crear otra funcin para calcular si un ao es o no
bisiesto: bool Bisiesto(int); Los aos bisiestos son los divisibles entre 4, al
menos en el rango de 1960 a 2087 se cumple.
Nota: los aos bisiestos son cada cuatro aos, pero no cada 100, aunque
s cada 400. Por ejemplo, el ao 2000, es mltiplo de 4, por lo tanto
debera haber sido bisiesto, pero tambin es mltiplo de 100, por lo tanto
no debera serlo; aunque, como tambin es mltiplo de 400, finalmente lo
fue.
5. Siguiendo con el tema de las fechas. Ahora escribir dos funciones ms: la
primera debe responder a este prototipo: int CompararFechas(fecha,
fecha). debe comparar las dos fechas suministradas y devolver 1 si la
primera es mayor, -1 si la segunda es mayor y 0 si son iguales.
La otra funcin responder a este prototipo: int Diferencia(fecha, fecha), y
debe devolver la diferencia en das entre las dos fechas suministradas.

93

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 8: ARCHIVOS

Introduccin
Cuando se habla de un conjunto de datos estructurados en una coleccin de
entidades bsicas, conocidas como registros, se est haciendo referencia a los
archivos. Generalmente estos contienen una cantidad importante de datos, que
se almacena en dispositivos de memoria secundaria.
El manejo de archivos en C, se hace mediante el concepto de flujo (streams) o
canal, tambin conocido como secuencia. Estos flujos pueden estar abiertos o
cerrados y conducen los datos entre el programa y los dispositivos externos.

Leccin 36: Definicin


Los archivos tambin denominados ficheros (file), son una coleccin de
informacin (datos relacionados entre s), localizada o almacenada como
una unidad en alguna parte del computador.
Un archivo est compuesto por un conjunto de registros lgicos del mismo tipo.
Registro lgico: es la unidad homognea de informacin compuesta por tems o
campos de datos (elementales o compuestos), que hacen referencia a un
determinado dato, individuo o concepto.
Un ejemplo lo constituye el archivo de los empleados de una empresa. Los
registros lgicos podran incluir los siguientes datos: identificacin, nombres,
apellidos, direccin, telfono, profesin, cargo y sueldo; cada uno de ellos
constituye un campo, y el conjunto de campos que corresponden, en este caso, a
un empleado constituyen un registro. Generalmente uno de estos campos permite
su diferenciacin con los dems y se denomina campo clave o identificador de
registro; en el ejemplo citado, el campo clave sera: identificacin.
Los archivos de datos se guardan en soporte de almacenamiento externo,
entonces para utilizarlos se necesita transferir la informacin del soporte a la
memoria RAM, para operar con ella, y luego de las operaciones realizadas con el
archivo, para mantener su actualizacin, se realiza el proceso inverso, esto es, de
la RAM al soporte.
Como ya se mencion, los archivos se pueden ubicar en dispositivos externos
(cintas, cartuchos, discos, etc.), se identifican mediante un nombre y poseen unas
caractersticas. Para administrar los archivos se utilizan programas, en el
programa el archivo tiene un nombre interno que es un puntero a una estructura
definida previamente. La estructura mencionad contiene informacin sobre el
94

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

archivo (direccin del buffer que utiliza, modo de apertura del archivo, ltimo
carcter ledo del buffer, entre otros).
En esta instancia es importante saber que existe el tipo FILE y que se debe definir
un puntero a FILE, por cada archivo que se vaya a procesar.

Leccin 37: Caractersticas de los Archivos


Los archivos cobran vital importancia al permitir almacenar y recuperar
informacin. Las principales caractersticas de los archivos son:

Independencia de las informaciones respecto de los programas: si bien es


cierto que para manipular los archivos se requieren programas con las
instrucciones necesarias para ello, es de resaltar que los datos almacenados
en el archivo tiene una total independencia del programa que se utiliza para
manipular los datos.
La informacin almacenada es permanente: la informacin almacenada en
archivos se mantiene aunque el programa no se est ejecutando, y no se
altera al apagar el equipo.
Un archivo puede ser accedido por distintos programas en distintos momentos:
la informacin registrada en un archivo puede ser accesada por diferentes
tipos de programas, diferentes usuarios y en cualquier momento que se
requiera.
Gran capacidad de almacenamiento: un archivo permite almacenar gran
cantidad de datos, y no requiere definir previamente el espacio a utilizar.

Leccin 38: Clasificacin de los Archivos


En base a su funcin, existen 6 tipos bsicos de archivos clasificados por la
funcin que desempean en un sistema de informacin.

ARCHIVO MAESTRO.
ARCHIVO DE TRANSACCIONES.
ARCHIVO DE REPORTE.
ARCHIVO DE TRABAJO.
ARCHIVO DE PROGRAMA.
ARCHIVO DE TEXTO.

ARCHIVO MAESTRO: representa una visin esttica de algn aspecto de los


negocios de una organizacin en un momento dado. Un registro en un archivo
maestro registra el estado de alguno de sus componentes. Ejemplo: los pagos
efectuados a un empleado; un archivo maestro contiene datos relativamente
permanentes o datos de estados histricos. Los cambios que han de ser
aplicados al archivo maestro, son recolectados en un archivo de transacciones.
95

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ARCHIVO DE TRANSACCIONES: puede contener datos para agregar un nuevo


registro o para borrar, o modificar un registro maestro. Cada registro en un
archivo de transacciones representa un evento a un cambio de alguna cosa, esto
sucede permanentemente en las aplicaciones
comunes, por ejemplo
modificaciones en un editor de texto o en una hoja de clculo.
ARCHIVO DE REPORTE: contiene datos que son formateados para su
representacin al usuario; ejemplo: archivo de reporte de una nmina.
ARCHIVO DE TRABAJO: es un archivo temporal en el sistema, no tiene las
caractersticas de E/S de un archivo de transacciones de reporte; ejemplo:
archivo de trabajo para el ordenamiento de empleados. El archivo de trabajo se
usa comnmente para pasar datos creados por un programa a otro programa.
ARCHIVO DE PROGRAMA: contiene instrucciones para procesar datos, las
cuales pueden almacenarse en otros archivos o recidir en la memoria principal.
Ejemplo: el cdigo de un lenguaje de alto nivel (lenguaje c, c++, etc), lenguaje
ensamblador, lenguaje mquina.
ARCHIVO TEXTO: Contiene datos alfanumricos y grficos ingresados a travs
de un editor de texto, como puede ser el block de notas.
En general C proporciona la manipulacin de tantos tipos de archivos como tipos
de datos existen, el paquete Standard de input/output de "C" y por ende de C++,
hace disponible 4 mtodos o maneras diferentes de leer y escribir los datos a
disco.
1. Datos a ser grabados o ledos como un carcter a la vez, se utilizarn
funciones anlogas a getchar y putchar.
2. Datos que pueden ser ledos o grabados como una string se usarn funciones
anlogas a gets y puts.
3. Datos que se capturen o desplieguen con formatos parecidos a los usados por
scanf y printf, se usarn funciones similares, es decir sern problemas
que involucran mezclas de strings, caracteres, floats, etc.
4. Tambin se podrn leer y escribir datos de tipo arreglo y registros utilizando
instrucciones apropiadas, en resumen:
Carcter

Leer

getc()

String

fgets()

Formateado

fscanf()

Registros
y
arreglos
fread()
96

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Escribir

putc()

fputs()

fprintf()

fwrite()

TABLA 2. Funciones para trabajo con archivos

Leccin 39: Tipos de Archivos


Los elementos de un archivo pueden ser de cualquier tipo, simples o
estructurados o segn su funcin.
SEGN SU FUNCIN.
Se define por:
1. Archivos Permanentes: son aquellos cuyos registros sufren pocas o ninguna
variacin a lo largo del tiempo, se dividen en:
Constantes: estn formados por registros que contienen campos fijos y
campos de baja frecuencia de variacin en el tiempo.
De Situacin: son los que en cada momento contienen informacin
actualizada.
Histricos: contienen informacin acumulada a lo largo del tiempo, de
archivos que han sufrido procesos de actualizacin o bien acumulan
datos de variacin peridica en el tiempo.
2. Archivos de Movimiento: son aquellos que se utilizan conjuntamente con
los maestros (constantes), y contienen algunos campos comunes en sus
registros con aquellos, para el procesamiento de las modificaciones
experimentados por los mismos.
4. Archivo de Maniobra o Transitorio: son los archivos auxiliares creados
durante la ejecucin del programa y borrados habitualmente al terminar el
mismo.

SEGN SUS ELEMENTOS.


Los principales archivos de este tipo son:
Archivo de Entrada: una coleccin de datos localizados en un dispositivo de
entrada.
Archivo de Salida: una coleccin de informacin visualizada por el computador.
97

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Constantes: estn formados por registros que contienen campos fijos y campos
de baja frecuencia de variacin en el tiempo.
De Situacin: son los que en cada momento contienen informacin
actualizada.
Histricos: contienen informacin acumulada a lo largo del tiempo de archivos
que han sufrido procesos de actualizacin, o bien acumulan datos de variacin
peridica en el tiempo.
Archivos de Movimiento o Transacciones: Son aquellos que se utilizan
conjuntamente con los maestros (constantes), y contienen algn campo comn
en sus registros con aquellos, para el procesamiento de las
modificaciones
experimentados por los mismos.
Archivos de Maniobra o Transitorios: son los archivos auxiliares creados
durante la ejecucin del programa y borrados habitualmente al terminar el mismo.

Leccin 40: Ejercicios


1. Realice un programa que permita manejar el acceso de estudiantes a la sala
de cmputo de la universidad. Es su responsabilidad realizar el anlisis
respectivo, lo que le permitir tener un programa funcional.
2. Realizar un programa que permita elegir el formato (windows o linux) y permita
escribir un determinado texto de cualquier tamao y guardarlo en un archivo
ascii con el formato especificado llamado c:\texto.txt.
Los archivos de texto windows tienen como marcador de final de lnea
la secuencia CR (retorno de carro ascii=13) y LF (line feed ascii=10). Los de
Linux solo tienen LF.
3. Realizar un programa que lea c:\texto.txt y proporcione las siguientes
estadsticas: n total de caracteres, n de maysculas, n de consonantes, n
de vocales y las cinco letras ms usadas.
4. Escribir un programa que solicite palabras y las agregue a un fichero
llamado c:\diccionario de forma que luego se puedan consultar las palabras
una a una

98

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

CAPITULO 9: ACCESO A LOS ARCHIVOS

Introduccin
Con los archivos se pueden realizar varias operaciones, algunas de ellas son:
creacin, apertura, cierre, lectura, escritura, etc. En este captulo se describir
como se realiza cada una de ellas.
Para acceder a los datos contenidos en los archivos, se pueden utilizar diferentes
mtodos. Esto depende de la forma como estn organizados los registros. Es as
como se pueden realizar bsquedas secuenciales, de forma directa, por ndice,
entre otros.
La eleccin del mtodo est directamente relacionada con la estructura de los
registros del archivo y del soporte utilizado.

Leccin 41: Operaciones que se realizan a los Archivos


Existen muchas operaciones asociadas a archivos en C, las ms elementales
son:
1. Creacin: antes de realizar cualquier operacin sobre un fichero, es necesario
que haya sido creado y almacenado en el soporte seleccionado. En este
proceso se pretende solamente crear un archivo nuevo en disco con su
nombre, tipo y especialidad de almacenamiento de datos apropiado. archdisco =
fopen("c:\\ac\\alumnos.dat","w");
2. Apertura: en este caso se pretende abrir un archivo ya existente en disco para
procesarlo ya sea para cargar, grabar o modificar estructuras en sus registros o
leer algn registro en especial para ser manipulado de acuerdo a la necesidad
del usuario. Como norma general un fichero nunca deber permanecer abierto
ms tiempo del necesario, esto es, el perodo empleado para realizar la
operaciones de lectura o escritura sobre l.
Observacin: no confundir creacin con apertura, creacin es un proceso que
solo se ejecuta una sola vez en la vida de un archivo, si se ejecuta ms de una
vez los datos del archivo se pierden, mientras que apertura, siempre se esta
realizando por los programas especializados en algn proceso.
3. Cierre de archivos: es la operacin ms importante en cualquier programa
que maneje archivos, de no cerrar los archivos existe mucha probabilidad que se
pierdan los datos.
4. Lectura de archivo: en este proceso se abre el archivo, se enva el registro de
99

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

disco a una estructura en memoria para su procesamiento.


5. Consulta de archivos: en este proceso se pretende desplegar todos los
registros del archivo en disco a la pantalla, o a otro dispositivo como la impresora.
6. Actualizacin: esta operacin permite tener actualizado el fichero, mediante la
escritura de nuevos registros, la eliminacin o modificacin de los ya existentes.
Puede afectar a partes o a la totalidad de los registros.
7. Bsqueda en archivos: una de las operaciones ms comunes consiste en que
el usuario pide toda la informacin de algn registro.
8. Filtros: en este proceso el usuario est interesado en algn conjunto de
registros con caractersticas comunes (condicin), por ejemplo todos los alumnos
de "introduccin a la programacin" que tengan notas promedio superiores a 4.5
o todos los empleados que ganen mas de $5500.00 pesos.
9. Ordenacin o Clasificacin: posibilita establecer un orden entre los registros
almacenados dentro del fichero (ascendente o descendente).
10. Copiado o duplicado: esta operacin parte de un fichero origen y crea un
nuevo fichero destino con la misma estructura y contenido que el primero. Esta
operacin no altera el fichero original.
11. Concatenacin: se parte de la existencia de dos ficheros que tienen igual
estructura, por lo cual, la concatenacin de ambos crea un tercer fichero de igual
estructura y cuya informacin es la suma del contenido del primer fichero, ms el
contenido del segundo fichero. Los ficheros originales no se afectan.
12. Fusin o mezcla: esta operacin permite obtener de dos o ms ficheros con
la misma clasificacin y estructura interna de sus datos, un nuevo fichero que
contenga dos registros de todos los anteriores, sin alterar la ordenacin que stos
tenan establecida. No afecta los ficheros que intervienen en el proceso de fusin.
13. Interseccin: consiste en crear un nuevo fichero partiendo de los registros
comunes de dos o ms ficheros, que tienen la misma estructura.
14. Particin o Rotura: permite tener varios ficheros de uno inicial, en funcin de
alguna de las caractersticas internas de sus campos.
15. Borrado de instruccin: es la operacin inversa a la creacin de un fichero,
y en consecuencia una vez efectuada dicha operacin, se pierde toda posibilidad
de acceder a los datos previamente almacenados.

100

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Leccin 42: Organizacin y acceso de los archivos


La organizacin de un archivo se refiere a la forma en que se disponen los
registros en el dispositivo de almacenamiento, es decir, como se estructuran.
Basicamente se consideran tres tipos de organizacin:
1. Organizacin secuencial: un archivo con organizacin secuencial es una
sucesin de registros almacenados consecutivamente, uno detrs de otro, de
tal modo que para acceder a un registro dado es necesario pasar por todos los
registros que le preceden. Un archivo con organizacin secuencial se puede
procesar tanto en modo texto como en modo binario. En C para crear estos
archivos se abren ( fopen() ) especificando en el argumento modo: w, a,
wb o ab.
El acceso Secuencial, exige el tratamiento de cada elemento, para esto es
necesaria una exploracin secuencial comenzando desde el primer elemento.
Un archivo de texto secuencial, debe ser ledo del principio hasta el final.
Al finalizar un archivo secuencial se denota con una marca de fin de archivo.
(End end-of-file). La mayor parte de los lenguajes por procedimiento de
alto nivel cuenta con caractersticas que ayudan a detectar la marca de fin
de archivo.
2. Organizacin directa: un archivo con organizacin directa (aleatoria), o
sencillamente archivo directo, se caracteriza porque el acceso a cualquier
registro es directo mediante la especificacin de un ndice, que da la posicin
ocupada por el registro respecto al origen del archivo.
El Acceso Directo, permite procesar o acceder a un elemento
determinado y referenciado, directamente por su posicin en el soporte de
almacenamiento. Un archivo aleatorio, tiene registros de un mismo largo. Un
programa puede accesar directamente cualquier registro sin tener que leer los
registros previos.
3. Organizacin secuencial indexada: para este tipo de organizacin, el tipo de
los registros contendr una campo clave identificador. La clave se asocia con
la direccin (posicin) del registro de datos en el archivo principal.
Un archivo con organizacin secuencial indexada consta de las siguientes
partes:
rea de datos: contiene los registros de datos en forma secuencial, sin
dejar huecos intercalados.
rea de ndices: es una tabla que contiene la clave identificativa y la
direccin de almacenamiento. Puede haber ndices enlazados.
El rea de ndices normalmente est en memoria principal para aumentar la
101

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

eficiencia en los tiempos de acceso. Ahora bien, debe haber un archivo donde
guardar los ndices para posteriores explotaciones del archivo de datos.
Entonces al disear un archivo indexado hay que pensar que se manejarn
dos tipos de archivos, el de datos y el de ndices, con sus respectivos
registros. Un claro ejemplo de archivo secuencial indexado es la gua de
telfonos, con dos niveles de ndices, el nivel superior para las letras inciales
y el nivel menor para las cabeceras de pgina. Por consiguiente, cada archivo
secuencial indexado consta de un archivo de ndices y un archivo de datos.
La indexacin permite incluir ndices en el almacenamiento de los archivos; de
esta forma ser ms fcil buscar algn registro sin necesidad de ver todo el
archivo. Un ndice en un archivo consiste en un listado de los valores del
campo clave que ocurren en el archivo, junto con la posicin de registro
correspondiente en el almacenamiento masivo.
Fundamento de los ndices
a. La colocacin de un listado al inicio del archivo: para la identificacin del
contenido.
b. La presentacin de un segundo ndice: para reflejar la informacin de cada
punto principal del ndice anterior.
c. La actualizacin de los ndices: Cuando se insertan y eliminan archivos, es
preciso actualizar los ndices para evitar contratiempos actualizando un
archivo.
d. La organizacin de un ndice: Nos evita examinar archivo por archivo para
recuperar algn registro buscado; por lo tanto ahorraramos tiempo si
tenemos una adecuado organizacin de los ndices.

Leccin 43: Instrucciones para manejar archivos


OPEN: reserva un espacio del buffer para la data que mover entre el programa y
los archivos.
La estructura es:
OPEN filespec FOR {Append|Binary|Input|Outuput|Random} As #filenumber
Por ejemplo:
OPEN "C:\Windows\AddrBook.ini" FOR Input As #1
Filespec:
Es la localizacin de
incluyendo usualmente el drive y path.

archivo

en

el

que

se

trabajar,

"C:\Windows\AddrBook.ini"
102

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

{Append| Binary| Input| Out#put| Random} El programador tiene que seleccionar


uno. Binary y Random se utiliza para archivos binarios y aleatorios. Append,
Input y Output son usados con archivos secuenciales. Un archivo secuencial no
puede ser abierto para leer y escribir simultneamente. Output es usado para
escribir en el archivo. Input es usado para leer del archivo. Append es usado
para colocar data al final de un archivo existente.
#filenumber: es necesario asignar un nmero al archivo. El nmero puede estar
en el rango de #1 a #511 y es usado por Visual Basic para identificar el archivo.
CLOSE: para cerrar un archivo.
La estructura es: CLOSE #filenumber
Por ejemplo: CLOSE #1
WRITE: enva data del programa al archivo secuencial.
La estructura es: WRITE #filenumber, [OutputList]
Por ejemplo:
WRITE #1, UserName, UserCompany, SerialNumber
WRITE es la operacin opuesta al INPUT. Las expresiones en el OutputList son
separadas por comas. WRITE inserta comillas y comas a la data que envia al
archivo.
INPUT: lee data del archivo. La estructura es: INPUT #filenumber, InputList
Por ejemplo:
INPUT #1, UserName, UserCompany, SerialNumber
Declaracin y asignacin de archivos
La declaracin de un archivo con tipo se efecta con la ayuda de las palabras
reservadas file of.
El procedimiento de asignacin es idntico al utilizado anteriormente.
Ejemplo:
Type
datos = record
clave : integer;
nombre : string[30];
puesto : string[20];
sueldo : real;
103

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

estado : boolean;
{true activo,false baja lgica}
end;
Var
archivo:file of datos;
begin Assign(archivo,'empleado.dat');

SISTEMA DE MANEJO DE ARCHIVOS.


Tiene las siguientes funciones:

Controla los datos en almacenamiento secundario.


Proporciona al usuario una abstraccin de cmo se manipulan los datos
internamente.
Proporciona independencia de E/S con los dispositivos.
Soporte de comparticin, proteccin, recuperacin de archivos y posibles
cadas del sistema.
Transmisin de datos de memoria principal a secundaria.

Los archivos de una empresa pueden almacenarse en diferentes dispositivos.


Todos los archivos se pueden almacenar por medio de directorios, que no son
otra cosa ms que tablas de smbolos de archivo, los directorios se pueden
utilizar de dos formas:

Directorio de Nivel nico o Directorio Plano: con este mtodo, se almacenan


todos los archivos en un solo nivel, este mtodo se utiliza en sistemas, donde
el volumen de archivos no es grande.

Directorio Jerrquico: los archivos son almacenados por medio de directorios.


Esta clasificacin se hace de acuerdo a la conveniencia del usuario o de la
empresa. La estructura tiene una forma de rbol con raz, este mtodo es el
ms utilizado debido a que la revisin o bsqueda se realiza de forma sencilla.
Para accesar a los archivos que se almacenan en un sistema jerrquico, el
usuario debe indicar el o los directorios que se deben recorrer para localizar
el archivo deseado, a esto se le denomina ruta de acceso del archivo. La ruta
de acceso puede ser de dos formas:
o Ruta absoluta: este tipo de ruta de acceso inicia siempre con una
diagonal invertida [\].
104

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

C:\Edit
c:\SOS\sistemas\report.txt
o Ruta relativa: este tipo de ruta de acceso realiza la bsqueda del archivo
en el directorio de trabajo actual, si el archivo no se localiza aqu, el S.O. lo
buscar en los directorios especificados en el PATH de un archivo con
extensin .BAT
C:\Edit report.txt

Leccin 44: Archivos tipo Texto


Tambin conocidos como (Slream File), son utilizados para almacenar
documentos que consisten en texto; en ellos, cada registro es un slo smbolo o
cdigo de control. El leer estos archivos se recibe la informacin en orden
secuencial, tal como aparece cuando se muestra en un monitor.
Los archivos de texto son una secuencia de lneas separadas por marcas de fin
de lnea. El usuario escribe los archivos de textos mediante un procesador de
palabras que le permitir almacenar la informacin pero no estrictamente en
forma secuencial.
El procesador tambin permite el desplazamiento por todo el bloque de
informacin y realizar modificaciones.
A continuacin se trabajar un ejemplo para determinar cmo se realiza la
creacin fsica de un archivo tipo texto:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
struct {
int matricula;
char nombre[30];
int edad;}alumno;
main()
{
system(cls);
//creando y cerrando el archivo en disco
FILE *archivo;
archivo = fopen("c:\\ac\\alumnos.dat","w");
fclose(archivo);
cout<<ARCHIVO CREADOSATISFACTORIAMENTE;
105

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

getchar();getchar();
}
Al momento de ejecutarlo

FIGURA 6. Ventana de ejecucin 1


Lo primero que se crea es una variable de tipo puntero o apuntador a un archivo
en el disco (instruccin FILE y debe ser en MAYSCULAS) llamada archivo.
Recuerde que las variables apuntadores son tipos especiales de variables que
tienen la capacidad de almacenar no datos, pero si direcciones ya sean de la
memoria del computador o como en este caso de una direccin fsica del disco.
En el programa se est creando una variable apuntador bautizada con el nombre
de archivo, que almacenar la direccin fsica del archivo en disco. Como
segundo paso se abre el archivo con la instruccin fopen():
archivo = fopen("c:\\ac\\alumnos.dat","w");
Observar que el path es la direccin fsica en el disco del computador.
Observar el doble diagonal (\\) en el parmetro.
La funcin fopen() cuando realiza el trabajo de abrir un archivo, regresa la
direccin fsica donde crea o graba el archivo en disco.
El primer parmetro o argumento en esta funcin es la unidad de disco y el
nombre del archivo.
El segundo parmetro o argumento es llamado modo y es una de los varios
modos que se pueden usar.
106

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

"r" ----> Lectura.


"w" ----> Escritura.
"a" ----> Append, si el archivo ya existe append empieza a aadir los nuevos datos
al final del archivo ya existente.
"r+" ---> Lectura y escritura, ya debe existir el archivo.
"w+" ---> Crea para lectura y escritura y si ya existe, sobreescribe.
"a+" ---> Crea o abre para lectura y append, sino existe el archivo ser creado.
Existen dos caracteres que permiten determinar el tipo de archivo que se est
creando, pero insertndolo antes del signo +
Modo significado.
t lo abre en modo texto.
b lo abre en modo binario.
Cuando se ha finalizado de escribir al archivo se debe cerrar y esto se hace con la
instruccin:
fclose(archivo);

Si usted ya transcribi el cdigo, lo ms seguro es que no haya


realizado nada, pero le pregunto, tiene el directorio en su disco llamado
ac ?.. Lo sabia, NO. Pues ahora cree ese directorio o carpeta (atencin,
en la raz de la estructura del disco) y vuelva a correr el programa,
ahora mire la carpeta y debe tener un archivo creado, si esto es as, lo
logr!.

FIGURA 7. Recomendacin
Las funciones para manipular los Archivos se encuentran en el archivo de
cabecera <stdio.h> y vale la pena mencionarlas:
Funcin
fopen()
fclose()
putc()
getc()
fputs()
fgets()
fseek()
fprintf()
fscanf()
eof()

Descripcin
Abre un flujo
Cierra un flujo
Escribe un carcter en un flujo
Lee un carcter desde un flujo
Escribe una cadena en un flujo
Obtiene una cadena de un flujo
Salta al byte especificado en un flujo
Imprime datos con formato en un flujo
Lee datos con formato en un flujo
Devuelve verdadero o falso si se halla el fin del archivo.
107

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Analice el siguiente programa que graba registros bsicos de un estudiante,


#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int edad;} alumno;
main()
{
system(cls);
// captura de campos
printf("Numero de matricula :");
scanf("%d",&alumno.matricula);
getchar(); printf("/nNombres :");
gets(alumno.nombre);
printf("/nEdad :");
scanf("%d",&alumno.edad);
// grabando a disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\alumnos.dat","at+");
fwrite(&alumno,sizeof(alumno),1,archdisco); fclose(archdisco);
//avisando usuario
printf("/NREGISTRO INSERTADO CORRECTAMENTE");
getchar();
getchar();
}

108

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

FIGURA 8. Ventana de ejecucin 2

Observe:
Con respecto al primer ejercicio,
1. La funcin fopen(), cambia de w a at+ esto permite abrir el archivo para
agregar datos.
2. Lo nuevo es la utilizacin de fwrite(&persona,sizeof(alumno),1,archdisco);
como se observa, ocupa 4 parmetros que son:
a) fwrite() primero conoce qu datos va a almacenar en disco, aqu se le
est indicando que es el dato que se tiene en la direccin de memoria
donde est el registro "alumno".
b) fwrite() conoce cuntos bytes de informacin debe grabar, para esto se
tienen dos opciones: o se le da el valor exacto por ejemplo 64 bytes o 39
bytes, o ms fcil aun se usa sizeof() que regresa el tamao del dato.
c) fwrite() necesita conocer tambin cuntas estructuras o registros a la
vez debe grabar, por lo general es un solo registro, pero es posible
grabar ms de un registro a la vez, y esto es de mucho provecho, porque
si en un sistema se requiere grabar 1000 registros y el usar fwrite() de
uno en uno, quiere decir que habra mil accesos a disco.
d) fwrite() conoce exactamente en que cluster, sector y byte del disco
duro debe grabar el registro. Para saber donde hay lugar para escribir el
archivo X, se usa la variable archdisco que ya tiene esa direccin fsica
del archivo en disco.
109

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Ya sabe cmo se crean archivos, como se ingresan datos, lo nico que queda es
como recuperar la informacin, eso se observar en el siguiente ejemplo:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int
edad;}
alumno;
main()
{
system(cls);
// leyendo disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\alumnos.dat","at+");
// aqui siempre debe empezar el ciclo de lectura
// y fread() regresa siempre cuantas estructuras ley
while(fread(&alumno,sizeof(alumno),1,archdisco)==1)
{
// desplegando estructuras
printf("MATRICULA =%d ",alumno.matricula);
printf(" NOMBRE =%s ",alumno.nombre);
printf(" MESES =%d ",alumno.edad);
printf("\n");
}; // aqui termina while
// no olvidar cerrar archivo y siempre fuera de while
fclose(archdisco);
getchar();getchar();
}
Pocas observaciones
1.

En fopen() se uso modo "a+".

2.

En lugar de fwrite(), se usa fread() con los mismos cuatro parmetros.


Tambin recordar que fread(), nos regresa la cantidad de registros que
existan en el disco, por eso el ciclo while se convierte en falso cuando fread()
regresa 0 y esto indica que se llego al fin del archivo.
110

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

El diseo de impresin es responsabilidad de usted, compruebe este ejercicio con


ms de 40 registros, organcelos por pantallas
Si todo est bien, pero no quiere mirar todos los registros de una vez, que puede
hacer?. Aqu est la solucin:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int edad;} alumno;
void main()
{
clrscr();
// cargando clave a buscar
printf("Numero de matricula a buscar: ");
int clave; scanf("%d",&clave);getchar();
//abriendo, leyendo,cargando estructura
FILE *archdisco;
archdisco = fopen("c:\\ac\\alumnos.dat","at+");
// aqui siempre debe empezar el ciclo de lectura
// y fread() regresa siempre cuantas estructuras ley
while(fread(&alumno,sizeof(alumno),1,archdisco)==1)
{
// desplegando estructura buscada
if ( clave == alumno.matricula)
{
printf("MATRICULA = %d ",alumno.matricula);
printf("\nNOMBRE = %s ",alumno.nombre);
printf("\nMESES = %d ",alumno.edad);
printf("\n");
}
} // aqui termina while
// no olvidar cerrar archivo y siempre fuera de while
fclose(archdisco);
getchar();
}

111

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

FIGURA 9. Ventana de ejecucin 3


Observaciones: recuerde que est haciendo un ejercicio con archivos
secuenciales, por consiguiente a estos no se puede acceder directamente, sino a
travs de un recorrido, bsqueda lineal. Ahora se puede dar cuenta porque este
mtodo de bsqueda no es el ms apropiado, imagnese en ms de mil registros
Para practicar consulte:
1. Cmo realizar una bsqueda que contenga filtros, por ejemplo: mostrar
por pantalla los estudiantes que sean mayores de edad.
2. El borrado es una de las opciones de mayor cuidado, podemos hacer
borrado fsico y borrado lgico; el fsico es desapareciendo el registro por
completo de la unidad de almacenamiento, y el lgico, es colocar una
marca y tenerlo en cuenta al momento de realizar consultas u o
operaciones con los archivos, la gran ventaja es que no se pierdan los
datos histricos, solo se los cubre. Es importante que usted indague mas
sobre estos temas y trate de hacer ejercicios que complementen su
conocimiento.
3. Realizar un ejercicio que permita llevar registros de una coleccin de
msica, esto lo realizar mediante la utilizacin de mens y funciones.

En este momento se presenta un ejercicio que muestra como se realiza


las operaciones con archivos:

112

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <conio.h>
#include <string.h>
struct {
int matricula;
char nombre[30];
int edad;} alumno;
main()
{
systemr(cls);
FILE *arch1;
FILE *arch2;
arch1 = fopen("c:\\ac\\alumnos.dat","r+");
arch2 = fopen("c:\\ac\\temporal.dat","at+");
// aqui siempre debe empezar el ciclo de lectura
// y fread() regresa, siempre, cuantas estructuras ley
while(fread(&alumno,sizeof(alumno),1,arch1)==1)
{
// OPERACIONES
alumno.edad=alumno.edad +50;
//grabando a temporal
fwrite(&alumno,sizeof(alumno),1,arch2);
}; // aqui termina while
//cerrando archivos
fclose(arch1);
fclose(arch2);
// removiendo y renombrando archivos
// recordar que directorios y archivos de datos no ms de 8 letras+ 3 de la
extensin
remove("C:\\AC\\ALUMNOS.DAT ");
rename("C:\\AC\\TEMPORAL.DAT","C:\\AC\\ALUMNOS.DAT ");
//avisando
puts("EDADES MAS 50");
getchar();
}
113

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Como se observa la solucin es muy sencilla solo se ocupa el registro original y


los dos archivos el original y el temporal, se va leyendo registro a registro de
archivo original al registro en memoria correspondiente, se realiza la operacin u
proceso deseado con el registro y se graba el registro modificado en el archivo
temporal, al final se elimina archivo original y se renombra el archivo temporal.

Leccin 45: Archivos de acceso directo


Esencialmente se comportan como los archivos antes vistos, pero su ventaja
radica en su velocidad para acceder a la informacin. Ejemplos:
Un archivo de acceso directo permite posicionar el apuntador interno de
registros, a cualquier registro determinado sin necesidad de pasar por todos los
registros anteriores, usando las siguientes funciones.
1. int fseek(apuntador,long offset,origen);
Esta funcin posiciona el apuntador de registro en el byte indicado. Regresa 0
si se pudo posicionar.
apuntador=fopen("a:archivo.dat","r+");
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
0 ---> SEEK_SET principio del archivo.
1 ---> SEEK_CUR posicion actual.
2 ---> SEEK_END fin del archivo.
2. long ftell(apuntador);
Regresa un valor long indicando la posicin actual del cursor interno de
registros de archivo.
3) int rewind(apuntador);
Regresa el apuntador al principio del archivo.
Ejemplo para hacer modificaciones:
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
fread(&registro,sizeof(registro),1,apuntador);
114

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Hacer las modificaciones.


rewind(apuntador);
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
fwrite(&registro,sizeof(registro),1,apuntador);
Manos a la obra nuevamente, mire el siguiente cdigo que crea un archivo de
este tipo, pero ahora utilizando los datos de mascotas.
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int clave;
char nombre[30];
int edad;} mascota;
main()
{
system(cls);
//creando y cerrando el archivo en disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\archivo1.dat","wb");
fclose(archdisco);
printf("ARCHIVO CREADO SATISFACTORIAMENTE ");
getchar();
}

FIGURA 10. Ventana de Ejecucin 4

115

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Ya es idntico a un archivo de acceso secuencial, en apariencia, pero analice lo


siguiente:
La diferencia es poca archdisco = fopen("c:\\ac\\archivo1.dat","wb");
Como observa hay una b al final de la instruccin, lo que indica que el archivo es
de tipo binario
Por supuesto el ingreso de los datos ser similar:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct { int clave;
char nombre[30];
int edad;} mascota;
main()
{
system(cls);
// captura de campos
printf("dame clave :");scanf("%d",&mascota.clave);getchar();
printf("dame nombre :");gets(mascota.nombre);
printf("dame edad :");scanf("%d",&mascota.edad);
// grabando a disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\archivo1.dat","ab+");
fwrite(&mascota,sizeof(mascota),1,archdisco);
fclose(archdisco);
//avisando al usuario
printf("mascota insertado");
getchar();
}

Observe que es completamente similar al programa de archivos secuenciales,


solo se recomienda y exige que las claves sigan la secuencia 0,1,2,3,4,5.....
Ahora mire como es una consulta
#include <stdio.h>
#include <conio.h>
116

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

#include <string.h>
struct {
int clave;
char nombre[30];
int edad;} mascota;
void main()
{
system(cls);
// leyendo disco
FILE *archdisco;
archdisco = fopen("c:\\ac\\archivo1.dat","rb+");
// aqui siempre debe empezar el ciclo de lectura
// y fread() regresa, siempre, cuantas estructuras ley
while(fread(&mascota,sizeof(mascota),1,archdisco)==1
{
// desplegando estructuras
printf("%d ",mascota.clave);
printf("%s ",mascota.nombre);
printf("%d ",mascota.edad);
printf("\n");
}; // aqu termina while
// no olvidar cerrar archivo y siempre fuera de while
fclose(archdisco);
getchar();;
}

En este caso no hay nada que comentar, puesto que se despliegan todos los
registros
Ahora se tiene el mismo ejercicio pero consultando un registro en especial, es
realmente aqu donde va a encontrar verdaderas diferencias.
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct {
int clave;
char nombre[30];
117

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

int edad;} mascota;


void main()
{
system(cls);
// cargando clave a buscar
printf(Digite la clave buscar:");
int claveb; scanf("%d",&claveb);
//abriendo, leyendo, cargando estructura
FILE *archdisco;
archdisco = fopen("c:\\ac\\archivo1.dat","ab+");
// usar fseek() para posicionarse al principio de registro buscado
fseek (archdisco, (long)(claveb)* sizeof(mascota), 0 );
// ahora se lee el registro
fread(&mascota,sizeof(mascota),1,archdisco);
// desplegando estructura y asegurndose
printf("%d ",mascota.clave);
printf("%s ",mascota.nombre);
printf("%d
",mascota.edad);
printf("\n");
// no olvidar cerrar archivo
fclose(archdisco);
getchar();
}
Como se desprende del programa usando fseek() es posible posicionarse en
cualquier byte del archivo.
El formato completo de fseek() es:
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
Donde los parmetros son:
a. Apuntador al archivo en disco
b. El segundo parmetro es el BYTE donde se quiere que empieza la lectura o
grabacin al archivo en disco.
c. Este BYTE debe ser de tipo LONG as que si en algn programa de ejemplo
ven fseek( , 387L, ); que no les llame la atencin, es otra manera de hacerle
118

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

cast a un dato.
Como va a estar difcil que se apunte a un byte determinado, es mejor se
deje que sea el propio servidor quien calcule el byte donde empieza un
registro determinado con clave * sizeof o tamao de registro.
d. El tercer parmetro es a partir de donde se quiere posicionar el apuntador
interno del archivo, los valores pueden ser:
0 ---> SEEK_SET principio del archivo.
1 ---> SEEK_CUR posicion actual.
2 ---> SEEK_END fin del archivo.

Recordar que es muy importante que las claves grabadas en un archivo directo
tengan la secuencia 0,1,2,3,4,5.....n
Revise el siguiente ejercicio con operaciones de archivos, donde se puede
evidenciar alguna diferencia sustancial con los archivos secuenciales
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <string.h>
struct {
int clave;
char nombre[30];
int edad;} mascota;
void main()
{
system(cls);
FILE *arch1;
long r=0;
arch1 = fopen("c:\\ac\\archivo1.dat","rb+");
while (fread(&mascota,sizeof(mascota),1,arch1)==1)
{
// sumando 100 a edad
mascota.edad = mascota.edad + 100 ;
// como ya se ley se regresa el apuntador al principio del registro
fseek(arch1,r*sizeof(mascota),0 );

119

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

// y se escribe el registro modificado al archivo


fwrite(&mascota,sizeof(mascota),1,arch1); r=r+1;
//C no permite i/o archivos sin un rewind, fseek, etc
fseek(arch1,r*sizeof(mascota),0);
}; // aqui termina while
//cerrando archivo
fclose(arch1);
//avisando
puts("EDADES + 100");
getchar();
}

Como se observa la solucin es muy sencilla solo se ocupa de:


1. Leer fread() el registro, esto mueve el apuntador al siguiente registro.
2. Modificar registro.
3. Regresar a posicin anterior con fseek()
4. Registro corregido.
5. Volver a usar un fseek() porque C no acepta i/o sin rewind, fseek, etc. y no
se ocupan los dos archivos como en el caso secuencial.

120

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ACTIVIDADES DE AUTOEVALUACIN DE LA UNIDAD 3

1. Realice un programa que permita manejar el acceso de estudiantes a la


sala de computo de la universidad, es responsabilidad de usted, realizar el
anlisis respectivo, lo que permita tener un programa funcional.
2. Realizar un programa que permita elegir el formato (windows o linux) y
permita escribir un determinado texto de cualquier tamao y guardarlo en
un archivo ascii con el formato especificado llamado c:\texto.txt. Los
archivos de texto windows tienen como marcador de final de lnea la
secuencia CR (retorno de carro ascii=13) y LF (line feed ascii=10). Los de
Linux solo tienen LF.
3. Realizar un programa que lea c:\texto.txt y proporcione las siguientes
estadsticas: n total de caracteres, n de maysculas, n de consonantes,
n de vocales y las cinco letras mas usadas.
4. Escribir un programa que solicite palabras y las agregue a un fichero
llamado c:\diccionario de forma que luego se puedan consultar las palabras
una a una.

121

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

BIBLIOGRAFA

AARN, M. TENENBAUM, Moshe. AUGENTEIN, J. Estructura de Datos en


Pascal. Primera edicin.
AGUILAR, Luis. Fundamentos de programacin, algoritmos y estructura de datos
(segunda edicin). Espaa. McGRAW-HILL.
AGUILAR, Luis. Fundamentos de programacin, algoritmos, estructura de datos y
Objetos (tercera edicin). Espaa. 2003. McGRAW-HILL.
BROOKSHEAR, J. Glenn, Introduccin a las ciencias de la Computacin (Cuarta
Edicin). Edicin Espaola 1995. Addison-Wesley Iberoamericana
DEYTEL Y DEYTEL. Como programa C++(segunda Edicin). Mexico D.F. 1999.
Prentice Hall. McGRAW-HILL
FARREL, Joyce, introduccin a la programacin lgica y diseo. Mexico D.F
2000. Thomson
JOYANES AGUILAR, Luis. CASTILLO SANZ, Andrs. SANCHEZ GARCIA,
Lucas. C algoritmos, programacin y estructuras de datos. Editorial McGraw-Hill.
Espaa. 2005.
JOYANES AGUILAR, Luis. SANCHEZ GARCIA, Lucas. Programacin en C++: un
enfoque prctico. Editorial McGraw-Hill. Espaa. 2006.
GARY, W. HANSEN, James. HANSEN, V. Diseo y Administracin de Base de
Datos. Segunda Edicin.
LOPEZ, David. Gua de Estructura y Procesamiento de Datos. Segundo semestre
U.N.I.R. (Maracaibo).
MENCHANA GARCIA, Felipe Rolando. Fundamentos de programacin en
lenguaje C. Editorial: Instituto Politcnico nacional de Mxico. 2010
Sitios WEB
http://members.tripod.com/~MoisesRBB/c.html
http://www.ilustrados.com/publicaciones/EpZVVEZpyEdFpAKxjH.php
http://libromanual.blogspot.com/2010/02/curso-de-c-con-devc.html
http://mcyti.izt.uam.mx/~gustavo/Cursos/Tutoriales/Codificacion_Compilacion_y_D
epuracion_con_el_IDE_DevC++.pdf
http://docente.ucol.mx/al989508/public_html/Hc1.htm
122

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

http://www.elmonton.net/PMc.php?contenido=PMc_3001_5077788_1
http://sistemas.uniandes.edu.co/~isis1301/dokuwiki/lib/exe/fetch.php?media=mater
ial_monitorias:manual_de_c.pdf
http://es.scribd.com/doc/29225934/Manejo-de-Arhivos-en-Lenguaje-C
http://es.scribd.com/doc/57113276/6/Caracteristicas-de-los-archivos

123

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ANEXO 1: Tipos de Datos


C soporta bsicamente tres tipos de dato:
Enteros
Reales (de coma o punto flotante)
Caracteres
La siguiente tabla indica el tipo de dato, la declaracin y los limites en los cuales
se puede mover una determinada variable
Tipo

Declaracin

Limite Inferior

Limite Superior

Entero

Int A;

-32768

32767

Entero Corto

Short Int A;

-128

127

Entero Largo

Long Int A;

2E -6

2E 6

Entero sin Signo

Unsigned Int A;

65535

Entero con Signo

Signed Int A;

-65000

65000

Real

Float A;

-3.4E37

3.4E 38

Real Doble

Double A;

-1.7E -304

1.7E 308

Real Largo

Long DoubleA;

3.4E -4932

1.1E 4932

Caracter

Char A;

-128

127

TABLA 3. Tipos de datos


Tipo de dato bool, est incorporado en los compiladores que siguen la norma
ANSI (Instituto Nacional Americano de Estndares) 2, cuyos valores pueden ser
verdadero (true) o falso (false), aunque en la realidad, muchos programadores no
utilizan este tipo de datos, lo remplazan por una variable bandera numrica
bandera, que pude tomar un valor 0 o 1 dependiendo la situacin
Operadores y expresiones
Expresiones: es un conjunto de datos compuesto de operandos unidos por
operadores. Los operandos pueden ser constantes, variables o funciones
Operadores: se utilizan para procesar adecuadamente los operandos de acuerdo
a sus tipos de datos. Por la caracterstica de operacin que realizan, los
operadores tambin se dividen en: aritmticos, relacionales, lgicos, entre otros, a
continuacin se muestra una tabla identificando el orden de la categora, el
operador y una pequea definicin.

124

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Categora

Operador

Qu es (o qu hace)

Mayor

() []
->

Invocacin de funcin, suscritos de


arreglos.
Selector de indireccin.

::

Resolucin de mbito.

Selector de componentes

Negacin lgica

(NOT) Complemento en binario

Ms

Menos

++

Preincremento o postincremento

--

Predecremento o postdecremento

&

Direccin

Valor en la direccin de

sizeof

Tamao del operando en bytes

new

Espacio en memoria dinmica

delete

Desasigna espacio en memoria

Multiplicacin

Divisin

%
.

Resto en divisin entera


Separador campo

->

Separador campo

Ms binario

Menos binario

Unarios

Multipli

Acceso

Aditivos

125

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Desplaza-

Relacional

Igualdad

<<

Izquierda

>>

Derecha

<

Menor que

<

Menor o igual que

>

Mayor que

>

Mayor o igual que

==

Igual a

!=

No igual a

&

AND para bits

10

o exclusivo

XOR para bits

11

OR para bits

12

&&

AND lgico

13

||

OR lgico

14

Condicional

?:

a?x:
significa:

15

Asignacin

"Si a Entonces x, SI_NO y"


Asignamiento simple

Producto

126

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

16

Coma

Divisin

Suma

Diferencia

&

AND sobre bits

XOR sobre bits

OR sobre bits

<<

Desplazamiento a la izquierda

>>

Desplazamiento a la derecha

Separador de expresiones

TABLA 4. Operadores
Observacin: muchos de los operadores relacionados en el cuadro anterior, no se
utilizan a lo largo de este curso.

127

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ANEXO 2: ndice de Funciones

A
Funcin

Librera

Fichero de cabecera C

Arc

Graphics

graphics.h

B
Funcin

Librera

Fichero de cabecera C

Bar

Graphics

graphics.h

bar3d

Graphics

graphics.h

C
Funcin

Librera

Fichero de cabecera C

cgets

Conio

conio.h

Circle

Graphics

graphics.h

cleardevice

Graphics

graphics.h

Clearviewport

Graphics

graphics.h

Closegraph

Graphics

graphics.h

Clreol

Conio

conio.h

Clrscr

Conio

conio.h

Cprintf

Conio

conio.h

Cputs

Conio

conio.h

Cscanf

Conio

conio.h

D
128

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Funcin

Librera

Fichero de cabecera C

Delline

Conio

conio.h

Detectgraph

Graphics

graphics.h

Drawpoly

Graphics

graphics.h

E
Funcin

Librera

Fichero de cabecera C

Ellipse

Graphics

graphics.h

F
Funcin

Librera

Fichero de cabecera C

Fillellipse

Graphics

graphics.h

Fillpoly

Graphics

graphics.h

Floodfill

Graphics

graphics.h

G
Funcin

Librera

Fichero de cabecera C

Getarccoords

Graphics

graphics.h

Getaspectratio

Graphics

graphics.h

Getbkcolor

Graphics

graphics.h

Getch

Conio

conio.h

Getche

Conio

conio.h

Getcolor

Graphics

graphics.h

Getdefaultpalette

Graphics

graphics.h

129

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Getdrivername

Graphics

graphics.h

Getfillpattern

Graphics

graphics.h

Getfillsettings

Graphics

graphics.h

Getgraphmode

Graphics

graphics.h

Getimage

Graphics

graphics.h

Getlinesettings

Graphics

graphics.h

Getmaxcolor

Graphics

graphics.h

Getmaxmode

Graphics

graphics.h

Getmaxx

Graphics

graphics.h

Getmaxy

Graphics

graphics.h

Getmodename

Graphics

graphics.h

Getmoderange

Graphics

graphics.h

Getpalette

Graphics

graphics.h

Getpalettesize

Graphics

graphics.h

Getpass

Conio

conio.h

Getpixel

Graphics

graphics.h

Gettext

Conio

conio.h

Gettextinfo

Conio

conio.h

Gettextsettings

Graphics

graphics.h

Getviewsettings

Graphics

graphics.h

Getx

Graphics

graphics.h

Gety

Graphics

graphics.h

Gotoxy

Conio

conio.h

Graphdefaults

Graphics

graphics.h

Grapherrormsg

Graphics

graphics.h

Graphfreemem

Graphics

graphics.h
130

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Graphgetmem

Graphics

graphics.h

Graphresult

Graphics

graphics.h

H
Funcin

Librera

Fichero de cabecera C

Highvideo

Conio

conio.h

I
Funcin

Librera

Fichero de cabecera C

Imagesize

Graphics

graphics.h

Initgraph

Graphics

graphics.h

Inport

Conio

conio.h

Insline

Conio

conio.h

Installuserdriver

Graphics

graphics.h

Installuserfont

Graphics

graphics.h

K
Funcin

Librera

Fichero de cabecera C

Kbhit

Conio

conio.h

L
Funcin

Librera

Fichero de cabecera C

Line

Graphics

graphics.h

Linerel

Graphics

graphics.h

Lineto

Graphics

graphics.h
131

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Lowvideo

Conio

conio.h

M
Funcin

Librera

Fichero de cabecera C

Moverel

Graphics

graphics.h

Movetext

Conio

conio.h

Moveto

Graphics

graphics.h
N

Funcin

Librera

Fichero de cabecera C

Normvideo

Conio

conio.h

O
Funcin

Librera

Fichero de cabecera C

Outport

Conio

conio.h

Outtext

Graphics

graphics.h

Outtextxy

Graphics

graphics.h

P
Funcin

Librera

Fichero de cabecera C

Pieslice

Graphics

graphics.h

Putch

Conio

conio.h

Putimage

Graphics

graphics.h

Putpixel

Graphics

graphics.h

132

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Puttext

Conio

conio.h

R
Funcin

Librera

Fichero de cabecera C

Rectangle

Graphics

graphics.h

Registerbgidriver

Graphics

graphics.h

Registerbgifont

Graphics

graphics.h

Restorecrtmode

Graphics

graphics.h

S
Funcin

Librera

Fichero de cabecera C

Sector

Graphics

graphics.h

Setactivepage

Graphics

graphics.h

Setallpalette

Graphics

graphics.h

Setaspectratio

Graphics

graphics.h

Setbkcolor

Graphics

graphics.h

Setcursortype

Conio

conio.h

Setfillpattern

Graphics

graphics.h

Setfillstyle

Graphics

graphics.h

Setgraphbufsize

Graphics

graphics.h

Setgraphmode

Graphics

graphics.h

Setlinestyle

Graphics

graphics.h

Setpalette

Graphics

graphics.h

133

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

Setrgbpalette

Graphics

graphics.h

Settextjustify

Graphics

graphics.h

Settextstyle

Graphics

graphics.h

Setusercharsize

Graphics

graphics.h

Setviewport

Graphics

graphics.h

Setvisualpage

Graphics

graphics.h

Setwritemode

Graphics

graphics.h

T
Funcin

Librera

Fichero de cabecera C

Textattr

Conio

conio.h

Textbackground

Conio

conio.h

Textcolor

Conio

conio.h

Textheight

Graphics

graphics.h

Textwidth

Graphics

graphics.h

U
Funcin

Librera

Fichero de cabecera C

Ungetch

Conio

conio.h

W
Funcin

Librera

Fichero de cabecera C

Wherex

Conio

conio.h

Wherey

Conio

conio.h

Window

Conio

conio.h

134

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

ANEXO 3: Errores comunes de programacin


Buenas prcticas de programacin

Por: MIGUEL . TOLEDO MARTNEZ


(http://www.galeon.com/neoprogramadores/soyc-cpp.pdf)
ERRORES COMUNES DE PROGRAMACIN
BUENAS PRCTICAS DE PROGRAMACIN
ERRORES COMUNES DE PROGRAMACIN
1. Si al utilizar funciones de la biblioteca matemtica no incluye el archivo de
encabezado matemtico, se producir un error de sintaxis. Por cada
funcin de la biblioteca estndar que utilice en un programa, debe indicar un
archivo de encabezado estndar.
2. La omisin de la clase de valor devuelto de una definicin de funcin es un
error de sintaxis si el prototipo especifica una clase devuelto distinto de int.
3. No devolver un valor desde una funcin que supuestamente debe hacerlo es
un error de sintaxis.
4. La devolucin de un valor desde una funcin cuya clase de devolucin se ha
declarado como void es un error de sintaxis.
5. La declaracin de parmetros de funcin de la misma clase como float x, y, en
lugar de float x, float y, causar un error de compilacin debido a que para
cada parmetro de la lista de parmetros se requiera una clase de datos.
6. Un punto y coma despus del parntesis derecho de la lista de parmetros de
una definicin de funcin es un error de sintaxis.
7. Volver a definir un parmetro de funcin como variable local en la funcin es
un error de sintaxis.
8. El ( ) de una llamada de funcin de hecho es un operador de C++. Provoca
que se invoque a la funcin. Omitir el () de una llamada de funcin que no
tiene argumentos no es un error de sintaxis. Sin embargo si pretenda que se
llamara a la funcin, esto no suceder.
9. Definir una funcin dentro de otra es un error de sintaxis.
10. Sucede un error de sintaxis si el prototipo de funcin, el encabezado de la
135

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

funcin y las llamadas de la funcin no coinciden en el nmero, clase de datos


y orden de los argumentos y parmetros, as como en el tipo de valor
devuelto.
11. La omisin del punto y coma al final de un prototipo de funcin es un error de
sintaxis.
12. Las llamadas de funcin que no sean iguales a su prototipo provocan
errores de sintaxis.
13. Cuando el prototipo de funcin y la definicin de la funcin no son iguales,
sucede un error de sintaxis.
14. La conversin de una clase de datos ms alto en la jerarqua de promocin a
un tipo menor puede cambiar su valor.
15. Omitir el prototipo de una funcin cuando sta no ha sido definida antes de
ser llamada por primera vez, es un error de sintaxis.
16. El intento por generar nmeros aleatorios con srand() en lugar de rand() es un
error de sintaxis, debido a que la funcin srand() no devuelve un valor.
17. Asignarle el equivalente entero de una constante de enumeracin a una
variable del tipo de la enumeracin es un error de sintaxis.
18. Si despus de definir una constante de enumeracin intenta asignarle otro
valor, provocar un error de sintaxis.
19. Indicar varios especificadores de clase de almacenamiento para un
identificador es un error de sintaxis. Slo se le puede aplicar un
especificador de clase de almacenamiento a un identificador. Por ejemplo, si
incluye register, no incluya tambin auto.
20. Por lo general es un error de lgica utilizar el mismo nombre para un
identificador dentro de un bloque interno que para un identificador que es
parte de un bloque externo cuando, de hecho, el programador quiere que el
identificador del bloque externo est activo en el bloque interno.
21. El no devolver un valor desde una funcin recursiva cuando sea necesario,
causar que casi todos los compiladores generen un mensaje de
advertencia.
22. La omisin del estado primitivo o la escritura incorrecta del paso de
recursin de modo que no converja al estado primitivo, provocar una
recursin infinita y agotar tarde o temprano la memoria. Esto es anlogo al
problema de los ciclos infinitos en las soluciones iterativas (no recurrentes) La
136

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

recursividad infinita tambin puede ser provocada al proveer una entrada


no esperada.
23. La codificacin de programas que dependen del orden de evaluacin de los
operandos de los operadores que no sean &&, ||, ?: ni coma (,) puede
generar errores, pues los compiladores no necesariamente evaluarn los
operandos en el orden que el programador espera.
24. Es un error de lgica que una funcin no recursiva se llame a s misma, ya
sea directa o indirectamente, a travs de otra funcin.
25. Los programas en C no se compilan a menos que se indiquen prototipos de
funcin para todas las funciones o que se definan las funciones antes de
usarlas.
26. Debido a que los parmetros de referencia se mencionan slo por nombre en
el cuerpo de la funcin llamada, el programador podra tratarlos
inadvertidamente como parmetros de una llamada por valor. Esto puede
provocar efectos secundarios inesperados si el invocador modifica las
copias originales de las variables.
27. Declarar mltiples referencia en una instruccin suponiendo que el & se
distribuye a travs de una lista de nombres de variables separada por comas.
Para declarar las variables x, y y z como referencias a un entero emplee la
notacin int &x = a, &y = b, &z = c; en lugar de la notacin incorrecta int& x =
a, y = b, z = c; o la otra notacin incorrecta comn int &x, y, z.
28. No inicializar una variable de referencia al declararla es un error de sintaxis.
29. Intentar reasignar una referencia declarada previamente como alias de otra
variable es un error de lgica. El valor de la otra variable simplemente se le
asigna a la localidad para la que la referencia es un alias.
30. Devolver un apuntador o referencia a una variable automtica en una
funcin llamada es un error de lgica. Algunos compiladores presentarn un
mensaje de aviso al encontrar esto en un programa.
31. Especificar e intentar utilizar un argumento predeterminado que no sea el de
ms a la derecha (ltimo) sin tomar los predeterminados de todos los
argumentos a su derecha es un error de sintaxis.
32. Intentar acceder a una variable no global desde un bloque exterior por medio
del operador unario de resolucin de alcance es un error de sintaxis si no
existe una variable global con el mismo nombre que la variable del bloque
exterior, y es un error de lgica si es que existe.

137

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

33. La creacin de funciones sobrecargadas con listas de parmetros idnticas y


diferentes tipos de devolucin es un error de sintaxis.
34. Una funcin a la que se le han omitido los argumentos predeterminados
podra ser llamada de manera idntica a otra funcin sobrecargada; esto es
un error de sintaxis. Por ejemplo, cuando un programa tiene tanto una
funcin que explcitamente no recibe argumentos como otra con el mismo
nombre que contiene slo argumentos predeterminados, sucede un error de
sintaxis cuando se intenta utilizar dicho nombre de funcin en una
llamada que no pasa argumentos.
35. No poner la palabra clave class antes de cada parmetro de tipo de una
plantilla de funcin es un error de sintaxis.
36. No emplear todos los parmetros de tipo de una plantilla de funcin en la
firma de la funcin es un error de sintaxis.

BUENAS PRCTICAS DE PROGRAMACIN


1. Familiarcese con el vasto conjunto de funciones y clases de la biblioteca
estndar de C.
2. Ponga una lnea en blanco entre las definiciones de funcin para separarlas y
simplificar la lectura del programa.
3. Aunque lo predeterminado cuando se omite el tipo de devolucin es int,
siempre indique explcitamente el tipo de valor de devuelto.
4. Aunque no es incorrecto hacerlo, no utilice los mismos nombres para los
argumentos pasados a una funcin y para los parmetros correspondientes
de la definicin de la funcin. Con esto se evitan ambigedades.
5. Seleccione nombres de funcin y de parmetros que tengan significado para
simplificar
la lectura de los programas y para ayudar a evitar
demasiados comentarios.
6. Muchos programadores indican los nombres de los parmetros en los
prototipos de las funciones con fines documentativos. El compilador ignora
estos nombres.
7. Ponga con maysculas la primera letra de los identificadores que sean
nombres de clase definidos por el usuario.
8. Slo indique letras maysculas para los nombres de constantes de
138

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD


ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA
CONTENIDO DIDCTICO DEL CURSO: 301304 INTRODUCCION A LA PROGRAMACION

enumeracin. Con esto se resaltan las constantes en el programa,


recordndole al programador que las constantes de enumeracin no son
variables.
9. Utilice enumeraciones en lugar de constantes enteras; con esto sus
programas sern ms claros.
10. Evite los nombres de variables que oculten nombres en los alcances
exteriores. Esto puede lograrse evitando utilizar identificadores duplicados en
el programa.
11. Siempre indique prototipos de funcin, aun cuando sea posible omitirlos al
definir las funciones antes de utilizarlas. Al indicar los prototipos se evita
enlazar el cdigo al orden en que se definen las funciones (el cual puede
cambiar fcilmente con la evolucin del programa)
12. El calificador inline slo debe utilizarse con funciones pequeas de uso
frecuente.
13. Los argumentos predeterminados pueden simplificar la escritura de las
llamadas de funcin. De cualquier forma, algunos programadores sienten que
resulta ms claro indicar explcitamente todos los argumentos.
14. Evite utilizar variables con el mismo nombre cuyos fines sean diferentes.
Aunque es vlido bajo varias circunstancias, puede generar confusiones.
15. Sobrecargar funciones que realicen tareas muy relacionadas puede simplificar
la lectura de los programas.

139

You might also like