Libro Fundamentos de Programación

180
PRIMERA EDICIÓN FUNDAMENTOS DE PROGRAMACIÓN EDELFRÉ FLORES VELÁSQUEZ Universidad Nacional del Altiplano Escuela Profesional de Ingeniería de Sistemas Perú - 2010

Transcript of Libro Fundamentos de Programación

Page 1: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 1/180

PRIMERA EDICIÓN

FUNDAMENTOS

DE PROGRAMACIÓN

EDELFRÉ FLORES VELÁSQUEZ

Universidad Nacional del AltiplanoEscuela Profesional de Ingeniería de Sistemas

Perú - 2010

Page 2: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 2/180

Page 3: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 3/180

Las computadoras, son hoy más que nunca, parte de nuestro quehacer dia-rio, nadie puede imaginarse un mundo sin ellas y sin las redes de compu-tadoras o sin internet, que son parte de nuestra vida y modican la formaen que nos relacionamos con nuestros semejantes, acortan las distanciasy nos llevan hacia otros mundos; pero, estas computadoras y redes mun-diales requieren de instrucciones precisas y comprensibles, es decir de losprogramas de computadoras, que son realmente el alma de estas máquinasy es el programador quien imagina mundos posibles y los hace realidad.

La programación de las computadoras, es uno de los requisitos esencialespara cualquier estudiante o profesional dentro del área de sistemas, infor-

mática o computación, pues nos provee la herramienta principal con el quetrabaja este profesional, no podemos imaginarnos un mundo sin equiposde cómputo, sin redes interconectas, sin internet; pero todo esto es posiblegracias a que existen personas encargadas de diseñar, implementar y ponera prueba sistemas de cómputo, que en su lado palpable se tienen los algo-ritmos y los programas, en algún lenguaje de programación que hacen queestos equipos, funcionen pero que sean transparentes para el usuario.

El presente texto, busca incursionar al estudiante en este mundo apasionan-

te, de dar instrucciones al computador y que éste le entienda y obedezca, esdecir, al de la programación de computadoras en sus fundamentos y hacer,que el estudiante tenga los conocimientos iniciales necesarios para poderenfrentar los retos futuros en el desarrollo de complejos software que seránen benecio de la humanidad. Este libro FUNDAMENTOS DE PROGRA-MACIÓN, pretende llevarlo paso a paso, a conocer el fascinante mundode la programación de computadores, utilizando como base el lenguaje deprogramación C, para ello se ha dividido en 10 capítulos, los cuales abordanAlgoritmos y programas, programación estructurada, lenguaje de progra-

mación C, entrada y salida de datos, tipos de datos, operadores, sentenciasde control, arrays, funciones, cadenas, recursividad y punteros.

3

Introducción

Page 4: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 4/180

Las herramientas que se utilizan para la implementación de los diagramasde ujo de datos son el Free DFD, una herramienta que permite diseñar,implementar y ejecutar algoritmos en un entorno gráco, pero de forma simi-lar a un lenguaje de programación, pues el IDE cuenta con un entorno muyamigable y que facilita el aprendizaje visual para los estudiantes. Tambiénse utiliza el software PseInt, un software para el diseño, implementación yejecución de un pseudocódigo, lo que facilita el acostumbrarse a la sintaxis,compilación y ejecución de un programa; así como, a la depuración en casode errores, esto de forma muy similar a un lenguaje de programación, peroademás en el lenguaje español, este software además permite visualizarel algoritmo en un diagrama de ujo de datos, el cual puede importarse enformatos grácos. Un aspecto muy importante de estas dos herramientas es

que están basadas en la losofía del software libre, esto nos ahorra recursoseconómicos y es aplicable en cualquier institución educativa.

Para el trabajo de programación en lenguaje C, se hace uso del softwareDEV C++, herramienta también basada en la losofía de software libre yque nos brinda un entorno de desarrollo amigable, potente, profesional yde gran calidad para la implementación de los programas en el lenguaje deprogramación C.

Este texto pretende ser una guía tanto para el docente, como para el estu-diante del área de sistemas, informática o computación, por lo cual, en lapágina: www.infowasi.com, se ofrece material complementario como pre-sentaciones de los temas del libro, el código fuente de los ejercicios resuel-tos, incluyendo otros recursos como los links a los software utilizados en eltexto. Además, para el docente se propone guías de prácticas de laboratoriopor cada capítulo, esperando que sea considerado un recurso didáctico detrabajo y siempre estaremos a la espera de sus sugerencias y aportes.

El autor.

4

Page 5: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 5/180

1. Algoritmos y programas  1.1 Conceptos básicos 9

  1.2 Programa 11

  1.3 Resolución de problemas 14

  1.4 Herramientas de programación 15

  1.5 Variables y operadores 20

  1.6 Identicadores y palabras reservadas 21

  1.7 Funciones internas 24

  1.8 Asignación 25

2. Programación Estructurada

  2.1 ¿Qué es la programación estructurada? 35

  2.2 Estructuras secuenciales 35

  2.3 Estructuras selectivas 36

  2.4 Estructuras repetitivas 37

  2.5 Ejercicios resueltos 41

3. Lenguaje de Programación C

  3.1 Lenguaje C 53

  3.2 Elementos de programación en C 55

  3.3 Componentes sintácticos 56

  3.4 El primer programa en C: Hola Mundo 62

4. Entra- Salida y Tipos de Datos

  4.1 Salida por monitor 65

  4.2 Entrada de datos 67  4.3 Tipos de datos 68

  4.4 Declaración de variables 70

  4.5 Sentencias de asignación 71

  4.6 Constantes 71

  4.7 Ejercicios de programación resueltos 71

5. Sentencias de control en C

Indice

5

Page 6: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 6/180

  5.1 Sentencias condicionales 77

  5.2 Bucles81 77

  5.3 Ejercicios de programación resueltos 81

6. Arrays  6.1 ¿Qué es un array? 97

  6.2 Operaciones con arrays 99

  6.3 Array bidimensional (matrices) 102

  6.4 Ejercicios de programación resueltos 104

7. Funciones en C

  7.1 ¿Qué son las funciones? 111

  7.2 Clases de funciones 112  7.3 Ambito de las variables 114

  7.4 Argumento de funciones 116

  7.5 Ejercicios de programación resueltos 119

8. Strings o Cadenas

  8.1 ¿Qué son los Strings? 129

  8.2 Operaciones con cadenas 130

  8.3 Funciones de cadenas 132  8.4 Ejercicios de programación resueltos 135

9 Recursividad

  9.1 Funciones recursivas 139

  9.2 Diseño de programas recursivos 140

  9.3 Ejecución de un módulo recursivo 140

  9.4 Ejercicios de programación resueltos 142

10. Punteros

  10.1 ¿Qué es un puntero? 147

  10.2 Declaración, asignación y tipos de punteros 147

  10.3 Punteros a punteros 151

  10.4 Punteros y arrays 151

  10.5 Aritmética de punteros 152

  10.6 Punteros y cadenas 154

  10.7 Ejercicios de programación resueltos 155

6

Page 7: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 7/180

11. Estructuras

11.1 Introducción 161

  11.2 ¿Qué es una estructura? 161

  11.3 Declaración de una estructura 162  11.4 Denición de variables estructura 163

  11.5 Uso de estructuras en asignación 163

  11.6 Acceso a estructuras 164

  11.7 Arreglo de estructuras 165

  11.8 Ejercicios de programación resueltos 166

Bibliografía

Apéndices

7

Page 8: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 8/180

8

Page 9: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 9/180

1.1 CONCEPTOS BÁSICOS:

a) Qué es un algoritmo:

Es una secuencia de pasos que nos llevan a la solución de un problema. Unalgoritmo es un método para resolver un problema mediante una serie depasos denidos. Según, la Real Academia, es un conjunto ordenado y nitode operaciones que permite encontrar la solución a un problema cualquiera.Esta palabra tiene su origen en el nombre de un famoso matemático y erudi-to árabe del siglo IX, Al-Khorezmi, a quien también le debemos las palabrasguarismo y álgebra. Actualmente, algoritmo se usa para denominar a lasecuencia de pasos a seguir para resolver un problema usando un computa-

dor (ordenador). Por esta razón, la algoritmia o ciencia de los algoritmos, esuno de los pilares de la informática (ciencia de la computación en inglés).

Ejemplo: Algoritmo para cruzar la calle:

 

Inicio1.

Mirar a la derecha y a la izquierda2.

Mientras pasen carros3.

Esperar4.

Mirar a la derecha y a la izquierda5.

Fin mientras6.

Cruzar la calle7.

Fin8.

b) Características de los algoritmos:

Debe ser preciso, es decir se debe indicar el orden de realización de•cada paso, además, no da cabida a interpretaciones y maneja cantida-

des exactas.Debe estar denido, es decir debe obtenerse un mismo resultado, no•

9

1Algoritmos y Programas

Page 10: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 10/180

importa el número de veces que sea ejecutado.Debe ser nito, si se sigue un algoritmo debe terminar en algún mo-•mento.

c) Estructura de un algoritmo:En un algoritmo se deben de considerar tres partes:

 

E P S

Entrada: Información dada al algoritmo.• Proceso: Operaciones o cálculos necesarios para encontrar la solu-•ción del problema.Salida: Respuestas dadas por el algoritmo o resultados nales de los•procesos realizados.

Especicaciones de entrada  ¿Que datos son de entrada?  ¿Cuántos datos se introducirán?

  ¿Cuántos son datos de entrada válidos?  ¿Qué formato y tipo tendrá el dato de entrada?Especicaciones de proceso  ¿Qué operaciones se realizarán con los datos de entrada?  ¿En qué orden se realizarán las operaciones?  ¿Cuántas soluciones tendrá el algoritmo?Especicaciones de salida  ¿Cuáles son los datos de salida?  ¿Cuántos datos de salida se producirán?  ¿Qué formato y precisión tendrán los resultados?

Se debe notar también que, es necesario una etapa de retroalimentación,en donde se verique que los datos de entrada generan los datos de salidaesperados, en donde se pueda realizar el pulido de los procesos, cálculos ysoluciones del algoritmo.

d) Lenguaje de un algoritmo:

El lenguaje utilizado por un algoritmo debe ser independiente de cualquier

10

Fundamentos de Programación

Page 11: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 11/180

1: Algoritmos y Programas

lenguaje de programación y muy pegado al lenguaje de las personas, comoel español o el inglés. Esta clase de lenguaje natural (lenguaje humano) enla mayoría de veces es el lenguaje del programador.

e) Verifcación de un algoritmo

Para vericar un algoritmo se realiza mediante la ejecución manual usandodatos signicativos. A lo cual se llama normalmente prueba de escritorio, endonde se simula datos de entrada y luego se procesa la información paraobtener datos de salida que deben coincidir con situaciones de la vida real.

1.2 PROGRAMA:

Se llama programa a un algoritmo que ha sido expresado en un lenguaje deprogramación, por tanto, es un conjunto de instrucciones (órdenes dadas ala computadora) que producirán la ejecución de una determinada tarea parasolucionar un problema determinado.

Lenguaje de programación:

Es el software especíco para escribir programas, que tiene una forma espe-cíca de escritura, es decir cuenta con una sintaxis y semántica determina-

da que es lo que diferencian de un lenguaje de otro. Existen toda una seriede lenguajes de programación, incluyendo los tipos funcional, estructurado,orientado a objetos, lógicos, etc. También se pueden clasicar como de altonivel, nivel medio y de bajo nivel, que se diferencian por el uso del lenguajehumano o máquina en su estructura, como muestra el siguiente cuadro:

Alto nivel+ Lenguaje humano- Lenguaje máquina

AdaModula – 2PascalCobolFORTRANBasic

Nivel medio CFORTHMacro-ensamblador 

Bajo nivel- Lenguaje humano+ Lenguaje máquina

Lenguaje ensamblador 

11

Page 12: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 12/180

Traductores de lenguajes:

Los traductores de lenguajes son programas de traducen los programasfuente o código fuente escritos en lenguajes de alto nivel a código máqui-

na.

Los traductores se dividen en:Compiladores e•Interpretes.•

a) Interpretes:Un intérprete es un traductor que toma un programa fuente, lo traduce y acontinuación lo ejecuta. Este proceso lo realiza línea por línea. Un lenguaje

típicamente interpretado es el BASIC.

Programa fuente

Interprete

Traducción y ejecuciónlínea a línea

b) Compiladores:Un compilador es un programa que traduce los programas fuente escritosen lenguaje de alto nivel a lenguaje máquina. El programa escrito en lengua-

 je de alto nivel se llama programa fuente y el programa traducido se llamaprograma objeto o código objeto. Lo lenguajes compiladores típicos son: C,C++, PASCAL, FORTRAN, COBOL, etc.

12

Fundamentos de Programación

Page 13: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 13/180

1: Algoritmos y Programas

Programa fuente

Compilador 

Programa objeto

Compilación de un programa:Una vez que el algoritmo se ha convertido en algún programa con códigofuente es preciso introducirlo en la memoria almacenándolo en un disco,esta operación se realiza con un programa editor, posteriormente el progra-ma fuente se convierte en un archivo de programa y se almacena para suuso posterior. El programa fuente debe ser traducido en un lenguaje máqui-na (binario), por lo que este proceso lo realiza un compilador en conjuncióncon el sistema operativo el cual se encarga de una parte de la compilación.Si tras la compilación se presentan errores en el programa fuente, es preci-

so volver a editar el programa de nuevo, este proceso se repite hasta que nose producen errores y el programa obtenido es transformado a un programaobjeto, el cual, no es todavía completamente ejecutable. Suponiendo que noexisten errores en el programa fuente, se debe instruir al sistema operativopara que realice la fase de montaje o también llamada link que no es masque la unión o adhesión de las librerías del programa del compilador. Esteproceso de montaje da como resultado un archivo ejecutable.

Fases de la compilación

Programa fuente Compilador  Programa objeto

Enlazador (linker)Programa ejecutable

13

Page 14: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 14/180

14

Depuración de un programa:

Es el proceso de encontrar los errores del programa y corregir o eliminardichos errores. Cuando se ejecuta un programa pueden producirse 3 tipos

de errores:

1.- Error de Compilación:Se producen normalmente por un uso incorrecto de las reglas del lenguajede programación y suelen ser errores de sintaxis o escritura. Si existe unerror de sintaxis, la computadora no puede entender la instrucción y no seobtendrá el programa objeto, el compilador imprimirá una lista de erroresencontrados, ya que ese es su trabajo.

2.- Errores de Ejecución:Estos errores se producen por instrucciones que la computadora entiendepero no ejecuta; por ejemplo la división de cero, raíces cuadradas a númerosnegativos, etc.. En estos casos el programa se detiene y se marca error.

3.- Errores Lógicos:Se producen en la lógica del programa y la fuente del error suele ser unamala implementación o diseño del algoritmo. Estos errores son los mas difí -ciles de detectar, ya que el programa puede funcionar y no producir errores,pero se obtienen resultados incorrectos. En este caso es necesario volver adiseñar el algoritmo y realizarlo de nuevo.

1.3 RESOLUCIÓN DE PROBLEMAS:

La principal razón para que las personas aprendan lenguajes de progra-mación es utilizar un ordenador como una herramienta para la resoluciónde problemas. Dos fases pueden ser identicadas en el proceso de resolu-ción:- Fase de resolución del problema- Fase de implementación en un lenguaje de programación

a) Fase de resolución del problemaEsta fase incluye, a su vez, el análisis del problema, así como el diseño yposterior vericación del algoritmo.

  Análisis del problema

El primer paso para encontrar la solución a un problema es el análisis delmismo. Se debe examinar cuidadosamente el problema a n de obtener una

14

Fundamentos de Programación

Page 15: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 15/180

1: Introducción

15

1: Algoritmos y Programas

idea clara sobre lo que se solicita y determinar los datos necesarios paraconseguirlo.

  Diseño del algoritmo

Un algoritmo puede ser denido como la secuencia ordenada de pasos, sinambigüedades, que conducen a la resolución de un problema dado y expre-sado en lenguaje natural, por ejemplo el castellano.

  Verifcación de algoritmosUna vez que se ha terminado de escribir un algoritmo es necesario compro-bar que realiza las tareas para las que se ha diseñado y produce el resultadocorrecto y esperado. El modo más normal de comprobar un algoritmo esmediante su ejecución manual, usando datos signicativos que abarquen

todo el posible rango de valores y anotando en una hoja de papel las modi-caciones que se den estos datos y en los del resto del algoritmo, en las di-ferentes fases hasta la obtención de los resultados. Este proceso se conocecomo prueba del algoritmo.

b) Fase de implementaciónUna vez que el algoritmo está diseñado, representado mediante seudocódi-go y vericado se debe pasar a la fase de codicación o traducción del algo-ritmo a un determinado lenguaje de programación, que deberá ser comple-

tada con la ejecución y comprobación del programa en el ordenador.

1.4 HERRAMIENTAS DE PROGRAMACIÓN:

Existen diversas herramientas para diseñar algoritmos entre las cuales seencuentran:

Los diagramas de ujo•El Pseudocódigo y•Los Diagramas de Nassi Shneider. (N-S)•

a) DIAGRAMAS DE FLUJO

Son diagramas que utilizan símbolos como rectángulos, líneas, etc. Y en elque cada paso del algoritmo se visualiza dentro del símbolo adecuado y enel orden se indica mediante echas.

En un digrama de ujo:Existe una caja etiquetada “Inicio” que es de tipo elíptico e indica el•

15

Page 16: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 16/180

punto de partida del algoritmo.Existe otra caja etiquetad “Fin” de igual forma que la anterior, e indi-•ca el punto donde naliza el algoritmo.Existen otras cajas, normalmente son rectangulares, rombos o pa-•

ralelogramos, e indican la entrada de datos, el proceso y la salida oresultado del algoritmo.Se puede escribir más de un paso del algoritmo en una sola caja•rectangular.

En forma general se muestra su representación en el siguiente cuadro:

Símbolo Denominación Descripción

Terminal Representa el inicio o el naldel algoritmo

Entrada/Salida Cualquier tipo de introducciónde datos en la memoria desdelos periféricos

Procesos Cualquier tipo de operaciónque produce cambios en losvalores.

Decisión Indica operaciones lógicas ode comparación entre datos.

Decisión múlti-ple

De acuerdo a la comparaciónse seguirá uno de los diferen-tes caminos.

Conector Para enlazar dos partes cua-lesquiera.

Indicadores dedirección

Indican el sentido de la ejecu-ción de las operaciones

Línea conectara Une dos símbolos

Llamada asubrutinas

Módulo independiente del pro-grama.

16

Fundamentos de Programación

Page 17: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 17/180

1: Algoritmos y Programas

Teclado Puede reemplazar al símbolode entrada y salida.

Comentario Para añadir aclaraciones quehagan que el algoritmo seamás comprensible.

En el presente texto, hacemos uso del software FreeDFD que en su nota-ción utiliza la siguiente simbología:

Símbolo Descripción

Inicio y Fin del algoritmo

Asignación

Lectura

Decisión

Salida

Ciclo mientras

17

Page 18: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 18/180

Ciclo para

Sub programa

A continuación mostramos un ejemplo de un diagrama de ujo de datos,haciendo uso del software FreeDFD.

Para ejecutar el algoritmo es necesario seleccionar la opción “Ejecutar“, enel gráco mostramos la barra de herramientas del software FreeDFD.

Luego, se obtiene la ventana de “Entrada de valores por teclado”, en dondese ingresa los valores de entrada, con los cuales se realizará el proceso yluego se obtiene, la ventana de “Salida por pantalla“, en donde se muestra

la salida del algoritmo.

18

Fundamentos de Programación

Page 19: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 19/180

1: Algoritmos y Programas

Ventana de FreDFD de entrada de valorespor teclado

  Ventana de FreeDFD de Salida por pantalla

b) PSEUDOCÓDIGO

Es la técnica que permite la solución de un problema mediante un algoritmoescrito en palabras normales de un idioma (por ejemplo, el español). Esla narración del proceso en palabras imperativas. Es común encontrar enpseudocódigo palabras como: inicie, lea, imprima, sume, divida, calcule. Nohay un léxico obligado para el pseudocódigo, pero con el uso frecuente sehan establecido algunos estándares.

Fue concebido para superar las dos grandes desventajas de los diagramasde ujo: que son lentos de crear y difícil de modicar. El pseudocódigo esuna mezcla de lenguaje natural y símbolos, términos y otras característicasutilizadas en los lenguajes de programación.

ELEMENTOS:

a) Símbolos de operaciones:Se utilizan para realizar las operaciones aritméticas usadas en todo lengua-

 je de programación y estos son:  +, -, *, /, mod,

b) Nombres simbólicos (identicadores)Se utilizan para representar las cantidades variables, constantes, etc.

19

Page 20: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 20/180

c) Palabras claves:Son palabras reservadas que no pueden ser utilizadas como nombres delas variables o constantes y son propias del estándar para la construccióndel algoritmo.

Español Inglés

InicioFinLeerEscribirSi_entoncesDesdeMientrasRepetirParadaHasta que

BeginEndReadWriteIf_thenForWhileRepeatStopUntil

d) IdentacionSon sangrías o márgenes para bloques de instrucciones. Es importante de-bido a que, cuando se es consistente en su utilización, facilita la lectura delprograma al mostrar en una forma gráca las relaciones existentes entre las

distintas instrucciones

Identación

1.5 VARIABLES Y OPERADORES:

Datos y Tipos de DatosLos tipos de datos simples pueden ser:

• Numéricos• Lógicos y• Carácter

 Datos numéricos:Los datos numéricos pueden ser de varias clases, pero principalmente to-man dos formas: los enteros (sin decimales) y los reales (con punto deci-

20

Fundamentos de Programación

Page 21: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 21/180

1: Algoritmos y Programas

mal).

Datos Carácter:Son datos sobre los cuales no se realizan operaciones aritméticas, está

conformado por:  Letras : a ... z; A ... Z.  Dígitos : 0 ... 9

Caracteres especiales: *, ¿, ¡, (, etc.

Los caracteres se organizan en cadenas de caracteres o string, en el casode algoritmos en pseudocódigo se escriben las cadenas entre comillas:  “El resultado de la operación es:”

Datos lógicos:Son aquellos que solo pueden tomar dos valores: verdadero (True) y falso(False).

Otros tipos de datos:Estructurados: Denidos por el usuario- Arrays - Datos enumerados- Registros- Conjuntos

- Ficheros

1.6 IDENTIFICADORES Y PALABRAS RESERVADAS

Identifcadores: Son los nombres que se les dan a los programas, cons-tantes, variables, sub programas y otros objetos. Como: volumen, Nota_1,etc.Palabras reservadas:  Son palabras claves y propios de un lenguaje deprogramación y que no pueden ser utilizados como identicadores.

Constantes: Son valores que no cambian durante la ejecución de un pro-grama y pueden ser:

Constantes numéricas:• Constante entera : 46; 345• Constante real : 1.23; -5.56• Constante carácter : “A” ; “C”

Constante con nombre:

21

Page 22: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 22/180

• pi = 3.1415

VariablesSon objetos que cambian su valor durante la ejecución de un programa,

para nombrarlos se utilizan los identicadores.En esencia, una variable es una zona o posición de memoria en la compu-tadora donde se almacena información. En un pseudocódigo y también enun programa se pueden crear tantas variables como se desee. Debemostener en cuenta que las operaciones que se pueden realizar con dos o másvariables exigen que éstas sean del mismo tipo. No podemos “sumar”, porejemplo una variable alfanumérica a otra numérica y viceversa como porejemplo:

FechaNueva=”4 de Junio de 1980” + 5Esto no se puede hacer !!

Para dar nombres a las variables hay que seguir ciertas reglas:• Pueden tener hasta 40 caracteres• Debe empezar obligatoriamente con una letra (a-z ó A-Z)• No pueden contener espacios en blanco• El resto de los dígitos pueden ser números

• Se pueden incluir caracteres especiales como el guión o el punto.

Algunos lenguajes de programación exigen la declaración de las variablesque se van a utilizar en todo el programa. Las variables también puedeninicializarse; darles un valor inicial.

OperacionesLas variables se pueden procesar utilizando operaciones apropiadas parasu tipo.Los operadores son de 4 clases:• Relacionales• Aritméticos• Alfanuméricos• Lógicos

Los operadores relacionales se utilizan para formar expresiones que al serevaluadas producen un valor de tipo lógico: verdadero o falso. Ellos son:

22

Fundamentos de Programación

Page 23: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 23/180

1: Algoritmos y Programas

Signo Operador

><=

<=>=<>

Mayor queMenor queIgual aMenor o igual queMayor o igual queDistinto

Cuando se comparan caracteres alfanuméricos se hace uno a uno, comen-zando por la izquierda hacia la derecha. Si las variables son de diferentelongitud, pero exactamente iguales, se considera que la de menor longitudes menor. Los datos alfanuméricos son iguales si y solo si tienen la misma

longitud y los mismos componentes. Las letras minúsculas son mayores quelas mayúsculas y cualquier caracter numérico es menor que cualquier letramayúscula o minúscula; Así:

carácter numérico < mayúsculas < minúsculas

Ejemplos:  Comparación Resultado

  “A” < “B” Verdadero  “AAAA” > “AAA” Verdadero  “B” > “AAAA” Verdadero  “C” < “c” Verdadero  “2” < “12” Falso

Para tratar los números se utilizan los operadores aritméticos:

Signo Signicado+-*

 /  ^ MOD

SumaRestaMultiplicaciónDivisiónPotenciaciónResto de la divisiónentera

El único operador alfanumérico se utiliza para unir o concatenar datos deeste tipo:

23

Page 24: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 24/180

Signo Signicado+ Concatenación

Los operadores lógicos combinan sus operandos de acuerdo con las reglas

del álgebra de Boole para producir un nuevo valor que se convierte en elvalor de la expresión, puede ser verdadero o falso.

Signo SignicadoORANDNOT

Suma lógica (O)Producto lógico (Y)Negación (NO)

Por ejemplo, la expresión: (12 + 5) OR (7 + 3) = 10 es verdadera.

La expresión (12 * 5) AND (3 + 2 ) = 60 es falsa

(Verdad AND Falso = Falso).

¿Cómo se evalúan los operadores? La prioridad de los operadores es:1. Paréntesis2. Potencias

3. Productos y Divisiones4. Sumas y restas5. Concatenación6. Relacionales7. Lógicos

1.7 FUNCIONES INTERNAS:

Además de las operaciones básicas, existe otro conjunto de funciones pre-denidas que normalmente incorporan la mayoría de los lenguajes de pro-gramación. Para utilizar cualquiera de estas funciones, simplemente se dael nombre de la función, seguido por una constante, variable o expresión,denominado argumento, encerrado entre paréntesis. Las funciones están-dar más utilizadas son:

24

Fundamentos de Programación

Page 25: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 25/180

1: Algoritmos y Programas

Función Descripción Tipo de argumento Tipo de resultado

Abs(X)

Arctan(x)Cos(x)

Ent(x)

Exp(x)

Ln(x)

Log10(x)

Sqrt(x)

Redondeo(x)

Sin(x)

Tan(x)

Truncar(x)

Valor absoluto de X

Arco tangente de xCoseno de x

Parte entera de x

Exponencial de x

Logaritmo neperiano de x

Logaritmo decimal de x

Raíz cuadrad de x

X se redondea al enteromás próximoSeno de x

Tangente de x

X se trunca a la parte en-tera

Entero o real

Entero o real

Entero o real

Entero o real

Entero o real

Entero o real posi-tivoEntero o real posi-

tivoEntero o real posi-tivoReal

Real

Entero o real

Real

Igual que el argumento

RealReal

Entero

Real

Real

Real

Real

Entero

Real

Real

Entero

1.8 ASIGNACIÓN:

La operación de dar valor a una variable se llama asignación. La asignaciónse representa en pseudocódigo con el signo , aunque en otros casostambién se utiliza el signo de igualdad (=).

Primitiva de asignación

<nombre de variable | constante> | = <variable | expresión | dato>;

Ejemplo:X = X + 1; Asigna a la variable X el valor que tiene actualmente la variableX mas 1.

No se debe entender la asignación como la comparación matemática deigualdad, como en una ecuación. En el caso anterior las X se anularían.

25

Page 26: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 26/180

Entrada y Salida de InformaciónLos datos que vamos a obtener del usuario para procesarlos también debenser asignados a variables, la operación de lectura, lee un dato y lo asigna auna variable. La instrucción para la lectura de un dato es read o readln. Por

ejemplo:  read ( numero ) o leer (número)

Esta instrucción pide al usuario un valor que será asignado a la variable nu-mero, es decir, en numero se almacena el valor ingresado por el usuario.Cuando se quiera mostrar el resultado del algoritmo, un mensaje, un valor,etc, vamos a utilizar el comando write o escribir.Por ejemplo:  escribir ( “Hola”) ;

muestra en la pantalla el mensaje Hola, Hola va entre comillas porque esuna cadena.

Primitivas de Entrada y Salida

Leer (<nombre de variable>); o Read (<nombre de variable>);

Escribir (<exp | var | const >); o Write (<exp | var | const >);

También podemos mostrar un mensaje cuando solicitamos algún dato alusuario por medio del comando leer así:  read ( “Ingrese su edad”, edad)

El valor de la variable que pedimos al usuario se asigna a edad. Esta instruc-ción se verá así en la pantalla:  Ingrese su edad

ContadoresUna de las mejores cosas que hacen los computadores es ahorrar tiempoy trabajo en aquellas rutinas repetitivas. Uno de esas rutinas es contar ele-mentos, sucesos o acciones. Para lograr esto, se diseña una variable cuyafunción es contar. Un contador es una variable que se incrementa y se dis-minuye en una cantidad constante cada vez. Sea la variable K, se presentaen esta forma:K=K+1 si los incrementos son de a 1, K=K+2 sin se incrementa en 2, K=K-3si los decrementos son de a 3 unidades cada vez. Observe que la variablesiempre se repite a ambos lados del signo igual (=). Los contadores son una

26

Fundamentos de Programación

Page 27: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 27/180

1: Algoritmos y Programas

buena forma de controlar los bucles o ciclos.

AcumuladoresSon similares a los contadores pero sus incrementos o decrementos no son

constantes sino variables cada vez. Son especiales para almacenar cantida-des homogéneas, pero diferentes como: salarios, edades, pesos, entradas,salidas, etc.Sea la variable A, se presenta en esta forma: A=A+X, A=A-X, siendo X lacantidad variable cada vez. La variable se repite a ambos lados del signoigual(=). Si usted va a almacenar los salarios de cierto número de personas,debe utilizar un contador para las personas y un acumulador para los sala-rios.

ESTRUCTURA DE UN PSEUDOCÓDIGO:

Todo algoritmo estará conformado por dos partes claramente distinguibles:• La cabecera del programa y• El cuerpo del programa

Cabecera del programa:Consta de las siguientes partes:

Nombre del programa o algoritmo.•

Declaración de constantes, variables y tipos de datos denidos por el•usuario.Declaración de sub programas (dependiendo del lenguaje de progra-•mación)

a) Nombre del programa:Identicador del algoritmo o programa que describe brevemente la nalidaddel algoritmo o programa.Ejemplo:  Algoritmo: Area_Circulo  Inicio  : :  Fin

b) DeclaracionesEs una instrucción que permite asignar a una constante o variable un deter-minado tipo de dato o valor respectivamente.

27

Page 28: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 28/180

Ejemplo:Algoritmo: Volumen_Cilindro  Const  Pi = 3.141925;

  Var  radio : real;  altura : real;Inicio

  ::

  Fin

Cuerpo del programa

Donde se incluye el procesamiento del programa, es donde se tiene lasinstrucciones que realizan los cálculos y/o operaciones matemáticas y de-más procesos que den solución al problema a resolver. Normalmente estáconformado por:

Lectura de datos•Cálculos matemáticos y/o procesamiento•Salida de los resultados•

Ejemplo:

Algoritmo: Volumen_Cilindro  Const  Pi = 3.141925;  Var  radio : real;  altura : real;  volumen: real;Inicio

  leer(radio);  leer(altura);  volumen=Pi * radio * radio * altura;  escribir(volumen);

Fin

EJERCICIOS RESUELTOS

1  Algoritmo para ver la película “La teta asustada” en el cine.

28

Fundamentos de Programación

Page 29: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 29/180

1: Algoritmos y Programas

Primera abstracción1. Inicio2. Ir al cine3. Comprar una entrada

4. Ingresar a la sala5. Seleccionar un asiento6. Ver la película7. Salir del cine8. Fin

Segunda Abstracción

1. Inicio

2. Ir al cine3. Ver la cartelera4. Si proyectan la película entonces5. Dirigirse a la ventanilla6. Sino7. Ir al paso 268. Fin_si9. Si hay cola entonces10. Ponerse en la cola

11. Mientras haya personas en la cola hacer12. Esperar13. Avanzar14. Fin_mientras15. Fin_si16. Si hay localidades entonces17. Comprar entrada18. Sino19. Ir al paso 2620. Fin_si21. Ingresar a la sala22. Seleccionar un asiento23. Mientras proyectan la película hacer24. Ver la película25. Fin_mientras26. Abandonar el cine27. Fin

29

Page 30: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 30/180

Fundamentos de Programación

30

2 Algoritmo para cambiar un foco quemado

Primera abstracciónInicio

Retirar el foco quemadoColocar el nuevo foco

Fin

Segunda abstracción

InicioSi no alcanza al foco quemado entonces

Colocar una escalera debajo del focoSubir la escaleraMientras esté en la escalera hacer  Desenroscar el foco quemado en sentido contrario de la agujas

del reloj  Coger el nuevo foco  Enroscar el foco nuevo en sentido de las agujas del relojFin_mientrasBajar la escalera

Fin_siRetirar la escaleraFin

3 Algoritmo para cambiar la cuerda rota de una guitarra

Primera abstracciónInicio

Obtener una nueva cuerda

Extraer la cuerda rotaColocar la cuerda nuevaProbar el sonido

Fin

Segunda abstracciónInicio

Obtener nueva cuerdaGirar clavijero de cuerda rotasacar cuerda rotaintroducir cuerda nueva

Page 31: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 31/180

1: Algoritmos y Programas

Mientras la cuerda nueva no tenga tensión hacer  girar clavijeroFin_mientrasMientras no esté anado hacer

  Si esta en un tono más alto entonces  Girar clavijero a la izquierda  Sino  Girar clavijero a la derecha  Fin_siFin_mientras

Fin

4 Completa las siguientes expresiones en forma de expresiones algorít-

micas

a)2 4

12

b b ac x

a

− + −=

  x1 = - (b) + Sqrt(b * b - (4 * a*c)) / (2*a)

b)2log( 4)

3

 x y x

+= +

  y = (log10( x * x + 4) / 3 ) + Sqrt(x)

5 Qué valores tendrá en la salida las variables a, b y c en cada caso,luego de las expresiones de asignación, si se tiene como valor de entradaa = 3, b= 5 y c=10.

a) a = a + b;

  b = b * c;  c = c / 5 + a;

  a = a + b; // a = 3 + 5 entonces a = 8  b = b * c; // b = 5 * 10 entonces b = 50  c = c / 5 + a; // c = 10 / 5 + 8 entonces c = 10

Las salidas para los valores son: a = 8, b = 50 y c = 10

b) a = Sqrt(100) * a + 4;  b = c MOD Truncar(b *20 /a) + 10;

31

Page 32: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 32/180

Fundamentos de Programación

32

  c = Sqrt(log10(100) * 50) + Trunc((c+7)/2);

  a = Sqrt(100) * a + 4;

  a = 10 * 3 + 4 = 30 + 4 = 34

  b = c MOD Ent((b*20)/a) + 10;  b = 10 MOD Trunc((5*20)/34) + 10  b = 10 MOD Trunc(2,94) + 10  b = 10 MOD 2 + 10  b = 0 + 10 = 10

  c = Sqrt(log10(100) * 50) + Trunc((c+7)/2);

  c = Sqrt(2*50) + Trunc(17/2)  c = 10 + 8 = 18

Las salidas para los valores son: a = 34, b = 10 y c = 18

6 Qué valor se tendrá en la salida para a, b y c; luego de evaluar las ex -presiones si se tiene como valor de entrada x = 12, y= 7 y z=2.

a) a = (x MOD y = 0) AND (x+y>=4)  a = (12 MOD 7 = 0) AND (12+7 >= 4)  a = (5 = 0) AND (19 >= 4)  a = .F. AND .V.  a = .F.

b) b= ((z <> x ) OR (x < y)) AND (x <= 5*z+5)  b= ( (2 <> 12) OR (12 < 7)) AND (12 <= 5*2+5)  b= ( (2 <> 12) OR (12 < 7)) AND (12 <= 15)

  b= ( .V. OR .F. ) AND (.V.)  b = .V. AND .V.  b = .V.

c) c = (6 = y-2) AND (z<>x+3) AND (x+y <= z+10) OR (Sqrt(z*40) > x* y)

Page 33: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 33/180

1: Algoritmos y Programas

EJERCICIOS A RESOLVER

1. Implemente los algoritmos para resolver las siguientes situaciones:

a) Algoritmo para comprar un pantalónb) Algoritmo para almorzar en un restaurantc) Algoritmo para comprar un computador de última generaciónd) Algoritmo para sacar dinero de un cajero automáticoe) Algoritmo para hallar el área de un cuadradof) Hacer el desayuno por la mañanag) Cambiar el cristal roto de una ventanah) Matricularse a la escuela profesional de Ingeniería de Sistemas

2. ¿Cuáles de los siguientes identicadores no son válidos? Indique el mo-tivoa) N ben10b) Area de un circuloc) area_cuadradod) 1datoe) %notaf) nota_#1

3. Qué valor se tendrá en la salida para a, b y c; luego de evaluar las expre-siones si se tiene como valor de entrada x = 9, y= 14 y z=7.

a) a = (x MOD y <> 0) AND (x<=4*y)b) b= ((z + 2 <> x ) AND (x < y)) OR (x <= 7*z+4)c) c = (6 = y-2) AND (z<>x+3) AND (x+y <= z+10) OR (Sqrt(z*40) > x* y)

4. Qué valores tendrá en la salida las variables a, b y c en cada caso, luegode las expresiones de asignación, si se tiene como valor de entrada a = 5,b= 8 y c=12.

a) a = a*a + b/2;  b = a * c;  c = b / 5 + a;

b) a = a + Sqrt(a*20) + b;  b = Truncar(b *20 /a) + a;

  c = 2*a+b* 50 + Trunc((c+10)/2);

33

Page 34: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 34/180

Fundamentos de Programación

34

5) Realice las asignaciones del ejercicio 4) en el software DFD, realice unlistado de la sintaxis de funciones internas que utiliza éste software.

6) Realice las asignaciones del ejercicio 4) en el software PSeInt, realice unlistado de la sintaxis de funciones internas que utiliza éste software.

Page 35: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 35/180

2  Programación Estructurada

2.1 ¿QUÉ ES LA PROGRAMACIÓN ESTRUCTURADA?

Es el conjunto de técnicas para desarrollar programas fáciles de escribir,

vericar, leer (legibles por el usuario) y mantener (modicables).

Estas técnicas de programación incluyen:Un número limitado de estructuras de control.•Diseño descendente (top down).•Descomposición modular, con independencia de los módulos.•

Estructuras de controlExisten básicamente tres tipos de estructuras de control:

 Secuencial•Selectiva y•Repetitiva.•

2.2. ESTRUCTURAS SECUENCIALES

Es aquella en que una acción sigue a otra en secuencia. La acción B seejecuta después de la A y ninguna acción puede ejecutarse entre ellas. La

acción C sigue a la acción B, y así sucesivamente.

 

Acción A

Acción B

Acción C

 

:

Inicio

  :

  <acción A>

  <Acción B>

  <Acción C>

  :

:

Fin

35

Page 36: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 36/180

Fundamentos de Programación

36

2.3 ESTRUCTURAS SELECTIVAS:

Llamadas también de decisión se utilizan para tomar decisiones lógicas. Seclasican en los siguientes tipos:

 De alternativa simple Si_ entonces• De alternativa doble Si_entonces_sino•De alternativa múltiple. En_ caso•

a) Estructura Si_entonces_sinoEs la que permite que el ujo de control de un programa bifurque a una dedos posibles acciones. Está compuesta por una decisión lógica, de la cualsalen dos posibles caminos o estructuras de secuencia. Una secuencia deórdenes debe efectuarse cuando el resultado de la decisión sea verdadero

y la otra cuando sea falso. Posteriormente se unican los dos caminos paraque se cumpla así con la característica de una única salida desde la estruc-tura.Uno de los caminos siempre es positivo y el otro negativo; o uno de los ca -minos es verdadero y el otro falso.

 

condición

Acción B Acción A

 

si (condición) entonces

  acción A

  sino

acción B

  n_si

Alternativa simple: (Si_entonces/if_then)Esta estructura ejecuta una determinada acción cuando se cumple una de-terminada condición.

Esta estructura evalúa la condición y: Si la condición es verdadera, entonces ejecuta la acción (o acciones•en caso de tener varias acciones). Si la condición es falsa, entonces no hace nada.•

condición

Acción A

 

si (condición) entonces

  acción A

 Fin_si

Page 37: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 37/180

2: Programación Estructurada

Ejemplo: Estructura selectiva que determina si un año introducido por tecla-do es o no un año bisiesto:

En diagrama de ujo: (Implementado en el software FreeDFD)

 

(a mod 4 = 0) AND (a mod 100 != 0) OR (a mod 400 = 0)

‘El año ‘, a, ‘ NO es bisiesto’

‘El año ‘, a, ‘ SI es bisiesto’

En pseudocódigo: implementado con el software PSeInt es el siguiente:

 

En este algoritmo se puede observar que el software PSeInt, no utiliza ladeclaración de variables y de constantes, el software en su ayuda aclaraque “los tipos de datos simples se determinan automáticamente cuando secrean las variables. Las dos acciones que pueden crear una variable sonla lectura (LEER) y la asignación”. Pero sin embargo, nos parece una muybuena herramienta con la cual se puede compilar los algoritmos, y cuantacasi con todas las funcionalidades de un entorno de desarrollo profesional.

c) De alternativa múltiple: (En caso de:)En este caso se evalúa una expresión y en función el valor resultante serealiza una determinada acción (o conjunto de acciones).

37

Page 38: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 38/180

Fundamentos de Programación

38

La estructura de decisión múltiple evaluará una expresión que podrá tomar“n” valores distintos. Según que elija uno de estos valores en la condición,se realizará una de las “n” acciones, o el ujo del algoritmo seguirá un deter-minado camino entre los “n” posibles.

 

Acción 1 Acción 2 Acción 3 Acción n

expresión

=1 =2 =3 =n

 

En_Caso_de (expresión) hacer

  V1: acción 1

  V2: acción 2

  V3: acción 3

  :

  Vn: acción n

  Sino acción A

Fin_caso

Ejemplo:Ingresado por teclado una fecha, decir el día de la semana, suponiendo queel día 1 de dicho mes fue Lunes.DFD en el software PSeInt es el siguiente:

En pseudocódigo: implementado con el software PSeInt es el siguiente:Proceso dias  Leer dia;  Segun dia mod 7 Hacer  0: Escribir “Domingo”;  1: Escribir “Lunes”;  2: Escribir “Martes”;  3: Escribir “Miercoles”;  4: Escribir “Jueves”;  5: Escribir “Viernes”;  6: Escribir “Sábado”;  De Otro Modo:  Escribir “Día no válido”;

  FinSegunFinProceso

Page 39: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 39/180

2: Programación Estructurada

2.4 ESTRUCTURAS REPETITIVAS:

Una de las funciones principales que realizan los computadores es el desa-rrollar rutinas iterativas, ahorrando tiempo y trabajo. Iterar consiste en repetir

una instrucción o función, un determinado número de veces, hasta cuandose alcance una determinada condición. Por lo general, se repite un bloquede sentencias de un programa con las que se calculan ciertas variables enfunción de los valores adoptados en la ejecución anterior de dicho bloque.En el glosario de programación, los términos bucle, ciclo, lazo, loop sonsinónimos. Existen varios tipos de bucles a saber: Ciclo MIENTRAS, CicloHASTA o repetir y Ciclo PARA o desde.

a) Ciclo MIENTRAS (While o Do_While)

Es aquella estructura repetitiva en la cual el cuerpo del bucle se repite mien-tras que se cumpla una determinada condición. Cuando se ejecuta una ins-trucción MIENTRAS, lo primero que sucede es que se evalúa la condición(una expresión booleana) y puede ocurrir que:

Si la expresión se evalúa como Falsa (F), ninguna acción se realiza•y el programa prosigue en la siguiente instrucción, sin ingresar al bu-cle. Si la expresión se evalúa como Verdadera (V), entonces se ejecuta el•cuerpo del bucle , después de lo cual se retorna a la condición y seevalúa nuevamente. Este proceso se repite una y otra vez mientras lacondición sea verdadera.

 

Mientras (condición) hacer  Acción 1  Acción 2  :

  Acción NFin_mientras

 

Ejemplo: Calcular la media de un conjunto de notas de un alumno ingresadopor teclado, donde nalice el ingreso de datos con el valor de cero.

Utilizando el software PSeInt se tiene el siguiente diagrama:

39

Page 40: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 40/180

Fundamentos de Programación

40

 

Proceso media  Leer nota;  total <- 0;  n <- 0;  Mientras nota<>0 Hacer

  total <- total + nota;  n <- n+1;  Leer nota;  FinMientras  media <- total/n;  Escribir media;FinProceso

Concepto de CENTINELAPuede observarse en el ejemplo anterior que la variable nota controla laejecución del bucle mientras. Cuando nota sea igual a 0 el bucle se rompe.Ese valor es arbitrario; el programador considera que una nota nunca será0 este valor se denomina valor centinela. Un valor centinela es uno especialusado para indicar el nal de una lista de datos.

Ciclos MIENTRAS anidados

En tanto que la condición se siga cumpliendo, las instrucciones del cicloMIENTRAS se seguirán ejecutando. Estas instrucciones pueden ser otro uotros ciclos MIENTRAS internos. Esto signica que debe darse uno o másrompimientos internos para que el ciclo principal también se rompa. Estaestructura se denomina ciclos mientras anidados.

b) La estructura REPTIR_HASTA (REPEAT_UNTIL)Existen muchos casos en los que se desea que un bucle se ejecute por lomenos una vez antes de comprobar la condición de repetición, este es el

caso de la estructura Repetir_Until.En la estructura MIENTRAS, la condición es evaluada antes de ejecutar las

Page 41: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 41/180

2: Programación Estructurada

instrucciones del ciclo. En la estructura HASTA, la condición es evaluadaluego de haberse ejecutado las instrucciones, de tal manera que la primeravez, sin tener en cuenta que el predicado sea falso o verdadero, las ins-trucciones se ejecutan, luego se evalúa la condición y el ciclo se repite por

segunda y más veces si la evaluación resulta ser verdadera.

 

Repetir  Acción 1

  Acción 2  :

  Acción NHasta_que (condición)

Ejemplo: Calcular el factorial de un número N que corresponda a la fórmula:N!=N.(N-1)(N-2)...3.2.1

 

Proceso factorial

  Leer N;  fac <- 1;  i <- 1;  Repetir  fac <- fac*i;  i <- i+1;  Hasta Que i=N+1  Escribir fac;FinProceso

b) Estructura DESDE / PARA (FOR)

Cuando se conoce de antemano el número de veces que se desea ejecutarlas acciones de un bucle, es decir, el número de las iteraciones es jo, sedebe utilizar la estructura desde o para (for en Inglés). En la estructura debeaparecer siempre una variable que incrementa o decrementa cada vez queel bucle de ejecuta, el límite inferior y el límite superior (principio y n del

41

Page 42: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 42/180

Fundamentos de Programación

42

ciclo). A diferencia del ciclo MIENTRAS que utiliza centinelas, el ciclo PARAtiene control automático y cuando se rompe el ciclo, el programa continúa suujo normal. La estructura para (desde) comienza con un valor inicial de lavariable índice. Esta se incrementa de uno en uno y si este nuevo valor no

excede al nal, se ejecutan de nuevo las acciones. El incremento de la varia-ble índice siempre es 1 a menos que se indique expresamente lo contrario.La variable índice de control normalmente será de tipo entero y es normalemplear como nombres I, J, K.

 

Desde (i = Vi) hasta (Vf) [increm/decre p] hacer

  Acción 1

  Acción 2

  :

  Acción N

Fin_desde

Donde:i : contador (índice de control)Vi : valor inicial

Vf : valor nalp : incremento o decremento (opcional, si no se indica el incremento esigual a 1)

Ejemplo: Imprimir los primeros diez números naturales al cuadrado. Mostrarel número y su cuadrado

Utilizando el software PSeInt se tiene el siguiente pseudocódigo:

 

Proceso cuadrado  Para i <- 1 Hasta 10 Con Paso 1 Hacer  Escribir i,” “, i^2;  FinParaFinProceso

Se tiene también los DFD en el software PSeInt y en FreeDFD, se observalas diferencias en cuanto a notación, pero ambos solucionan perfectamenteel problema.

Page 43: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 43/180

2: Programación Estructurada

 

Si el valor inicial de la variable índice es menor que el valor nal, los incre-mentos son positivos. Si el valor inicial es mayor que el nal, el incrementoes negativo o sea decremento y debe indicarse expresamente así:

  Para j=20 hasta 1 decremento 1  secuencias

  n para

Los ciclos para, se utilizan con frecuencia en el manejo de vectores y matri-ces, en la lectura de datos en un archivo secuencial, pues su estructura rí -gida al incrementar la variable permite asignar posiciones jas dentro de unconjunto de datos. Algunas veces la estructura para sirve también para ge-nerar ciclos de espera en algunos lenguajes; los ciclos de espera no hacenabsolutamente nada, pero hacen que la máquina haga una pausa de cierto

tiempo. Se aprovecha también este ciclo para hacer cambiar de posición alos objetos, dando sensación de movimiento.

2.5 EJERCICIOS RESUELTOS

Los siguientes ejercicios son implementados usando el software FreeDFDpara los diagramas de ujo y PSeInt para los pseudocódigos.

1  Implemente un algoritmo que lea dos valores reales y nos muestre los

resultados de sumar, restar, y multiplicar dichos números.

43

Page 44: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 44/180

Fundamentos de Programación

44

 

Proceso operaciones  Leer a,b;  s <- a+b;  r <- a-b;  m <- a*b;  Escribir “suma=”,s,”resta=”,r,  ”multiplicación=”, m;FinProceso

2 Implemente un algoritmo que convierta la temperatura dada en la escalaCelsius a grados Fahrenheit (F = 9/5 °C + 32)

 

Proceso conversion  Leer C;

  F<-(9/5)*C+32;  Escribir “Fahrenheit=”,F;FinProceso

Page 45: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 45/180

2: Programación Estructurada

3 Implemente un algoritmo que determine el porcentaje de aprobados,desaprobados y ausentes que hubo en un examen.

 

total <- a+d+aupa <- a*100/totalpd <- d*100/totalpau <- au*100/total

a,d,au

pa,pd,pau

 

Proceso porcentaje

  Leer a,d,au;  total <- a+d+au;  pa <- a*100/total;  pd <- d*100/total;  pau <- au*100/total;  Escribir pa,pd,pau;FinProceso

Donde:

a, d y au: aprobados, desaprobados y ausentesrespectivamente.pa, pd y pau: porcentaje de aprobados, des-aprobados y ausentes respectivamente.

4 Implemente un algoritmo que halle la longitud de la hipotenusa de untriángulo rectángulo y el área, conociendo los catetos.

 

h <- sqrt(a*a + b*b)A <- a*b / 2

a, b

pa,pd,pau

 

Proceso triangulo  Leer a,b;  h <- rc(a*a+b*b);  A <- a*b/2;  Escribir h,A;FinProceso

Donde:a,b: catetosh, A: hipotenusa y área

Observaciones:En FreeDFD la raiz cuadrada se obtiene por lafunción interna sqrt() mientras que en PSeInt seobtiene por la función rc(). Sólo cambia el nom-bre de las funciones y no la funcionalidad.

5 Implemente un algoritmo que lea dos números, si son iguales que losmultiplique, si el primero es mayor que el segundo los reste y si no que los

sume.

45

Page 46: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 46/180

Fundamentos de Programación

46

 

Proceso numeros  Leer A,B;  Si A=B Entonces

  M <- A*B;  Escribir M;  Sino  Si A>B Entonces  R <- A-B;  Escribir R;  Sino  S <- A+B;  Escribir S;  FinSi

  FinSiFinProceso

6 Diseñe un algoritmo que lea tres longitudes y determine si forman o noun triángulo, si es un triángulo que indique de que tipo es: equilátero, isós-celes o escaleno.

 

Page 47: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 47/180

2: Programación Estructurada

Proceso triangulotipos  Leer A,B,C;  Si A+B>C Y A+C>B Y B+C>A Entonces  Si A=B Y A=C Y B=C Entonces  Escribir “equilatero”;

  Sino  Si A=B O A=C O B=C Entonces  Escribir “isosceles”;  Sino  Escribir “escaleno”;  FinSi  FinSi  Sino  Escribir “no es triángulo”;  FinSiFinProceso

7  Dado el monto de una compra calcular el monto total a pagar según lossiguientes descuentos aplicados: descuento del 10% si el monto es mayor aS/.100, el descuento es de 5% si el monto es mayor a S/.50 y menor o iguala S/.100 y no hay descuento si el monto es menor o igual a S/. 50.

N

N > 100

N>50 OR N<=100des<-N*10/100total<-N-des

total

des<-N*5/100total<-N-destotal <- N

47

Page 48: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 48/180

Fundamentos de Programación

48

Proceso descuento  Leer N;  Si N>100 Entonces  des<-N*10/100;

  total<-N-des;  Sino  Si N>50 Y N<=100 Entonces  des<-N*5/100;  total<-N-des;  Sino  total<-N;  FinSi  FinSi  Escribir total;

FinProceso

8 Elaborar un programa que me muestre el mayor y promedio de 20 nú-meros ingresados por teclado.

continuación

Page 49: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 49/180

2: Programación Estructurada

Proceso mayor_prom  Leer N;  suma <- N;  i <- 1;

  mayor <- N;  Mientras i<5 Hacer  Leer N;  Si mayor < N Entonces  mayor <- N;  FinSi  suma <- suma+N;  i <- i+1;  FinMientras  prom <- suma/5;  Escribir “El mayor es “,mayor,” El promedio es “, prom;FinProceso

9 Elaborar un programa que permita ingresar un número entero del 1 al 12y me muestre la tabla de multiplicar de dicho número.

 

Proceso tabla_multiplicar  Leer N;  Si N>0 Y N <= 12 Entonces  i <- 1;

  Mientras i<=12 Hacer  Escribir N, ”x”, i,” = “, N * i;  i <- i + 1;  FinMientras

  FinSi

FinProceso

49

Page 50: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 50/180

Fundamentos de Programación

50

Fundamentos de Programación

50

10  Realizar un algoritmo que halle el factorial de un número, con una es-tructura “mientras” y con una estructura “para”.

 

Proceso factorial_mientras

  Leer N;  fac <- 1;  i <- 1;  Mientras i<=N Hacer  fac <- fac * i;

  i <- i + 1;  FinMientras  Escribir fac;FinProceso

 /***********************************/ Proceso factorial_para  Leer N;  fac <- 1;

  Para i<-1 Hasta N Con Paso 1Hacer  fac <- fac * i;  FinPara  Escribir fac;

FinProceso

11  Escribe un algoritmo que pida un número y escriba sus divisores. Porejemplo dado el número 200 sus divisores son: 1; 2; 4; 5; 8; 10; 20; 25; 40;50; 100 y 200.

 

Proceso divisores  Leer N;  Para i<-1 Hasta N Con Paso 1 Hacer  Si N mod i = 0 Entonces  Escribir i;  FinSi  FinParaFinProceso

Page 51: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 51/180

2: Programación Estructurada

EJERCICIOS A RESOLVER

1) Diseñar un algoritmo que lea dos valores reales y nos muestre los resul-tados de sumar, restar, dividir y multiplicar dichos números.

2) Un departamento de climatología ha realizado recientemente su conver-sión al sistema métrico. Diseñar un algoritmo para realizar las siguientesconversiones:a) Leer la temperatura dada en la escala Celsius e imprimir en su equivalen-te Fahrenheit (la fórmula de conversión es “F=9/5 ºC+32”).b) Leer la cantidad de agua en pulgadas e imprimir su equivalente en milí -metros (25.5 mm = 1 pulgada).

3) El coste de un automóvil nuevo para un comprador es la suma total delcoste del vehículo, del porcentaje de la ganancia del vendedor y de los im-puestos locales o estatales aplicables (sobre el precio de venta). Suponeruna ganancia del vendedor del 12% en todas las unidades y un impuesto del6% y diseñar un algoritmo para leer el coste total del automóvil e imprimir elcoste para el consumidor.

4) Realizar en algoritmo que calcule la longitud y el área total de tres circun-

ferencias sabiendo que la 1ª de ellas tiene radio R que será introducido porteclado, la 2ª tiene radio 2R y la 3ª tiene radio 3R.

5) Dado la duración (en minutos) de una llamada telefónica, calcular su cos-to, de la siguiente manera: Hasta 5 min el costo es 0.90; por encima de 5 minel costo es 0.90+0.20 por cada minuto adicional a los 5 primeros min.

6) Leer 2 números; si son iguales que los multiplique, si el primero es mayorque el segundo que los reste y si no, que los sume.

7) El promedio de prácticas de un curso se calcula en base a cuatro prác -ticas calicadas de las cuales se elimina la nota menor y se promedian lastres notas más altas. Diseñe un algoritmo que determine la nota eliminada yel promedio de prácticas de un estudiante.

8) Diseñe un algoritmo que lea tres longitudes y determine si forman o noun triángulo. Si es un triángulo determine de que tipo de triángulo se trataentre: equilátero, isósceles o escaleno. Considere que para formar un trián-

gulo se requiere que: “el lado mayor sea menor que la suma de los otrosdos lados”.

51

Page 52: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 52/180

Fundamentos de Programación

52

9) Dado el monto de una compra mostrar y calcular el descuento conside-rando:Descuento es el 10% si el monto es mayor a $100.

Descuento es el 2% si el monto es mayor a $50 y menor o igual a $100No hay descuento si el monto es menor o igual $50

10) Se necesita un sistema que tenga tres opciones, si se selecciona laprimera se calcula el perímetro de un cuadrado, si la opción es la dos secalcula el perímetro de un triangulo equilátero, y cuando se elija la tres secalcula el perímetro de un círculo, además de que mandara un mensaje de“error” en caso de presionar cualquier otro número.

11) A un trabajador le descuentan de su sueldo el 10% si su sueldo es me-nor o igual a 1000. Por encima de 1000 y hasta 2000 el 5% del adicional ypor encima de 2000 el 3 % del adicional. Calcular el descuento y sueldo netoque recibe el trabajador dado su sueldo.

12) Mostrar los promedios de las notas de 10 alumnos de cierto curso. Cadaalumno tiene 5 notas y están entre 5 y 20.

13) Dado un número ingresado por teclado hallar la suma de sus dígitos.

14) Realizar un algoritmo que muestre el factorial de un número ingresadopor teclado.

15) Hallar el Cociente y el residuo de una división por restas sucesivas.

16) Mostrar la serie de Fibonacci menores que n. La serie tiene la formageneral Tn = Tn-1 + Tn-2 (por ejemplo 0; 1; 1; 2; 3; 5; 8;….)

17) Realizar un algoritmo que muestre si un número es primo o no.

18) Realizar un algoritmo que lea un número y devuelva como resultado elmismo número pero con las cifras invertidas.

19) Realizar un algoritmo que halle el MCD de dos números por restas su-cesivas

Page 53: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 53/180

3Lenguaje de Programación C

53

3.1 LENGUAJE C

El lenguaje C fue inventado e implementado por primera vez por Dennis Rit-

chie usando UNIX como sistema operativo. C es el producto de un procesode desarrollo iniciado con un lenguaje anterior llamado BCPL.Inicialmente, el manual de referencia del lenguaje para el gran público fue ellibro de Brian Kernighan y Dennis Ritchie, “The C programming Languaje”,escrito en 1977 y luego con la masicación de los microprocesadores serealizaron muchas implementaciones de C.El lenguaje C, se le considera uno de los lenguajes más rápidos y potentesy como muestra el sistema operativo Linux está desarrollado en C en sutotalidad.

Se considera ventajas de C El C es un lenguaje de propósito general. Puede ser utilizado para el•desarrollo de diferentes tipos de sistemas como: bases de datos, cien-tícos, nancieros, programas educativos, juegos, etc. El C es un lenguaje de nivel medio. Pues no tiene la dicultad de un•lenguaje máquina ni la facilidad del lenguaje natural. El C es un lenguaje modular. Los programas pueden escribirse en•

módulos. El C es un lenguaje compatible. El código escrito con un compilador•para una máquina concreta es fácilmente transferible a otro compila-dor o a otra máquina. El C, al igual que su nombre, es conciso. Lo compacto del código fuen-•te del C ahorra espacio en el disco, reduce el tiempo de compilación ytambién la cantidad de escritura que ha de realizar el programador.

Entorno de Desarrollo Integrado

Un entorno de desarrollo integrado o IDE (acrónimo en inglés de integrateddevelopment environment), es un software conformado por un conjunto de

Page 54: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 54/180

Fundamentos de Programación

54

herramientas de programación, el cual puede dedicarse en exclusiva a unsólo lenguaje de programación o bien, puede utilizarse para varios. Un IDEnormalmente está conformado por un editor de código, en el cual se escribelos programas en un lenguaje de programación determinado, en nuestro

caso el C, un compilador, un depurador y un constructor de interfaz gráca(GUI). Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte deaplicaciones existentes.

IDEs para C y C++

a) Visual C++ Studio  Entorno desarrollado por Microsoft, el Visual C++ es uno de

los mas completo de todos los entornos para trabajar en

C++. Cuenta con sus completas librerías (el conjunto SDK)donde se puede crear casi de todo. Su compilador es muyveloz, el depurador es excelente, permite el encarpetamientode clases para mejorar la organización de los proyectos ytiene una integración sencilla con herramientas externas.Sus desventajas son, que no es conveniente utilizarlo si va-

mos a realizar proyectos pequeños ya que requiere demasiadas especica-ciones antes de poder empezar a tipear código, es un producto relativamen-te caro y sus requerimientos en memoria son mucho mas altos que los de

sus competidores.

b) Bloodshed Dev C++  Es un entorno gratuito, aun muy joven, pero totalmente

muy recomendable si estamos ingresando a la progra-mación en C++, sus librerías se van actualizando día adía con versiones nuevas en Internet y sus requerimien-tos de memoria son bajos, es un entorno prometedor a

futuro y podemos descargar la ultima versión de su pa-gina http://www.bloodshed.net/. Una desventaja que tiene este IDE es queno posee diseñador de formularios pero puede ser complementado con li-brerías como qt (descargar de: http://www.trolltech.com),

c) Borland C++ Builder 6.0

  Es un entorno excelente y una gran opción ya que permite eldesarrollo de proyectos con interfaces de usuario complejasde manera fácil y permite recompilar proyectos de C++ en Li-

nux. Pero por otra parte, su depurador es algo pobre, contieneun compilador mucho mas lento que el de Visual Studio y solo

Page 55: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 55/180

3: Lenguaje de Programación C

permite importar proyectos de Visual Studio 6 o aquellos que tengan códigoen ANSI C++. No es gratuito pero su precio es inferior al de Visual Studio.

d) Eclipse

  Este IDE se puede considerar una de las mejores opcio-nes para proyectos pequeños, medianos y hasta paraalgunos grandes proyectos, al igual que DEV C++ colo-rea el código y es basado en software libre. Es un pro-yecto creado dentro del ámbito universitario y esta enconstante actualización. Contiene un buen depurador,

utiliza MinGW y contiene muchas opciones para la creación de proyectoscon POO. Pero sus desventajas son, la lentitud tanto para compilar comopara depurar, y su instalación es verdaderamente tediosa. Necesitaremos

tener motor java instalado ya que originalmente se creo como un IDE para java.

3.2 ELEMENTOS DE PROGRAMAS EN C

El C al igual que la mayoría de los lenguajes de programación está con-formado por palabras clave, funciones, variables, constantes, operadores,expresiones, tipos de datos, sentencias y otros.

Estructura de un programa en CLa forma general de un programa en C se ilustra en la gura, donde fun-cion1( ) y función2( ) representan funciones denidas por el usuario. Cadaprograma en C debe tener una función llamada “main”, la ejecución delprograma empieza con esta función y se puede pensar como una funciónmaestra y las otras funciones como los sirvientes. Cuando la función mainquiere que la función1 realice una tarea, main llama o invoca a función1 yesta responde e inicia su procesos, al nalizar su ejecución esta devuelve el

control al maestro que es la función main.

55

Page 56: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 56/180

Fundamentos de Programación

56

main(){

  Variables locales

  Secuencia de sentencias}

Declaraciones globales

funcion1(){

  Variables locales  Secuencia de sentencias}

funcion2(){

  Variables locales  Secuencia de sentencias}

Sintaxis y semánticaUn lenguaje de programación está conformado por reglas, símbolos y pala-bras reservadas que son con las que se implementan los programas; es de-cir existen reglas para la sintaxis (gramática) y la semántica (signicado).

Sintaxis, son las reglas formales que indican el cómo se deben escribir•instrucciones válidas en un lenguaje de programación.Semántica, son un conjunto de reglas que determina el signicado de•las instrucciones escritas en un lenguaje de programación.

3.3 COMPONENTES SINTÁCTICOS

Existen seis clases de componentes sintácticos en el vocabulario del len-

guaje C:separadores.•palabras clave•identicadores•constantes•cadenas de caracteres•operadores•

Los separadores

Son uno o varios espacios en blanco, tabuladores, caracteres de nueva lí -nea (denominados “espacios en blanco” en conjunto), y también los comen-

Page 57: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 57/180

3: Lenguaje de Programación C

tarios escritos por el programador, se emplean para separar los tokens, sonignorados por el compilador. El compilador descompone el texto fuente oprograma en cada uno de sus tokens, y a partir de esta descomposicióngenera el código objeto correspondiente.

El compilador ignora también los sangrados al comienzo de las líneas. Palabras Clave Del CEl lenguaje C cuenta con una serie de palabras clave (keywords) o tambiénconocidas como palabras reservadas, que el usuario no puede utilizar comoidenticadores (nombres de variables y/o de funciones). Estas palabras sir-ven para indicar al computador que realice una tarea muy determinada(desde evaluar una comparación, hasta denir el tipo de una variable) y tie-nen un especial signicado para el compilador. A continuación se presenta

la lista de las 32 palabras clave del ANSI C, para las que más adelante sedará detalle de su signicado. Algunos compiladores añaden otras palabrasclave, propias de cada uno de ellos. 

auto break casechar const continuedouble default doelse enum extern

oat for gotoint if longregister return shortsigned sizeof staticstruct switch typedefunion unsigned voidvolatile while

IdentifcadoresUn identicador es un nombre con el que se hace referencia a una función oal contenido de una zona de la memoria (variable). Cada lenguaje tiene suspropias reglas respecto a las posibilidades de elección de nombres para lasfunciones y variables. En ANSI C estas reglas son las siguientes:

 Un identicador se forma con una secuencia de letras (minúsculas de•la “a” a la “z”; mayúsculas de la “A” a la “Z”; y dígitos del “0” al “9”).El carácter subrayado o underscore (_) se considera como una letra•más. Un identicador no puede contener espacios en blanco, ni otros carac-•

57

Page 58: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 58/180

Fundamentos de Programación

58

teres distintos de los citados, como por ejemplo (*,;.:-+, etc.). El primer carácter de un identicador debe ser siempre una letra o un•(_), es decir, no puede ser un dígito. Se hace distinción entre letras mayúsculas y minúsculas. Así, Nota es•

considerado como un identicador distinto de nota y de NOTA. No se pueden utilizar palabras reservadas como int, char o while.•Muchos compiladores no permiten contener caracteres españoles•(acentos y eñes). ANSI C permite denir identicadores de hasta 31 caracteres de longi-•tud.

Ejemplo válidos de identicadores:  letra;

  Letra;  CHAR;  __variable__;  cantidad_envases;  precio123;  __;

Ejemplo no válidos de identicadores  123var; /* Empieza por dígitos */   int; /* Palabra reservada */   una sola; /* Contiene espacios */   US$; /* Contiene $ */   var.nueva; /* Contiene el punto */   eñe; /* Puede no funcionar */   nombre? /*No puede ir signos de admiración o  interrogación*/

ComentariosLa inclusión de comentarios en un programa es una saludable práctica, Parael compilador, los comentarios son inexistentes, por lo que no generan lí -neas de código, permitiendo abundar en ellos tanto como se desee.En el lenguaje C se toma como comentario todo carácter dentro de los sím-bolos: /* */. Los comentarios pueden ocupar uno o más renglones, porejemplo:  /* este es un comentario corto */ 

  /* este otro  es mucho

Page 59: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 59/180

3: Lenguaje de Programación C

  más largo  que el anterior */ 

Los comentarios se pueden poner casi en cualquier parte. Excepto en medio

de una instrucción. Por ejemplo lo siguiente no es válido: pri/* Esto es un comentario */ntf( “Hola mundo” );

El lenguaje ANSI C permite también otro tipo de comentarios, tomado delC++. Todo lo que va en cualquier línea del código detrás de la doble barra(//) y hasta el nal de la línea, se considera como un comentario y es igno-rado por el compilador. Para comentarios cortos, esta forma es más cómodaque la anterior, pues no hay que preocuparse de cerrar el comentario (el n

de línea actúa como cierre).

variable_1 = variable_2; // En esta línea se asigna a  // variable_1 el valor  // contenido en variable_2 OperadoresUn operador es un caracter o grupo de caracteres que actúa sobre una, doso más variables para realizar una determinada operación con un determina-

do resultado. Ejemplos típicos de operadores son la suma (+), la diferencia(-), el producto (*), etc. Los operadores pueden ser unarios, binarios y terna-rios, según actúen sobre uno, dos o tres operandos, respectivamente.

a) Operadores AritméticosLos operadores aritméticos son los más sencillos de entender y de utilizar.Todos ellos son operadores binarios. En C se utilizan los cinco operadoressiguientes:

Suma (+)•Resta (–)•Multiplicación (*)•División (/)•Módulo (%)•

Todos estos operadores se pueden aplicar a constantes, variables y expre-siones. El resultado es el que se obtiene de aplicar la operación correspon-

diente entre los dos operandos.El único operador que requiere una explicación adicional es el operador

59

Page 60: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 60/180

Fundamentos de Programación

60

resto %. En realidad su nombre completo es resto de la división entera. Esteoperador se aplica solamente a constantes, variables o expresiones de tipoint. Aclarado esto, su signicado es evidente: 23%4 es 3, puesto que el restode dividir 23 por 4 es 3. Si a%b es cero, a es múltiplo de b.

b) Operadores de asignación aritméticaEstos resultan de la unión de los operadores aritméticos con el operador deasignación el signo (=), o sea:

 Igual (=)•Suma igual (+=)•Resta igual (– =)•Multiplicación igual (*=)•

División igual (/=)•

Estos operadores se aplican de la siguiente manera: ( x += 5 ), en esteejemplo se toma el operando de la izquierda lo suma con el operando de laderecha y lo asigna al operando de la izquierda, en este caso la variable x.

c) Operadores de Incremento y DecrementoEl operador de incremento es el (++) y el de decremento es el (--), sonoperadores unarios de muy elevada prioridad y sirven para incrementar o

decrementar una unidad el valor de la variable a la que afectan.

Pre-incremento y Post-incremento: Estos operadores pueden ir inmediata-mente delante o detrás de la variable. Si preceden a la variable, ésta esincrementada antes de que el valor de dicha variable sea utilizado en laexpresión en la que aparece. Si es la variable la que precede al operador,la variable es incrementada después de ser utilizada en la expresión. Acontinuación se presenta un ejemplo de estos operadores:

i = 2; j = 2;m = i++; /* despues de ejecutarse esta sentencia m=2 e i=3*/ n = ++j; /* despues de ejecutarse esta sentencia n=3 y j=3*/ 

d) Operadores RelacionalesEstos establecen la magnitud relativa de dos elementos y son los siguien-tes:

 

Page 61: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 61/180

3: Lenguaje de Programación C

Expresión signicado

a>b a es mayor que b

a<b a es menor que b

a==b a es igual que ba!=b a es diferente o no igual que b

a>=b a es mayor o igual que b

a<=b a es menor o igual que b

Recordemos que estas operaciones nos dan resultados lógicos de 1 ó 0 esdecir valores de verdadero o falso; lenguaje C considera todo valor no cerocomo un valor verdadero.

e) Operadores LógicosSon usados para combinar los resultados de varias condiciones. Una ex-presión compuesta es aquella que utiliza operadores como estos y que sepueden evaluar para obtener un único resultado de verdadero o falso.Dos de los operadores lógicos son binarios porque usan dos operandos, de-vuelven un resultado basado en los operandos recibidos y en el operador.

 AND ( && ): Este operador conocido como producto lógico retorna un•

valor de verdadero si los operandos son verdaderos. OR ( || ): El operador de suma lógica retorna un valor de verdadero si•los operandos o uno de los operandos es verdadero. NOT ( ! ): Operador de negación, tiene por efecto invertir el resultado•de la expresión que le sigue, es decir, si la expresión es verdaderadespués de aplicar este operador la expresión será falsa y viceversa.

 Los operadores lógicos tienen una prioridad bastante baja, menos que losoperadores de igualdad pero mayor que el operador de asignación.

Jerarquía De OperadoresOperadores Unario/Binario Comentario

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

UnarioBinarioBinarioBinarioBinarioBinarioBinarioBinario

operadores unariosmultiplicador aritméticoaditivos aritméticosoperadores relacionalesoperadores de igualdadmultiplicador lógicoaditivo lógicooperador de asignación

61

Page 62: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 62/180

Fundamentos de Programación

62

3.4 EL PRIMER PROGRAMA EN C: Hola Mundo

El programa Hola Mundo, nos muestra la forma de trabajar en C, en estecaso iniciamos considerando el IDE Dev C++, que cuenta con licencia GNU

y se puede descargar de la dirección http://www.bloodshed.net.

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){

  cout<<”Hola mundo”; system(“PAUSE”);

  return EXIT_SUCCESS;}

Este programa lo único que hace es sacar por pantalla el mensaje:

Hola mundoVamos ahora a comentar el programa línea por línea:

#include <iostream>#include es lo que se llama una directiva. Sirve para indicar al compiladorque incluya otro archivo. Cuando el compilador se encuentra con esta direc-tiva la sustituye por el archivo indicado. En este caso es el archivo iostreamque es donde está denida la función “cout”.

usin namespace std;La instrucción using namespace especica que los miembros de un na-mespace van a utilizarse frecuentemente en un programa. Esto permite alprogramador tener acceso a todos los miembros del namespace y escribirinstrucciones mas concisas como:

cout<<”hola”; en vez de: std::cout<<”hola”;

int main()Es la función principal del programa. Todos los programas de C deben te-

ner una función llamada main. Es la que primero se ejecuta. El int (entero)que tiene al principio signica que cuando la función main acabe devolverá

Page 63: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 63/180

3: Lenguaje de Programación C

un número entero. Este valor se suele usar para saber cómo ha terminadoel programa. Normalmente este valor será 0 si todo ha ido bien, o un valordistinto si se ha producido algún error. De esta forma si nuestro programase ejecuta desde otro el programa ‘padre’ sabe como ha nalizado, si ha

habido errores o no.Se puede usar la denición ‘void main()’, que no necesita devolver ningúnvalor, pero se recomienda la forma con ‘int’ que es más correcta.

{Son las llaves que indican el comienzo de una función, en este caso la fun-ción main.

cout<<“Hola mundo”;Aquí es donde por n el programa hace algo que podemos ver al ejecutarlo.

La función “cout” muestra un mensaje por la pantalla. Al nal del mensaje“Hola mundo” aparece el símbolo ‘\n’; este hace que después de imprimir elmensaje se pase a la línea siguiente.Fíjate en el “;” del nal. Es la forma que se usa en C para separar una ins -trucción de otra. Se pueden poner varias en la misma línea siempre que seseparen por el punto y coma.

return 0;Como he indicado antes el programa al nalizar devuelve un valor entero.

Como en este programa no se pueden producir errores (nunca digas nunca jamás) la salida siempre será 0. La forma de hacer que el programa devuel-va un 0 es usando return. Esta línea signica ‘naliza la función main hazque devuelva un 0.

}...y cerramos llaves con lo que termina el programa. Todos los programasnalizan cuando se llega al nal de la función main.

¿Cómo se hace?Primero debemos crear el código fuente del programa. Para nuestro primerprograma el código fuente es el del listado anterior. Arranca tu compiladorde C, crea un nuevo chero y copia el código anterior. Llámalo por ejemploprimero.c.Ahora, tenemos que compilar el programa para crear el ejecutable. Si tucompilador es de windows, o tiene menús busca una opción llamada “com-pile”, o make, build o algo así.Si usamos Borland C for DOS, en su propio editor tipea el código y al na -

lizar utiliza ALT+F9 para compilar el programa y para ejecutarlo basta conpulsar CTRL+F9.

63

Page 64: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 64/180

64

Page 65: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 65/180

65

4.1 SALIDA POR MONITOR

Mostrar texto escrito en la pantalla del monitor es la operación de salida

más importante. C realiza esta operación mediante funciones denidas porel programa, las rutinas estándar de la librería de entrada/salida van harequerir normalmente la directiva include: #include <stdio.h>.En el caso del C++ se requiere la directiva include: #include <iostream>.

PRINTFLa función printf tiene la sintaxis general:

printf ( cadena_del_formato, <lista_de_argumentos> );

Donde:Cadena del formato, consiste en una secuencia de caracteres simples,secuencia de escapa y/o especicaciones de formato, todo ello delimitadopor dobles comillas.

Caracteres simples• : se consideran caracteres simples las letras (a..z,A..,Z), los dígitos (0..9) y otros símbolos del teclado (¡@#$%...). El

compilador interpreta de un modo literal estos caracteres simples.Secuencia de escape• : las secuencias de escape están formadas porla barra invertida(‘\’) seguida de uno o más caracteres permitidos. Pro-porcionan un determinado signicado al enviar ciertos caracteres es-peciales, las secuencias de escape son:

4Entrada - Salida y Tipos de datos

Page 66: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 66/180

Fundamentos de Programación

66

Secuenciade escape

Carácter de salida

 \a \b \f \n \t \v \r \” \’ \\  \?

Alerta (campana)RetrocesoSalto de página (forma de alimentación)Salto de línea (alimentación de línea)Tabulador horizontalTabulador verticalRetorno de carroDobles comillasComilla simpleBarra invertidaSigno de interrogación

Especicaciones del formato• : empieza con un signo de porcentaje (%)

y va seguido por el código del formato. Debe haber exactamente elmismo número de argumentos que de órdenes de formato y ambosdeben coincidir en su orden de aparición de izquierda a derecha.

Código Formato

%c%d%i%e

%f%o%s%u%x%%%p

un único carácterdecimaldecimalnotación cientíca

decimal en punto otanteoctalcadena de caracteresdecimal sin signohexadecimalesimprime un signo %muestra un puntero

 Para utilizar la función printf en nuestros programas debemos incluir la di-rectiva:

#include <stdio.h>

COUTEs otra función para la entrada de datos al igual que printf, su formato es:

cout << <variable/constante> [<< <variable/constante>]... ;

Para utilizar esta función se debe incluir la directiva:  #include <iostream>Por ejemplo:

Page 67: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 67/180

4: Entrada-Salida y Tipos de datos

  cout<<”Hola mundo...”<<” “<<endl;También considerando variables:  cout<<”Valor de la variable X”<<X<<endl;

4.2 ENTRADA DE DATOS

SCANFLee el dato de entrada desde el teclado, examina la cadena de entrada,convierte los campos de entrada de acuerdo a la especicación de formatoy coloca los valores resultantes en las posiciones de memoria dadas en lalista de argumentos.Su formato es:

scanf ( cadena de formato, <lista de argumentos> );

La cadena de formato incluye: Los caracteres de espacio en blanco(‘ ’), tabulador (‘\t’) o salto de línea•(‘\n’). Los caracteres simples.•Las especicaciones del formato. Cuando la función encuentra una•

especicación del formato (%...) en la cadena de formato, el siguientecampo de caracteres de la entrada de datos se convertirá en el tipode datos especicado y el resultado se colocará en una posición dememoria dado por el argumento correspondiente.

Ejemplo:

scanf ( “ %d ”, &variable1 );

Operador de dirección

Nombre de la función nombre de variable

Cadena de formato lista de argumentos

 

CINEs usado también para al entrada de datos al igual que scanf, su formato

67

Page 68: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 68/180

Fundamentos de Programación

68

es el siguiente:

cin >> <variable> [<< <variable>... ;

Donde cada variable irá tomando el valor introducido mediante el teclado.Los espacios y los retornos de línea actúan como separadores. Para utilizaresta función se debe incluir la directiva:  #include <iostream>Por ejemplo:  cin>>X;Lee un valor para X que luego se le asigna. Pero también se puede tomarlos valores de varias variables:

  cin>>A>>B>>C;En este caso lee los valores de las variables A, B y C y los asigna respecti-vamente.

Limpiar la pantallaPara limpiar la pantalla de salida de un programa se debe utilizar la directi-va:  system(“CLS“);

4.3 TIPOS DE DATOSExisten cinco tipos de datos atómicos en C que son:

Tipo Tamañoen bits

Rango

charintotadouble

void

8163264

0

0 a 25532.768 a 32.7673.4E-38 a 3.4E+381.7E-308 a 1.7E+308

sin valor Modifcadores de tiposA excepción del tipo void, los tipos de datos básicos pueden tener distin-tos modicadores precediéndolos. Un modicador se utiliza para alterar elsignicado del tipo base para que se ajuste más precisamente a las necesi-dades de cada momento. Los modicadores de tipo son: Signed, unsigned,long y short.

La tabla muestra todas las combinaciones que se ajustan al estándar:

Page 69: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 69/180

4: Entrada-Salida y Tipos de datos

Tipo Tamañoen bits

Rango

charunsigned charsigned charintunsigned intsigned intshort intunsigned short intsigned short intlong intsigned long intoatdouble

long double

88816161616161632323264

64

-128 a 1270 a 255-128 a 127-32768 a 327670 a 65535-32768 a 32767-32768 a 327670 a 65535-32768 a 32767-2147483648 a 2147483647-2147483648 a 21474836473.4E-38 a 3.4E+381.7E-308 a 1,7E+308

1.7E-308 a 1,7E+308

El tipo IntEn una variable de este tipo se almacenan números enteros (sin decimales).El rango de valores que admite es -32768 a 32767. Para guardarla nece-sitaremos 16 bits de la memoria del ordenador (216 = 32767). Para poderusar una variable primero hay que declararla (denirla). Hay que decirle alcompilador que queremos crear una variable y hay que indicarle de qué tipo.Por ejemplo:

  int numero;Esto hace que declaremos una variable llamada numero que va a contenerun número entero.La asignación de valores es tan sencilla como:  x = 10;También se puede dar un valor inicial a la variable cuando se dene:  int x = 15;También se pueden inicializar varias variables en una sola línea:  int x = 15, y = 20;

Hay que tener cuidado con lo siguiente:  int x, y = 20;

El tipo CharLas variables de tipo char sirven para almacenar caracteres. Los caracteresse almacenan en realidad como números del 0 al 255. Los 128 primeros (0a 127) son el ASCII estándar. El resto es el ASCII extendido y depende delidioma y del ordenador.Para declarar una variable de tipo char hacemos:  char letra;

69

Page 70: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 70/180

Fundamentos de Programación

70

En una variable char sólo podemos almacenar una letra, no podemos alma-cenar ni frases ni palabras. Para almacenar un dato en una variable chartenemos dos posibilidades:  letra = ‘A’;

o  letra = 65;En ambos casos se almacena la letra ‘A’ en la variable. Esto es así porqueel código ASCII de la letra ‘A’ es el 65.

El modifcador UnsignedEste modicador (que signica sin signo) modica el rango de valores quepuede contener una variable. Sólo admite valores positivos. Si hacemos:  unsigned char variable;

Esta variable en vez de tener un rango de -128 a 128 pasa a tener un rangode 0 a 255.

El tipo FloatEn este tipo de variable podemos almacenar números decimales, no sóloenteros como en los anteriores. El rango de posibles valores es del 3,4E-38al 3,4E38.Declaración de una variable de tipo oat:

oat numero;Para imprimir valores tipo oat Usamos %f.

oat num=4060.80;  printf( “El valor de num es : %f”, num );  Resultado:  El valor de num es: 4060.80

El tipo DoubleEn las variables tipo double se almacenan números reales del 1,7E-307 al

1,7E308. Se declaran como double:double numero;Para imprimir se usan los mismos modicadores que en oat.Sizeof nos dice cual es el tamaño de una variable o un tipo de dato.

4.4 DECLARACIÓN DE VARIABLES

La forma general de declaración de variables en C es:

tipo lista_de_variables;

Page 71: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 71/180

4: Entrada-Salida y Tipos de datos

Donde tipo es un tipo de datos válido de C y la lista de variables puedeconsistir en uno o más nombres de identicadores separados por comas ysiempre debe terminar en punto y coma.Ejemplo:

int x, y, z; // Declara las variables x, y, z de tipo entero.double balance, benecio; //Declara las variables balance y benecio detipo double.

¿Dónde se declaran las variables?Tenemos dos posibilidades, una es declararla como global y otra como lo-cal. Por ahora vamos a decir que global es aquella variable que se declarafuera de la función main y local la que se declara dentro:

Variable Global Variable Local

#include <iostream>int x;int main()  {  }

#include <iostream>int main()  {  int x;  }

La diferencia práctica es que las variables globales se pueden usar en cual-quier procedimiento. Las variables locales sólo pueden utilizarse en el pro-

cedimiento en el que se declaran. Como por ahora sólo tenemos el procedi-miento (o función, o rutina, o subrutina, como preeras) main.

4.5. SENTENCIAS DE ASIGNACIÓN

La forma general de la sentencia de asignación es:

nombre_de_variable = expresión

Donde la expresión puede ser tan simple como una constante o tan comple- ja como una combinación de variables, operadores y constantes.Ejemplos:x = y + z; //Asigna a la variable x la suma de las variables y más z.

Conversión de tipos en las asignacionesLa conversión de tipos se da cuando se mezclan variables de un tipo convariables de otro tipo. La conversión es: el valor del lado derecho de la asig-nación se convierte al tipo del lado izquierdo.Ejemplo:

71

Page 72: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 72/180

Fundamentos de Programación

72

  int x;  char ch;  oat f;  int main ( )

  { ch = x; //Las bits más signicativos de x se // pierden dejando en ch los 8 bits

  //menos signicativos.  x = f; //x recibe la parte no fraccionaria de f.  f = ch;  f = x;  }

Inicialización de VariablesLa inicialización de una variable se realiza colocando el signo igual y unaconstante después del nombre de una variable. Su forma general es:

tipo nombre_de_variable = constante

Ejemplo:int primero = 0; // Declara la variable primero y le

 //asigna un valor constante de 0;

4.6 CONSTANTES

ANSI C permite declarar constantes. Cuando se declara una constante esun poco parecido a declarar una variable, excepto que el valor no puede sercambiado.La palabra clave const se usa para declarar una constante, como se mues-tra a continuación:

  const a = 1;  int a = 2;

Observaciones:Se puede usar const antes o después del tipo.•Es usual inicializar una constante con un valor, ya que no puede ser•cambiada de alguna otra forma.La directiva del preprocesador #dene es un método más exible para•denir constantes en un programa.

Page 73: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 73/180

4: Entrada-Salida y Tipos de datos

4.7 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1  Programa que escribe el mensaje de saludo.

#include <iostream> using namespace std; 

int main(int argc, char *argv[]) 

  cout<<”Hola este es mi primer programa...”<<endl; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

2 Programa que halla el área de un circulo, solicita el ingreso del radio.

#include <iostream> 

#dene pi 3.14159 using namespace std; 

int main(int argc, char *argv[]) 

  oat A;   oat R;   cout<<”Ingrese el Radio del circulo: “;   cin>>R;   A = pi*R*R;   cout<<”El área es:”<<A<<endl;   system(“pause”); 

3 Programa que utiliza la función sizeof() para vericar el tamaño en bytes

de los tipos de datos básico.

#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 

  cout<<”Tipo de dato entero : “<<sizeof(int)<<endl;   cout<<”Tipo de dato double : “<<sizeof(double)<<endl;   cout<<”Tipo de dato char : “<<sizeof(char)<<endl;

cout<<”Tipo de dato short : “<<sizeof(short)<<endl;   cout<<”Tipo de dato long : “<<sizeof(long)<<endl;

73

Page 74: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 74/180

Fundamentos de Programación

74

  cout<<”Tipo de dato long int : “<<sizeof(long int)<<endl;cout<<”Tipo de dato short int: “<<sizeof(short int)<<endl;system(“PAUSE”); 

  return EXIT_SUCCESS; 

4 Utilizando las técnicas aprendidas hasta este capítulo escriba un pro-grama que calcule los cuadrados y los cubos de los números del 1 al 10 ylos muestre en una tabla como la siguiente:  número cuadrado cubo  1 1 1  2 4 8  3 9 27  : : :

#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 

  cout<<”\tNumero\t\tcuadrado\tcubo\n”; 

  cout<<”\t1\t\t1\t\t1\n”;   cout<<”\t2\t\t4\t\t8\n”;

cout<<”\t3\t\t9\t\t27\n”;   cout<<”\t4\t\t16\t\t64\n”;

cout<<”\t5\t\t25\t\t125\n”;   cout<<”\t6\t\t36\t\t216\n”;

cout<<”\t7\t\t49\t\t343\n”;   cout<<”\t8\t\t64\t\t512\n”;

cout<<”\t9\t\t81\t\t729\n”;   cout<<”\t10\t\t100\t\t1000\n”;

system(“PAUSE”); 

  return EXIT_SUCCESS; 

5 Programa que calcule el área de un triángulo rectángulo, dada la alturay la base.

#include <iostream> 

using namespace std; int main(int argc, char *argv[]) 

Page 75: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 75/180

4: Entrada-Salida y Tipos de datos

  oat altura, base;   double area; 

  cout<<”\nBase del triangulo = “; 

  cin>>base;   cout<<”\nAltura del triangulo = “; 

  cin>>altura; 

  area= 0.5 * (double) altura * base;   cout<<”\nArea = “<<area<<endl; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

6 Programa que halla el área de un triángulo en función a sus lados, con-sidere las siguientes fórmulas:

( )( )( ) A SP SP A SP B SP C = − − −

  donde: SP = (A+B+C)/2

#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 

{   oat A,B,C,area,SP;   cout<<”Ingrese los lados del triángulo: \n”;   cin>>A>>B>>C; 

  SP = (A+B+C)/2; 

  area=sqrt(SP*(SP-A)*(SP-B)*(SP-C)); 

  cout<<”El area es: “<<area<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; 

7   Programa que convierte de grados centígrados a grados fahrenheit.Utilice la siguiente ecuación:  F = 9/5°C+32

#include <iostream> 

using namespace std; int main(int argc, char *argv[]) 

75

Page 76: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 76/180

Fundamentos de Programación

76

  oat F, C;   cout<<”Ingrese los grados centigrados: “;   cin>>C; 

  F=9/5*C+32;   cout<<”Los grados Fahrenhet son:”<<F<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; 

Page 77: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 77/180

5Sentencias de Control en C

77

5.1 SENTENCIAS CONDICIONALES

Este tipo de sentencias permiten variar el ujo del programa en base a de-

terminadas condiciones.Existen varias estructuras diferentes:

a) Sentencias Si – Entonces - Sino

Sentencias IfLa palabra if signica si (condicional), Su formato es el siguiente:

if ( condición )  {  Acciones;  }

Cuando se cumple la condición entre paréntesis se ejecuta el bloque inme-diatamente siguiente al if (acciones a ejecutar).

En el siguiente ejemplo tenemos un programa que nos pide un número, siese número es 20 se muestra un mensaje. Si no es 20 no se muestra ningúnmensaje:  #include <iostream>  int main()  {  int num;  cout<<“Ingresa un número “;  cin>>num;

  if (num==20)  {

Page 78: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 78/180

Fundamentos de Programación

78

  cout<<“El número es correcto\n”;  }

Sentencia If - Else

El formato es el siguiente:if ( condición )  {  Acciones 1;  }else  {  Acciones 2;  }

En el if si no se cumplía la condición no se ejecutaba el bloque siguiente y elprograma seguía su curso normal. Con el if else tenemos un bloque adicio-nal que sólo se ejecuta si no se cumple la condición. Veamos un ejemplo:  #include <iostream>  int main() /* Simula una clave de acceso */   {  int usuario, clave=18276;  cout<<“Introduce tu clave: “;  cin>>usuario;  if(usuario == clave)  cout<<“Acceso permitido”;  else  cout<<“Acceso denegado”;  }

Al ejecutar el programa se pide introducir la clave, la cual es inicializada conel valor de 18276, si ingresa este número el mensaje que muestre será:

  Acceso permitido.Si escribimos cualquier otro número se ejecuta el bloque siguiente al elsemostrándose el mensaje:  Acceso denegado

Sentencias If else ifSe pueden poner if else anidados si se desea, como se muestra en el si-guiente programa:  #include <iostream>

  int main()  {

Page 79: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 79/180

5: Sentencias de Control en C

  int a;  cout<<“Introduce un número “ ;  cin>>a;  if ( a<10 )  {

  cout<<“El número introducido era menor de 10.\n” );  }  else if ( a>10 && a<100 )  {  cout<<“El número está entre 10 y 100”\n”;  }  else if ( a>100 )  {  cout<<“El número es mayor que 100\n”;  }  cout<<“Fin del programa\n”;  }

Operador ? (el otro if-else)El uso de la interrogación es una forma de condensar un if-else. Su formatoes el siguiente:

( condicion ) ? ( instrucción 1 ) : ( instrucción 2 )

Si se cumple la condición se ejecuta la instrucción 1 y si no se ejecuta lainstrucción 2. Veamos un ejemplo con el if-else y luego lo reescribimos con“?”:  #include <iostream>  int main()  {  int a; int b;  cout<<“Introduce un número “;  cin>>a;  if ( a<10 )  { b = 1; }  else

  { b = 4;  }  cout<<“La variable ‘b’ toma el valor:”<<b;

}

Si el valor que tecleamos al ejecutar es menor que 10 entonces b=1, encambio si tecleamos un número mayor que 10, ‘b’ será igual a 2. Ahora va-

mos a reescribir el programa usando ‘?’:

79

Page 80: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 80/180

Fundamentos de Programación

80

  #include <iostream>  int main()  {  int a; int b;  cout<<“Introduce un número “;  cin>>a;  b = ( a<10 ) ? 1 : 4 ;  cout<<“La variable ‘b’ toma el valor:”<<b;  }

¿Qué es lo que sucede ahora? Se evalúa la condición a<10. Si es verdadera(a menor que 10) se ejecuta la instrucción 1, es decir, que b toma el valor ‘1’.Si es falsa se ejecuta la instrucción 2, es decir, b toma el valor ‘4’.

b) Sentencias En_ Caso_de:

Sentencia SwitchAunque con la estructura if ... else if se pueden realizar comprobacionesmúltiples, en ocasiones no es muy elegante, ya que el código puede ser difí -cil de seguir y puede confundir incluso al autor transcurrido un tiempo. Por loanterior, C tiene incorporada una sentencia de bifurcación múltiple llamadaswitch. Con esta sentencia, la computadora comprueba una variable sucesi-vamente frente a una lista de constantes enteras o de caracter. Después deencontrar una coincidencia, la computadora ejecuta la sentencia o bloquede sentencias que se asocian con la constante.El formato de la sentencia switch es:

switch ( variable )  {  case opción_1:  Acción 1;  break;

  case opción_2:  Acción 2;  break;  :  case opción_N:  Acción N;  break;  default:  Acción X;  break;

  }

Page 81: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 81/180

5: Sentencias de Control en C

La sentencia switch sirve par elegir una opción entre varias disponibles.Aquí no tenemos una condición que se debe cumplir sino el valor de unavariable. Dependiendo del valor se cumplirá un caso u otro.Vamos a ver un ejemplo de múltiples casos con if-else y luego con switch:

Con If Con Switch

#include <stdio.h>int main(){  int num;  cout<<“Introduce un número “ ;  cin>>num;  if ( num==1 )  cout<<“Es un 1\n” ;

  else if ( num==2 )  cout<<“Es un 2\n” ;  else if ( num==3 )  cout<<“Es un 3\n” ;  else  cout<<“No era ni 1, ni 2, ni 3\n” ;}

#include <stdio.h>int main(){  int num;  printf( “Introduce un número “ );  cin>>num ;  switch( num )  {

  case 1: cout<<“Es un 1\n” ;  break;  case 2: cout<<“Es un 2\n” ;  break;  case 3: cout<<“Es un 3\n” ;  break;  default: cout<<“No es ni 1, ni 2, ni 3\n” ;  }}

Como vemos el código con switch es más cómodo de leer.Si no ponemos break aunque haya un case el programa sigue hacia adelan-te. Puede parecer una desventaja pero a veces es conveniente. Por ejemplocuando dos case deben tener el mismo código. Si no tuviéramos esta posi-bilidad tendríamos que escribir dos veces el mismo código.

5.2 BUCLES

Los bucles nos ofrecen la solución cuando queremos repetir una tarea unnúmero determinado de veces.

a) Sentencia WhileEl formato del bucle while es el siguiente:

while ( condición )  {  Acciones;

  }

81

Page 82: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 82/180

Fundamentos de Programación

82

While quiere decir mientras. Aquí se ejecuta el bloque de instruccionesmientras se cumpla la condición impuesta en while. El bucle while comienzapor evaluar la condición. Si es cierta se ejecutan las acciones. Entonces sevuelve a evaluar la condición. De nuevo si es verdadera se vuelve a ejecu-

tar las acciones. Este proceso continua hasta que el resultado de evaluarla condición es falso. Por esto se le llama a esta expresión la condición desalidaPor ejemplo:  #include <iostream>  int main()  {  int contador = 0;  while ( contador<100 )

  {  contador++;  cout<<“Ya voy por el “<<contador<<” pararé enseguida.\n”;

}  }Este programa imprime en pantalla los valores del 1 al 100. Cuando i=100ya no se cumple la condición.

b) Sentencia Do While

El formato del bucle do-while es:

do  {  Acciones;  } while ( condición );

La diferencia entre while y do-while es que en este último, la condición vadespués del conjunto de instrucciones a ejecutar. De esta forma, esas ins-trucciones se ejecutan al menos una vez.Su uso es similar al de while. Veamos el ejemplo e impleméntalo:  #include <iostream>  int main() /* Muestra un menú si no se pulsa 4 */   {  char seleccion;  do{

  cout<<“1.- Comenzar\n”);  cout<<“2.- Abrir\n”);

Page 83: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 83/180

5: Sentencias de Control en C

  cout<<“3.- Grabar\n”);  cout<<“4.- Salir\n”;  cout<<“Escoge una opción: “;  seleccion=getchar();

  switch(seleccion) {  case ‘1’: cout<<“Opción 1”;  break;  case ‘2’: cout<<“Opción 2”;  break;  case ‘3’: cout<<“Opción 3”;  }  }while (seleccion != ’4’);  }

c) El bucle ForEl formato del bucle for es el siguiente:

for( inicializaciones; condiciones; incrementos )  {  Acciones;  }

Por ejemplo si tenemos la sentencia:  ...  for ( i=0 ; i<100 ; i++ )  ...En este caso asignamos un valor inicial a la variable i. Ese valor es cero. Esaes la parte de dar valores iniciales. Luego tenemos i<100. Esa es la partecondiciones. En ella ponemos la condición es que i sea menor que 100, demodo que el bucle se ejecutará mientras i sea menor que 100. Es decir,mientras se cumpla la condición. Luego tenemos la parte de incrementos,donde indicamos cuánto se incrementa la variable.Como vemos, el for va delante del grupo de instrucciones a ejecutar, demanera que si la condición es falsa, esas instrucciones no se ejecutan niuna sola vez.Cuidado: No se debe poner un “;” justo después de la sentencia for, puesentonces sería un bucle vacío y las instrucciones siguientes sólo se ejecu-tarían una vez.Por ejemplo:  #include <iostream>  int main()

83

Page 84: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 84/180

Fundamentos de Programación

84

  {  int i;  for (i=0; i<100; i++); /* Cuidado con este punto y coma */   {

  cout<<“Hola”;  }  }

Este programa sólo escribirá en pantalla “Hola” una sola vez.También puede suceder que quieras ejecutar un cierto número de vecesuna sola instrucción (como sucede en nuestro ejemplo). Entonces no nece-sitas las llaves “{}”:  #include <iostream>

  int main()  {  int i;  for ( i=0 ; i<100 ; i++ ) cout<<“Hola”;  }o también:  for( i=0 ; i<100 ; i++ )  cout<<“Hola”;

En otros lenguajes, la sentencia for es muy rígida. En cambio en C es muyexible. Se puede omitir cualquiera de las secciones (inicialización, condi-ciones o incrementos). También se pueden poner más de una variable ainicializar, más de una condición y más de un incremento. Por ejemplo, elsiguiente programa sería perfectamente correcto:  #include <iostream>  int main()  {

  int i, j;  for( i=0, j=5 ; i<10 ; i++, j=j+5 )  {  cout<<“Hola “ ;  cout<<“Esta es la línea ”<< i;  cout<<“j vale = ”<< j;  }  }Como vemos en el ejemplo tenemos más de una variable en la sección de

inicialización y en la de incrementos. También podíamos haber puesto másde una condición. Los elementos de cada sección se separan por comas.

Page 85: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 85/180

5: Sentencias de Control en C

Cada sección se separa por punto y coma.

Sentencia BREAKEsta sentencia se utiliza para terminar la ejecución de un bucle o salir de

una sentencia SWITCH.Sentencia CONTINUESe utiliza dentro de un bucle. Cuando el programa llega a una sentenciaCONTINUE no ejecuta las líneas de código que hay a continuación y salta ala siguiente iteración del bucle.

  /* Uso de la sentencia CONTINUE. */   #include <stdio.h>

  main() /* Escribe del 1 al 100 menos el 25 */   {  int numero=1;  while(numero<=100)  {  if (numero==25)  {  numero++;  continue;

  }  printf(“%d\n”,numero);  numero++;  }  }

5.3 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1

 Programa que determina si un año es bisiesto o no.#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) { 

  int a;   cout<<”Ingrese el año:”; 

85

Page 86: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 86/180

Fundamentos de Programación

86

  cin>>a;   if ((a % 4 != 0) && (a%100!=0) || (a%400==0) )   cout<<”El año “<<a<<” SI es bisiesto”<<endl;   else 

  cout<<”El año “<<a<<” NO es bisiesto”<<endl;  system(“PAUSE”); 

  return EXIT_SUCCESS; } 

2 La nota promedio de un curso se calcula en base a 4 notas, de los cua-les se elimina la nota menor y se promedia las 3 notas más altas. El progra-ma debe mostrar como salida la nota eliminada y el promedio.

#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) {   int a,b,c,d; oat prom;   cout<<”Ingresa la nota 1: “; cin>>a;   cout<<”Ingresa la nota 2: “; cin>>b;

cout<<”Ingresa la nota 3: “; cin>>c;   cout<<”Ingresa la nota 4: “; cin>>d;  

if (a<b && a<c && a<d) {   prom=(b+c+d)/3;   cout<<”El menor es: “<<a<<” El promedio es: “<<prom; 

  }if (b<a && b<c && b<d){   prom=(a+c+d)/3;   cout<<”El menor es: “<<b<<” El promedio es: “<<prom;   }

if (c<a && c<b && c<d){   prom=(a+b+d)/3;   cout<<”El menor es: “<<c<<” El promedio es: “<<prom;   }

if (d<a && d<b && d<c){   prom=(a+b+c)/3; 

Page 87: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 87/180

5: Sentencias de Control en C

  cout<<”El menor es: “<<d<<” El promedio es: “<<prom;   }

system(“PAUSE”); 

  return EXIT_SUCCESS; } 

3 Programa que muestra el nombre del mes y nombre del día según unnúmero de mes y día ingresado.

#include <cstdlib> #include <iostream> using namespace std; 

int main(int argc, char *argv[]) {   int op1, op2;   cout<<”Ingrese un numero de mes: “;   cin>>op1;   cout<<”Ingrese un numero de día: “;   cin>>op2;   switch(op1) {   case 1:   cout<<”Enero”<<endl; break;   case 2:   cout<<”Febrero”<<endl; break;   case 3:   cout<<”Marzo”<<endl; break;   case 4:   cout<<”Abril”<<endl; break;

case 5: 

  cout<<”Enero”<<endl; break;   case 6:   cout<<”Febrero”<<endl; break;   case 7:   cout<<”Marzo”<<endl; break;   case 8:   cout<<”Abril”<<endl; break;

case 9:   cout<<”Enero”<<endl; break; 

  case 10:   cout<<”Febrero”<<endl; break; 

87

Page 88: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 88/180

Fundamentos de Programación

88

  case 11:   cout<<”Marzo”<<endl; break;   case 12:   cout<<”Abril”<<endl; break;

default:   cout<<”Mes no valido”; break;} 

  switch(op2) {   case 1:   cout<<”Lunes”<<endl; break;   case 2:   cout<<”Martes”<<endl; break;   case 3: 

  cout<<”Miercoles”<<endl; break;   case 4:   cout<<”Jueves”<<endl; break;

case 5:   cout<<”Viernes”<<endl; break;   case 6:   cout<<”Sábado”<<endl; break;   case 7:   cout<<”Domingo”<<endl; break; 

  default:   cout<<”Día no valido”; break;

}   system(“PAUSE”);   return EXIT_SUCCESS; } 

4 Diseñe un algoritmo que lea tres longitudes y determine si forman o no

un triángulo. Si es un triángulo determine de que tipo de triángulo se trataentre: equilátero, isósceles o escaleno. Considere que para formar un trián-gulo se requiere que: “el lado mayor sea menor que la suma de los otrosdos lados”.

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { 

  int A,B,C;   cout<<”Ingrese las longitudes de los lados:”; 

Page 89: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 89/180

5: Sentencias de Control en C

  cin>>A>>B>>C;  

if(A+B>C && A+C>B && B+C>A)   if(A==B && A==C && B==C ) 

  cout<<”Es un triángulo Equilátero”;   else   if (A==B || A==C || B==C)   cout<<”Es un triángulo Isósceles”;

else   cout<<”Es un triángulo Escaleno”;   else   cout<<”No es un triángulo”; 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

5 Programa que tiene tres opciones, si se selecciona la primera se calculael perímetro de un cuadrado, si la opción es la dos se calcula el perímetrode un triángulo equilátero, y cuando se elija la tres se calcula la longitud deun círculo, además de que mandara un mensaje de “error” en caso de pre-sionar cualquier otro número.

#include <cstdlib> #include <iostream> #dene pi 3.1415 

using namespace std; 

int main(int argc, char *argv[]) { 

  int op;   oat lado, radio; 

  cout<<”\t\t***************************************”<<endl;   cout<<”\t\t1) Perímetro de un cuadrado”<<endl;   cout<<”\t\t2) Perímetro de un triángulo equilátero”<<endl;   cout<<”\t\t3) Longitud de un círculo”<<endl;   cout<<”\t\t***************************************”<<endl;

cout<<”\t\tSelecione una opción: “; 

  cin>>op;   switch(op) { 

89

Page 90: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 90/180

Fundamentos de Programación

90

  case 1:system(“CLS”); 

  cout<<”Ingrese el lado del cuadrado: “;   cin>>lado; 

  cout<<”El perímetro es:”<<4*lado;   break;   case 2:   system(“CLS”);   cout<<”Ingrese el lado del triángulo equilátero: “;   cin>>lado;   cout<<”El perímetro es:”<<3*lado;   break;   case 3: 

  system(“CLS”);   cout<<”Ingrese el radio del círculo: “;   cin>>radio;   cout<<”La longitud del círculo es: “<<2*pi*radio<<endl;   break;   default:

cout<<”Error ... opción no válida”;   }   system(“PAUSE”); 

  return EXIT_SUCCESS; } 

6 Programa que muestre las raíces de una ecuación de segundo grado dela forma ax2 + bx + c, ingresando por teclado los coecientes.

#include <cstdlib> #include <iostream> #include <cmath> 

using namespace std; int main(int argc, char *argv[]) {   int a,b,c;   oat dis,x1,x2;   cout<<”Ingrese los valores de la ecuación A,B y C: “;   cin>>a>>b>>c;  

dis = b*b-4*a*c; 

  if(dis == 0){   x1= -b/(2*a); 

Page 91: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 91/180

5: Sentencias de Control en C

  cout<<”Las raices son: x1=x2=”<<x1;   }   else if(dis>0){   x1=(-b+sqrt(dis))/(2*a); 

  x2=(-b-sqrt(dis))/(2*a);   cout<<”Las raices son: x1=”<<x1<<” y x2=”<<x2;   }   else   cout<<”No tiene raíces reales.”;  

system(“PAUSE”);   return EXIT_SUCCESS; } 

7  Programa que indica si un número ingresado por teclado es o no unnúmero primo.

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) {   int x, y=0;   cout<<”Ingrese numero: “;   cin>>x;   for(int i=1; i<=x; i++)   {   if((x % i) == 0)   y++;   } 

  if(y>2)   cout<<”NO es un numero primo”;   else   cout <<”SI es un numero primo”;   system(“PAUSE”);   return EXIT_SUCCESS; } 

91

Page 92: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 92/180

Fundamentos de Programación

92

8 Programa que al ingresar un número muestra sus divisores y el númerode divisores, por ejemplo si se ingresa el número 20, el programa nos dacomo salida:

1; 2; 4; 5; 10; 20

  El número de divisores es 6.

#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) {   int n, cont=0;  

cout<<”Ingrese el número: “;   cin>>n;   for (int i=1; i<=n; i++)   if(n % i == 0) {   cont++;   cout<<i<<”, “; 

  }   if(cont>3)   cout<<”\nNumero de divisores “<<cont<<endl;   else   cout<<”\nNumero de divisores 2”<<endl;

system(“PAUSE”);   return EXIT_SUCCESS; } 

9 Programa que convierte un número ingresado por teclado de base 10a base 2.

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) 

{   int c=1,b=0,N; 

Page 93: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 93/180

5: Sentencias de Control en C

  int B[10];   cout<<”Ingrese el numero a convertir: “;   cin>>N;   while(N>1) { 

  B[c]= N % 2;   N = N / 2;   c++;   }   B[c]=1;   for(int i=c; i>=1; i--)

cout<<B[i];   system(“PAUSE”);   return EXIT_SUCCESS; 

10  Programa que ingresado un número nos devuelve el número de dígitosque tiene.

#include<iostream> using namespace std; int main() {  long int numero;  int digitos=0;  cout<<”Ingrese un numero: “;  cin>>numero;  cout<<”El numero “<<numero;  while(numero>0)  {   numero=numero/10;   digitos++; 

 }  cout<<” tiene “<<digitos<<” digitos.”;system(“PAUSE”); 

 return EXIT_SUCCESS; } 

93

Page 94: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 94/180

Fundamentos de Programación

94

11  Programa que calcula e imprima los números perfectos menores que1000. Un número es perfecto si la suma de sus divisores excepto el mismo,es igual al propio número.

#include<iostream> using namespace std; int main() {   int j,numero,divisor;   numero=0;   while(numero<1000)   {   numero++;   divisor=0;   j=1;   while(j<=numero/2)   {   if(numero%j==0)   divisor=divisor+j;   j++;   } 

  if(divisor==numero)   cout<<numero<<endl;   }   system(“PAUSE”);   return EXIT_SUCCESS; } 

12   Programa que halla la sumatoria de los N términos de:1 2 3 4

...4 9 16 25+ + + +

#include <iostream> using namespace std; int main(int argc, char *argv[]) {   oat suma=0.0;   int N, i=1; 

  cout<<”Ingrese el número de terminos: “;   cin>>N; 

Page 95: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 95/180

5: Sentencias de Control en C

  while(i<=N) {   suma=suma + (oat) i/((i+1)*(i+1));   i++;   } 

  cout<<”La suma es: “<<suma<<endl;   system(“PAUSE”);   return EXIT_SUCCESS; } 

13  Programa que convierte de un numero en el sistema binario a decimal.

#include <cmath> #include <iostream> 

using namespace std; int main(int argc, char *argv[]) {   int N, numB,numD=0, digitos,i=0,X;   cout<<”Ingrese el número en binario: “;   cin>>numB;   while(numB>0)   {   X = numB % 10;   numB = numB / 10;   numD = numD + X*pow(2.0,i);   i++;   }   cout<<”En decimal es: “<<numD<<endl;

system(“PAUSE”);   return EXIT_SUCCESS; } 

14  Programa que simula un menú y selecciona una operación de suma,resta o multiplicación de dos números, sale del programa al seleccionar laopción 4.

#include <iostream> using namespace std; int main(int argc, char *argv[]) {   int seleccion; 

  int A,B;   do 

95

Page 96: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 96/180

Fundamentos de Programación

96

  {   cout<<”\t\t\tOperaciones”<<endl;   cout<<”\t*****************************************”<<endl;   cout<<”\tIngrese dos números: “<<endl; 

  cin>>A>>B;   cout<<”\t\t1) Sumar”<<endl;   cout<<”\t\t2) Restar”<<endl;   cout<<”\t\t3) Multiplicar”<<endl;   cout<<”\t\t4) Salir”<<endl;   cout<<”\t*****************************************”<<endl;   cout<<”\t\tEscoge una opcion: “;   cin>>seleccion;   switch(seleccion) 

  {   case 1:   cout<<”\t\tLa suma es: “<<A+B<<endl<<endl; break;   case 2:   cout<<”\t\tLa resta es: “<<A-B<<endl<<endl; break;   case 3:   cout<<”\t\tEl producto es:”<<A*B<<endl<<endl; break;   }   } while(seleccion!=4); 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

Page 97: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 97/180

6Arrays

97

6.1 ¿QUÉ ES UN ARRAY?

Un array (matriz o vector) es un conjunto nito y ordenado de elementoshomogéneos.

 • Finito, porque tiene un elemento inicial o primero y un elemento nal. • Ordenado, signica que el elemento primero, segundo, tercero, … e-nésimo de un array puede ser identicado. • Homogéneos, es decir, todos los elementos del array son del mismotipo de datos.

Una variable de array se puede ver como un conjunto de variables del mis-mo tipo a las que denominamos con un nombre común.

Algunas características importantes de los arrays son:

 Los elementos del array se almacenan consecutivamente en memo-•ria. El nombre del array especica la dirección en memoria del primer ele-•mento del mismo.

 El nombre del array es una dirección constante, es decir no puede• modicarse su valor. Como tipo estructurado, no esta permitida la lectura y escritura directa•sobre dispositivos de E/S estándares. Este tipo de operaciones deberealizarse elemento a elemento. Todas las operaciones disponibles sobre los tipos asociados a las•componentes, pueden usarse sobre ellos.

Por ejemplo: las notas de 30 estudiantes se representaría mediante un

array por:

Page 98: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 98/180

Fundamentos de Programación

98

nota[0] nota[1] nota[2] nota[3] nota[4] .... nota[29]

10 12 14 16 09 .... 15

Cuando declaramos una variable lo que estamos haciendo es reservar unazona de la memoria para ella. Cuando declaramos un array lo que hacemoses reservar espacio en memoria para 30 variables de tipo int. El tamaño delarray (30) lo indicamos entre corchetes al denirlo. Esta es la parte de ladenición que dice: Un array es un conjunto de variables del mismo tipo quetienen el mismo nombre.La parte nal de la denición dice: y se diferencian en el índice. En ejemplorecorremos la matriz mediante un bucle for y vamos dando valores a losdistintos elementos de la matriz. Para indicar a qué elemento nos referimosusamos un número entre corchetes (en este caso la variable hora), estenúmero es lo que se llama Indice. El primer elemento de la matriz en C tieneel índice 0, El segundo tiene el 1 y así sucesivamente. De modo que si que-remos dar un valor al elemento 4 (índice 3) haremos:  nota[ 3 ] = 20;

Declaración de un array unidimensional

La forma general de declarar un array unidimensional es la siguiente:

tipo_de_dato nombre_del_array[dimensión];

Donde:El• tipo_de_dato  es uno de los tipos de datos conocidos (int, char,oat...) o de los denidos por el usuario con typdef.El• nombre_del_array es el nombre que damos al array.

La• dimensión es el número de elementos que tiene el array.

Inicializar un array unidimensionalEn C se pueden inicializar los arrays al declararlos al igual que con las va-riables. Pues con arrays se puede hacer:

int notas [30] = { 15, 18, 20, 13, 12, 14, 12, 15, 16, 15, 14, 12, 12, 20, 18, 17,16, 17, 15, 14, 14, 14, 13, 12, 10, 08, 13, 20, 18, 02 };

Ahora el elemento 0 (que será el primero), es decir notas [0] valdrá 15. Elelemento 1 (el segundo) valdrá 18 y así con sucesivamente. Vamos a ver

Page 99: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 99/180

6: Arrays

un ejemplo: 

#include <iostream>  int main()

  {  int i;  int nota[30] = { 15, 18, 20, 13, 12, 14, 12, 15, 16, 15, 14, 12, 12, 20, 18,

17, 16, 17, 15, 14, 14, 14, 13, 12, 10, 08, 13, 20, 18, 02 };  for (i=0 ; i<30 ; i++ )  {  cout<<“La nota del alumno <<” i+1<<” es: ”<<nota[i];  }  }

Le hemos indicado al compilador que nos reserve memoria para un arrayde 30 elementos de tipo int. ¿Qué ocurre si metemos menos de los reserva-dos? Pues no pasa nada, sólo que los elementos que falten valdrán cero.

En algunos casos podemos usar un método alternativo, dejar al ordenadorque cuente los elementos que hemos metido y nos reserve espacio paraellos: #include <iostream>

  int main()  {  int temperaturas[] = { 15, 18, 20, 23, 22, 24, 22, 25,

26, 25, 24, 22, 21, 20, 18, 17, 16, 17, 15, 14, 14 };  }

Vemos que no hemos especicado la dimensión del array temperaturas.Hemos dejado los corchetes en blanco. El ordenador contará los elementosque hemos puesto entre llaves y reservará espacio para ellos. De esta formasiempre habrá el espacio necesario.

6.2 OPERACIONES CON ARRAYS

Las operaciones que se pueden realizar con arrays durante el proceso deresolución de un problema son:

asignación•lectura / escritura•

recorrido (acceso secuencial)• actualizar (añadir, borrar, insertar)•

99

Page 100: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 100/180

Fundamentos de Programación

100

 ordenación•búsqueda•

Asignación

La asignación de valores a un elemento del array se realiza con la instruc-ción de asignación, considerando siempre el nombre del array con el indicela cual se asigna el valor, tiene la forma:

nombre_array [indice] = valor;

Por ejemplo:A[5] = 24; //asigna el valor de 24 al array A en la posición 24

Notas[10] = 12; //asigna el valor de 12 al array “notas” en la posición 10

Para asignar varios valores a todos lo elementos del array se suele utilizaruna estructura FOR o WHILE.

Por ejemplo se desea asignar los primeros 20 números naturales esto seharía como:  for(int i=0; i<20; i++)  numero[i] = i+1;

Lectura/EscrituraSe realiza utilizando la sentencia de lectura (cin o scanf) y escritura (cout oprintf), considerando el nombre y el índice del elemento del array a leer oescribir:

cin>>V[5]; Lee el elemento 5 del array y asigna el valor ingresado porteclado.cout<< (A[7]); Escribe en pantalla el valor del elemento 7 del array A.

Para realizar la escritura o lectura de varios elementos de un array se utilizala estructura FOR o WHILE:

Por ejemplo se desea leer 10 valores del array notas que se ingresen porteclado e imprimirlos en pantalla, el programa completo en Dev C++ sería:

 /**************************************/ 

#include <cstdlib>#include <iostream>

Page 101: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 101/180

6: Arrays

using namespace std;int main(int argc, char *argv[]){  int notas[10];

  //lectura de datos  for (i=0; i<10; i++) {  cout<<”ingrese la nota “<<i+1<<”: “;  cin>>notas[i];  }  //escritura de datos  for (i=0; i<10; i++) {  cout<<” nota “<<i+1<<”: “<<notas[i]<<endl;  }

  system(“PAUSE”);  return EXIT_SUCCESS;}

Recorrer un ArrayA la operación de efectuar una acción general sobre todos los elementosde un array se denomina recorrido del array. Estas operaciones se realizanutilizando estructuras repetitivas, cuyas variables de control se utilizan comosubíndices del array. El incremento del contador del bucle producirá el trata-

miento sucesivo de cada elemento del vector.Por ejemplo:Implementar un programa que halle el promedio de 10 notas ingresadas porteclado.El programa en Dev c++ sería:

#include <cstdlib>#include <iostream>#dene N 10using namespace std;int main(int argc, char *argv[]){  int i;

oat prom, suma;  long int dato[N]; 

 //lectura de datos

  for(i=0; i<N; i++) {  cout<<”Ingrese dato: “<<i+1<<”: “;

101

Page 102: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 102/180

Fundamentos de Programación

102

  cin>>dato[i];  }  suma=0; 

 //recorrido  for(i=0; i<N; i++)suma=dato[i];

  prom=suma/N;

  cout<<”\nEl promedio es: “<<prom;  system(“PAUSE”);  return EXIT_SUCCESS;

}

6.3 ARRAY BIDIMENSIONAL (MATRICES)

Un array bidimensional es esencialmente un array de arrays unidimensio-nales, es llamado también matriz. Se denen igual que los arrays unidi-mensionales excepto que se requiere un índice por cada dimensión. Estaconformado por las y columnas.

Un array bidimensional también denominado matriz (términos matemáticos)o tabla (términos nancieros) se considera que tiene dos dimensiones (unadimensión por cada índice) y necesita un valor para cada subíndice parapoder identicar un elemento individual. En notación estándar, normalmenteel primer subíndice se reere a la la del array, mientras que el segundosubíndice se reere a la columna.

0 1 2 3

0 A[0][0] A[0][1] A[0][2] A[0][3]

1 A[1][0] A[1][1] A[1][2] A[1][3]

2 A[2][0] A[2][1] A[2][2] A[2][3]

Indice de columnas

Indice de las

La sintaxis de la declaración de un array bidimensional es la siguiente:

tipo_de_dato nombre_del_array[ dimensión 1 ][ dimensión 2];

Por ejemplo:double A[5][10]; //declara una matriz A de 5 las por 10 columnas,

Page 103: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 103/180

6: Arrays

  //cuyos datos son de tipo double.Existen también los arrays multidimensionles, la matriz tridimensional se uti-liza, por ejemplo, para trabajos grácos con objetos 3D.

Lectura / escritura de matricesTanto para la lectura como para la escritura de datos se necesitan dos bu -cles; un bucle controla las las y otro las columnas.

  #include <iostream>  int main()

{  int F,C,numeros[3][4];  /* lectura de datos del array */ 

  for (F=0;F<3;F++)  for (C=0;C<4;C++)  cin>>numeros[F][C];

  /* escritura del array */   for (F=0;F<3;F++)  for (C=0;C<4;C++)  cout<<numeros[F][C];  }

Inicialización de arrays bidimensionalesSi al declarar una matriz también queremos inicializarla, habrá que tenerencuentra el orden en el que los valores son asignados a los elementos dela matriz. Veamos algunos ejemplos:

int numeros[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

Quedarían asignados de la siguiente manera:numeros[0][0]=1 numeros[0][1]=2 numeros[0][2]=3numeros[0][3]=4 numeros[1][0]=5 numeros[1][1]=6numeros[1][2]=7 numeros[1][3]=8 numeros[2][0]=9numeros[2][1]=10 numeros[2][2]=11 numeros[2][3]=12

También se pueden inicializar cadenas de texto:

Char dias[7][10]={“lunes”, “martes”, “miércoles”,

  “jueves”, “viernes”, “sábado”, domingo”};

103

Page 104: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 104/180

Fundamentos de Programación

104

Para referirnos a cada palabra bastaría con el primer índice:cout<<dias[i];

6.4 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1   Programa que genera 20 números aleatorios y los almacena en unarray, y luego los escribe en pantalla

#include <iostream> 

#include <cstdlib> 

#include <ctime> 

#dene N 20 using namespace std; 

int main(int argc, char *argv[]) { 

  int a[N]; 

  srand(time(0));for(int i=0; i<N; i++) { 

  a[i]=1 + rand() % 21;   } 

  cout<<”los numeros son: “<<endl;   for(int i=0; i<N; i++)

cout<<a[i]<<endl; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

2 Programa que muestra las operaciones básicas sobre un array: lectura,escritura y asignación

#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 

  int i, max, min, sum; oat prom_;   long int notas[5];   sum = 1;   //lectura de datos 

  for(i=0; i<5; i++) {   cout<<”Ingrese dato: “<<i+1<<”: “; 

Page 105: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 105/180

6: Arrays

  cin>>notas[i]; 

  } 

  //escritura

  cout<<”\nLos datos son:\n”; 

  for(i=0; i<5; i++) {   cout<<”\n\t”<<notas[i]; 

  } 

  //asignación 

  cout<<”\nLos datos incrementados en 5 son:\n”;   for(i=0; i<5; i++) {   notas[i]=notas[i]+5;   cout<<”\n\t”<<notas[i]; 

  } 

  cout<<endl; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

3 Programa que muestra un histograma con el caracter asterisco (*)

#include <cstdlib> 

#include <iostream> #dene SIZE 10 using namespace std; 

int main(int argc, char *argv[]) 

  int n[SIZE] = {19, 3, 15, 7, 11, 9, 13, 5, 17, 1};   int i, j; 

  cout<<”Elemento”<<’\t’<<”Valor”<<’\t’<<”histograma”<<endl; 

  for(i=0; i<= SIZE -1;i++){   cout<<i<<’\t’<<’\t’<<n[i]<<’\t’; 

  for(j=1; j<=n[i];j++)   cout<<’*’; 

  cout<<endl;

  system(“PAUSE”);

return EXIT_SUCCESS; 

105

Page 106: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 106/180

Fundamentos de Programación

106

4 Programa que muestra la serie de Fibonacci, ingresando el número detérminos a visualizar.

#include <cstdlib> 

#include <iostream> using namespace std; 

int main(int argc, char *argv[]) 

  int bo[20],N,i;   cout<<”Ingrese el numero de terminos “; 

  cin>>N; 

  bo[0]=1;   bo[1]=1;   for(i=2; i<N; i++)   bo[i]=bo[i-1]+bo[i-2];   for(i=0; i<N; i++)   cout<<i+1<<”) “<<bo[i]<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; 

5Programa que halla el promedio de notas de alumnos, además lee yescribe el nombre de los estudiantes:

#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 

  int notas[2]; 

  char nombre[2][30];   int i,suma; oat promedio;  

 //lectura de datos 

  for (i=0; i<2; i++) {   cout<<”ingrese el nombre “<<i+1<<”: “;   cin>>nombre[i]; 

  cout<<”ingrese la nota “<<i+1<<”: “;   cin>>notas[i]; 

  } 

  //procesamiento 

Page 107: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 107/180

6: Arrays

  for (i=0; i<2; i++) {   suma+=notas[i]; 

  } 

  promedio=(oat)suma/2; 

   //escritura de datos 

  for (i=0; i<2; i++) {   cout<<”Nombre “<<i+1<<”: “<<nombre[i];   cout<<” nota “<<i+1<<”: “<<notas[i]<<endl;   } 

  cout<<endl<<”El promedio es”<<promedio; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; } 

6 Programa que halla el mayor, menor, promedio, varianza y desviaciónestándar de N datos ingresados por teclado

#include <iostream> 

#dene N 5 using namespace std; 

int main(int argc, char *argv[]) { 

  int i, max, min, x, y;

oat prom, sum1, sum2,varianza, dstandar;   long int dato[N]; 

  //lectura de datos 

  for(i=0; i<N; i++) {   cout<<”Ingrese dato: “<<i+1<<”: “; 

  cin>>dato[i];   } 

  max=dato[0];   min=dato[0];   sum1=0;   sum2=0;   //procesamiento 

  for(i=1; i<N; i++) {   if(dato[i]<max) { 

  max=dato[i];   x=i; 

107

Page 108: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 108/180

Fundamentos de Programación

108

  } 

  if(min>dato[i]) {   min=dato[i]; 

  y=i; 

  }   } 

  for(i=0; i<N; i++) {   sum1=dato[i];   sum2=pow((dato[i]-prom),2); 

  } 

  prom=sum1/N;   varianza=sum2/N; 

  dstandar=sqrt(varianza); 

  cout<<”\nEl máximo es: “<<max<<” Posición: “<<x   <<”\nEl menor es: “<<max<<” Posición: “<<y   <<”\nEl promedio es: “<<prom   <<”\nLa varianza es: “<<varianza  <<”\nLa desviación standar es: “<<dstandar; 

  cout<<endl; 

  system(“PAUSE”);   return EXIT_SUCCESS; 

7  Programa que realiza operaciones de lectura y escritura con matrices

#include <iostream> 

#include <ctime> 

#dene las 4 #dene colum 4 using namespace std; 

int main(int argc, char *argv[]) 

  int a[las][colum];   int i,j; 

 

srand(time(0)); 

  //ingreso de datos a un array bidimensional   for(i=0; i<las; i++) 

Page 109: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 109/180

6: Arrays

  for(j=0; j<colum; j++)   a[i][j]=1+rand() % 50;

 //Recorrido y escritura del array   for(i=0; i<las; i++)for(j=0; j<colum; j++) { 

  cout<<a[i][j]<<”\t”;

if(j==colum-1) cout<<endl;   } 

 

system(“PAUSE”); 

  return EXIT_SUCCESS; } 

8 Programa que escribe una matriz donde se tiene 1 en la diagonal princi-pal y 0 en las demás posiciones.

#include <iostream> 

#dene las 4 #dene colum 4 using namespace std; int main(int argc, char *argv[]) 

  int a[las][colum];   int i,j; 

  //ingreso de datos a un array bidimensional 

  for(i=0; i<las; i++)   for(j=0; j<colum; j++) { 

  if(i==j)   a[i][j]=1;   else 

  a[i][j]=0;} 

  //Recorrido y escritura del array   for(i=0; i<las; i++)

for(j=0; j<colum; j++) {   cout<<a[i][j]<<”\t”;

if(j==colum-1) cout<<endl;   } 

109

Page 110: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 110/180

Fundamentos de Programación

110

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

9 Programa que genera un cuadrada mágico con arrays

#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 

  int n,a=0,i=1,b,m[100][100];   cout<<”Ingrese dimension para la matriz = “;cin>>n;   cout<<endl; 

  b=n/2;while(i<=(n*n)){ 

  if(a<0)a=n-1;   if(b==n)b=0;   if(m[a][b]>=1&&m[a][b]<=(n*n)){   a=a+2;b--; 

  if (!(a<n))a=a-n;   if(b<0)b=n-1;   m[a][b]=i; 

  } 

  else {m[a][b]=i;} 

  --a;++b; 

  i++; 

  } 

  for(int i=0;i<n;i++){   for(int j=0;j<n;j++){   cout<<m[i][j]<<”\t”; 

  }   cout<<endl; 

  } 

  cout<<endl; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

Page 111: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 111/180

7  Funciones en C

111

7.1 ¿QUÉ SON LAS FUNCIONES?

Una función es un proceso que realiza una determinada tarea, tiene un nom-

bre y es capaz de recibir datos y devolver resultados a través de variablesespeciales que toman el nombre de parámetros e inclusive a través de supropio nombre. Las funciones son los bloques constructores de C y el lugaren donde se da toda la actividad del programa.

Desde el punto de vista matemático, una función es una operación que tomauno o varios operandos, y devuelve un resultado.

  F(x) = x-5 ;Si x = 7 entonces: F(7) = 7 – 5 = 2 que es el valor que devuelve.

Desde el punto de vista algorítmico, es un subprograma que toma uno ovarios parámetros como entrada y devuelve a la salida un único resultado.Este único resultado irá asociado al nombre de la función. Hay dos tipos defunciones:

 Internas: Son las que vienen denidas por defecto en el lenguaje.•Externas: Las dene el usuario y les da un nombre o identicador.•

Para llamar a una función se da su nombre, y entre paréntesis van los argu-mentos o parámetros que se quieren pasar.

La forma general de una función es:

Page 112: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 112/180

Fundamentos de Programación

112

Tipo_de_dato nombre_función( lista_parámetros){  Declaraciones locales;  Sentencias de la función;

<return ( );> //depende de tipo de dato}

Donde;Tipo_de_dato, especica el tipo de valor que devuelve la sentencia returnde la función. El valor puede ser cualquier tipo válido. Si no se especicaningún tipo, el compilador asume que la función devuelve como resultado

un entero.

Nombre_función, es el identicador o nombre de la función, el cual debeser lo más descriptivo posible de las tareas que realiza la función y cumpletodos los requisitos de un identicador en C. Para el nombre no se puedenusar mas que letras, números y el símbolo ‘_’. No se pueden usar ni acentosni espacios. Además el nombre de la función debe empezar por una letra,no puede empezar con un número. El nombre de la función se usa parallamarla dentro del programa.

Lista_parámetros, es la lista de nombres de variables separados por co-mas con sus tipos asociados que reciben los valores de los argumentoscuando se llama a la función. Una función puede no tener parámetros encuyo caso la lista de parámetros contiene la palabra clave void.

Además: La función main( ), es la primera función que aparece dentro de un•programa C, y dentro de ella se presentan llamadas a otras funcio-

nes. Una función lleva entre paréntesis una lista de argumentos, la cual son•la clave para la comunicación entre funciones. Toda función posee un cuerpo de programa encerrado entre llaves.•

7.2. CLASES DE FUNCIONES

Existen dos tipos generales de funciones en C, según el tipo de dato quedevuelve:

 El tipo void (procedimiento) y•El tipo que retorna un valor (función)•

Page 113: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 113/180

7: Funciones en C

a) El tipo void (procedimiento)Se utiliza para operaciones de entrada/salida, efectuar procesos de ordena-ción, búsqueda, etc. No utiliza la sentencia return, ya que no retorna un solovalor, sino realiza un conjunto de actividades. Para llamar a un procedimien-

to solamente se escribe el nombre seguido de los parámetros.  nombre ( parámetros );

b) El tipo que retorna un valor (función)Retornan un solo valor, cuyo tipo se indica en la cabecera de la función.Este valor es devuelto a la sentencia de llamada a la función por medio dela sentencia return. Si la sentencia return no se especica o se especicasin contener una expresión, la función no devuelve un valor. Para llamar unafunción se asigna a una variable:

  Variable = nombre ( parámetros );

Ejemplo: El siguiente programa implementado con funciones retorna lasuma de dos valores ingresados por teclado.

#include <iostream.h>

 //Declaración del prototipo de la funciónint suma(int a, int b);

void main(){  int num1, num2;  cout<<”Ingrese dos numeros:”;  cin>>num1>>num2;  cout<<”La suma es: “<<suma(num1,num2);}

 //Implementación de la funciónint suma(x,y){ return(x+y); }

Ejemplo: El siguiente programa muestra la utilización de las clases de fun-ciones, implementado en Dev c++.

#include <cstdlib>#include <iostream>

void ingreso(int x[5]);oat promedio(int x[5]);

113

Page 114: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 114/180

Fundamentos de Programación

114

void salida(oat p);

using namespace std;

int main(int argc, char *argv[]){  int x[5]; oat p;  ingreso(x); //llamada a procedimiento  p = promedio(x); //llamada a función promedio  salida(p); //llamada a procedimiento  system(“PAUSE”);  return EXIT_SUCCESS;}

 //Implementación de las funcionesvoid ingreso(int x[5]){

system(“CLS”);  cout<<”Ingrese 5 núm.”<<endl;  for ( int i=0;i<5;i++ ) {  cout<<”Numero “<<i+1<<”) “;  cin>>x[i];  }

}oat promedio(int x[5]){

int sum=0; oat prom;  for( int i=0; i<5; i++ )

sum+=x[i];  prom=oat( sum )/ 5.0;  return( prom );

}void salida( oat p){  cout<<endl<<endl;  cout<<”El promedio es: “<<p;}

7.3 AMBITO DE LAS VARIABLES

Las variables utilizadas en los programas se clasican en dos tipos:Variables locales.

Page 115: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 115/180

7: Funciones en C

Variables globales.

Variables localesUna variable local es aquella que está declarada y denida dentro de una

función, en el sentido de que está dentro de esa función y es distinta de lasvariables con el mismo nombre declaradas en cualquier parte del programaprincipal. El signicado de una variable se conna a la función en la que estádeclarada. Cuando otra función utiliza el mismo nombre se reere a unaposición diferente en memoria. Se dice que tales variable son locales a lafunción en el que están declaradas.

Variables globalesUna variable global es aquellas que está declarada para el programa princi-

pal, del que dependen todas las funciones.La parte del programa en que una variable se dene se conoce como ámbito(scope, en inglés)

El uso de variables locales tiene muchas ventajas. En particular, hace a lasfunciones independientes, con la comunicación entre el programa principaly las funciones manipuladas estructuralmente a través de la lista de pará-metros. Para utilizar una función sólo necesitamos conocer lo que hace yno tenemos que estar preocupados por su diseño, es decir, cómo están

programados.

Las variables locales no pueden conservar sus valores entre distintas llama-das a la función. La única excepción a esta regla se da cuando la variablese declara con el especicador de clase de almacenamiento static. Estohace que el compilador trate a la variable como si fuese una variable global,en cuanto a almacenamiento se reere, pero que siga limitando su ámbitoal interior de la función.

Ejemplo:

#include <stdio.h>

 //Declaración de prototipos de las funcionesvoid func1(void), func2(void);int cuenta; //variable globalmain(void)

{  cuenta=100;

115

Page 116: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 116/180

Fundamentos de Programación

116

  func1();  return 0; //Comunica el éxito al sistema}

 //Implementación de las funciones

int func1(void){int temp;

  temp=cuenta;  func2();  printf(“cuenta es %d”, cuenta); //Imprime 100}void func2(void){

  int cuenta; //nueva variable cuenta, variable local  for(cuenta=1;cuenta<10;cuenta++)  putchar(‘.’);}

Observaciones: Puede notar que aunque ni la función main( ), ni func1( ) han declara-•do la variable cuenta, ambas pueden usarla. Sin embargo la func2( ), declara una nueva variable cuenta (variable•local). Cuando func2( ) hace referencia a cuenta, solo hace referenciaa su variable local, no a la global. Si una variable local y una global tienen el mismo identicador, todas•las referencias a esa variable dentro de la función donde se ha decla-rado se reeren a la variable local y no tiene efecto sobre la variableglobal.

7.4 ARGUMENTO DE FUNCIONES

Si una función va a usar argumentos, debe declarar variables que aceptenlos valores de los argumentos. Estas variables se llaman parámetros for-males de la función. Se comportan como otras variables locales dentro dela función, creándose al entrar en la función y destruyéndose al salir. Comomuestra la siguiente función, la declaración de parámetros aparece despuésdel nombre de la función y antes de la llave de apertura:

Observaciones:

• Los parámetros que se utilizan al momento de la declaración tomanel nombre de parámetros formales y los parámetros que se utilizan al

Page 117: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 117/180

7: Funciones en C

momento de le ejecución toman el nombre de parámetros actuales.• Los parámetros formales y los parámetros actuales deben tener una

correspondencia en número y en tipo dato; es decir que si se decla-raron 3 parámetros formales, deben utilizarse 3 parámetros actuales

y si el primer parámetro formal fuera de tipo oat, el primer parámetroactual también debe ser de tipo oat.• A un parámetro actual que le corresponde un parámetro formal de

ENTRADA se le conoce con el nombre de parámetro de valor y a unparámetro actual que le corresponde un parámetro formal de SALIDAo ENTRADA/SALIDA se le conoce con el nombre de parámetro dereferencia.

• Un parámetro de valor no necesariamente debe ser una variable; encambio un parámetro de referencia si necesariamente debe ser una

variable ya que cuando termina la ejecución del proceso los resultadosque devuelve son recibidos por los parámetros de referencia corres-pondiente.

• Cuando se ejecuta una función el control de ejecución del computa-dor se dirige hacia el lugar de desarrollo de dicha función, ejecuta lasinstrucciones que forma parte de ella y cuando termina, el control deejecución regresa a la siguiente sentencia desde donde se le ejecutó.

 /*devuelve 1 si c es parte de la cadena cad; 0 de otro modo.*/ 

esta_en(char *cad, char c){

while(*cad)  if(*cad==c)  return 1;  else  cad++;  return 0;}

La función esta_en( ) tiene dos parámetros: cad y c. Esta función devuelve1 si el carácter c forma parte de la cadena cad; en otro caso, la función de -vuelve 0.

Llamada por valor y llamada por referenciaEn general se pueden pasar argumentos a las funciones de dos formas.

Llamada por valor y•

Llamada por referencia.•

117

Page 118: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 118/180

Fundamentos de Programación

118

a) Llamada por valorEste método copia el valor de un argumento en el parámetro formal de lafunción. De esta forma los cambios en los parámetros de la función no afec-tan a las variables que se usan en la llamada.

b) Llamada por referenciaLa llamada por referencia es la segunda forma de pasar argumentos a unafunción. En este método se copia la dirección del argumento en el paráme-tro. Dentro de la función se usa la dirección para acceder al argumento usa-do en la llamada. Esto signica que los cambios hechos a los parámetrosafectan a la variable usada en la llamada a la función.

Ejemplo de una llamada por valor:

#include <iostream>int cuad(int x);int main(){ int t = 10;  cout<<cuad(t)<< t;  return 0;}cuad(int x){ x=x*x;  return(x);}

En este ejemplo, se copia el valor del argumento de cuad( ), 10, en el pa -rámetro x. Cuando se realiza la asignación x=x*x, el único elemento quese modica es la variable local x. La variable t, usada para llamar a cuad(),todavía tiene el valor 10. De esta forma la salida es:100 10

Ejemplo de una llamada por referencia:Para realizar la llamada por referencia, se pasa un puntero al argumento.Como esto hace que se pase la dirección del argumento a la función, esposible cambiar el valor del argumento exterior de la función. Los punterosse pasan a las funciones como cualquier otro valor. Por supuesto, es nece-sario declarar los parámetros como tipo puntero.

#include <iostream>int intercambio(int *x, int *y);

int main(){

Page 119: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 119/180

7: Funciones en C

  int x,y;  x=10; y=20;

intercambio(&x, &y);cout<<x<<y;

  return 0;}void intercambio(int *x, int *y){  int temp;  temp = *x;  *x = *y;  *y = temp;}

En este ejemplo, a la variable “x” se le asigna el valor 10 y a “y” se le asignael valor 20. Después, se llama a intercambio( ) con las direcciones de “x” yde “y”. Se utiliza el operador monario & para obtener la dirección de las va-riables. De esta manera, las direcciones de “x” y de “y”, no sus valores, sonlas que se pasan a la función intercambio().

7.5 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1  Programa que halla el factorial de un número en base a funciones#include <iostream> 

using namespace std; 

long int factorial(int N); int main(int argc, char *argv[]) 

  int num; 

  cout<<”Ingrese un numero: “; 

  cin>>num;   cout<<”El factorial de “<<num<<” es: “<<factorial(num)<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; 

long int factorial(int N) {   long int fac=1;   for(int i=1; i<=N; i++)   fac=fac*i; 

  return(fac); } 

119

Page 120: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 120/180

Fundamentos de Programación

120

2 Programa que muestra el paso por valor de parámetros, realiza la per-mutación de valores:

#include <iostream> using namespace std; 

void permutar(int &a,int &b){   int temp; 

  temp=a;

a=b; 

  b=temp; 

int main(int argc, char *argv[]) 

{   int x=25; int y=30;   cout<<”valor de X: “<<x<<endl;   cout<<”valor de Y: “<<y<<endl;   permutar(x,y); 

  cout<<”valor de X: “<<x<<endl;   cout<<”valor de Y: “<<y<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; 

3 Programa que devuelve el número de variaciones de “a” elementos to-mados de “b“ en “b”. Ambos datos son parámetros. Utilizar la función facto-

rial. Utilice la siguiente ecuación:!

( )! !

a   a

b   a b b

=

#include <iostream> 

using namespace std; long int factorial(int N); int main(int argc, char *argv[]) 

  int a,b; 

  oat comb;   cout<<”Ingrese el primer numero: “; cin>>a;   cout<<”Ingrese el segundo numero: “; cin>>b;

comb=factorial(a)/(factorial(a-b)*factorial(b));

cout<<”La combinacion es: “<<comb<<endl;   system(“PAUSE”); 

Page 121: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 121/180

7: Funciones en C

  return EXIT_SUCCESS; 

long int factorial(int N) {   long int fac=1; 

  for(int i=1; i<=N; i++)   fac=fac*i;   return(fac); } 

4 Programa que simula un menú con 4 opciones y calcula:1) Area de un triángulo2) Area de un cuadrado3) Area de un circulo

4) Area de un rectánguloSale del programa al pulsar la tecla “n”.

#include <iostream> 

#dene pi 3.1415 using namespace std; 

 //declaración de funciones void menu(); 

void area_triangulo(); 

void area_cuadrado(); void area_circulo(); 

void area_rectangulo(); 

 //declaración de variables globales 

int op; 

char SN; 

int main(int argc, char *argv[]) 

  int x,y,z;   do { 

  system(“CLS”); 

  menu(); 

  switch (op){ 

  case 1: area_triangulo(); break;   case 2: area_cuadrado(); break;   case 3: area_circulo(); break;   case 4: area_rectangulo(); break;

}   }while(SN != ‘n’); 

121

Page 122: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 122/180

Fundamentos de Programación

122

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

 //Implementación de funciones 

void menu(){   cout<<”\t\t\tMenu Principal”<<endl; 

  cout<<”\t\t===================================”<<endl; 

  cout<<”\t\t\t1) Area del triangulo “<<endl;   cout<<”\t\t\t2) Area del cuadrado “<<endl; 

  cout<<”\t\t\t3) Area del circulo “<<endl;   cout<<”\t\t\t4) Area del rectangulo “<<endl;

cout<<”\t\t===================================”<<endl; 

  cout<<”\t\tSeleccione una opcion: “; 

  cin>>op; } 

void area_triangulo(){ 

  oat base, altura,at;   cout<<”\n\n\t\tHallando el area de un triangulo...\n\n”; 

  cout<<”\t\tIngrese la base: “; cin>>base;   cout<<”\t\tIngrese la altura: “; cin>>altura;   at = base * altura /2; 

  cout<<”\t\tEl area del triangulo es: “<<at<<endl<<endl; 

  cout<<”\t\tDesea continuar (s/n) :”;   cin>>SN; 

void area_cuadrado(){ 

  oat lado, ac;   cout<<”\n\n\t\tHallando el area de un cuadrado...\n\n”; 

  cout<<”\t\tIngrese el lado del cuadrado: “; cin>>lado;   ac = lado * lado; 

  cout<<”\t\tEl area del cuadrado es: “<<ac<<endl<<endl;   cout<<”\t\tDesea continuar (s/n) :”;   cin>>SN; 

void area_circulo(){ 

  oat radio, aci;   cout<<”\n\n\t\tHallando el area de un circulo...\n\n”; 

  cout<<”\t\tIngrese el radio: “; cin>>radio;   aci = pi * radio * radio; 

  cout<<”\t\tEl area del ciruclo es: “<<aci<<endl<<endl;   cout<<”\t\tDesea continuar (s/n) :”; 

Page 123: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 123/180

7: Funciones en C

  cin>>SN; 

void area_rectangulo(){ 

  oat base, altura, ar; 

  cout<<”\n\n\t\tHallando el area de un rectangulo...\n\n”;   cout<<”\t\tIngrese la base: “; cin>>base;   cout<<”\t\tIngrese la altura: “; cin>>altura;   ar = base * altura; 

  cout<<”\t\tEl area del rectangulo es: “<<ar<<endl<<endl;   cout<<”\t\tDesea continuar (s/n) :”;   cin>>SN; 

5 Programa que halla el mayor y el menor de 10 números ingresados porteclado, utilizando arrays como parámetros de funciones.

#include <iostream> 

#dene N 10  //declaracion de funciones void leer_datos(void); 

int mayor(int A[N]); 

int menor(int A[N]); 

void mostrar_datos(void); 

using namespace std; 

 //declaracion de variables globales 

int ma,me; 

int A[N]; 

 //programa principal 

int main(int argc, char *argv[]) 

{   int x; 

  leer_datos(); 

  ma=mayor(A); 

  me=menor(A); 

  mostrar_datos(); 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

 //implementación de funciones void leer_datos(void) { 

123

Page 124: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 124/180

Fundamentos de Programación

124

  cout<<”Ingrese 10 numeros”<<endl;   for(int i=0; i<N; i++)   cin>>A[i]; 

  ma=me=A[0];

} int mayor(int A[N]) { 

  for(int i=1; i<N; i++)   if(A[i]>ma)   ma=A[i]; 

  return ma;

int menor(int A[N]) { 

  for(int i=1; i<N; i++) 

  if(A[i]<me)   me=A[i]; 

  return me;

void mostrar_datos(void){ 

  cout<<”Los numeros son: “<<endl;   for(int i=0; i<N; i++)   cout<<i+1<<”)”<<A[i]<<endl;   cout<<”El numero mayor es: “<<ma<<endl<<endl; 

  cout<<”El numero menor es: “<<me<<endl<<endl; } 

6 Programa que simula el juego de tres en raya entre dos jugadores, lainterfaz es la siguiente:

#include <iostream> 

#include <stdlib.h> 

#include <string.h> 

using namespace std; 

#dene C “+” // Cruce 

#dene H “-” // Horizontal #dene V “|” // Vertical 

Page 125: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 125/180

7: Funciones en C

char a1=’ ‘,a2=’ ‘,a3=’ ‘,b1=’ ‘,b2=’ ‘,b3=’ ‘,c1=’ ‘,c2=’ ‘,c3=’ ‘,turno,again; string cha=” “; int win=-1,jug,i=0; void tablero(); 

void tablero(){  system(“cls”); 

cout << “\t\t\t 1 2 3”<< endl   << “\t\t\t “ << V << “ “ << V << “ “ << endl 

  << “\t\t\tA “ << a1 << “ “ << V << “ “ << a2 << “ “<< V << “ “ << a3 << “ “ << endl 

  << “\t\t\t “ << V << “ “ << V << “ “ << endl 

  << “\t\t\t “ << H << H << H << H << H << C << H

<< H << H << H << H << H << C << H << H << H

<< H << H << endl<< “\t\t\t “ << V << “ “<< V << “ “ << endl<< “\t\t\tB “ << b1 << “ “<< V << “ “ << b2 << “ “ << V << “ “ << b3 << “ “<< endl << “\t\t\t “ << V << “ “ << V << “ “

<< endl << “\t\t\t “ << H << H << H << H << H << C

<< H << H << H << H << H << H << C << H << H

<< H << H << H << endl << “\t\t\t “ << V << “ “

<< V << “ “ << endl<< “\t\t\tC “ << c1 << “ “<< V << “ “ << c2 << “ “ << V << “ “ << c3 << “ “

<< endl << “\t\t\t “ << V << “ “ << V << “ “<< endl << endl; 

  } 

int main(int argc, char *argv[]){ 

  while (1){   if(i%2==0){ jug=1; turno=’X’; }   if(i%2==1){ jug=2; turno=’O’; }   tablero(); 

  if ((a1!=’ ‘)&&(a2!=’ ‘)&&(a3!=’ ‘)&&(b1!=’ ‘)&&(b2!=’ ‘)&&(b3!=’ ‘)&&(c1!=’‘)&&(c2!=’ ‘)&&(c3!=’ ‘)) win=0;   if ((a1!=’ ‘)&&(a1==a2)&&(a1==a3)) win=1;   if ((a1!=’ ‘)&&(a1==b1)&&(a1==c1)) win=1;   if ((a1!=’ ‘)&&(a1==b2)&&(a1==c3)) win=1;   if ((b1!=’ ‘)&&(b1==b2)&&(b1==b3)) win=1;   if ((c1!=’ ‘)&&(c1==c2)&&(c1==c3)) win=1;   if ((a2!=’ ‘)&&(a2==b2)&&(a2==c2)) win=1;   if ((a3!=’ ‘)&&(a3==b3)&&(a3==c3)) win=1; 

  if ((c1!=’ ‘)&&(c1==b2)&&(c1==a3)) win=1;   if (win==0) cout << “\t\tEmpate.\n\n”; 

125

Page 126: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 126/180

Fundamentos de Programación

126

  if (win==1) cout << “\t\tGanó el jugador “ << jug << “ (“ << turno << “),  ¡felicidades!\n\n”;

if ((win==0)||(win==1)){   cout << “\t\t¿Desea volver a jugar? [S\\N] - “; 

  cin >> again;   while((again!=’s’)&&(again!=’S’)&&(again!=’n’)&&(again!=’N’)){   cout << “ERROR: Responda sólo con S(Sí) o N(No)...\n\n”   “\t\t¿Desea volver a jugar? [S\\N]”; 

  cin >> again; 

  } 

  switch(again){ 

  case ‘s’:case ‘S’:   a1=’ ‘,a2=’ ‘,a3=’ ‘,b1=’ ‘,b2=’ ‘,b3=’ ‘,c1=’ ‘,c2=’ ‘,c3=’

‘,win=-1,i=0;   tablero(); 

  break;   case ‘n’:case ‘N’:   return 0;   break;   } 

  } 

  cout << “\t\tTurno del jugador “ << jug << “ (“<< turno << “) ...\n\n” 

  “\t\tDonde desea colocar su cha? -> “;   cin >> cha;   if (cha==” “);   else if (((cha==”a1”)||(cha==”A1”))&&(a1==’ ‘)) a1=turno;   else if (((cha==”a2”)||(cha==”A2”))&&(a2==’ ‘)) a2=turno;   else if (((cha==”a3”)||(cha==”A3”))&&(a3==’ ‘)) a3=turno;   else if (((cha==”b1”)||(cha==”B1”))&&(b1==’ ‘)) b1=turno;   else if (((cha==”b2”)||(cha==”B2”))&&(b2==’ ‘)) b2=turno; 

  else if (((cha==”b3”)||(cha==”B3”))&&(b3==’ ‘)) b3=turno;   else if (((cha==”c1”)||(cha==”C1”))&&(c1==’ ‘)) c1=turno;   else if (((cha==”c2”)||(cha==”C2”))&&(c2==’ ‘)) c2=turno;   else if (((cha==”c3”)||(cha==”C3”))&&(c3==’ ‘)) c3=turno;   else { 

  cout << “\n\t\tERROR: plaza ocupada o inexistente...\n”   “\t\tPulse ‘ENTER’ y vuelva a colocar su cha...”;   cin.get(); cin.get(); 

  i--; 

  }   i++;

Page 127: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 127/180

7: Funciones en C

  } 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

127

Page 128: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 128/180

128

Page 129: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 129/180

8  Strings o Cadenas

129

8.1 ¿QUÉ SON LOS STRINGS?

En C no existe un tipo string como en otros lenguajes. No existe un tipo dedatos para almacenar texto, se utilizan arrays con el tipo de dato char.Funcionan igual que los demás arrays con la diferencia que se utilizan letrasen vez de números.

Una cadena en C es una secuencia de cero o más caracteres seguidas porun caracter NULL o \0:Es importante preservar el caracter de terminación \0, ya que con éste escomo C dene y maneja las longitudes de las cadenas. Todas las funcionesde la biblioteca estándar de C lo requieren para una operación satisfacto-ria.Por ejemplo la cadena de 5 elementos siguiente:

“H“ “O“ “L“ “A“ \0

Declaración de CadenasPara declarar una cadena se hace como un array. La forma general de de-clarar una cadena es la siguiente:

char nombre_cadena[longitud];

Por ejemplo la sentencia:  char texto[20];Declara la cadena texto de tamaño 20.

Además se debe tener en cuenta de considerar un elemento más al tamaño

de la cadena para el elemento \0 .

Page 130: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 130/180

Fundamentos de Programación

130

Inicialización de CadenasPara inicializar una cadena se puede hacer de la misma forma que se inicia-liza un array y puede tenerse las siguientes formas:

char cadena1[20] = “”; //cadena vacía

char cadena2[20] = “esta es una cadena”;char cadena3[20] = ‘\0’;char cadena4[ ] = { ‘a’, ’e’, ’i’, ’o’, ’u’ };

Asignación de CadenasA una cadena no se puede asignar un valor directamente con el signo =,sino que se debe hacer a través de la función strcpy(), que se encuentra enla librería <string.h>. En el caso de C++ se debe utilizar la librería <cstring>Ejemplo: En el programa implementado en Dev C++ se muestra el uso de

esta función:#include <iostream>#include <cstring> //para usar la función strcpy()

using namespace std;

int main(int argc, char *argv[]){  char nombre[21];  //nombre = “Juan Perez”; //ERROR  strcpy( nombre, “Juan Perez”); //OK

  cout<<nombre; //Imprime en pantalla  //Juan Perez  system(“PAUSE”);  return EXIT_SUCCESS;}

8.2 OPERACIONES CON CADENAS

Al igual que con arrays se puede realizar las mismas operaciones básicas: Ingreso de datos.•Recorrido y procesamiento.•Impresión de la cadena.•

Ingreso de datos

Para ingresar datos en C se puede hacer uso de la función gets( ).  char cad1[20];

Page 131: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 131/180

8: Strings o Cadenas

  printf(“Ingrese cadena 1:”);  gets(cad1);

En C++ podemos utilizar la función getline(), combinada con cin.

  char cad1[20];  cout<<“Ingrese cadena 1:”;  cin.getline(cad1,20);

Recorrido de cadanasPara recorrer una cadena podemos hacerlo como:  for(i=0; cadena[i]!=‘\0’; i++)

  O lo que es lo mismo:

  for(i=0; cadena[i]; i++)

Salida de cadenasPara escribir cadenas podemos utilizar en C la función puts( )  printf(“La cadena es: ”);  puts(cad1);

En C++ hacer uso de cout directamente

  cout<<“La cadena es”<<cad1;EjemploEl siguiente ejemplo lee una cadena y luego calcula el tamaño de la cadenaingresada:

#include <iostream>using namespace std;

int main(int argc, char *argv[]){  char cad1[60]; int i=0;  cout<<”Ingrese cadena:”; gets(cad1);  for( i=0; cad1[i] != ‘\0’; i++ );

cout<<”La cadena Ingresada es “; puts(cad1);  cout<<”El tamaño es “<<i;

  system(“PAUSE”);  return EXIT_SUCCESS;

}

131

Page 132: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 132/180

Fundamentos de Programación

132

8.3 FUNCIONES DE CADENAS

Todas las funciones para manejo de cadenas tienen su prototipo en:#include <string.h>

Si es en C++ en #include <cstring>

Las funciones más comunes son:

char *strcpy(const char *dest, const char *orig) Copia la cadena de•caracteres apuntada por orig (incluyendo el carácter terminador ‘\0’) alvector apuntado por dest. La cadena de destino, debe ser suciente-mente grande como para alojar la copia.int strcmp(const char *s1, const char *s2) Compara las dos cadenas•

de caracteres s1 y s2. Devuelve un entero menor, igual o mayor quecero si se encuentra que s1 es, respectivamente, menor que, igual a,o mayor que s2.char *strerror(int errnum) Devuelve un mensaje de error que corres-•ponde a un número de error.int strlen(const char *s) Calcula la longitud de la cadena de caracte-•res.char *strncat(char *s1, const char *s2, size_t n) Agrega n caracteres•de s2 a s1.int strncmp(const char *s1, char *s2, size_t n) Compara los primeros n•caracteres de dos cadenas.char *strncpy(const char *s1, const char *s2, size_t n) Copia los pri-•meros n caracteres de s2 a s1.strcasecmp(const char *s1, const char *s2) versión que ignora si son•mayúsculas o minúsculas de strcmp().strncasecmp(const char *s1, const char *s2, size_t n) versión insensi-•ble a mayúsculas o minúsculas de strncmp() que compara los prime-

ros n caracteres de s1.Ejemplo:

#include <stdio.h>void main(){

char cad[80];int i=0,vocal=0,consonante=0;

  printf(“Ingrese cadena”);gets(cad);

Page 133: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 133/180

8: Strings o Cadenas

  for( i=0; cad[i] != ‘\0’; i++)  {  if(( cad[i]>=’a’ && cad[i]<=’z’) || (cad[i]>=’a’ && cad[i]<=’z’))  switch(cad[i])

  { case ‘A’: case ‘a’:  case ‘E’: case ‘e’:  case ‘i’: case ‘I’:  case ‘O’: case ‘o’:  case ‘U’: case ‘u’: vocal++; break;  default: consonante++;

}  }

printf(“Vocales %d\n”,vocal);

  printf(“Consonantes %d”,consonante);}

8.4 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1  Programa que lee y escribe el nombre, dirección y teléfono de una per-sona.

#include <iostream> 

using namespace std; int main(int argc, char *argv[]) 

  char nombre[50];   char direccion[150];   char telefono[10];  

cout<<”Nombre : “; cin.getline(nombre,50); 

  cout<<”Dirección : “; cin.getline(direccion,150);   cout<<”Telefono : “; cin.getline(telefono,10);

cout<<”\n\nEl nombre es : “<<nombre<<endl;   cout<<”La direccion es : “<<direccion<<endl;

cout<<”El telefono es : “<<telefono<<endl;  

system(“PAUSE”); 

  return EXIT_SUCCESS; 

133

Page 134: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 134/180

Fundamentos de Programación

134

2 Programa que muestras el uso de las funciones de cadenas en C.

#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) { 

  string texto1, texto2 = “Hola “, texto3(“Que tal”);

texto1 = texto2 + texto3 + “ estas? “;cout << texto1 << “\n”;string subcadena (texto1, 2, 6); // 6 letras de texto1, desde la terceracout << subcadena << “\n”;

string subcadena2;

subcadena2 = texto1.substr(0, 5); //5 letras de texto1, desde el comienzotexto1.insert(5, “Juan “); // Inserto un texto en la posicion 6cout << texto1 << “\n”;texto2.replace(1, 2, “ad”); // Cambio 2 letras en la posicion 2cout << texto2 << “\n”;

cout << “La longitud de texto1 es “ << texto1.size() << “\n”;cout << “La tercera letra de texto1 es “ << texto1[2]

<< “ o bien “ << texto1.at(2) << “\n”;

if (texto2 == “Hada “)cout << “Texto 2 es Hada\n”;

system(“PAUSE”); 

  return EXIT_SUCCESS; 

3 Programa que lee una cadena desde el teclado y cuente el número decaracteres de tres categorías: letras (a-z y A-Z), dígitos (0-9) y otros caracte-res (espacios en blanco y caracteres especiales ?%..). Utilice las funciones

isdigit() e isalpha().

#include <iostream> 

#dene MAXCAD 80 using namespace std; 

int main(int argc, char *argv[]) 

  char linea[MAXCAD], *pc=linea; 

  int digitos=0, letras=0, otros=0; 

  cout<<”\nEscriba una cadena (menor a “<<MAXCAD<<” caracteres):\n”;   gets(linea); 

Page 135: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 135/180

8: Strings o Cadenas

  while (*pc != ‘\0’) {   if (isdigit(*pc))

++digitos; 

  else

if (isalpha(*pc))++letras; 

  else

++otros; 

  ++pc; 

  } 

  cout<<”\n\tDigitos = “<<digitos 

  <<”\n\tLetras = “<<letras 

  <<”\n\tOtros = “<<otros<<”\n\n”; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

4 Programa que lea una cadena y busque un carácter en ella. Solo dacomo salida el primer caracter encontrado, en caso de existir más de uno.

#include <iostream> 

using namespace std; int main(int argc, char *argv[]) 

  char caract, cadena[80], *ptr;   cout<<”Introduzca la cadena donde se va a buscar:\n”;   gets(cadena); 

  cout<<”\nEscriba el caracter a buscar:\n”;   caract=getchar(); 

  ptr=strchr(cadena, caract);   if (ptr==0)cout<<”El caracter “<<caract<<” no se encuentra en la cadena.\n”; 

  else

cout<<”La posicion del caracter es “<<ptr-cadena+1<<”\n\n”; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

135

Page 136: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 136/180

Fundamentos de Programación

136

5 Programa que pide una cadena por el teclado y la imprima después deconvertir el primer carácter en mayúscula y el resto en minúsculas.Por ejemplo, ante la entrada “hola MAMA“ devuelve la cadena: “Holamama“

#include <iostream> 

#dene MAXCADENA 20 char *ConversionLetra(char *cadena); 

using namespace std; 

int main(int argc, char *argv[]) 

  char tmp[MAXCADENA+1];   /* Se suma 1 para el byte NUL */   cout<<”\nEscriba una cadena (de “<<MAXCADENA

  <<” caracteres maximo) y teclee INTRO:\n”;   gets(tmp); 

  cout<<”\n”<<ConversionLetra(tmp)<<”\n\n”; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

char *ConversionLetra(char *cadena) 

  char *pc; 

  pc=cadena; 

  *pc=toupper(*pc); 

  ++pc; 

  while (*pc != ‘\0’){ 

  *pc = tolower(*pc);   ++pc; 

  } 

  return(cadena); 

6 Programa que compruebe si una cadena introducida por teclado es o noun palíndromo. Un palíndromo es una cadena que se lee igual al derechoque al revés. Por ejemplo:

“reconocer”“110010011”

Page 137: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 137/180

8: Strings o Cadenas

“anita lava la tina”“dábale arroz a la zorra el abad”

Observación: Ingresar la cadena sin espacios en blanco

#include <iostream> #dene TAM 40   char palin[TAM]; 

  int longitud,a=0;   int cont; 

using namespace std; 

int main(int argc, char *argv[]) 

  cout<<”\nIngrese una palabra:\n\n”; 

  gets(palin);   longitud=strlen(palin); 

  for(cont=longitud-1;palin[cont]==palin[a] && cont>=0;cont--,a++);   if(a==longitud){   cout<<”\nEs un palindromo\n”; 

  }else{ 

  cout<<”\nNo es palindromo\n”; 

  }

system(“PAUSE”); 

  return EXIT_SUCCESS; } 

7  Programa que convierte de un número ROMANO ingresado por tecladoa un número ARÁBIGO en formato decimal. Una entrada válida sería XXVIIy la salida sería: 27.

#include <iostream> 

#include <cstring> using namespace std; 

int main(int argc, char *argv[]) 

  char romano[10];   long int arabigo=0;   char caracter; 

  int longitud; 

  system(“CLS”); 

  cout<<”Ingrese el numero romano: “; cin>>romano;   longitud=strlen(romano); 

137

Page 138: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 138/180

Fundamentos de Programación

138

  for(int i=longitud-1;i>=0;i--) {   caracter=romano[i]; 

  switch(caracter) { 

  case ‘M’: arabigo+=1000; break; 

  case ‘D’: if(i<longitud-1 && romano[i+1]==’M’)   arabigo-=500;   else 

  arabigo+=500; break;case ‘C’: if(i<longitud-1 && strchr(“DM”,romano[i+1])) 

  arabigo-=100;   else 

  arabigo+=100; break;case ‘L’: if(i<longitud-1 && strchr(“CDM”,romano[i+1])) 

  arabigo-=50;   else 

  arabigo+=50; break;case ‘X’: if(i<longitud-1 && strchr(“LCDM”,romano[i+1])) 

  arabigo-=10;   else 

  arabigo+=10; break;case ‘V’: if(i<longitud-1 && strchr(“XLCDM”,romano[i+1])) 

  arabigo-=5; 

  else   arabigo+=5; break;

case ‘I’: if(i<longitud-1 && strchr(“VXLCDM”,romano[i+1]))   arabigo-=1;   else 

  arabigo+=1; break;} 

  } 

  cout<<”El numero “<<romano<<” en arabigo es: “<<arabigo<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; 

Page 139: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 139/180

9  Recursividad

139

9.1 FUNCIONES RECURSIVAS

Recursividad es una técnica mediante la cual un subprograma puede invo-

carse (llamarse) a sí mismo. En el proceso de la realización de sus tareas. El concepto de recursividad va ligado al de repetición. Son recursivos aque-llos algoritmos que, estando encapsulados dentro de una función, son lla-mados desde ella misma una y otra vez, en contraposición a los algoritmositerativos, que hacen uso de bucles while, do-while, for, etc.Algo es recursivo si se dene en términos de sí mismo (cuando para denir-se hace mención a sí mismo). Para que una denición recursiva sea válida,la referencia a sí misma debe ser relativamente más sencilla que el casoconsiderado.Por ejemplo se tiene la denición matemática del factorial de un número, seobserva que debe ir disminuyendo en la valor de “n” hasta llegar a 0, y esdonde se inicia el calculo hasta legar al valor inicial de “n”.

1 si n 0!

( 1)! si n 0n

n n

== 

− >

ELEMENTOS

En toda denición recursiva se observa dos partes diferenciadas:

Estado básico (BASE).- estado en el cual la solución no se presenta demanera recursiva.

Estado recursivo.- en donde la solución se presenta en forma recursiva.

Generalmente el estado recursivo va disminuyendo en cada llamada hastallegar al estado base.

Page 140: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 140/180

Fundamentos de Programación

140

Ventajas: No es necesario denir la secuencia de pasos exacta para resol-ver el problema. Podemos considerar que “tenemos resuelto” el problema(de menor tamaño).

Desventajas: Tenemos que encontrar una solución recursiva, y, además,podría ser menos eciente.

9.2 DISEÑO DE PROGRAMAS RECURSIVOS

Para resolver un problema, el primer paso sería la identicación de un al-goritmo recursivo, es decir, descomponer el problema en subproblemasde menor tamaño (aunque de la misma naturaleza del problema original) y

componer la solución nal a partir de las subsoluciones obtenidas.Tendremos que diseñar: casos base, casos recursivos y la solución en tér-minos de ellos.

Siempre debe existir al menos un caso base El número y forma de los casosbase son hasta cierto punto arbitrarios. La solución será mejor cuanto mássimple y eciente resulte el conjunto de casos seleccionados.

Los casos recursivos siempre deben avanzar hacia un caso base. Es decir,

la llamada recursiva se hace a un subproblema más pequeño y, en últimainstancia, los casos generales alcanzarán un caso base.Por ejemplo el cálculo del factorial de 3 sería:

1 3! = 3 x 2! 8 3! = 6

2 3! = 3 x 2!  2! = 2 x 1!

7 3! = 3 x 2 = 6 

3 3! = 3 x 2!  2! = 2 x 1!  1! = 1x0!

6 3! = 3 x 2!  2! = 2 x 1 = 2

4 3! = 3 x 2!  2! = 2 x 1!  1! = 1x0!  0!=1

5 3! = 3 x 2!  2! = 2 x 1!  1! = 1 x 1= 1 

9.3 EJECUCIÓN DE UN MÓDULO RECURSIVO

En general, en la pila se almacena el entorno asociado a las distintas fun-ciones que se van activando. En particular, en un módulo recursivo, cada

Page 141: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 141/180

9: Recursividad

llamada recursiva genera una nueva zona de memoria en la pila indepen-diente del resto de llamadas.

Ejemplo: Ejecución del factorial con n=3.

1. Dentro de factorial, cada llamadareturn (n*factorial(n-1));genera una nueva zona de memoria en la pila, siendo n-1 el correspondienteparámetro actual para esta zona de memoria y queda pendiente la evalua-ción de la expresión y la ejecución del return.2. El proceso anterior se repite hasta que la condición del caso base se hacecierta.

Se ejecuta la sentencia return (1); Empieza la vuelta atrás de la recursión, se

evalúan las expresiones y se ejecutan los return que estaban pendientes.

Por ejemplo: El código recursivo del factorial de un número se obtiene de sudenición matemática:

1 si n 0!

( 1)! si n 0n

n n

== 

− >El programa completo implementado en Dev C++ sería el siguiente:

#include <iostream>long int factorial(int n);using namespace std;int main(int argc, char *argv[]){  int n;  cout<<”Ingrese un numero: “;  cin>>n;

  cout<<”El factorial es: “<<factorial(n);  system(“PAUSE”);  return EXIT_SUCCESS;}

long int factorial(int n) {  if (n==0)  return(1);  else

  return n*factorial(n-1);}

141

Page 142: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 142/180

Fundamentos de Programación

142

9.4 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1  Programa que halla la potencia de un número en forma recursiva, con-siderando la base y el exponente como datos de entrada.

Realizando el análisis de los datos se tendría en forma matemática la ecua-ción:

1 0( , )

* ( , 1) 0

 si b potencia a b

a potencia a b si b

≤= 

− >Aplicando la fórmula con valores como potencia(3,2) se tendría:

1 pot(3,2) = 3 x pot(3,1) 6 pot(3,2) = 9

2 pot(3,2) = 3 x pot(3,1)  pot(3,1) = 3 x pot(3,0)

5 pot(3,2) = 3 x 3 = 9

3 pot(3,2) = 3 x pot(3,1)  pot(3,1) = 3 x pot(3,0)  pot(3,0) = 1

4 pot(3,2) = 3 x pot(3,1)  pot(3,1) = 3 x 1 = 3

El programa es el siguiente:

#include <iostream> 

long potencia(int a, int b); 

using namespace std; 

int main(int argc, char *argv[]) 

  int a, b; 

  cout<<”Introduce numero: “; cin>>a;   cout<<”Introduce potencia: “; cin>>b;   cout<<”El resultado es: “<<potencia(a,b)<<endl; 

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

long potencia(int a, int b) 

  if (b<=0)   return 1;   else 

  return a*potencia(a,b-1); } 

Page 143: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 143/180

9: Recursividad

2 Programa que halla el máximo común divisor de dos numeros por elmétodo de Euclides en forma recursiva.

#include <iostream> 

int mcd(int x,int y); using namespace std; 

int main(int argc, char *argv[]) 

  int a,b; 

  cout<<”Ingrese dos números:\n”;   cin>>a>>b; 

  cout<<”El maximo comun divisor es: “<<mcd(a,b)<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; } 

int mcd(int x,int y){ 

  if( x == y )return x; 

  if( x > y )   return mcd(y,x-y); 

  else 

  return mcd(x,y-x); 

3 Programa que muestra la serie de Fibonacci en forma recursiva, solicitael ingreso de el número de términos a mostrar.

#include <iostream> 

int bonacci (int n); 

using namespace std; int main(int argc, char *argv[]) 

  int x; 

  cout<<”Ingrese el número de términos:\n”;   cin>>x; 

  for (int i=0; i<=x; i++)   cout<<”Termino “<<i<<”) “<<bonacci(i)<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; } 

143

Page 144: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 144/180

Fundamentos de Programación

144

int bonacci (int n) { 

  if ((n == 0) || (n == 1))

return (1);   else

return (bonacci(n-1) + bonacci(n-2)); } 

4 Programa que halla la suma de los números enteros consecutivos de laforma: S = 1 + 2 + 3 + 4 + 5 + ... + N

#include <iostream> 

int suma (int w); using namespace std; 

int main(int argc, char *argv[]) 

  int x; 

  cout<<”Suma los primeros n numeros enteros positivos\n\n”; 

  cout<<”Serie: S=1+2+3+4+5+....+n \n”;   cout<<”Ingresa hasta que numero quieres sumar: “;   cin>>x; 

  cout<<”\n\nEl resultado es: “<<suma(x)<<endl;   system(“PAUSE”); 

  return EXIT_SUCCESS; 

int suma (int w) 

  if (w==0)

return w;   else 

  return (w+suma(w-1)); } 

5 Programa que soluciona el problema de las Torres de Hanoi en formarecursiva.

#include <iostream> 

void hanoi (int n, int inic, int tmp, int nal); using namespace std; 

Page 145: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 145/180

9: Recursividad

int main(int argc, char *argv[]) 

  int n; // Numero de discos a mover 

  cout << “Ingrese el numero de discos: “; 

  cin >> n;   hanoi (n, 1, 2, 3); // mover “n” discos del 1 al 3,  // usando el 2 como temporal.

  system(“PAUSE”); 

  return EXIT_SUCCESS; 

void hanoi (int n, int inic, int tmp, int nal) { 

  if (n > 0) { 

  // Mover n-1 discos de “inic” a “tmp”.  // El temporal es “nal”.  hanoi (n-1, inic, nal, tmp);   // Mover el que queda en “inic”a “nal”   cout <<”Del poste “<<inic<<” al “<<nal<<”\n”;   // Mover n-1 discos de “tmp” a “nal”.  // El temporal es “inic”.

  hanoi (n-1, tmp, inic, nal);   } 

 

145

Page 146: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 146/180

146

Page 147: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 147/180

147

10.1 ¿QUÉ ES UN PUNTERO?

Un puntero es un objeto que apunta a otro objeto. Es decir, una variablecuyo valor es la dirección de memoria de otra variable.No hay que confundir una dirección de memoria con el contenido de esadirección de memoria.

Cuando se declara una variable, el compilador reserva un espacio de me-moria para ella y asocia el nombre de ésta a la dirección de memoria desdedonde comienzan los datos de esa variable. Las direcciones de memoria sesuelen describir como números en hexadecimal.

Un puntero es una variable cuyo valor es la dirección de memoria de otra va-riable. Se dice que un puntero “apunta” a la variable cuyo valor se almacenaa partir de la dirección de memoria que contiene el puntero. Por ejemplo, siun puntero p almacena la dirección de una variable x, se dice que “p apuntaa x ”.

Un puntero se rige por las siguiente reglas:

un puntero es una variable como cualquier otra;•una variable puntero contiene una dirección que apunta a otra posición•en memoria;en esa posición se almacenan los datos a los que apunta el puntero;•un puntero apunta a una variable de memoria.•

10.2 DECLARACIÓN, ASIGNACIÓN Y TIPOS DE PUNTEROS

a) DECLARACIÓN DE PUNTEROSPara declarar un puntero se especica el tipo de dato al que apunta, el

10  Punteros

Page 148: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 148/180

Fundamentos de Programación

148

operador (*), y el nombre del puntero. La sintaxis es la siguiente:

<tipo de dato apuntado> * <identicador del puntero>

A continuación se muestran varios ejemplos:

int *ptr1; // puntero a un dato de tipo entero (int)char *cad1, *cad2; // dos punteros a datos de tipo caracter (char)oat *ptr2; // puntero a un dato de tipo punto-otante (oat)

Es decir: hay tantos tipos de punteros como tipos de datos, aunquetambién pueden declararse punteros a estructuras más complejas (fun-

ciones, struct, cheros...) e incluso punteros vacíos (void ) y punteros nulos(NULL).

b) OPERADOR DE DIRECCIÓN Y DE INDIRECCIÓN

Al trabajar con punteros se emplean dos operadores especícos:

Operador de dirección  (&) : Representa la dirección de memoria de lavariable que le sigue:

  &var1 representa la dirección de var1.

Operador de contenido o indirección (*)  : El operador * aplicado alnombre de un puntero indica el valor de la variable apuntada:  oat altura = 26.92, *apunta; //declaración de variables  apunta = &altura; //inicialización del puntero

c) ASIGNACIÓN DE PUNTEROS

Se pueden asignar a un puntero direcciones de variables a través del opera-dor de dirección (‘&’) o direcciones almacenadas en otros apuntadores.

int *q, *p;int a;q = &a; /* q apunta al contenido de a */ p = q; /* p apunta al mismo sitio, es decir, al contenido de a */ 

Un ejemplo práctico:

Page 149: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 149/180

10: Punteros

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) 

{   int n = 95;   int *p=&n;   //mostramos los valores en pantalla  cout<<”n = “<<n<<endl;   cout<<”&n = “<<&n<<endl;   cout<<”p = “<<p<<endl;   cout<<”&p = “<<&p<<endl;  

system(“PAUSE”);   return EXIT_SUCCESS; } 

Se tiene como salida  n = 95  &n = 0x22ff44  p = 0x22ff44  &p = 0x22ff40

En el código que se muestra:

1) Declaramos la variable n de tipo entero y le asignamos el valor de 95.2) declaramos la variable p de tipo puntero a entero.3) Mostramos en pantalla los valore actuales de n, valor de la dirección dememoria de n y la dirección de memoria de p.4) Asignamos a p la dirección de n y mostramos el valor actualizado.

149

Page 150: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 150/180

Fundamentos de Programación

150

Dirección Valor de la variablede memoria variable

0x22ff40 0x22ff44 *p

  0x22ff44 95 n

d) PUNTEROS null Y void

Existen dos tipos de punteros especiales que son muy utilizados en la imple-mentación de programas:

Un puntero nulo, no apunta a ninguna parte en particular, es decir, no di -recciona a ningún dato válido en memoria. Se utiliza para proporcionar a unprograma un medio de conocer cuando una variable puntero no direcciona

a un dato válido,

Cuando no se desea que un apuntador apunte a algo, se le suele asignarel valor NULL, en cuyo caso se dice que el apuntador es nulo (no apunta anada). NULL es una macro típicamente denida en archivos de cabeceracomo stdef.h y stdlib.h. Normalmente, en C++ se encuentra disponible sinincluir ningún archivo de cabecera. NULL se suele denir en estas libreríasasí:  #dene NULL 0

Un apuntador nulo se utiliza para proporcionar a un programa un mediode conocer cuando un apuntador contiene una dirección válida. Se sueleutilizar un test condicional para saber si un apuntador es nulo o no lo es, ytomar las medidas necesarias. El valor NULL es muy útil para la construc-ción de estructuras de datos dinámicas, como las listas enlazadas, matricesesparcidas, etc. Es igualmente incorrecto desreferenciar el valor NULL porlas mismas razones presentadas previamente.

Un puntero void, es cuando se declara un puntero de modo que apunte acualquier tipo de dato, es decir, no se asigna a un tipo de dato especíco,

Page 151: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 151/180

10: Punteros

por ello es llamado también puntero genérico.

void *puntero1; //declara un puntero genérico

El puntero putero1 puede direccionar a cualquier posición de memoria, peroel puntero no está unido a un tipo de dato especíco. De modo similar, lospunteos void pueden direccionar a una variable oat una char, o una posi-ción arbitraria o una cadena.

10.3 PUNTEROS A PUNTEROS

Dado que un puntero es una variable que apunta a otra, fácilmente se puedededucir que pueden existir punteros a punteros, y a su vez los segundos

pueden apuntar a punteros, y así sucesivamente. Estos punteros se decla-ran colocando tantos asteriscos (‘*’) como sea necesario. Ejemplo:

  char c = ’z’;  char *pc = &c;  char **ppc = &pc;  char ***pppc = &ppc;  ***pppc = ’m’; // Cambia el valor de c a ’m’

10.4 PUNTEROS Y ARRAYS

Los arrays y los punteros están muy fuertemente relacionados en el lengua- je C, debido a que se pueden direccionar arrays como si fueran punteros ypunteros como si fueran arrays.

Nombre de arrays como punteros

Un nombre de un array es simplemente un puntero, esto lo podemos de-mostrar con el siguiente ejemplo: declaremos e inicialicemos el array notasde tipo entero.

int notas[4] = {12, 18, 9, 16};

En el gráco mostramos como array y como puntero

151

Page 152: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 152/180

Fundamentos de Programación

152

nombre Valor de la nombrearray variable puntero

notas [0] 12 notasnotas [1] 18 *(notas + 1)

notas [2] 9 *(notas + 2)notas [3] 16 *(notas + 3)

Por ejemplo, se tienen el siguiente programa que genera aleatoriamente20m número de tipo entero los almacena en el array y los muestra por pan-talla:

#include <cstdlib> #include <iostream> #include <ctime> #dene N 20 using namespace std; int main(int argc, char *argv[]) {   int a[N];   srand(time(0));

for(int i=0; i<N; i++) {   //a[i]=1 + rand() % 21; //escrito en notación de array   *(a+i) = 1 + rand() % 21; //escrito en notación de puntero   } 

  cout<<”los numeros son: “<<endl;   for(int i=0; i<N; i++) //cout<<a[i]<<endl; //escrito en notación de array 

  cout<<*(a+i)<<endl; //escrito en notación de puntero   system(“PAUSE”);   return EXIT_SUCCESS; } 

10.5 ARITMÉTICA DE PUNTEROS

Un puntero es una variable y por tanto esta se puede modicar, entonces se

Page 153: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 153/180

10: Punteros

pueden realizar ciertas operaciones aritméticas sobre punteros a diferenciade un nombre de un array que es un puntero constante y no se puede mo-dicar.

A un puntero se le puede sumar o restar un entero n; esto hace que apuntea n posiciones adelante o detrás de la actual. Una variable puntero puedemodicarse para que contenga una dirección de memoria n posiciones ade-lante o detrás. Por ejemplo:

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) 

{   int vector[5] = {2,4,6,8,10};   int *p; 

  p=vector; // Equivale a p = &vector[0];   p=p+3;   cout<<*vector<<endl;   cout<<*p<<endl; 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

Da como salida:  2  8

Recuérdese que un puntero es una dirección, por consiguiente, sólo aque-llas operaciones de sentido común, son legales. No tiene sentido, por ejem-plo, sumar o restar una constante de coma otante.

Operaciones no válidas con punteros:No se pueden sumar dos punteros.•No se pueden multiplicar dos punteros.•No se pueden dividir dos punteros.•

153

Page 154: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 154/180

Fundamentos de Programación

154

10.6 PUNTEROS Y CADENAS

El estudio de las cadenas es útil para profundizar en la relación entre apun-tadores y arreglos. Facilita, además la demostración de cómo algunas de

las funciones estándar de cadenas de C pueden ser implementadas. Final-mente ilustraremos cómo y cuando los apuntadores pueden y deben serpasados a una función.

Para comenzar nuestra discusión escribiremos algo de código, el cual sibien es preferido para propósitos meramente ilustrativos, probablemente nolo escribirás en un programa real. Consideremos por ejemplo:  char mi_cadena[40];  mi_cadena [0] = ‘T’;

  mi_cadena [1] = ‘e’;  mi_cadena [2] = ‘d’:  mi_cadena [3] = ‘\0’;

Si bien uno nunca construiría cadenas de este modo, el resultado nal esuna cadena que es en realidad un arreglo de caracteres terminado con uncaracter nul. Por denición, en C, una cadena es un arreglo de caracteresterminado con el carácter nul. Hay que tener cuidado con que nul no es lomismo que NULL. El “nul” se reere a un cero denido por la secuencia deescape ‘\0’. Esto es, que ocupa un byte de memoria. El “NULL”, por otra par-te, es el nombre de la macro usada para inicializar apuntadores nulos. NULLestá denido en un archivo de cabecera del compilador de C, mientras quenul puede no estar denido del todo.

Ya que al estar escribiendo código como el de arriba gastaríamos muchotiempo, C permite dos modos alternativos de llegar al mismo resultado. Elprimero sería escribir:

  char mi_cadena [40] = {‘T’, ‘e’, ‘d’, ‘\0’,};Pero se lleva más tecleado del que es conveniente. Así que C permite:  char mi_cadena [40] = “Ted”;

Cuando usamos las comillas dobles, en lugar de las simples usadas en losejemplos anteriores, el carácter null (‘\0’) se añade automáticamente al nalde la cadena.

En cualquiera de los casos descritos arriba sucede la misma cosa,. El com-pilador asigna un bloque continuo de memoria de 40 bytes de longitud para

Page 155: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 155/180

10: Punteros

alojar los caracteres y los inicializa de tal manera que los primeros 4 carac-teres son Ted\0.

Por ejemplo:

#include <cstdlib> #include <iostream> using namespace std; char strA[80] = “Cadena a usar para el programa de ejemplo”; char strB[80]; int main(int argc, char *argv[]) {   char *pA; /* un apuntador al tipo caracter */ 

  char *pB; /* otro apuntador al tipo caracter */   puts(strA); /* muestra la cadena strA */   pA = strA; /* apunta pA a la cadena strA */   puts(pA); /* muestra a donde apunta pA */   pB = strB; /* apunta pB a la cadena strB */   putchar(‘\n’); /* dejamos una línea en blanco */   while(*pA != ‘\0’) /* linea A (ver texto) */   {   *pB++ = *pA++; /* linea B (ver texto) */ 

  }   *pB = ‘\0’; /* linea C (ver texto) */   puts(strB); /* muestra strB en la pantalla */ 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

10.7 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1  Programa que realiza la suma de valores con punteros:

#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) { 

155

Page 156: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 156/180

Fundamentos de Programación

156

  int a, *p;   a=8;   p=&a;   *p+=12; //*p=*p+7 

  cout<<”El valor nal de a es: “<<a<<endl;   system(“PAUSE”);   return EXIT_SUCCESS; } 

2 Programa que imprime los valores de un array unidimensional con pun-teros:

#include <cstdlib> 

#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) {   int nums[] = {72, 85, 42, 60, 53};   int i;   for (i=0; i<5; i++)   cout<<*(nums+i)<<endl; 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

3 Programa que utiliza un puntero a una matriz, imprime sus elementos ylas direcciones correspondientes utilizando notación de punteros

#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) {   int *p, i; 

  int mat[4] ={2, 4, 5, 8};   p=mat; 

Page 157: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 157/180

10: Punteros

for(i=0; i<=3; i++) {   cout<<”\nmat[“<<i<<”] = “<<*p++;   cout<<”\tDirecci¢n: “<<p;   } 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

4 Programa que imprime los valores de un array bidimensional de tipocaracter utilizando punteros:

#include <cstdlib> #include <iostream> 

#dene FILAS 3 #dene COLUMNAS 2 

using namespace std; int main(int argc, char *argv[]) {   int i,j;   char mat[FILAS][COLUMNAS]= {{1,2},{3,4},{5,6}};   cout<<”Imprimimos como array:”<<endl;   for(i=0; i<FILAS; i++)   for(j=0; j<COLUMNAS; j++)   cout<<mat[i][j]<<endl;   cout<<”Imprimimos utilizando punteros:”<<endl;   for(i=0; i<FILAS*COLUMNAS; i++)   cout<<(**mat+i)<<endl;

system(“PAUSE”);   return EXIT_SUCCESS; 

5 Programa que declara una función a la que le pasa dos argumentosenteros por referencia, imprimiendo sus valores en la propia función, incre-menta el primero de ellos en 10 unidades, el segundo sin ningún cambio ylos muestra por pantalla.

#include <cstdlib> #include <iostream> 

void fun(int *p, int *q); 

157

Page 158: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 158/180

Fundamentos de Programación

158

using namespace std; 

int main(int argc, char *argv[]) { 

  int a, b;   cout<<”Ingrese dos numeros: “;   cin>>a>>b;   fun(&a, &b); //llamada a la funci¢n   system(“PAUSE”);   return EXIT_SUCCESS; } 

void fun(int *p, int *q) 

  {   cout<<”valor 1 incrementado en 10: “<<*p+10<<endl;   cout<<”valor 2 sin cambios : “<<*q<<endl;   } 

6 Programa que convierte una cadena ingresada por teclado en mayúscu-las a minúsculas utilizando punteros:

#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) {   char cad[30];   int i; 

  cout<<”Introduzca la cadena en mayúsculas: “<<endl;   gets(cad);   i=0;   do   {   if ((*(cad+i)>= ‘A’)&& (*(cad+i)<=’Z’))   *(cad+i) = *(cad+i)+32;   i++;   } 

  while (*(cad+i)!=0);   cout<<”La cadena en min£sculas es: “<<cad<<endl; 

Page 159: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 159/180

10: Punteros

system(“PAUSE”);   return EXIT_SUCCESS; } 

7  Programa que muestra en pantalla la fecha de nacimiento en texto quese haya ingresado por teclado:

#include <cstdlib> #include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 

{   int dia, mn, anyo; 

  static char *mes[] = {“Mes incorrecto”,  “Enero”, “Febrero”, “Marzo”, “Abril”,  “Mayo”, “Junio”, “Julio”, “Agosto”,  “Septiembre”, “Octubre”, “Noviembre”   “Diciembre”};   cout<<”Introduce tu fecha de nacimiento”<<endl;   cout<<”Día :”; cin>>dia;   cout<<”Mes :”; cin>>mn;   cout<<”Año :”; cin>>anyo;  

if(mn>0 && mn<=12)   cout<<”\nNacio el “<<dia<<” de “<<mes[mn]<<” de “<<anyo<<endl;   else   cout<<”\nEl mes no es valido.”<<endl; 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

159

Page 160: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 160/180

160

Page 161: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 161/180

161

11.1 INTRODUCCIÓN

En ocasiones, en la resolución de problemas se hallan situaciones en lasque se requiere registrar o manipular grupos de elementos con tipos de da-tos diferentes cada uno; por ejemplo, si se desea registrar a un estudianteque tiene información como:

Nombre•Edad•Dirección•Nota•

Esto no se podría realizar con un array, debido a que en un array, como sevio anteriormente, se tiene datos que son homogéneos, lo cual no nos po-sibilitaría almacena la información anterior, en el cual se observa diferentestipos e datos, como de cadena de caracteres, enteros y reales; por ello esque se requiere contar con un elemento diferente, esto es una estructura.

11.2 ¿QUÉ ES UNA ESTRUCTURA?

Una estructura es una colección de uno o más tipos de elementos deno-minados miembros, cada uno de los cuales puede ser de un tipo de datodiferente.

Una estructura puede contener cualquier número de miembros, cada uno delos cuales tiene un nombre único, denominado nombre de miembro.

Por ejemplo, supongamos que se desea almacenar los datos de una colec-

ción de libros, estos datos pueden ser:  Titulo  Autor

11  Estructuras

Page 162: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 162/180

Fundamentos de Programación

162

  Editorial  Precio  Número de páginas  Fecha de compra

Esta estructura contiene 6 elementos y se tiene que decidir los tipos de da-tos que tendrán, el nombre de cada miembro y de la estructura, podría sercomo se muestra en la tabla:

Estructura: Libro

 Nombre del miembro Tipo de datos y tamaño

título Array de caracteres de tamaño 50

autor Array de caracteres de tamaño 50editorial Array de caracteres de tamaño 40

 precio real de coma fotante

num_paginas entero

fecha_compra Array de caracteres de tamaño 8

11.3 DECLARACIÓN DE UNA ESTRUCTURA

Una estructura es un tipo de datos denido por el usuario, y por tanto sedebe declarar antes de que se pueda utilizar. El formato de la declaraciónes:

La estructura libro se declararía de la siguiente manera:

struct libro {  char titulo[50];  char autor[50];

  char editorial[40];  oat precio;

struct <nombre de la estructura>{  <tipo de dato miembro> <nombre miembro>;  <tipo de dato miembro> <nombre miembro>;  :  <tipo de dato miembro> <nombre miembro>;

};zwzawaw<w

Page 163: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 163/180

11: Estructuras

int num_paginas;  char fecha_compra[8];};

11.4 DEFINICIÓN DE VARIABLES ESTRUCTURALas variables de estructuras se pueden denir de dos formas:

a) listándolas inmediatamente después de la llave de cierre de la decla-ración de la estructura. Por ejemplo para la estructura libro se dene lasvariables libro1 y libro2.

struct libro {

  char titulo[50];  char autor[50];  char editorial[40];  oat precio;  int num_paginas;  char fecha_compra[8];} libro1, libro2, libro3;

b) listando el tipo de la estructura creada seguido por las variables corres-pondientes en cualquier lugar del programa antes de utilizarlas. Por ejem-plo:

  struct libros libro1, libro2;

11.5 USO DE ESTRUCTURAS EN ASIGNACIONES

Siendo una estructura un tipo de dato al igual que int, oat u otro, se puedeasignar una estructura a otra estructura. Por ejemplo se puede hacer quelibro2, libro3, y libro4 tengan los mismos valores en sus miembros que li-bro1de la siguiente manera:

  libro2 = libro1;  libro3 = libro1;  libro4 = libro1;

O también

163

Page 164: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 164/180

Fundamentos de Programación

164

  libro2 = libro3 =libro4 = libro1;

Inicialización de una declaración de estructurasSe puede inicializar una estructura de dos formas:

a) Dentro de la sección de código del programa o bien;b) Como parte de la denición.

Por ejemplo:

struct libro {  char titulo[50];  char autor[50];  char editorial[40];

  oat precio;  int num_paginas;} libro1 ={“Programación en C++“,

“Deitel y Deitel”,“McGraw Hill“,200,657 };

Otra inicialización sería:

struct libro libro1 = {  “Programación en C++“,

“Deitel y Deitel”,“McGraw Hill“,200,657 };

11.6 ACCESO A ESTRUCTURAS

se accede a una estructura para almacenar información en la estructura opara recuperar dicha información. Se puede acceder a los miembros de unaestructura de una de estas dos formas:a) Utilizando el operador puno (.)b) Utilizando el operador puntero (->)

Acceso a una estructura de datos mediante el operador punto

La sintaxis en C es:

Page 165: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 165/180

11: Estructuras

<nombre_variable_estructura>.<nombre_miembro> = dato;

cd1.precio = 234.20;cd1.num_canciones = 7;

Acceso a una estructura de datos mediante el operador punteroPara utilizar este operador se debe denir primero una variable puntero paraapuntar a la estructura, luego se utilizar el operador puntero para apuntar aun miembro dado.La sintaxis en C es:

  <puntero_estructura> -> <nombre_miembro> = dato;

Por ejemplo:

  struct estudiante {  char nombre[50];  oat nota;  } ;

Se puede denir ptr_est como un puntero a la estructura:

  struct estudiante *ptr_est;  struct estudiante1;

Podemos asignar datos a estudiante1  ptr_est = &estudiante1;  strcpy(ptr_est->nombre, “Juan Pérez“);  ptr_est->nota = 17.5;

11.7 ARREGLOS DE ESTRUCTURAS

Se puede crear un arreglo de estructuras tal como se crea un arreglo deotros tipos. Es muy útil, como por ejemplo, para almacenar un archivo com-pleto de datos de los estudiantes.La declaración de un arreglo de estructuras se realiza de un modo similar acualquier arreglo.

Por ejemplo:

  struct libros libros_mio[100];

165

Page 166: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 166/180

Fundamentos de Programación

166

La anterior declaración asigna un arreglo de 100 elementos de libros. Paraacceder a los elementos de la estructura se utiliza una notación de arreglo.

Por ejemplo:

  strcpy(libors_mio[0].titulo, “Fundamentos de Programación“);  strcpy(libros_mio[0].editorial, “McGraw Hill“);

11.8 EJERCICIOS DE PROGRAMACIÓN RESUELTOS

1   Implemente una estructura llamada CD que almacene datos de can-ciones de un artista determinado, como: titulo, artista, precio y número decanciones por CD.

#include <cstdlib> #include <iostream> 

using namespace std; 

struct cd{   char titulo[30];   char artista[25];   oat precio;   int canciones; } Cd1 = {

“Canciones Bebe”, /* titulo */   “Pinocho”, /* artista */   12.50, /* precio */ 

  16 /* total canciones */   }; 

int main(int argc, char *argv[]) {   struct cd Cd2; /* declaramos una nueva estructura llamado cd2 */  

 /* asignamos valores a los tipos de datos del cd2 */   strcpy(Cd2.titulo, “New Age”);

strcpy(Cd2.artista, “Old Man”);   Cd2.precio = 15.00; 

Page 167: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 167/180

11: Estructuras

Cd2.canciones = 12;  

printf(“\n Cd 1”);   printf(“\n Titulo: %s “, Cd1.titulo); 

  printf(“\n Artista: %s “, Cd1.artista);printf(“\n Total Canciones: %d “, Cd1.canciones);   printf(“\n Precio Cd: %f “, Cd1.precio);  

printf(“\n”);   printf(“\n Cd 2”);   printf(“\n Titulo: %s “, Cd2.titulo);   printf(“\n Artista: %s “, Cd2.artista);

printf(“\n Total Canciones: %d “, Cd2.canciones); 

  printf(“\n Precio Cd: %.2f “, Cd2.precio);

system(“PAUSE”);   return EXIT_SUCCESS; } 

2 Imprimir la planilla de pagos del personl de una empresa considerandolos siguientes daotos por emepleado: Codigo, Area, sueldo Básico y Horasextreas. La boleta de pago para cada empleado debe tener la siguienteforma:

Empleado : XXXXXXXArea : YYYYY

  Ingresos Deducciones NetoSueldo Básico: 9999.99 Ipss : 999.99

Horas Extras : 9999.99 SNP : 999.99  Fonavi: 999.99

  9999.99 999.99 9999.99

Implementación del programa:

#include <cstdlib> #include <iostream> 

#include <iomanip> 

167

Page 168: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 168/180

Fundamentos de Programación

168

using namespace std; 

 //declaración de constantes #dene maxEmp 50 

#dene nulo ‘\0’ 

 //Denición de estructuras struct Sempleado{   char codigo[3];   char area[30];   oat basico;   short extras;   }; 

 //Declaración de variables globales Sempleado empleado[maxEmp]; //arreglo de registro Sempleado rempleado; 

short numEmp, ind; oat hext, ipss, snp, fonavi, totIng, totDed, neto; 

 //Declaración de prototipos de funciones void IngresaDatos(); 

void CalculaImportes(); void ImprimeBoletas(); void Inicializa(); void Ejecuta(); void Finaliza(); 

int main(int argc, char *argv[]) { 

  Inicializa();   Ejecuta();   Finaliza(); 

  system(“PAUSE”);   return EXIT_SUCCESS; } 

 //-------------------------------------- 

void IngresaDatos(){   do { 

Page 169: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 169/180

11: Estructuras

system(“CLS”);   rempleado.codigo[0]=nulo;   cout<<”Codigo: “; cin.getline(rempleado.codigo,4);   //cin.seekg(0L,ios::end); 

  if(rempleado.codigo[0]!=nulo && numEmp!=maxEmp){   cout<<”Area : “; cin.getline(rempleado.area,29);   //cin.seekg(0L,ios::end);   cout<<”Básico : “; cin>>rempleado.basico;   cout<<”H extras: “; cin>>rempleado.extras;   cin.ignore(); //ignora el ultime enter  

 //agregar registo en el arreglo 

  empleado[numEmp] = rempleado;   numEmp++;   }   }while(rempleado.codigo[0]!=nulo && numEmp != maxEmp); } 

 //-------------------------------------- void CalculaImportes(){   hext = rempleado.extras * rempleado.basico/240; 

  //calcula reducción del 3% del basico 

  ipss = rempleado.basico * 0.03;   snp = rempleado.basico * 0.03;   fonavi = rempleado.basico * 0.03;  

 //calcular totales   totIng = rempleado.basico + hext;   totDed = ipss + snp + fonavi;   neto = totIng - totDed; } 

 //-------------------------------------- void ImprimeBoletas(){   for(ind=0; ind<=numEmp; ind++) {   //recuerpa registro del arreglo   rempleado = empleado[ind];  

 //Muestra los registros   system(“CLS”); 

169

Page 170: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 170/180

Fundamentos de Programación

170

  cout<<”Empleado: “<<rempleado.codigo<<endl;   cout<<”Area : “<<rempleado.area<<endl;   cout<<”=========================================== ================”<<endl<<endl; 

  cout<<”Ingresos: “<<setw(34)<<”Deducciones”<<setw(15)<<”N eto “<<endl;   cout<<”----------------------------------------------------------- ”<<endl<<endl;   CalculaImportes();  

 //escribe montos de acuerdo a boletas   cout<<”Sueldo básico: “   <<setiosags(ios::xed|ios::showpoint) 

  <<setw(9)<<setprecision(2)<<rempleado.basico   <<setw(15)<<”IPSS :”   <<setw(7)<<setprecision(2)<<ipss<<endl;   cout<<”Horas extras: “   <<setiosags(ios::xed|ios::showpoint)   <<setw(9)<<setprecision(2)<<hext   <<setw(15)<<”SNP :”   <<setw(8)<<setprecision(2)<<snp<<endl;   cout<<setw(40)<<”FONAVI: “ 

  <<setiosags(ios::xed|ios::showpoint)   <<setw(7)<<setprecision(2)<<fonavi<<endl;   cout<<setw(25)<<setprecision(2)<<totIng   <<setiosags(ios::xed|ios::showpoint)   <<setw(22)<<setprecision(2)<<totDed   <<setw(12)<<setprecision(2)<<neto<<endl;   cin.get(); //pausa

  } } 

 //-------------------------------------- void Inicializa(){   system(“CLS”);   numEmp=0;   memset(empleado,0,sizeof(empleado)); } 

Page 171: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 171/180

11: Estructuras

 //-------------------------------------- void Ejecuta(){   IngresaDatos();   ImprimeBoletas(); 

}  //-------------------------------------- void Finaliza(){   system(“CLS”); } 

171

Page 172: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 172/180

172

Page 173: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 173/180

ABAD, Ismael, CERRADA, José A. HERADIO, Rubén y COLLADO, Manuel.Practicas de Programación en C± Editorial Centro de Estudios Ramón Are-ces. Madrid 2010.

ACERA GARCÍA, Miguel Ángel. C/C++. Edición revisada y actualizada 2010.Anaya Multimedia, 2009

AHO, Alfred V.; HOPCROFT, John E.; ULLMAN, Jeffrey D.: Estructuras dedatos y algoritmos. México: Addison Wesley, 1998.

BALCAZAR, José Luis: Programación metódica. McGraw-Hill, España2001.

BIONDI, J. Clavel, G. Introducción a la Programación. Tomo 1. Ed. Masson,1985.

BORES RANGEKL, Ma. del Rosario y ROSALES BECERRIN Román. Com-

putación. Metodología, Lógica Computacional y Programación. . 1ª EdiciónEditorial Mc Graw Hill 1993

BRASSARD, G.; BRATLEY, P.: Fundamentos de Algoritmia. Madrid: Pren-tice-Hall, 1997.

British Standards Institute. C++ estándar. Madrid: Anaya. Prólogo de BjarneStroustrup inventor de C++ (2005).

Brian W. KERNIGHAN y Dennis M. RITCHIE: El lenguaje de programaciónC.Segunda edición. Prentice-HallIberoamericana. 1991.

BROOKSHEAR, J. Glenn. Computer Science, Eigth ed., Boston (USA):Pearson/Addison-Wesley (2005).

CAIRO BATTISTUTTI, Osvaldo. Metodología de la Programación. Algorit-mos, Diagramas de Flujo y programas. Tomos I y II. . 1a Edición Editorial

Alfaomega 1995

Bibliografía

173

Page 174: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 174/180

CARRETERO PEREZ, Jesús; GARCIA CARBALLEIRA, Félix y PEREZLOBATO, José Manuel. Fundamentos de Programación. Editorial Thomson

Paraninfo. España 2007.CASTRO, J. Cucker, F. Messeguer, X. Rubio, A. Solano, LL. Valles, B. Cur-so de Programación. McGraw-Hill, 1993.

COLLADO MACHUCA, M.; MORALES FERNÁNDEZ, R.; MORENO NAVA-RRO, J. J.: Estructuras de datos. Realización en Pascal. Madrid: EdicionesDíaz de Santos, 1987.

CEBALLOS SIERRA, Francisco Javier: C/C++ Curso de programación. Ter-cera edición. Editorial RA-MA, 2007.

CERRADA, José A. y COLLADO, Manuel. Fundamentos de Programación.Editorial Centro de Estudios Ramón Areces, S.A. Madrid 2010.

DEITEL Harvey M. y Paul J. DEITEL: Como programar C++. Prentice HallMexico, 2003.

GARCÍA BERMEJO, José Rafael: Programación estructurada en C. Pear-son Educación. 2008

GARCÍA MOLINA, J. J.; MONTOYA DATO, F. J.; FERNÁNDEZ ALEMÁN,J. L.; MAJADO ROSALES, M. J.: Una introducción a la programación. Unenfoque algorítmico. Madrid: Thomson-Paraninfo, 2005.

JOYANES, L.: Fundamentos de la programación. Algoritmos y Estructura deDatos, 4 ª Edición. Madrid: McGraw-Hill, 2003.Problemas:

JOYANES, L.; RODRIGUEZ, L; FERNANDEZ, M.: Fundamentos de progra-mación Libro de problemas. 2ª Edición. Madrid: McGraw-Hill, 2003.

JOYANES, L.: Problemas de Metodología de la Programación. Madrid: Mc-Graw-Hill, 1990.

KERNIGHAN, Ritchie. El Lenguaje de Programación C. Prentice-Hall, 1991

174

Page 175: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 175/180

LAFORE, Robert. Object-Oriented Programming in C++, fourth ed., Indiana-polis (Indiana): Sams(2002).

LUCAS, M. Peyrin, J.P. Scholl, P.C. Algorítmica y Representación de Datos.Tomo 1. Masson, 1985.

PRIETO, A., LLORIS, A. y TORRES, Introducción a la informática, 3.ª ed.,Madrid: McGraw-Hill(2005).

PEÑA MARÍ, Ricardo: Diseño de programas. Formalismo y abstracción.

Tercera edición. Pearson Educación, 2005.PRATA, Stephen. C++ Primer Plus, fth ed., Indianapolis (Indiana): Sams(2005).

PRIETO ESPINOSA, Alberto y PRIETO CAMPOS, Beatriz. Conceptos deInformática. Colección Schaum. Madrid: McGraw-Hill (2005).

SANTOS, Manuel; PATIÑO, Ismael y CARRASCO, Raúl. Fundamentos de

Programación México, Editorial Alfaomega. 2006.

WIRTH. N.: Algoritmos + Estructuras de datos = programas. Madrid: Edicio-nes del Castillo S. A., 1986.

175

Page 176: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 176/180

176

Page 177: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 177/180

  -A-Función Librería Fichero de cabecera C Fichero de cabecera C++abort stdlib stdlib.h cstdlibabs stdlib stdlib.h cstdlibacos math math.h cmathasctime time time.h ctimeasin math math.h cmathatan math math.h cmath

atan2 math math.h cmathatexit stdlib stdlib.h cstdlibatof stdlib stdlib.h cstdlibatoi stdlib stdlib.h cstdlibatol stdlib stdlib.h cstdlib  -B-Función Librería Fichero de cabecera C Fichero de cabecera C++bsearch stdlib stdlib.h cstdlib  -C-Función Librería Fichero de cabecera C Fichero de cabecera C++calloc stdlib stdlib.h cstdlibceil math math.h cmathclearerr stdio stdio.h cstdioclock time time.h ctimecos math math.h cmathcosh math math.h cmathctime time time.h ctime  -D-Función Librería Fichero de cabecera C Fichero de cabecera C++

difftime time time.h ctimediv stdlib stdlib.h cstdlib  -E-Función Librería Fichero de cabecera C Fichero de cabecera C++exit stdlib stdlib.h cstdlibexp math math.h cmath  -F-Función Librería Fichero de cabecera C Fichero de cabecera C++fabs math math.h cmathfclose stdio stdio.h cstdio

feof stdio stdio.h cstdioferror stdio stdio.h cstdio

177

ApendiceFunciones Estándar en C y C++

Page 178: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 178/180

178

Función Librería Fichero de cabecera C Fichero de cabecera C++fush stdio stdio.h cstdiofgetc stdio stdio.h cstdiofgetpos stdio stdio.h cstdiofgets stdio stdio.h cstdio

oor math math.h cmathfmod math math.h cmathfopen stdio stdio.h cstdioformato stdio stdio.h cstdiofprintf stdio stdio.h cstdiofputc stdio stdio.h cstdiofputs stdio stdio.h cstdiofread stdio stdio.h cstdiofree stdlib stdlib.h cstdlib

freopen stdio stdio.h cstdiofrexp math math.h cmathfscanf stdio stdio.h cstdiofseek stdio stdio.h cstdiofsetpos stdio stdio.h cstdioftell stdio stdio.h cstdiofwrite stdio stdio.h cstdio  -G-Función Librería Fichero de cabecera C Fichero de cabecera C++getc stdio stdio.h cstdio

getchar stdio stdio.h cstdiogetenv stdlib stdlib.h cstdlibgets stdio stdio.h cstdiogmtime time time.h ctime  -L-Función Librería Fichero de cabecera C Fichero de cabecera C++labs stdlib stdlib.h cstdlibldexp math math.h cmathldiv stdlib stdlib.h cstdliblocaleconv locale locale.h clocale

localtime time time.h ctimelog math math.h cmathlog10 math math.h cmathlongjmp setjmp setjmp.h csetjmp  -M-Función Librería Fichero de cabecera C Fichero de cabecera C++malloc stdlib stdlib.h cstdlibmblen stdlib stdlib.h cstdlibmbstowcs stdlib stdlib.h cstdlibmbtowc stdlib stdlib.h cstdlibmemchr string string.h cstringmemcmp string string.h cstring

Page 179: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 179/180

memcpy string string.h cstringmemmove string string.h cstringmemset string string.h cstringmktime time time.h ctimemodf math math.h cmath

  -P-Función Librería Fichero de cabecera C Fichero de cabecera C++perror stdio stdio.h cstdiopow math math.h cmathprintf stdio stdio.h cstdioputc stdio stdio.h cstdioputchar stdio stdio.h cstdioputs stdio stdio.h cstdio  -Q-Función Librería Fichero de cabecera C Fichero de cabecera C++qsort stdlib stdlib.h cstdlib  -R-Función Librería Fichero de cabecera C Fichero de cabecera C++raise signal signal.h csignalrand stdlib stdlib.h cstdlibrealloc stdlib stdlib.h cstdlibremove stdio stdio.h cstdiorename stdio stdio.h cstdiorewind stdio stdio.h cstdio

  -S-Función Librería Fichero de cabecera C Fichero de cabecera C++scanf stdio stdio.h cstdiosetbuf stdio stdio.h cstdiosetjmp setjmp setjmp.h csetjmpsetlocale locale locale.h clocalesetvbuf stdio stdio.h cstdiosignal signal signal.h csignalsin math math.h cmathsinh math math.h cmath

sprintf stdio stdio.h cstdiosqrt math math.h cmathsrand stdlib stdlib.h cstdlibsscanf stdio stdio.h cstdiostrcat string string.h cstringstrchr string string.h cstringstrcmp string string.h cstringstrcoll string string.h cstringstrcpy string string.h cstringstrcspn string string.h cstringstrerror string string.h cstringstrftime time time.h ctime

179

Page 180: Libro Fundamentos de Programación

7/17/2019 Libro Fundamentos de Programación

http://slidepdf.com/reader/full/libro-fundamentos-de-programacion 180/180

Función Librería Fichero de cabecera C Fichero de cabecera C++strlen string string.h cstringstrncat string string.h cstringstrncmp string string.h cstringstrncpy string string.h cstring

strpbrk string string.h cstringstrrchr string string.h cstringstrspn string string.h cstringstrstr string string.h cstringstrtod stdlib stdlib.h cstdlibstrtok string string.h cstringstrtol stdlib stdlib.h cstdlibstrtoul stdlib stdlib.h cstdlibstrxfrm string string.h cstringsystem stdlib stdlib.h cstdlib  -T-Función Librería Fichero de cabecera C Fichero de cabecera C++tanmath math.h cmathtanh math math.h cmathtime time time.h ctime