antologia programacion c

Upload: sergio-mc

Post on 11-Jul-2015

278 views

Category:

Documents


5 download

TRANSCRIPT

Licenciaturas Ejecutivas L S C A

A N T O L O G AALGORITMICA Y PRINCIPIOS DE PROGRAMACIN PROFESOR: JOEL PREZ GONZLEZ

29 / OCT / 2010

IntroduccinEl presente documento es de carcter educativo nicamente, respetando y reconociendo la autora del contenido de quienes lo escribieron. El documento trata los temas de algortmica y principios de programacin para que los alumnos lo tomen como referencia en la materia de Algortmica y principios de programacin cuyo objetivo general es El estudiante aplicar correctamente el concepto de algortmica, para el diseo de diversos sistemas, y donde los temas por unidad a tratar son: 1. 2. 3. 4. 5. 6. Introduccin a la algortmica Instrucciones y datos Instrucciones estructuradas Tipos de datos estructurados Modularidad Apuntadores

Estos temas son cubiertos de manera directa o indirecta a travs de los captulos presentados a lo largo del documento ALGORITMICA PARA PROGRAMACION, haciendo nfasis en los conceptos de Algoritmo y diagramas de flujo en el capitulo de ALGORITMOS Y PROGRAMAS a partir de la pgina 33, las instrucciones y datos son presentados en TIPOS DE DATOS pag. 23. las instrucciones estructuradas se plantean en ESTRUCTURAS DE PROGRAMACIN pag. 38, los tipos de datos estructurados, como subrango, enumerado, registros, arreglos, estructuras, etc. Son mostrados en TIPOS DEFINIDOS POR EL USUARIO pag. 27 y ARREGLOS pag. 147, el tema de Modularidad est implcito en todo el documento y en especial en el tema de FUNCIONES pag. 147, al tratar la programacin estructurada y modular, se considera programacin estructurada a la programacin que se hace por mdulos, el tema de apuntadores est incluido en el Apndice B y Apndice C. El apndice A es un concentrado de varios temas. Esperando que sea de gran utilidad para los alumnos ponemos a su disposicin esta Antologa.

CONTENIDOALGORITMICA PARA PROGRAMACIONINTRODUCCIN ...................................................................................................................................... OBJETIVOS Y CONTENIDO .................................................................................................................. PARA QUE SIRVE LA PROGRAMACIN............................................................................................ QUE ES LA PROGRAMACIN .............................................................................................................. QUE ES UN LENGUAJE DE PROGRAMACIN ................................................................................. NIVELES DE LOS LENGUAJES.............................................................................................................. TIPOS DE PROGRAMACIN................................................................................................................. EL SECRETO DE PROGRAMAR EST EN LA ESTRUCTURACIN............................................ ELEMENTOS BSICOS DE UN PROGRAMA..................................................................................... ELEMENTOS BSICOS DE UN PROGRAMA EN C ..........................................................................MAIN() .............................................................................................................................................................. LA DIRECTIVA #INCLUDE:................................................................................................................................. DEFINICIN DE VARIABLES: ............................................................................................................................. VARIABLES GLOBALES:...................................................................................................................................... VARIABLES LOCALES:........................................................................................................................................ PROTOTIPO DE FUNCIN: .................................................................................................................................. ENUNCIADOS DEL PROGRAMA:........................................................................................................................... DEFINICIN DE FUNCIN:.................................................................................................................................. COMENTARIOS:................................................................................................................................................. FLUJO DE SENTENCIAS......................................................................................................................................

3 5 6 7 8 9 10 11 12 1314 14 15 15 15 16 16 17 17 18

ESTRUCTURAS ESTTICAS DE DATOS............................................................................................... 22 TIPOS DE DATOS ...................................................................................................................................... 23 PREDEFINIDOS POR LOS LENGUAJES ................................................................................ 23TIPOS DE DATOS ENTEROS....................................................................................................................... TIPOS DE DATOS REALES.......................................................................................................................... TIPOS DE DATOS CHAR............................................................................................................................... TIPOS DE DATOS STRING........................................................................................................................... TIPOS DE DATOS BOOLEAN....................................................................................................................... 23 24 24 25 26

TIPOS DEFINIDOS POR EL USUARIO: ................................................................................... 27DATOS DE TIPO SUBRANGO:..................................................................................................................... 27 DATOS DE TIPO ENUMERADO.................................................................................................................. 27

ALGORITMOS Y PROGRAMAS................................................................................................................ DISEO DE PROGRAMAS:......................................................................................................... DIAGRAMAS DE FLUJO ............................................................................................................. REGLAS DE PROGRAMACIN:................................................................................................. PROGRAMACIN ESTRUCTURADA........................................................................................ ESTRUCTURAS DE PROGRAMACIN................................................................................................... ESTRUCTURA DE ASIGNACIN ..............................................................................................

33 33 34 36 36 38 38

Expresiones simples.......................................................................................................................... 38 Expresiones complejas...................................................................................................................... 39

ESTRUCTURA DE DECISIN .................................................................................................... 65Estructura Sencilla:.......................................................................................................................... Operadores de Relacin: .................................................................................................................. Operadores Lgicos: ........................................................................................................................ Estructuras de decisin anidadas:.................................................................................................... Ejercicios Aplicando Estructuras de Decisin................................................................................. Ciclos con control antes.................................................................................................................... Ciclos con control despus: ............................................................................................................. Estructuras cclicas anidadas: ........................................................................................................ Estructura cclica FOR-ENDFOR................................................................................................... 65 65 66 67 68 97 97 98 99

ESTRUCTURAS CCLICAS.......................................................................................................... 97

ESTRUCTURA DE SELECCIN MULTIPLE ........................................................................... 133

FUNCIONES................................................................................................................................................ 136 DEFINICIN...................................................................................................................................... 136 ARGUMENTOS DE LAS FUNCIONES ................................................................................................... 139 Llamadas por valor........................................................................................................... 140 Llamadas por referencia .................................................................................................. 140 CREACIN DE BIBLIOTECAS PROPIAS: ............................................................................................ 143 FUNCIONES RECURSIVAS Y ALGORITMOS RECURSIVOS.................................................................... 145 ARREGLOS................................................................................................................................................... 147 DEFINICIN...................................................................................................................................... 147 ARREGLOS UNIDIMENSIONALES ...................................................................................................... 147 TIPO_DE_DATO NOMBRE_VARIABLE [TAMAO] ........................................................................... 148 ARREGLOS BIDIMENSIONALES........................................................................................................... 150 ARREGLOS MULTIDIMENSIONALES................................................................................................... 151 INICIALIZACIN DE ARREGLOS CON TAMAO ................................................................................... 152 INICIALIZACIN DE ARREGLOS SIN TAMAO .................................................................................... 153

APENDICE A ...................................................................................................... A-1 INTRODUCCIN A LA PROGRAMACIN ESTRUCTURADA4.1. Tcnicas de programacin ............................................................................................... A-1 4.2. Programacin modular ...................................................................................................... A-1 4.3. Programacin estructurada ............................................................................................. A-3 4.4. Estructura secuencial ................................................................................................... A-4 4.5. Estructura selectiva .......................................................................................................... A-5 4.6. Estructura repetitiva ......................................................................................................... A-9 4.7. Estructura de decisin anidada ..................................................................................... A-10 4.8. Estructura repetitivas anidadas ..................................................................................... A-11 4.9. La instruccin ir_a (goto) ................................................................................................. A-12

APENDICE B........................................................................................................ B-1 APUNTADORES EN C y C++1. Introduccin ............................................................................................................................ 2. Definicin de apuntador ...................................................................................................... 3. Referenciacin ...................................................................................................................... 4. Declaracin de apuntadores ............................................................................................. 5. Asignacin de apuntadores ............................................................................................... 6. Desreferenciacin de apuntadores ................................................................................. 7. Verificacin de tipos en apuntadores ............................................................................. 8. Direcciones invlidas y la direccin NULL .................................................................. 9. Apuntadores a apuntadores ............................................................................................... 10. Apuntadores constantes y apuntadores a constantes ............................................. 11. Apuntadores, arreglos y aritmtica de apuntadores ................................................ 12. Apuntadores para paso de parmetros por referencia ............................................ 13. Asignacin dinmica de memoria ................................................................................ 13.1. Asignacin dinmica de memoria al estilo de C ..................................... 13.2. Asignacin dinmica de memoria al estilo de C++ ................................ B-1 B-1 B-1 B-2 B-2 B-2 B-3 B-3 B-4 B-5 B-5 B-6 B-7 B-7 B-8

APENDICE C......................................................................................................... C-1 TUTORIAL SOBRE APUNTADORES Y ARREGLOS EN CPrefacio ........................................................................................................................... C-2 Introduccin .................................................................................................................... C-3 Captulo 1: Qu es un Apuntador? .............................................................................. C-4 Captulo 2: Tipos de Apuntadores y Arreglos............................................................... C-9 Captulo 3: Apuntadores y Cadenas. ............................................................................ C-13 Captulo 4: Ms sobre Cadenas. ................................................................................... C-17 Captulo 5: Apuntadores y Estructuras. ....................................................................... C-19 Captulo 6: Ms sobre Cadenas y Arreglos de Cadenas. ........................................... C-23 Captulo 7: Ms sobre Arreglos Multidimensionales................................................... C-27 Captulo 8: Apuntadores a Arreglos.............................................................................. C-29 Captulo 9: Apuntadores y Gestin Dinmica de Memoria. ....................................... C-31 Captulo 10: Apuntadores a Funciones ........................................................................ C-38 Eplogo ............................................................................................................................ C-49

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

MODULO POR

: ALGORITMICA PARA PROGRAMACION : YAMIL ARMANDO CERQUERA ROJASDOCENTE UNIVERSIDAD SURCOLOMBIANA

Neiva Huila - Colombia 2001 Nota: Este mdulo se encuentra a disposicin de todos aquellos que estn interesados en aprender a resolver problemas bsicos haciendo uso de las herramientas que nos da los diferentes lenguajes de programacin para ello. Conocidas como Estructuras de programacin (Asignacin, Decisin, Cclicas y de Seleccin Mltiple). Cualquier sugerencia o critica la podrn dirigir a [email protected] especiales al personal de monografas.com por el LINK.

CONTENIDOINTRODUCCIN ..................................................................................................................................... 3 OBJETIVOS Y CONTENIDO .................................................................................................................. 5 PARA QUE SIRVE LA PROGRAMACIN ............................................................................................ 6 QUE ES LA PROGRAMACIN .............................................................................................................. 7 QUE ES UN LENGUAJE DE PROGRAMACIN .................................................................................. 8 NIVELES DE LOS LENGUAJES ............................................................................................................. 9 TIPOS DE PROGRAMACIN................................................................................................................10 EL SECRETO DE PROGRAMAR EST EN LA ESTRUCTURACIN ..............................................11 ELEMENTOS BSICOS DE UN PROGRAMA ....................................................................................12 ELEMENTOS BSICOS DE UN PROGRAMA EN C ..........................................................................13MAIN() .................................................................................................................................................................... 14 LA DIRECTIVA #INCLUDE:......................................................................................................................................... 14 DEFINICIN DE VARIABLES: ...................................................................................................................................... 15 VARIABLES GLOBALES:............................................................................................................................................... 15 VARIABLES LOCALES:................................................................................................................................................ 15 PROTOTIPO DE FUNCIN: .......................................................................................................................................... 16 ENUNCIADOS DEL PROGRAMA:.................................................................................................................................... 16

DEFINICIN DE FUNCIN:.......................................................................................................................................... 17 COMENTARIOS:......................................................................................................................................................... 17 FLUJO DE SENTENCIAS ............................................................................................................................................... 18

ESTRUCTURAS ESTTICAS DE DATOS ...............................................................................................22 TIPOS DE DATOS ....................................................................................................................................23 PREDEFINIDOS POR LOS LENGUAJES ............................................................................................23TIPOS DE DATOS ENTEROS............................................................................................................................ 23 TIPOS DE DATOS REALES.............................................................................................................................. 24 TIPOS DE DATOS CHAR.................................................................................................................................. 24 TIPOS DE DATOS STRING............................................................................................................................... 25 TIPOS DE DATOS BOOLEAN........................................................................................................................... 26

TIPOS DEFINIDOS POR EL USUARIO: ................................................................................................27DATOS DE TIPO SUBRANGO:......................................................................................................................... 27 DATOS DE TIPO ENUMERADO....................................................................................................................... 27

ALGORITMOS Y PROGRAMAS...............................................................................................................33 DISEO DE PROGRAMAS: ...................................................................................................................33 DIAGRAMAS DE FLUJO .......................................................................................................................34

UNIVERSIDAD SURCOLOMBIANA

1 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

REGLAS DE PROGRAMACIN:............................................................................................................36 PROGRAMACIN ESTRUCTURADA ....................................................................................................36 ESTRUCTURAS DE PROGRAMACIN ..................................................................................................38 ESTRUCTURA DE ASIGNACIN ..........................................................................................................38Expresiones simples........................................................................................................................................... 38 Expresiones complejas....................................................................................................................................... 39

ESTRUCTURA DE DECISIN ...............................................................................................................65Estructura Sencilla:........................................................................................................................................... 65 Operadores de Relacin: ................................................................................................................................... 65 Operadores Lgicos: ......................................................................................................................................... 66 Estructuras de decisin anidadas:...................................................................................................................... 67 Ejercicios Aplicando Estructuras de Decisin..................................................................................................... 68

ESTRUCTURAS CCLICAS ....................................................................................................................97Ciclos con control antes..................................................................................................................................... 97 Ciclos con control despus: ............................................................................................................................... 97 Estructuras cclicas anidadas: ........................................................................................................................... 98 Estructura cclica FOR-ENDFOR ...................................................................................................................... 99

ESTRUCTURA DE SELECCIN MULTIPLE .......................................................................................133 FUNCIONES...........................................................................................................................................136 DEFINICIN ...........................................................................................................................................136 ARGUMENTOS DE LAS FUNCIONES ............................................................................................................139 Llamadas por valor..........................................................................................................................140 Llamadas por referencia ..................................................................................................................140 CREACIN DE BIBLIOTECAS PROPIAS: ......................................................................................................143 FUNCIONES RECURSIVAS Y ALGORITMOS RECURSIVOS ................................................................................145 ARREGLOS .............................................................................................................................................147 DEFINICIN ...........................................................................................................................................147 ARREGLOS UNIDIMENSIONALES ...............................................................................................................147 TIPO_DE_DATO NOMBRE_VARIABLE [TAMAO] ...................................................................................148 ARREGLOS BIDIMENSIONALES ...................................................................................................................150 ARREGLOS MULTIDIMENSIONALES ............................................................................................................151 INICIALIZACIN DE ARREGLOS CON TAMAO .............................................................................................152 INICIALIZACIN DE ARREGLOS SIN TAMAO ...............................................................................................153

UNIVERSIDAD SURCOLOMBIANA

2 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

INTRODUCCINEL lenguaje C es el resultado de un proceso de desarrollo que inici con un lenguaje denominado BCPL. Este influenci a otro llamado B (inventado por Ken Thompson). En los aos 70; ste lenguaje llev a la aparicin del C. Con la popularidad de las microcomputadoras muchas compaas comenzaron a implementar su propio C por lo cual surgieron discrepancias entre s. Por esta razn ANSI (American National Standars Institute, por sus siglas en ingls), estableci un comit en 1983 para crear una definicin no ambigua del lenguaje C e independiente de la mquina que pudiera utilizarse en todos los tipos de C. Algunos de las C existentes son: Quick C C++ Turbo C Turbo C ++ Borland C Microsoft C Visual C C Builder

Los cdigos presentados en este libro estn basados en el C y Turbo pascal estndar los cuales pueden utilizarse en todos los tipos de C y Pascal existentes en el mercado. C es un lenguaje de programacin de nivel medio ya que combina los elementos del lenguaje de alto nivel con la funcionalidad del ensamblador. Su caracterstica principal es ser portable, es decir, es posible adaptar los programas escritos para un tipo de computadora en otra. Otra de sus caractersticas principales es el ser estructurado, es decir, el programa se divide en mdulos (funciones) independientes entre s. El lenguaje C inicialmente fue creado para la programacin de: Sistemas operativos

-

UNIVERSIDAD SURCOLOMBIANA

3 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

-

Intrpretes Editores Ensambladores Compiladores Administradores de bases de datos.

Actualmente, debido a sus caractersticas, puede ser utilizado para todo tipo de programas. Como principal objetivo, este libro trata de vulgarizar el lenguaje C colocndolo al alcance de todos los estudiosos de cualquier nivel o profesionales de la programacin con conocimientos mnimos informticos. Para ello, a lo largo de los diferentes captulos, se trata al lenguaje no como algo aislado en si mismo, sino relacionado especficamente con la Metodologa de la Programacin y la Estructura de Datos, fuentes indispensables del conocimiento profundo de cualquier lenguaje de programacin. El trmino vulgarizar, que aqu se utiliza, no significa en modo alguno eliminar la teora del lenguaje y descender al terreno prctico olvidando la misma, si no completamente teora y practica mediante la inclusin de todos los ejemplos oportunos y las aclaraciones necesarias aunque estas puedan parecer, a veces, superfluas e incluso dadas por sabidas.

UNIVERSIDAD SURCOLOMBIANA

4 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

OBJETIVOS Y CONTENIDOEste libro tiene un objetivo fundamental: Introducir y explicar los conceptos fundamentales de las estructuras de programacin utilizadas en los diferentes de lenguajes de programacin de microcomputadoras. Esta diseado para ser utilizado de diversas formas: Como libro de texto, libro complementario, libro de problemas de programacin, libro de anlisis numrico o bien como libro de introduccin a la programacin de computadoras. El seguimiento de este libro no requiere ningn conocimiento previo de programacin de computadoras, aunque, si se utiliza como libro de problemas puede complementarse con algn libro de mayor contenido terico relativo a algoritmos, estructuras de datos o bien lenguajes de programacin. El libro esta dividido en varios captulos que abarcan los conceptos esenciales de las estructuras de programacin en los diferentes lenguajes comnmente utilizados en la programacin de computadoras. En la primera parte se trata lo relacionado con los smbolos utilizados en la diagramacin o solucin de problemas a nivel simblico (Diagramas de flujo). En la segunda parte se desarrollarn algunos ejercicios donde se muestra de manera prctica la utilizacin de dichos smbolos Una tercera parte donde se analizan las estructuras de asignacin Una cuarta parte donde se analizan las estructuras de decisin Una quinta parte donde se analizan las estructuras repetitivas o cclicas Una sexta parte donde se analizan las estructuras de seleccin mltiple. Cada uno de los captulos esta diseado de tal forma que el lector entienda de manera clara y sencilla el uso de cada uno de las estructuras mencionadas anteriormente. De igual forma cada uno de los captulos estar soportado con una buena cantidad de ejercicios resueltos que aclaran la forma correcta de utilizacin de dichas estructuras. A cada uno de los ejercicios que se plantean en el presente libro, se le har un anlisis de su solucin de manera mecnica, se llevar a un anlisis simblico y luego se desarrollar el algoritmo al nivel de diagramas de flujo, Seudo lenguajes, Seudo cdigos y Cdigos. Para esta ltima parte se codificar cada ejercicio en Turbo Pascal y Lenguaje C.

UNIVERSIDAD SURCOLOMBIANA

5 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

PARA QUE SIRVE LA PROGRAMACINUna persona piensa y se comporta obedeciendo a un secuencial lgico. Un computador realiza tareas y maneja datos en memoria obedeciendo a una secuencia de pasos lgicos para lo cual ha sido programado. Programacin de computadoras es la ciencia que permite a una persona programar una computadora para que resuelva tareas de manera rpida. Un Programa de computadora se puede definir como una secuencia de instrucciones que indica las acciones o tareas que han de ejecutarse para dar solucin a un problema determinado. Programar computadoras es indispensable en cualquier rea de la ingeniera, ya que diferentes problemas que se puedan presentar tardan tiempo resolverlos de manera manual. La computadora resuelve problemas de acuerdo como se le haya programado de manera rpida.

UNIVERSIDAD SURCOLOMBIANA

6 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

QUE ES LA PROGRAMACINLa definicin anterior deja muchas cosas que decir. Para llegar a tener una secuencia de instrucciones que den solucin a un problema es necesario ejecutar varias etapas. Etapa de anlisis: En esta etapa el programador debe entender claramente el problema. Saber que es lo que se quiere resolver. (analizar) Etapa de Solucin general: Escribir la serie de pasos que sean necesarios para dar solucin al problema. Estos pasos se pueden desarrollar a travs de un Diagrama de flujo (Utilizando smbolos) a travs de un seudo lenguaje (Utilizando Lenguaje comn). A lo anterior es lo que se conoce con el nombre de Algoritmo. Etapa de prueba: Consiste en chequear el algoritmo paso a paso para estar seguro si la solucin da solucin verdaderamente el problema. (Prueba de escritorio). Etapa de implementacin especfica: Consiste en traducir el algoritmo a un lenguaje de programacin. (Codificar). Etapa de prueba: Consiste en ejecutar el programa en un computador y revisar los datos arrojados para ver si son correctos y hacer los ajustes necesarios. (Implementar). Etapa de uso: Consiste en instalar el programa de manera definitiva para el uso por parte del usuario.

UNIVERSIDAD SURCOLOMBIANA

7 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

QUE ES UN LENGUAJE DE PROGRAMACINSe puede definir un lenguaje de programacin como un conjunto de reglas normas, smbolos y palabras especiales utilizadas para construir un programa y con l, darle solucin a un problema determinado. El lenguaje de programacin es el encargado de que la computadora realice paso a paso las tareas que el programador a diseado en el algoritmo. Se puede decir que un lenguaje de programacin es el intermediario entre la mquina y el usuario para que este ltimo pueda resolver problemas a travs de la computadora haciendo uso de palabras (funciones) que le traducen dicho programa a la computadora para la realizacin de dicho trabajo.

UNIVERSIDAD SURCOLOMBIANA

8 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

NIVELES DE LOS LENGUAJESDesde que se desarrollaron las mquinas programables se han desarrollado lenguajes con los cuales las personas puedan dar rdenes a stas. En su orden los lenguajes de programacin se pueden clasificar as: Lenguaje de mquina: Las primeras computadoras se programaban en cdigo de mquina. Se puede decir que los programas eran diseados en cdigo binario. Eran difciles de leer, difciles de entender y por su puesto difciles de corregir. Los programas se caracterizaban por ser pequeos. Lenguajes de Bajo Nivel: Para dar solucin a lo difcil que era programar en cdigo mquina, se desarroll un lenguaje conocido como lenguaje ensamblador. Este lenguaje era encargado de tomar algunas palabras comunes a una persona y traducirlas al cdigo mquina. Lo anterior facilitara un poco la escritura de programas. Lenguajes de alto nivel: Como las personas resuelven problemas y se comunican en lenguajes naturales (espaol, ingles, francs, etc.), se desarrollaron lenguajes de programacin que estuvieran mas cerca de sta manera de resolver problemas. De los lenguajes de alto nivel se puede citar el Basic, Cobol, Fortran, Pascal, Turbo Pascal, C, Modula, Ada. Como se hace necesario traducir el programa a lenguaje de mquina, en los lenguajes de alto nivel esa operacin la realiza algo que se conoce con el nombre de Compilador.

UNIVERSIDAD SURCOLOMBIANA

9 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

TIPOS DE PROGRAMACINDependiendo del lenguaje de programacin que se elija, se puede hablar del tipo de programacin que se va a realizar. Secuencial : Se considera programacin secuencial a los programas que se disean con instrucciones que van unas detrs de otras. Las lneas se ejecutan una a una en secuencia. Ejemplos tales como Basic, Cobol. Estructurada: Se considera programacin estructurada a la programacin que se hace por mdulos. Cada mdulo realiza alguna tarea especfica y cuando se necesite esa tarea simplemente se hace el llamado a ese mdulo independiente de que se tengan que ejecutar los dems. Ejemplos tales como: Turbo PASCAL, C, Modula, Ada. Orientada a Objetos: Se considera programacin orientada a objetos aquellos lenguajes que permiten la utilizacin de objetos dentro del diseo del programa y el usuario puede pegar a cada objeto cdigo de programa. Ejemplos de estos lenguajes se pueden mencionar el Visual Basic de la Microsoft, C Builder de la Borland Internacional, Java, Xml entre otros. Lgica o de lenguaje natural: son aquellos programas que se disean con interfaces tal que la persona o usuario puede ordenar a la mquina tareas en un lenguaje natural. Pueden interactuar como una persona pero nunca llegan a producir conocimiento. Ejemplo como Prolog (Programming Logic). Estos lenguajes se desarrollaron con base en las estructuras de sus antecesores. Recorren o navegan las bases de datos obedeciendo a reglas. Inteligencia Artificial: Los programas de inteligencia artificial Son programas que se acercan a la inteligencia humana. Estos programas son capaces de desarrollar conocimiento. Este tipo de lenguajes trabajan similar a la mente humana.

UNIVERSIDAD SURCOLOMBIANA

10 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

EL SECRETO DE PROGRAMAR EST EN LA ESTRUCTURACINTurbo Pascal y C por su diseo son lenguajes estructurados. C y Turbo PASCAL no permiten al programador enlazar sentencias de cualquier manera. Existe una estructura bsica que cada programa debe seguir (Estructura de un programa) y el compilador es estricto a la hora de hacer cumplir estas reglas. Un programa ha de ser codificado en varias partes y cada una de ellas debe ir en el lugar que le corresponde. La idea fundamental del lenguaje C y Turbo Pascal es crear programas que sean comprendidos sin necesidad de emplear docenas de pginas de diagramas de flujo y miles de explicaciones. Esta manera de realizar los programas es a lo que denomina como "PROGRAMACIN ESTRUCTURADA". Aunque se pueda llegar a realizar programas que aparentan tener una estructura (ser estructurados), Turbo Pascal y C son lenguajes que exige su utilizacin. La programacin estructurada le permite realizar pequeas rutinas especficas para cada tarea que se quiera realizar, y a cada una de esas rutinas se les da un nombre (Identificador) para cuando el programador la requiera slo la llame con su nombre y automticamente se ejecutar.

UNIVERSIDAD SURCOLOMBIANA

11 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

ELEMENTOS BSICOS DE UN PROGRAMAEn el mbito general, un programa codificado o escrito bajo cualquier lenguaje de programacin estructurado consta bsicamente de dos secciones: Seccin encabezado Seccin cuerpo de programa

La seccin de encabezado es usada para declarar, mencionar o identificar las variables con sus respectivos tipos y/o las constantes que se vayan a utilizar en el desarrollo del programa, as como tambin el nombre de las funciones y/o los procedimientos que ejecutarn las instrucciones de los diferentes algoritmos que va a tener dicho programa. Adems en esta seccin se declaran los archivos de inclusin (Archivos con extensin .h) que permiten el uso de algunas funciones que son necesarias para el desarrollo en si del programa. Igualmente se especifican las estructuras de datos complejas que se vayan a manejar. En la seccin cuerpo de programa realmente se describen todos los procedimientos y/o funciones que se van a ejecutar dentro del programa as como tambin el cdigo del programa principal. Como cuerpo de programa es indispensable que haya parte principal mientras que los procedimientos y/o funciones son opcionales.

UNIVERSIDAD SURCOLOMBIANA

12 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

ELEMENTOS BSICOS DE UN PROGRAMA EN CEl siguiente ejemplo ilustra algunos de los componentes que con mayor frecuencia se usan cuando se trata de codificar programas utilizando el lenguaje de programacin C. Cada una de las lneas es numerada para efectos de explicacin posterior. En el momento de probarlo en el lenguaje de programacin no es necesario la numeracin. 1. /* Programa para calcular el producto de dos nmeros ingresados por teclado */ 2. #include stdio.h 3. int a,b,c; 4. int producto(int x, int y); 5. main() 6. { 7. /* pide el primer numero */ 8. printf(digite un numero entre 1 y 100); 9. scanf(%d,&a); 10. 11. /* pide el segundo numero */ 12. printf(digite un numero entre 1 y 100); 13. scanf(%d,&b); 14. 15. /* calcula y despliega el producto */ 16. c = producto(a,b); 17. printf(\n%d por %d = %d, a, b, c); 18. } 19. 20. /* funcin que calcula y regresa el producto de sus dos argumentos */ 21. int producto(int x, int y) 22. { 23. return(x*y); previamente

UNIVERSIDAD SURCOLOMBIANA

13 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

24. } Aunque cada uno de los programas son distintos, todos tienen caractersticas comunes. Los elementos bsicos de un programa codificado en lenguaje C son los siguientes tomando el ejemplo anteriormente descrito: La funcin main() (lnea 5 y desarrollada de la 6 18) La directiva #include (lnea 2) Definicin de variables (lnea 3) Prototipo de funcin (lnea 4) Enunciados del programa (lnea 8,9,12,13,16,17,23) Definicin de funcin (lnea 21 24) Comentarios (Lnea 1,7,11,15,20)

Veamos en que consiste cada uno: main() En C, todo el cdigo est basado en funciones. El programa principal no es la excepcin. main() indica el comienzo de la funcin principal del programa la cual se delimita con llaves. . Este componente es obligatorio en cualquier programa que se compile con lenguaje C. En su forma simple la funcin main consiste en la palabra main seguida de parntesis () y las instrucciones que ejecutan se encuentran demarcadas por las dos llaves {}. Sin embargo no todos los programas tienen esta tradicional funcin; los programas de Windows escritos en C y C++ disponen de una funcin de inicio llamada winmain() en lugar de la tradicional main(): Nota: La seccin main o funcin main es la primera seccin de cdigo que se ejecuta cuando se le d la orden de ejecutar el cdigo. Desde aqu se har el respectivo enlace con las dems funciones que posea el programa. La directiva #Include: La directiva #include da instrucciones al compilador C para que aada el contenido de un archivo de inclusin al programa durante la compilacin. Un

UNIVERSIDAD SURCOLOMBIANA

14 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

archivo de inclusin es un archivo de disco separado que contiene informacin necesaria para el compilador. Varios de estos archivos (Algunas veces llamados archivos de encabezado) se proporcionan con el compilador. Nunca se necesita modificar la informacin de estos archivos y esta es la razn por la cual se mantienen separados del cdigo fuente. Todos los archivos de inclusin deben tener la extensin (.h) (por ejemplo stdio.h). Se usa la directiva #include para darle instrucciones al compilador que aada un archivo especfico al programa durante la compilacin. La directiva #include, en este programa de ejemplo, significa aada el contenido del archivo stdio.h . Nota: La mayora de los programas codificados en lenguaje C requieren uno o ms archivos de inclusin. Depende del tipo de funciones que se estn utilizando: Ejemplo de ellas printf(), scanf(), clrscr(); gotoxy()..... Definicin de variables: Una variable es un nombre asignado a una posicin de almacenamiento de datos. El programa utiliza variables para guardar varios tipos de datos durante la ejecucin del programa. En C, una variable debe ser definida antes de que pueda ser usada. Una definicin de variable le informa al compilador el nombre de la variable y el tipo de datos que va a guardar. En el programa de ejemplo la definicin de la lnea 3, "int a,b,c" define tres variables, llamadas a, b, y c que guardar cada una un valor de tipo entero. Las variables se pueden declarar en la zona de encabezado de un programa o al inicio de una funcin o un procedimiento. Variables globales: Las variables globales son aquellas variables que se definen o declaran en la zona de encabezado de cualquier programa en C. Estas variables pueden ser utilizadas en cualquier parte del programa, igualmente puede ser modificado su valor desde cualquier instruccin. Variables Locales: Las variables son consideradas como locales cuando su declaracin se hace al inicio de una funcin o un procedimiento. Las variables que hayan sido declaradas como locales solo podrn ser reconocidas por el procedimiento o funcin donde se haya declarado. En ninguna otra parte del programa se puede hacer uso de ellas.

UNIVERSIDAD SURCOLOMBIANA

15 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

Un reciente cambio de regla de aproximacin del comit de ANSI de C++ afecta la visibilidad de una variable que se declara en una instruccin como for. El siguiente cdigo generar un error de compilador. Int index; For (int i=1;IN mod 2; gotoxy(10,12); if S=0 then write("N es primo") else write("N no es primo[); repeat until keypressed; End. Cdigo Lenguaje C con control despus del ciclo /* Programa numero primo */ #include "conio.h" #include "stdio.h" int S,N,J; main() { clrscr(); gotoxy(10,10); printf("Digite un valor N "); scanf("%d",&N); J=2; S=0; do { if (N%J==0) S=S+1; J++; } while (J i:N < S = S+ (2*i-1)FIN

Hacer S igual a 0 Hacer i igual a 1 Mientras i sea menor o igual a N hacer Inicio Hacer S igual a S mas 2 por i menos 1 S Hacer i igual a i mas 1 Fin mientras Escribir el valor de S Fin

i = i+1

/* programa que escribe el cuadrado de un nmero sumando N impares */ #include "conio.h" /* programa que lee un valor N y calcule su cuadrado */ #include "stdio.h" int i,N,S; main() { clrscr(); gotoxy(10,6); printf("Digite un valor N "); scanf("%d",&N); S=0; i=1; while (i Hacer S igual a S ms N SFIN

N S=0 i=1 i:N < S = S+ N i = i+1

Hacer i igual a i ms 1 Fin mientras Escribir el valor de S Fin

/* programa que escribe el cuadrado de un nmero sumando N veces el nmero */ #include "conio.h" /* programa que lee un valor N y calcule su cuadrado sumando N veces */ #include "stdio.h" int i,N,S; main() { clrscr(); gotoxy(10,6); printf("Digite un valor N "); scanf("%d",&N); S=0; i=1; while (i

Diagrama de flujoINICIO N

S=0

i:N i:N < S = S+ Si

2i =0

N

1 * (i!)

FIN

i = i+1

21. e x = 1 + x +

x2 x3 x4 + + + ...... 2! 3! 4!

INICI X, i, S=0 i=0 > i:N < S = S+ S X i!i

i =0

N

FIN

i = i+1

UNIVERSIDAD SURCOLOMBIANA

128 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

22.

e sin ( x ) = 1 + sin( x ) +

sin 2 ( x ) sin 3 ( x ) sin 4 ( x ) + + + ...... 2! 3! 4!

INICIO X,i, S=0 i=0 > i:N < Si

S =S+ i =0

N

(sen( X )) i!

FIN

i = i+1

23. Sin( x ) = x

x3 x5 x7 + + ... 3! 5! 7!

INICIO

X,i, S=0 i=1 > i:N < S =S+ i =1 N

S FIN

X 1 * ( 1)i + (2i 1)! i = i+1

2i 1

UNIVERSIDAD SURCOLOMBIANA

129 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

24. Sinh( x ) = x +

x 3 x5 x 7 + + + ... 3! 5! 7!

INICIO

X,i, S=0 i=1 > i:N < S =S+ i =1 N

S2 i 1

X (2i 1)!

FIN

i = i+1

x2 x4 x6 25. Cos ( x ) = 1 + + ... 2! 4! 6!

INICIO X,i, S=0 i=0 > i:N < S =S+ i =0 N

S FIN

X * ( 1)i (2i )!

2i

i = i+1

UNIVERSIDAD SURCOLOMBIANA

130 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

26. Cos ( x ) = 1 +

x2 x4 x6 + + + ... 2! 4! 6!

INICIO X, N S=0 i=0 > i:N < S =S+ i =0 N

S2i

X (2i )!

FIN

i = i+1

Los polinomios de legendre se calculan por medio de las frmulas: p0 = 1 p1 = x ....... 2n 1 n 1 pn = ( ) xpn 1 ( ) pn 2 n n donde n=2,3,4... y X es cualquier nmero entre -1 y 1. Desarrolle un algoritmo que genere una tabla de p n vs X, para cualquier valor de n hasta n=10; generando 201 valor de p n en cada tabla, para valores igualmente distanciados de x (esto es hacer x= -1,-0.99,-0.98,....0,0.01,0.02,...0.99,1).

UNIVERSIDAD SURCOLOMBIANA

131 de 154

ALGORITMICA PARA PROGRAMACION

Ing. Yamil Armando Cerquera Rojas

El coeficiente binomial n! n como: = i (n i )!i!

n para enteros no negativos n e i (donde i < accin s 12 > . . . Fin _ si Diagrama de Flujo Condicin Verdadera Acciones Falsa Condicin? Falsa

Pseudocodigo en castellano Si < condicin > entonces < accin SI > Fin _ si Pseudocodigo en Ingls If < condicin > then < Accin SI > Endif

.5.2. Alternativa doble(si-entonces-si_no / if- then- else).Funcin: Ejecuta una o determinadas acciones cuando se cumple una o mas Acciones: Si la condicin es verdadera entonces se ejecuta la accin SI (o acciones caso de ser SI una accin compuesta y constar de varias acciones). Si la condicin es falsa, entonces se pasara a la accin sino (else); si los datos son incorrectos entonces en la accin sino se ingresara un cuadro de dialogo diciendo datos de entrada incorrectos.

A-6

APENDICE A

Diagrama de Flujo

SiAccin S1

Condicin

no Accin S2

Pseudocodigo en Castellano Si < Condicin> entonces < Accin SI > Si_no < Accin S2 > Fin _ si Pseudocodigo en Ingls If < condicin > then < Accin SI > Else < Accin S2 > Endif Representacin del Algoritmo Diagrama N-S Condicin? Verdadera Accin S1 Falsa Accin S2

Pseudocodigo en Castellano S1 (accin compuesta) Si < Condicin> entonces < Accin s11 > . . . < Accin S 2n > si_no < Accin S21 > < Accin S22 > . < Accin S 1n > Fin _ si

.

A-7

APENDICE A

Ejemplo: Dados tres nmeros imprimir o escribir cual es el mayor (Pseudocodigo) Start Read: a, b, c If a > b and b > c then m m else m Write : m End c a b if b >a and a>c then

4.5.3. Alternativa mltiple (segn _sea, caso de / case) Concepto: Es aquella que evala una expresin que podr tomar N valores

distintos (1, 2, 3, 4,n) segn que elija uno de estos valores en la condicin, se realizara una de las n acciones, o lo que es igual, el flujo del algoritmo seguir un determinado camino entre los n posibles. Modelo (simplificado) Segn E hacer . . . Fin _ segn Diagrama de Flujo 1 Condicin 2 3 Accin S3 4 n

Accin S1

Accin S2

Accin S4

.

Accin Sn

A-8

APENDICE A

4.6. Estructura repetitiva.Concepto: Son aquellas en las que especialmente se disea para todas aquellas aplicaciones en las cuales una operacin o conjunto de ellas deben repetirse muchas veces. Bucles (lazos: Son estructuras que repiten una secuencia de instrucciones un numero determinado de veces. Interaccin: Es el hecho de repetir la ejecucin de una secuencia de acciones; en otras palabras el algoritmo repite muchas veces las acciones. Al utilizar un bucle para sumar una lista de nmeros, se necesita saber cuantos nmeros se han de sumar, para poder detenerlo en el momento preciso; las dos principales preguntas ha realizarse en el diseo de un bucle son: Que contiene el bucle? y Cuntas veces se debe repetir? Casos Generales de Estructuras repetitivas 1) La condicin de Salida del bucle se realiza al principio del bucle (estructura mientras) 2) La condicin de Salida se origina al final del bucle; el bucle se verifica hasta que se verifique una cierta condicin 3) La condicin de salida se realiza con un contador que cuente el numero de interacciones. ( i es un contador que cuenta desde el valor inicial (vi.) hasta el valor final (vf) con los incrementos que se consideran.)

4.6.1. Estructura mientras (while). Concepto: Es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condicin. Cuando se ejecuta la accin mientras, la primeracosa que sucede es que se evala la condicin (una expresin booleana), si se evala falsa ninguna accin se tomara y el programa en la siguiente instruccin del bucle; si la expresin booleana es verdadera, entonces se ejecuta el cuerpo del bucle, depuse del cual se evala de nuevo la expresin booleana. Esta expresin booleana se repite una y otra vez mientras la expresin booleana (condicin) sea verdadera Expresin de un Bucle cero veces En una estructura mientras la primera cosa que sucede es la evaluacin de la expresin booleana; si es falsa en este punto entonces el cuerpo del bucle nunca se ejecuta. Puede parecer intil ejecutar el cuerpo del bucle cero veces, ya que no tendr efecto en ningn valor o salida. Sin embargo no es una accin deseada Bucles infinitos Algunos bucles no existen fin y otros no encuentran el fin por error en su diseo, el bucle y el programa corren siempre, o al menos hasta que la computadora se apaga; en otras ocasiones el bucle no se termina nunca por que nunca se cumple la condicin.

A-9

APENDICE A

Regla Prctica Las pruebas o tesis en las expresiones booleanas es conveniente que sean mayor o menor que en lugar de pruebas de igualdad o desigualdad. En el caso de la codificacin en un lenguaje de programacin, esta regla debe seguirse rgidamente el caso de comparacin de nmeros reales.

4.6.2. Estructura repetir (repeat).Bucle no se ejecutara, por ello se necesitan de otros tipos de estructuras Dicha estructura se ejecuta hasta que cumpla una condicin Determinada que se comprueba hasta el final del bucle

Concepto: si el valor de la expresin booleana es inicialmente falso, el cuerpo del

Diferencias entre las estructuras mientras y repetir La estructura mientras termina cuando la condicin es falsa, mientras que repetir termina cuando la condicin es verdadera. En la estructura repetir el cuerpo del bucle se ejecuta siempre al menos una sola vez; por el contrario mientras es mas general y permite la posibilidad de que el bucle pueda no ser ejecutado. Para usar la estructura repetir debe estar seguro de que el cuerpo del bucle se repetir al menos una sola vez.

4.6.3. Estructura desde/para (for).

Concepto: Son el numero total de veces que se desea ejecutar las acciones del Bucle (numero de interacciones fijo), este ejecuta las acciones del cuerpo o del Bucle un numero especifico de veces y de modo automtico controla el numero de Interacciones o pasos a travs del cuerpo del bucle.

4.6.4. Salidas internas de los bucles.Concepto: Esta nueva estructura solo esta disponible en algunos lenguajes de programacin especficos la denominaremos salir o iterar para diferenciarla de repetir _hasta ya conocida .las estructuras de bucles suelen ser validas en estructuras mientras, repetir, desde .La estructura salir no produce un programa legible y comprensible mientras lo hacen mientras y repetir por lo que le recomendamos que no disponga nunca de esta estructura aunque el lenguaje a utilizar lo tenga.

4.7. Estructura de decisiones anidadas encajadas.Concepto: Estas estructuras si entonces y si entonces si_no implican la seleccin de una de las alternativas ya que tambin se puede disear estructuras de seleccin que contengan mas de dos alternativas; o sea pueden contener una u otra y as sucesivamente cualquier numero de veces , a su vez dentro de cada estructura pueden existir diferentes acciones.

A-10

APENDICE A

4.8. Estructura repetitivas anidadas.Reglas La estructura interna debe estar incluida debe estar incluida dentro de la externa y no puede existir solapamiento Tipos de Bucles anidados Bucles anidados Correctos

a)

b)

Bucles anidados incorrectos

c)

d)

Nota: Las variables ndices o de control de los bucles toman valores de modo tal que por cada valor de la variable ndice del ciclo externo se debe ejecutar totalmente el bucle internos .Es posible anidar cualquier tipo de estructura selectiva con tal que cumpla las condiciones de la grafica vista anteriormente

A-11

APENDICE A

4.9. La instruccin ir_a (goto).Aunque la instruccin ir_a (goto) la tienen todos los lenguajes de programacin en su Juego de instrucciones, existen mas que dependen de ella que de otros (BASICC, FORTRAN. En general, no existe ninguna necesidad de utilizar esta instruccin, ya que esta instruccin ha sido tema de confusin y controversia por lo que los Programadores recomiendan no utilizarla en sus algoritmos y programas PASCALHuye de esta instruccin considerndola como nefasta y no se utiliza- ya que es ms Difcil de leer y comprenderlo que otro mismo programa bien escrito, Solamente esta instruccin se recomienda utilizar en la salida de bucles.Las bifurcaciones o saltos Producidos por esta instruccin debe realizarse a programas o instrucciones que Estn enumeradas o que presenten otra referencia para el salto

A-12

APENDICE A

EJERCICIOS 4.1. Determinar la media de una lista indefinida de nmeros positivos, terminados con un Nmero negativo. 4.2. Dado el nombre o nmero de un mes y si el ao es o no bisiesto, deducir el nmero de das del mes. 4.3. Sumar los nmeros enteros de 1 a 100 mediante: a) estructura repetir b) estructura mientras c) estructura desde 4.4. Determinar la media de una lista de nmeros positivos terminada con un nmero no Positivo despus del ltimo nmero vlido. 4.5. Imprimir todos los nmeros primos entre 2 y 1000 inclusive. 4.6. Se desea leer las calificaciones de una clase de informtica y contar el nmero total de aprobados (5 o mayor que 5) 4.7. Leer las notas de una clase de Informtica y deducir todas aquellas que sean Notables (>= 7 y =3)A-13

APENDICE A

4.13. Se pretende leer todos los empleados de una empresa__situados en un archivo empresa__ y a la terminacin de la lectura del archivo se debe visualizar un Mensaje existen trabajadores mayores de 65 aos en un nmero de t trabajadores mayores de 65 aos. 4.14. Un capital c est situado a un tipo de inters R, al trmino de cuntos aos se Doblara? 4.15. Los empleados de una fbrica trabajan en dos turnos, diurno y nocturno.Se desea Calcular el jornal diario de acuerdo con los siguientes puntos: a) la tarifa de las horas diurnas es de 500 pesetas b) la tarifa de las horas nocturnas es de 800 pesetas c) caso de ser domingo, la tarifa se incrementar en 200 pesetas el turno diurno 300 Pesetas el turno nocturno. 4.16. Averiguar si dados dos nmeros ledos del teclado, uno es divisor de otro. 4.17. Se introduce la hora del da en horas, minutos y segundos desea escribir la hora correspondiente al siguiente segundo. 4.18. Se desea conocer una serie de datos de una empresa con 50 empleados: a) Cuntos empleados ganan ms de 300.000 pesetas al mes( salarios altos) b) entre 100.000 y 300.000 pesetas (salarios medios) c) Menos de 100.000 pesetas (salarios bajos empleados a tiempo parcial)? 4.19. Imprimir una tabla de multiplicar como ** 1* 2* 3* 4* . . . 15* 1 2 3 ** ** ** ** 1 2 3 2 4 6 3 6 9 4 8 12 4 4 8 12 16 ** 15 15 30 45 60

15

30

45

60

225

4.20. Dado un entero positivo n(>1),comprobar si es primo o completo .

A-14

APENDICE B

APUNTADORES EN C Y C++

APENDICE B

Apuntadores en C y C++Universidad de Carabobo Facultad Experimental de Ciencias y Tecnolog a Prof. Marcos A. Gil T. 8 de diciembre de 2004

1.

Introduccin o

Los apuntadores en C y C++ son una herramienta muy potente de programacin que suele causar mucha o confusin en los estudiantes que la estn aprendiendo. Adems, cuando los programadores cometen un error o a a en su utilizacin, puede ser muy dif encontrar el error, por lo cual es importante saber utilizarlos muy o cil bien. El uso de apuntadores en C y C++ es muy importante debido a que permite hacer los programas ms a ecientes y ms exibles. En en este art a culo se explica de una manera sencilla y breve todo lo referente a la utilizacin de apuntadores tanto en C como en C++. o Todo lo explicado en este art culo aplica tanto para C como para C++, a menos que se especique un lenguaje en particular. En algunos ejemplos de cdigo que son aplicables a C aparecen instrucciones de o entrada y salida de las librer estndar de C++. as a

2.

Denicin de apuntador o

Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y asocia el nombre de sta a la direccin de memoria desde donde comienzan los datos de esa variable. Las direcciones de memoria e o se suelen describir como nmeros en hexadecimal. u Un apuntador es una variable cuyo valor es la direccin de memoria de otra variable. Se dice que un o apuntador apunta a la variable cuyo valor se almacena a partir de la direccin de memoria que contiene el o apuntador. Por ejemplo, si un apuntador p almacena la direccin de una variable x, se dice que p apunta a o x .

3.

Referenciacin o

La referenciacin es la obtencin de la direccin de una variable. En C y C++ esto se hace a travs del o o o e operador &, aplicado a la variable a la cual se desea saber su direccin. Ntese que se trata de un operador o o unario. Ejemplo: Cdigo C y C++ o int x = 25; cout = 0; i--) { for (j = 1; j *n1); }

Revisa que he cambiado el tipo de datos del arreglo de int a long para mostrar los cambios necesarios en la funcin compare(). Dentro de bubble() he construido un arreglo con la variable t (la cual hemos tenido que cambiar del tipo de datos int al tipo long). He aadido un buffer de tamao 4 de tipo unsigned char, el cual es el tamao requerido para almacenar un entero largo (esto cambiar en futuras modificaciones al cdigo). El apuntador *bp de tipo unsigned char es usado para apuntar al inicio del arreglo a ordenar, es decir al primer elemento del arreglo. Tuvimos tambin que modificar lo que se le p asa a compare(), y el modo en que hacamos el intercambio de elementos cuando la comparacin indicaba que se haca el intercambio. El uso de memcpy() y de la notacin de punteros va en funcin de reducir la sensibilidad al tipo de datos. De nuevo, el hacer una revisin cuidadosa de bubble_5.c con bubble_4.c puede resultar muy provechoso para entender lo que est sucediendo y porqu. Vamos ahora con bubble_6.c donde usamos la misma funcin bubble() que usamos en bubble_5.c ahora para ordenar cadenas en lugar de nmeros enteros. Por supuesto que hemos tenido que modificar la funcin de comparacin ya que el modo de comparar cadenas es diferente del modo en que se comparan nmeros enteros. Tambin en bubble_6.c hemos removido las lneas que dentro de bubble() estaban como comentarios en bubble_5.c

44

C-44

APENDICE C

bubble_6.c/* Program bubble_6.c from PTRTUT10.HTM 6/13/97 */

#include #include

#define MAX_BUF 256

char arr2[5][20] = {

"Mickey Mouse", "Donald Duck", "Minnie Mouse", "Goofy", "Ted Jensen" };

void bubble(void *p, int width, int N); int compare(void *m, void *n);

int main(void) { int i; putchar('\n'); for (i = 0; i < 5; i++) { printf("%s\n", arr2[i]); } bubble(arr2, 20, 5); putchar('\n\n'); for (i = 0; i < 5; i++) { printf("%s\n", arr2[i]); } return 0; }

void bubble(void *p, int width, int N) { int i, j, k; unsigned char buf[MAX_BUF]; unsigned char *bp = p; for (i = N-1; i >= 0; i--) { for (j = 1; j 0) { memcpy(buf, bp + width*(j-1), width); memcpy(bp + width*(j-1), bp + j*width , width); memcpy(bp + j*width, buf, width); } } } }

int compare(void *m, void *n) { char *m1 = m; char *n1 = n; return (strcmp(m1,n1)); }

Pero el hecho de que bubble() no fuera modificada de aquella que usamos en bubble_5.c indica que esta funcin es capaz de ordenar una amplia variedad de tipos de datos. Lo que entonces hay que hacer es pasarle a bubble() el nombre de la funcin de comparacin a usar para que esta sea realmente universal. Al igual que el nombre de un arreglo es la direccin de su primer elemento en el segmento de datos, el nombre de una funcin se interpreta como la direccin de esa funcin en el segmento de cdigo. As que necesitamos un apuntador a una funcin. En este caso, la funcin de comparacin. Los punteros a funciones deben coincidir a las funciones apuntadas en el nmero y tipos de parmetros y en el tipo del valor regresado por la funcin. En nuestro caso, declaramos nuestro apuntador de funcin como:

int (*fptr) (const void *p1, const void *p2); Considera que si lo hubiramos escrito como:

int *fptr(const void *p1, const void *p2); obtendramos el prototipo de un funcin que regresa un puntero de tipo entero. Debido a que en C los parntesis tienen un orden de precedencia mayor que el operador de punteros *, al poner entre parntesis la cadena (*fptr) estamos indicando que estamos declarando un apuntador a una funcin. Ahora modifiquemos nuestra declaracin de bubble() al aadirle como 4 parmetro, un apuntador a una funcin del tipo apropiado. Entonces su prototipo queda como: void bubble(void *p, int width, int N, int(*fptr)(const void *, const void *)); Cuando llamemos a bubble(), insertaremos el nombre de la funcin de comparacin a utilizar. bubble_7.c demuestra cmo este mtodo permite el uso de la misma funcin bubble() para ordenar datos de diferentes tipos.

46

C-46

APENDICE C

bubble_7.c/* Program bubble_7.c from PTRTUT10.HTM #include #include 6/10/97 */

#define MAX_BUF 256

long arr[10] = { 3,6,1,2,3,8,4,1,7,2}; char arr2[5][20] = { "Mickey Mouse", "Donald Duck", "Minnie Mouse", "Goofy", "Ted Jensen" };

void bubble(void *p, int width, int N, int(*fptr)(const void *, const void *)); int compare_string(const void *m, const void *n); int compare_long(const void *m, const void *n);

int main(void) { int i; puts("\nAntes de ordenar:\n"); for (i = 0; i < 10; i++) { printf("%ld ",arr[i]); } puts("\n"); for (i = 0; i < 5; i++) { printf("%s\n", arr2[i]); } bubble(arr, 4, 10, compare_long); bubble(arr2, 20, 5, compare_string); puts("\n\nDespus de ordenar:\n"); for (i = 0; i < 10; i++) { printf("%d ",arr[i]); } puts("\n"); for (i = 0; i < 5; i++) { printf("%s\n", arr2[i]); } return 0; } /* mostramos los enteros largos */

/* mostramos las cadenas */

/* ordenamos los enteros largos */ /* ordenamos las cadenas */

/* mostramos los enteros largos ordenados */

/* mostramos las cadenas ya ordenadas */

47

C-47

APENDICE C

void bubble(void *p, int width, int N, int(*fptr)(const void *, const void *)) { int i, j, k; unsigned char buf[MAX_BUF]; unsigned char *bp = p; for (i = N-1; i >= 0; i--) { for (j = 1; j 0) { memcpy(buf, bp + width*(j-1), width); memcpy(bp + width*(j-1), bp + j*width , width); memcpy(bp + j*width, buf, width); } } } }

int compare_string(const void *m, const void *n) { char *m1 = (char *)m; char *n1 = (char *)n; return (strcmp(m1,n1)); }

int compare_long(const void *m, const void *n) { long *m1, *n1; m1 = (long *)m; n1 = (long *)n; return (*m1 > *n1); }

Referencias en el captulo 10: [1] Robert Sedgewick "Algorithms in C" Addison-Wesley ISBN 0-201-51425-7

48

C-48

APENDICE C

EPILOGOEscrib el presente material para dar una introduccin sobre los apuntadores a los que comienzan en C. En C, entre ms entienda uno sobre apuntadores, mayor ser la flexibilidad que se adquiera para escribir cdigo. El contenido de este trabajo expande lo que fue mi primer esfuerzo que tena por nombre ptr_help.txt y que se encontraba en una de las primeras versiones de la coleccin de SNIPPETS de C de Bob Stout. El contenido de esta versin se ha actualizado de aquella encontrada como PTRTUTOT.ZIP incluida en el archivo SNIP9510.ZIP. Estoy siempre dispuesto a recibir crtica constructiva sobre el presente material, o revisiones o peticiones para la adicin de otro material importante. Por tanto, si tienes preguntas, comentarios, crticas, etc. respecto de lo que en este documento se ha expuesto, me agradara mucho que me contactaras por medio de email a:

[email protected]

49

C-49

Bibliografa:BRASSARD, Gilles. Fundamentos de Algortmica. Edit. Prentice Hall. 1997. DEITEL, Harvey M. y Deitel, Paul J. Cmo Programar en C/C++. Edit. Prentice Hall. Mxico, 1999. 2a. edicin. FROSYTHE, Alexandra. Lenguajes de Diagramas de Flujo. Edit. Limusa. TERRENCE, W. Pratt. Lenguajes de Programacin. Edit. Prentice Hall. TREMBAY, Jean Paul. Introduccin a las Ciencias de las Computadoras, Enfoque Algortmico. Edit. Mc Graw Hill. AGUILAR, Joyanes Luis. Fundamentos de Programacin Algoritmos Y Estructura de Datos, Segunda Edicin Pgs. 714 ( 95- 161_ capitulo 4-) Edit. Mc Graw Hill. Salamanca 1996

Referencias:http://users.domaindlx.com/hqrdksm/DATOS/Algoritmo.pdf http://www.elprisma.com/apuntes/curso.asp?id=10502 http://www.cimat.mx/~alram/cpa/pointersC.pdf

http://www. netcom.com/~tjensen/ptr/cpoint.htm [email protected]