Professional Documents
Culture Documents
Rector Dr. Ing. Aurelio Padilla Ros Primer Vicerrector Geol. Jos S. Martnez Talledo Segundo Vicerrector Msc. Ing. Walter Zaldvar lvarez Primera edicin, mayo de 2012 Lenguaje de programacin estructurada y sus aplicaciones en Borland C++ 5.0.2 Impreso en el Per / Printed in Peru Teodoro Luciano Crdova Neri Derechos reservados Derechos de edicin Universidad Nacional de Ingeniera Editorial Universitaria
Av. Tpac Amaru 210, Rmac Lima Pabelln Central / Stano Telfs. 4814196 / 4811070 anexo 215 Correo-e: eduni@uni.edu.pe Jefe EDUNI: Prof. lvaro Montao Freire Coordinador Editorial: Nilton Zelada Minaya Impreso en la Imprenta de la Editorial Universitaria de la Universidad Nacional de Ingeniera ISBN 978-612-4072-23-9 Hecho el Depsito Legal en la Biblioteca Nacional del Per N 2011-13203 Prohibida la reproduccin de este libro por cualquier medio, total o parcialmente, sin permiso expreso del autor.
II
Palabras liminares
Me complace felicitar a los docentes de nuestra Universidad ganadores del II Concurso para la Publicacin de Libros de Texto convocado por el Rectorado y realizado en cada una de las Facultades. Una de las polticas medulares del Rectorado es la permanente mejora en la calidad acadmica, y en ese sentido nos interesa que cada docente tenga la oportunidad de convertir su labor cotidiana de enseanza en textos para uso de los estudiantes universitarios de todo el pas. Los autores han hecho un meritorio esfuerzo para organizar los temas de sus exposiciones, realizando investigaciones y consultando fuentes peruanas y extranjeras, as como recogiendo el fruto del dilogo con sus colegas y los propios estudiantes. Asimismo, se han esmerado en presentar sus cursos de manera que facilita el acceso por parte de los interesados. La publicacin de textos acadmicos es una de las obligaciones de toda universidad y uno de los ndices que se toma en cuenta para la evaluacin de la calidad acadmica. Por ende, seguiremos apoyando la publicacin de libros y revistas a travs de nuestra Editorial Universitaria, cuya meta es formar parte del liderazgo peruano en la industria editorial dedicada a ingeniera, ciencia y arquitectura. Es responsabilidad de la Universidad Nacional de Ingeniera aportar al Per un liderazgo de base tecnolgica que trabaje en estrecha asociacin con las autoridades gubernamentales, los dirigentes empresariales y la sociedad civil en su conjunto, lo cual requiere de una poltica editorial y de publicaciones que estamos impulsando.
III
IV
A mis padres Luis y Gliceria, gracias por todo. A Mara, mi compaera de siempre. A mis tres hijos, frutos del amor y compromiso con la vida...
VI
Reconocimiento y gratitud a todos mis maestros por su importante apoyo Profesional. Y en especial al Decano FIIS Mg. Luis Acua P. y al Ing. Carlos Chafloque E. por su apoyo
VII
VIII
ndice
Presentacin................................................................................................................XIII Introduccin.................................................................................................................XV Captulo I Generalidades................................................................................................................ 1 1.1 Introduccin......................................................................................................... .1 1.2 Introduccin a la programacin......................................................................... 1 1.3 Caractersticas de un algoritmo de computador.............................................. 2 1.4 Lenguajes de programacin................................................................................ 2 1.5 Lenguajes de mquina......................................................................................... 3 1.6 Lenguaje de bajo nivel.......................................................................................... 3 1.7 Lenguaje de alto nivel.......................................................................................... 3 1.8 Programa ejecutable............................................................................................. 3 1.9 Compilador............................................................................................................ 3 1.10 Palabras reservadas.............................................................................................. 3 1.11 Identificadores....................................................................................................... 4 1.12 Comentarios........................................................................................................... 4 1.13 Tipos de datos....................................................................................................... 5 1.14 Carcter (char)....................................................................................................... 5 1.15 Declaracin de constantes simblicas................................................................ 6 Captulo II Estructuras de control................................................................................................. 11 2.1 Estructuras secuenciales ................................................................................... 11 2.2 Estructuras selectivas condicionales................................................................ 16 2.2.1 Estructura selectiva simple............................................................................... .16 2.2.2 Estructura selectiva compuesta........................................................................ 18 2.2.3 Estructura condicional con anidamiento......................................................... 19 2.3 Estructuras mltiples......................................................................................... 21
IX
2.4 Estructuras repetitivas....................................................................................... 29 2.4.1 Estructura repetitiva con pretest de prueba................................................... 29 2.4.2 Estructura repetitiva con postest de prueba.................................................. 37 2.4.3 Estructura repetitiva cuando se conoce el nmero de iteraciones ............. 44 2.4.4 Estructuras mltiples mdulo de operaciones aritmticas....................... 85 Captulo III Estructuras de datos arrays...................................................................................... 123 3.1 3.2 3.3 3.4 Introduccin a las estructuras de datos......................................................... 124 Arraysunidimensionales: los vectores........................................................... 124 Operaciones con vectores: mtodos de ordenacin, insercin, eliminacin, bsquedas, crear sublistas, etc. Aplicaciones......................... 126 Arrays bidimensionales................................................................................... 149
Captulo IV Las cadenas de caracteres......................................................................................... 199 4.1 Introduccin...................................................................................................... 199 4.2 Punteros a cadenas........................................................................................... 200 4.3 Funciones para el tratamiento de cadenas:strlen(), strcat()........................ 202 4.4 Copia de cadenas:stpcpy(), strcpy(), strncpy()............................................. 204 4.5 Funciones para buscar un carcter en una cadena:strchr(), strrchr()........ 206 4.6 Funcin para reconocimiento de una porcin de cadena: strspn(), strcspn(), strpbrk() y strtok().......................................................................... 208 4.7 Funciones para la comparacin de cadenas: strcmp(), strnicmp(), stricmp()............................................................................................................. 210 4.8 Transformacin de cadenas: strset(), strnset().............................................. 213 4.9 Funciones para invertir cadenas:strxfrm(), strrev()..................................... 214 4.10 Conversin a maysculas y minsculas: strupr(),strlwr().......................... 215 4.11 Inclusin de una cadena en otra cadena........................................................ 215 Captulo V Programacin modular............................................................................................. 221 5.1 Introduccin...................................................................................................... 221 5.2 Funciones definidas por el usuario................................................................ 222 5.3 Declaracin y definicin de funciones........................................................... 224 5.4 Lista de parmetros y sus tipos de datos...................................................... 225 5.5 Variables locales y globales............................................................................. 226 5.6 Parmetros por defecto, valor......................................................................... 227 5.7 Funciones que llaman a funciones................................................................. 246 5.8 Funciones recursivas........................................................................................ 259
X
Captulo VI Registros..................................................................................................................... 273 6.1 6.2 6.3 6.4 6.5 6.6 Introduccin. Definiciones.............................................................................. 273 Definicin y declaracin de una estructura.................................................. 275 Variables registro (instancias)......................................................................... 275 Anidamiento de registros................................................................................ 276 Acceso a los elementos de una estructura..................................................... 276 Aplicaciones....................................................................................................... 277
Captulo VII Archivos (File)........................................... 307 7.1 Introduccin...................................................................................................... 308 7.2 Caractersticas de los archivos........................................................................ 308 7.3 Archivos (file).................................................................................................... 308 7.4 Apertura de archivos........................................................................................ 308 7.5 Clasificacin de archivos por tipo de contenido: texto, binarios............... 309 7.5.1 Archivos de texto.............................................................................................. 309 7.5.2 Archivos binarios.............................................................................................. 309 7.6 Clasificacin de archivos por tipo de acceso................................................. 310 7.6.1 Archivos secuenciales....................................................................................... 310 7.6.2 Archivos directos: acceso aleatorio ............................................................... 310 7.7 Direcciones lgicas y direcciones fsicas........................................................ 310 7.8 Clculo de direcciones fsicas.......................................................................... 311 7.9 Funciones para el manejo de archivos........................................................... 311 7.10 Declaracin de la variable lgica (alias) del archivo................................ 311 7.11 Funcin para procesar archivos...................................................................... 311 7.12 Validar la apertura de un archivo................................................................... 312 7.13 Cierre de archivos usando fclose() y fcloseall()............................................ 312 7.14 Escritura de registros usando fwrite()........................................................... 313 7.15 Vaciando los buffers usando fflush ()........................................................... 313 7.16 Lectura de registros usando fread ().............................................................. 313 7.17 Funcin para acceso de archivo...................................................................... 313 7.18 Conocer posicin del apuntador del archivo:funcin ftell()...................... 314 7.19 Posicionando apuntador al inicio del archivo: rewind()............................. 314 7.20 Detectando el final del archivo con feof()...................................................... 314 7.21 Cambio de nombre de archivo rename()....................................................... 314 7.22 Eliminando archivos con la funcin remove().............................................. 315
XI
Captulo VIII Programacin dinmica........................................................................................... 327 8.1 Programacin dinmica:punteros.................................................................. 327 8.2 Creacin de un puntero................................................................................... 328 8.3 Operadores........................................................................................................ 328 8.4 Inicializacin de un puntero............................................................................ 329 8.5 Lista..................................................................................................................... 332 8.6 Pila....................................................................................................................... 332 8.7 Punteros nivel RAM......................................................................................... 336 8.8 Punteros y archivos......................................................................................... 346 8.9 Compendio de problemas............................................................................... 349 Bibliografa.................................................................................................................. 357 ndice temtico. ............. 359
XII
Presentacin
En el milenio pasado, como en el actual, se exige constantemente a la universidad elevar su calidad acadmica, especialmente la formacin profesional que est relacionada directamente con la formacin del docente universitario. En general, el paradigma de la docencia universitaria est ligado a dos variables: el dominio y experiencia de la especialidad profesional y el conocimiento y praxis del proceso de enseanza - aprendizaje en sus asignaturas correspondientes. Dentro de este contexto, felicito a las autoridades de la Universidad y al ente normativo de promocionar actividades estratgicas en el sector acadmico, tales como la publicacin de textos universitarios, actividad estratgica que beneficia a la universidad como al docente, debido que en conjunto se est cumpliendo con el perfil de la universidad: Ciencia Tecnologa y Sociedad (CTS). Respecto al docente, estamos en la responsabilidad de proporcionar un conjunto de enfoques didcticos relacionados con nuestro rol universitario, donde el proceso de enseanza - aprendizaje, mtodos, tcnicas y evaluacin, engloben las TICS buscando mejoras continuas. En este sentido, como docente de la asignatura Lenguaje de Programacin Estructurada, asignatura obligatoria que forma parte del plan curricular de vuestra Facultad, presento el texto denominado Aplicaciones en Borland C++ 5.02 Programacion Estructurada, organizado y diseado con base en la experiencia de ms de 20 aos comprometido con el concepto de programacin en lenguajes estructurados. Esperando que la lectura, anlisis y reflexin de la antologa que presento sirva para acrecentar el espritu de renovacin institucional, de innovacin profesional continua y que obviamente trascender al mejor aprendizaje y alta calidad acadmica de nuestros alumnos, cuando adems de la enseanza presencial, tambin se dispongan de herramientas didcticas: libros, clases on line, etc. El autor
XIII
XIV
Introduccin
El comit para el estndar ANSI C se form en el ao 1983 con el objetivo de crear un lenguaje uniforme a partir del Lenguaje de Programacin C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Respecto a C++ comenz a desarrollarse en 1980 por B. Stroustrup. Al comienzo era una extensin del lenguaje C, que fue denominada C with classes. Este nuevo lenguaje comenz a ser utilizado fuera de la AT&T en 1983. Ante la gran difusin y xito que iba obteniendo en el mundo de los programadores, la AT&T comenz a estandarizarlo internamente en 1987. En 1989 se form un comit ANSI para estandarizarlo a nivel internacional. En la actualidad, el C++ es un lenguaje verstil, potente y general. Su xito entre los programadores permite ocupar el primer puesto como herramienta de desarrollo de aplicaciones, pues mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, conciso y eficiencia. Adems, ha eliminado muchas de las dificultades y limitaciones que tiene C original. La evolucin de C++ ha continuado con la aparicin de Java, un lenguaje creado simplificando algunas partes de C++ y aadiendo otras, que se utiliza en la presente dcada para realizar aplicaciones en internet. El C++ se presenta como: 1. Lenguaje de programacin procedural (orientado a algoritmos) y por cumplir con las normas de poseer las tres estructuras de control (secuenciales, condicionales/ mltiples y repetitivas). 2. Lenguaje orientado a objetos (objectoriented programming, OOP). Como lenguaje procesal se asemeja al C y es compatible con l. Este nivel de programacin admite una filosofa completamente diferente, que exige del programador un completo cambio de mentalidad. Las caractersticas propias de la programacin orientada a objetos, este tema es el ms fascinante, pues C++ cambia radicalmente su pensamiento de programacin. Cabe notar que un programa fuente diseado a nivel C++, no compila en C, pero lo contrario s se cumple. Adems de las estructuras del control, tambin disponen de estructuras de datos en forma legible al usuario, tales como: listas o
XV
vectores, tablas o matrices, etc. Asimismo, los registros (struct), uniones, archivos (FILE), programacin dinmica (punteros), procesamiento de cadenas basadas fuertemente en funciones (strcmp, struppr, etc.). El presente texto est basado en experiencias obtenidas por ms de dcada y media, dictando asignaturas en las escuelas de Ingeniera de Sistemas, Computacin e Informtica de las diferentes universidad del Per (Universidad Nacional de Ingeniera - Facultad de Ingeniera Industrial y de Sistemas), Universidad de San Martn, Universidad Antnez de Mayolo, Universidad Tecnolgica del Per, Universidad San Martn de Porres, etc.). Me es grato agradecer las sugerencias de colegas que, en su debida oportunidad, aportaron con sus opiniones para la mejora del presente libro. El autor
XVI
Captulo 1
Generalidades
Objetivos
- Conocer la biblioteca standard de Borland C++ 5.02. - Dar fundamentos para el estudio de otros lenguajes de programacin en general y aplicarlos para java, etc. - Comprender la programacin de nivel estructurada. - Comprender las tcnicas bsicas para resolver problemas. - Desarrollar programas usando las tcnicas de tipo top-down (de arriba abajo) - Usar los operadores lgicos, relacionales, funciones resto y parte entera. - Usar los tipos de datos enteros, reales, cadenas, booleanos.
Dato. Es la representacin de algn hecho, concepto o entidad real. Informacin. Es el resultado del procesamiento de los datos. Observacin. Para este curso no haremos distincin entre dato e informacin sino que hablaremos de datos de entrada y datos de salida. Proceso de informacin en una computadora Una computadora est compuesta por dos elementos fundamentales: hardware y software. Hardware. Est constituido por la parte fsica de la computadora. Es aquello que podemos ver y tocar. Est formado por el monitor, el teclado, el mouse, la unidad del sistema, la impresora, etc. Software. Es la parte lgica de la computadora y est formado por el conjunto de programas que controlan el funcionamiento de la computadora. Organizacin fsica de una computadora El software es el conjunto de datos y programas que usa la computadora y se guardan en algn dispositivo del hardware, por ejemplo, un disco duro. Programa. Es un conjunto detallado de instrucciones que instruyen al procesador para realizar determinados procesos. Los datos pueden ser cualquier informacin que necesite el programa: caracteres, nmeros, imgenes, etc. Algoritmo. Es un conjunto de reglas o procedimientos que permiten obtener un resultado determinado a partir de ciertas reglas definidas por el programador.
por el procesador, sino que requieren de pasos intermedios de traduccin e interpretacin para convertir. Estas instrucciones al lenguaje del procesador, conocido como lenguaje mquina. Podemos citar como lenguajes de programacin a Pascal, borlandc++ 5.02, etc.
1.9 Compilador
Es una herramienta bsica en el mantenimiento y mejora del sistema operativo. Por ello este producto est en constante evolucin, ya que de su buen rendimiento depende en parte el del sistema.
Ejemplos: break do enum int typedef bool double for private while case else if sizeof
1.11 Identificadores
Son secuencias de caracteres que representan a las variables, constantes, tipos, funciones, clases y etiquetas en un programa. En C++, un identificador vlido debe cumplir con lo siguiente: Reglas 13.1. Debe estar formado solamente por letras maysculas (de la A a la Z), o letras minsculas (de la a a la z) Adicionalmente puede combinarse con el carcter subrayado ( _ ). Ejemplo : pc, prom_pc, cont, _nombre. 13.2. Usar dgitos del 0 al 9. Debe comenzar con una letra o letras (nunca con nmeros). Ejemplo: pc_01, prom_pc, cont, Lab1, etc. 13.3. Puede comenzar con un subrayado, pero las palabras que comienzan con dos subrayados son reservadas para el uso interno del compilador. 13.4. No debe contener espacios en blanco, use el subrayado ( _ ) en vez de blancos. 13.5. No usar palabras reservadas del compilador. Ejemplos de identificadores no vlidos: 3pc: comienza con un nmero nombre apellidos: contiene un espacio en blanco _i_y: comienza con dos subrayados x*y: contiene un carcter no vlido (*) do: es una palabra reservada Nota: C++ es sensible al uso de las maysculas y minsculas. As, A es diferente de a.
1.12 Comentarios
Son explicaciones literales que sirven para aumentar la legibilidad de los programas. Estas son ignoradas totalmente por el compilador. En C++, se puede colocar comentarios en cualquier parte del programa donde sea posible, de dos maneras: 14.1 Mediante dos barras inclinadas (//), para comentarios de una lnea.
4
14.2 Por los delimitadores (/*..*/) para comentarios de una o ms lneas. Ejemplo:// comenta respecto a una linea: /* Comenta respecto a una lnea o varias lneas:
Constantes cadena (char * o char[]) Son secuencias de caracteres encerrados entre comillas: Lenguajes de Programacion, Borland C++ 5.0.2 Tambin se pueden incluir secuencias de escape: \tEstudiar, es una etapa de sabidurias \n
Operadores.- Tienen una gran utilidad durante la programacin, considerando su prioridad de evaluacin de operadores y su significado. En la siguiente grfica, se ilustra la sintaxis y el uso respectivo.
Lenguaje de programacin estructurada y sus aplicaciones en Borland C++ 5.0.2 Categora Negacin Contador Incremento Contador Disminuir Multiplicar Dividir Resto Operadores relacionales Operador ! ++ -* / % < <= > >= Igualdad y O Condicional Asignacin == != && || ?: = Significado Negacin lgica (NOT) Preincremento o posincremento Predecremento o posdecremento Multiplicacin Divisin Mdulo (resto) Menor que Ejemplo !(n<11) //si n es menor que 11,devuelve falso (0) n++ usa n y luego incrementa en 1 ++n // incrementa n en 1 y luego lo usa n --n// n disminuye en 1
a * b //Multiplica a por b. a/b // divide a entre b a%b // devuelve el mdulo de la divisin entera de a y b (que deben ser enteros) a < b // devuelve verdadero si a es menor que b. los otros son similares
Menor o igual que a <= b Mayor que Igualdad Desigualdad y Lgico (AND) oLgico (OR) Condicional abreviado Asignacin Asignar producto Asignar divisin Asignar mdulo Asignar suma c>d 5 == 3 // devuelve falso a!=13 ((5<13)&&(5>=4)) //Devuelve verdadero (mivar==hola) || (3<5) //Devuelve verdadero (a<b) ? a++:a-- //Si a<b, a se aumenta en 1 Sino se disminuye en 1 x = 5 //A x se le asigna el valor entero 5 (x5) m*=3 //Equivale a m = m * 3 e/=d //Equivale a e = e / d t%=2//Equivale a t = t % 2 g+=7 //Equivale a g = g + 7 Mayor o igual que d >= e
Expresiones: *= /= %= +=
# define pi 3.14 // Prototipo de funciones tipo_datonomb_ funcion (lista_argumentos); ................................................. // Declaracion de variables globales inta,b,c; // Declaracin y definicin de funciones: Implementacin tipo_datonomb_funcion(lista__de_argumentos) { Declaraciones locales <Instrucciones >; return(expresin_de_tipo_dato); } tipo_nfuncion_n(lista_de_argumentos) { <dem caso de la funcion1>; } / /Programa principal voidmain() { Declaraciones sobre variables locales al proceso principal <Instrucciones>; Nomb_funcion(lista_de_argumentos); -------------------------------------------- funcion_n(lista_de_argumentos); return(0); } Como se observa el esquema ms empleado para un programa en C++ se compone bsicamente por: 1. Directivas 2. Declaracin y definicin de funciones secundarias definidas por el usuario 3. Una funcin principal main() Notas: 1. La funcin principal o main() regresa un valor 0 al sistema operativo para indicar que el proceso termin exitosamente, cuando ocurre algn tipo de error regresar algn otro valor entero. Si no se requiere que main devuelva algn valor, se escribe voidmain() y se omite return0; 2. Si desea retornar un valor entero, entonces defina el tipo de dato delante de la funcin respectiva. intmain() { return 0; }
Las dems funciones, por lo general son llamadas a ejecucin dentro del mbito de nuestra funcin principal y por consiguiente, ah pueden regresar valores. Observacin: Durante el diseo de los programas solo especificar una librera de entrada y de salida: # include<iostream.h> Las dems libreras el usuario definir segn su requerimiento.