Está en la página 1de 138

GUÍA

LÓGICA DE
PROGRAMACIÓN
CARLOS EDUARDO ÁLVAREZ MARTÍNEZ
MARIELA GALLO MONTENEGRO

DEPARTAMENTO DE CIENCIAS BÁSICAS


UNIVERSIDAD SANTO TOMÁS
BOGOTÁ, D.C. - 2006
CONSEJO EDITORIAL

P. José Antonio Balaguera Cepeda, O.P.


Rector General

P. Pedro José Díaz Camacho, O.P.


Vicerrector Académico General

P. Marco Antonio Peña Salinas, O.P.


Vicerrector Administrativo y Financiero General

P. Luis Francisco Sastoque Poveda, O.P.


Vicerrector General de Universidad Abierta y a Distancia -VUAD-

Omar Parra Rozo


Director Unidad de Investigación y Posgrados

Aída María Bejarano Varela


Editora

ISBN: 958-631-375-1
©Derechos Reservados
Universidad Santo Tomás

UNIVERSIDAD SANTO TOMÁS


Editorial y Publicaciones
Carrera 13 No. 54-39
Teléfonos: 249 71 21 - 255 42 01
Http://www.usta.edu.co
E-mail: editorial@correo.usta.edu.co

Diseño e impresión
Editorial y Publicaciones
Bogotá, D.C., Colombia - 2006
contenido
contenido
contenido
1. Manual del usuario 9
2. Programa 11
2.1 Identificación 11
2.2 Características 12
2.3 Objetivo general 13
2.4 Justificación 13
2.5 Estrategías metodológicas 14
2.6 Contenido 15
2.7 Criterios de evaluación 19
2.8 Estrategias de nivelación 19
2.9 Bibliografía 19

3. Cronograma de actividades 21
4. Guía Nº 1. Sistemas numéricos y de codificación 23
4.1 Objetivos 23
4.2 Competencia a desarrollar 23
4.3 Introducción 23
4.4 Fundamentos teóricos 24
4.4.1 Sistemas numéricos 24
4.4.2 Conversión entre sistemas de numeración 27
4.4.3 Sistemas de codificación de datos alfanuméricos 31
4.5 Actividades y preguntas 34
4.6 Ejercicios 34
4.7 Bibliografía 34
Guía Lógica de Programación

5. Guía Nº 2. Operadores aritméticos y lógicos 35


5.1 Objetivos 35
5.2 Competencias a desarrollar 35
5.3 Fundamentos teóricos 35
5.3.1 Expresiones aritméticas 36
5.3.2 Reglas de prioridad 37
5.3.3 Expresiones lógicas (booleanas) 38
5.3.4 Asignación de valores a variables y constantes 39
5.4 Ejercicios 40
5.5 Bibliografía 41

6. Guía Nº 3. Análisis y diseño de algoritmos 43


6.1 Objetivos 43
6.2 Competencias a desarrollar 43
6.3 Fundamentos teóricos 43
6.3.1 Etapas básicas para el diseño de programas 44
6.3.2 Formato de representación para la etapa de análisis 46
6.3.3 Principios básicos de la programación lineal y estructurada 48
6.3.4 Herramientas para la representación de algoritmos 48
6.4 Preguntas 57
6.5 Ejercicios 58
6.6 Bibliografía 59

7. Guía Nº 4. Fundamentos de lenguaje de programación C++ 61


7.1 Objetivos 61
7.2 Competencias a desarrollar 61
7.3 Fundamentos teóricos 61
7.3.1 Estructura general de un programa en C++ 61
7.3.2 Elementos básicos de C++ 62
7.3.3 Palabras reservadas del C++ 68
7.3.4 Estructuras de control selectivo 68
7.3.5 Estructuras de control repetitivo 69
7.4 Preguntas 70

4
Universidad Santo Tomás

7.5 Ejercicios 70
7.6 Bibliografía 71

8. Guía Nº 5. Funciones de biblioteca 73


8.1 Objetivos 73
8.2 Competencias a desarrollar 73
8.3 Fundamentos teóricos 73
8.3.1 Funciones matemáticas de biblioteca 75
8.4. Preguntas 77
8.5. Ejercicios 77
8.6. Bibliografía 78

9. Guía Nº 6. Estructuras de control selectivo 79


9.1 Objetivos 79
9.2 Competencias a desarrollar 79
9.3 Fundamentos teóricos 79
9.3.1 Control selectivo 79
9.3.2 Casos especiales del control selectivo 81
9.3.3 Características de los condicionales 83
9.3.4 Estructuras selectivas anidadas 86
9.3.5 Estructura de selección múltiple 88
9.4 Preguntas 90
9.5 Ejercicios 91
9.6 Bibliografía 92

10. Guía Nº 7. Estructuras de control repetitivo 93


10.1 Objetivos 93
10.2 Competencias a desarrollar 93
10.3 Fundamentos teóricos 94
10.3.1 Control repetitivo 94
10.3.2 Estructura repetitiva mientras 94
10.3.3 Estructura repetitiva repetir - mientras 97
10.3.4 Estructura repetitiva para 98
10.3.5 Estructuras repetitivas anidadas 101

5
Guía Lógica de Programación

10.4 Preguntas 102


10.5 Ejercicios 102
10.6 Bibliografía 104

11. Guía Nº 8. Funciones y procedimientos 105


11.1 Objetivo 105
11.2 Competencias a desarrollar 105
11.3 Fundamentos teóricos 106
11.3.1 Funciones y procedimientos 107
11.3.2 Funciones 107
11.3.3 Procedimientos 108
11.3.4 Estructura general de un algoritmo 110
11.4 Preguntas 114
11.5. Ejercicios 114
11.6. Bibliografía 115

12. Guía Nº 9. Datos de tipo compuesto 117


12.1 Objetivo 117
12.2 Competencias a desarrollar 117
12.3 Fundamentos teóricos 117
12.3.1 Arreglos unidimensionales y bidimensionales. 117
12.3.2 Arreglos unidimensionales 118
12.3.3 Arreglos bidimensionales 120
12.4 Preguntas 122
12.5 Ejercicios 123
12.6 Bibliografía 124

13. Guía Nº 10. Programación orientada a objetos 127


13.1 Objetivos 127
13.2 Competencias a desarrollar 127
13.3 Introducción 128
13.4 Fundamentos teóricos 128

6
Universidad Santo Tomás

13.4.1 Programación orientada a objetos 128


13.4.2 Funciones especiales 135
13.5 Preguntas 137
13.6 Ejercicios 138
13.7 Bibliografía 138
ANEXOS 139

7
Manual
1. Manualdel
del
Usuario
usuario

El presente documento se elaboró como complemento al curso Lógica de programación. La organización


de los materiales responde al desarrollo de la asignatura y contiene los elementos necesarios para que el
alumno realice su trabajo durante el semestre.

Las guías deben desarrollarse de acuerdo con la programación temática establecida en el programa y su
fecha de entrega se especifica en el cronograma. Cada guía está estructurada con objetivo, competen-
cias, fundamentos teóricos, preguntas, ejercicios y bibliografía.

Para el desarrollo del material, el estudiante deberá atender las siguientes indicaciones:

• Asistir a las clases de fundamentación y desarrollo de ejercicios prácticos que se realizan con el
acompañamiento del profesor.

• Las inquietudes de las sesiones de acompañamiento serán despejadas en el horario de tutoría y/o en
los fundamentos teóricos planteados en cada guía.

• Leer los objetivos y competencias para contextualizarse en el tema a tratar.

• Revisar la fundamentación teórica para luego resolver las preguntas y los ejercicios planteados en
cada guía.

• Profundizar en los temas pertinentes al curso reseñados en la selección de bibliografía especializada.

• En caso de tener problemas de comprensión, solicitar aclaración al profesor o asistir a las tutorías
programadas por el Departamento de Ciencias Básicas.
Guía Lógica de Programación

• Los resultados deben ser entregados al profesor para su corrección y evaluación.

• En el anexo 2 se encuentra un mapa conceptual con la estructura de la guía.

10
Programa
Programa
2. Programa

2.1 IDENTIFICACIÓN

Asignatura: Lógica de programación


Código: 96301
Facultad o División: Ingeniería
Prerrequisitos:
Correquisitos:
Número de créditos: 3

Número de horas semanales Teoría Práctica

B. Acompañamiento 2 4

C. Independiente 2 3
Guía Lógica de Programación

2.2 CARACTERÍSTICAS

Competencias relacionadas con el comprender


• Conocimiento de los antecedentes, principios y conceptos más destacados de la
evolución de los sistemas de cómputo.
• Conocimiento de la estructura y sintaxis de los sistemas numéricos.
• Conocimiento de los principios, estructura y sintaxis básica del control secuencial,
selectivo y repetitivo en procesos estructurados.
• Conocimiento de los principios, estructura y sintaxis básica de la programación
modular.
• Conocimiento de los principios, estructura y sintaxis básica de los datos de tipo
compuesto.
• Conocimientos y habilidades básicas para la investigación en las diferentes
metodologías de programación.
• Dominio de los conocimientos, lenguajes y prácticas específicas en el desarrollo de
soluciones de software, que apoyan la realización de proyectos en Ingeniería.
• Capacidad de buscar y valorar la información para procesos de investigación y de
intervención profesional.
• Capacidad para interactuar con personas y grupos de trabajo.
• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.

Competencias relacionadas con el obrar


• Apropiación de valores éticos que le permitan actuar por convicción propia y no
por condicionamientos externos.
• Capacidad para el trabajo en equipo.
• Actitudes necesarias para el ejercicio profesional (colaboración, valoración de mérito,
tolerancia, disposición para el trabajo bien hecho, motivación, optimismo, compro-
miso, liderazgo, empresarismo, negociación y logros de consensos, etc.).

12
Universidad Santo Tomás

Competencias relacionadas con el hacer


• Dominio de los mecanismos de conversión entre sistemas de numeración.
• Dominio de las técnicas para diseñar e implementar soluciones de software basa-
das en la metodología de diseño descendente.
• Dominio de los lenguajes de programación que soportan la implementación de las
técnicas de programación estructurada y modular.
• Desarrollo de habilidades y destrezas propias del ejercicio profesional.
• Manejo de tecnologías informáticas para el desarrollo de soluciones de software.
• Habilidad para la búsqueda de información.

Competencias Relacionadas con el comunicar


• Dominio de los lenguajes específicos de intervención profesional.
• Capacidad para presentar proyectos y para expresarse con claridad.
• Capacidad para interactuar con personas y grupos de trabajo.

2.3 OBJETIVO GENERAL


Ofrecer al alumno las herramientas necesarias para la construcción del pensamiento lógico
y estructurado que se emplea en el desarrollo de software, a través de las metodologías de
programación utilizadas en la actualidad.

2.4 JUSTIFICACIÓN
La tecnología de los computadores brinda muchas posibilidades en el desarrollo social, eco-
nómico y de la educación, pues hace posible la transferencia tecnológica indispensable para
promover el desarrollo económico y social.

La programación de computadores surge como medio para hacer explícitas las capacidades
y habilidades que tenemos para resolver problemas.

Adquirir conocimientos y habilidades en programación constituye una gran oportunidad para


el estudiante y para el futuro profesional que requieran analizar, diseñar e implementar solu-
ciones a problemas mediante el uso del computador.

13
Guía Lógica de Programación

2.5 ESTRATEGIAS METODOLÓGICAS

• Investigación previa de los fundamentos teóricos que sustentan el desarrollo de conteni-


dos.

• Introducción a los temas investigados.

• Acompañamiento en análisis, comprensión, apropiación y aplicación de fundamentos,


resaltando los elementos de mayor relevancia en cuanto a la lógica y metodología para el
análisis e implementación de programas.

• Desarrollo de ejercicios de planeamiento y resolución de situaciones problémicas ejem-


plo.

• Elaboración de talleres para el desarrollo de ejercicios por parte del alumno, siguiendo las
metodologías apropiadas en los pasos anteriores.

• Asignación de ejercicios de planeamiento y resolución de situaciones problémicas para


ser desarrollados por el alumno en forma independiente.

• Resolución de dudas sobre fundamentación teórica y desarrollo de ejercicios.

• Aplicación de evaluaciones de control sobre investigación, fundamentación teórica y de-


sarrollo de ejercicios.

14
Universidad Santo Tomás

2.6 CONTENIDO

ACTIVIDADES DE APRENDIZAJE
SEM. TEMA
ACOMPAÑAMIENTO INDEPENDIENTE

1 Evolución de los • Qué es un sistema numérico Investigación


sistemas • Origen de los números • Tipos de datos y operaciones
• Sistemas numéricos. • Sistema binario, octal, primitivas
hexadecimal,
• Operaciones entre sistemas Desarrollo de la guía Nº 1
• Codificación de datos • Sistemas numéricos y de
alfanuméricos codificación
Ejercicios
• Conversiones y operaciones
aritméticas con sistemas
numéricos.

2 Funcionamiento del • Los datos numéricos y Investigación


sistema operativo alfanuméricos • Generalidades de algoritmos
• Tipos de datos • Enteros, reales, carácter,
booleano, vectores, matrices. Desarrollo de la guía Nº 2
• Concepto de variable y • Operadores aritméticos y
constante lógicos
• Operaciones primitivas con
tipos de datos.
• Operadores lógicos y
relacionales.
• Jerarquía de operadores.
Ejercicios
• Operaciones con tipos de datos.
Uso de operadores lógicos y
relacionales.

3 Lógica de programación • Definición, análisis y desarrollo Investigación


• Conceptos básicos de de algoritmos. • Sintaxis y semántica de los
algoritmos • Concepto de pseudocódigo lenguajes procedimentales.
• Sintaxis, semántica y estructura
general de algoritmos. Desarrollo de la guía Nº 3
Ejercicios • Análisis y diseño de
• Diseño de algoritmos. algoritmos

15
Guía Lógica de Programación

ACTIVIDADES DE APRENDIZAJE
SEM. TEMA
ACOMPAÑAMIENTO INDEPENDIENTE

4 Software aplicado • Estructura de un programa en C++ Investigación


• Lenguaje de programa- • Declaración, definición y • Funciones de biblioteca.
ción C++ operaciones de variables y
constantes. Desarrollo de la guía Nº 4
• Operaciones de entrada y salida de • Fundamentos de lenguaje
datos simples. de programación C++
• Operaciones de entrada y salida de
datos compuestos..
Ejercicios
• Diseño de programas en C++.

5 Lógica de programa- • Primer parcial Investigación


ción • Funciones de biblioteca • Estructuras de control
• Programación • Concepto de librería. selectivo.
estructurada • Llamada a funciones de biblioteca.
Software aplicado Ejercicios: Desarrollo de la guía Nº 5
• Lenguaje de programa- • Desarrollo de problemas aplicando • Funciones de biblioteca.
ción C++ el concepto de funciones de
biblioteca.

6 Lógica de programa- • Estructura de control selectivo


ción simple.
• Programación • Estructura de control selectivo
estructurada compuesto.
Software aplicado Ejercicios
• Lenguaje de programa- • Desarrollo de problemas aplicando
ción C++ el concepto de control selectivo
sobre datos de tipo simple y
compuesto.

7 Lógica de programa- • Estructuras de control selectivo Investigación


ción anidado • Estructuras de control
• Programación • Estructura de control selectivo repetitivo.
estructurada múltiple Desarrollo de la guía Nº 6
Software aplicado Ejercicios • Estructuras de control
• Lenguaje de programa- • Desarrollo de problemas aplicando selectivo
ción C++ el concepto de control selectivo
anidado sobre datos de tipo simple
y compuesto.
• Desarrollo de problemas aplicando
el concepto de menú.

16
Universidad Santo Tomás

ACTIVIDADES DE APRENDIZAJE
SEM. TEMA
ACOMPAÑAMIENTO INDEPENDIENTE

8 Lógica de programación • Estructuras de control repetitivo


• Programación simple.
estructurada. Ejercicios
Software aplicado • Desarrollo de problemas
• Lenguaje de programa- aplicando el concepto de control
ción C++ repetitivo sobre datos de tipo
simple y compuesto.

9 Lógica de programación • Segundo parcial


• Programación • Estructuras de control repetitivo
estructurada. compuesto. Desarrollo de la guía Nº 7
Software aplicado Ejercicios • Estructuras de control
• Lenguaje de programa- • Desarrollo de problemas repetitivo
ción C++ aplicando el concepto de control
repetitivo sobre datos de tipo
simple y compuesto.

10 Lógica de programación • Estructuras de control repetitivo


• Programación anidado.
estructurada Ejercicios Investigación
Software aplicado • Desarrollo de problemas • Programación modular
• Lenguaje de programa- aplicando el concepto de control
ción C++ repetitivo anidado sobre datos de
tipo simple y compuesto.

11 Lógica de programación • Concepto de funciones y


• Programación modular procedimientos.
Software aplicado • Declaración y definición de Desarrollo de la guía Nº 8
• Lenguaje de programa- funciones. • Funciones y procedimientos.
ción C++ • Paso de parámetros.
• Sintaxis y semántica de funcio-
nes.
• Llamado a funciones.
Ejercicios
• Desarrollo de problemas
aplicando el concepto de
funciones de usuario sobre datos
de tipo simple y compuesto.

17
Guía Lógica de Programación

ACTIVIDADES DE APRENDIZAJE
SEM. TEMA
ACOMPAÑAMIENTO INDEPENDIENTE

12 Lógica de programación Ejercicios Investigación


• Programación modular • Desarrollo de problemas aplicando • Fundamentos de programa-
Software aplicado el concepto de funciones de ción orientada a objetos.
• Lenguaje de programación usuario sobre datos de tipo simple Desarrollo de la guía Nº 9
C++ y compuesto. • Datos de tipo compuesto

13 Lógica de programación Tercer parcial


• Programación orientada a • Conceptualización de la metodo-
objetos logía de programación orientada a
Software aplicado objetos.
• Lenguaje de programación • Herramientas para el desarrollo de
C++ la programación orientada a
objetos
• Sintaxis, semántica y estructura
general de proyectos.

14 Lógica de programación • Estructura general de clases Desarrollo de la guía Nº 10


• Programación orientada a • Declaración y definición de • Fundamentos de lenguaje de
objetos miembros datos programación C++
Software aplicado • Declaración y definición de
• Lenguaje de programación funciones miembro
C++ • Especificadores de acceso a los
miembros de una clase
Ejercicios
• Desarrollo de soluciones de
software en entorno consola a
partir de objetos creados con tipos
abstractos de datos

15 Lógica de programación Ejercicios Investigación


• Programación orientada a Desarrollo de soluciones de software • Funciones especiales en
objetos en entorno consola a partir de programación orientada a
Software aplicado objetos creados con tipos objetos.
• Lenguaje de programación abstractos de datos.
C++

16 Lógica de programación • Constructores, destructores.


• Programación orientada a Ejercicios
objetos • Desarrollo de soluciones de
Software aplicado software en entorno consola a
• Lenguaje de programación partir de objetos creados con tipos
C++ abstractos de datos.

En el anexo 2 se encuentra un mapa conceptual con el contenido de la asignatura.

18
Universidad Santo Tomás

2.7 CRITERIOS DE EVALUACIÓN


• Control de investigación
• Participación en clase
• Asistencia a clase
• Desarrollo de talleres en forma individual y en grupo.
• Desarrollo de guías.
• Capacidad de analizar, innovar y proponer soluciones a problemas.
• Interés, aptitud y habilidad en el manejo de las herramientas de desarrollo.

Evaluaciones

• Tres parciales; cada uno con valor de 15%.


• Control de investigación, participación en clase, desarrollo de talleres y guías: 25%
• Examen y proyecto final: 30%.

2.8 ESTRATEGIAS DE NIVELACIÓN


• Asesorías individuales
• Trabajo independiente extraclase
• Recuperación en extraclase
• Seguimiento al alumno con dificultad para entender temas de la materia
• Tutorías obligatorias

2.9 BIBLIOGRAFÍA
BARCO GÓMEZ, Carlos. Matemática digital. 2da ed. Bogotá: McGraw-Hill, 2001

BECERRA SANTAMARÍA, César. Algoritmos:conceptos básicos.3 ra ed. Bogotá:


Kimpres, 1996

BECERRA SANTAMARÍA, César. 380 principales funciones del Turbo C++. 3ra ed.
Bogotá: Kimpres,1997

19
Guía Lógica de Programación

BRONSON GARY, J. C++ para ingenieros y ciencias. México: Thomson, 2000.

DEITEL H. M. Cómo programar en C/C++. 2da ed. México: Prentice Hall, 1995.

JAMSA, Kris. Aprenda y practique C++. 3ra ed. México: Oxford, 1999

JOYANES AGUILAR, Luis. Fundamentos de programación. 2da ed. Madrid: McGraw-


Hill, 1996.

JOYANES AGUILAR, Luis. Programación en C. Metodología, estructura de datos y


objetos. Madrid: McGraw-Hill, 2001.

_______________. Programación en C++. Algoritmos, estructura de datos y obje-


tos. Madrid: McGraw-Hill, 2000.

LÓPEZ ROMÁN, Leobardo. Programación estructurada enfoque algorítmico. 2da ed.


México: Alfaomega, 2002.

OVIEDO REGINO, Efraín. Lógica de programación. Bogotá: ECOE, 2002.

UNIVERSIDAD SANTO TOMÁS. Departamento de Ciencias Básicas. Guías lógica de


programación. Bogotá, 2005.

20
Cronograma
3. Cronograma dede
actividades
actividades
En la siguiente tabla encuentran los temas de consulta para su trabajo independiente junto
con la fecha en que se dará inicio a la sesión respectiva. La consulta se debe realizar con
anterioridad a la sesión en que se aborde cada tema.

ACTIVIDAD SEMANA SESIÓN


Investigación:
Tipos de datos y operaciones primitivas. 2ª semana 1ª sesión

Investigación:
Generalidades de algoritmos 3ª semana 1ª sesión

Investigación:
Sintaxis y semántica de los lenguajes procedimentales. 4ª semana 1ª sesión

Investigación
Funciones de biblioteca 5ª semana 2ª sesión

Investigación:
6ª semana 1ª sesión
Estructuras de control selectivo.

Investigación:
8ª semana 1ª sesión
Estructuras de control repetitivo.

Investigación:
11ª semana 1ª sesión
Programación modular

Investigación:
13ª semana 2ª sesión
Fundamentos de programación orientada a objetos

A continuación se indican las fechas seleccionadas para la entrega de la solución a las


preguntas y ejercicios propuestos en las guías.
Guía Lógica de Programación

ACTIVIDAD SEMANA SESIÓN


Taller:
Preguntas y ejercicios de guía Nº 1 3ª semana 2ª sesión

Taller:
4ª semana 3ª sesión
Preguntas y ejercicios de guía Nº 2

Taller:
5ª semana 3ª sesión
Preguntas y ejercicios de guía Nº 3

Taller:
6ª semana 3ª sesión
Preguntas y ejercicios de guía Nº 4

Taller:
7ª semana 3ª sesión
Preguntas y ejercicios de guía Nº 5

Taller:
8ª semana 3ª sesión
Preguntas y ejercicios de guía Nº 6

Taller:
11ª semana 3ª sesión
Preguntas y ejercicios de guía Nº 7

Taller: 13ª semana 3ª sesión


Preguntas y ejercicios de guía Nº 8

Taller: 14ª semana 3ª sesión


Preguntas y ejercicios de guía Nº 9

Taller: 16ª semana 1ª sesión


Preguntas y ejercicios de guía Nº 10

Adicionalmente se especifican las fechas programadas para la realización de evaluaciones.

ACTIVIDAD SEMANA SESIÓN


Primer parcial 5ª semana 1ª sesión
Segundo parcial 9ª semana 1ª sesión
Tercer parcial 13ª semana 1ª sesión
Entrega y evaluación 17ª semana 1ª sesión
del proyecto y examen final

En el anexo 3 se encuentra el cronograma con todas las actividades programadas

22
4. Guía No 1.
Guía No.
Sistemas numéricos
y de codificación 1.
4.1 OBJETIVOS
• Conocer las características y propiedades de los sistemas numéricos y de codifi-
cación para que el estudiante se familiarice con los tipos de datos administrados
por el computador.

• Aprender los métodos de conversión entre sistemas numéricos para realizar ope-
raciones entre los datos.

4.2 COMPETENCIA A DESARROLLAR


• Conocimiento y habilidad para la utilización de sistemas numéricos y de codifica-
ción.

4.3 INTRODUCCIÓN
Los sistemas de cómputo actuales utilizan el sistema de representación binario como base
para el almacenamiento y procesamiento de datos. El computador no entiende nuestro len-
guaje, solamente lo interpreta, adaptándolo al suyo propio: el binario. En esta guía se analizan
varios conceptos importantes sobre la representación de datos, incluyendo los sistemas binario,
decimal y hexadecimal, la organización binaria de datos y el sistema de codificación ASCII.
Guía Lógica de Programación

4.4 FUNDAMENTOS TEÓRICOS

4.4.1 SISTEMAS NUMÉRICOS


Los números surgieron de la necesidad de expresar de forma abstracta una propiedad de un
conjunto de elementos: su tamaño; esto es, la cantidad de elementos que posee.

Existen varios sistemas de numeración, desde el aditivo (como el que usaban los aztecas), el
aditivo-substractivo (numeración romana), el multiplicativo (propio de las culturas asiria,
aramea y etíope) hasta el posicional, que es el más empleado actualmente.

• Sistemas de numeración posicional


Representan números conformados por la agrupación de dígitos ubicados en una posición
específica.

El valor del dígito depende de la posición en la que se encuentre dentro del número. Este
valor se determina de acuerdo con la base que defina el sistema de numeración.

Tanto el sistema hexadecimal como el sistema binario y el sistema decimal utilizan números
para representar cantidades. Los tres tienen en común el ser sistemas de numeración
posicionales.

En la siguiente ecuación tenemos un ejemplo genérico de un sistema posicional decimal.

d n d n −1 ...d 2 d 1 d 0 • d −1 d − 2 ...d − m

Con la letra se representa un dígito cualquiera de los diez que componen el sistema. Los
dígitos a la izquierda de la coma decimal, representados por do,d1 y d2, y toman el valor
correspondiente al producto entre éstos y las potencias positivas de la base (en decimal, 10)
en función de la posición que ocupan y representan respectivamente al dígito de las unidades
(100 = 1), al de las decenas (101 = 10) y al de las centenas (102 = 100), ya que como se
observa en la ecuación están colocados en las posiciones primera, segunda y tercera a la
izquierda del punto. Los dígitos a la derecha del punto decimal y representan respectivamente
al dígito de las décimas (10-1 = 0,1) y al de las centésimas (10-2 = 0,01). El valor total del número
será la suma de cada dígito multiplicado por la potencia de la base que representa.

d n ×10n + d n−1 ×10n−1 + ... + d 2 ×102 + d1 ×10 + d 0 + d −1 ×10−1 + d −2 ×10−2 + ... + d −m ×10−m

24
Universidad Santo Tomás

Es decir: ∑ d 10
i=−m
i
i

Cada sistema de numeración utiliza un conjunto de símbolos (dígitos) para la representación


de números. En la siguiente tabla observamos los símbolos empleados por algunos sistemas
de numeración.

BASE NOMBRE SÍMBOLO DE LA BASE (Digito del sistema)


2 Binario 01
3 Ternario 012
4 Cuaternario 0123
5 Quinario 01234
6 Hexal 012345
7 Septal 0123456
8 Octal 01234567
9 Nonario 012345678
10 Decimal 0123456789
11 Undecimal 0123456789A
12 Duodecimal 0123456789AB
13 Tridecimal 0123456789ABC
14 Tetradecimal 0123456789ABCD
15 Pentadecimal 0123456789ABCDE
16 Hexadecimal 0123456789ABCDEF

• Sistema de numeración decimal


Emplea la base 10 para determinar el valor de cada posición, pues se utilizan 10 dígitos para
su representación (0 1 2 3 4 5 6 7 8 9).

Ejemplo 1.

La unión de los dígitos 3, 0, 5 y 7 es igual a: 3x103 + 0 x102 + 5 x101 + 7 x100

Lo que da como resultado: 3000 + 0 + 50 + 7 = 305710

25
Guía Lógica de Programación

• Sistema de numeración binario


Es el sistema de referencia para los computadores y su base es 2. El valor de la posición
viene dado por potencias de 2 (20, 21, 22,…) ya que sólo se utilizan dos dígitos, el cero y el uno
(0 1).

Ejemplo 2.

El número 110011012 es igual a: 1x27 + 1x26 + 0x25 + 0x24 + 1x23 + 1x22 + 0x21 + 1x20

Lo que da como resultado: 128 + 64 + 0+ 0 + 8 + 4 + 0 + 1 = 20510

• Sistema de numeración hexadecimal


Un gran problema con el sistema binario es la falta de compactación. Para representar el
valor 205 se requieren 8 dígitos binarios; en cambio, la versión decimal sólo requiere de 3
dígitos; por lo tanto, los números se representan en forma mucho más compacta con respec-
to al sistema numérico binario.

El sistema hexadecimal permite mayor compactación y nos proporciona un mecanismo sen-


cillo de conversión hacia el formato binario; debido a esto, la mayoría de los computadores
actuales lo utilizan como sistema de numeración.

La base del sistema hexadecimal es 16 y emplea los símbolos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,


C, D, E, F para la representación de números.

Ejemplo 3.

El número 9EDFAC16 es igual a: 9x165 + 14x164 + 13x163 + 15x162 + 10x161 + 12x160

Lo que da como resultado: 9437184 + 917504+ 12288 + 3840 + 160 + 12 = 1037098810

Ejemplo 4.

El número 123416 es igual a: 1x163 + 2x162 + 3x161 + 4x160

Lo que da como resultado: 4096 + 512 + 48 + 4 = 46601010

26
Universidad Santo Tomás

4.4.2 CONVERSIÓN ENTRE SISTEMAS DE NUMERACIÓN

• Decimal a binario

Un número decimal puede ser convertido a binario aplicando divisiones sucesivas por 2 y
empleando la parte entera y el residuo de la división.

El número 4110 representa en sistema binario la cantidad:

COCIENTE ENTERO RESIDUO COEFICIENTE

41 /2 = 20 + 1 a0 = 1

20 /2 = 10 + 0 a1 = 0

10 /2 = 5 + 0 a2 = 0

5 /2 = 2 + 1 a3 = 1

2 /2 = 1 + 0 a4 = 0

1 /2 = 0 + 1 a5 = 1

El número resultante en binario se obtiene ordenando los valores de los coeficientes de modo
inverso a las divisiones realizadas (a5 a4 a3 a2 a1 a0).

(41)10 = (a5 a4 a3 a2 a1 a0)2 = (1011001)2

Para realizar la conversión de decimal a binario se realizan divisiones sucesivas siguiendo el


procedimiento descrito a continuación:

• En la primera división se toma como dividendo al número en base decimal y como divisor
al número 2.
• Se realiza la división encontrando como resultados la parte entera y el residuo.
• El residuo resultante se toma como dividendo de la siguiente división.
• Se realizan divisiones sucesivas tomando como divisor al número 2 hasta que el resultado
de la parte entera sea 0.

27
Guía Lógica de Programación

1 0

Para formar el número binario se toman los residuos de derecha a izquierda:

110 0101

Para probar que la conversión sea correcta se realiza la siguiente operación:

(1x27) + (1x26) + (0x26) + (0x24) + (1x28) + (0x22) + (1x21) + (0x20) =


128 + 64 + 0 + 0 + 8 + 0 + 2 + 0 = 202

• De decimal a octal
Para convertir un número decimal a octal, se hacen divisiones sucesivas en base 8 siguiendo
el procedimiento descrito a continuación:

• En la primera división se toma como dividendo al número en base decimal y como divisor
al número 8.

• Se realiza la división encontrando como resultados la parte entera y el residuo.

• El residuo resultante se toma como dividendo de la siguiente división.

• Se realizan divisiones sucesivas tomando como divisor al número 8 hasta que el resultado
de la parte entera sea 0.

28
Universidad Santo Tomás

Para formar el octal, se toman los residuos de derecha a izquierda: 2 2 6 2

Para probar que la conversación sea correcta, se realiza la siguiente operación:

(2x83) + (2x82) + (6x81) + (2x80) =


1024 + 128 + 48 + 2 = 1202

• De decimal a hexadecimal
Para pasar de un número del sistema decimal al hexadecimal, se hacen divisiones sucesivas
entre 16 siguiendo el procedimiento descrito a continuación:

• En la primera división se toma como dividendo al número en base decimal y como divisor
al número 16.

• Se realiza la división encontrando como resultados la parte entera y el residuo.

• El residuo resultante se toma como dividendo de la siguiente división.

• Se realizan divisiones sucesivas tomando como divisor el número 16 hasta que el resulta-
do de la parte entera sea 0.

Para tomar el hexadecimal, se toman los residuos de derecha a izquierda: 2 F A C

Para probar que la conversación sea correcta, se realiza la siguiente operación:

(2x163)+(Fx162)+(Ax161)+(Cx160)=
8192 + 3840 + 160 + 12 = 12204

29
Guía Lógica de Programación

Para formar el hexadecimal se toman los residuos de derecha a izquierda 2FAC.

Para probar si la operación es correcta se realiza la siguiente operación:

(2x163) + (Fx162) + (Ax161) + (Cx160) =


8192 + 3840 + 160 + 12 = 12204

• De binario a decimal
Un número binario puede ser convertido a decimal formando la suma de las potencias de
base 2.

Ejemplo 5.

El número 1011012 representa en sistema decimal la cantidad:

1*25 + 0*24 + 1*23 + 1*22 + 0*21 + 1*20 =

32 + 0 + 8 + 4 + 0 + 1 = 45
10

• De binario a octal
Un número binario puede ser convertido a octal formando particiones del número binario en
grupos de tres dígitos binarios de derecha a izquierda. Cada partición se convierte a decimal
y con los resultados se forma el número en octal.

Ejemplo 6.

El número 101100011010112 representa en sistema octal la cantidad.

10 110 001 101 011 = (26153)8

2 6 1 5 3 =

30
Universidad Santo Tomás

• De binario a hexadecimal
Un número binario puede ser convertido a hexadecimal formando particiones del número
binario en grupos de cuatro dígitos binarios de derecha a izquierda. Cada partición se con-
vierte a decimal y luego a su equivalente en hexadecimal. Con los resultados se forma el
número en hexadecimal.

Ejemplo 7.

El número 101100011010112 representa en sistema hexadecimal la cantidad.

10 1100 0110 1011 = (2C6B)16


2 12 6 11 =

C B

4.4.3 SISTEMA DE CODIFICACIÓN DE DATOS ALFANUMÉRICOS

Los caracteres del alfabeto y los símbolos especiales que se utilizan son representados en el
computador mediante la conversión de estos a formato binario. Cada caracter y símbolo
tiene un código binario asignado para su representación.

En la actualidad, existen varios sistemas de codificación de datos alfanuméricos, pero desde


el punto de vista de manipulación del teclado se utiliza el conjunto de caracteres ASCII
(American Standard Code for Information Interchange), que corresponde al estándar para
el intercambio de datos alfanuméricos.

En informática, éste es un código estándar de 7 bits para la representación de caracteres:


letras, dígitos, signos de puntuación e instrucciones de control, con valores binarios. El inter-
valo de los valores del código es de 0 a 127. Aunque ASCII carece tanto de los acentos
como de los caracteres especiales utilizados en diversos idiomas europeos, y no es capaz de
representar caracteres en los alfabetos no latinos, reviste importancia por ser el sistema de
codificación de caracteres con mayor validación internacional. Muchos conjuntos de carac-

31
Guía Lógica de Programación

teres latinos no ingleses son extensiones o modificaciones del sistema de codificación ASCII.
La mayoría de los computadores utiliza un código ASCII extendido o modificado de 8 bits,
con 128 caracteres adicionales para símbolos especiales, letras y signos de puntuación de
diversos idiomas, y símbolos gráficos.

El ASCII extendido incluye 256 códigos divididos en dos conjuntos (estándar y extendido) de
128 cada uno. Estos conjuntos representan todas las combinaciones posibles de 7 u 8 bits. El
conjunto ASCII estándar utiliza 7 bits para cada código, lo que da como resultado 128 códi-
gos de caracteres desde 0 hasta 127 (00H hasta 7FH hexadecimal). El conjunto ASCII
extendido utiliza 8 bits para cada código, dando como resultado 128 códigos adicionales,
numerados desde el 128 hasta el 255 (80H hasta FFH extendido).

En la tabla mostrada a continuación se observa el conjunto de caracteres que compone el


código ASCII, junto con su equivalencia en formato decimal.

32
Universidad Santo Tomás

Código estándar Código extendido

Número Número Número Número


Carácter Carácter Carácter Carácter
decimal decimal decimal decimal
0 nulo 64 @ 128 Ç 192 └
1 principio de encabezado 65 A 129 ü 193 ┴
2 inicio de texto 66 B 130 é 194 ┬
3 fin del texto 67 C 131 â 195 ├
4 fin de transmisión 68 D 132 ä 196 ─
5 consulta 69 E 133 à 197 ┼
6 reconocimiento 70 F 134 å 198 ╞
7 campana 71 G 135 ç 199 ╟
8 retroceso 72 H 136 ê 200 ╚
9 tabulación horizontal 73 I 137 ë 201 ╔
10 avance de línea/nueva línea 74 J 138 è 202 ╩
11 tabulación vertical 75 K 139 ï 203 ╦
12 avance de página/nueva página 76 L 140 î 204 ╠
13 retorno de carro 77 M 141 ì 205 ═
14 desplazamiento hacia fuera 78 N 142 Ä 206 ╬
15 desplazamiento hacia dentro 79 O 143 Å 207 ╧
16 escape de vínculo de datos 80 P 144 É 208 ╨
17 control de dispositivo 1 81 Q 145 æ 209 ╤
18 control de dispositivo 2 82 R 146 Æ 210 ╥
19 control de dispositivo 3 83 S 147 ô 211 ╙
20 control de dispositivo 4 84 T 148 ö 212 Ô
21 confirmación negativa 85 U 149 ò 213 ╒
22 inactividad síncrona 86 V 150 û 214 ╓
23 fin del bloque de transmisión 87 w 151 ù 215 ╫
24 cancelar 88 X 152 ÿ 216 ╪
25 fin del medio 89 Y 153 Ö 217 ┘
26 sustitución 90 Z 154 Ü 218 ┌
27 escape 91 [ 155 ¢ 219 █
28 separador de archivos 92 \ 156 £ 220 ▄
29 separador de grupos 93 ] 157 ¥ 221 ▌
30 separador de registros 94 ^ 158 ₧ 222 ▐
31 separador de unidades 95 _ 159 ƒ 223 ▀
32 espacio 96 ` 160 á 224 α
33 ! 97 a 161 í 225 ß
34 " 98 b 162 ó 226 Γ
35 # 99 c 163 ú 227 π
36 $ 100 d 164 ñ 228 Σ
37 % 101 e 165 Ñ 229 σ
38 & 102 f 166 ª 230 µ
39 ' 103 g 167 º 231 τ
40 ( 104 h 168 ¿ 232 Φ
41 ) 105 i 169 ⌐ 233 Θ
42 * 106 j 170 ¬ 234 Ω
43 + 107 k 171 ½ 235 δ
44 , 108 l 172 ¼ 236 ∞
45 - 109 m 173 ¡ 237 φ
46 . 110 n 174 « 238 ε
47 / 111 o 175 » 239 ∩
48 0 112 p 176 ░ 240 ≡
49 1 113 q 177 ▒ 241 ±
50 2 114 r 178 ▓ 242 ≥
51 3 115 s 179 │ 243 ≤
52 4 116 t 180 ┤ 244 ⌠
53 5 117 u 181 ╡ 245 ⌡
54 6 118 v 182 ╢ 246 ÷
55 7 119 w 183 ╖ 247 ≈
56 8 120 x 184 ╕ 248 ≈
57 9 121 y 185 ╣ 249 ·
58 : 122 z 186 ║ 250 ·
59 ; 123 { 187 ╗ 251 √
60 < 124 | 188 ╝ 252 ⁿ
61 = 125 } 189 ╜ 253 ²
62 > 126 ~ 190 ╛ 254 ■
63 ? 127 SUPR 191 ┐ 255

33
Guía Lógica de Programación

4.5 ACTIVIDADES Y PREGUNTAS

1. Explique el proceso a seguir para convertir un número de formato hexadecimal a binario.

2. Explique el proceso a seguir para convertir un número de formato hexadecimal a octal.

3. Explique el proceso a seguir para convertir un número de formato octal a hexadecimal.

4. ¿Cómo se realiza la operación aritmética de suma entre números en binario?

5. ¿Cómo se realiza la operación aritmética de multiplicación entre números en binario?

6. ¿Cómo se realiza la operación aritmética de división entre números en binario?

7. ¿Cómo se realiza la operación aritmética de suma entre números en hexadecimal?

8. ¿Cómo se realiza la operación aritmética de multiplicación entre números en hexadecimal?

4.6 EJERCICIOS

Realice la conversión entre los sistemas de numeración binario, octal, decimal y hexadecimal
de:

1. Dos números en sistema binario a los demás sistemas.

2. Dos números en sistema octal a los demás sistemas.

3. Dos números en sistema decimal a los demás sistemas.

4. Dos números en sistema hexadecimal a los demás sistemas.

4.7 BIBLIOGRAFÍA
BARCO GÓMEZ, Carlos. Matemática digital. 2da ed. Bogotá: McGraw-Hill, 2001. p. 3.

34
5. Guia
Guía No.No 2
Operadores aritméticos
2.
y lógicos

5.1 OBJETIVOS

• Conocer y utilizar los operadores aritméticos y lógicos que se emplean en pro-


gramación.
• Entender cómo funciona el orden de prioridad de los operadores en la
implementación de expresiones aritméticas y/o lógicas.

5.2 COMPETENCIAS A DESARROLLAR

• Conocimiento y habilidad para la implementación de expresiones aritméticas y


lógicas.
• Dominio de los mecanismos de representación que soportan la implementación
de expresiones aritméticas y lógicas.

5.3 FUNDAMENTOS TEÓRICOS


Una expresión se refiere a un conjunto de operadores que actúa sobre operandos para
proporcionar un único resultado. Las expresiones pueden ser de dos tipos:
Guía Lógica de Programación

• Aritméticas: constan de operandos numéricos unidos a través de operadores aritméti-


cos. El resultado obtenido de la expresión siempre es un número.

• Lógicas: constan de operandos unidos a través de operadores lógicos. El resultado obte-


nido de la expresión siempre es un valor de verdad (verdadero o falso).

En los sistemas de cómputo, las expresiones aritméticas y lógicas no pueden ser escritas en
la notación matemática tradicional, debido a que el computador sólo entiende las expresiones
en formato lineal; por tal motivo, deben ser transformadas a este formato, conocido como
notación algorítmica.

Por ejemplo: 52+2x+3 debe ser escrito así: 5^2+2*x+3

5.3.1 EXPRESIONES ARITMÉTICAS

En la implementación de expresiones aritméticas se utilizan los siguientes operadores arit-


méticos:

OPERADOR SIGNIFICADO
+ Suma
- Resta
* Multiplicación
/ División
^,** Potenciación
div División entera
mod Módulo de la división (residuo)

Por ejemplo, la división entera se escribe así: 13 div 4 = 3

y el residuo de la división: 13 mod 4 = 1

36
Universidad Santo Tomás

5.3.2 REGLAS DE PRIORIDAD

Las expresiones aritméticas que tienen dos o más operandos requieren reglas de prioridad
para determinar cuál de las operaciones debe realizarse primero y así evitar que a una
misma expresión se le den diferentes interpretaciones y, por ende, diferentes resultados.

Las normas generales que se deben tener en cuenta a la hora de interpretar expresiones
matemáticas son:

• Las operaciones que se encuentran encerradas en paréntesis se evalúan primero.

• Si existe anidación de paréntesis (paréntesis dentro de paréntesis), se evalúan de adentro


hacia fuera.

• El orden de prioridad en operaciones aritméticas es el siguiente:

- Operador exponencial (^,**)


- Operadores (*, /)
- Operadores div y mod
- Operadores (+, -)

• Una expresión aritmética siempre se evalúa respetando el orden de prioridad y de iz-


quierda a derecha; si en ella se encuentran dos o más operadores con el mismo orden de
prioridad, se evalúan también de izquierda a derecha.

Ejemplo 1.

5 + (10 mod 2)
5+0
5

5*3^2+5
5*9+5
45 + 5
50

37
Guía Lógica de Programación

5.3.3 EXPRESIONES LÓGICAS (BOOLEANAS)


Este tipo de expresiones siempre arrojará un resultado que únicamente puede tomar un valor
de verdadero (true) o falso (false). Este tipo de expresiones también se denominan expresio-
nes booleanas, en honor al matemático británico George Boole, creador del Álgebra de
Boole.

Las expresiones lógicas se construyen como una combinación de constantes, variables y


otras expresiones lógicas.

• Operadores de relación

OPERADOR SIGNIFICADO

< Menor que


> Mayor que
= Igual que
<= Menor o igual que
>= Mayor o igual que
<>, != Diferente de (No igual a)

Ejemplo 2.

RESULTADO
6 < 12 El resultado es verdadero
15 != 5*3 El resultado es falso

• Operadores lógicos

Los operadores lógicos o booleanos básicos son not (no), and (y) y or (o); y las definiciones
de sus operaciones se resumen en las tablas conocidas como tablas de verdad.

38
Universidad Santo Tomás

P Q PyQ PoQ no P
V V V V F
V F F V F
F V F V V
F F F F V

Ejemplo 3.

EXPRESIÓN EVALUACIÓN RESULTADO


(5>3) y (4>7) VyF F
(6>5) o (7>9) VoF V

5.3.4 ASIGNACIÓN DE VALORES A VARIABLES Y CONSTANTES


Las variables y constantes guardan datos; el modo de darles valores se denomina asigna-
ción.

La asignación a una variable se hace con el símbolo ← (flecha apuntando a la izquierda).

La asignación a una constante se hace con el símbolo = (igual).

Ejemplo 4.

RESULTADO
X ← 10 10
X ←X+5 10 + 5 = 15
X ← X + 20 15 + 20 = 35

39
Guía Lógica de Programación

5.4 EJERCICIOS

• Resuelva las siguientes expresiones:

1. 7 * 10 mod 3 * 4 + 9

2. –4 * 7 + 2 ^ 3 / 4 – 5

3. 5 * (4 + 6) / (2 + 1)

4. 10 – 40 div 5

• Deduzca el valor lógico de las siguientes expresiones:

5. (2>1) y (4=4)

6. (5<=7) o (2>4)

7. no (7>12)

8. no ((9!=7) o no (3=3))

• Calcule el valor final de la variable total:

9. X←3
Y←2
total ← X ^ Y - Y

10. Y ← (4 * 5 ^ 2) / (3 ^ 3 – 4 * 5 + 3)
X←Y*4
total ← X / Y

• Escriba las siguientes expresiones algebraicas como expresiones algorítmicas:

11. z
x = ———————
a
————— -1
b+c

40
Universidad Santo Tomás

12.
b
————
b+c
a= —————
x+y
————
z

5.5 BIBLIOGRAFÍA

BECERRA SANTAMARÍA, César. Algoritmos: conceptos básicos. 3 ra ed. Bogotá:


Kimpres, 1996. pp. 29, 41.

JOYANES AGUILAR, Luis. Fundamentos de programación. 2da ed. Madrid: McGraw-


Hill, 1996, p. 13.

LÓPEZ ROMAN, Leobardo. Programación estructurada: enfoque algorítmico. 2da ed.


México: Alfaomega, 2002. p. 36.

41
Guia
6. Guía No.No
3
Análisis y diseño
de algoritmos 3.
6.1 OBJETIVOS

• Conocer e identificar los pasos y etapas a seguir para el desarrollo de algoritmos.


• Conocer, identificar y utilizar los métodos para representación de algoritmos.

6.2 COMPETENCIAS A DESARROLLAR

• Conocimiento y habilidad para diseñar e implementar algoritmos.


• Dominio de los mecanismos de representación que soportan la implementación de
algoritmos.
• Conocimientos y habilidades básicas para la investigación.
• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.

6.3 FUNDAMENTOS TEÓRICOS


El desarrollo de programas que solucionan problemas por computador está soportado ínte-
gramente por el flujo básico de procesamiento en la máquina. La solución a cualquier proble-
ma implica una entrada de información a través de los dispositivos periféricos de entrada
Guía Lógica de Programación

(teclado, mouse), seguida por el procesamiento en la unidad central de procesos (CPU) y la


obtención de resultados que se envían a los dispositivos periféricos de salida (pantalla, impre-
sora).

Un programa de computador se diseña para dar solución a un problema y contiene las


instrucciones que se deben ejecutar en orden lógico para lograr el procesamiento correcto
de la información. El punto de partida para la construcción de programas implica la realiza-
ción de etapas que conduzcan al desarrollo satisfactorio de éstos. Un algoritmo se define
como la secuencia de instrucciones que permite dar solución a un problema.

6.3.1 ETAPAS BÁSICAS PARA EL DISEÑO DE PROGRAMAS

• Análisis del problema


• Definición: se caracteriza por tener un enunciado claro que especifique clara-
mente qué se pretende resolver y los resultados que se deben obtener.
• Análisis: se deben buscar los datos de entrada y salida (resultados), y definir el
proceso a realizar para convertir los datos entrada en datos de salida.
• Para manipular los datos de entrada, de salida y los datos que se obtengan en etapas
intermedias del proceso, es necesaria la creación de variables y/o constantes.

• Diseño del algoritmo


Representación. El diseño de un algoritmo implica la representación de las instrucciones en
orden lógico; para esto, se utilizan herramientas de diagramación con figuras o con texto.

Para la representación de un algoritmo se puede utilizar un diagrama de flujo o pseudocódigo.


Cada paso que se puede representar con el diagrama, se encuentra estandarizado de modo
que en la implementación de diferentes algoritmos siempre se utilizan de la misma forma.

1. Prueba del algoritmo.


Corresponde a la verificación en forma manual del resultado de la ejecución de los pasos
que lo conforman. El resultado de esta verificación puede ser la validación del algoritmo
o la detección de errores, en el mismo. En caso de detectar errores se debe proceder a
modificar el diseño del algoritmo hasta lograr la validación total de éste.

44
Universidad Santo Tomás

• Implementación del programa

- Codificación del algoritmo en un programa. En la codificación se transcribe el algoritmo


a un lenguaje de programación reconocido por el computador. De acuerdo con el lengua-
je de promoción seleccionado, la transcripción debe seguir las normas de sintaxis que
éste tenga.

- Prueba del programa. La prueba de un programa implica su compilación y ejecución en el


computador.

- En la compilación se detectan los posibles errores sintácticos de codificación. En caso de


detectar errores, se debe modificar el código implementado hasta lograr su validación
total. El resultado final de la compilación es la creación de un archivo que contiene la
imagen ejecutable del programa.

- En la ejecución se detectan los posibles errores lógicos. En caso de detectar errores en


los valores resultantes, es necesario modificar el código implementado hasta lograr los
resultados correctos.

- Documentación del programa. Se hace la descripción de los diferentes componentes de


un programa para que éste pueda ser utilizado por los usuarios sin necesidad de recurrir
directamente al creador. La documentación debe incluir el enunciado del problema, la
metodología empleada para la solución, la declaración de variables y constantes de entra-
da y salida, el código fuente y un instructivo para la ejecución del programa.

Desde el punto de vista sistémico, los elementos básicos que se tienen en cuenta para resol-
ver problemas son: entrada de información, procesamiento y salida de resultados.

Proceso

Entrada Salida

45
Guía Lógica de Programación

En el momento de realizar la etapa de análisis, se deben encontrar los datos de entrada, datos
de salida y herramientas. Éstos se deben plantear en términos que luego puedan ser aprove-
chados para el diseño de los algoritmos y programas así:

- La selección de los datos de entrada y de salida debe llevar al programador a la


definición detallada de cada uno de éstos, en términos de los tipos de datos sopor-
tados por los lenguajes de programación.

- Los pasos que se siguen para solucionar problemas se deben llevar a un nivel de
detalle que permita la generación de expresiones aritméticas y lógicas representa-
tivas de cada uno de éstos, junto con un orden de ejecución.

6.3.2 FORMATO DE RESPRESENTACIÓN


PARA LA ETAPA DE ANÁLISIS
A continuación se muestra un formato que agrupa los diferentes elementos para el análisis
de problemas.

46
Universidad Santo Tomás

DEFINICIÓN Y ANÁLISIS DE PROBLEMA

Definición del problema:


____________________________________________________________________________________
__________________________________________________________________

Análisis del problema:

1. Datos entrada:
____________________________________________________________________________________
____________________________________________________________________________________
_________________________________________________________

Variables a emplear:

Descripción de variable: nombre de variable


_________________________ : _________
_________________________ : _________
_________________________ : _________

2. Datos de salida:
____________________________________________________________________________________
____________________________________________________________________________________
_________________________________________________________

Variables a emplear:

Descripción de variable: nombre de variable


_________________________ : _________
_________________________ : _________
_________________________ : _________

3. Proceso:

Descripción del proceso:


____________________________________________________________________________________
____________________________________________________________________________________
_________________________________________________________

Expresiones aritméticas y/o lógicas:


____________________________________
____________________________________
____________________________________

Variables a emplear:
_________________________ : _________
_________________________ : _________
_________________________ : _________

47
Guía Lógica de Programación

Con los resultados obtenidos en el análisis se procede al diseño del algoritmo representando
cada una de las instrucciones y expresiones mediante un diagrama de flujo o pseudocódigo.
El orden lógico en que se representan los pasos está regido por la programación lineal y
estructurada.

6.3.3 PRINCIPIOS BÁSICOS DE LA PROGRAMACIÓN


LINEAL Y ESTRUCTURADA

• Ejecución de instrucciones en orden secuencial.

• Ejecución de las instrucciones de acuerdo con los resultados obtenidos de la ejecución de


sentencias de control.

• Las sentencias de control se han estandarizado en dos tipos de estructuras: estructura


selectiva, estructura repetitiva.

• La estructura selectiva condiciona la ejecución de instrucciones a la validación de una


condición.

• La estructura repetitiva permite la ejecución de una instrucción o un grupo de instruccio-


nes varias veces. El número de repeticiones se condiciona a la validación de una condi-
ción.

6.3.4 HERRAMIENTAS PARA LA REPRESENTACIÓN


DE ALGORITMOS

• Diagrama de flujo
El diagrama de flujo permite la representación de los pasos a seguir para dar solución a un
problema mediante símbolos que implican operaciones específicas y líneas (flechas) que las
conectan para indicar el flujo de ejecución de las instrucciones.

Los símbolos más utilizados para la representación mediante diagrama de flujo se muestran
a continuación:

48
Universidad Santo Tomás

El paralelogramo representa El rombo representa las

las operaciones de entrada/ operaciones lógicas o de

salida comparación

El paralelogramo representa las El círculo representa


operaciones de entrada por teclado conectores

El rectángulo representa las La flecha representa


operaciones de proceso líneas de flujo

Para la representación de un algoritmo mediante un diagrama de flujo, se requiere unir con


líneas de flujo los símbolos que representan los pasos a seguir. En la adición de cada símbolo
se deben tener en cuenta las siguientes características de implementación:

- Las líneas de flujo se representan con flechas que permiten conectar dos símbolos
de un diagrama. El sentido de la flecha indica el orden en que se deben ejecutar las
instrucciones.

- Las operaciones de entrada, salida y proceso se conectan con el resto del diagrama con
una línea de flujo de entrada y una línea de flujo de salida.

- Las operaciones lógicas o de comparación se conectan con el resto del diagrama me-
diante una línea de flujo de entrada y dos líneas de flujo de salida. Cada línea de salida
debe etiquetarse con el posible resultado de la validación (verdadero/falso). El orden de
ejecución de las instrucciones depende directamente de la validación de la condición. Si
el resultado es afirmativo, se sigue la ejecución de las instrucciones conectadas a través
de la línea etiquetada con verdadero. En caso contrario, se sigue por la línea etiquetada
con falso.

49
Guía Lógica de Programación

• Los conectores se unen con el resto del diagrama con una línea de flujo. Ésta puede
corresponder con líneas de entrada o de salida.

• Al inicio del algoritmo se implementa un conector con el texto “inicio” en su interior y se


une con la primera instrucción mediante una línea de flujo de salida.

• Al final del algoritmo se implementa un conector con el texto “fin” en su interior y se une
con la última instrucción mediante una línea de flujo de entrada.

• Cuando se requiera implementar conectores en sitios intermedios del diagrama, un conector


unido a través de una línea de entrada representa la finalización de un conjunto de ins-
trucciones. Un conector unido a través de una línea de salida representa el inicio de un
conjunto de instrucciones.

• Pseudocódigo
El pseudocódigo permite la representación de los pasos a seguir para dar solución a un
problema mediante palabras clave (en español) que implican operaciones específicas.

Las palabras clave más utilizadas para la representación mediante pseudocódigo son las
siguientes:

Inicio mientras - fin_mientras

fin repetir - mientras

escribir para - hasta - fin_para

leer caso - fin_caso

si - entonces - fin_si var

si - entonces - sino - fin_si

50
Universidad Santo Tomás

En la representación de un algoritmo con pseudocódigo se encuentran las siguientes carac-


terísticas:

• Se emplea lenguaje natural, donde cada oración corresponde a una operación específica.

• Se utiliza la identación para resaltar conjuntos de operaciones.

• Un algoritmo siempre comienza con la palabra clave “inicio” y termina con la palabra
clave “fin”.

• Las operaciones de entrada comienzan con la palabra clave “leer” seguida por la variable
o variables en que se pretende almacenar.

• Las operaciones de salida comienzan con la palabra clave “escribir” seguida por el men-
saje que se pretende mostrar. Para mostrar texto, el mensaje se coloca entre comillas.
Para mostrar valores almacenados en variables, se coloca el nombre de la variable sin
comillas.

• Las estructuras de control inician con la palabra clave correspondiente a la estructura a


utilizar y terminan con la palabra fin y el nombre de la estructura utilizada. En el caso de
la estructura “repetir”, se termina con la palabra clave “mientras”.

Ejemplo 1. Calcular el volumen de un cilindro.

• Definición del problema


Calcular el volumen de un cilindro.

• Análisis del problema


Datos de entrada:
El enunciado no plantea directamente los datos de entrada, pero el programador puede dedu-
cirlos a partir del resultado esperado. Para calcular el volumen de un cilindro se requieren los
siguientes datos: radio de la base, altura.

Los valores del radio de la base y la altura pueden ser definidos mediante instrucciones de
asignación o con instrucciones de entrada/salida.

51
Guía Lógica de Programación

Variables a emplear:

Radio de la base: r

Altura: h

Datos de salida:

Volúmen del cilindro

Variables a emplear:

Volúmen: v

• Proceso

Descripción:
Para convertir el radio de la base y la altura en el volumen del cilindro, es necesario aplicar
la ecuación matemática que permite el cálculo de éste.

Expresiones ariméticas y lógicas:


v= π * r2 * h

Variables a emplear:
No se requieren variables adicionales

Constantes a emplear:
Número pi: 3,1416

• Diseño de algoritmo
Para diseñar el algoritmo se debe seleccionar la herrramienta de representación, ya sea
diagrama de flujo o pesudocódigo. A continuación se presenta la solución mediante las dos
herramientas.

52
Universidad Santo Tomás

Inicio
variables
real: r, h, pi, v
constantes
real: pi=3.1416
escribir (“Algoritmo para calcular el
volumen de un cilindro.”)
escribir (“Ingrese radio:”)
leer(r)
escribir(“Ingrese altura”)
leer(h)
v=pi*r^2*h
escribir(“el volumen del cilindro es:”,v)
fin

• Prueba del algoritmo

Para probar el algoritmo se crea una tabla con todas las variables que se utilizan en el
algoritmo y se inicia su ejecución manual paso tras paso, llevando un registro detallado en la
tabla de los valores almacenados en las variables.

Como prueba de funcionamiento, realice el seguimiento asignando nuevos valores a las variables
de entrada, empleando la siguiente tabla, como ejemplo, para encontrar los resultados.

r h pi v

53
Guía Lógica de Programación

Ejemplo 2. Con base en el cambio actual de divisas en la bolsa, calcule el valor


equivalente en pesos, euros y yenes de una cantidad en dólares.

• Definición del problema


Con base en un el cambio actual de divisas en la bolsa, calcule el valor equivalente en pesos,
euros y yenes de una cantidad en dólares.

• Análisis del problema


Datos de entrada:
Cantidad en dólares, tasa de cambio de dólares a pesos, tasa de cambio de dólares a euros,
tasa de cambio de dólares a yenes.

El valor de la cantidad en dólares puede ser definido mediante instrucciones de asignación o


con instrucciones de entrada/salida.

Variables a emplear:

Cantidad en dólares: d

Datos de salida:

Equivalente en pesos, equivalente en euros, equivalente en yenes.

Variables a emplear:

Equivalente en pesos: p
Equivalente en euros: e
Equivalente en yenes: y

• Proceso

Descripción:
Para convertir una cantidad en dólares a sus equivalentes en pesos, euros y yenes se requie-
re para cada caso la aplicación del factor de conversión que permita el cambio entre las
diferentes unidades monetarias.

54
Universidad Santo Tomás

Expresiones aritméticas para convertir dólares a pesos:

Para convertir de dólares a euros el factor de conversión es:

Para convertir de dólares a yenes el factor de conversión es:

Expresiones algorítmicas:

fcdap=1/ppd p= d * fcdap
fcdae=1/epd e= d * fcdae
fcday=1/ypd y= d * fcday

Variables a emplear:

Tasa de cambio pesos por dólar: ppd


Tasa de cambio euros por dólar: epd
Tasa de cambio yenes por dólar: ypd
Factor de conversión de dólares a pesos: fcdap
Factor de conversión de dólares a euros: fcdae
Factor de conversión de dólares a yenes: fcday

55
Guía Lógica de Programación

• Diseño del algoritmo


A continuación se presenta la solución mediante un diagrama de flujo y un pseudocódigo:

56
Universidad Santo Tomás

Inicio
variables
real: d, ppd, epd, ypd, fcdap, fcdae, fcday, p, e, y
escribir (“Algoritmo para calcular el valor equivalente en pesos, euros y yenes
de una cantidad en dólares”)
escribir (“Ingrese el valor en dólares”)
leer(d)
escribir(“Ingrese tasa de cambio de pesos por dólar”)
leer(ppd)
escribir(“Ingrese tasa de cambio de euros por dólar”)
leer(epd)
escribir(“Ingrese tasa de cambio de yenes por dólar”)
leer(ypd)
fcdap = 1/ppd
fcdae = 1/epd
fcday = 1/ypd
p = d*fcdap
e = d*fcdae
y = d*fcday
escribir (“Equivalente en pesos es” ,p, “Equivalente en euros es”,e, “Equivalente en yenes es”, y)
fin

• Prueba del algoritmo

Como prueba de funcionamiento, realice el seguimiento asignando nuevos valores a las va-
riables de entrada, empleando la siguiente tabla, como ejemplo, para encontrar los resulta-
dos.

d ppd epd ypd fcdap fcdae fcday p e y

6.4 PREGUNTAS
• ¿Qué es una variable?
• ¿Qué es una constante?
• ¿Cómo se almacena información en una variable?
• ¿Cuál es la diferencia entre variable y constante?

57
Guía Lógica de Programación

• Describa los pasos a seguir para dar solución a un problema mediante algoritmos.
• ¿Cómo se realiza la representación de algoritmos mediante diagramas rectangulares o
N-S (Nassi-Schneiderman)?

6.5 EJERCICIOS
1. Un empleado trabaja 48 horas en la semana a razón de $55.000/ hora, el porcentaje de
retención en la fuente es del 12,5% del salario bruto. Escriba un pseudocódigo para
calcular el salario bruto semanal, la retención en la fuente y el salario neto del trabajador.

2. La resistencia combinada de tres resistores conectados en paralelo, como se muestra en


la figura, se obtiene con la ecuación:

Resistencia combinada = 1
——————————
1 + 2 + 3
—— —— ——
R1 R2 R3

Escriba un pseudocódigo para calcular y desplegar la resistencia combinada cuando los


tres resistores R1 = 1000, R2 = 1000, R3 = 1000 están conectadas en paralelo. El
programa debe producir la salida “ la resistencia combinada, en ohmios, es xxxx”, donde
las x serán remplazadas por el valor de la resistencia combinada calculada con el progra-
ma.

3. El área de una elipse se obtiene con la fórmula del área= pi*a*b. Utilizando esta fórmula
escriba un pseudocódigo para calcular el área de una elipse que tiene un eje menor de 2.5
pulgadas y un eje mayor de 6.4 pulgadas.

4. Escriba un pseudocódigo para calcular y desplegar el valor de la pendiente de una línea


que conecta dos puntos cuyas coordenadas son: (3,7) y (8,12). La pendiente entre los
puntos con las coordenadas (x1,y1) y (x2,y2) está dada por la ecuación pendiente = (y2-
y1) / (x2-x1). El programa debe producir la salida “la pendiente es xxxx”, donde las x
serán remplazadas por el valor calculado por el programa.

5. Se tiene la siguiente información de un empleado: código del empleado, nombres, número


de horas trabajadas al mes, valor hora trabajada y porcentaje de retención en la fuente.

Haga un algoritmo que muestre: código, nombres, salario bruto y salario neto.

58
Universidad Santo Tomás

6. Haga un pseudocódigo que determine si los puntos (X1, Y1) y (X2, Y2) pertenecen a la
recta definida por los parámetros A, B y C. La ecuación de la recta es: AX + BY + C =0.

6.6 BIBLIOGRAFÍA

JOYANES AGUILAR, Luis. Fundamentos de programación. 2da ed. Madrid: McGraw-


Hill, 1996. p. 1.

JOYANES AGUILAR, Luis. Programación en C: metodología, estructura de datos y


objetos. Madrid: McGraw-Hill, 2001. p. 2.

LÓPEZ ROMAN, Leobardo. Programación estructurada: enfoque algorítmico. 2da ed.


Mexico: Alfaomega, 2002. p. 47.

OVIEDO REGINO, Efraín. Lógica de programación. Bogotá: ECOE Ediciones, 2002. p. 37.

59
7. Guía No. 4.
Fundamentos Guia No
del lenguaje
de programación C++
4.
7.1 OBJETIVOS
• Conocer, identificar y utilizar la estructura básica del lenguaje de programación
C++.
• Aplicar los componentes principales de C++ para la construcción de programas.

7.2 COMPETENCIAS A DESARROLLAR


• Conocimiento de los principios, estructura y sintaxis básica del lenguaje de progra-
mación C++.
• Dominio del lenguaje que soporta la implementación de programas.
• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.

7.3 FUNDAMENTOS TEÓRICOS

7.3.1 ESTRUCTURA GENERAL DE UN PROGRAMA EN C++


Un programa en C++ se compone de instrucciones de asignación, estructuras y de una o
más funciones. Una función en C++ es un grupo de instrucciones que realiza una o más
acciones.
Guía Lógica de Programación

Cuando se inicia un programa, el código fuente contiene varias instrucciones, que indican
dónde inicia, cuál es su proceso y dónde termina. Los programas en C++ tienen una instruc-
ción de inicio llamada int main(), seguido de { } que determina el cuerpo de la función y
encierran las instrucciones que componen el programa; estos corchetes determinan qué
hace el programa. Cada instrucción dentro de la función debe terminar con (;), excepto las
estructuras.

La primera línea del programa es el archivo de cabecera iostream, llamada así porque se
coloca en la parte superior del programa utilizando #include, indicando que este directorio
contiene archivos del compilador de C++.

En particular, el archivo iostream.h proporciona las descripciones istream y ostream, las


cuales contienen las definiciones y operaciones de entrada y salida de datos.

#include <iostream.h> archivo de cabecera


Tipo de valor devuelto
Nombre de la función

int main( ) Lista vacía de argumentos

{ Inicio del programa


Cuerpo de la función Las instrucciones del programa
Instrucciones del
programa return 0;
} Fin del programa

7.3.2 ELEMENTOS BÁSICOS DE C++

• Sintaxis
En un lenguaje de programación, la sintaxis es el conjunto de reglas para formular instruccio-
nes gramaticales correctas en el lenguaje; tiene una forma apropiada específica para el
compilador, de tal forma que acepte las instrucciones y no genere ningún error.

62
Universidad Santo Tomás

• Instrucción cout
Este objeto, cuyo nombre se deriva de Console OUTput, es de salida y envía datos introdu-
cidos en él hacia el dispositivo estándar de salida y se utilizan los operadores de inserción <<.
Se utiliza de la siguiente manera:

# include <iostream.h>
int main()
{
cout<<“ Hola mundo!”<<endl;
return 0;
}

Además de desplegar los resultados correctos, es importante que un programa haga atrac-
tivo el despliegue de resultados. El formato de los números desplegados por cout se pueden
manipular con los controladores de ancho de campo. Los manipuladores más comunes son:

setw(x) , setpresicion(x), setfill(x).

• Instrucción cin
Esta instrucción es utilizada cuando se quieren asignar valores a las variables por medio del
teclado; se debe utilizar el operador de extracción >>. Se utiliza de la siguiente manera:

# include <iostream.h>
int main()
{
int numero;
cout<<“Digite un número”<<endl;
cin>>numero;
return 0;
}

63
Guía Lógica de Programación

• Comentarios
Son observaciones para explicar algo dentro de un programa, y son muy útiles para aclarar
de qué trata el programa completo, qué hace y qué debe lograr un grupo específico de
instrucciones o qué pretende que haga una línea en C++; se presentan en dos tipos de línea
o de bloque. La computadora ignora todos los comentarios.

# include <iostream.h>
int main()
{
// esta linea imprime en pantalla comentario de línea
cout<<“Hola mundo!”<<endl;
return 0;
}

# include <iostream.h>
int main()
{
/* este programa es para mostrar comentario en bloque
como se comporta la instrucción cout*/
cout<<“Hola mundo!”<<endl;
return 0;
}

• Variables
Las variables son utilizadas para guardar información; el tipo de variable depende del valor
que se guarda (un número entero, una letra o un número de punto flotante), e indica la clase
de valor que puede guardar. En el siguiente cuadro se relacionan el tipo de variable y su
tamaño:

64
Universidad Santo Tomás

TIPO VALOR MÍNIMO VALOR MÁXIMO TAMAÑO DE PALABRA

char -128 128 1 byte

int -32.768 32.767 2 bytes

long -2.1474.83.648 2.1474.83.648 4 bytes

float -3,4 X 10–38 3,4 X 1038 16 bytes

double -1.7 x 10-308 -1.7 x 10308 32 bytes

• Declaración de variables
Instrucciones de declaración: son utilizadas para dar nombre a una variable y especificar el
tipo de dato que se puede guardar. Una instrucción para declarar tiene el siguiente formato:

tipo nombre_de_la_variable;

tipo de dato válido en c++ nombre de variable seleccionada por el usuario

El nombre de la variable puede ser una letra, un nombre nemotécnico o una letra precedida
de un número. Las variables no pueden ser caracteres especiales ni comenzar con un núme-
ro. Las variables válidas pueden ser:

Ejemplo

int salario;
float promedio;
char edad;
long A;
float B1;
char nombre_alumno;

65
Guía Lógica de Programación

Los valores asignados a una variable siempre se harán de derecha a izquierda, por ejemplo:

A=5;
Edad= 18;
F= 3.6;

• Operadores

Operadores aritméticos simples


Los operadores aritméticos pertenecen a dos grupos: unos aceptan operandos de tipo numé-
rico; otros aceptan operandos de tipo lógico.

• +
Suma.
• -
Resta.
• *
Multiplicación.
• /
División. Asigna la parte entera a una variable si está declarada con int (entera); si
es declarada con float (real), asignará el valor completo de la división.
• % Asignación del módulo o residuo de la división.

Operadores de incremento y decremento


Como incrementar es una operación común en los programas, se proporcionan estos opera-
dores de incremento o decremento, que es un doble signo de más (++) o de menos (--)

• ++ Incremento.
• -- Decremento.

66
Universidad Santo Tomás

# include <iostream.h>
int main()
{
int cuenta =100;
cout<<“El valor inicial de cuenta es”<< cuenta<<endl;
cuenta++; se indica al programa que incremente en 1 el valor a cuenta.
cout<<“El nuevo valor de cuenta es”<< cuenta <<endl;
cuenta--; se indica al programa que decremente en 1 el valor a cuenta.
cout<<“El nuevo valor de cuenta es”<< cuenta <<endl;
return 0;
}

La instrucción cuenta++; es equivalente a cuenta=cuenta + 1;

Operadores aritméticos compuestos


Estos operadores surgen de la combinación de un operador aritmético con el operador de
asignación =. La asignación se realiza de la siguiente manera:

• += Asigna suma
• -= Asigna diferencia (resta)
• *= Asigna producto
• / = Asigna división
• %= Asigna módulo (residuo)

Operadores relacionales
• < Menor que;
• <= Menor o igual;
• > Mayor que;
• >= Mayor o igual;
• == Igual que;
• != Diferente de.

67
Guía Lógica de Programación

Operadores lógicos
• && y lógico
• || o lógico

Caracteres de escape
\a sonido, alerta; \b retroceso; \t tabulador horizontal; \v tabulador vertical

\n avance de línea, \f avance de página; \r retroceso de carro; \” comillas dobles

\’ comilla simple; \0 carácter nulo.

7.3.3 PALABRAS RESERVADAS DEL C++

Son aquellas palabras clave que toma el programa con un significado especial para el
compilador, y que no pueden usarse como variables.

auto break case cath char overloat


double else enum exterm do delete
const class continue class float for
friend goto if inline int long
new operator private protected public static
register return short signed sizeof struc
switch template this throw try typedef
unio unisigned virtual void volatile while

7.3.4 ESTRUCTURAS DE CONTROL SELECTIVO

• Decisión lógica
if (condición)
{
< instrucciones del camino verdadero>
}
else
{
< instrucciones del camino falso>
}

68
Universidad Santo Tomás

• Selección múltiple

switch(variable de control)
{
case 1:
< instrucciones del caso 1 >
break;
case 2:
< instrucciones del caso 2 >
break;
case 3:
< instrucciones del caso 3 >
break;
:
:
case n:
< instrucciones del caso n >
break;
default:
< instrucciones de casos no válidos >
}

7.3.5 ESTRUCTURAS DE CONTROL REPETITIVO


• Estructura mientras

while (condición)
{
< instrucciones a repetir>
}

• Estructura repetir-mientras

do
{
< instrucciones a repetir>
} while (condición);

69
Guía Lógica de Programación

• Estructura para

for (<contador = valor inicial>; <condición>; <incremento>)


{
< instrucciones a repetir>
}

Las estructuras de control selectivo y repetitivo se trabajan a profundidad en las guías 6 y 7.

7.4 PREGUNTAS

1. ¿Cuál es el proceso que se sigue en la compilación? Descríbalo

2. ¿Qué es código objeto?

3. ¿Qué es código fuente?

4. ¿Qué es código ejecutable?

5. ¿Cuáles son los pasos que se realizan para la construcción de un programa? Descríbalos
detalladamente.

6. Además de los tipos de datos presentados en la guía, ¿qué otros tipos se pueden utilizar
en C++, qué capacidad tienen y en qué rango trabajan?

7.5 EJERCICIOS
Realice los siguientes programas en C++

1. Intercambiar los valores de dos variables

2. Calcular la superficie lateral de un cilindro recto.

70
Universidad Santo Tomás

3. Calcular el precio total de un artículo dado su precio y el lVA(%) respectivo.

4. Calcular la hipotenusa de un triángulo rectángulo conociendo sus catetos.

5. Dado un número en centímetros calcular su equivalencia en pulgadas.

6. Leer tres notas y calcular y escribir la definitiva sabiendo que la primera nota vale el
30%, la segunda 30% y la tercera 40%.

7.6 BIBLIOGRAFÍA

BRONSON GARY, J. C++ para ingenieros y ciencias. México: Thomson, 2000. p. 33.

DEITEL H, M. Como programar en C/C++.2da ed. México:Prentice Hall, 1995. p. 23.

JAMSA, Kris. Aprenda y practique C++. 3ra ed. México: Oxford, 1999. pp. 12, 30.

JOYANES AGUILAR, Luis. Programación en C: metodología, estructura de datos y


objetos. Madrid: McGraw-Hill, 2001. p. 72.

JOYANES AGUILAR, Luis. Programación en C++: algoritmos, estructura de datos y


objetos. Madrid: McGraw-Hill, 2000. p. 37.

71
Guia
8. Guía No.No
5
Funciones de
biblioteca 9.
8.1 OBJETIVO
• Reconocer y utilizar las principales funciones de biblioteca estándar ANSI C++.

8.2 COMPETENCIAS A DESARROLLAR


• Conocimiento de los principios, estructura y sintaxis básica de la programación
modular.
• Dominio del lenguaje que soporta la implementación de funciones y procedimien-
tos.
• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.

8.3 FUNDAMENTOS TEÓRICOS


El lenguaje C++, proporciona una biblioteca estándar de funciones, que contiene una colec-
ción de funciones para llevar a cabo cálculos matemáticos, manipulación de cadenas, funcio-
nes de entrada y salida, etc.
Guía Lógica de Programación

Tomado de Ayuda Visual C++. Net versión Académica

Cada biblioteca estándar tiene su archivo de cabecera correspondiente, que contiene los
prototipos de función de todas las funciones de dicha biblioteca y las definiciones de varios
tipos de datos y de constantes requeridas para dichas funciones.

El compilador utiliza los prototipos de funciones para verificar las llamadas de función; esto
es, un prototipo de función le indica al compilador el tipo de dato regresado por la función, el
número de parámetros que la función espera recibir, los tipos de datos de dichos parámetros
y el orden en que se deben enviar los datos. En caso de presentarse errores, mostrará los
mensajes de error correspondientes.

Archivo de cabecera de la
Explicación
biblioteca estándar

<conio.h> Contiene varias funciones usadas al operar funciones de entrada y


salida de consola

<iostream.h> Contiene los flujos de entrada y salida básicos de C++

<stdio.h> Contiene prototipos para las funciones de biblioteca de entrada y


salida estándar y la información que éstas utilizan

<math.h> Contiene prototipos para funciones matemáticas de biblioteca

<stdlib.h> Contiene prototipos de función para las conversiones de números a


textos y de textos a números, para la asignación de memoria, para
números aleatorios y otras funciones de utilería.

<signal.h> Contiene prototipos de función y macros para manejar varias con-


diciones que pudieran ocurrir durante la ejecución de un programa.

74
Universidad Santo Tomás

8.3.1 FUNCIONES MATEMÁTICAS DE BIBLIOTECA


Las funciones matemáticas de biblioteca le permiten al programador ejecutar ciertos cálcu-
los matemáticos comunes. Las funciones se utilizan normalmente en un programa escri-
biendo el nombre de la función y entre paréntesis el argumento o argumentos de la función.
Por ejemplo:

cout<”raiz cuadrada igual a: “<<sqrt(900.0);

Calcula e imprime la raíz cuadrada de 900.0. Cuando en este enunciado se ejecuta la


función matemática sqrt( ), calcula la raíz cuadrada del número contenido entre paréntesis.
Todas las funciones de la biblioteca de matemáticas devuelven el tipo de datos double.

Los argumentos de las funciones pueden ser constantes, variables o expresiones.

Si c1=13.0, d=3.0 y f=4.0, entonces el enunciado:

cout<<”respuesta ”<<sqrt(c1+d*f);

Calcula e imprime la raíz cuadrada de 13.0 + 3.0 * 4.0 = 25.0, es decir 5.0.

Función
Descripción Ejemplo
Matemática

sqrt Raíz cuadrada de x sqrt(900.0) es 30.0


exp Función exponencial ex exp(1.0) es 2.718282
log(x) Logaritmo natural de x log(2.718282) es 1
log10(x) Logaritmo en base 10 de x log10(1.0) es 0.0
fabs(x) Valor absoluto de x fabs(-3.0)=3.0
ceil(x) Redondea a x al entero más pequeño ceil(9.2)=10
que no sea menor que x
floor(x) Redondea a x al entero floor(9.2)=9.0
más grande no mayor que x
pow(x,y) x elevado a la potencia de y (xy) pow(2,7)=128
fmod(x,y) Residuo de x/y,de punto flotante fmod (13.657,2.333)= 1.992
sin(x) Seno trigonométrico de x, en radianes sin(0.0)=0.0
cos(x) Coseno trigonométrico de x, en radianes cos(0.0)=1.0
tan(x) Tangente trigonométrica de x, en radianes tan(0.0)=0.0

75
Guía Lógica de Programación

Ejemplo 1. Hacer un programa para hallar el área de un triángulo cuyos vértices en


coordenadas polares son: (0;0), (6;20º) y (9;50º).

La fórmula del área de un triángulo cuyos vértices en coordenadas polares son (0;0), (r1;q1)
y (r2;q2) es área = ½ r1 r2 sen(q2-q1)

//programa para hallar el área de un triángulo


//Dados los vértices en el eje polar (0;0), (6;20º) y (9;50º)
#include<iostream.h>
#include<math.h>
int main()
{
double r1=6.0, r2=9.0, a1=20, a2=50, area=0.0,a1c, a2c;
a1c=a1*3.14159/180;
a2c=a2*3.14159/180;
area=0.5*r1*r2*sin(a2c-a1c);
cout<<“ÁREA DEL TRIÁNGULO “<<area;
return 0;
}

Las instrucciones de preprocesador incluyen los archivos de cabecera iostream.h, y math.h,


por los prototipos de función que se incluyen en el programa.

Ejemplo 2. Utilizar funciones que generen números aleatorios en C++.

//programa que imprime números aleatorios


#include<iostream.h>
#include<stdlib.h>
#include<time.h>

int main()
{
int n=0,i;
srand(time(NULL));
cout<<“Número Aleatorio del 1 al 100: ”<<endl;
cout<<rand()%100+1;
return 0;
}

76
Universidad Santo Tomás

La función rand() genera un entero entre 0 y RAND_MAX, que es por lo menos el número
32767, que es el valor máximo de un entero de dos bytes (16 bits).

Si se desea simular un rango de valores del 0 al 5, utilizamos el operador de módulo(%) en


conjunto con rand, así:

i=rand()%6;

al 6 se le llama factor de dimensionamiento.

La función rand() genera números pseudoaleatorios, esto significa que cada vez que el pro-
grama se ejecute genera la misma secuencia.

La función srand() genera en el programa números diferentes cada vez que se corra, toma
un argumento entero (semilla), utilizando el reloj del computador. Ambos funciones pertene-
cen a la biblioteca <stdlib.h> y por necesitar el reloj también se requiere la librería <time.h>.

La función time() retorna el tiempo en segundos a partir de un valor inicial.

8.4 PREGUNTAS
Para las librerías iomanip.h, stdio.h, math.h, conio.h, stdlib.h, conteste:

1. ¿Cuáles son las funciones de la librería?, ¿qué objetivo tiene cada una de ellas?, ¿cuál
es su sintaxis?

8.5 EJERCICIOS
1. Haga un programa que permita jugar craps.

2. Haga un programa que permita jugar cara y sello.

3. Haga un programa que permita jugar baloto.

4. Haga un programa que permita calcular las operaciones trigonométricas básicas.

5. Haga una calculadora que le permita sumar, restar, multiplicar, dividir, xy, raíz cuadrada,
convertir grados en radianes entre dos números.

77
Guía Lógica de Programación

6. Haga un programa que permita realizar las siguientes operaciones: redondeo, parte
entera, valor absoluto, logaritmo natural y logaritmo base 10.

8.6 BIBLIOGRAFÍA
BECERRA SANTAMARÍA, César. 380 principales funciones del Turbo C++. 3ra ed.
Bogotá: Kimpres, 1997. pp. 2, 18, 26, 58, 76.

78
Guia
9. Guía No.No
6
Estructura de
control selectivo 6.
9.1 OBJETIVOS
• Aprender las características principales del control selectivo para la toma de deci-
siones.
• Consolidar el manejo de las estructuras selectivas para el diseño de algoritmos y
programas.

9.2 COMPETENCIAS A DESARROLLAR


• Conocimiento de los principios, estructura y sintaxis básica del control selectivo.
• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.

9.3 FUNDAMENTOS TEÓRICOS

9.3.1 CONTROL SELECTIVO


La programación estructurada se refiere a las técnicas para desarrollar software que au-
mentan considerablemente la productividad, reduciendo el elevado tiempo requerido para
escribir, verificar, depurar y mantener los programas. La programación estructurada utiliza
un número limitado de estructuras de control que minimiza la complejidad de los programas
y, por consiguiente, reduce los errores.
Guía Lógica de Programación

La estructura de decisión lógica o selectiva permite controlar la ejecución de aquellas accio-


nes que requieran de la validación de ciertas condiciones para su realización. De acuerdo
con las condiciones, se determina si las acciones se ejecutan o no.

La estructura de decisión selectiva está formada por una condición de tipo lógico de la que
salen dos posibles caminos de acuerdo con el resultado de validación: si el resultado de la condi-
ción es verdadero, se realiza un conjunto de acciones o instrucciones; si el resultado de la condi-
ción es falso, se realiza otro conjunto de acciones o instrucciones. En ocasiones, se pueden omitir
las acciones a realizar de uno de los posibles caminos, pero en ningún caso los dos.

El formato general de la estructura en pseudocódigo es:

si (condición) entonces
< instrucciones del camino verdadero>
sino
< instrucciones del camino falso>
fin_si

donde:
La condición representa la pregunta que se desea validar.
Las instrucciones del camino verdadero representan el conjunto de instrucciones que se reali-
zan cuando el resultado de la condición es verdadero.
Las instrucciones del camino falso representan el conjunto de instrucciones que se realizan
cuando el resultado de la condición es falso.

El formato general de la estructura en C++ es:

if (condición)
{
< instrucciones del camino verdadero>
}
else
{
< instrucciones del camino falso>
}

80
Universidad Santo Tomás

La estructura if - else funciona de la siguiente forma:

if: cuando el programa que se está ejecutando se encuentra con esta estructura, y si su
condición es verdadera, ejecutan las instrucciones del camino verdadero.

else: se ejecuta cuando la condición de la estructura if es falsa, realizando todas las instruc-
ciones que siguen al else.

9.3.2 CASOS ESPECIALES DEL CONTROL SELECTIVO

Existen algunas situaciones particulares cuando se utiliza la estructura de control selectivo


en lenguaje C++:

• Si como resultado de la validación únicamente se debe ejecutar una instrucción, se tiene


la posibilidad de encerrar la instrucción entre corchetes ({}) o simplemente omitirlos.
Cuando se encierran las instrucciones entre corchetes, C++ asume que el alcance de
ejecución comprende todas las instrucciones agrupadas entre el corchete izquierdo ({) y
el corchete derecho (}). Cuando no se encierran las instrucciones entre corchetes, el
C++ asume automáticamente que el alcance de ejecución solamente afecta a la siguiente
instrucción.

El formato especial de la estructura en C++ que permite esto es:

if (condición)
< instrucción del camino verdadero>
else
< instrucción del camino falso>

81
Guía Lógica de Programación

• Cuando sólo se necesita realizar acciones para un camino, se adecua la condición de tal
forma que al obtener resultado de la condición verdadero, se ejecute el conjunto de ins-
trucciones del camino verdadero así:

En pseudocódigo:

si (condición) entonces
< instrucciones del camino verdadero>
fin_si

En lenguaje C++:

if (condición)
{
< instrucciones del camino verdadero>
}

Ejemplo 1. Digitar una calificación y clasificarla. El resultado por encima de 60


aprobará;en caso contrario, reprobará.

#include <iostream.h>

int main()
{
int calificacion;
cout<<“digite el su calificación”<<endl;
cin>>calificacion;
if (calificación >=60)
{
cout<<“Felicitaciones aprobaste!”<<endl;
cout<<“Tu calificación es ”<< calificacion<<endl;
}
else
{
cout<<“Lo siento, reprobaste. Debes trabajar más duro”<<endl;
cout<<“Tu calificación es”<< calificacion<<endl;
}
return 0;
}

82
Universidad Santo Tomás

9.3.3 CARACTERÍSTICAS DE LOS CONDICIONALES


Existen dos tipos de condiciones lógicas que se pueden utilizar en control selectivo: simple y
compuesta.

• Cuando se habla de condición lógica simple se hace referencia a aquella que usa
solamente un conector relacional para formular la pregunta.
• Condición lógica compuesta se refiere aquella que agrupa varias preguntas de tipo
simple unidas mediante conectores lógicos.

Dentro de estas condiciones se deben tener en cuenta los siguientes operadores:

• Operadores relacionales.
• Operadores lógicos.

Para trabajar las estructuras selectivas es necesario estudiar la forma de utilización de estos
operadores, explicados en la guía 2.

Ejemplo 2. Realizar un programa donde se evalúe un valor dado y se determine la


cantidad de cifras que tiene (1, 2, 3, 4 o más).

83
Guía Lógica de Programación

#include <iostream.h>

int main()
{
int numero;
cout<<“Digite el número a clasificar”<<endl;
cin>>numero;
if(numero >=0 && numero <10)
{
cout<<“El número digitado es de una cifra”;
}
else
if(numero>=10 && numero <100)
{
cout<<“El número digitado es de dos cifras”;
}
else
if(numero>=100 && numero <1000)
{
cout<<“El número digitado es de tres cifras”;
}
else
if(numero>=1000 && numero <10000)
{
cout<<“El número digitado es de cuatro cifras”;
}
else
if(numero<0)
{
cout<<“No se analizan números negativos”;
}
else
{
cout<<“el número es de más de cuatro cifras”;
return 0;
}
}

Cuando la expresión es compleja y se tiene un operador lógico and (&& en C++), las dos
condiciones deben ser verdaderas para que la expresión sea verdadera; cuando se tiene un
operador lógico or (|| en C++), basta con que una de las dos condiciones sea verdadera para
que la expresión sea verdadera.

84
Universidad Santo Tomás

Ejemplo 3. Clasificar un conjunto de tornillos defectuosos de acuerdo con la codifi-


cación del defecto encontrado. Se debe contabilizar cada tornillo defectuoso para
determinar cuántos hay.

Los códigos por defecto se encuentran en la tabla siguiente:

Defecto Código del defecto

Temple 3405, 5432

Revenido 2514, 1240

Recocido 1100, 3456

# include <iostream.h>

int main()
{
int codigo, cont=0, cont1=0, cont2=0, cont3=0;
cout<<“Digite el número de código del defecto”;
cin>>codigo;
if (codigo ==3405 || codigo ==5432)
{
cout<<“Defecto estructural por proceso de templado”;
}
else
if(codigo ==2514 || codigo== 1240)
{
cout<<“Defecto estructural por proceso de revenido”;
}
else
if(codigo ==1100 || codigo==3456)
{
cout<<“Defecto estructural por proceso de recocido”;
}
else
{
cout<<“Defecto no identificado”;
}
return 0;
}

85
Guía Lógica de Programación

9.3.4 ESTRUCTURAS SELECTIVAS ANIDADAS


En algunas ocasiones se requiere implementar control selectivo para validar múltiples condi-
ciones en forma independiente (usando condiciones lógicas simples). Esto se puede lograr
mediante la implementación de una serie de estructuras de control selectivo agrupadas una
dentro de otra (en escalera o anidamiento).

Las estructuras selectivas anidadas funcionan de la siguiente forma:

Cuando el programa que se está ejecutando se encuentra con esta estructura, se valida la
condición. Si el resultado es verdadero, se entra a evaluar la siguiente condición y así suce-
sivamente.

Ejemplo 4. En el siguiente ejemplo se ejecutará la instrucción_1 si la condición 1, 2 y 3


son verdaderas; de lo contrario, se ejecutará la instrucción_2. La forma general de la
instrucción es:

if(condición 1)
{
if(condición 2)
{
if(condición 3)
{
instrucción_1;
}
}
}
else
{
instrucción_2;
}

Ejemplo 5. Basándose en el año de fabricación y el peso de un automóvil, indicar la


categoría a la que pertenece y la tarifa de registro de acuerdo con la siguiente tabla.

Año modelo Peso Categoría de peso Tarifa de registro

1970 o anterior Menos de 2.700 lbs 1 $ 16.50

2.700 lbs a 3.800 lbs 2 $ 25.20

1971 a 1979 Menos de 2.700 lbs 3 $ 32.10

2.700 lbs a 3.800 lbs 4 $ 33.52

1980 o posterior Menos de 3.500 lbs 5 $ 36.52

3.500 lbs o más 6 $ 40.20

86
Universidad Santo Tomás

# include <iostream.h>

int main()
{
int modelo, peso;
cout<<“Digite el modelo”<<endl;
cin>>modelo;
cout<<“Digite el peso”<<endl;
cin>>peso;
if(modelo<=1970)
{
if (peso <2700)
{
cout<<“Categoría 1 y tarifa de pago $ 16.50”<<endl;
}
else
{
if(peso>=2700 && peso<=3800)
{
cout<<“Categoría 2 y tarifa de pago $ 25.20”<<endl;
}
else
{
cout<<“Categoría no identificada”<<endl;
}
}
}
if(modelo>1970 && modelo<=1979)
{
if (peso <2.700 )
{
cout<<“Categoría 3 y tarifa de pago $ 32.10”<<endl;
}
else
{
if(peso>=2700 && peso<=3800)
{
cout<<“Categoría 4 y tarifa de pago $ 33.52”<<endl;
}
else
{
cout<<“Categoría no identificada”<<endl;
}
}
}
if(modelo>1980)
{
if (peso<3500)
{
cout<<“Categoría 5 y tarifa de pago $ 36.52”<<endl;
}
else
{
cout<<“Categoría 6 y tarifa de pago $ 40.20”<<endl;
}
}
return 0;
}

87
Guía Lógica de Programación

9.3.5 ESTRUCTURA DE SELECCIÓN MÚLTIPLE


Esta estructura permite seleccionar una opción dentro de un conjunto de posibles opciones,
con base en el valor almacenado en una variable de control. Es una estructura selectiva
múltiple donde, de acuerdo con el valor que tenga la variable de control, se realiza un conjun-
to de instrucciones una sola vez.

El formato general de la estructura en pseudocódigo es:

casos de (variable de control)


caso 1:
< instrucciones del caso 1 >
caso 2:
< instrucciones del caso 2 >
caso 3:
< instrucciones del caso 3 >
:
:
caso n:
< instrucciones del caso n >

otros casos:
< instrucciones de casos no válidos >
fin_casos

donde:

La variable de control representa la variable en que se almacena el valor de la opción


seleccionada.

Las instrucciones del caso 1 representan el conjunto de instrucciones que se realizan


cuando el valor almacenado en la variable de control sea 1.

Las instrucciones del caso n representan el conjunto de instrucciones que se realizan


cuando el valor almacenado en la variable de control sea n.

Las instrucciones de casos no válidos representa el conjunto de instrucciones que se


realizan cuando el valor almacenado en la variable de control no corresponda a alguno de
los casos evaluados previamente.

88
Universidad Santo Tomás

El formato general de la estructura en C++ es:

switch(variable de control)

{
case 1:
< instrucciones del caso 1 >
break;
case 2:
< instrucciones del caso 2 >
break;
case 3:
< instrucciones del caso 3 >
break;
:
:
case n:
< instrucciones del caso n >
break;
default:
< instrucciones de casos no válidos >
}

Cuando el programa que se está ejecutando se encuentra con esta estructura, se valida la
variable de control para determinar el conjunto de instrucciones que se ejecutan. De acuerdo
con el valor almacenado en la variable de control, únicamente se ejecutan las instrucciones
del caso rotulado con ese valor. Si el valor almacenado en la variable no coincide con ningu-
no de los casos rotulados, se ejecutan las instrucciones de casos no válidos.

Ejemplo 6. Con base en el resultado de una evaluación en letras, realice la clasifica-


ción de la nota de acuerdo con la siguiente tabla.

Nota Clasificación

E Excelente

A Aceptable

B Bueno

R Horrible

89
Guía Lógica de Programación

# include <iostream.h>

int main()
{
char nota;
cout<<“Digite la nota”<<endl;
cin>>nota;
switch(nota)
{
case ‘E’ :
cout<<“Felicitaciones, su nota es excelente”;
break;
case ‘A’ :
cout<<“No está mal, su nota es aceptable”;
break;
case ‘B’:
cout<<“Bueno, pasó la nota”;
break;
case ‘R’:
cout<<“Tu nota es horrible”;
break;
default:
cout<<“lo siento, esta nota no está clasificada”<<endl;
}
return 0;
}

9.4 PREGUNTAS

1. ¿Qué es una decisión o condición?

2. ¿Cuándo se utiliza una decisión sencilla y cuándo una compuesta?

3. ¿Cuándo se debe utilizar la estructura swich?

4. ¿Qué diferencia hay entre la estructura if y la switch?

5. ¿Cuándo es necesario encerrar las instrucciones del camino verdadero entre corchetes
({})?

90
Universidad Santo Tomás

9.5 EJERCICIOS

1. Realice un programa que acepte dos números reales y un código de selección; si el


código es uno, sume los dos números; si el código es 2, los números deberán ser multipli-
cados; si el código es 3, los números deberán ser divididos, de lo contrario los números
deberán ser restados.

2. Teniendo como datos de entrada valores para los coeficientes a, b, c y aplicando la

ecuación cuadrática F(x) = , calcule las raíces teniendo en cuenta todos los
posibles casos para la ecuación.

3. Una temperatura en grados centígrados(C) se puede convertir a su equivalente en


Fahrenheit (F) con la formula:

F= 9/5C + 32

Desarrolle un programa que permita realizar conversiones de temperatura entre grados


Fahrenheit, Celsius, Kelvin y Rankine. Primero tiene que preguntar qué tipo de grado
quiere convertir y luego calcular e imprimir su equivalencia en Celsius, Fahrenheit, Kelvin
y Rankine, según sea el caso.

4. En un año no bisiesto febrero tiene 28 días, enero, marzo, mayo, julio, agosto, octubre y
diciembre tienen 31 días y los demás meses tiene 30 días, realice un programa que indi-
que si el año digitado es bisiesto o no. El programa debe validar si ingresa un mes o día
erróneo, se debe desplegar un mensaje indicando lo anterior.

5. El cuadrante desde el cual se ubica una línea dibujada desde el origen está determinado
por el ángulo que la línea forma en el eje positivo de x en la siguiente forma:

Ángulo en el eje positivo de X Cuadrante


Entre 0 y 90 grados I
Entre 90 y 180 grados II
Entre 180 y 270 grados III
Entre 270 y 360 grados IV

Utilizando esta información, escriba un programa en C++ que acepte el ángulo de línea
como dato de entrada por el usuario y que despliegue en cuadrante apropiado conforme

91
Guía Lógica de Programación

a los datos. Si el ángulo es exactamente 0, 90, 180, 270 ó 360, la línea correspondiente no
se ubica en ningún cuadrante, sino en un eje)

6. En el juego del 21, el valor de las cartas del 2 al 10 es el que tienen impreso, sin importar
de qué palo sean. Las cartas personajes (sota, reina y rey) valen 10 y un as se cuenta
como 1 u 11, dependiendo de la suma de todas las cartas de una mano. El as se cuenta
como 11 sólo si el valor total de todas las cartas en una mano no excede a 21; de otra
manera se cuenta como 1. Utilizando esta información, escriba un programa en C++ que
acepte tres valores de carta como datos de entrada (1 corresponde al as, 2 corresponde
a un 2 y así sucesivamente), calcule todo el valor total de la mano y muestre el valor de
las tres cartas con un valor impreso.

9.6 BIBLIOGRAFÍA

BECERRA SANTAMARÍA, César. Algoritmos:conceptos básicos. 3 ra ed. Bogotá:


Kimpres, 1996. p. 49.

BRONSON GARY, J. C++ para ingenieros y ciencias. México: Thomson, 2000. p. 177.

DEITEL H., M. Cómo programar en C/C++. 2da ed. México: Prentice Hall, 1995. p. 55.

JAMSA, Kris. Aprenda y practique C++. 3ra ed. México: Oxford, 1999. p. 70.

JOYANES AGUILAR, Luis. Fundamentos de programación. 2da ed. Madrid: McGraw-


Hill, 1996.p. 95.

JOYANES AGUILAR, Luis. Programación en C: metodología, estructura de datos y


objetos. Madrid: McGraw-Hill, 2001. p.142.

JOYANES AGUILAR, Luis. Programación en C++: algoritmos, estructura de datos y


objetos. Madrid: McGraw-Hill. 2000. p. 85.

LÓPEZ ROMAN, Leobardo. Programación estructurada enfoque algorítmico. 2da ed.


México: Alfaomega, 2002. p. 75.

OVIEDO REGINO, Efraín. Lógica de programación. Bogotá: ECOE Ediciones, 2002. p. 67.

92
10. Guia No7
Guía No.
Estructuras de
control repetitivo 7.

10.1 OBJETIVOS

• Aprender las características principales del control repetitivo para realización de


ciclos.
• Consolidar el manejo de las estructuras repetitivas para el diseño de algoritmos y
programas.

10.2 COMPETENCIAS A DESARROLLAR

• Conocimiento de los principios, estructura y sintaxis básica del control repetitivo.


• Capacidad para el trabajo en equipo.
• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.
Guía Lógica de Programación

10.3 FUNDAMENTOS TEÓRICOS

10.3.1 CONTROL REPETITIVO

Un tipo importante de operación es aquella que permite la realización del mismo proceso una
y otra vez un número finito de veces o realizar el proceso mientras que cumple una condi-
ción especial; este concepto describe las estructura de repetición, cuya secuencia de ins-
trucciones se conoce como bucle o ciclo.

Para elaborar una sección repetitiva de código, se requiere la presencia de una estructura de
control que delimite la sección de código a repetir y controle su ejecución.

Existen tres estructuras de control repetitivo:

• Estructura mientras
• Estructura repetir – mientras
• Estructura para

10.3.2 ESTRUCTURA REPETITIVA MIENTRAS

Permite la ejecución de un conjunto de instrucciones cero o más veces, de acuerdo con la


validación de una condición.

El formato general de la estructura en pseudocódigo es:

mientras (condición)

< instrucciones a repetir>

fin_mientras

donde:

La condición representa la pregunta que se desea validar.

Las instrucciones a repetir representan el conjunto de instrucciones que se realizan


cuando el resultado de la condición es verdadero.

94
Universidad Santo Tomás

El formato general de la estructura en C++ es:

while (condición)
{
< instrucciones a repetir>
}

La estructura trabaja de la siguiente forma:

Cuando el programa que se está ejecutando se encuentra con esta estructura, se evalúa su
condición: si el resultado de la condición es verdadero, se ejecuta el conjunto de instruccio-
nes a repetir y automáticamente se regresa a evaluar la condición; si el resultado de la
condición es falsa, se salta al final de la estructura (omitiendo las instrucciones a repetir) y se
continúa con las instrucciones que vienen después del ciclo.

En la implementación de ciclos en un algoritmo se pueden encontrar dos formas diferentes


de utilización de la estructura de control repetitivo:

• Control cuantitativo. Es utilizado cuando se conoce el número de veces que debe repe-
tirse un ciclo, antes de iniciar la estructura repetitiva. El número de iteraciones o cantidad
de repeticiones puede ser un valor constante o una variable a la que se asigna un valor
antes de iniciar el ciclo. La condición que controla la estructura repetitiva evalúa la can-
tidad de repeticiones comparándola con un valor límite (ejemplo 1).

• Control cualitativo. Es utilizado cuando no se conoce el número de veces que debe


repetirse un ciclo. En este caso, la decisión de repetir el ciclo es independiente de la
cantidad de repeticiones. La condición depende directamente del usuario, el cual decide
cuándo terminar con el proceso repetitivo sin importar cuantas iteraciones se hayan efec-
tuado (ejemplo 2).

Ejemplo 1. Realice la suma de 100 números digitados e imprima su promedio.

El proceso se repite mientras la cantidad de números ingresados sea menor a 100, de lo


contrario se sale del ciclo y continúa la instrucción inmediatamente siguiente.

95
Guía Lógica de Programación

#include <iostream.h>

int main()
{
int numero, promedio, suma, cont;
suma=0;
cont=0;
while(cont < 100)
{
cout<<“digite el número”<<endl;
cin>>numero;
suma=suma+número;
cont=cont+1;
}
promedio=suma/100;
cout<<“el promedio de los números es”<<promedio<<endl;
return 0;
}

Ejemplo 2. Digitar números que sean mayor a cero, sumarlos e imprimir su promedio.

El proceso se repite mientras los números digitados sean mayores a cero; de lo contrario, se
sale del ciclo y continúa la instrucción inmediatamente siguiente.

#include <iostream.h>

int main()
{
int numero, promedio, suma=0, cont=0;
cout<<“digite el número”<<endl;
cin>>numero;
while(numero >= 0)
{
suma=suma+numero;
cont=cont+1;
cout<<“digite el número”<<endl;
cin>>numero;
}
if(con>0)
{
promedio=suma/con;
cout<<“el promedio de los números es”<<promedio<<endl;
else
cout<<“No existen datos” <<endl;
}
return 0;
}

96
Universidad Santo Tomás

10.3.3 ESTRUCTURA REPETITIVA REPETIR - MIENTRAS

El propósito de esta estructura es ejecutar un conjunto de instrucciones al menos una vez sin
importar la condición, y luego repetir las instrucciones mientras que el resultado de la condi-
ción sea verdadero.

El formato general de la estructura en pseudocódigo es:

repetir
< instrucciones a repetir>
mientras (condición)

donde:

Las instrucciones a repetir representa el conjunto de instrucciones que se realizan al


menos una vez y que luego se repiten de acuerdo con el resultado de la condición.

La condición representa la pregunta que se desea validar para determinar si hay repeti-
ción.

El formato general de la estructura en C++ es:

do
{
< instrucciones a repetir>
} while (condición);

La estructura trabaja de la siguiente forma:

Cuando el programa que se está ejecutando se encuentra con esta estructura, se ejecuta el
conjunto de instrucciones a repetir y se entra a evaluar la condición: si el resultado de la
condición es verdadero, se repite la ejecución del conjunto de instrucciones; si el resultado de
la condición es falso, se salta al final de la estructura (omitiendo las instrucciones a repetir)
y se continúa con las instrucciones que vienen después del ciclo.

97
Guía Lógica de Programación

Ejemplo 3. Digitar números entre 1000 y 9999. Sumarlos y calcular el promedio y la


cantidad de números sumados.

El proceso se repite mientras los números digitados estén en el intervalo 1000-9999; de lo


contrario, se sale del ciclo y continúa la instrucción inmediatamente siguiente.

# include <iostream.h>

int main()
{
int num, promedio=0, suma=0,cont=0;
do
{
cout<<“digite el número”<<endl;
cin>>num;
if(num>1000 && num <9999)
{
suma=suma + número;
cont=cont+1;
}
} while(num>1000 && num<9999);
if(cont>0)
{
promedio=suma/cont;
cout<<“El promedio de los números es”<<promedio<<“y la
cantidad de números es”<<cont<<endl;
}
else
cout <<“No existen datos<< endl;
return 0;
}

10.3.4 ESTRUCTURA REPETITIVA PARA


Esta estructura permite que los programas repitan instrucciones un número específico de
veces; es decir, cuando se conoce el número de repeticiones del ciclo.

El formato general de la estructura en pseudocódigo es:

para <contador = valor inicial>, <condición>, <incremento>


< instrucciones a repetir>
fin_para

98
Universidad Santo Tomás

donde:

contador = valor inicial representa la inicialización de una variable que permite contar
la cantidad de repeticiones.

condición representa la pregunta que se desea validar. La condición evalúa si el conta-


dor alcanza un valor límite.

incremento representa el valor que se suma al contador cada vez que se termina una
repetición.

instrucciones a repetir representa el conjunto de instrucciones que se realizan cuando el


resultado de la condición es verdadero.

El formato general de la estructura en C++ es:

for (<contador = valor inicial>; <condición>; <incremento>)


{
< instrucciones a repetir>
}

La estructura trabaja de la siguiente forma:

Cuando el programa que se está ejecutando se encuentra con esta estructura, se asigna un
valor inicial a una variable que hace las veces de contador y se pasa a evaluar su condición:
si el contador no ha llegado a su valor límite, se ejecuta el conjunto de instrucciones a repetir
y automáticamente se salta a incrementar el contador y a evaluar la condición; si el contador
alcanza su valor límite, se salta al final de la estructura (omitiendo las instrucciones a repetir)
y continúa con las instrucciones que vienen después del ciclo. Para mayor claridad, observe
el siguiente ejemplo:

99
Guía Lógica de Programación

Inicialización Prueba Incremento


for(cuenta=1 ; cuenta<=10 ; cuenta++)
{
instrucción 1
instrucción 2 Se realiza el proceso mientras que la cuenta sea menor o igual a 10
:
:
}

Inicialización: asigna un valor 1 a la variable “cuenta” que se comporta como un contador.

Prueba: las instrucciones se repiten mientras que el contador “cuenta” sea menor o igual a
10.

Incremento: el contador “cuenta” se incrementará de uno en uno cada vez que se termina
una repetición. Este incremento se realiza automáticamente cada vez que se ejecuta una
etapa del ciclo.

Ejemplo 4. Imprimir los números de uno hasta 100 con incrementos de uno en uno.

# include <iostream.h>

int main()
{
int cuenta;
for(cuenta=1; cuenta<=100; cuenta++)
{
cout<<cuenta<<endl;
}
return 0;
}

Las tres estructuras de control repetitivo se pueden adaptar para control cuantitativo o cua-
litativo; desde el punto de vista de su sintaxis, es más adecuado utilizar las estructuras de
control mientras y repetir-mientras en el esquema cualitativo, y la estructura de control
para en el esquema cuantitativo.

100
Universidad Santo Tomás

10.3.5 ESTRUCTURAS REPETITIVAS ANIDADAS

En muchas ocasiones, es conveniente utilizar una estructura repetitiva dentro de otra; este
tipo de instrucciones se llaman estructuras repetitivas anidadas. La primera estructura repetitiva
se denomina ciclo externo y controla a la segunda estructura repetitiva, llamada ciclo inter-
no. Ésta a la vez controla a la tercera estructura repetitiva y así sucesivamente.

Ejemplo 5. Calcular la calificación promedio de cada estudiante de un grupo de 20


estudiantes.

# include <iostream.h>

int main()
{
int estudiantes, notas, nota, i, j, suma, promedio;
cout<<“digite el número de estudiantes”<<endl;
cin>>estudiantes;
cout<<“Digite el número de notas de cada estudiante”<<endl;
cin>>notas;
cout<<“La nota de cada estudiantes es…”<<endl;
for(i=1;i<=estudiantes;i++)
{
suma=0;
for(j=1;j<=notas;j++)
{
cout<<“Digite la nota”<<j<<“del estudiante”<<i<<endl;
cin>>nota;
suma=suma+nota;
}
promedio=suma/notas;
cout<<“El promedio de las notas del estudiante”<<i<<“es”
<< promedio<<endl;
}
return 0;
}

i está controlando la estructura repetitiva externa, la cual da el número de estudiantes, y j


controla la estructura repetitiva interna, la cual da las notas de cada estudiante.

En cada iteración de la estructura externa se producen todas las iteraciones de la estructura


interna.

101
Guía Lógica de Programación

10.4 PREGUNTAS

1. ¿Qué es un bucle?

2. ¿Qué características tiene la estructura for?


3. ¿Cuáles son las partes de la estructura for y qué función cumplen?
4. ¿Cuál es la finalidad de la estructura while y do while?

5. ¿En qué se diferencia la estructura while de la do while?


6. ¿En qué se diferencia la estructura while y for?
7. ¿Qué es un contador, cómo se utiliza para controlar la estructura repetitiva?

8. ¿Qué es un centinela y cómo se utiliza para controlar la estructura repetitiva?


9. ¿Qué es un acumulador y cómo se utiliza para realizar una sumatoria?
10. ¿Cómo se utiliza la estructura repetitiva para la realización de una multiplicatoria?

10.5 EJERCICIOS

Realice los siguientes programas en C++

1. Escribir un programa que imprima por pantalla las siguientes figuras:

a) * b) *
*** **
***** ***
******* ****
***** *****
*** ******
* *******

2. Realizar un programa que calcule la sumatoria de los primeros N números de la siguien-


te serie:

nn = 11 – 22 + 33 – 44 + 55 …nn

102
Universidad Santo Tomás

3. Calcular el máximo número positivo de una serie de números introducidos por teclado.
Se deben ingresar números hasta que introduzca uno negativo

4. Realizar un programa que lea una serie de caracteres por teclado y los clasifique en
vocales, consonantes, números y caracteres especiales.

5. Dado un número entero que representa un límite inferior, otro que representa un límite
superior y otro que será el rango, imprimir por pantalla las tablas de multiplicar desde el
límite inferior hasta el límite superior y comprendidas entre 1 y el rango.

Ejemplo:
Límite inferior: 3
Límite superior: 6
Rango: 4

3*1=3 4*1=4 5*1=5 6*1=6


3*2=6 4*2=8 5 * 2 = 10 6 * 2 = 12
3*3=9 4 * 3 = 12 5 * 3 = 15 6 * 3 = 18
3 * 4 = 12 4 * 4 = 16 5 * 4 = 20 6 * 4 = 24

6. Una serie aritmética está determinada por la siguiente fórmula:


a + (a + d) + (a + 2d) + (a + 3d) +….+ [(a + (n – 1)d)]
donde a es el primer término, d es la “diferencia común” y n el número de términos que
ha de sumarse. Utilizando está información escriba un programa en C++ que utilice una
instrucción repetitiva para desplegar cada elemento y determinar la suma de la serie
aritmética donde a = 1, d = 3 y n = 100. Asegúrese que el programa despliegue el valor
que se calculó.

7. Una serie geométrica está dada por la siguiente fórmula:


a+ ar + ar2+ ar3+ … + arn-1
donde a es el primer término, r es la “proporción común” y n es el número de términos en
la serie. Utilizando esta información escriba un programa en C++ que utilice una instruc-
ción repetitiva para desplegar cada elemento y que calcule la suma de la serie
geométrica donde a = 1, r = 0.5 y n = 10. Asegúrese que el programa despliegue el valor
que se calculó.

8. Una pelota de golf se lanza desde un aeroplano. La distancia, d, que la pelota recorre en
t segundos está dada por la ecuación d = (1/2) gt2, donde g es la aceleración producida

103
Guía Lógica de Programación

por la gravedad y es igual a 32 pies/seg2 (9.81 m/seg2). Utilizando esta información,


escriba y ejecute un programa en C++ que muestre la distancia que la pelota ha recorrido
al final de cada intervalo. La salida debe completar la siguiente tabla:

TIEMPO DISTANCIA EN EL DISTANCIA


INTERVALO ACTUAL TOTAL

0 0.0 0.0
1 16.0 16.0
: : :
: : :
10 : :

10.6 BIBLIOGRAFÍA
BECERRA SANTAMARÍA, César. Algoritmos: conceptos básicos. 3 ra ed. Bogotá:
Kimpres, 1996. p. 73.

BRONSON GARY, J. C++ para ingenieros y ciencias. México: Thomson, 2000. p. 227.

DEITEL H., M. Como programar en C/C++. 2da ed. México: Prentice Hall, 1995. p. 55,
101.

JAMSA, Kris. Aprenda y practique C++. 3ra ed. México: Oxford, 1999. p. 84.

JOYANES AGUILAR, Luis. Fundamentos de programación. 2da ed. Madrid: McGraw-


Hill, 1996. p. 95.

JOYANES AGUILAR, Luis. Programación en C: metodología, estructura de datos y


objetos. Madrid: McGraw-Hill, 2001. p. 168.

JOYANES AGUILAR, Luis. Programación en C++. algoritmos, estructura de datos y


objetos. Madrid: McGraw-Hill, 2000. p. 101.

LÓPEZ ROMAN, Leobardo. Programación estructurada enfoque algorítmico. 2da ed.


México: Alfaomega, 2002. p. 120, 158, 193.

OVIEDO REGINO, Efraín. Lógica de programación. Bogotá: ECOE Ediciones, 2002.


pp. 89, 149.

104
11. Guia No8
Guía No.
Funciones y
procedimientos 8.
11.1 OBJETIVO

• Conocer, identificar y utilizar la estructura que permite la creación de funciones y


procedimientos desarrollados por el programador.

11.2 COMPETENCIAS A DESARROLLAR

• Conocimiento de los principios, estructura y sintaxis básica de la programación


modular.
• Dominio del lenguaje que soporta la implementación de funciones y procedimien-
tos.
• Aplicación del principio “divide y vencerás” en la programación de computadores.
• Conocimiento y habilidad para diseñar e implementar soluciones de software ba-
sadas en la metodología de diseño descendente.
• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.
Guía Lógica de Programación

11.3 FUNDAMENTOS TEÓRICOS

11.3.1 FUNCIONES Y PROCEDIMIENTOS


En cualquier proceso de desarrollo de “software”, las funciones y procedimientos desempe-
ñan un rol crítico, pues permiten descomponer un programa en unidades lógicas o módulos.

Un procedimiento es una estructura de programa autónoma incluida en un programa. Los


procedimientos se escriben para resolver un problema particular; es decir, cumplen un pro-
pósito específico.

Las funciones, lo mismo que los procedimientos, también son estructuras de programa autó-
nomas diseñadas con un propósito único; sin embargo, a diferencia de los procedimientos,
todas “regresan” un valor único de un tipo particular.

El término subprograma en general se utiliza para referirse a una función o un procedimiento.

Antes de centrarse en los aspectos específicos de las funciones y procedimientos, se debe


considerar la forma en que facilitan la planificación de un programa. La programación mo-
dular es la aplicación del principio “divide y vencerás” a la programación de computadores.
Lo que tiene que ser “vencido” (o resuelto) es un problema particular y, para resolverlo, se
divide en subproblemas más pequeños y manejables. Cada subproblema, a su vez, se puede
subdividir aún más hasta que el programador los considere “elementales” o “suficientemente
simples”.

Los subprogramas pueden ser utilizados como bloques para construir la solución a los
subproblemas que conforman el problema particular.

La aplicación del principio “divide y vencerás” a la programación de computadores se cono-


ce normalmente como “metodología de diseño descendente”.

11.3.2 FUNCIONES
Una función es una estructura de programa que siempre regresa un valor único. Una fun-
ción puede recibir uno o más valores de entrada. Estos valores de entrada se llaman argu-
mentos o parámetros.

Valores Valor
Función
introducidos regresado

106
Universidad Santo Tomás

Las funciones pueden ser “llamadas” o “invocadas” desde un programa, función o procedi-
miento. Las funciones son invocadas nombrándolas y transfiriendo los parámetros apropia-
dos, si los hay. Siempre que se invoca una función, el programa principal, el procedimiento o
la función que la llamó se detiene. El control del programa se transfiere automáticamente a
la función, la cual, al completarse, regresa a la instrucción de donde fue invocada (su punto
de referencia).

En una función siempre se pueden distinguir dos elementos básicos. Utilizando la terminolo-
gía del American National Standards Institute (ANSI), estos elementos básicos reciben el
nombre de encabezado y cuerpo de función. El encabezado proporciona información gene-
ral sobre el nombre de la función, el tipo que regresa, el número de parámetros de entrada, si
los hay, el orden de estos parámetros, y sus tipos. El cuerpo se compone de declaraciones
locales y de otras instrucciones que ejecutan la tarea de la función.

Línea de
encabezado

Cuerpo
de función

El pseudocódigo correspondiente a una función es:

<tipo_de_dato> función
<nombre_función>(lista_de_parámetros_formales)
[ declaraciones locales ]
inicio
………………..
………………..
devolver (<expresión>)
fin_función

donde:

tipo_de_dato representa el tipo de dato correspondiente a lo que devuelve la función.

lista_de_parámetros_formales representa los parámetros que debe recibir la función.

declaraciones locales representa las variables que se requieren dentro de la función


para realizar la tarea de ésta.

107
Guía Lógica de Programación

La lista de parámetros formales está formada por una o más sublistas de parámetros de
la siguiente forma:

{E | S | E/S}<tipo_de_dato>:<nombre_de_parámetro_formal>…

Las llaves quieren decir que se toma sólo una entre las distintas opciones que aparecen
separadas por una barra.

El código en C++ correspondiente a una función es:

<tipo_de_dato> <nombre_función>(lista_de_parámetros_formales)
{
[ declaraciones locales ]
………………..
………………..
return <expresión>;
}

donde:

tipo de dato representa el tipo de dato correspondiente a lo que devuelve la función.

lista de parámetros formales representa los parámetros que debe recibir la función.

declaraciones locales representa las variables que se requieren dentro de la función


para realizar la tarea de ésta.

La lista de parámetros formales está formada por:

<tipo_de_dato> <nombre_de_parámetro>, <tipo_de_dato> <nombre_de_parámetro>,


11.3.3 PROCEDIMIENTOS
Los procedimientos son estructuras de programa autónomas que no tienen que devolver un
valor. La declaración de un procedimiento, para los lenguajes que lo requieren, es similar a la
de una función.

108
Universidad Santo Tomás

La declaración de un procedimiento expresada en pseudocódigo es:

procedimiento <nombre_procedimiento> [ (lista_de_parámetros_formales 1)]


[ declaraciones locales ]
inicio
……………..
……………..
……………..
fin_procedimiento

donde:

lista_de_parámetros_formales representa los parámetros que debe recibir la función y


está formada por una o más sublistas de parámetros de la siguiente forma:

{E | S | E/S}<tipo_de_dato>:<nombre_de_parámetro_formal>…

La declaración de un procedimiento expresada en código en C++ es:

void <nombre_función>(lista_de_parámetros_formales)
{
[ declaraciones locales ]
………………..
………………..
}

donde:

lista de parámetros formales representa los parámetros que debe recibir la función.

La lista de parámetros formales está formada por:

<tipo_de_dato> <nombre_de_parámetro>, <tipo_de_dato> <nombre_de_parámetro>,


109
Guía Lógica de Programación

11.3.4 ESTRUCTURA GENERAL DE UN ALGORITMO


El pseudocódigo representativo de un algoritmo que incluya funciones y procedimientos creados
por el usuario es:

algoritmo <nombre_algoritmo>
const
<nombre_de_constante 1> = valor
var
<nombre_del_tipo>:<nombre_de_variable>
inicio
<acción 1>
<acción 2>
llamar_a <nombre_de_procedimiento> (lista_de_parámetros_actuales)
// la llamada a la función ha de realizarse en una expresión
variable=(<nombre_de_función> (Iista_de_parámetros_actuales))
escribir(<nombre_de_función> (Iista_de_parámetros_actuales))
<acción N>
fin

procedimiento <nombre_procedimiento> [ (lista_de_parámetros_formales 1)]


[ declaraciones locales ]
inicio
……………..
……………..
……………..

fin_procedimiento
<tipo_de_dato> función <nombre_función>(lista_de_parámetros_formales)
[ declaraciones locales ]
inicio
………………
………………
devolver (<expresión>)

fin_función

110
Universidad Santo Tomás

El código en C++ correspondiente a un programa es:

#include<nombre_librería.h>
#include<nombre_librería.h>
<tipo_de_dato> <nombre_función>(lista_de_parámetros_formales)
{
[ declaraciones locales ]
………………..
………………..
return <expresión>;
}

<tipo_de_dato> <nombre_función>(lista_de_parámetros_formales)
{
[ declaraciones locales ]
………………..
………………..
return <expresión>;
}

int main()
{
[ declaraciones locales ]
<acción 1>
<acción 2>
<nombre_de_función> (lista_de_parámetros_actuales);
variable=(<nombre_de_función> (Iista_de_parámetros_actuales);
<acción N>
return 0;
}

Ejemplo 1. Elaborar una función que calcule la potencia de dos números enteros
junto con el programa que la invoque.

El pseudocódigo representativo del algoritmo es:

111
Guía Lógica de Programación

función potencia (E entero: x,y)


var:
entero: acumulado, i
inicio
acumulado = 1
para i=1,y,1 haga
acumulado = acumulado * x
fin_para
devolver (acumulado)
fin_función

Algoritmo principal
var:
entero: base,exponente,resultado
inicio
escribir (“Ingrese base: ”)
leer (base)
escribir (“Ingrese exponente: ”)
leer (exponente)
resultado=potencia (base,exponente)
escribir (“El resultado de la potencia es ”, resultado)
fin

El programa en lenguaje C++ es:

#include <iostream.h>
int potencia (int x, int y)
{
int acumulado, i;
acumulado = 1;
for( i=1;i<=y;i++)
{
acumulado = acumulado * x;
}
return acumulado;
}

int main()
{
int base,exponente,resultado;
cout <<“Ingrese base:”;
cin >> base;
cout <<“Ingrese exponente:”;
cin >> exponente;
resultado = potencia(base,exponente);
cout <<“El resultado de la potencia es” << resultado;
return 0;
}

112
Universidad Santo Tomás

Ejemplo 2. Elaborar un procedimiento que calcule la suma y el promedio de un con-


junto de n números junto con el programa que lo invoque.

El pseudocódigo representativo del algoritmo es:

procedimiento sumprom (E entero: n)


var:
entero: suma,prom
inicio
suma = 0
para i=1,n,1 haga
leer (num)
suma = suma + num
fin_para
prom= suma/n
escribir (“la suma de los”, n, “números es:”, suma)
escribir (“el promedio es:”, prom)
fin_procedimiento

Algoritmo principal
var:
entero: cn
inicio
escribir (“Ingrese cantidad de números: ”)
leer (cn)
sumprom (cn)
fin

El programa en lenguaje C++ es:

#include<iostream.h>
void sumprom (int n)
{
int suma,prom;
suma = 0;
for( i=1;i<=n;i++)
{
cin >> num;
suma = suma + num;
}
prom= suma/n;
cout << “la suma de los”, n, “números es:” << suma;
cout << “el promedio es:” << prom;
}

int main()
{
int cn;
cout << “Ingrese cantidad de números: ”;
cin >> cn;
sumprom (cn);
return 0;
}

113
Guía Lógica de Programación

11.4 PREGUNTAS
1. ¿Cuáles son los componentes de una función?

2. ¿Cuál es la diferencia entre una función y un procedimiento?

3. ¿Qué es prototipo de función?

4. ¿Cuál es la diferencia entre variables globales y variables locales?, ¿cuándo se deben


utilizar?

5. Explique cómo funciona el paso de parámetros por valor, apuntador y referencia.

6. Realice un cuadro comparativo de los diferentes tipos de paso de parámetros.

11.5 EJERCICIOS

Elabore un procedimiento junto con el programa que lo invoque para cada uno de los siguien-
tes problemas:

1. Determinar si un número es perfecto o no. Un número N es perfecto si la suma de


todos sus divisores, excepto por el mismo, da N.

2. Encontrar un término de la sucesión de Fibonacci. Calcular la suma de los primeros N


términos de la sucesión de Fibonacci.

3. Encontrar los coeficientes de los términos para un binomio de orden n (a+b)n

4. El volumen, v, y la superficie, s, de un cilindro están dados por la fórmulas v= pi* r2*l


y s = 2 pi* r*l, donde r es el radio del cilindro y l es la longitud. Utilizando estas fórmulas
escriba una función denominada volumen() y otra superficie() que acepten el radio y el
largo de un cilindro y que devuelva el volumen y la superficie respectivamente.

5. La viscosidad y la densidad de tres líquidos comunes se muestra a continuación:

114
Universidad Santo Tomás

LÍQUIDO Viscosidad Distancia


(libra-pie por seg/pie2) (slug/pie3)

Alcohol etílico 2.29 x 105 1.527


Alcohol metílico 1.17 x 105 1.53116.0
Alcohol propílico 4.01 x 105 1.556

Utilizando estos datos, escriba dos funciones denominadas Visc() y Den() que devuelvan la
viscosidad y la densidad de un líquido seleccionado.

11.6 BIBLIOGRAFÍA

BECERRA SANTAMARÍA, César. Algoritmos: conceptos básicos. 3 raed. Bogotá:


Kimpres, 1996. pp. 119, 137.

BRONSON GARY, J. C++ para ingenieros y ciencias. México: Thomson, 2000. p. 97.

DEITEL H., M. Cómo programar en C/C++.2da ed. México: Prentice Hall, 1995. p. 147.

JAMSA, Kris. Aprenda y practique C++. 3ra ed. México: Oxford, 1999. pp. 97, 114.

JOYANES AGUILAR, Luis. Fundamentos de programación. 2da ed. Madrid: McGraw-


Hill, 1996. p. 163.

JOYANES AGUILAR, Luis. Programación en C: metodología, estructura de datos y


objetos. Madrid: McGraw-Hill, 2001. p. 208.

JOYANES AGUILAR, Luis. Programación en C++: algoritmos, estructura de datos y


objetos. Madrid: McGraw-Hill, 2000. p.125.

LÓPEZ ROMAN, Leobardo. Programación estructurada: enfoque algorítmico.2da ed.


México: Alfaomega, 2002. p. 307.

OVIEDO REGINO, Efraín. Lógica de programación. Bogotá: ECOE Ediciones, 2002.p.


177.

115
12. Guia No
Guía No.9.
Datos de tipo
compuesto 9.
12.1 OBJETIVO
• Aprender los principios básicos sobre datos de tipo compuesto para el manejo de
arreglos unidimensionales y bidimensionales.

12.2 COMPETENCIAS A DESARROLLAR


• Conocimiento de la estructura y sintaxis de los arreglos unidimensionales y
bidimensionales.
• Dominio de los mecanismos de control y acceso para el manejo de arreglos
unidimensionales y bidimensionales.
• Capacidad para dar soluciones a problemas teórico-prácticos a partir de los cono-
cimientos teóricos de los arreglos unidimensionales y bidimensionales.

12.3 FUNDAMENTOS TEÓRICOS

12.3.1 ARREGLOS UNIDIMENSIONALES Y BIDIMENSIONALES


Todas las variables utilizadas hasta ahora tienen una característica común: en cada variable
sólo se puede almacenar un único valor a la vez. Este tipo de variable se denomina escalar.
Guía Lógica de Programación

En programación existe un tipo de dato llamado arreglo o vector que permite la creación de
variables para almacenar valores del mismo tipo, acceder a ellos y realizar operaciones.
Estas variables se clasifican, de acuerdo con el número de dimensiones en: unidimensional,
bidimensionales, tridimensionales, etc.

12.3.2 ARREGLOS UNIDIMENSIONALES

Un arreglo unidimensional es una lista de valores relacionados del mismo tipo que se almace-
na empleando un nombre único de grupo (un arreglo es simplemente una aplicación de una
lista en la que todos los elementos son del mismo tipo y cada elemento se almacena conse-
cutivamente).

En la lista mostrada a continuación, los datos registrados son números reales y se deben
declarar como tal; sin embargo, los elementos de la lista no se tienen que declarar por
separado, éstos se pueden declarar como una sola variable de tipo compuesto llamada arre-
glo.

TEMPERATURA
95,75
83,0
97,625
72,5
86,25

Para especificar que el arreglo temperatura tiene cinco valores individuales de tipo real, se
requiere la siguiente declaración: -float TEMPERATURA[5]-. Esta instrucción declaratoria
da el tipo de dato de los elementos del arreglo, el nombre del arreglo y el número de elemen-
tos que contiene:

Tipos-de-datos nombre-del-arreglo[número-de-elementos]

float TEMPERATURA[5];

118
Universidad Santo Tomás

Como los elementos del arreglo se almacenan en forma secuencial, se tiene acceso a cual-
quier elemento individual dando el nombre del arreglo y la posición del elemento llamada
valor del índice o subíndice del elemento. El primer elemento de un arreglo tiene como
subíndice el 0, el segundo el 1 y así sucesivamente.

Los arreglos se pueden inicializar desde la instrucción declaratoria:

int MAX[6]={ 9, 575, 830, 97, 625, 0};

0 1 2 3 4 5 subíndice del arreglo

Cuando se quiere tener acceso a un elemento del arreglo, se indica el nombre de la variable
junto con el índice de la posición así:

int n=1;

MAX[n]. El índice (en este caso n) permite el acceso al elemento de la posición, para el
ejemplo es 575. Si se nombra sólo n indica la posición del elemento, esto quiere decir que el
elemento 575 está en la posición 1.

Los arreglos unidimensionales son ejemplos de almacenamiento de información de tipo es-


tructurado. En un arreglo unidimensional, tal como un arreglo de números enteros, el arreglo
se compone de los valores individuales enteros, donde los enteros están relacionados por su
posición en la lista. Las variables indexadas permiten tener acceso a los valores en el arreglo
y modificarlos.

La forma de acceso a los elementos de un arreglo se trabaja mediante el uso de las estruc-
turas repetitivas. La repetición se controla con un contador que indica la posición del arreglo
a que se tiene acceso en cada etapa del ciclo.

Ejemplo 1. Realizar un programa que ingrese en un arreglo de tipo enteros números


enteros e imprima el arreglo bidimensional.

119
Guía Lógica de Programación

# include <iostream.h>

int main()
{
int tabla[10] ={0}, i;
for(i=0; i<10; i++)
{
cout<<“Digite la posición ”<< i <<“del arreglo= ”;
cin>>arreglo[i]; se indica que llene elemento por elemento
del arreglo
}
cout<<” los elementos del arreglo son..”<<endl;
for(i=0; i<10; i++)
{
cout<<arreglo[i]<<“”; se indica que imprima elemento por
elemento
}
return 0;
}

12.3.3 ARREGLOS BIDIMENSIONALES


Los arreglos bidimensionales, también llamadas tablas, se componen por datos organizados
en filas y columnas. El siguiente ejemplo corresponde a un arreglo bidimensional de núme-
ros enteros.

int VAL [3][3];


Columna 0 Columna1 Columna2

Fila 0 12 34 2

Fila 1 10 1 5 Int VAL [3][3]

Fila 2 40 7 0

Este arreglo consta de tres filas y tres columnas. Para reservar el espacio de almacena-
miento en memoria de esta tabla, se deben incluir los números de filas y de columnas en la
declaración del arreglo. La instrucción declaratoria muestra el tipo de datos de los elementos
de la tabla, el nombre de la tabla y el número de elementos de las filas y el de las columnas.

120
Universidad Santo Tomás

Tipos-de-dato nombre-de-la-tabla [número-de-elementos-de-la-fila][número-de-elementos-


de-la-columna]

int VAL[3][3],

Con el fin de localizar los elementos de un arreglo bidimensional, cada elemento queda
identificado por su posición (índices) en el arreglo. El término VAL[1][2] identifica de mane-
ra única la fila 1 y la columna 2, en la cual se encuentra el elemento 5.

Las tablas se pueden inicializar desde la instrucción declaratoria:

Int VAL[3][3]={{12,34,2}
{10,1, 5 }
{40, 7, 0} };

La inicialización de un arreglo bidimensional se hace siguiendo el orden de las filas. Primero


se inicializan los elementos de la primera fila, luego la segunda y así sucesivamente; es decir,
en la posición [0][0] del arreglo se almacena el primer elemento (12), en la posición [0][1]
del arreglo se almacena el segundo (34) y así sucesivamente para la primera fila. En la
posición [1][0] del arreglo, se almacena el cuarto elemento de la tabla, pero el primero de esa
fila (10); en la posición [1][1] del arreglo se almacena el quinto elemento de la tabla, pero el
segundo de la fila (1) y así sucesivamente para la segunda fila. Este mismo procedimiento se
realiza para las otras filas.

Las estructuras repetitivas anidadas son las más indicadas para manejar arreglos de tipo
bidimensional. En su construcción se implementa una estructura repetitiva que controla las
columnas dentro de otra estructura repetitiva que controla las filas. Cada paso a través de la
estructura repetitiva externa corresponde a una fila y la estructura interna corresponde a
una columna.

Ejemplo 2. Realizar un programa que ingrese en una tabla bidimensional de tipo


entero, números enteros y que la imprima.

121
Guía Lógica de Programación

# include <iostream.h>

int main()
{
int tabla[10] [10]={0,0}, I, j;
for(i=0; i<10; i++) indica que comenzará una nueva fila
{
for(j=0; j<10; j++) indica que comenzará una nueva columna
{
cout<<“Digite la posición”<< i<<“, ”<<j << “ = ”;
cin>>tabla[i] [j]; llena el dato de la fila i, columna j

} cierra el for de las columnas


} cierra el for de las filas
cout<<” Imprime la tabla “<<endl;
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
cout<< tabla[10] [10]<<“”;
}
cout<<endl; Permite empezar una nueva fila en
una línea nueva
}
return 0;
} cierra el programa principal

Los arreglos son sumamente útiles en cualquier aplicación que requiera almacenar y proce-
sar de múltiples datos del mismo tipo.

12.4 PREGUNTAS
1. ¿Por qué se utilizan diferentes subíndices en la creación de las matrices?

2. ¿Cómo podría llenarse una matriz de forma inversa?, ¿qué se debe tener en cuenta?
Realice el ejercicio de forma práctica.

3. ¿Qué se debe tener en cuenta para llenar una matriz por columnas?

4. ¿Cómo se debe construir un arreglo tridimensional o de más dimensiones y cómo se


manipula?

122
Universidad Santo Tomás

5. ¿Explique de forma práctica un ejercicio de la vida diaria en donde sea necesario


utilizar una matriz?

6. ¿Por qué es importante inicializar en cero los arreglos?

12.5 EJERCICIOS

1. Ingrese N números en un arreglo. Debe realizar un programa que evalúe si el número


formado en el arreglo es un capicúa o no. Ejemplo:

1 3 4 15 4 3 1 Número capicúa
0 1 2 3 4 5 6

2. Codifique un programa que desplace en N posiciones los elementos de un arreglo hacia la


izquierda o hacia la derecha. Ejemplo:

2 34 23 4 5 6 8

Si se desplazan los elementos del arreglo hacia la derecha dos posiciones, el arreglo quedará:

Primer giro a la derecha:

8 2 34 23 4 5 6

Segundo giro a la derecha:

6 8 2 34 23 4 5

3. Busque dentro de una matriz un número digitado por pantalla; si este número se encon-
tró, se debe remplazar por un cero, e imprimir la cantidad de veces que está el número;
si no se encontró, imprimir un mensaje indicando que no se encontró.

4. Realice una función que cree un vector V de tamaño N (N par), con números enteros sin
importar el orden en que se encuentran, generar dos subvectores V1 y V2, de forma tal
que en V1 se ubique la mitad de los números más pequeños y en V2 la mitad restante.

123
Guía Lógica de Programación

V=4 2 1 8 5 3 La salida es:

V1 = 2 1 3 V2 = 4 8 5

5. Realice una función que dada un matriz N x M donde N x M es par, encuentre las parejas
de datos que se han de repetir en la matriz.

0 1 2 3
0 3 5 5 7
1 44 -66 44 105
2 7 105 3 -66

La salida es: -66 = 1,1 – 2,3


5 = 0,1 – 0,2
3 = 0,0 – 2,2
7 = 0,3 – 2,0
44 = 1,0 – 1,2
105 = 1,3 – 2,1

6. Escriba un programa que sume los elementos equiparables de los arreglos bidimensionales
denominados primero y segundo en un tercer arreglo llamado resultante. Los arreglos
primero y segundo deben ser creados por el usuario.

12.6 BIBLIOGRAFÍA

BECERRA SANTAMARÍA, César. Algoritmos: conceptos básicos. 3 ra ed. Bogotá:


Kimpres,1996. pp. 145, 183.

BRONSON GARY, J. C++ para ingenieros y ciencias. México: Thomson, 2000. p. 523.

DEITEL H., M. Cómo programar en C/C++.2da ed. México: Prentice Hall, 1995. p. 203.

JAMSA, Kris. Aprenda y practique C++. 3ra ed. México: Oxford, 1999. pp. 147, 159.

124
Universidad Santo Tomás

JOYANES AGUILAR, Luis. Fundamentos de programación. 2da ed. Madrid: McGraw-


Hill, 1996. p. 203, 237.

JOYANES AGUILAR, Luis. Programación en C: metodología, estructura de datos y


objetos. Madrid: McGraw-Hill, 2001.p. 258.

JOYANES AGUILAR, Luis. Programación en C++: algoritmos, estructura de datos y


objetos. Madrid: McGraw-Hill, 2000.p. 161.

LÓPEZ ROMAN, Leobardo. Programación estructurada enfoque algorítmico.2da ed.


México: Alfaomega, 2002. p. 223.

OVIEDO REGINO, Efraín. Lógica de programación. Bogotá: ECOE Ediciones, 2002. p.


201.

125
GuiaNo.10.
13. Guía No
Programación
orientada a objetos
10.
13.1 OBJETIVOS

• Introducir el paradigma de la programación orientada a objetos.


• Reconocer las propiedades fundamentales de la programación orientada a objetos
como son: objetos, herencia, polimorfismo.
• Conocer, identificar y utilizar la estructura básica del lenguaje de programación
C++.
• Aplicar los componentes principales de C++ para la construcción de programas.
• Aplicar las funciones especiales en la construcción de programas con C++.

13.2 COMPETENCIAS A DESARROLLAR

• Dominio de las técnicas para diseño e implementación de soluciones de software


basadas en la metodología orientada a objetos.
• Dominio de los lenguajes de programación que soporta la implementación de las
técnicas de programación orientada a objetos.
Guía Lógica de Programación

• Conocimientos y habilidades básicas para la investigación.


• Capacidad para innovar y proponer soluciones a problemas teórico-prácticos a
partir de la aplicación del conocimiento en contextos específicos.

13.3 INTRODUCCIÓN

La metodología de programación orientada a objetos (POO) se convirtió en el paradigma


que rige en la actualidad el diseño de software. Las compañías que se dedican a esta labor
utilizan la POO como base fundamental para el desarrollo de programas de aplicación
(compiladores, bases de datos, editores, juegos, etc.) e incluso de sistemas operativos.

Desde el punto de vista del diseño de software, puede decirse que a partir de los principios
que sirven como fundamento a la POO (abstracción, encapsulamiento, herencia y
polimorfismo) se desarrolla un nuevo método para estructurar la información que se admi-
nistra en los programas.

13.4 FUNDAMENTOS TEÓRICOS

13.4.1 PROGRAMACIÓN ORIENTADA A OBJETOS

La programación orientada a objetos es una técnica de implementación de soluciones de


software en la que los programas están organizados como colecciones de objetos, donde
cada uno es una instancia de un tipo abstracto de datos (TAD) y donde todas las clases son
miembros de una jerarquía de clases conectadas por relaciones de herencia.

Un tipo abstracto de datos es un tipo de dato definido por el programador que contiene tanto
las características de los objetos (sus datos o atributos) como su comportamiento o funciona-
miento (procedimientos o métodos).

• Conceptos principales que sustentan la POO


El punto de partida de la metodología de programación orientada a objetos está en compren-
der los fundamentos que sustentan la metodología desde el punto de vista de la POO:

128
Universidad Santo Tomás

• Abstracción
• Encapsulamiento
• Herencia
• Polimorfismo

La POO se sustenta en la forma en que el ser humano comprende al mundo real e interactúa
con éste. Todo lo que lo rodea (nuestro entorno) es percibido a través de sus sentidos. Con
ellos, recibe información que le permite identificar los diferentes elementos en un lugar.

Cada uno de los elementos que se encuentran en el entorno se denomina “objeto”, y el ser
humano lo identifica mediante la percepción de un conjunto de atributos o características
(estructura de los objetos, materiales, componentes) y la definición de unos usos, comporta-
mientos o funcionalidades (lo que se puede hacer) que se aplican a estos.

En el proceso de identificación, se aplica el principio de abstracción que permite extraer las


características fundamentales de los objetos (sin tener que conocerlos en su totalidad), y el
encapsulamiento que agrupa estas características y las funcionalidades que se les atribuye
en unidades de pensamiento denominadas imágenes mentales. Éstas describen las caracte-
rísticas principales y los usos atribuidos a un objeto con el cual se ha tenido interacción en
algún momento.

Normalmente una imagen mental permite caracterizar muchos objetos del mundo real. En
muchas ocasiones se encuentran objetos que tienen características y comportamientos simi-
lares; y con éstos se construye una única imagen mental. Se puede indicar que la imagen
mental de un objeto describe en realidad a muchos posibles objetos. El ser humano agrupa
objetos con características y comportamientos similares en familias de objetos, y a partir de
esta agrupación construye la imagen mental de un objeto que sea representativo de la familia
de objetos.

Como resultado lógico de la dinámica del mundo real, los objetos evolucionan con el paso del
tiempo. Esto se logra mediante la modificación de las características y/o comportamientos
de los objetos, pero también mediante la adición de nuevas características y/o nuevos com-
portamientos. Este proceso evolutivo se relaciona directamente con el concepto de herencia
a partir del establecimiento de relaciones jerárquicas entre los objetos actuales y sus antece-
sores.

129
Guía Lógica de Programación

La herencia obliga al ser humano a modificar los componentes de sus imágenes mentales
para lograr identificar los nuevos objetos. En muchas ocasiones, el cambio de atributos y
comportamientos de los objetos es de tal magnitud que exige crear nuevas imágenes menta-
les. Éstas son el producto de la herencia a partir de imágenes mentales ya conocidas.

Finalmente, en el proceso de abstracción que se realiza para comprender el mundo real


existe una característica particular en la forma de identificar los comportamientos que se
atribuyen a los objetos. Se utiliza un mismo nombre para identificar operaciones similares en
estructura pero aplicadas a diferentes atributos o diferentes imágenes mentales. Esta carac-
terística se denomina polimorfismo.

La metodología de POO toma como principio básico el soporte para la construcción de


imágenes mentales a través de la creación de nuevos tipos de datos (mediante clases). Éstos
se suman a los tipos de datos estándar para brindar un entorno de programación en que se
soporte la de creación de variables (objetos) a partir de múltiples tipos de datos.

• Objetos y clases
Los lenguajes de programación utilizados en la actualidad soportan la metodología de progra-
mación orientada a objetos en el diseño de clases, la creación de objetos a partir de éstas y
la transmisión de mensajes que permiten establecer comunicación entre éstos.

El concepto de clase se puede entender como una plantilla que almacena la descripción de
los atributos y comportamientos de un objeto representativo de una familia de objetos.

Un objeto se define como la instancia de una clase que contiene datos y operaciones que
operan sobre éstos. La instancia corresponde a espacios de memoria que son reservados
por el sistema operativo (a solicitud de los programas de aplicación) para almacenar datos y
operaciones que se aplican sobre éstos.

En la creación de una clase intervienen los conceptos de abstracción y encapsulamiento al


seleccionar y agrupar los atributos y comportamientos principales del objeto que representa
la familia de objetos.

Realizando un paralelo entre la forma en que se interpreta el concepto de objeto en el mundo


real y en POO, se encuentra que:

• En el mundo real, un objeto es una entidad real cuya representación se basa en la espe-
cificación de sus atributos y de su comportamiento.

130
Universidad Santo Tomás

Atributos: Comportamientos:
• Marca • Encender
• Línea • Apagar
• Clase • Acelerar
• Motor • Frenar
• Carrocería • Girar
• Dirección • Hacer cambio
• Cambios

Atributos: Comportamientos:
• Marca • Encender
• Tipo • Apagar
• Procesador • Digitar
• Memoria • Presionar ratón
• Disco duro • Observar pantalla
• Pantalla • Almacenar
• Teclado • Procesar
• Ratón

En POO, un objeto es una entidad abstracta que contiene variables y funciones que operan
sobre éstas.

Variables: Funciones:
• h • Fijar hora
• m • Incrementar
• s • Mostrar

Al comparar los conceptos se tiene:

• Un objeto puede ser cualquier cosa, real o abstracta.

• Los atributos se representan a través de la información que los caracteriza. La informa-


ción se almacena en variables.

131
Guía Lógica de Programación

• Los comportamientos se representan a través de conjuntos de instrucciones que acceden


a las variables. Las instrucciones se agrupan en funciones de acuerdo con el objetivo de
cada comportamiento.

Una clase es la generalización de objetos que tienen los mismos atributos y los mismos
comportamientos. En ella se declaran las variables que representan a los atributos y las
funciones que representan a los comportamientos.

• Declaración de clases
La declaración de una clase consta de dos partes:

Encabezado de clase:

Está conformado por la palabra clave class seguida del nombre que se asigna a la clase

Cuerpo de clase:

El cuerpo de la clase se encierra entre llaves y se finaliza con (;)

class nombre_clase
{
//cuerpo de la clase
};

El cuerpo de la clase consta de:

• Especificadores de acceso: public, protected y private.


• Variables miembro
• Funciones miembro.

En lo referido al control de acceso, los miembros dato de la clase son private por defecto,
pero se pueden declarar como public, protected o private de acuerdo con las necesidades.

El acceso protected y private restringen la interacción de los miembros dato con el exterior
de los objetos. El acceso public permite la interacción con el exterior.

132
Universidad Santo Tomás

• Definición de funciones miembro de clases


La definición de clases implica la creación (definición) de las funciones miembro de la clase.

Esta definición puede implementarse de dos formas:

• Dentro de la declaración de la clase (función en línea)


• Fuera de la declaración de la clase

La definición de una función miembro fuera de la declaración de la clase consta del encabe-
zado de la función seguida por el cuerpo de la misma. En el encabezado se incluye el nombre
de la clase seguido por el operador de resolución de ámbito (::)

tipo nombre_clase :: nombre_funcion (parametros)

//cuerpo de la función

Ejemplo 1. Diseñar una clase que permita realizar las operaciones de un reloj

class reloj
{
private:
int hr;
int min;
int seg;
public:
void incrementar(void);
void fijar_hora(int h, int m, int s);
void mostrar(void);
};

133
Guía Lógica de Programación

void reloj::incrementar(void)
{
seg++;
if(seg>59)
{
seg=0;
min++;
}
if(min>59)
{
min=0;
hr++;
}
if(hr>12)
{
hr=1;
}
}

void reloj::fijar_hora(int h, int m, int s)


{
hr=h;
min=m;
seg=s;
}

void reloj::mostrar(void)
{
cout<<hr<<“:”<<min<<“:”<<seg;
}

• El programa en programación orientada a objetos


Un programa consta de objetos e instrucciones que se aplican sobre éstos. Los objetos se
declaran de la misma forma que en declaración de variables a partir de los tipos de dato
simple (int, float, double, char), pero se utiliza como tipo de dato la palabra que se selecciona
como nombre de la clase.

Las instrucciones pueden ser solicitudes de ejecución de funciones miembro de los objetos o
simplemente instrucciones de control.

134
Universidad Santo Tomás

La ejecución de funciones miembro contiene el nombre del objeto seguida por el operador
(.), el nombre de la fución a ejecutar y los parámetros:

objeto.nombre_funcion(parametros);

En lo referido al control de acceso, el programa solamente puede solicitar la ejecución de


funciones miembro declaradas con el especificador public.

Ejemplo 2. Diseñar un programa que muestre un reloj.

int main(void)
{
reloj r;
r.fijar_hora(12,55,0);
while(!kbhit())
{
r.mostrar();
sleep(1);
system(“cls”);
r.incrementar();
}
return 0;
}

13.4.2 FUNCIONES ESPECIALES


Con la existencia de funciones especiales en programación orientada a objetos, se crea un
entorno de programación amigable en el que se facilita la creación de programas con mejor
interacción para el programador.

Las funciones constructoras y destructoras permiten el manejo de la memoria RAM utiliza-


da por los programas en inicialización y terminación de objetos.

• Constructores
Un constructor es una función miembro de una clase que se ejecuta automáticamente siem-
pre que se declara un objeto de esa clase. Su función es crear e inicializar un objeto en el
momento de crearlo.

135
Guía Lógica de Programación

A continuación se presentan algunas características de los costructores:

- Lleva el mismo nombre de la clase a la que pertenece.


- Puede recibir 0, 1, o más argumentos.
- No retorna ningún valor. No tiene tipo de dato de retorno.
- Si el programador no crea constructor, el compilador crea uno por defecto.
- En una clase pueden existir varios constructores. Para esto, todos deben diferen-
ciarse en cantidad de argumentos o en tipo de argumentos.

El constructor por defecto no recibe parámetros e inicializa las variables miembro en valores
vacíos (0 para variables numéricas, “” para variables alfanuméricas).

El constructor con paso de parámetros recibe parámetros e inicializa las variables miembro
en valores recibidos como parámetro.

Ejemplo 1.

class complejo {
protected:
float real;
float imaginario;
public:
complejo(); //constructor por defecto
complejo(float x, float y); //constructor con paso de
parámetros
};

complejo::complejo()
{
real = 0;
imaginario = 0;
}

complejo::complejo(float x, float y)
{
real = x;
imaginario = y;
}

136
Universidad Santo Tomás

• Destructor
El destructor es una función miembro de una clase que se utiliza para eliminar un objeto de
esa clase. Se ejecuta automáticamente en el momento de salir del ámbito en que se crea el
objeto.

A continuación se presentan algunas características de la función destructora:

- Lleva el mismo nombre de la clase a la que pertenece y va precedido del operador


tilde ~.
- No recibe argumentos.
- No retorna ningún valor. No tiene tipo de dato de retorno.
- En una clase puede existir máximo un destructor.

Los destructores son útiles cuando se crean variables miembro mediante asignación dinámi-
ca de memoria.

Ejemplo 4.

class complejo {
protected:
float real;
float imaginario;
public:
~complejo();
};

complejo:: ~complejo()
{
// Operaciones del destructor
}

13.5 PREGUNTAS

1. ¿Cómo se representa un objeto en memoria?

2. ¿Cómo se implementa y manipula un arreglo de objetos?

137
Guía Lógica de Programación

3. ¿Cómo se implementa y manipula la función constructora copiadora?

4. ¿Qué son y cómo se implementan las funciones amigas?

13.6 EJERCICIOS

1. Diseñe un programa que cree un objeto a partir de la clase fecha. Inicie el objeto en la
fecha actual y a continuación increméntelo al día siguiente y muéstrelo por pantalla.

2. Diseñe un programa que permita almacenar y mostrar las coordenadas cartesianas de un


triángulo. Para esto, implemente la clase punto.

3. Diseñe un programa que permita realizar las operaciones aritméticas y lógicas básicas
con números fraccionarios.

4. Diseñe un programa que permita realizar conversiones de temperatura entre grados


Fahrenheit, Celsius, Kelvin, y Rankine.

5. Diseñe un programa que permita almacenar y mostrar la información básica de un cilin-


dro. Para esto, implemente la clase cilindro. El almacenamiento se debe realizar median-
te constructor por defecto o constructor con paso de argumentos.

13.7 BIBLIOGRAFÍA

JOYANES AGUILAR, Luis. Programación en C++. Algoritmos, estructura de datos y


objetos. Madrid: McGraw-Hill, 2000.

DEITEL H, M. Cómo programar en C/C++. 2da ed. México: Prentice Hall. 1995.

BRONSON GARY, J. C++ para ingenieros y Ciencias. México: Thomson, 2000.

138
Anexos
Anexos
1.M anualde usuario

Objetivo
Co m petenc ias
2.Pro g ram a
Intro duc c ión
Co nc epto s teóric o s básic o s
Auto r 4.Tem a
No m bre F undam entac ión
Tex to s G uía Lóg ic a de
Edic ión Biblio g rafía
Pág ina Pro g ram ac ión
Ejerc ic io s resuelto s
Análisis de respuesta 4. G uía
Resultado s esperado s Preg untas
Justific ac ión de respuesta

Análisis de pro blem a


PROGAMACIÓN

Diag ram a de flujo


3.C ro no g ram a
Alg o ritm o Resultado s esperado s
Pseudo c ódig o Pro blem as 5. Taller
Desarro llo de so luc ión
Leng uaje C + + Pro g ram a

Ensay o
Resultado s esperado s Preg unta de investig ac ión
Cuadro sinóptic o
1. ESTRUCTURA DE LA GUÍA DE LÓGICA DE
Universidad Santo Tomás

141
Universidad Santo Tomás

2. MAPA CONCEPTUAL DE LÓGICA


DE PROGRAMACIÓN

143
Guía Lógica de Programación

144
Universidad Santo Tomás

3. CRONOGRAMA LÓGICA DE PROGRAMACIÓN

145
Esta cartilla se terminó de imprimir en
agosto de 2006 en los talleres gráficos de la
Universidad Santo Tomás Bogotá, D.C.