You are on page 1of 177

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

UNIVERSIDAD FRAY LUCA PACCIOLI GUA DE ESTUDIO

PROGRAMACIN
(Octavo cuatrimestre de la Licenciatura en Informtica)

CIENCIA CULTURA PROGRESO

FR A I Y L UCA PACCIOL

POR LA CIENCIA, LA CULTURA Y EL PROGRESO DE LA SOCIEDAD

EDUCACIN SUPERIOR ABIERTA Y A DISTANCIA CUERNAVACA, MORELOS 2008


PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

3 NDICE GENERAL
PRESENTACIN .................................................................................................... 6 OBJETIVO GENERAL ............................................................................................. 7

PRIMERA UNIDAD FUNDAMENTOS DEL LENGUAJE 1.1. Introduccin a los lenguajes de programacin............................................. 8 1.1.1. Tipos de lenguajes de programacin. .................................................... 9 1.2. Fases para la elaboracin de un programa. .............................................. 11 1.2.1. Anlisis .................................................................................................. 12 1.2.2. Diseo ................................................................................................... 12 1.2.3. Codificacin........................................................................................... 13 1.2.4. Implantacin .......................................................................................... 13 1.2.5. Mantenimiento ...................................................................................... 14 1.3. El lenguaje C. .............................................................................................. 15 1.3.1. Historia .................................................................................................. 15 1.3.2. Caractersticas del lenguaje. ................................................................ 16 1.4. Fases de compilacin. ................................................................................ 17 1.4.1. Edicin .................................................................................................. 18 1.4.2. Compilacin .......................................................................................... 18 1.4.3. Enlazado (Link) ..................................................................................... 19 1.4.4. Ejecucin............................................................................................... 20

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

4
SEGUNDA UNIDAD ESTRUCTURAS BSICAS DE PROGRAMACIN 2.1. Creacin de un programa. .......................................................................... 27 2.1.1. Directivas del preprocesador. ............................................................... 30 2.2. Estructura formal de un programa en C. .................................................... 31 2.3. Identificadores, variables y constantes. ..................................................... 34 2.3.1. Identificadores....................................................................................... 34 2.3.2. Variables. .............................................................................................. 35 2.3.3. Constantes. ........................................................................................... 36 2.4. Dos instrucciones: printf y scanf. ................................................................ 36 2.4.1. Instruccin printf.................................................................................... 36 2.4.2. Instruccin scanf. .................................................................................. 37 2.5. Tablas fundamentales de conceptos de programacin. ............................ 38 2.5.1. Constantes de barra invertida .............................................................. 38 2.5.2. Tipos de datos ...................................................................................... 39 2.5.3. Modificadores de datos......................................................................... 39 2.5.4. Operadores aritmticos. ....................................................................... 40 2.5.5. Formato para instrucciones printf. ........................................................ 40 2.5.6. Formato para instrucciones scanf. ....................................................... 41 2.5.7. Operadores relacionales....................................................................... 41 2.5.8. Operadores lgicos. .............................................................................. 42 2.5.9. Jerarqua o prioridad de los operadores. ............................................. 42 TERCERA UNIDAD ESTRUCTURAS CONDICIONALES E ITERATIVAS 3.1. Estructuras condicionales ........................................................................... 56

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

5
3.1.1. Sentencia if-else. .................................................................................. 57 3.1.2. Operador ?. ........................................................................................... 61 3.1.3. Sentencia switch-case .......................................................................... 63 3.2. Ciclos o sentencias iterativas. .................................................................... 66 3.2.1. Ciclo for. ................................................................................................ 67 3.2.2. Ciclo while. ............................................................................................ 73 3.2.3. Ciclo do-while. ....................................................................................... 78 CUARTA UNIDAD ARREGLOS, CADENAS Y PUNTEROS 4.1. Arreglos. ...................................................................................................... 94 4.1.1. Arreglos unidimensionales (vectores). ................................................. 95 4.1.2. Arreglos bidimensionales o matrices.................................................. 101 4.1.3. Arreglos Multidimensionales. .............................................................. 108 4.2. Cadenas de caracteres............................................................................. 112 4.3. Punteros. ................................................................................................... 119 QUINTA UNIDAD ESTRUCTURAS, MEMORIA DINMICA Y ARCHIVOS 5.1. Estructuras. ............................................................................................... 133 5.2. Asignacin dinmica de memoria............................................................. 138 5.3. Archivos. ................................................................................................... 141 5.3.1. Abriendo y cerrando archivos. ............................................................ 142 5.3.2. Leyendo y escribiendo en archivos. ................................................... 145 5.3.3. Otras funciones. .................................................................................. 157

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

6 PRESENTACIN El siguiente trabajo es un esfuerzo conjunto para brindarte una metodologa que facilite tu aprendizaje, sabedores del esfuerzo que ests realizando te invitamos a que la aproveches. Como su nombre lo dice, esta es slo una gua que te apoyar para que tu aprendizaje en el rea de Programacin sea lo ms sencilla y provechosa posible, para ahondar en los temas aqu tratados te invitamos a que busques en los libros de la bibliografa general mayor profundidad en los temas. Espero lograr el objetivo de facilitar tu aprendizaje.

Ing. Jos Felipe Duque Duarte

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

7 OBJETIVO GENERAL Al finalizar sta gua el alumno ser capaz de desarrollar programas en un lenguaje estructurado de propsito general, as como su implementacin en el ejercicio profesional, donde se desarrollen sistemas software y computacionales.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

8 PRIMERA UNIDAD FUNDAMENTOS DEL LENGUAJE Objetivo particular: Al finalizar sta unidad, debers conocer los conceptos bsicos sobre los lenguajes de programacin y en particular al lenguaje de programacin C. 1.1. Introduccin a los lenguajes de programacin. Un lenguaje de programacin podra definirse como una notacin o conjunto de smbolos y caracteres que se combinan entre s, siguiendo ciertas reglas de una sintaxis predefinida, con el fin de posibilitar la transmisin de instrucciones a una computadora. Dichos smbolos y caracteres son traducidos internamente a un conjunto de seales elctricas representadas en el sistema binario, es decir, slo dos valores: 0 y 1. Esta traduccin es necesaria porque el microprocesador de una computadora slo entiende ese lenguaje, al cual nos referiremos como Programador lenguaje mquina.
Lenguaje natural

Lenguaje de Programacin

Lenguaje mquina

Figura 1.1. Niveles de abstraccin de los lenguajes de programacin. Computadora PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

9 1.1.1. Tipos de lenguajes de programacin. Lenguaje mquina Cuando deseamos resolver algn problema de sistematizacin basado en computadoras, tenemos que plantearlo en primer lugar en nuestro lenguaje natural. Sin embargo, para que la secuencia de pasos que resuelvan el problema pueda ser entendida por una computadora, debe traducirse a un lenguaje muy bsico denominado lenguaje mquina. El lenguaje mquina se caracteriza por ser el nico que es directamente entendible por la computadora, puesto que se basa en la combinacin de dos nicos smbolos (0 y 1) denominados bits. Adems cada procesador posee su propio lenguaje mquina, por lo que un programa escrito en lenguaje mquina de un procesador X no podr, en principio, ejecutarse en un procesador Y. Lenguaje ensamblador Estos tipos de lenguajes de programacin son un nivel de abstraccin menor a los lenguajes mquinas, dado que ya no se necesita programar en los niveles que toda mquina comprende (0 y 1), sino que ste utiliza cdigo de programacin llamado mnemnico (conjunto de instrucciones bsicas muy cercanas al lenguaje mquina). Estos lenguajes de programacin comprenden el primer acercamiento de la tarea de programar hacia los lenguajes de alto nivel (lenguajes de programacin que comprenden instrucciones del lenguaje comn en las personas). Debemos aclarar que estos lenguajes de programacin eran distintos para cada arquitectura de computadora, es decir, una computadora que tena un microprocesador Intel 286 tena su propio ensamblador, a su vez

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

10 una computadora basada en un microprocesador Motorola 6809, posea un ensamblador un tanto diferente al anterior. Lenguajes de alto nivel Como ya se mencion anteriormente, los lenguajes de alto nivel, son aquellos que tienen una mayor similitud con los lenguajes que los seres humanos conocemos, es decir, las instrucciones son exactamente igual a las palabras que utilizamos para referenciar alguna accin. Debemos reconocer que la mayora de lenguajes de programacin de alto nivel, se encuentran diseados con instrucciones en idioma ingls y desafortunadamente, existen muy pocos lenguajes de programacin en nuestro idioma, dado que, se centraliza toda la infraestructura de diseo en unas pocas compaas de software y en su mayora todas ellas radican en Estados Unidos de Norteamrica. Algunos ejemplos de stos lenguajes de programacin, pueden ser: Visual Basic, C#, Java, Visual Foxpro, Modula-2, entre otros muchos que existen actualmente. Cabe mencionar que los lenguajes de alto nivel, dado su gran parecido al idioma comn a los seres humanos, tienen cierta desventaja de poder y control respecto a los lenguajes ensamblador y los lenguajes mquinas, pero, un precio tenan que pagar por su cercana a los vocablos humanos. Mientras ms lejanos a la mquina, menos, poder y control del hardware de los equipos, mientras ms cercanos a las mquinas, menos entendimiento con los seres humanos comunes.

Lenguajes de medio nivel Afortunadamente no todo est perdido, pues, existe un trmino medio entre los polos que acabamos de conocer, ste se llama Lenguaje C,

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

11 nuestro lenguaje de programacin (porque vamos a emocionarnos un rato con l). ste es un lenguaje que combina el poder y control del hardware del sistema, as como, la bondad de ser entendible y fcil de asimilar, muy parecido a los vocablos (en ingls) que utilizamos todo el tiempo al realizar alguna accin. El lenguaje C, es el ms digno y seguramente el ms importante entre los lenguajes de medio nivel, es el claro ejemplo de ste tipo de lenguajes, pues, al hablar de lenguajes de medio nivel, siempre se piensa en primera instancia en nuestro lenguaje de programacin. Entonces, los lenguajes de medio nivel son aquellos que comparten tanto el poder y control del hardware, as como la facilidad de ser entendido por todos aquellos programadores que busquen cierta similitud con nuestros vocablos cotidianos.

1.2. Fases para la elaboracin de un programa.

Anlisis

Mantenimiento

Diseo

Implantacin

Codificacin 1.2. Ciclo de desarrollo de un sistema

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

12

Para desarrollar un programa que solucione un determinado problema informtico, se tiene que tomar en cuenta el ya conocido concepto de ciclo de vida de un sistema, el cual contempla los siguientes pasos: anlisis, diseo, codificacin, implantacin y mantenimiento. 1.2.1. Anlisis Todo problema que sea susceptible de sistematizar, porque debemos ser honestos -no todos los problemas podrn ser sistematizados-, se deben analizar cuidadosamente, es decir, se debe buscar la mayor cantidad informacin referente al problema a resolver. Una vez recopilada sta, se debe realizar un estudio de los datos recabados, buscando siempre una solucin ptima, que supere por mucho al mtodo de resolucin que se tenga hasta el momento, pues, de nada sirve un sistema que poco contribuya a la solucin del problema. Esta etapa es sin lugar a duda, una de las ms importantes (si no es que la ms importante), ya que sin un buen anlisis del problema, toda excelente solucin queda demeritada por no satisfacer el problema a solucionar.

1.2.2. Diseo Una vez realizado el anlisis del problema a resolver y con la informacin necesaria y suficiente para encontrar una factible solucin, se debe

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

13 modelar1 una solucin o posibles soluciones, es decir, se debe plasmar en algn medio impreso (papel, maqueta, cdice, software de modelado), dicha solucin, la cual nos d una perspectiva o aproximacin de cmo sera o se vera nuestra solucin. El modelado de sistemas es otra de las actividades (junto con el anlisis), que la mayora de los programadores -sobre todo en Mxico-, no nos gusta realizar, pero, desafortunadamente un buen anlisis y un acertado modelado de nuestro problema, apartan a muchos del xito o del fracaso que enfrentamos al desarrollar un buen sistema informtico.

1.2.3. Codificacin Esta fase del diseo de sistemas informticos, es una de las ms gustadas por la mayora de los programadores, ya que comprende la traduccin de los modelos, escenarios o prototipos generados en la etapa de diseo. Es en esta etapa, donde las instrucciones combinadas con los diferentes sistemas hardware, dan vida a la posible solucin del problema planteado al inicio del desarrollo. Adems del desarrollo mismo, se debe generar la documentacin necesaria y suficiente para proveer futuras modificaciones y un adecuado mantenimiento a las aplicaciones generadas.

1.2.4. Implantacin Se refiere a la puesta en marcha del programa o sistema desarrollado en la fase anterior, es como se dice: la hora de la verdad, pues, es cuando
1

Proponer uno o varios escenarios de solucin al problema, muchas veces se le compara con los prototipos. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

14 se refleja si el anlisis fue adecuado, si el escenario o prototipo fue el correcto y si se ha cumplido la satisfaccin a primera instancia- de nuestro cliente o jefe. Contempla adems, la solucin de todos los problemas que se susciten a la hora de poner en marcha la herramienta recin desarrollada. Problemas de compatibilidad con el hardware donde ser instalada. Incluye dotar de soporte y apoyo tcnico a los usuarios de sta nueva aplicacin (tales como: manipularla, saber donde se encuentran las funciones que cada empleado o usuario debe realiza, etc.). 1.2.5. Mantenimiento Esta ltima fase, ltima entre comillas, pues, una aplicacin casi nunca est libre de modificaciones o actualizaciones. Es en sta etapa, donde se resuelven problemas un tanto diferentes a los encontrados a la hora de la implantacin, es decir, alguno de los procesos no cumple con las especificaciones que el usuario planteo al inicio del desarrollo, o bien, el usuario desea que se modifiquen ciertas cuestiones de presentacin, tales como: colores, tipos de letras, ubicacin de los procesos, etc. Las modificaciones o actualizaciones realizadas en sta etapa, se deben documentar, ya que en el futuro, se puede disponer de personal externo o diferente a los diseadores y stos tendrn toda la informacin disponible para lograr realizar las modificaciones necesarias sin contratiempos.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

15 1.3. El lenguaje C.

1.3.1. Historia Para empezar a conocer al lenguaje de programacin motivo de nuestro estudio, es importante conocer algunos detalles de su historia y origen, as como, las modificaciones y adecuaciones que ha sufrido a lo largo de su existencia. El lenguaje C, fue desarrollado en los Laboratorios Bell, subsidiaria de la compaa AT&T en los aos 70s (1972), uno de los programadores que ms influy en su diseo fue Dennis Ritchie. Este lenguaje se cre con la finalidad de disear un sistema operativo, como resultado de esto, nace UNIX, uno de los sistemas operativos ms estable, potente y robusto de nuestros tiempos. Gracias a esto, aumento su popularidad y pronto fue utilizado por ms programadores, hasta el grado de ser uno de los lenguajes de programacin ms utilizados en el mundo. Durante sus primeros aos de uso, la versin que mayormente se difundi fue la desarrollada por Dennis Ritchie y Brian Kernighan, esto por el ao de 1978, posteriormente, siendo ya todo un suceso, uno de los ms importantes institutos de estandarizacin internacional, se vio en la obligacin de crear estndares para evitar se tuviera problemas de compatibilidad entre tantas versiones del lenguaje. Dicho instituto es, ANSI, American National Standards Institute, (Instituto Nacional de Estndares Americanos), el cual cre un comit en el ao 1983, para disear una versin que no tuviera problemas con las arquitecturas de los diferentes equipos de cmputo existentes.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

16 Es hasta el ao 1989, cuando se logra tener un estndar de ste lenguaje, hasta hoy conocido como ANSI C. Cabe mencionar que sta versin tiene algunos ligeros cambios, referente a la versin generada en un principio.

1.3.2. Caractersticas del lenguaje. Existen algunas caractersticas propias del lenguaje que lo han hecho todo un suceso, gracias a las caractersticas mencionadas abajo, es que lenguaje C, es el de mayor utilizacin hasta nuestros das. Potencia y flexibilidad. Ha demostrado ser un lenguaje de programacin que se adapta a las diferentes tareas, adems, de ser muy efectivo en las soluciones implementadas. Popularidad. Como se mencion anteriormente, es un lenguaje que cuenta con mucha informacin, libreras y muchos programadores estn y han desarrollado con esta herramienta que la hace reconocida por todo el mundo. Portabilidad. Gracias a la estandarizacin realizada por ANSI, todos las aplicaciones desarrolladas bajo ste lenguaje pueden ser utilizadas en los diferentes equipos de cmputo existente, sin importar la plataforma o sistema operativo que tengan. Sencillez. Por su compacto diseo, es decir, dado que posee un pequeo grupo de instrucciones, es fcil de utilizar. Estructura y modularidad. Una de las caractersticas ms importantes que tiene el lenguaje C, es, poder disear procedimientos que se pueden encapsular, para posteriormente ser utilizados como mdulos que se pueden agregar a nuevas aplicaciones.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

17 Lo anterior, nos motiva a utilizarlo, pues, presenta todos los elementos que un excelente lenguaje de programacin debe poseer.

1.4. Fases de compilacin. El esquema siguiente nos muestra la lgica de compilacin de todo programa realizado bajo el lenguaje de programacin C. Como se puede observar, el preprocesador recibe el cdigo fuente generado por el editor.

Cdigo fuente

Preprocesador

Compilador

Cdigo Objeto Libreras


Enlazador

Ejecutable

1.3. Proceso de compilado de un programa informtico.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

18 1.4.1. Edicin Esta fase consiste en escribir (codificar) el programa fuente usando el conjunto de instrucciones propias del lenguaje de programacin seleccionado. Posteriormente se debe guardar en un archivo.

Figura 1.4. Entorno del compilador del lenguaje C.

Para ello es necesario usar un programa editor, que puede o no formar parte del entorno de desarrollo. En nuestro caso, el compilador del lenguaje C, posee un editor para sta actividad.

1.4.2. Compilacin Durante esta etapa se verifica la sintaxis del programa fuente, es decir, se corrobora la ortografa de las instrucciones y comandos, adems se traduce el programa a cdigo mquina (objeto). Si se producen errores, el compilador muestra informacin del tipo de error y dnde se ha producido.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

19 sta es una de las etapas ms importantes del proceso de desarrollo de un programa o aplicacin, con sta, podemos percatarnos de si hemos asimilado el uso y aplicacin de cada una de las instrucciones propias del lenguaje.

1.5. Ventana que muestra la fase de compilado (errores).

1.4.3. Enlazado (Link) Este proceso consiste en la combinacin de los diferentes mdulos objetos generados en la fase anterior y las libreras del lenguaje para crear un programa ejecutable. Esta fase se conoce tambin como linkado. En sta etapa se tiene un paquete completo, es decir, un programa libre de errores aunado a las libreras portables que dicho sistema posee.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

20 1.4.4. Ejecucin En esta fase se ejecuta (corre) el programa recin compilado, finalmente nos muestra el resultado del trabajo de codificacin. En esta etapa vemos la interface que se ha generado como resultado de todo el diseo. Cabe mencionar que todo lenguaje de programacin puede ser tanto interpretado como compilado. Sin embargo, dependiendo de las caractersticas del lenguaje y del uso para el que fue destinado, es normal asociar a cada lenguaje, una forma de traduccin particular. Por ejemplo, el lenguaje BASIC es mayoritariamente interpretado, mientras que C es compilado.

1.6. Vista de la ejecucin de un programa bsico en lenguaje C.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

21 Preguntas Frecuentes Primera Unidad

1.- Qu es un lenguaje de programacin? Un lenguaje de programacin podra definirse como una notacin o conjunto de smbolos y caracteres que se combinan entre s, siguiendo ciertas reglas de una sintaxis predefinida, con el fin de posibilitar la transmisin de instrucciones a una computadora. 2.- Cules son los smbolos que utiliza el lenguaje mquina? Utiliza nicamente smbolos que las mquinas entienden, es decir, 0 y 1, llamado cdigo binario.

3.- Cmo se llama ensambladores?

al

cdigo

que

utilizan

los

lenguajes

Los lenguajes ensambladores utilizan mnemnicos para codificar programas.

4.- Cul es la caracterstica principal de los lenguajes de alto nivel? Los lenguajes de alto nivel utilizan instrucciones similares a las palabras que las personas utilizamos para realizar acciones.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

22 5.- Cul es la caracterstica ms importante que posee el lenguaje C? Es un lenguaje de medio nivel, no de alto nivel, pues, ste amalgama o une tanto el poder de interactuar con el hardware, as como, todas las caractersticas de los lenguajes de alto nivel.

6.- Mencione las fases de desarrollo de un sistema informtico. Anlisis, diseo, codificacin, implantacin y mantenimiento

7.- Mencione tres caractersticas que han hecho al lenguaje C popular. Potencia y flexibilidad. Popularidad. Portabilidad. Sencillez.

8.- Mencione los pasos del proceso de compilacin del lenguaje C. Edicin. Compilacin. Enlazador. Ejecucin.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

23 Mapa conceptual Primera unidad

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

24 Actividades de Trabajo Primera Unidad

1). Investiga las caractersticas de otros lenguajes de programacin y compralas con las que posee el lenguaje C. 2). Investiga en el departamento de sistemas de la Universidad, si es bueno aprender ste lenguaje de programacin. 3). Existen beneficios tangibles de aprender ste lenguaje. Comenta con tus compaeros de clase. 4). Investigar que sistemas o programas conocidos se han desarrollado bajo ste lenguaje de programacin.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

25 Cuestionario de Autoevaluacin Primera Unidad

1. Mencione los niveles de abstraccin de los lenguajes de programacin. 2. Describa algunas ventajas del lenguaje C con respecto a los lenguajes de alto nivel. 3. Qu fases de desarrollo de un programa no agradan a los programadores? 4. Qu sistema operativo fue desarrollado en lenguaje C? 5. Qu institucin internacional estandariz al lenguaje C? 6. Cundo se dice que un lenguaje de programacin es portable, a qu nos referimos? 7. Qu se quiere dar a entender cuando decimos que un lenguaje de programacin es modular? 8. Mencione a dos personajes que contribuyeron a la existencia del lenguaje C. 9. En qu laboratorios se gest el lenguaje C? 10. Es necesaria la incursin de los lenguajes de programacin a las actividades productivas de nuestra sociedad?

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

26 Lecturas Obligatorias Primera Unidad

Kernighan, Brian W., Ritchie Dennis M., El lenguaje de programacin C. Segunda edicin, Prentice-Hall Hispanoamericana S.A., 1991, ....Captulo 1. Pea Basurto, Marco A., Cela Espn, Jos M., Introduccin a la programacin en C. Primera Edicin, Ediciones UPC, septiembre de 2000. Barcelona, Espaa...Captulo 1.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

27 SEGUNDA UNIDAD ESTRUCTURAS BSICAS DE PROGRAMACIN

Objetivo particular Al finalizar sta unidad, el alumno tendr los conocimientos bsicos para resolver problemas sencillos mediante el lenguaje de programacin C.

2.1. Creacin de un programa. Dado que ya conocemos muchas de las caractersticas del lenguaje C, algunas funciones del compilador (y sabedores de que no es el propsito de ste curso, el manejo de dicho compilador), estamos ya en condiciones de empezar a disear los primeros programas para computadoras. A continuacin mostraremos otras caractersticas un tanto ms particulares de ste poderoso lenguaje de programacin, entre otras, la estructura de los programas diseados en ste lenguaje, directivas, caracteres especiales, etc. Para empezar, mostraremos la estructura bsica de todo programa creado bajo el lenguaje de programacin C: void main() { Instrucciones; }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

28 Bien, describiremos lo que acabamos de teclear, pero antes, debemos hacer hincapi en todo programa realizado bajo ste lenguaje, tendr la estructura de funciones o mdulos, es decir, el compilador buscar todas las funciones que componen a dicho programa y stas estarn regidas por una nica funcin que se tendr que llamar main(), si no existiera sta, dicho programa no ser reconocido por el compilador de C. Dicho lo anterior, vemos que tenemos en la primera lnea void main(), sta lnea indica al compilador que slo existe una funcin y por ende tendr que llamarse main(), pero no devolver ningn valor como resultado de su ejecucin a otra funcin (void). Toda funcin generada en C, tendr que estar delimitada por los caracteres { (inicio) y } (final) y entre estos, habr un conjunto de instrucciones que se tienen que ejecutar. Tambin es importante mencionar que toda funcin debe ser terminada por un smbolo ; (punto y coma). Es sumamente importante, poner comentarios a la hora de codificar nuestro programa, ya que sin stos, no ser posible entenderlo posteriormente o no ser legible para otros programadores. Para realizar sta accin, debemos utilizar los siguientes caracteres /* (al inicio del comentario) y */ (al final de dicho comentario), todo lo que se encuentre entre los smbolos anteriores, no ser revisado por el compilador. Adems, el uso de comentarios, no incrementa el tamao del programa. A continuacin, se muestra el uso de comentarios: /* Un programa en C, usando comentarios, ste es un comentario*/ void main() { /* Este es otro comentario */ } /* Finalmente, este es otro comentario */

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

29 Sin embargo, no se permite poner un comentario dentro de otro. Por ejemplo sera ilegal el siguiente conjunto de instrucciones: /* Un programa en C, usando comentarios, ste es un comentario*/ void main() { /* Este es otro comentario */ } /* Finalmente, este es otro comentario /* esto no funciona */ */ Ilegal Muy bien, ahora, vamos escribir un programa que mande un mensaje a nuestra pantalla. El cdigo de abajo es un ejemplo de sta accin. Para lo cual, se incursiona una nueva instruccin, printf. /* Programa que manda un mensaje a pantalla */ #include <stdio.h> /*esta es una librera del compilador*/ void main() { printf("Hola, es un mensaje a pantalla \n"); } Notemos que, como ya lo hemos dicho anteriormente: Todo programa tiene una sola funcin main(). Toda instruccin termina con ; (punto y coma). La gran mayora de cdigo se escribe en minsculas. Existen delimitadores de funciones { }, inicio y final. Se puede colocar comentarios para hacer ms legible el cdigo.

La instruccin recientemente incorporada, nos permite visualizar comentarios en la pantalla de la computadora, pero, para que el compilador la pueda reconocer es necesario agregar una biblioteca del
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

30 preprocesador llamada stdio.h, as como la instruccin printf, todas las instrucciones en C requieren de alguna biblioteca del procesador para ser compiladas o utilizadas.

2.1.1. Directivas del preprocesador. Como se mencion anteriormente, las directivas del preprocesador son las libreras que ayudan al compilador, para que ste, logre entender las palabras reservadas e instrucciones que componen dicho lenguaje. Las directivas de C dan una gran potencia y facilidades al programador. En las lneas que siguen mostraremos algunas de stas libreras, para ser sincero, son las ms utilizadas para desarrollar programas bsicos en C. Sintaxis: #include <librera> Donde, #include, es la palabra reservada para decirle al compilador que incluya un archivo externo dentro del programa fuente. Se usarn los smbolos < > para indicar que el archivo se encuentra en un directorio del entorno de compilacin diferente del directorio de trabajo actual. Por el contrario, se usarn los smbolos " " para indicar archivo locales. Por ejemplo: #include <math.h> incluye el archivo con las definiciones de las funciones matemticas de la librera estndar. #include <stdio.h> incluye el archivo con las definiciones de las funciones de entrada y salida de la librera estndar. #include <conio.h> incluye el archivo con las definiciones de las funciones de entrada y salida de la consola (pantalla).
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

31 #include <dos.h> incluye el archivo con las definiciones de las funciones del DOS, para ciertas caractersticas que el lenguaje C utiliza en su sintaxis. #include <string.h> incluye el archivo con las definiciones de las funciones del manejo de arreglos uni y multidimensionales. #include "funciones.h" incluye el archivo funciones.h del directorio actual. #define, la instruccin anterior define un nombre simblico. Cuando el preprocesador encuentra un nombre simblico en el programa lo substituye por el valor que se le haya asociado con la directiva #define. Ejemplos: #define NUM ELEMENTOS 100; define la constante NUM ELEMENTOS con valor 100. #define PI 3.1416; define la constante PI con 3.1416.

2.2. Estructura formal de un programa en C. En este captulo empezaremos a dar una estructura ms formal a nuestros programas desarrollados en lenguaje C. Para ello, tenemos que realizar un esquema, ser como sigue: Directivas del preprocesador. Definiciones de tipos de datos. Declaracin de variables de tipo global. Declaracin de funciones. Funcin principal main().
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

32 { (Llave de inicio). Declaracin de variables tipo local. Instrucciones. Funciones. } (Llave de final) Dems funciones. He aqu un ejemplo de todo este monstruo, que no es ms que un gatito. Y no hay por qu preocuparse. #include <stdio.h> #include <conio.h> #include <dos.h> /*las anteriores son libreras del preprocesador*/ #define PI 3.1416; /*sta es una definicin de tipo de dato*/ void suma(); void multiplica(); void conver(); void area1(); void area2(); void salir(); /*stas seis ltimas, son declaraciones de funciones*/ int i,j,res; /*a stas se les conoce como declaracin de variables globales*/ void main() /*funcin principal*/ { Int i, opc; /*declaracin de variables tipo local*/ Instrucciones, sentencias, etc. /* Conjunto de instrucciones*/ } void suma() /* De aqu al final del programa son funciones */
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

33 { Instrucciones, sentencias, etc. /* Conjunto de instrucciones*/ } void multiplica() { Instrucciones, sentencias, etc. /* Conjunto de instrucciones*/} } void conver() { Instrucciones, sentencias, etc. /* Conjunto de instrucciones*/ } void area1() { Instrucciones, sentencias, etc. /* Conjunto de instrucciones*/ } void area2() { Instrucciones, sentencias, etc. /* Conjunto de instrucciones*/ } void salir() { Instrucciones, sentencias, etc. /* Conjunto de instrucciones*/ } Cabe mencionar que la diferencia entre las variables globales y las variables locales, tiene que ver con el mbito de cobertura, mientras que las variables de tipo local, slo tienen accin durante el proceso que las declar, las variables globales sirven para todo el programa y tendrn efecto en toda funcin o proceso que las llame.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

34 Ya que conocemos la estructura de un programa en lenguaje C, creo que es muy conveniente, aprender a utilizar las instrucciones ms importantes para crear programas comunes.

2.3. Identificadores, variables y constantes.

2.3.1. Identificadores. Un identificador es una palabra, frase corta (de preferencia no ms de 32 caracteres), que hace referencia a una funcin, una constante, una variable, un arreglo de datos, etc., tiene ciertas consideraciones a tomar en cuenta: Debe empezar con una letra. No debe tener espacios en blanco ni caracteres especiales, tales como: +, *, , $, &, etc. En el lenguaje C, se considera el tamao de palabra, es decir, no es lo mismo una palabra en minsculas que en maysculas, para C ambas son diferentes, por ejemplo: CANTIDAD, Cantidad y cantidad, son tres variables completamente distintas. Por ltimo, se recomienda no utilizar la letra . No utilizar una palabra reservada como identificador. A continuacin, mostramos un cuadro que contiene algunas de stas palabras reservadas. Auto Break Case Char default do double else Float For Goto If register return short signed struct switch typedef union

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

35 Const continue volatile enum extern while Int Long include sizeof static stdio unsigned void #

2.3.2. Variables. Es un tipo de dato declarado por el usuario, que nos permite reservar un espacio de memoria de nuestra computadora para poder almacenar ciertos valores que necesitaremos a lo largo del desarrollo de nuestro programa. De tal manera que se pueda cambiar el contenido de sta constantemente. La sintaxis de las variables, puede ser: int nom_var1,nom_var2, nom_var_n; Un ejemplo de sta es: int numero; La variable numero, es de tipo entero, es decir, se reservar un espacio de memoria de nuestra PC para almacenar datos numricos enteros y sta memoria estar etiquetada con el nombre numero.
numero Espacio reservado

Se puede declarar varias variables para el mismo tipo en una misma lnea de cdigo, mientras sean separadas por comas. Ejemplo: int numero, contador, num, num1;

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

36 Existen otros tipos de variables, los cuales veremos ms adelante. 2.3.3. Constantes. Son otro tipo de dato declarado por el usuario, muy semejante a las variables, pero, el valor que contienen stas, no variar a lo largo del desarrollo del programa, es decir, el valor almacenado en sta no se podr modificar. La sintaxis de una constante, sera: int nom_var = 25; Ejemplo: int numero = 25; char letra = c;
numero Espacio reservado

25

2.4. Dos instrucciones: printf y scanf. Una de las formas bsicas para introducir e imprimir datos en lenguaje C, se da mediante el uso de las instrucciones printf y scanf. Cada una de ellas tiene una sintaxis particular. 2.4.1. Instruccin printf. Para poder mostrar comentarios, leyendas y datos en pantalla, es necesario utilizar la instruccin printf, la cual tiene la siguiente sintaxis: printf (const_barra_ invertida Comentario, leyenda formato_dato const_barra_invertida, datos);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

37 Un ejemplo de sta sera: print (\t El resultado es: %d, res); En la lnea de cdigo anterior, primero se desplazara haca la derecha, tal como lo hace la tecla tabulador y posteriormente mostrar le leyenda entre comillas, hasta los dos puntos, posteriormente, se preparar para imprimir un dato numrico entero y finalmente, colocar en la posicin del %d la cantidad que se haya obtenido como resultado. En el futuro se podr intercambiar si es necesario o si se desea, los cdigos de barra invertida tales como: \t, \n, \b, etc., por la instruccin gotoxy(columna, lnea). 2.4.2. Instruccin scanf. Para poder introducir datos a las variables es necesario utilizar la instruccin scanf, sta instruccin tiene una sintaxis muy similar a la utilizada por la instruccin printf. scanf(formato_dato formato_dato2, &dato, &dato2); Ejemplo: scanf(%d %c, &num, &letra); En el ejemplo anterior, tenemos dos variables que sern introducidas por el usuario, una de tipo numrico entero y la otra de caracteres. Noten que se agrega un smbolo ms, el &, ste nos sirve para detener momentneamente el flujo del programa, en tanto no se tecleen los datos solicitados. Adems, dicho smbolo sirve para almacenar la direccin fsica de memoria donde se almacenar dicha informacin (ms adelante ste concepto ser aclarado).
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

38 Para empezar a desarrollar programas, es necesario conocer algunos tipos de datos, sentencias de barras invertidas, operaciones aritmticas, operaciones lgicas, etc. 2.5. Tablas fundamentales de conceptos de programacin.

2.5.1. Constantes de barra invertida Formato \b \a \f \n \r \t \" \' \\ \v \x \N Significado Retroceso Alarma beep Alimentacin de pgina Nueva lnea Retorno de carro Tabulador horizontal Doble comilla Comilla simple Barra invertida Tabulador vertical (Impresora) Constante hexadecimal Constante octal, donde N es una constante octal

La tabla anterior nos muestra cdigos constantes que realizan una accin determinada y se pueden aplicar en las instrucciones printf.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

39 2.5.2. Tipos de datos Tipo char int float double void Significado Carcter Entero Flotante Doble Vacio Bits 8 16 32 64 0 Rango -128 a 127 -32768 a 32767 -3.4e+48 a 3.4e+48 -1.7e+308 a 1.7e+308 sin valor

Los anteriores son tipos de datos bsicos, stos son utilizados para declarar variables, acordmonos que dichas variables pueden ser locales y globales.

2.5.3. Modificadores de datos. Los modificadores normalmente se aplican a tipos de datos enteros, pero, tambin es posible aplicarlos al tipo double. Tipo char signed char unsigned char int short unsigned int long int unsigned long Bits 8 8 8 16 16 16 32 32 Rango -128 a 127 -128 a 127 0 a 255 -32768 a 32767 -32768 a 32767 0 a 65535 2147483648 a 2147483647 0 a 4294967295

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

40 2.5.4. Operadores aritmticos. Signo + * / % ++ -() Operacin Suma Resta Multiplicacin Divisin Mdulo Incremento Decremento Agrupar

Los operadores aritmticos se utilizan de manera idntica a como los utilizamos en las matemticas bsicas. A stos se agregan los smbolos de incremento y decremento, muy utilizados en ciclos for. 2.5.5. Formato para instrucciones printf. Cdigo %c %d %i %e %f %g %o %s %u %x %% %p
PROGRAMACIN

Significado Visualiza un carcter. Visualiza un nmero decimal. Visualiza nmero decimal. Visualiza en notacin cientfica. Visualiza datos en punto flotante. Usa %e %f la que sea ms corta. Visualiza nmero octal. Visualiza cadena de caracteres. Visualiza decimal sin signo. Visualiza nmero hexadecimal. Imprime signo % Visualiza un puntero.

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

41 Esta tabla nos muestra los formatos que se pueden aplicar a los tipos de datos en lenguaje C. En particular, dentro de la instruccin printf. 2.5.6. Formato para instrucciones scanf.

Cdigo %c %d %i %e %f %o %s %x %p

Significado Lee un carcter. Lee un nmero decimal. Lee nmero decimal. Lee nmero en punto flotante. Lee nmero en punto flotante. Lee nmero octal. Lee cadena de caracteres. Lee nmero hexadecimal. Lee un puntero.

Al igual que en la instruccin printf, los formatos anteriores se usan para capturar desde teclado los tipos de datos con scanf. 2.5.7. Operadores relacionales.

Operador < <= > >= == !=


PROGRAMACIN

Significado Menor que Menor igual que Mayor que Mayor igual que Igual que Diferente

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

42 2.5.8. Operadores lgicos.

Operador && || !

Significado Conjuncin Y lgico. Disyuncin u O lgico. Negacin o No lgico.

2.5.9. Jerarqua o prioridad de los operadores.

Smbolo () ! ++ -* / % + < <= > >= == != && ||


PROGRAMACIN

Operador Parntesis No lgico Signo negativo Incremento Decremento Multiplicacin Divisin mdulo Suma Resta Menor que Menor o igual que Mayor que Mayor o igual que Igual que Diferente a Y lgico O lgico

Jerarqua Izquierda a derecha. Derecha a izquierda.

Izquierda a derecha

Izquierda a derecha Izquierda a derecha

Izquierda a derecha Izquierda a derecha Izquierda a derecha

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

43 = += -= Asignaciones *= %= /= Derecha a izquierda

A estas alturas ya es posible empezar a escribir programas, dado que ya tenemos suficientes herramientas de programacin que harn esto posible. Escribiremos un programa que realiza una suma de dos valores. #include <stdio.h> #include <conio.h> void main() { int a,b,res; clrscr(); printf("dame el primer digito"); scanf("%d",&a); printf("dame segundo digito"); scanf("%d",&b); res=a+b; printf("el resultado es:%d",res); getch(); } A continuacin, explicaremos el programa anterior. Primero, se debe declarar las bibliotecas del preprocesador que necesitaremos, es decir, dado que vamos a usar instrucciones como printf y scanf, debemos declarar la biblioteca stdio.h, adems, se debe declarar la biblioteca conio.h, ya que vamos a utilizar la instruccin getch(), la cual hace una espera, hasta que se pulse una tecla y clrscr(), sta limpia la

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

44 pantalla, para que no tenga datos anteriores y stos se superpongan con los datos nuevos. Despus, tenemos nuestra funcin principal: main(), seguida de declaraciones de tipo local, posteriormente, tenemos un pequeo conjunto de instrucciones de entrada/salida de datos, ms adelante, una simple operacin matemtica, despus, una leyenda en pantalla con el resultado de sta operacin. Veamos la compilacin y ejecucin de ste programa.

Figura 2.1. Proceso de compilacin del programa que suma dos valores.

Figura 2.2. Ejecucin del programa que suma dos valores

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

45 Como se puede ver en las grficas, ste es un sencillo programa y no tiene una gran vista. Pero, en la medida que se vaya avanzando se pueden generar programas de mucha calidad grfica. En muchos casos nos preguntaremos Cmo s que biblioteca debo declarar para los ciertos tipos de instrucciones existentes? Esto es sumamente sencillo, pues, todo compilador tiene una opcin de ayuda. En sta, se puede acceder a toda la informacin pertinente a una sentencia o instruccin particular. En nuestro caso, podemos localizar dicha opcin en la parte superior izquierda del compilador y se puede acceder a ella de las dos maneras siguientes: Una es, dando clic en la help, posteriormente, clic en la opcin index (aparecer una ventana), en esa ventana, empezar a teclear la instruccin de la cual se quiere tener informacin. Una vez localizada, clic sobre sta, aparecer una ventana con la ayuda referente a dicha instruccin o sentencia. Otra forma de acceder es, presionando clic derecho del mouse sobre la instruccin o sentencia de la que se quiera tener ayuda. En las imgenes siguientes, se ver paso a paso, el procedimiento de acceso a la ayuda del compilador.

Figura 2.3. Obteniendo ayuda del compilador de C. Clic en help. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

46

Figura 2.4. Clic en Index.

Figura 2.5. Se escribe la instruccin o sentencia a solicitar ayuda.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

47

Figura 2.6. Visualiza la ventana de ayuda referente a la instruccin en cuestin.

Se debe hacer notar que la ventana que contiene la informacin de dicha instruccin, es suficientemente grande, al grado tal de tener ejemplos que hacen muy sencillo el entendimiento de las instrucciones utilizadas en lenguaje C. Para visualizarla por completo, es necesario hacer un recorrido con las flechas de desplazamiento de nuestro teclado, o bien, con el mouse, en la parte lateral derecha de dicha ventana. Para finalizar, analizaremos otro programa. /* Rutina que obtiene el rea de un Tringulo rectngulo */ #include <stdio.h> #include <conio.h> void main() { float a,b,h;
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

48 clrscr(); gotoxy(10,10); printf("Dame el valor de la Base"); gotoxy(35,10); scanf("%f",&b); gotoxy(10,12); printf("Dame el valor de la Altura"); gotoxy(37,12); scanf("%f",&h); a=(b*h)/2; gotoxy(10,14); printf("El rea del Tringulo Rectngulo es: %2.3f",a); getch(); } De ste programa, podemos comentar que se incursionan dos nuevos tpicos, uno es: la declaracin de datos de punto flotante, es decir, con estos tipos de datos, podemos trabajar con nmeros enteros y con decimales; la segunda es, la incursin de una instruccin de posicionamiento: gotoxy(columna, lnea), la cual localiza al cursor en las coordenadas dentro del parntesis de esa instruccin, por ejemplo: gotoxy(10,12), posicionar el cursor en la columna 10, lnea 12 de nuestra pantalla. Debemos aclarar que cuando se trabaja con un compilador como ste, que tiene un entorno texto, se tiene 80 columnas y aproximadamente 40 lneas. Por lo que se debe tener en cuenta estas caractersticas a la hora de posicionar el cursor en nuestra pantalla. El compilador de C, opera de manera muy distinta al trabajar con las bibliotecas que modifican el entorno, tales como graphics.h entre otras, las cuales agregan cierto beneficio al trabajar con grficos.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

49

Figura 2.7. Vista de ejecucin del programa anterior.

Como se podr observar, gotoxy() proporciona una mejor disposicin de nuestro programa en la pantalla de la computadora.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

50 Preguntas Frecuentes Segunda Unidad

1.- Escriba la estructura bsica de un programa en lenguaje C. void main() { Instrucciones; } 2.- Cul es el smbolo o caracter que se utiliza para denotar que ha terminado una instruccin? Es el punto y coma (;). 3.- Cules son los caracteres que marcan el inicio y final de toda funcin? { }, incio y final, respectivamente. 4.- Para qu se utiliza la instruccin void? Se utiliza para prevenir al compilador que la funcin a la que hace referencia no regresar ningn valor como resultado de su ejecucin. 5.- Qu son las libreras del preprocesador? Son bibliotecas de instrucciones que le dicen al compilador, si una instruccin sentencia est escrita correctamente, es decir, ellas tienen las reglas de uso de las instrucciones en el lenguaje.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

51 6.- Escriba la estructura formal de todo programa escrito en C. Directivas del preprocesador. Definiciones de tipos de datos. Declaracin de variables de tipo global. Declaracin de funciones. Funcin principal main(). { (Llave de inicio). Declaracin de variables tipo local. Instrucciones. Funciones. } (Llave de final) Dems funciones. 7.- Mencione al menos tres caractersticas de los identificadores. Deben empezar con una letra. No deben tener letras o caracteres especiales. No utilizar una palabra reservada como identificador. 8.- Escriba tres tipos de datos que se utilizan en lenguaje C. int, entero. char, carcter. float, flotante o decimal. 9.- Cul es el operador de mayor jerarqua utilizado en el lenguaje C? (), Los parntesis, son los operadores de mayor jerarqua.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

52 Mapa Conceptual Segunda Unidad

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

53 Actividades de Trabajo Segunda Unidad Con los contenidos aprendidos en sta unidad, resolver los siguientes problemas: 1.- Realizar un programa que permita realizar una multiplicacin. 2.- Hacer un programa que convierta los grados centgrados en farenheit y viceversa. 3.- Llevar a cabo otro programa que encuentre la distancia entre dos puntos dados de un eje cartesiano. 4.- Elaborar un programa que encuentre el rea cualesquiera. de un crculo

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

54 Cuestionario de Autoevaluacin Segunda Unidad

1.- Cmo se llama a la funcin principal del lenguaje de programacin C. 2.- Escribe un comentario vlido para C. 3.- Cul es la sintaxis para declarar una librera? 4.- Qu significa stdio.h? 5.- Describa el significado de conio.h 6.- Qu es una variable? 7.- Las variables NUMERO, Numero y numero, son la misma variable para el compilador del lenguaje C? 8.- Cules son las instrucciones bsicas de entrada/salida para C? 9.- Describa a las constantes.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

55 Lecturas Obligatorias Segunda Unidad

Kernighan, Brian W., Ritchie Dennis M., El lenguaje de programacin C. Segunda edicin, Prentice-Hall Hispanoamericana S.A., 1991, ....Captulo 1. Pea Basurto, Marco A., Cela Espn, Jos M., Introduccin a la programacin en C. Primera Edicin, Ediciones UPC, septiembre de 2000. Barcelona, Espaa...Captulos 2 y 3.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

56 TERCERA UNIDAD ESTRUCTURAS CONDICIONALES E ITERATIVAS Objetivo particular Al terminar el capitulo el alumno ser capaz de utilizar las sentencias de control, as como las iterativas, para dar una mayor funcionalidad a los programas elaborados en el entorno de C.

3.1. Estructuras condicionales Hasta el momento hemos estado realizando programas que slo desarrollan una actividad, es decir, resuelven una operacin matemtica y terminan. A partir de ste captulo, utilizaremos los condicionantes, son unas instrucciones que dotan al programa de ciertos niveles de decisin, por ejemplo, el poder permitir al usuario tomar una decisin ante el flujo de dichos programas, hacen mucho ms verstiles a stos. Para poder imprimir mayor flexibilidad a nuestros programas utilizaremos las tres instrucciones que el lenguaje C proporciona para sta tarea, tales instrucciones son: if-else, es una estructura condicional que evala los valores que contenga la instruccin if. El operador ?, es un operador ternario que veremos adelante. La estructura switch-case, sta es muy parecida a if-then-else.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

57 3.1.1. Sentencia if-else. La sentencia if-else, es la estructura condicional bsica de todo lenguaje de programacin y en C no es la excepcin. Dicha estructura evaluar la condicin que permanece en sta y dependiendo del resultado de dicha evaluacin tomar un camino u otro. La sintaxis elemental de sta construccin de decisin es: if(condicin) Instrucciones, sentencias, etc.
Flujo de datos

Verdadero

Condicin

Falso

Instrucciones, sentencias. Grupo 1.

Instrucciones, sentencias. Grupo 2.

Flujo de datos

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

58 Cabe destacar que cuando existe slo una instruccin a ejecutar despus de la condicin, no es necesario colocar los caracteres de inicio y final de funcin ({ }), en caso contrario es de suma importancia colocarlos, ya que si no se encuentran, marcar error a la hora de compilacin. Un ejemplo de la anterior sera: #include <stdio.h> #include <conio.h> void main() { int a; clrscr(); gotoxy(12,8);printf("PROGRAMA QUE COMPRUEBA SI UN NUMERO ES IMPAR"); gotoxy(20, 10);printf("Pulsa un nmero:"); gotoxy(37,10);scanf("%d", &a); if (a % 2 == 0) /* Comprobar si a es par */ { gotoxy(20,14);printf("El nmero es par"); } else { gotoxy(20,14);printf( "El nmero es impar: %d", a ); } getch(); } Veamos ahora, el resultado de dicho programa.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

59

Figura 3.1. Ejecucin del programa usando if.

La sentencia if puede ser usada en forma anidada, es decir, un if dentro de otro if, para lograr abarcar todas las condiciones posibles. La sintaxis para esa estructura sera: if (condicin) { Instrucciones1 } else if (condicin2) { Instrucciones2 } .. else if (condicin_n) { Instrucciones_n } else { Grupo de instrucciones por default }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

60 Veamos un ejemplo de ste tipo de estructura. #include <stdio.h> #include <conio.h> void main() { int a,b; clrscr(); gotoxy(15,8);printf("PROGRAMA QUE COMPARA DOS NMEROS"); gotoxy(20,12);printf("Dame el primer nmero"); gotoxy(42,12);scanf("%d",&a); gotoxy(20,14);printf("Dame el segundo nmero"); gotoxy(43,14);scanf("%d",&b); if (a>b) { gotoxy (20,18);printf("%d es mayor que %d",a,b); } else if(a==b) { gotoxy(20,18);printf("%d es igual a %d",a,b); } else { gotoxy (20,18);printf("%d es menor que %d",a,b); } getch(); } Vemoslo ahora en ejecucin.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

61

Figura 3.2. Ejecucin del programa compara dos nmeros.

3.1.2. Operador ?. El operador ? es una forma especial de condicin, dado que es el nico operador que evala tres condiciones simultneamente en la misma expresin. Su sintaxis es: (expresin_lgica) ? (condicin1) : (condicin2), donde: expresin_lgica, es la condicin a ser evaluada. condicin1, es la condicin que se ejecuta toda vez que la expresin_logica es verdadera. condicin2, es la condicin que se ejecutar en caso que la expresin_lgica sea falsa. Para ejemplificar sta instruccin, resolveremos el ejercicio anterior, pero en sta ocasin queremos saber cul es el mayor: #include <stdio.h> #include <conio.h>
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

62 void main() { int a,b; clrscr(); gotoxy(15,8);printf("PROGRAMA QUE COMPARA DOS NMEROS"); gotoxy(20,12);printf("Dame el primer nmero"); gotoxy(42,12);scanf("%d",&a); gotoxy(20,14);printf("Dame el segundo nmero"); gotoxy(43,14);scanf("%d",&b); gotoxy (20,18);printf(El valor mayor es %d , (( a>b ) ? a : b)); getch(); }

Figura 3.3. Ejecucin del programa para encontrar el valor mayor.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

63

3.1.3. Sentencia switch-case Esta sentencia o instruccin evala el contenido de una variable mediante switch y lo compara con cada una de las alternativas dadas en case, si encuentra dicha similitud, ejecuta las instrucciones, funciones, o parmetros dados en dicha alternativa. La sintaxis de sta sera: switch (variable) { case alternativa : conjunto de instrucciones, funciones, etc. break; case alternativa_2 : conjunto de instrucciones, funciones, etc. break; case alternativa_n : conjunto de instrucciones, funciones, etc. break; default : conjunto de instrucciones, funciones, etc. }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

64
Flujo de datos

Evaluacin (Variable)

Alternativa_1 instrucciones, funciones, etc.

Alternativa_2 instrucciones, funciones, etc.

.....

Alternativa_n instrucciones, funciones, etc.

Alt. Por default instrucciones, funciones, etc.

Flujo de datos

Figura 3.4. Flujo de datos en una sentencia switch-case

Desarrollemos un ejemplo para poder entender dicha sentencia: #include <stdio.h> #include <conio.h> char letra;
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

65 void main() { clrscr(); gotoxy(16,6);printf("PROGRAMA QUE MUESTRA EL USO SWITCH-CASE"); gotoxy(16,9);printf("Dame una Letra Vocal [ ]"); gotoxy(38,9);scanf("%c",&letra); switch(letra) { case 'a': case 'A': gotoxy(16,13);printf("Pulsaste la Vocal A"); break; case 'e': case 'E': gotoxy(16,13);printf("Pulsaste la Vocal E"); break; case 'i': case 'I': gotoxy(16,13);printf("Pulsaste la Vocal I"); break; case 'o': case 'O': gotoxy(16,13);printf("Pulsaste la Vocal O"); break; case 'u': case 'U': gotoxy(16,13);printf("Pulsaste la Vocal U"); break; default: gotoxy(16,16);printf("No es una Vocal"); }

DE

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

66 El programa anterior evala la tecla pulsada y determina si ha sido pulsada una letra vocal o alguna diferente de stas. Noten que hago una doble evaluacin de la tecla pulsada, esto es porque puede ser tecleada una vocal minscula, o bien una mayscula y para no fallar en la evaluacin (sera a minscula A mayscula), hago doble case para cada alternativa. Esto es permitido por el lenguaje.

Figura 3.5. Ejecucin del programa switch-case.

3.2. Ciclos o sentencias iterativas. Es muy posible que ya se hayan dado cuenta que hasta ahora, slo hemos hecho algunas rutinas o programas que hacen una sola actividad, es decir, se usan una sola vez, y, esa no es la finalidad de un lenguaje de programacin, pues, la finalidad principal de stos, es la liberacin del humano a realizar actividades rutinarias. El potencial de todo lenguaje de programacin estriba en solucionar problemas que impliquen acciones repetitivas y hasta cierto punto tediosas. En ste apartado incursionaremos en los ciclos, para dar esa potencia y caracterstica al lenguaje de programacin C.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

67 Aqu aprenderemos a utilizar ciclos tales como: for. while. do-while.

3.2.1. Ciclo for. Esta es una de las instrucciones ms recurridas, pues, presenta una forma de iterar de lo ms simple. Su sintaxis sera como sigue: for(condicin_inicial;valor_de_paro;incremento/decremento) Observar que el separador de las condicionantes del parntesis es un punto y coma (;), adems, si slo va a iterar una sola instruccin, no son necesarios los smbolos de inicio-fin ({ }), en caso contrario, es imprescindible usar las llaves de inicio y fin. Por ltimo, es de suma importancia notar que dicha instruccin no debe llevar punto y coma ( ;) al final de los parntesis. Un ejemplo de sta sentencia sera: for(i=1;i<=10;i++) En la lnea anterior, se repetir diez veces, empezando en el nmero uno y se incrementar el valor de i en uno a la vez. Otro ejemplo: for(i=10;i>=1;i--)
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

68 A diferencia de la primera, sta decrementar a i en uno hasta llegar a ser i=1. La siguiente imagen muestra el flujo del ciclo for.
Flujo de datos

Instrucciones, sentencias. Inciales.

Falso

Condicin Verdadero Grupo de instrucciones o sentencias

Incremento / decremento

Flujo de datos Figura 3.6. Grfico de funcionamiento del ciclo for. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

69

Hagamos un ejemplo usando esta sentencia de iteracin. #include <stdio.h> #include <conio.h> /*PROGRAMA QUE MUESTRA 10 NUMEROS*/ void main() { int n; clrscr(); gotoxy(18,8);printf("PROGRAMA QUE MUESTRA A DIEZ NUMEROS"); for(n=1;n<=10;n++) { gotoxy(25,10+n);printf("%d",n); } getch(); } Este programa mostrar en pantalla diez nmeros, que empezarn en el uno y terminar en el diez, vase la instruccin for.

Figura 3.7. As se muestra el programa anterior. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

70 Observen que gotoxy tambin incrementa en uno la posicin de la lnea mediante el uso del mismo ciclo en gotoxy(25,10+n). Los ciclos for tambin permiten usar ms de una condicionante en su estructura, veamos el siguiente ejemplo: #include <stdio.h> #include <conio.h> /*PROGRAMA QUE MUESTRA 10 NUMEROS*/ void main() { int i,j,num,x; clrscr(); gotoxy(5,4);printf("PROGRAMA QUE REALIZA VARIAS OPERACIONES A PARTIR DE UNA CANTIDAD"); gotoxy(6,6);printf("Dame el nmero a partir del cual se harn las operaciones"); gotoxy(64,6);scanf("%d",&i); gotoxy(6,8);printf("Dime la cantidad de operaciones a realizar"); gotoxy(50,8);scanf("%d",&j); gotoxy(6,10);printf("Las %d operaciones son: ",j); for(num=1,x=j;num<=j,x>=1;num++,x--) { gotoxy(20,11+num);printf(" %d + %d = %d ",i,num,i+num); gotoxy(40,11+num);printf(" %d * %d = %d ",i,num,i*num); gotoxy(65,11+num);printf(" %d",x); } getch(); }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

71 Podemos percatarnos que se pueden agregar varios parmetros en la estructura de un ciclo for, mientras stos se separen con una coma (,), vase la lnea del ciclo for.

La Figura 3.8. Muestra la ejecucin del programa

Otra forma de utilizar ste ciclo es anidndolo, es decir, un ciclo for dentro de otro, esto se hace cuando se desea realizar una actividad, pero, que sta est en funcin de dos variantes, por ejemplo, cuando deseas obtener todas las tablas de multiplicar. Veamos el programa. #include <stdio.h> #include <conio.h> /*PROGRAMA QUE MUESTRA LAS TABLAS DE MULTIPLICAR*/ void main() { int i,j,x,res; res,x=0; clrscr(); gotoxy(20,8);printf("PROGRAMA QUE MUESTRA LAS TABLAS DE MULTIPLICAR"); for(i=1;i<=10;i++) {
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

72 for(j=1;j<=10;j++) { res=i*j; gotoxy(1+x,10+j);printf("%dX%d=%d",i,j,res); } x=x+8; } getch(); } Observen y analicen los dos ciclos for que se encuentran en el programa anterior. El ciclo interno puede realizar slo una tabla de multiplicar, pero como deseamos tener las diez tablas, se hace necesario utilizar otro ciclo for que repita el primer ciclo otras diez veces. Veamos cmo se ejecuta.

Figura 3.8. Muestra la ejecucin de las tablas de multiplicar.

Te invito a que transcribas los programas anteriores y los ejecutes para que observes con detenimiento las funciones de ste ciclo. Adems, es de suma importancia que te propongas resolver los problemas que tu profesor te proponga.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

73 3.2.2. Ciclo while. Esta instruccin es una alternativa de uso en los ciclos, tiene los mismos resultados que si se utilizara la instruccin for. Pero, tiene algunos cambios de sintaxis y de codificacin. La sintaxis de sta sera: while(condicin) sentencia; condicin: tiene que ser una condicin lgica que permita evaluarse constantemente. sentencia: es una instruccin a ejecutar como resultado de una evaluacin positiva de condicin. Sucede lo mismo que con la sentencia for, cuando slo se ejecuta una sola instruccin, no es necesario utilizar los caracteres de inicio y fin de funcin, es decir, los { }. Para utilizar sta sentencia se debe provocar que dicha condicin sea verdadera, es decir, proporcionar los parmetros para que dicha condicin sea verdadera y se pueda entrar en el ciclo, en caso contrario nunca se podr acceder a dicho iteracin. La sintaxis de sta instruccin cuando se tiene ms de una sentencia para iterar, quedar como sigue: while(condicin) { Conjunto_de_sentencias; } Para poder entender a mayor detalle el uso de sta instruccin, vamos a realizar una representacin grfica de la misma.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

74
Flujo de datos

Instrucciones, sentencias. Incializacin.

Falso

Condicin Verdadero Grupo de instrucciones o sentencias

Incremento / decremento

Flujo de datos Figura 3.9. Diagrama del ciclo while.

Cmo lo advertimos, el funcionamiento de sta instruccin es igual a la instruccin for, pero, como lo veremos ms adelante, sta tiene que

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

75 provocar que dicha condicin sea verdadera para que se entre a dicho ciclo while. Para corroborar lo anterior, veremos un ejemplo del uso de sta. #include <stdio.h> #include <conio.h> /*PROGRAMA QUE SUMA HASTA N NUMEROS*/ void main() { int n,i,sum; clrscr(); sum=0; gotoxy(25,8);printf("PROGRAMA QUE SUMA SUCESIVOS"); gotoxy(25,11);printf("Dame el Lmite de las Sumas"); gotoxy(52,11);scanf("%d",&i); n=1; while(n<=i) { sum=sum+n; gotoxy(25,13+n);printf("La suma es %d",sum); n++; } getch(); }

NUMEROS

Vemos en el programa anterior las lneas donde se inicializa a la variable n=1, esto para provocar que ingrese en el ciclo, dado que si no se tiene inicializado a sta, nunca ingresar. Vemos adems, que la condicin tiene que ser verdadera para lograr imprimir las sumas sucesivas, slo si el lmite de dichas sumas es 0, no se lograr la ejecucin de ste programa. Adems, tenemos que resaltar que se tiene que incrementar
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

76 mediante otra lnea de cdigo, esto en n++, lo cual no es necesario, si utilizamos un ciclo for.

Figura 3.10. Ejecucin del programa de sumas consecutivas

A continuacin, vamos a realizar uno de los programas que hicimos anteriormente con el ciclo for, pero vamos a utilizar a la instruccin while. Noten que la ejecucin es exactamente la misma, pero, tambin nos daremos cuenta que la codificacin es un tanto diferente. #include <stdio.h> #include <conio.h> /*PROGRAMA QUE MUESTRA LAS TABLAS DE MULTIPLICAR*/ void main() { int i,j,x,res; res,x=0;
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

77 clrscr(); gotoxy(20,8);printf("PROGRAMA QUE MUESTRA LAS TABLAS DE MULTIPLICAR"); i=1; while(i<=10) { j=1; while(j<=10) { res=i*j; gotoxy(1+x,10+j);printf("%dX%d=%d",i,j,res); j++; } i++; x=x+8; } getch(); }

Como ya se habrn dado cuenta, se tienen que inicializar las variables para que su valor lgico sea verdadero, adems, se tienen que incrementar las variables de los ciclos antes de finalizar cada uno de ellos. Descubran lo anterior y comenten con sus comaperos. Es importante notar que las instrucciones while, al igual que los ciclos for, tambin se pueden anidar, es decir, introducir un while dentro de otro while. Ms adelante, veremos que cuando se corren los programas que hacen lo mismo, pero con diferentes instrucciones, no hay ninguna diferencia notoria entre ellos.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

78 Cuando analicemos el ciclo do-while, veremos que todo esto, aplicar para sta ltima sentencia. Veamos la ejecucin del mismo.

Figura 3.11. Ejecucin del programa que muestra las tablas de multiplicar.

3.2.3. Ciclo do-while. Por ltimo, analicemos el funcionamiento del ciclo do-while, sta tiene algunas peculiaridades que debemos destacar. Primero, ste ciclo se realiza al menos una vez, puesto que el do significa hacer mientras (while) la condicin se cumpla. Dos, aqu es de suma importancia colocar las llaves de inicio y fin de funcin ({ }), an cuando sea una sola instruccin a ejecutar dentro del cuerpo de sta. Y por ltimo, a diferencia de todas las dems instrucciones iterativas, aqu debemos teclear un punto y coma (;) al finalizar la evaluacin del while.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

79 La sintaxis de sta sera: do { Instruccin; o grupo_de_instrucciones; } while(condicin);


Flujo de datos

Hacer

Grupo de instrucciones o sentencias

Incremento / decremento

Verdadero Condicin

Falso

Flujo de datos Figura 3.12. Diagrama de funcionamiento del ciclo do-while. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

80 Para analizarla con ms detalle, escribiremos algunos programas. #include <stdio.h> #include <conio.h> /*PROGRAMA QUE MUESTRA EL CODIGO ASCII*/ void main() { int n; clrscr(); gotoxy(15,7);printf("PROGRAMA QUE MUESTRA EL CODIGO ASCII \n\n\n"); n=1; do { printf("%d %c \t",n,n); n++; }while(n<=255); getch(); }

Figura 3.13. Resultado de la ejecucin del programa que muestra los caracteres ASCII. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

81 El programa anterior nos mostrar en pantalla una lista con los caracteres ASCII, notemos que ste ciclo inicia, imprime el primer caracter, posteriormente se incrementa la variable n e imprime el siguiente, hasta que n sea igual a 255, cuando sucede lo anterior, se termina el programa. Como lo anticipamos, while(condicin) se termina con un punto y coma. Veamos otro ejemplo: #include <stdio.h> #include <conio.h> /*PROGRAMA QUE EL FACTORIAL DE UN NUMERO*/ void main() { int num,lim,res; clrscr(); gotoxy(15,7);printf("PROGRAMA QUE CALCULA EL FACTORIAL DE UN NUMERO"); gotoxy(15,10);printf("Dame el nmero para factorizar"); gotoxy(47,10);scanf("%d",&num); lim=num; num=1; res=1; do { res=res*num; num++; }while(num<=lim); gotoxy(15,22);printf("El Factorial de %d es: %d",num-1,res); getch(); }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

82 El programa anterior nos muestra el factorial de un nmero cualquiera. Como sabemos, matemticamente dicho factorial es la multiplicacin sucesiva de los valores anteriores a ese nmero, por ejemplo, el factorial del nmero 5, ser: 5X4X3X2X1, aunque, no es necesario multiplicarlo por la unidad, entonces, quedara: 5X4X3X2, pero el factorial del nmero 0 ser 1. Veamos el resultado.

Figura 3.14. As nos mostrar el resultado del factorial de 5.

Para finalizar, hagamos el programa de las tablas de multiplicar y comparmoslo con los ciclos anteriores, claro que la ejecucin no tendr diferencia, pero no as el cdigo, que diferir en la utilizacin de la sentencia do-while con respecto a los programas anteriores. #include <stdio.h> #include <conio.h> /*PROGRAMA QUE MUESTRA LAS TABLAS DE MULTIPLICAR*/

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

83 void main() { int i,j,x,res; res,x=0; clrscr(); gotoxy(20,8);printf("PROGRAMA QUE MUESTRA LAS TABLAS DE MULTIPLICAR"); i=1; do { j=1; do { res=i*j; gotoxy(1+x,10+j);printf("%dX%d=%d",i,j,res); j++; }while(j<=10); i++; x=x+8; }while(i<=10); getch(); } Como nos hemos dado cuenta, todos los ciclos que hemos analizado tienen efectos similares y no hay problema, se puede utilizar uno u otro indistintamente, pero, siempre considerando lo que se desea hacer.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

84 Veamos su ejecucin.

Figura 3.15. As se ver, exactamente igual al hecho con los otros ciclos.

En el siguiente captulo aprenderemos a utilizar otra de las potentes cualidades que tiene el lenguaje C, se trata de los arreglos, una particular forma de agrupar datos.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

85 Preguntas Frecuentes Tercera Unidad

1.- Qu son las estructuras condicionales? Son instrucciones o sentencias que dotan a los programas de ciertos niveles de decisin. 2.- Enumera las sentencias de control del lenguaje C. if-else ? switch-case 3.- Escriba el cdigo para un programa que determine si el nmero introducido a travs del teclado es positivo o negativo. #include <stdio.h> #include <conio.h> void main() { int num; clrscr(); gotoxy(15,6);printf("PROGRAMA QUE LEE UN NUMERO E IMPRIME POSITIVO O NEGATIVO"); gotoxy(20,10);printf("Teclea el Nmero"); gotoxy(37,10);scanf("%i",&num); if(num>=0) { gotoxy(20,14);printf("El Nmero %i es POSITIVO",num);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

86 } else { gotoxy(20,14);printf("El Nmero %i es NEGATIVO",num); } getch(); } 4.- Qu son los ciclos? Son instrucciones de los lenguajes de programacin que proveen de la capacidad de repetir cierta cantidad de veces un proceso o accin.

5.- Enlista a las sentencias iterativas que posee C. for. while. do-while. 6.- Cul es la sintaxis de utilizacin de la instruccin switch-case?
switch (variable) { case alternativa : conjunto de instrucciones, funciones, etc. break; case alternativa_2 : conjunto de instrucciones, funciones, etc. break; case alternativa_n : conjunto de instrucciones, funciones, etc. break; default : conjunto de instrucciones, funciones, etc. }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

87
7.- Escriba el cdigo para un programa que convierta el nmero dado en su respectiva palabra, por ejemplo; si pulso el nmero 1, me debe de presentar en pantalla uno, as sucesivamente. Como ejemplo, slo convierta del 1 al 4. #include <stdio.h> #include <conio.h> void main() { int x; do { clrscr(); gotoxy(16,6);printf("PROGRAMA DEMUESTRA USO DE SWITCH-CASE"); gotoxy(16,10);printf("Pulsa un Nmero entre 1-4...[ ]"); gotoxy(16,24);printf("Para salir pulsa 0"); gotoxy(45,10);scanf("%d",&x); switch(x) { case 1: gotoxy(16,18);printf("Pulsaste el nmero UNO"); break; case 2: gotoxy(16,18);printf("Pulsaste el nmero DOS"); break; case 3: gotoxy(16,18);printf("Pulsaste el nmero TRES"); break; case 4: gotoxy(16,18);printf("Pulsaste el nmero CUATRO"); break; default: gotoxy(16,18);printf("Pulsaste un nmero incorrecto"); } }while(x!=0); getch(); }
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

88 Mapa Conceptual Tercera Unidad

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

89 Actividades de Trabajo Tercera Unidad

1.- Realizar un programa que realice varias funciones, stas se deben seleccionar a travs de un men. Dichas funciones a resolver seran las siguientes; reas de tringulos rectngulos, rea de un circulo, conversin de grados centgrados a farenheit y otro que convierta grados farenheit a grados centgrados. Una posible solucin sera como sta: #include <stdio.h> #include <conio.h> void main() { int opc; float base,altura,area,radio,pi,grado,res; pi=3.1416; do { clrscr(); gotoxy(32,3);printf("M E N U"); gotoxy(25,5);printf("1. rea de un Tringulo"); gotoxy(25,7);printf("2. rea de un Crculo"); gotoxy(25,9);printf("3. Conversin Centgrados a grados Farenheit"); gotoxy(25,11);printf("4. Conversin a grados Centgrados"); gotoxy(25,13);printf("5. Salir"); gotoxy(25,15);printf("Elige una opcin...[ ]"); gotoxy(46,15);scanf("%d",&opc); if(opc==1) {
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

90 clrscr(); gotoxy(20,4);printf("Programa que calcula el rea de un tringulo"); gotoxy(20,6);printf("Dame el valor de la base"); gotoxy(50,6);scanf("%f",&base); gotoxy(20,8);printf("Dame el valor de la altura"); gotoxy(50,8);scanf("%f",&altura); area=base*altura/2; gotoxy(20,14);printf("el rea es :%.2f",area); getch(); } if(opc==2) { clrscr(); gotoxy(15,6);printf("Programa que calcula el rea de un crculo"); gotoxy(15,8);printf("Dame el valor del radio"); gotoxy(39,8);scanf("%f",&radio); area=pi*(radio*radio); gotoxy(15,11);printf("el rea es:%.2f",area); getch(); } if(opc==3) { clrscr(); gotoxy(3,8);printf("Programa que realiza la conversin de grados centgrados a grados farenheit"); gotoxy(10,12);printf("Dame la cantidad de grados centigrados"); gotoxy(61,12);scanf("%f",&grado); res=(grado*9)/5+32; gotoxy(20,16);printf("El resultado en farenheit es:%.2f",res); getch(); } if(opc==4) { clrscr();
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

91 gotoxy(12,8);printf("PROGRAMA QUE REALIZA LAS CONVERSION DE GRADOS CENTIGRDOS A FARENHEIT"); gotoxy(20,12);printf("Dame la cantidad de grados centgrados a convertir"); gotoxy(75,12);scanf("%f",&grado); res=((grado*9)/5)+32; gotoxy(20,16);printf("El resultado en farenheit es:%.2f",res); getch(); } if(opc==5) { clrscr(); gotoxy(45,20);printf("**** GRACIAS *****"); getch(); } }while(opc!=5); }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

92 Cuestionario de Autoevaluacin Tercera Unidad 1.- Determine la sintaxis para la instruccin do-while. 2.- Escriba un programa que, de un grupo de productos, muestre los precios de stos. 3.- Realice otro programa que obtenga el promedio de 6 calificaciones y de stas muestre si ha sido aprobado est reprobado.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

93 Lecturas Obligatorias Tercera Unidad

Kernighan, Brian W., Ritchie Dennis M., El lenguaje de programacin C. Segunda edicin, Prentice-Hall Hispanoamericana S.A., 1991, ....Captulo 3. Pea Basurto, Marco A., Cela Espn, Jos M., Introduccin a la programacin en C. Primera Edicin, Ediciones UPC, septiembre de 2000. Barcelona, Espaa...Captulos 4 y 5.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

94 CUARTA UNIDAD ARREGLOS, CADENAS Y PUNTEROS. Objetivo particular. Al terminar sta unidad el alumno tendr los conocimientos necesarios para aplicar las estructuras de datos en el desarrollo de software o programas de aplicacin. 4.1. Arreglos. Es un tipo de datos estructurado que provee al lenguaje de cierta capacidad de agrupamiento de los datos en una sola variable. Existen bsicamente tres tipos de arreglos: los unidimensionales, tambin conocidos como vectores, los arreglos bidimensionales, mejor conocidos como matrices y los arreglos multidimensionales. En sta gua abordaremos cada uno de los anteriores, pero muy especialmente a los dos primeros tipos de arreglos. Las estructuras de datos mantienen las siguientes caractersticas que las hacen especiales: Tienen que ser del mismo tipo, es decir, el conjunto o grupo de datos forzosamente debe ser declarado de un solo tipo, ya sea caracter, entero o flotante. Se hace referencia a sta con un solo nombre. El compilador los almacena en una porcin de memoria contigua, es decir, todos se encuentran consecutivamente, y, el primer dato se encuentra en la parte baja de dicha memoria y el ltimo en la parte alta de sta.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

95 Una forma anloga de imaginarse stas estructuras, es visualizar las tablas que proporciona una hoja de clculo Excel, donde las lneas corresponden a un arreglo unidimensional o vector y toda una seccin formada por lneas y columnas asemejan a un arreglo bidimensional o matriz.

4.1.1. Arreglos unidimensionales (vectores). Este tipo de estructura de datos puede representarse grficamente como sigue: 0
Primer elemento

n
ltimo elemento

Figura 4.1. Representacin grfica de un arreglo unidimensional o vector.

La declaracin de los arreglos unidimensionales o vectores ser: Tipo_dato nombre_estructura[tamao]; Donde: Tipo_de_dato, es el tipo de dato que albergar sta estructura, de ste depende la cantidad de bytes que reservar el compilador. Nombre_estructura, se refiere al nombre de identificacin, con el cual ser invocado o llamado en lo sucesivo. [tamao], nos indicar la cantidad de elementos que sern alojados en sta, junto con tipo_de_dato nos marca el espacio de memoria reservada.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

96 Un ejemplo de la anterior declaracin lo lograramos de la siguiente manera: int numeros[20]; char letras[30]; En la primera de las anteriores, se apartan 20 espacios de memoria para introducir nmeros y se le hace llamar mediante nmeros, pues fue declarada como tipo entero. En la segunda, se reserva 30 espacios para introducir letras o caracteres, en el cuerpo del programa se le llama mediante la variable letras y es de tipo caracter. Para poder trabajar con las estructuras de datos, es necesario aprender cmo se pueden guardar los datos y como se deben consultar dichos elementos del arreglo. Bien, primero veremos cmo guardar los datos en los arreglos: Existen varias formas para guardar los datos en los arreglos; una de las ms usuales es: asignar directamente a los espacios los valores requeridos, es decir, de la siguiente manera: letra[1]=e; bien, numero[3]=5; las anteriores, asignan o guardan en la posicin 2 del arreglo la letra e y guardan el nmero 5 en la posicin 4 del arreglo numero. El cambio aparente de posicin, se debi a que todos los arreglos empiezan con la posicin 0 y no con la 1, como convencionalmente se supone. Otra forma de asignar valores a los arreglos es, mediante los ciclos que hemos aprendido en el capitulo pasado, dado que sus datos estn organizados en forma consecutiva y tales ciclos nos permiten agregar uno a uno los datos. Una recomendacin muy importante es, inicializar dicho
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

97 vector antes de agregar datos, ya que si no se inicializan, el lenguaje asigna algn valor del tipo declarado, pues, toda variable debe tener siempre informacin, aunque no siempre es adecuado. Veamos un ejemplo para inicializar un arreglo de tipo entero: #include <stdio.h> #include <conio.h> #define TAM 20 void main() { int arreglo[TAM], i; for(i=0;i<TAM;i++) arreglo[i]=0; } Como nos podremos dar cuenta, el cdigo anterior, define una variable de tamao 20 en #define TAM 20; que posteriormente utilizaremos para dimensionar al arreglo, en la lnea int arreglo[TAM]; le decimos al compilador que reserve 20 espacios de memoria consecutiva para almacenar nmeros, finalmente en las instrucciones comprendidas entre el for y la lnea arreglo[i]=0; se asigna un 0 a cada espacio reservado. En caso de que se hubiera declarado tipo caracter, se hubiera inicializado dicho vector con un espacio en blanco, es decir, la lnea de arreglo[i]=0; quedara como arreglo[i]= ;. Ya hemos visto como se agregan los datos a los arreglos, ahora veremos cmo se pueden acceder o consultar dichos elementos existentes en tales arreglos. De igual forma que para agregar, se pueden consultar mediante los ndices de los arreglos, es decir, si deseo visualizar el cuarto elemento de
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

98 un arreglo, se puede hacer de la siguiente manera: x=arreglo[3]; se manda a imprimir la variable x y sta mostrar el valor almacenado en la cuarta posicin de dicho arreglo. Ahora, si deseo visualizar todos los valores del arreglo, lo hago mediante un ciclo for, de la siguiente manera: #include <stdio.h> #include <conio.h> #define TAM 10 void main() { int arreglo[TAM],i,x,dato=10; clrscr(); for(i=0;i<TAM;i++) /*Estas dos lneas inicializan el vector */ arreglo[i]=0; for(i=0;i<TAM;i++) /*todo el for introduce datos al vector */ { dato=dato+i; arreglo[i]=dato; } for(i=0;i<TAM;i++) /*Este ltimo ciclo, muestra los valores del vector */ { x=arreglo[i]; gotoxy(8,5+i);printf("El valor %d es: %d",i+1,x); } getch(); } Espero que con ste ejercicio se haya entendido la manera de utilizar los arreglos unidimensionales o vectores, es decir, como inicializarlos, agregar datos e imprimirlos en pantalla.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

99

Figura 4.2. Muestra la inicializacin e impresin de datos en un vector.

Se recomienda revisar el cdigo y de ser necesario modificarlo para encontrar otras alternativas de realizar las actividades anteriores. Por ltimo, ratifiquemos lo anterior con un ejemplo completo, el siguiente cdigo encuentra el nmero mayor de un conjunto de valores, en ste caso particular, slo evaluaremos 5 datos numricos. #include <stdio.h> #include <conio.h> #define TAM 5 void main() { int i, max, imax; int conjunto[TAM]; clrscr(); gotoxy(10,4);printf("PROGRAMA QUE ENCUENTRA EL MXIMO DE UN GRUPO DE VALORES"); gotoxy(10,6);printf("Introduce %d valores:\n", TAM); for(i=0;i<TAM;i++) arreglo[i]=0;
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

100 for (i=0; i<TAM; i++) { gotoxy(20,8+i);printf("%d: ", i+1); gotoxy(25,8+i);scanf("%d", &conjunto[i]); } max=conjunto[0]; imax=0; for (i=0; i<TAM; i++) { if(conjunto[i]>max) { max=conjunto[i]; imax=i; } } gotoxy(20,20);printf("El mximo valor del conjunto es: %d.\n", max); gotoxy(20,22);printf("y est en la posicin %d.\n", imax+1); getch(); }

El programa que acabamos de escribir, nos pide cinco valores que guarda en una variable o vector de cinco elementos llamado conjunto, en el cdigo localizado en el primer ciclo for, se inicializa, es decir, se agrega un valor 0 a cada elemento del arreglo, posteriormente en el segundo ciclo for, se ingresan los nmeros que el usuario desee, posteriormente, en el tercer ciclo for, se comparan mutuamente, uno a uno, para finalmente mandar a imprimir a la pantalla el valor mayor, as como la posicin que guarda dentro del vector.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

101 Veamos su ejecucin.

Figura 4.3. La grfica anterior nos muestra la ejecucin del programa.

Ms adelante veremos una aplicacin especial de arreglo unidimensional o vector, aprenderemos a utilizar las cadenas.

4.1.2. Arreglos bidimensionales o matrices. Estos arreglos son muy similares a los anteriores, la nica diferencia es que estamos trabajando con dos dimensiones o mejor dicho con una matriz. Todas las caractersticas que tienen los vectores, se aplican tambin a las matrices, de aqu que todo lo que se ha trabajado con los vectores se puede aplicar a las matrices. Una descripcin grfica de las matrices puede ser la imagen de abajo, observa que parece una tabla de una hoja de clculo de Excel.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

102 0 0 1 2 3 n-1
ltimo elemento
Primer elemento

m-1

La sintaxis de ste tipo de arreglo es: tipo_dato nombre_estructura[tam_dimensin1][tam_dimensin2]; La sintaxis anterior es exactamente igual a los vectores, lo nico que se agrega es una dimensin que incrementa la capacidad de espacio para guardar datos. Ahora veamos unos ejemplos de stas declaraciones: int matriz[3][4]; char arr_let[3][10]; Estas dos ltimas lneas de cdigo, declaran una matriz que contiene tres filas y cuatro columnas de datos tipo numrico y otra con tres filas y diez columnas de tipo caracter, respectivamente. Grficamente se tendran que representar como sigue:

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

103 0 0 1 2
ltimo Primer elemento

0 0 1 2
Primer elemento

ltimo

El primer grfico slo aceptara nmeros, mientras que el segundo letras. Observemos que la numeracin de los arreglos empieza con el elemento numero 0, puesto que ya se haba dicho que todos los arreglos se inician con ese elemento, en ste caso particular (0,0). Para acceder a otro elemento de las matrices anteriores, se tendr que hacer como si se estuviera accesando a un eje cartesiano. Es decir, si se quiere acceder al valor almacenado en la novena posicin, se tiene que hacer de la siguiente manera (0,8), si desea visualizar el valor almacenado en la posicin decimo quinta, entonces, se tendra que acceder a la posicin (1,4), y as sucesivamente. Al principio es un poco confuso, pero conforme los usamos cotidianamente, se habita a utilizar las posiciones anteriores. Las operaciones para guardar y recuperar datos de una matriz, se realiza de la misma forma que como se hizo con los vectores, lo nico que no hay que perder de vista, es el posicionamiento que se realiza con dos ciclos for. Veamos cmo sera:
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

104 #include <stdio.h> #include <conio.h> #define LIN 3 #define COL 4 void main() { int mat[LIN][COL],i,j,x,y,dato=10; clrscr(); for(i=0;i<LIN;i++) /*Esta lneas inicializan la matriz */ { for(j=0;j<COL;j++) { mat[i][j]=0; } } for(i=0;i<LIN;i++) /* estos bucles for introducen datos a la matriz */ { for(j=0;j<COL;j++) { dato=dato+j; mat[i][j]=dato; } } y=1; for(i=0;i<LIN;i++) /*Estos ciclos, muestra los valores de la matriz */ { for(j=0;j<COL;j++) { x=mat[i][j]; gotoxy(8,5+y);printf("El valor [%d,%d] es: %d",i+1,j+1,x); y+=1;
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

105 } } getch(); } Como se podr observar, el programa anterior nos muestra un claro ejemplo de la utilizacin de las matrices, si comparamos este cdigo con el realizado en el programa del vector, nos daremos cuenta que son muy similares, esto es, porque como ya lo hemos comentado, usan la misma lgica y por ende las mismas instrucciones con un valor de ndice agregado. Analicemos la imagen de la ejecucin:

Figura 4.4. Muestra la ejecucin del programa anterior.

Para no dejar dudas respecto a la manera de trabajar con matrices, hagamos otro programa. El siguiente cdigo nos muestra la manera de obtener las calificaciones de tres parciales para tres materias y sus respectivos promedios.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

106 #include <stdio.h> #include <conio.h> #define MAT 3 #define CAL 3 void main() { int mat[MAT][CAL],i,j,x,y,sum,prom; clrscr(); gotoxy(15,4);printf("PROGRAMA QUE OBTIENE LAS CALIFICACIONES DE UN ESTUDIANTE"); gotoxy(13,5);printf("TRES MATERIAS, TRES PARCIALES POR MATERIA Y PROMEDIO POR MATERIA"); for(i=0;i<MAT;i++) { /*Estas lneas inicializan la matriz */ for(j=0;j<CAL;j++) { mat[i][j]=0; } } y=1; for(i=0;i<MAT;i++) /*todo el for introduce datos a la matriz */ { for(j=0;j<CAL;j++) { gotoxy(2,8+y);printf("Materia %d Calificacin %d:",i+1,j+1); gotoxy(29,8+y);scanf("%d",&mat[i][j]); y+=1; } } x=1; for(i=0;i<MAT;i++) /*Este ciclo, muestra los valores de la matriz */ { y=1;sum=0;prom=0;
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

107 gotoxy(4+x,29);printf("Materia %d",i+1); for(j=0;j<CAL;j++) { gotoxy(2+x,30+y);printf("Parcial %d es: %d",j+1,mat[i][j]); sum=sum+mat[i][j]; prom=sum/CAL; y+=1; } gotoxy(2+x,35);printf("Promedio: %d",prom); x+=24; } getch(); } El resultado del programa lo podemos visualizar en la siguiente grfica.

Figura 4.5. Ejecucin del cdigo. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

108 Como podrn darse cuenta, la grfica es por dems explicita, no hay mucho que decir al respecto, pero, es muy importante copiar el cdigo al compilador y darle una revisada. Considero que ste ser un buen ejercicio para optimizar dicho cdigo.

4.1.3. Arreglos Multidimensionales. A los arreglos de ms de dos dimensiones, se les llama multidimensionales, No es muy comn utilizarlo, ya que en la mayora de los casos dos dimensiones son suficientes. Una representacin grfica de un arreglo multidimensional sera como la imagen de abajo:

Primer elemento

ltimo Elemento

Figura 4.5. Grfica de un arreglo multidimensional de 8X4X3.

La sintaxis para estos arreglos es: Tipo_dato nombre_estructura[tam_dimensin1][tam_dimensin2] [tam_dimensin_n];

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

109 Algunos ejemplos de sta declaracin sera: int numero [4][3][5]; char letras [5][10][3]; Para explicar las anteriores, tendramos que imaginarnos cubos o cajas de cartn apiladas en una bodega, donde cada caja contiene ciertos objetos, en los casos particulares, nmeros o letras. Siguiendo con el ejemplo, para la primera lnea de cdigo tendramos cinco bloques de cuatro filas y tres columnas de cajas, para la segunda lnea de cdigo tendramos, tres bloques de cinco filas y diez columnas de cajas. Bien, entonces en la primera lnea tendramos cinco arreglos matriciales de 4 filas por 3 columnas de nmeros. En la segunda lnea, tendra 3 arreglos matriciales de 5 filas por 10 columnas de letras. Tanto para guardar como para consultar datos de un arreglo multidimensional, se usan tantos ndices como dimensiones existan en la declaracin del arreglo. Vamos a realizar un programa que demuestre todo lo anterior. #include <stdio.h> #include <conio.h> #define LIN 3 #define COL 4 #define MAT 3 void main() { int mat[LIN][COL][MAT],i,j,k,x,y,dato=10; clrscr(); gotoxy(10,4);printf("PROGRAMA QUE MUESTRA EL USO DE UN ARREGLO DE TRES DIMENSIONES");
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

110 for(i=0;i<LIN;i++) { /*Estas lneas inicializan el arreglo */ for(j=0;j<COL;j++) { for(k=0;k<MAT;k++) { mat[i][j][k]=0; } } } for(i=0;i<LIN;i++) /*todo el for introduce datos en el arreglo */ { for(j=0;j<COL;j++) { for(k=0;k<MAT;k++) { dato=dato+1; mat[i][j][k]=dato; } } } y=1; for(i=0;i<LIN;i++) /*Este ciclo, muestra los valores del arreglo */ { for(j=0;j<COL;j++) { for(k=0;k<MAT;k++) { x=mat[i][j][k]; gotoxy(8,5+y);printf("El valor [%d,%d,%d] es: %d",i+1,j+1,k+1,x); y+=1; } } }
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

111 getch(); } Es conveniente recalcar que lo que se hizo es repetir tres veces el arreglo matricial que ya se tena en el programa con la declaracin: #define LIN 3 y #define COL 4 y slo se agreg #define MAT 3, para que hiciera lo anterior. Vamos a ver los resultados de sta operacin:

Figura 4.6. Muestra el funcionamiento de un arreglo de tres dimensiones.

Podemos observar que hay 32 elementos enlistados de los 12 que haba en el programa hecho para una matriz. Y se ratifica que slo se multiplica el arreglo matricial por la nueva dimensin declarada.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

112 4.2. Cadenas de caracteres. Como se mencion, una cadena es un vector que esencialmente es de tipo char, a diferencia de los vectores que pueden ser de cualquier tipo. Adems, las cadenas tienen que declararse con una dimensin ms uno, esto, porque el ltimo caracter que guarda sta es el nulo, una representacin grfica sera: D I S C O \0

Entonces, para declarar una cadena para 5 caracteres, debo de realizarla de la siguiente manera: char palabra [6]; Puesto que ya se dijo que debe ser el tamao de la cadena requerida ms uno. Cuando se asignan datos a una cadena, se debe usar comillas dobles a la cadena que se desea agregar, cuando son ms de dos caracteres. A diferencia de cuando asignamos letra a letra los datos a una cadena, lo hacemos con comillas simples, como se hace a una variable simple tipo char. Veamos un ejemplo de esto: prueba=gorra; asigna la palabra gorra a una cadena llamada prueba, con comillas dobles. pal[0]=g; asigna la letra g a la primera posicin de una cadena llamada pal. La sintaxis de ste tipo de datos sera:

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

113 Tipo_dato nombre_var[tamao+1]; Donde: Tipo_dato, es el tipo de dato de la cadena, en la gran mayora de casos es de tipo char. nombre_var, es el nombre de la variable o siglas para referenciar la cadena. tamao+1, es el tamao de la cadena y como se ha recalcado varias veces debe ser ms uno, para contemplar el valor nulo. Ejemplos: char nombre[26],ape_pat[16],ape_mat[16]; La lnea anterior nos declara tres variables, una para almacenar 25 caracteres ms el nulo, otra para 15 y la ltima tambin con 15 ms el elemento nulo. Hagamos un programa para ejemplificar todo lo anterior. #include <stdio.h> #include <conio.h> #include <string.h> int cant,cant1,cant2,cant3; char nomb[15],paterno[10],materno[10],nomcomp[40]; void main() { clrscr(); gotoxy(13,6);printf("PROGRAMA QUE LEE DATOS PERSONALES Y LOS IMPRIME"); gotoxy(13,10);printf("Teclea tu nombre: [ ]"); gotoxy(32,10);gets(nomb);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

114 gotoxy(13,12);printf("Teclea tu Apellido Paterno: [ ]"); gotoxy(42,12);gets(paterno); gotoxy(13,14);printf("Teclea tu Apellido Materno: [ ]"); gotoxy(42,14);gets(materno); gotoxy(13,18);printf("Tu nombre completo es: %s %s %s",nomb,paterno,materno); cant=strlen(nomb); gotoxy(13,22);printf("La longitud de tu Nombres es %d caracteres",cant); cant1=strlen(paterno); gotoxy(13,23);printf("La longitud de tu Apellido Paterno es %d caracteres",cant1); cant2=strlen(materno); gotoxy(13,24);printf("La longitud de tu Apellido Materno es %d caracteres",cant2); strcat(nomcomp,nomb); strcat(nomcomp,paterno); strcat(nomcomp,materno); cant3=strlen(nomcomp); gotoxy(13,25);printf("El total de caracteres que componen tu nombres es: %d",cant3); getche(); } El programa anterior nos pregunta algunos datos y calcula los caracteres que se introducen en cada variable, posteriormente los imprime y calcula la suma de todos los caracteres tecleados. Una de las primeras diferencias es la incursin de la biblioteca #include <string.h>, la cual provee una serie de instrucciones que pueden administrar las cadenas de caracteres. Otra novedad es la utilizacin de la instruccin gets, la cual captura desde teclado las cadenas de caracteres, es muy similar a scanf, pero gets est especialmente diseada para aceptar cadenas de caracteres. Hacemos uso de varias instrucciones que
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

115 permiten conocer la longitud de una variable cadena, otra de stas permite concatenar varias cadenas en una sola, dichas instrucciones se conocern ms adelante. Cuando uses la funcin gets(), es importante que antepongas a sta la siguiente instruccin que proveer de seguridad a la anterior. fflush(stdout); gets(nombre); Observemos el resultado del programa anterior:

Figura 4.7. Programa que visualiza el uso de cadenas.

Hagamos otro programa para fortalecer ste aprendizaje. #include <stdio.h> #include <conio.h> #include <ctype.h> void main() {
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

116 char cadena[80]; int i; clrscr(); gotoxy(18,4);printf("PROGRAMA QUE CONVIERTE A MAYSCULAS UNA FRASE"); gotoxy(10,6);printf("Introduce una frase en minscula: "); gets(cadena); for(i=0;cadena[i]; i++) { gotoxy(10+i,8);cprintf("%c", toupper(cadena[i])); } getch(); } Este programa captura una frase en letras minsculas y la pasa a maysculas, mediante la instruccin toupper(cadena), observemos adems que se est utilizando otra biblioteca de funciones, en ste caso se est usando ctype, la cual proporciona algunas funciones de manejo de caracteres, por el uso de la instruccin toupper(cadena). Vamos a ver como se ejecuta y el resultado que muestra el programa.

Figura 4.8. Ejecucin del programa.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

117 Cabe mencionar que dicho programa va convirtiendo letra a letra a maysculas la frase tecleada. A continuacin se muestra una tabla de las funciones ms utilizadas en operaciones de cadenas de caracteres. Funcin
strcpy() strcat()

Sintaxis
strcpy(destino, origen)

actividad

strcmp()

strlen() strchr() strcmpi()

strset() strlwr() strupr() strrev() strncat()

Copia el contenido de la cadena origen en la cadena destino. strcat(cadena1,cadena2) Concatena o une dos cadenas, cadena1 debe ser lo suficientemente grande para almacenar ambas. strcmp(cadena1,cadena2) Compara dos cadenas y devuelve 0 si ambas cadenas son iguales, si cadena1 es mayor, devuelve un valor mayor que 0, si es menor, un valor negativo. strlen(cadena) Devuelve la longitud de la cadena. strchr(cadena,caracter) Busca un caracter en una cadena. strcmpi(cadena1,cadena2) Compara dos cadenas sin considerar maysculas o minsculas y devuelve 0 si ambas cadenas son iguales, si cadena1 es mayor, devuelve un valor mayor que 0, si es menor, un valor negativo. strset(cadena,caracter) Cambia los elementos de la cadena por caracter. strlwr(cadena) Regresa la cadena en minsculas. strupr(cadena) Regresa la cadena en maysculas. strrev(cadena) Invierte la cadena, ms no invierte a null. strcat(cadena1,cadena2,cant) Concatena o une de cadena2 la cant de elementos a cadena1, sta debe ser lo suficientemente grande para almacenar la cadena resultante.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

118 Claro que existen muchas otras ms, pero como lo hemos anticipado stas son las ms utilizadas, se te recomienda investigar un poco ms para que logres experimentar con la mayor cantidad de stas. Para finalizar hagamos otro programa, el siguiente unir dos cadenas de caracteres y los pasar a maysculas o minsculas segn se capture. #include <stdio.h> #include <conio.h> #include <string.h> void main() { char frase[80], frase1[80], fraset[160]; int i, letra; clrscr(); gotoxy(15,2);printf("PROGRAMA QUE REALIZA VARIAS OPERACIONES CON CADENAS"); gotoxy(10,5);printf("Teclea una frase (No ms de 80 letras): "); fflush(stdout); gets(frase); gotoxy(10,7);printf("Teclea otra frase (No ms de 80 letras): " ); fflush(stdout); gets(frase1); strcpy(fraset, frase); /*une cad1 a cad3*/ strcat(fraset," "); strcat(fraset,frase1); /*une cad3 a cad3*/ i = 0; letra = 'a' - 'A'; while (fraset[i] != '\O') { if ((fraset[i]>='a') && (fraset[i]<='z')) fraset[i] -= letra; /* Convierte a mayscula */ else if ((fraset[i]>='A') && (fraset[i]<='Z'))
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

119 fraset[i] += letra; /* Convierte a minscula */ i++; } gotoxy(10,10);printf( "La cadena resultante es: %s ", fraset); getch(); } Veamos cmo se ejecuta.

Figura 4.9. Resultado de las operaciones con cadenas.

4.3. Punteros. Los punteros son una de las estructuras de datos ms importantes que tiene el lenguaje C, stos, hacen referencia a una direccin de memoria de la computadora, es decir, cuando usamos punteros estamos trabajando con direccionamiento fsico de la memoria de la computadora. El puntero apunta a la direccin de almacenamiento de una variable, siendo stas variables de cualquier tipo existente en el lenguaje de programacin, tambin es importante comentar que para un entendimiento apropiado de stos, es necesario poner especial atencin a la forma de trabajar con ellos, pues, los errores generados con los anteriores, son los ms difciles de encontrar y de corregir.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

120 Algunas caractersticas de los punteros son: Son esenciales para algunas operaciones que se pueden realizar en los programas de computadora, uno de ellos es, la manipulacin de la memoria de las computadoras. Se utilizan para los pasos de parmetros en las funciones. Son muy importantes para el uso con arreglos y estructuras. Con los punteros se puede hacer uso de la memoria dinmica del lenguaje de programacin. Generan cdigo compacto y potente. Para empezar a entender cmo funcionan los punteros, es necesario conocer cmo funcionan las variables normales; cuando tenemos la siguiente lnea de cdigo, scanf(%d,&num); lo que estamos diciendo al sistema es que almacene en la variable num un valor tipo entero, pero entonces, que hace el & en todo esto, pues bien, el & es la parte de la variable que mantiene la direccin fsica de esa memoria, es decir, el & es el apuntador al valor de la variable. Ahora para declarar una variable puntero en lenguaje C, es como sigue: tipo_dato *variable_puntero; Algunos ejemplos de stos son: int *punt; char *pun_letra; etc. Tambin podemos apuntar a un puntero, para hacerlo se tiene que hacer la siguiente declaracin: int **puntpunt; char **letra_dos;

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

121 Considerando una declaracin como la de abajo, una grfica para representarlos sera: Direccin num FFF4 FFF5 FFF6 FFF7 FFF8 FFF9 Contenido 100 200 300 500 1000 1100 *num

Figura 4.10. Representacin grfica de una variable tipo puntero.

Mediante *num, podemos acceder al contenido de la variable apuntada, mientras que con num, accedemos a la direccin de localizacin de la variable. Hagamos un ejercicio para comprobar todo lo anterior. Primero veamos cmo obtener la direccin de almacenamiento de una variable comn, es decir, de una variable que directamente no es declarada como puntero. #include <stdio.h> #include <conio.h> void main() {
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

122 int num; clrscr(); gotoxy(7,4);printf("PROGRAMA QUE MUESTRA LA DIRECCIN DE ALMACENAMIENTO DE UNA VARIABLE"); gotoxy(12,6);printf("Dame un nmero: "); gotoxy(30,6);scanf("%d",&num); gotoxy(12,8);printf("La direccin de almacenamiento de num es: %p ", &num); gotoxy(12,10);printf("Pero el valor de num es: %d ",num); getch(); } Como podemos observar, para obtener la direccin de almacenamiento de una variable se puede hacer mediante la utilizacin del formato de salida de puntero %p. Observemos la ejecucin del programa.

Figura 4.11. Muestra la direccin de almacenamiento de la variable num.

Ahora cmo sera con punteros: #include <stdio.h> #include <conio.h>

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

123 void main() { int num; int *puntero; clrscr(); gotoxy(10,4);printf("PROGRAMA QUE MUESTRA LA DIRECCIN DE UNA VARIABLE PUNTERO"); gotoxy(10,6);printf("Dame un nmero: "); gotoxy(28,6);scanf("%d",&num); puntero=&num; gotoxy(10,8);printf("La direccin de almacenamiento a la que apunta el puntero es: %p ",puntero); gotoxy(10,10);printf("Pero el valor al que se apunta es: %d",*puntero); getch(); } Este ltimo programa es similar al anterior, pero en ste se utiliza una variable tipo puntero, la cual tiene que ser declarada del mismo tipo de variable a la que apuntar. Primero hay que sealar que la direccin de la variable num se le pasa a la variable tipo puntero en la lnea puntero=&num; a partir de esa igualdad, la variable tipo puntero es la encargada de mostrar tanto la direccin de almacenamiento, as como el valor de la variable apuntada. Esto se hace en las lneas: printf("La direccin de almacenamiento a la que apunta el puntero es: %p ",puntero); printf("Pero el valor al que se apunta es: %d",*puntero); Realicemos un programa que ejemplifique un poco ms el uso de los punteros. #include <stdio.h> #include <conio.h> int suma( int *a, int b ) {
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

124 int c; c = *a + b; return c; } void main() { int var1, var2, resultado; clrscr(); gotoxy(8,4);printf("PROGRAMA QUE MUESTRA UNO DE LOS USOS DE LOS PUNTEROS"); gotoxy(10,8);printf("Dame un nmero: "); gotoxy(26,8);scanf("%d",&var1); gotoxy(10,10);printf("Dame otro nmero: "); gotoxy(28,10);scanf("%d",&var2); resultado = suma(&var1, var2); gotoxy(10,14);printf( "La suma es: %i y el primer valor es: %i\n", resultado, var1 ); getch(); } El programa que acabamos de realizar hace uso de las funciones de paso de parmetros y punteros, mediante la funcin resultado() realiza la suma de los valores capturados en la funcin principal y devuelve dicho resultado para despus imprimirlos en pantalla. En la lnea resultado=suma(&var1, var2); se recibe el resultado de la suma de los valores de var2 y la direccin de memoria de var1, mediante &var1. En la funcin int suma( int *a, int b ), se cambia la direccin de &var1 por su contenido, mediante *a y es as como ya se tienen ambos valores de las variables.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

125 Los punteros y las funciones son una gran herramienta del lenguaje C. Veamos que sucede con la ejecucin del programa.

Figura 4.12. Muestra el funcionamiento del programa.

Como podemos ver en la ejecucin del programa, se obtiene la suma de los valores capturados, as como el valor del primer dato obtenido.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

126 Preguntas Frecuentes Cuarta Unidad

1.- Qu son los arreglos? Es un tipo de datos estructurado que provee al lenguaje de cierta capacidad de agrupamiento de los datos en una sola variable. 2.- Cuntos tipos de arreglos hay? Arreglos unidimensionales vectores. Arreglos Bidimensionales matrices. Arreglos multidimensionales. 3.- Qu son las cadenas? Una cadena es un vector que esencialmente es de tipo char, a diferencia de los vectores que pueden ser de cualquier tipo. 4.- Cul es la sintaxis de declaracin de un arreglo unidimensional? tipo_dato nom_var[tamo]; 5.- Escriba la sintaxis de un arreglo multidimensional. tipo_dato nom_var[tamao1][tamao2] [tamao_n] 6.- Qu son los punteros? Los punteros son una de las estructuras de datos ms importantes del lenguaje C, stos, hacen referencia a una direccin de memoria de la computadora, es decir, cuando usamos punteros estamos trabajando con direccionamiento fsico de la memoria de la computadora.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

127 7.- Cmo es la sintaxis de un puntero?, d un ejemplo. tipo_dato *nom_puntero; int *puntero; 8.- Escriba un ejemplo de declaracin de arreglo multidimensional. int tabla[3][4][2];

9.- Mencione algunas caractersticas de los punteros. Son esenciales para algunas operaciones que se pueden realizar en los programas de computadora, uno de ellos es, la manipulacin de la memoria de las computadoras. Se utilizan para los pasos de parmetros en las funciones. Son muy importantes para el uso con arreglos y estructuras. Con los punteros se puede hacer uso de la memoria dinmica del lenguaje de programacin. Generan cdigo compacto y potente. 10.- Por qu es necesario utilizar las estructuras de datos? Las estructuras de datos dan gran potencia y funcionalidad a los programas de computadoras, dado que proveen una forma de agrupar informacin considerada como un solo tem, contra los datos que son operados en forma individual.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

128 Mapa Conceptual Cuarta Unidad

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

129 Actividades de Trabajo Cuarta unidad

1.- Realizar un programa que pida un conjunto de valores y los ordene de menor a mayor, utilizando algn mtodo de ordenamiento definido. Comprobar su funcionamiento. Una posible solucin sera como sigue: /* Programa para ordenar un conjunto de nmeros enteros*/ #include <stdio.h> #include <conio.h> #define TAM 7 void main() { int vector[TAM]; int j, i, y, temp; clrscr(); gotoxy(8,4);printf("PROGRAMA QUE ORDENA SIETE NMEROS ENTEROS"); gotoxy(12,7);printf("Ingresa los %d valores para ordenar: ", TAM); for(i=0;i<TAM;i++) { gotoxy(12,9+i);printf("valor %d: ", i+1); gotoxy(22,9+i);scanf("%d", &vector[i]); } /* se aplica el algoritmo de la burbuja para ordenar los valores */ for(i=0;i<(TAM-1);i++) {
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

130 for (j=i+1;j<TAM;j++) { if(vector[j]<vector[i]) { temp=vector[j]; vector[j]=vector[i]; vector[i]=temp; } } } gotoxy(12,20);printf("El grupo de valores ordenado es: "); y=0; for(i=0;i<TAM;i++) { gotoxy(12+y,22);printf("%d ", vector[i]); y+=5; } getch(); }

Figura 4.15. Programa que ordena un conjunto de nmeros. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

131 Cuestionario de Autoevaluacin Cuarta Unidad En sta ocasin considero mucho ms valioso el poder resolver otro problema mediante el uso de un programa. Basndose en el programa de ordenamiento de nmeros, de la pgina anterior, modificar ste para que se puedan ordenar palabras y no tan slo nmeros.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

132 Lecturas Obligatorias Cuarta Unidad

Kernighan, Brian W., Ritchie Dennis M., El lenguaje de programacin C. Segunda edicin, Prentice-Hall Hispanoamericana S.A., 1991, Captulos 5 y 6. Pea Basurto, Marco A., Cela Espn, Jos M., Introduccin a la programacin en C. Primera Edicin, Ediciones UPC, septiembre de 2000. Barcelona, Espaa...Captulos 7 y 9.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

133 QUINTA UNIDAD ESTRUCTURAS, MEMORIA DINMICA Y ARCHIVOS.

Objetivo particular Al termino de sta unidad, el alumno realizar programas para computadora con almacenamiento permanente de datos, utilizando para ello estructuras y asignacin dinmica de memoria.

5.1. Estructuras. Como lo vimos en el captulo anterior, una estructura de datos es una coleccin de elementos de un mismo tipo que se comportan como un elemento nico, pues bien, el tipo de estructura que vamos a manejar en ste apartado tiene que ver con una agrupacin de estructuras de cadenas, que muchas veces no son del mismo tipo, es decir, las estructuras son un contenedor donde se depositarn los arreglos cadenas de una misma unidad de informacin. Por ejemplo, cuando queremos agrupar todos los datos de una persona, tenemos datos personales como nombre, direccin, telfono, etc., bien si agrupamos todos los datos anteriormente mencionados, tendremos una estructura, stas son muy utilizadas para guardar datos de una sola caracterstica en un archivo, ya sea de tipo texto o binario. La sintaxis de declaracin de estructura es la siguiente: struct nom_estructura {
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

134 Campos_estructura; /*los campos pueden ser de cualquier tipo definido*/ }; El punto y coma (;) es muy importante, tener cuidado de no olvidarlo. Un ejemplo de sta sera: struct directorio_amigos { char nom[25]; char ape_pat[20]; char ape_mat[20]; int edad; char sexo; }; En ste momento hemos declarado la estructura, pero existe una problemtica, todava no la podemos llamar desde alguna rutina, es necesario crear una variable para acceder a sta. Para hacerlo tenemos que teclear lo siguiente: struct directorio_amigos agenda; Ahora s, ya estamos en posibilidad de interactuar con la estructura, veamos como es, si deseo acceder al campo nom de la estructura, se debe hacer de la siguiente forma: agenda.nom, si queremos accesar al campo edad, agenda.edad, as para cada uno de los campos de la estructura. Para omitir un paso se podra hacer de la siguiente manera: struct directorio_amigos { char nom[25];
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

135 char ape_pat[20]; char ape_mat[20]; int edad; char sexo; } agenda; Como vemos se agrega la variable a la estructura, un poco antes de colocar el punto y coma (;). Adems, se pueden anidar las estructuras para hacer un poco ms estructurado nuestra programacin, el siguiente sera un ejemplo de esto. struct escolaridad { int grado; char grupo; char nom_esc[30]; }; struct directorio_amigos { char nom[25]; char ape_pat[20]; char ape_mat[20]; int edad; char sexo; struct escolaridad escuela; }agenda; Para acceder a algn campo de la estructura escolaridad, se tendra que hacer de la siguiente manera: agenda.escuela.grado; en el caso que se quisiera conocer los valores de grado.
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

136 Agenda.escuela.grupo; para conocer el grupo. Agenda.escuela.nom_esc; para conocer el nombre de la escuela. As tantos campos tuviera la estructura anidada. Hagamos un ejercicio para comprobar el uso de estructuras. #include <stdio.h> #include <conio.h> struct datos { char nombre[20]; char ape_pat[20]; int edad; }; struct gpo_pers { int num_pers; struct datos persona[100]; }; void main() { int i; struct gpo_pers tabla; clrscr(); gotoxy(18,3);printf("PROGRAMA QUE DEMUESTRA EL USO DE ESTRUCTURAS"); gotoxy(5,5);printf( "Dame el nmero de personas para agregar: " ); gotoxy(46,5);scanf("%d",&tabla.num_pers); for (i=0;i<tabla.num_pers;i++) { gotoxy(2,7+i);printf("Dame tu Nombre: "); fflush(stdin);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

137 gets(tabla.persona[i].nombre); gotoxy(32,7+i);printf("Dame tu Apellido: "); fflush(stdin); gets(tabla.persona[i].ape_pat); gotoxy(62,7+i);printf("Dame tu edad: "); fflush(stdin); scanf("%ld",&tabla.persona[i].edad); } gotoxy(10,15);printf("El grupo de registrados es: "); for (i=0;i<tabla.num_pers;i++) { gotoxy(2,17+i);printf(tabla.persona[i].nombre); gotoxy(26,17+i);printf(tabla.persona[i].ape_pat); gotoxy(42,17+i);printf("%d",tabla.persona[i].edad); } getch(); } Analicen el programa para comprobar si lo expresado anteriormente es correcto. Veamos cmo se ejecuta.

Figura 5.1. Muestra el funcionamiento de las estructuras. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

138 5.2. Asignacin dinmica de memoria. Para la asignacin dinmica de memoria se utilizan bsicamente dos instrucciones; malloc() y fre(). Estas tienen la encomienda de asignar memoria y liberarla respectivamente. Hasta ahora todo lo que hemos hecho es esttico, es decir, hemos declarado cuantos espacios para las variables vamos a utilizar, esto no es esencialmente benfico, pues, muchas veces no vamos a saber cuantos nombres van a ingresar en una agenda de datos, ni cuantos amigos tendr para cierto tiempo, en fin. Las soluciones implementadas fallaran en un momento dado. Para evitar esto, es necesario utilizar la asignacin dinmica de memoria, es decir, proveer al sistema o programa de una funcin que me vaya proporcionando memoria conforme se va necesitando para no ver afectada la funcionalidad de dicho programa. Una de las caractersticas que tiene la funcin malloc(), es que, va suministrando de memoria a las estructuras que lo van solicitando, la limitante de sta funcin es el total de memoria existente en las computadoras. Adems, cuando ya no se utiliza la memoria reservada, es necesario liberarla mediante la funcin free(). Si se utilizan adecuadamente stas dos funciones, nunca se tendr problemas por el manejo de la memoria. La sintaxis para la declaracin de la funcin malloc(), es como sigue: puntero = (tipo_variable *) malloc (cant_bytes_a_reservar); Donde:

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

139 puntero, es una variable tipo puntero que almacenar la direccin del bloque de memoria reservada. (tipo_variable *), es un molde o contenedor, sta lo convierte en un puntero del mismo tipo que la variable. cant_bytes_a_reservar, es la cantidad de bytes de memoria a reservar. Veamos un ejemplo de sta funcin: texto = (char *) malloc (1000); Para liberar la memoria reservada con malloc(), se utiliza la funcin free(), de la siguiente manera: free(texto); Anula la posesin de la memoria, hecha para la variable texto. Vamos a realizar un ejemplo de sta funcin: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <alloc.h> void main() { int cantbyte; char *texto; clrscr(); gotoxy(15,8);printf("PROGRAMA QUE RESERVA MEMORIA Y LUEGO LA LIBERA"); gotoxy(20,10);printf("Cuntos bytes deseas reservar: "); gotoxy(54,10);scanf("%d",&cantbyte); texto = (char *) malloc(cantbyte);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

140 /* Para comprobar si ha tenido xito la operacin */ if(texto) { gotoxy(10,14);printf("La memoria ha sido reservada: %i bytes = %i kbytes ",cantbyte,cantbyte/1024); gotoxy(20,16);printf("El bloque reservado empieza en la direccin: %p", texto); /* Para liberar la memoria reservada */ free(texto); } else { gotoxy(20,14);printf("No hay memoria suficiente para reservar"); } getch(); } Como se podrn dar cuenta se necesitan otras libreras del preprocesador, tales como: stdlib.h, alloc.h. El programa pide la cantidad de bytes que desea reservar y en la instruccin texto = (char *) malloc(cantbyte); se lleva a cabo dicho apartado de memoria. La siguiente grfica muestra como se lleva a cabo la ejecucin del programa.

Figura 5.2. Visualiza el resultado del programa. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

141 5.3. Archivos. Hasta ahora todo lo que hemos hecho ha sido en tiempo de ejecucin, es decir, una vez que el programa termina, los datos se volatizan, se pierden y no hay manera de recuperarlos, para que no suceda esto, todos los lenguajes de programacin proveen de ciertas estructuras que conservan dichos datos, tales estructuras son los llamadas archivos, el lenguaje C, no es la excepcin y ste tiene una gran capacidad de manejo de archivos. Mediante los archivos se guarda cierta parte de informacin y para que permanezca es llevada al disco duro de la computadora, as, en futuras actividades se recuperan, se operan y se vuelvan a guardar, todo esto para mantener actualizada la informacin que algunos programas generan y que para algunas personas es de suma importancia. El lenguaje C genera dos tipos de archivos: archivos binarios y archivos texto. En los primeros, la informacin se guarda como un conjunto de bits agrupados en ocho, llamados bytes. En los segundos, la informacin se guarda de tal manera que puede ser visualizada y entendida por los programadores, pues, contienen letras y nmeros legibles. Todos los tipos de archivos tienen una marca que identifica la finalizacin de los mismos, EOF (End Of File), sta instruccin marca la finalizacin de un archivo. Los archivos son accedidos tanto para escritura como para lectura de manera secuencial, no pueden ser consultados de manera aleatoria, es decir, los elementos que componen un archivo son consultados uno a uno hasta encontrar el elemento deseado, una vez que se tiene, se despliega, pero el ciclo de bsqueda se tiene que terminar hasta encontrar el EOF.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

142 Otra caracterstica de los archivos es que utiliza una variable del tipo sistema operativo, es decir, utiliza una variable que conoce el sector y pista del disco duro que contiene los datos del archivo. Dicha instruccin es: FILE, la cual no puede ser utilizada como variable en algn programa de computadora, pero, lo que si podemos hacer es, declarar una variable que apunte a sta variable y sta ltima si puede ser utilizada por el lenguaje de programacin. Un ejemplo de sta puede ser la siguiente declaracin: FILE *ptro_arch; Donde: Ptro_arch, apunta a la direccin de localizacin de la estructura que contiene informacin del archivo, no el archivo mismo, pero tiene que ser inicializada con la funcin fopen(). Cada vez que trabajemos con archivos, se tienen que hacer las tres operaciones siguientes: Abrir el archivo, ya sea para lectura o escritura. Escribir o leer datos de stos archivos. Cerrar el archivo abierto.

5.3.1. Abriendo y cerrando archivos. Esta es la primera de las actividades a realizar para el manejo de archivos, para hacerlo usamos la instruccin fopen() de la siguiente manera:

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

143 Primero declaramos la variable que apuntar a la estructura del archivo a crear. FILE *var_ptro; Posteriormente con la instruccin fopen(), asignamos a la variable antes declara la direccin de ubicacin del archivo y el modo de apertura: var_ptro = fopen(nombre_archivo , modo_acceso); Donde: var_ptro, es una variable puntero tipo FILE que tendr la direccin de la estructura de archivo. nombre_archivo, contiene una cadena de caracteres con el nombre fsico del archivo, un nombre con el que se localizar en nuestro disco duro. modo_acceso, es una cadena de caracteres que indica que actividad realizaremos con el archivo abierto. Un ejemplo de las anteriores sera: FILE *ptro_arch; .. Ptro_arch = fopen(prueba.txt,r); Lo anterior indica al compilador del lenguaje C que ha sido declarada la variable tipo FILE ptro_arch, para que apunte a la estructura del archivo prueba.txt que se abrir para lectura (r): Para cerrar el archivo anteriormente abierto se utiliza la instruccin fclose(), una vez que se termin de leer todos los datos necesarios, es pertinente cerrar dicho archivo. La instruccin fclose, tiene la siguiente sintaxis: fclose(var_ptro);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

144 para cerra el archivo abierto en las lneas de arriba, haramos lo siguiente: fclose(ptro_arch); En la tabla de abajo se muestran las formas que puede tomar modo_acceso, para abrir los archivos:

Modo de acceso Descripcin r Abre archivo existente para lectura. w Abre archivo nuevo para escritura, si existe lo sobreescribe. a Abre un archivo existente para aadir informacin. Los nuevos datos se agregarn al final de los existentes. r+ Abre un archivo existente, tanto para lectura como para escritura. w+ Abre un archivo nuevo tanto para lectura como para escritura, si existe, lo elimina y crea uno nuevo. a+ Abre un archivo existente tanto para lectura como para aadir, si el archivo no existe, lo crea. b Abre un archivo en modo binario. t Abre un archivo en modo texto. + Modificador para archivos en modo lectura/escritura.
Figura 5.3. Tabla de modos de acceso a archivos.

Es muy importante asegurarse que dicho archivo se haya abierto de manera correcta, para hacer esto se usa la siguiente rutina. if(ptro_arch==null)
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

145 { printf(No se puede abrir archivo.); exit(1); } La funcin condicionante, pregunta si el puntero que apunta al archivo no contiene nada, de ser afirmativo, saldr de la funcin que manda llamar al archivo y mostrar un mensaje no se puede abrir archivo. As mismo, para hacer un recorrido en un archivo, es imprescindible contemplar el fin de ste, es decir, estar preparado para cuando nuestra bsqueda llegu al ltimo registro, en caso de no contemplar esto, puede fallar el funcionamiento de nuestro programa y mandar muchos errores. Para hacer lo anterior, se utiliza la siguiente rutina: while(!feof(ptro_arch)) De sta forma aseguramos que mientras no se llegue al final del archivo se pueden realizar las operaciones que se desee.

5.3.2. Leyendo y escribiendo en archivos. Para leer y escribir en archivos, el lenguaje C cuenta con varias instrucciones importantes, de las ms utilizadas tenemos: fread(), fwrite(), fprintf() y fscanf(). La instruccin fwrite() nos permite guardar datos en los archivos, sta tiene la siguiente sintaxis: fwrite(direccin_dato, tamao_dato, cantidad_dato, ptro_arch); Donde:
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

146 direccin_dato, lugar o estructura que contiene los datos a guardar en el archivo. tamao_dato, cantidad de bytes o tamao de la estructura, normalmente usamos el formato sizeof(estructura, dato tipo de dato). cantidad_dato, se refiere a la cantidad de registros o datos a grabar, generalmente es uno. ptro_arch, variable que apunta a la direccin de localizacin de archivo. Un ejemplo de sta sera: fwrite(registro, sizeof(registro), 1, archivo); De la anterior funcin podemos comentar que: registro, es una estructura que contiene varios arreglos. sizeof(registro), calcula la cantidad de bytes necesarios para guardar la estructura en el archivo. 1, cantidad de registros a grabar durante la ejecucin de ese proceso. archivo, variable puntero que sealiza a la estructura del archivo creada. La instruccin fread() nos permite leer datos de un archivo, sta tiene la sintaxis: fread(direccin_dato, tamao_dato, cantidad_dato, ptro_arch); Como podemos darnos cuenta, la funcin anterior tiene los mismos argumentos que su compaera, la instruccin fwrite(). Para entender su funcionamiento hagamos un programa: #include <stdio.h> #include <conio.h> #include <string.h>

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

147 struct { char nombre[20]; char ape_pat[20]; char tel[15]; } agenda; void main() { int i=0; clrscr(); FILE *archivo; archivo = fopen( "nombres.txt", "a" ); gotoxy(12,3);printf("PROGRAMA QUE MUESTRA EL USO DE fwrite() Y fread()"); gotoxy(14,4);printf("Pulsa ENTER en el campo nombre para terminar..."); do { gotoxy(10,6+i);printf( "Dame tu Nombre: " ); fflush(stdout); gets(agenda.nombre); if (strcmp(agenda.nombre,"")) { gotoxy(10,7+i);printf( "Apellido Paterno: " ); fflush(stdout); gets(agenda.ape_pat); gotoxy(10,8+i);printf( "Nmero Telefnico: " ); fflush(stdout); gets(agenda.tel); fwrite(&agenda, sizeof(agenda), 1, archivo ); } i+=3; }while (strcmp(agenda.nombre,"")!=0); fclose(archivo);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

148 archivo=fopen("nombres.txt","r"); clrscr(); i=0; gotoxy(10,3);printf("La lista de registrados es: "); while (!feof(archivo)) { if(fread(&agenda, sizeof(agenda), 1, archivo)) { gotoxy(15,5+i);printf( "Nombre: %s\n", agenda.nombre ); gotoxy(15,6+i);printf( "Apellido Paterno: %s\n", agenda.ape_pat); gotoxy(15,7+i);printf( "Nmero Telefnico: %s\n", agenda.tel); } i+=3; } fclose(archivo); getch(); } El programa anterior nos pide ingresar algunos datos tales como nombre, apellido paterno y nmero telefnico, ste se cicla hasta que el usuario pulsa la tecla ENTER, posteriormente nos imprime en pantalla los elementos ingresados, noten que nuestro archivo va agregando datos despus del ltimo registro, si existen. Por favor revisen el cdigo del programa y teclenlo en el compilador para verificar su funcionamiento. Lo importante de ste es que en el directorio por default, es decir, la carpeta donde se encuentre el compilador del lenguaje C, es donde se crear el archivo de datos, propsito final de ste captulo. Por ltimo veamos su funcionamiento:

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

149

Figura 5.4. Grfica que muestra la captura de los datos a guardar.

Figura 5.5. Muestra la lista de nombres ingresados al archivo.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

150

Figura 5.6. En sta imagen se muestra la ubicacin de creacin del archivo de datos generado por el programa anterior.

En la anterior imagen podemos darnos cuenta que se genera un archivo tipo texto, como recordarn se crea un archivo de texto con las instrucciones de creacin de archivos. Para continuar con ste tema, vamos a utilizar el segundo par de instrucciones, fscanf() y fprintf(). Las funciones anteriores tienen el mismo efecto que las instrucciones scanf() y printf(), respectivamente, dado que scanf(), permite leer desde el teclado un valor y asignarlo a una variable, mientras que printf(), imprime en la pantalla los valores de las variables.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

151 En resumen, cuando queramos leer un dato existente en un archivo, tenemos que utilizar la instruccin fscanf() y cuando queramos escribir en dicho archivo, tendremos que utilizar la funcin fprintf(). La sintaxis de stas es como sigue: fscanf(FILE *ptr_arch, const char *format, lista_var); Donde: FILE *ptr_arch, es la variable que apunta a la estructura que va a formar al archivo. const char *format, corresponde al formato de tipo de dato que se espera. lista_var, contiene las direcciones de las variables que componen a la estructura. fprintf(FILE *ptr_arch, const char *format, lista_var); Es muy similar a la anterior, pero lista_var, se compone de los datos de las variables que componen la estructura. Vamos a hacer un ejemplo de las anteriores. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #define CIERTO 1 /* Crear un archivo de datos conteniendo registros de clientes*/ typedef struct
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

152 { int mes; int dia; int anno; } fecha; typedef struct { char nombre [80]; char calle [80]; char ciudad [80]; int cuen_no; /*entero positivo*/ char cuent_tipo; /*(al dia), o (retrasada), o D (delincuente)*/ float anteriorsaldo; /* (cantidad no negativa)*/ float nuevosaldo; /* (cantidad no negativa)*/ float pago; /* (cantidad no negativa)*/ /*struct*/ fecha ultimopago; } registro; FILE *fpt; /*puntero a la estructura predefinida FILE */

void main() { int indicador = CIERTO; /*declaracion de variable*/ registro cliente; /*declaracion de variable estructura*/ registro leerpantalla (registro cliente); /* declaracion de funcion*/ void escribirarchivo (registro cliente); /* declaracion de funcion*/ clrscr(); /* abrir un archivo nuevo solo para escitura*/ fpt=fopen ("registro.dat" , "w"); /*introducir datos y asignar variables iniciales*/ printf ("SISTEMA DE CUENTAS DE CLIENTES - INICIALIZACION \n\n");
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

153 printf ("Introduzca la fecha actual (mm/dd/aaaa): \n "); printf("Mes:"); scanf("%d",&cliente.ultimopago.mes); printf("Dia:"); scanf("%d",&cliente.ultimopago.dia); printf("Ao:"); scanf("%d",&cliente.ultimopago.anno); cliente.nuevosaldo=0; cliente.pago=0; cliente.cuent_tipo='C'; /*Bucle principal*/ while (indicador) { /* introducir el nombre de cliente y escribirlo en el archivo*/ printf ("\nNOMBRE (introducir \FIN\ para terminar): "); scanf ("%s[^\n]",&cliente.nombre); fprintf (fpt, "\n%s\n", cliente.nombre); /* comprobacion de condicion de parada*/ if (strcmpi(cliente.nombre, "FIN") ==0) break; else { cliente=leerpantalla(cliente); escribirarchivo(cliente); } } fclose (fpt); getch(); } registro leerpantalla (registro cliente) /* leer el resto de los datos*/ { printf ("calle: "); fflush(stdin); scanf ("%s[^\n]",&cliente.calle);
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

154 printf ("ciudad: "); fflush(stdin); scanf ("%s[^\n]",&cliente.ciudad); printf ("cuenta numero: "); fflush(stdin); scanf ("%c[^\n]",&cliente.cuent_tipo); printf ("Saldo actual: "); fflush(stdin); scanf ("%f[^\n]",&cliente.anteriorsaldo); return (cliente); } void escribirarchivo(registro cliente) /* escribir el resto de los datos al archivo*/ { fprintf (fpt,"%s\n", cliente.calle ); fprintf (fpt,"%s\n", cliente.ciudad ); fprintf (fpt,"%d\n", cliente.cuen_no ); fprintf (fpt,"%c\n", cliente.cuent_tipo ); fprintf (fpt,"%.2f\n", cliente.anteriorsaldo); fprintf (fpt,"%.2f\n", cliente.nuevosaldo ); fprintf (fpt,"%.2f\n", cliente.pago ); fprintf (fpt,"%d/%d/%d\n", cliente.ultimopago.mes,cliente.ultimopago.dia, cliente.ultimopago.anno); return; } El ejemplo anterior nos muestra el uso de las instrucciones antes mencionadas. Se invita a copiar dicho programa y revisarlo con el compilador del lenguaje C. Veamos cmo se ejecuta ste ltimo:

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

155

Figura 5.7. En sta se muestra la captura de datos del programa anterior.

Figura 5.8. Muestra la creacin exitosa del archivo de datos registro.dat. PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

156

Figura 5.9. Esta imagen nos muestra el contenido del archivo registro.dat.

Cabe mencionar que el programa slo pide datos desde el teclado y los guarda en el archivo registro.dat, no hemos realizado un proceso de recuperacin o consulta de los mismos, dichos procesos se dejarn para el estudiante. Tambin es importante mencionar que el archivo registro.dat, puede tener la extensin registro.txt, para que sea ms simple la visualizacin del contenido.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

157

5.3.3. Otras funciones. Para optimizar las bsquedas en los archivos es importante conocer dos funciones que nos ayudan a posicionarnos en un punto registro de dicho archivo, stas funciones son: fseek() y ftell(). La funcin fseek() nos permite situarnos en un registro determinado del archivo, sta utiliza los valores que contiene la variable puntero declarada con antelacin para conocer la posicin de la estructura del archivo. Con sta podemos posicionar la bsqueda en un registro o dato particular. La sintaxis de la funcin fseek() es: Fseek(FILE *ptro_arch, long desplazamiento, int modo); Donde: *ptro_arch, es una variable puntero tipo FILE que apunta al archivo con el que queremos trabajar. desplazamiento, es una variable que indica las posiciones o bytes a desplazar en el archivo, depende de la declaracin de modo. modo, existen tres variantes de sta, a continuacin se detallan. SEEK_SET, se hace un recorrido del archivo con la variable puntero desde el principio. SEEK_CUR, se hace un recorrido desde la posicin actual del puntero. SEEK_END, se hace un recorrido iniciando desde el final del archivo. La forma de declaracin de las anteriores es: #define SEEK_SET 0
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

158 #define SEEK_CUR 1 #define SEEK_END 2 Es importante comentar que las declaraciones anteriores dependen de la versin de compilador que se tenga. La funcin ftell() es un apoyo para la funcin fseek(), dado que proporciona la posicin actual dentro de un archivo y el valor generado por ftell() es usado por fseek( ) para conocer dicha posicin del puntero dentro del archivo. Su sintaxis es: ftell(FILE *ptro_arch); ftell(), devuelve un valor entero que marca la posicin del puntero en un momento dado. Para finalizar vamos a realizar un programa que guarde artculos, tal como un inventario y posteriormente se puedan consultar. // Una base de datos sencilla de lista de articulos #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define TAM 100 struct tipo_lista { char clave[10]; char descripc[40]; char precio[10]; char stock[5];
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

159 } lista[TAM]; char arch[20]="tienda.dat"; int menu(void); void inicializa_lista(void), intro(void); void guardar(void), guardar(void); void cargar(void), mostrar(void); void main(void) { char eleccion; inicializa_lista(); for(;;) { eleccion = menu(); switch(eleccion) { case 'i': intro(); break; case 'm': mostrar(); break; case 'g': guardar(); break; case 'c': cargar(); break; case 't': exit(0); } // switch } // for } // Inicializar la lista void inicializa_lista(void) { register int t; for(t=0; t<TAM; t++)
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

160 *lista[t].descripc = '\0'; // una longitud de nombre igual a cero significa vacio } // ***************** Introducir los nombres en la lista ***************** void intro(void) { register int i; for(i=0; i<TAM; i++) if(!*lista[i].descripc) break; if(i==TAM) { printf("La lista est llena\n"); return; } printf("Clave: "); gets(lista[i].clave); printf("Descripcin: "); gets(lista[i].descripc); printf("Precio: "); gets(lista[i].precio); printf("Stock: "); gets(lista[i].stock); } // ***************** muestra la lista ***************** void mostrar(void) { clrscr(); register int t; for(t=0; t<TAM; t++) { if(*lista[t].descripc) { printf("Clave: %s\n", lista[t].clave); printf("Descripcin: %s\n", lista[t].descripc); printf("Precio: $%s\n", lista[t].precio); printf("Stock: %s\n", lista[t].stock); printf("\n");
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

161 } // if } // for getch(); } // ***************** Guardar la lista ***************** void guardar(void) { char s[2]; FILE *fp; register int i; if((fp=fopen(arch, "wb"))==NULL) { printf("No se puede abrir el archivo\n"); gets(s); return; } for(i=0; i<TAM; i++) if(*lista[i].descripc) if(fwrite(&lista[i], sizeof(struct tipo_lista), 1, fp)!=1) printf("Error de escritura en el archivo\n"); printf("Guardando..."); getch(); fclose(fp); } // ***************** cargar el archivo ***************** void cargar(void) { clrscr(); FILE *fp; register int i; if((fp=fopen(arch, "rb"))==NULL) { printf("No se puede abrir el archivo\n");
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

162 getch(); return; } inicializa_lista(); printf("Cargando..."); for(i=0; i<TAM; i++) if(fread(&lista[i], sizeof(struct tipo_lista), 1, fp)!=1) { if(feof(fp)) return; printf("error en la lectura del archivo\n"); getch(); } fclose(fp); } // ***************** toma una seleccion del men ***************** menu(void) { char s[80]; do { clrscr(); gotoxy(18,2);printf("PROGRAMA MANEJA ARCHIVOS DE ARTICULOS"); gotoxy(15,3);printf("Para agregar datos cargar primero el archivo"); gotoxy(33,7); printf("(I)ntroducir\n"); gotoxy(33,9); printf("(M)ostrar\n"); gotoxy(33,11); printf("(C)argar\n"); gotoxy(33,13); printf("(G)uardar\n"); gotoxy(33,15); printf("(T)erminar\n\n"); gotoxy(40,18); printf("elija una opcin: "); gets(s); } while(!strchr("imcgt", tolower(*s))); return tolower(*s); }

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

163 Se deja al estudiante realizar un anlisis de ste ltimo programa, es imprescindible modificarlo para lograr un mejor entendimiento de las funciones e instrucciones utilizadas en l, ya que la gran mayora de ellas fueron tratadas en captulos pasados de sta gua.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

164 Preguntas Frecuentes Quinta Unidad

1.- Por qu es importante utilizar las estructuras? El uso adecuado de las estructuras en lenguaje C, proporcionan mayor flexibilidad, diseo de programas ms potentes y de mayor claridad para el programador. 2.- Qu beneficios otorga el uso de asignacin dinmica de memoria? Cuando se crean programas utilizando estas funciones, no se est sujeto a la declaracin esttica de memoria, la cual slo proporcionar el espacio definido y si se requiere ms espacio, el programa ser inconsistente y fallar. Por tanto, es importante la utilizacin de la asignacin dinmica de memoria, pues, sta proporciona espacio de memoria conforme lo requiere el usuario del programa o sistema. 3.- Es necesario guardar los datos en un archivo para posteriores consultas y anlisis? Claro que s, dado que para todos es de suma importancia conocer la informacin y poder tomar decisiones futuras que mejoren nuestras actividades, ahora, con mucha mayor razn en las empresas, para stas es imprescindible guardar la informacin o datos. 4.- Qu beneficios puedo tener con el uso de un lenguaje de programacin a diferencia del uso de una aplicacin existente? Todos los profesionistas deberamos saber programar en algn lenguaje de computadora, dado que de esa manera, las aplicaciones que usramos seran totalmente adaptables a nuestras necesidades, en la
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

165 actualidad somos nosotros los que nos acoplamos a las aplicaciones existentes, dado que fueron diseadas pensando en otros ambientes o ambientes ms generales y no en una situacin particular. 5.- En qu actividades puedo aplicar el uso de un lenguaje de programacin? De hecho en todas las actividades que tenga que ver con acciones repetitivas, que incluyan informacin y/o datos, especficamente en aplicaciones donde se requiera como lo dije anteriormente, tener un sello particular o mejor an una caracterstica personalizada del manejo de dicha informacin.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

166 Mapa Conceptual Quinta Unidad

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

167 Actividades de Trabajo Quinta Unidad 1.- Encuentra los errores al siguiente cdigo. struct { char nombre 100; long int num_reg; char domicilio[200]; long int no_cuenta; float saldo; }antiguo cliente 2.- Escribe la sintaxis para reservar 5000 bytes de memoria dinmica para una variable char.

3.- Realizar el cdigo para un programa que permita dar el nombre al archivo a crear a travs del teclado y si ste existe, sobrescribirlo.

4.- Encontrar los errores al siguiente programa. #include <stdio.h> #define N 256 void main( ) { FILE *fp; char nombre_arch[N]; printf( " Nombre del Archivo (< %d caracteres): ", N );
PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

168 scanf( "%s%*c", nombre_arch ); fp = fopen( nombre_arch, "w" ); if (fp == NULL) { printf( "Error abriendo %snn", nombre_arch ); exit(0); { fclose( fp ); { 5.- Realiza el anlisis al anterior cdigo y comenta con tus compaeros.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

169 Cuestionario de Autoevaluacin Quinta Unidad 1.- Qu son las estructuras? Son un contenedor donde se depositarn los arreglos cadenas de una misma unidad de informacin. 2.- Cul es la sintaxis de una estructura? struct nom_estructura { Campos_estructura; /*los campos pueden ser de cualquier tipo definido*/ }; 3.- Exprese un ejemplo de estructura. struct list_articulo { char clave_art[12]; char nom_art[20]; char precio_art[12]; int cant; }inventario; 4.- Qu es la asignacin dinmica de memoria? Es una poderosa caracterstica que posee el lenguaje C, el cual proporciona espacio de memoria en la medida en que alguna estructura o variable lo va requiriendo, una de las limitantes de sta es la capacidad que tienen los equipos de cmputo.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

170 5.- Cules son las funciones principales de la asignacin dinmica de memoria? malloc() y free(). 6.- Especifique la sintaxis de la funcin malloc(). puntero = (tipo_variable *) malloc (cant_bytes_a_reservar); 7.- Qu son los archivos? Es una estructura de datos capaz de mantener la informacin o datos que a sta se agreguen, es decir, una vez que el archivo contenga los datos no se pueden perder a menos que el usuario as lo desee. Es un almacn permanente de datos. 8.- Mencione algunas funciones principales en la creacin de archivos. fopen(), fclose(), fwrite(), fread(), fprintf(), fscanf(), entre otras muchas ms. 9.- Cules son las tres imprescindibles operaciones al trabajar con archivos? Abrir el archivo, ya sea para lectura o escritura. Escribir o leer datos de stos archivos. Cerrar el archivo abierto.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

171 Lecturas Obligatorias Quinta Unidad Kernighan, Brian W., Ritchie Dennis M., El lenguaje de programacin C. Segunda edicin, Prentice-Hall Hispanoamericana S.A., 1991, Captulo 6. Pea Basurto, Marco A., Cela Espn, Jos M., Introduccin a la programacin en C. Primera Edicin, Ediciones UPC, septiembre de 2000. Barcelona, Espaa.Captulos 8, 9 y 10.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

172 Bibliografa General

Kernighan, Brian W., Ritchie Dennis M., El lenguaje de programacin C. Segunda edicin, Prentice-Hall Hispanoamericana S.A., 1991. Pea Basurto, Marco A., Cela Espn, Jos M., Introduccin a la programacin en C. Primera Edicin, Ediciones UPC, septiembre de 2000. Barcelona, Espaa Angel Salas, CURSO DE LENGUAJE "C", Edita: Secretariado de Publicaciones de la Universidad de Zaragoza, I.S.B.N.: 84-7733-232-0, 1991.

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

173 OBSERVACIONES A LA GUA DE ESTUDIO PARA EL PROFESOR.


Las guas de estudio son un esfuerzo de la UFLP para proporcionar a la comunidad educativa un material didctico adecuado a sus necesidades de aprendizaje. Este trabajo puede ser mejorado con su participacin, les solicitamos que nos sealen las reas de superacin que se puedan tener, las de tipo formal y las de contenido. Al hacer las observaciones les pedimos sealar la localizacin exacta, por unidad y pgina de los sealamientos..

1)_________________________________________________________ ___________________________________________________________ 2)_________________________________________________________ ___________________________________________________________ 3)_________________________________________________________ ___________________________________________________________ 4)_________________________________________________________ ___________________________________________________________ 5)_________________________________________________________ ___________________________________________________________ 6)_________________________________________________________ ___________________________________________________________ 7)_________________________________________________________ ___________________________________________________________ 8)_________________________________________________________ ___________________________________________________________ 9)_________________________________________________________ ___________________________________________________________ 10)________________________________________________________ ___________________________________________________________ 11)________________________________________________________ ___________________________________________________________ 12)________________________________________________________ ___________________________________________________________
(material desprendible: Entregar a la coordinacin al finalizar el curso)

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

174

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

175 OBSERVACIONES A LA GUA DE ESTUDIO PARA EL ESTUDIANTE.


Nombre del alumno:
Las guas de estudio son un esfuerzo de la UFLP para proporcionar a la comunidad educativa un material didctico adecuado a sus necesidades de aprendizaje. Este trabajo puede ser mejorado con su participacin, les solicitamos que nos sealen las fallas concretas que observen, as como contenidos. Al hacer las observaciones les pedimos sealar la localizacin exacta, por unidad y pgina de los sealamientos.

1)_________________________________________________________ ___________________________________________________________ 2)_________________________________________________________ ___________________________________________________________ 3)_________________________________________________________ ___________________________________________________________ 4)_________________________________________________________ ___________________________________________________________ 5)_________________________________________________________ ___________________________________________________________ 6)_________________________________________________________ ___________________________________________________________ 7)_________________________________________________________ ___________________________________________________________ 8)_________________________________________________________ ___________________________________________________________ 9)_________________________________________________________ ___________________________________________________________ 10)________________________________________________________ ___________________________________________________________ 11)________________________________________________________ ___________________________________________________________ 12)________________________________________________________ ___________________________________________________________
(material desprendible: Entregar al profesor al finalizar el curso) PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

176

PROGRAMACIN

UFLP

UNIVERSIDAD FRAY LUCA PACCIOLI

177

Primera edicin: 2008, Esta obra es propiedad de la Universidad Fray Luca Paccioli Calle Zarco No.8 Col Centro. Cuernavaca, Mor. Mxico Queda prohibida la reproduccin parcial o total de esta obra sin autorizacin expresa de sus propietarios Impreso en Mxico.

PROGRAMACIN

You might also like