Sunteți pe pagina 1din 190

Capítulo 1

Cómo funciona una computadora


1.1 Introducción
En la sociedad actual, casi todas las tareas requieren el uso de un
ordenador. En las escuelas, los estudiantes usan computadoras para buscar
en Internet y enviar correos electrónicos. En el trabajo, la gente los utiliza
para hacer presentaciones, analizar datos y comunicarse con los clientes.
En casa, la gente los usa para jugar y charlar con otras personas de todo el
mundo. Por supuesto, no olvide los teléfonos inteligentes como iPhones.
¡Son computadoras también!
Los ordenadores pueden realizar tantas tareas diferentes debido a su
capacidad de programación. En otras palabras, una computadora puede
realizar cualquier trabajo que un programa le indique. Un programa es un
conjunto de sentencias (a menudo llamado instrucciones o "comandos")
que un ordenador sigue para realizar una tarea específica.
Los programas (generalmente denominados "software de aplicación") son
esenciales para un ordenador, porque sin ellos un ordenador es una
máquina ficticia que no puede hacer nada.
El programa le dice al ordenador qué hacer y cuándo hacerlo. El
programador o el desarrollador de software es la persona que diseña, crea
y prueba programas de computadora.
Este libro presenta los conceptos básicos de la programación informática
en lenguaje C++.

1.2 ¿Qué es Hardware?


El término "hardware" se refiere a todos los dispositivos o componentes
que componen una computadora. Si alguna vez ha abierto la caja de un
ordenador o de un portátil, probablemente haya visto muchos de sus
componentes, como el microprocesador (CPU), la memoria y el disco
duro. Una computadora no es un dispositivo, sino un sistema de
dispositivos que funcionan todos juntos.
Los componentes básicos de un sistema informático típico se discuten
aquí.
La Unidad Central de Proceso (CPU)
Esta es la parte de una computadora que realmente realiza todas las tareas
definidas en un programa.
Memoria principal (RAM - Random Access Memory)
Esta es el área donde el ordenador almacena el programa (mientras se está
ejecutando) así como los datos con los que trabaja el programa. Todos los
programas y datos almacenados en este tipo de memoria se pierden cuando
apaga el ordenador o lo desenchufa de la toma de corriente.
Dispositivos de Almacenaje Secundario
Esto es generalmente el disco duro, y a veces (pero más raramente) la
unidad de CD/DVD. A diferencia de la memoria principal, este tipo de
memoria puede almacenar datos durante un período de tiempo más largo,
incluso si no hay alimentación eléctrica en el ordenador. Sin embargo, los
programas almacenados en esta memoria no se pueden ejecutar
directamente. Deben ser transferidos a una memoria mucho más rápida;
es decir, la memoria principal.
Dispositivos de entrada
Los dispositivos de entrada son todos aquellos dispositivos que recogen
datos del mundo exterior y los introducen en el ordenador para su
procesamiento posterior. Los teclados, ratones y micrófonos son todos
dispositivos de entrada.
Dispositivos de salida
Los dispositivos de salida son todos aquellos dispositivos que envían datos
al mundo exterior.
Los monitores (pantallas) y las impresoras son dispositivos de salida.
1.3 ¿Qué es el software?
Todo lo que hace un ordenador está bajo el control del software. Existen
dos categorías de software: software de sistema y software de aplicación.
El software del sistema es el programa que controla y gestiona las
operaciones básicas. Por ejemplo, controla las operaciones internas de un
ordenador, gestiona todos los dispositivos conectados a él, guarda datos,
carga datos y permite la ejecución de otros programas.
Windows, Linux, Mac OS X, Android e iOS son ejemplos de software del
sistema.
Otro término para esta categoría de programas es "sistemas operativos".
El software de aplicación se refiere a todos los demás programas que usted
utiliza para sus tareas diarias, como navegadores, procesadores de texto,
blocs de notas, juegos y muchos más.

1.4 Cómo se ejecuta un ordenador (Ejecuta) un programa


Cuando enciende el ordenador, la memoria principal (RAM) está
completamente vacía. Lo primero que el ordenador necesita hacer es
transferir el sistema operativo del disco duro a la memoria principal.
Después de cargar el sistema operativo en la memoria principal, puede
ejecutar cualquier programa (software de aplicación) que desee. Esto se
hace normalmente haciendo clic, haciendo doble clic o tocando el icono
correspondiente del programa.
Por ejemplo, digamos que hace clic en el icono de su procesador de texto
favorito. Esta acción ordena a su computadora que cargue (o copie) el
programa de procesamiento de texto desde su disco duro a la memoria
principal para que la CPU pueda ejecutarlo.
Recuerda! Los programas se almacenan en dispositivos de
almacenamiento secundarios, como los discos duros.
Cuando usted instala un programa en su computadora, el programa es
copiado a su disco duro pero cuando usted ejecuta un programa, el
programa es copiado (cargado) de su disco duro a la memoria principal, y
esa copia del programa es ejecutada.
Aviso: Los términos "ejecutar" y "ejecutar" son sinónimos.

1.5 Recopiladores e Intérpretes


Los ordenadores pueden ejecutar programas escritos en un lenguaje
estrictamente definido. Usted no puede escribir un programa usando un
lenguaje natural como el inglés o el griego, porque su computadora no lo
entenderá!
Pero, ¿qué es lo que realmente entiende una computadora? Una
computadora puede entender un lenguaje específico de bajo nivel llamado
"lenguaje máquina". En un lenguaje de máquina todas las sentencias (o
comandos) están formadas por ceros y unos. El siguiente es un ejemplo de
un programa escrito en un idioma de máquina, que calcula la suma de dos
números.

0010 0001 0000 0100


0001 0001 0000 0101
0011 0001 0000 0110
0111 0000 0000 0001
¿Sorprendido? No te preocupes, no vas a escribir programas de esta
manera. Esperemos que ya nadie escriba programas de computadora de
esta manera.
Hoy en día, todos los programadores escriben sus programas en un
lenguaje de alto nivel y luego usan un programa especial para traducirlos
a un lenguaje de máquina. Hay dos tipos de programas que los
programadores utilizan para realizar la traducción: compiladores e
intérpretes.
Un compilador es un programa que traduce declaraciones escritas en un
idioma de alto nivel a un programa de lenguaje de máquina separado. El
programa de idioma de la máquina se puede ejecutar en cualquier
momento. Después de la traducción, el compilador ya no es necesario.
Un intérprete es un programa que traduce y ejecuta simultáneamente las
declaraciones escritas en un idioma de alto nivel. A medida que el
intérprete lee cada una de las expresiones individuales del programa, las
traduce a un código de idioma máquina y luego las ejecuta directamente.
Este proceso se repite para cada expresión del programa.

1.6 ¿Qué es el código fuente?


Las instrucciones (a menudo llamadas instrucciones o comandos) que el
programador escribe en un lenguaje de alto nivel se denominan "código
fuente" o simplemente "código" El programador primero escribe el código
fuente en un programa conocido como editor de código, y luego usa un
compilador para traducirlo a un programa de lenguaje de máquina, o un
intérprete para traducirlo y ejecutarlo al mismo tiempo. NetBeans IDE es
un ejemplo de un entorno de desarrollo integrado (IDE) que permite a los
programadores escribir y ejecutar su código fuente. Encontrará más
información sobre NetBeans IDE en el Capítulo 3.

1.7 Preguntas de Revisión: Verdadero/Falso


Elija verdadero o falso para cada una de las siguientes afirmaciones.
1. Las computadoras modernas pueden realizar tantas tareas
diferentes porque tienen muchos gigabytes de RAM.
2. Un ordenador puede funcionar sin un programa.
3. Un disco duro es un ejemplo de hardware.
4. Los datos pueden almacenarse en la memoria principal (RAM)
durante un largo período de tiempo, incluso si no hay alimentación
eléctrica en el ordenador.
5. Los datos se almacenan en la memoria principal (RAM), pero los
programas no lo son.
6. Los altavoces son un ejemplo de dispositivo de salida.
7. Windows y Linux son ejemplos de software.
8. Un reproductor multimedia es un ejemplo de software de sistema.
9. Cuando enciende el ordenador, la memoria principal (RAM) ya
contiene el sistema operativo.
10. Cuando abre la aplicación de procesamiento de texto, se copia
desde un dispositivo de almacenamiento secundario a la memoria
principal (RAM).
11. En un lenguaje de máquina, todas las sentencias (comandos) son
una secuencia de ceros y unos.
12. Hoy en día, una computadora no puede entender ceros y unos.
13. Hoy en día, el software está escrito en un lenguaje compuesto por
ceros y ceros.
14. El software se refiere a los componentes físicos de una
computadora.
15. En un lenguaje de programación computacional de alto nivel, el
ordenador no entiende ceros y unos.
16. El compilador y el intérprete son software.
17. El compilador traduce el código fuente a un archivo ejecutable.
18. El intérprete crea un programa de idioma de máquina.
19. Después de la traducción, el intérprete ya no es necesario.
20. El código fuente puede ser escrito usando un simple editor de
texto.
21. El código fuente puede ser ejecutado por un ordenador sin
necesidad de compilación o interpretación.
22. Un programa escrito en el idioma de la máquina requiere
compilación (traducción).
23. Un compilador traduce un programa escrito en un lenguaje de alto
nivel.
1.8 Preguntas de revisión: Elección múltiple
Seleccione la respuesta correcta para cada una de las siguientes
afirmaciones.
1. ¿Cuál de las siguientes opciones no es hardware informático?
a. un disco duro
b. un disco DVD
c. una tarjeta de sonido
d. la memoria principal (RAM)
2. ¿Cuál de las siguientes opciones no es un dispositivo de
almacenamiento secundario?
a. un lector/grabador de DVD
b. Un disco duro
c. una unidad flash USB
d. RAM
3. ¿Cuál de las siguientes operaciones no puede realizar la CPU?
a. Transferir datos a la memoria principal (RAM).
b. Mostrar datos al usuario.
c. Transferir datos desde la memoria principal (RAM).
d. Realizar operaciones aritméticas.
4. Una pantalla táctil es
a. un dispositivo de entrada.
b. un dispositivo de salida.
c. los dos anteriores
5. ¿Cuál de los siguientes no es software?
a. Windows
b. Linux
c. iOS
d. un videojuego
e. un navegador web
f. Todo lo anterior es software.
6. ¿Cuál de las siguientes afirmaciones es correcta?
a. Los programas se almacenan en el disco duro.
b. Los programas se almacenan en discos DVD.
c. Los programas se almacenan en la memoria principal (RAM).
d. Todo lo anterior es correcto.
7. ¿Cuál de las siguientes afirmaciones es correcta?
a. Los programas se pueden ejecutar directamente desde el disco duro.
b. Los programas se pueden ejecutar directamente desde un disco DVD.
c. Los programas se pueden ejecutar directamente desde la memoria
principal (RAM).
d. Todo lo anterior es correcto.
e. Nada de lo anterior es correcto.
8. Los programadores no pueden escribir programas de computadora
en
a. C++.
b. lenguaje natural como el inglés, griego, etc.
c. lenguaje de la máquina.
9. Un compilador traduce
a. un programa escrito en lenguaje máquina en un programa de lenguaje
de alto nivel.
b. un programa escrito en un lenguaje natural (inglés, griego, etc.) en un
programa de lenguaje de máquina.
c. un programa escrito en lenguaje de alto nivel en un programa de idioma
de máquina.
d. ninguno de los anteriores
e. todo lo anterior
10. El lenguaje de la máquina es
a. Un lenguaje que las máquinas usan para comunicarse entre sí.
b. Un lenguaje compuesto de instrucciones numéricas que es utilizado
directamente por un ordenador.
c. un idioma que utilice palabras en inglés para las operaciones.
11. Si dos declaraciones idénticas son una detrás de la otra, el
intérprete
a. traduce el primero y lo ejecuta, luego traduce el segundo y lo ejecuta.
b. traduce el primero, luego traduce el segundo, y luego ejecuta ambos.
c. traduce sólo el primero (puesto que son idénticos) y lo ejecuta dos veces.
2.1 ¿Qué es C++?
C++ es un lenguaje de programación informática de propósito general
ampliamente utilizado que permite a los programadores crear aplicaciones
a gran escala, sistemas embebidos, kernels de sistemas operativos, drivers,
aplicaciones cliente-servidor y muchos otros tipos de software.
C++ es una extensión de su predecesor, el lenguaje de programación C.
La principal diferencia entre C++ y C es que C++ incluye técnicas de
programación modernas como la Programación Orientada a Objetos
(POO.) Además, en C++ es posible escribir código en un estilo "C", o en
un "estilo orientado a objetos", o ¡incluso en ambos!
2.2 ¿Cuál es la diferencia entre un Script y un programa?
Técnicamente hablando, un script se interpreta mientras que un programa
es compilado, pero esta no es en realidad su principal diferencia. Hay otra
pequeña, pero más importante diferencia entre ellos!
El propósito principal de un script escrito en un lenguaje de scripting como
JavaScript, o VBA (Visual Basic for Applications) es controlar otra
aplicación. Así que usted puede decir que, de alguna manera, JavaScript
controla el navegador web, y VBA controla una aplicación de Microsoft
Office como MS Word o MS Excel.
Por otra parte, un programa escrito en un lenguaje de programación como
C++, C# o Visual Basic se ejecuta independientemente de cualquier otra
aplicación. Un programa se compila en un conjunto separado de
instrucciones de idioma de la máquina que pueden ejecutarse como
independientes cada vez que el usuario lo desee.
Notice: Macros of Microsoft Office are scripts written in VBA. Their
purpose is to automate certain functions within Microsoft Office.
Remember! A script requires a hosting application in order to execute. A
script cannot be executed as stand-alone.
2.3 Why You Should Learn C++
C++ is what is known as a “high-level” computer language. The C++
coding style is quite easy to understand and it is very efficient on multiple
platforms such as Windows, Linux, and Unix. C++ is a very flexible yet
powerful language, making it most suitable for developing large-scale
applications, embedded systems, operating system kernels, drivers, client-
server applications, art applications, music players, or even video games.
C++ is everywhere! It is used on desktop computers, on laptops, and even
in data centers costing millions of dollars. With millions of developers
worldwide, C++ enables efficient development of exciting applications
and services. There are billions—probably even trillions—of lines of code
already written in C++ and your
Chapter 2
C++ possibilities for code reuse are huge! This is why so many companies
and organizations prefer using C++ to any other programming language.
This is also a very good reason why you should actually learn C++!
2.4 Funcionamiento de C++
Las computadoras no entienden idiomas naturales como el inglés o el
griego, por lo que se necesita un lenguaje informático como el C++ para
comunicarse con ellos. C++ es un potente lenguaje informático de alto
nivel. El compilador C++ convierte el lenguaje C++ a un lenguaje que
los ordenadores pueden entender realmente, y que se conoce como
"lenguaje de máquina".
Existen compiladores C++ para casi todos los tipos de sistemas
operativos. De este modo, puede compilar su código fuente y crear
archivos ejecutables, por ejemplo, para Windows, para Linux o para OS
X.
Capítulo 4
Introducción a los conceptos algorítmicos básicos

4.1 ¿Qué es un algoritmo?


Un algoritmo es una secuencia finita estrictamente definida de
instrucciones bien definidas (a menudo llamadas instrucciones o
comandos) que proporciona la solución a un problema o a una clase
específica de problemas para cualquier conjunto aceptable de valores de
entrada (si hay entradas). En otras palabras, un algoritmo es un
procedimiento paso a paso para resolver un problema dado. El término
"finito" significa que el algoritmo debe alcanzar un punto final y no puede
ejecutarse para siempre.
Puedes encontrar algoritmos en todas partes de tu vida real, no sólo en
informática.
Por ejemplo, el proceso para preparar tostadas o una taza de té puede
expresarse como un algoritmo. Ciertos pasos, en un cierto orden, deben
seguirse para alcanzar su objetivo.
4.2 El algoritmo para hacer una taza de té
El siguiente es un algoritmo para hacer una taza de té.
1. Ponga la bolsita de té en una taza.
2. Llene la tetera con agua.
3. Hervir el agua en la tetera.
4. Vierta un poco de agua hervida en la taza.
5. Añada la leche a la taza.
6. Añadir azúcar a la taza.
7. Revuelve el té.
8. Bebe el té.
Como puede ver, hay ciertos pasos que deben seguirse. Estos pasos están
en un orden específico, aunque algunos de los pasos podrían ser
reordenados. Por ejemplo, los pasos 5 y 6 pueden invertirse. Podrías añadir
primero el azúcar y después la leche.
Por favor, tenga en cuenta que el orden de algunos pasos probablemente
puede ser cambiado, pero no puede moverlos lejos de donde deberían
estar. Por ejemplo, no puede mover el paso 3 ("Hervir el agua en la tetera")
al final del algoritmo, porque terminará bebiendo una taza de té helado (y
no uno caliente) que es totalmente diferente de su meta inicial!

4.3 Propiedades de un algoritmo


Un algoritmo debe satisfacer las siguientes propiedades:
Entrada: El algoritmo debe tener valores de entrada de un conjunto
especificado.
Salida: El algoritmo debe producir los valores de salida de un conjunto
especificado de valores de entrada. Los valores de salida son la solución a
un problema.
Finiteness: Para cualquier entrada, el algoritmo debe terminar después de
un número finito de pasos.
Definición: Todos los pasos del algoritmo deben ser definidos con
precisión.
Eficacia: Debe ser posible realizar cada paso del algoritmo correctamente
y en una cantidad de tiempo finita. Es decir, sus pasos deben ser lo
suficientemente básicos como para que, por ejemplo, alguien que usa un
lápiz y un papel pueda llevarlos a cabo exactamente, y en una cantidad de
tiempo finita. No basta con que cada paso sea definitivo (o definido con
precisión), sino que también debe ser factible.
4.4 Vale sobre Algoritmos. Pero, ¿qué es un programa de computadora?
De todos modos?
Un programa de ordenador no es más que un algoritmo escrito en un
lenguaje que los ordenadores pueden entender, como C++, Java, C# o
Visual Basic.
Un programa de computadora no puede hacer una taza de té o cocinar su
cena, aunque un algoritmo puede guiarlo a través de los pasos para hacerlo
usted mismo. Sin embargo, los programas pueden (por ejemplo) ser
utilizados para calcular el valor promedio de un conjunto de números, o
para encontrar el valor máximo entre ellos. Los programas de inteligencia
artificial pueden incluso jugar ajedrez o resolver acertijos lógicos.
4.5 El Partido de los Tres!
Siempre hay tres partes involucradas en un algoritmo: la que escribe el
algoritmo, la que lo ejecuta y la que lo usa o disfruta.
Tomemos un algoritmo para preparar una comida, por ejemplo. Alguien
escribe el algoritmo (el autor del libro de recetas), alguien lo ejecuta
(probablemente tu madre, que preparó la comida siguiendo los pasos del
libro de recetas), y alguien la usa (probablemente tú, que disfrutas de la
comida).
Ahora considera un verdadero programa de computadora. Tomemos un
videojuego, por ejemplo.
Alguien escribe el algoritmo en un lenguaje de ordenador (el
programador), alguien o algo lo ejecuta (normalmente un ordenador
portátil o una computadora), y alguien más lo usa o juega con él (el
usuario).
Tenga cuidado, porque a veces los términos "programador" y "usuario"
pueden ser confusos.
Cuando usted escribe un programa de computadora, por ese período de
tiempo usted es "el
programador." Sin embargo, cuando usas tu propio programa, eres "el
usuario".
4.6 Las tres etapas principales involucradas en la creación de un algoritmo
Tres etapas principales están involucradas en la creación de un algoritmo:
entrada de datos, procesamiento de datos y salida de resultados El orden
es específico y no se puede cambiar.
Considere un programa de computadora que encuentre el valor promedio
de tres números. En primer lugar, el programa debe pedir al usuario que
introduzca los números (entrada de datos). A continuación, el programa
calcula el valor medio de los números (procesamiento de datos).
Finalmente, el programa muestra el resultado en la pantalla del ordenador
(salida de resultados).
Echemos un vistazo a estas etapas con más detalle.
1. Pida al usuario que introduzca un número.
2. Pida al usuario que introduzca un segundo número.
3. Pida al usuario que introduzca un tercer número.
4. Calcule la suma de los tres números.
5. Divida la suma por 3.
6. Visualizar el resultado en la pantalla.
En algunas situaciones raras, la etapa de entrada puede estar ausente y el
programa de ordenador puede estar compuesto de sólo dos etapas. Por
ejemplo, considere un programa de computadora que está escrito para
calcular la siguiente suma.
1+2+3+4+5+6+7+8+9+10
En este ejemplo, el usuario no introduce ningún valor porque la
computadora sabe exactamente qué hacer. Debe calcular la suma de los
números del 1 al 10.
Ahora echemos un vistazo al mismo ejemplo, ligeramente alterado.
Considere un programa de computadora que está escrito para calcular la
siguiente suma.
1 + 2 + 3 + 3 + -l-N
Por supuesto, esta suma no es la misma que la anterior. En este ejemplo,
el usuario necesita introducir algunos datos. El ordenador no puede decidir
por sí mismo el valor exacto del número N. Este valor debe ser introducido
por el usuario. Una vez que el usuario introduce un valor para N, la
computadora puede proceder a calcular el resultado. Por ejemplo, si el
usuario ingresa el número 5, la computadora puede entonces encontrar el
resultado de + 2 + 3 + 4 + 5.
4.7 Diagramas de flujo
Un diagrama de flujo es un método gráfico para presentar un algoritmo,
generalmente en papel. Es la representación visual del flujo de ejecución
del algoritmo. En otras palabras, representa visualmente cómo procede el
flujo de ejecución de una sentencia a la siguiente hasta que se alcanza el
final del algoritmo. Un diagrama de flujo no se puede introducir
directamente en un ordenador tal como está. Primero se debe convertir en
un lenguaje de programación como C++.
Los símbolos básicos que usan los diagramas de flujo se muestran en la
Tabla 4-1.

Tabla 4-1 Símbolos del diagrama de flujo y sus funciones Inicio/Fin:


Representa el principio o el final de un algoritmo. El símbolo Inicio tiene
una salida y el símbolo Fin tiene una entrada.
Flecha: Muestra el flujo de ejecución. Una flecha que viene de un símbolo
y termina en otro símbolo indica que el control pasa al símbolo al que
apunta la flecha. Las flechas siempre se dibujan como líneas rectas que
suben y bajan o como líneas laterales (nunca en ángulo).
Proceso: Representa un proceso o cálculo matemático[fórmula]. El
símbolo Proceso tiene una entrada y una salida.
Entrada/salida de datos: Representa la entrada de datos o la salida de
resultados. En la mayoría de los casos, los datos provienen de un teclado
y los resultados se muestran en una pantalla.
El símbolo Entrada/salida de datos tiene una entrada y una salida.
Decisión: Indica el momento en que se toma una decisión. Basado en una
condición dada (que puede ser verdadera o falsa), el algoritmo seguirá la
trayectoria derecha o izquierda. El símbolo Decisión tiene una entrada y
dos (y siempre sólo dos) salidas.
Conectores fuera de página: Muestre la continuación de un diagrama de
flujo en otra página. Se utilizan para conectar segmentos en varias páginas
cuando un diagrama de flujo es demasiado grande para que quepa en una
hoja de papel. El símbolo del conector de salida de página tiene una
entrada y el símbolo del conector de entrada de página tiene una salida
Subprograma (proceso predefinido): Muestra
El símbolo de proceso predefinido tiene una entrada y una salida.
En la Figura 4-1 se muestra un ejemplo de diagrama de flujo. El algoritmo
pide al usuario que introduzca tres números y luego calcula su valor
promedio y lo muestra en la pantalla del ordenador.
/Prompt the
user to enter
a number
/Prompt the
user to enter
a second
number

/ Prompt the
/ user to enter
/ a third
/ number

I
/ Display the
/ result on the
/ screen

.4,
C Enj )
Figura 4-1 Diagrama de flujo para un algoritmo que calcula y muestra el
promedio de tres números
Recuerda! Un diagrama de flujo siempre comienza y termina con un
símbolo de inicio/fin!
Ejercicio 4.7-1 Encontrar el valor promedio de tres números
Diseñe un algoritmo que calcule el valor promedio de tres números.
Siempre que el valor promedio sea inferior a 10, un mensaje "¡Falla!" debe
mostrarse. De lo contrario, si el valor promedio es 10 o más, un mensaje
"¡Pasa!" debe mostrarse.
Solución
En este problema, deben visualizarse dos mensajes diferentes, pero sólo
puede aparecer uno cada vez que se ejecute el algoritmo; la redacción del
mensaje depende del valor medio. El diagrama de flujo para el algoritmo
se presenta a continuación
Nota: Para ahorrar papel, puede pedirle al usuario que introduzca los tres
números usando un solo paralelogramo oblicuo.
Recuerda! Un símbolo de decisión siempre tiene una entrada y dos salidas!
Por supuesto, es muy pronto para que usted pueda empezar a crear sus
propios algoritmos. Este ejercicio en particular es bastante simple y se
presenta en este capítulo como una excepción, sólo con fines de
demostración. Usted necesita aprender más antes de empezar a crear sus
propios algoritmos o incluso programas C++. Ten paciencia! En unos
pocos capítulos llegará el gran momento!
4.8 ¿Qué son "Palabras reservadas"?
En un lenguaje informático, "palabras reservadas" son todas aquellas
palabras que tienen un significado estrictamente predefinido; están
reservadas para un uso especial y no pueden ser usadas para ningún otro
propósito. Por ejemplo, las palabras Iniciar, Finalizar, Leer y Escribir en
diagramas de flujo tienen un significado predefinido. Se utilizan para
representar el principio, el final, la entrada de datos y la salida de
resultados, respectivamente.
También existen palabras reservadas en todos los lenguajes informáticos
de alto nivel. En C++, hay muchas palabras reservadas como si, mientras
tanto, y para. Sus significados están predefinidos, por lo que estas palabras
no pueden ser usadas para ningún otro propósito.
Advertencia: Las palabras reservadas en un lenguaje informático a
menudo se denominan palabras clave.
4.9 ¿Cuál es la diferencia entre una declaración y un comando?
Hay una gran discusión en Internet sobre si hay o no alguna diferencia
entre una declaración y un comando. Algunos prefieren usar el término
"declaración" y otros el término "comando". Para un programador
principiante, no hay diferencia; ¡ambas son instrucciones para el
ordenador!
4.10 ¿Qué es la programación estructurada?
La programación estructurada es un método de desarrollo de software que
utiliza la modularización y el diseño estructurado. Esto significa que los
programas grandes se dividen en módulos más pequeños y cada módulo
individual utiliza código estructurado, lo que significa que las sentencias
están organizadas de una manera específica que minimiza los errores y la
interpretación errónea. Como su nombre indica, la programación
estructurada se realiza en un lenguaje de programación estructurado y C++
es uno de ellos.
El concepto de programación estructurada fue formalizado en 1966 por
Corrado Bohm1 y Giuseppe Jacopini. Demostraron el diseño teórico de
programas de computación usando secuencias, decisiones e iteraciones.
4.11 Las tres estructuras de control fundamentales
Existen tres estructuras de control fundamentales en la programación
estructurada.
Estructura de Control de Secuencia: Se refiere a la ejecución línea por
línea, en la que las sentencias se ejecutan secuencialmente, en el mismo
orden en que aparecen en el programa. Pueden, por ejemplo, llevar a cabo
una serie de operaciones de lectura o escritura, operaciones aritméticas o
asignaciones a variables.
Estructura de control de decisión: Dependiendo de si una condición es
verdadera o falsa, la estructura de control de decisión puede saltar la
ejecución de un bloque entero de sentencias o incluso ejecutar un bloque
de sentencias en lugar de otro.
Estructura de control de bucle: Esta es una estructura de control que
permite la ejecución de un bloque de sentencias múltiples veces hasta que
se cumpla una condición específica. Si usted no entendió el significado
más profundo de estas tres estructuras de control, no se preocupe, porque
los próximos capítulos las analizarán muy a fondo. La paciencia es una
virtud. Todo lo que tienes que hacer por ahora es esperar!
Ejercicio 4.11-1 Comprensión de las estructuras de control mediante
diagramas de flujo
Utilizando diagramas de flujo, dé un ejemplo para cada tipo de estructura
de control.

Solution
Example of a Sequence Control Structure
Example of a Decision Control Structure
Example of a Loop Control Structure
*

4.12 Su primer programa C++


La conversión de un diagrama de flujo a un lenguaje de ordenador, como
C++, resulta en un programa C++.
Un programa C++ no es más que un archivo de texto que incluye
sentencias C++. Los programas C++ pueden incluso ser escritos en su
aplicación de edición de texto! Tenga en cuenta, sin embargo, que usar
NetBeans IDE para escribir programas C++ es una solución mucho mejor
debido a todas sus características incluidas que pueden hacer su vida más
fácil.
Un programa C++ debe contener siempre una función principal, como se
muestra aquí.
#include <iostream>
using namespace std;
int main() {
// C++ code goes here
return 0;
}
Un código fuente C++ se guarda en su disco duro con la extensión de
archivo. cpp predeterminada.
Aquí hay un programa C++ muy simple que muestra sólo tres mensajes
en la pantalla.
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
cout << "Hallo Welt!" << endl;
cout << "The End";
Nota: Tenga en cuenta que C++ requiere que todas las declaraciones se
terminen con un punto y coma.
4.13 ¿Cuál es la diferencia entre errores de sintaxis y lógica?
¿Errores?
Cuando los programadores escriben código en un lenguaje de alto nivel
hay dos tipos de errores que pueden cometer: errores de sintaxis y errores
lógicos.
Los errores de sintaxis son errores tales como palabras clave mal escritas,
un carácter de puntuación que falta, un corchete que falta o un paréntesis
de cierre que falta. Afortunadamente, el IDE NetBeans detecta estos
errores a medida que escribe y muestra un signo de exclamación rojo
delante de la línea errónea. Si intenta ejecutar un programa C++ que
incluya errores de sintaxis, recibirá mensajes de error en la pantalla y el
programa no se ejecutará. Debe corregir todos los errores y volver a
ejecutar el programa.
Los errores lógicos son aquellos errores que impiden que su programa
haga lo que usted esperaba que hiciera. Con errores lógicos no recibe
ninguna advertencia. Su código puede compilar y ejecutar pero el
resultado no es el esperado. Los errores lógicos son los más difíciles de
detectar. Debe volver a visitar el programa minuciosamente para
determinar dónde está el error. Por ejemplo, considere un programa C++
que le pida al usuario que introduzca tres números y luego calcule y
muestre su valor promedio. El programador, sin embargo, cometió un
error tipográfico; una de sus declaraciones divide la suma de los tres
números por 5, y no por 3 como debería. Por supuesto, el programa C++
se ejecuta como de costumbre, sin ningún mensaje de error, lo que obliga
al usuario a introducir tres números y mostrar un resultado, ¡pero
obviamente no el correcto! Es el programador quien tiene que encontrar y
corregir la declaración C++ erróneamente escrita, no el ordenador o el
compilador!
4.14 Cómo comentar su código
Cuando escribes un programa pequeño y sencillo, cualquiera puede
entender cómo funciona con sólo leerlo línea por línea. Sin embargo, los
programas largos son difíciles de entender, a veces incluso por la misma
persona que los escribió. Los comentarios son información extra que
puede incluirse en un programa para facilitar su lectura y comprensión.
Puede agregar explicaciones y otras informaciones, incluyendo:
> who wrote the program
> when the program was created or last modified
> what the program does
> how the program works
However, you should not over-comment There is no need to explain every
line of your program. Add comments only when a specific portion of your
program is hard to follow.
In C++, you can add comments using one of the following methods:
> double slashes //
> slash-asterisk, asterisk-slash delimiters /* */
The following program demonstrates how to use both types of
commenting. Usually double slashes ( // ) are used for commenting one
single line, whereas the slash-asterisk, asterisk-slash delimiters /*
*/ are used for commenting multiple lines at once.

quién escribió el programa


cuando el programa fue creado o modificado por última vez
qué hace el programa
cómo funciona el programa
Sin embargo, no debe hacer comentarios excesivos No hay necesidad de
explicar cada línea de su programa. Agregue comentarios sólo cuando una
porción específica de su programa sea difícil de seguir.
En C++, puede añadir comentarios utilizando uno de los siguientes
métodos:
Cuchillas dobles ///
delimitadores de barras asteriscos /* */
El siguiente programa muestra cómo usar ambos tipos de comentarios. Por
lo general, las barras dobles (//) se utilizan para comentar una sola línea,
mientras que las barras dobles (//) se utilizan para comentar varias líneas
a la vez.
iinclude <iostream>
using namespace std;
| /*
Created By Bouras Aristides
Date created: 12/25/2003
Date modified: 04/03/2008
Description: This program displays some messages on the screen
V
int main() {
cout « "Hello Zeus!" « endl; //display a message on the screen
//display a second message on the screen
cout « "Hello Hera!" « endl;
/* display a third message on screen */ cout « 'Teia aag" « endl;
//This is a comment cout « "The End";
return 0;
As you can see in the preceding program, you can add comments above a
statement or at the end of it, but not in front of it Look at the last statement,
which is supposed to display the message “The End.” This statement is
never executed because it is considered part of the comment
Notice: If you add comments using the delimiters /* */ in front of a
statement, the statement is still executed. In the preceding example, the
Greek message 'Teia oaf, even though it is written next to some comments,
is still executed. It is advisable, however, not to follow this writing style
because it can make your code difficult to read.
Como se puede ver en el programa anterior, se pueden añadir comentarios
sobre una sentencia o al final de la misma, pero no delante de ella.
Nota: Si añade comentarios utilizando los delimitadores /* */ delante de
una sentencia, la sentencia sigue ejecutándose. En el ejemplo anterior, el
mensaje griego' Teia oaf', aunque está escrito junto a algunos comentarios,
todavía se ejecuta. Sin embargo, es aconsejable no seguir este estilo de
escritura porque puede dificultar la lectura del código.
4.15 Programas fáciles de usar
¿Qué es un programa "fácil de usar"? Es el que el usuario considera un
amigo en lugar de un enemigo, el que puede ser utilizado fácilmente por
un usuario novato.
Si quieres escribir programas fáciles de usar tienes que ponerte en el lugar
del usuario. Los usuarios quieren que la computadora haga su trabajo a su
manera, con un mínimo esfuerzo. Los menús ocultos, etiquetas e
instrucciones imprecisas y mensajes de error engañosos son todas las
cosas que pueden hacer que un programa no sea fácil de usar.
La ley que mejor define los diseños fáciles de usar es la Ley de Astonga
Mínima:
Esta ley también se conoce comúnmente como el Principio de
Astongación Mínima (POLA, por sus siglas en inglés).
4.16 Preguntas de Revisión: Verdadero/Falso
Elija verdadero o falso para cada una de las siguientes afirmaciones.
1. El proceso para preparar una comida es en realidad un algoritmo.
2. Los algoritmos sólo se utilizan en informática.
3. Un algoritmo puede funcionar para siempre.
4. En un algoritmo, puede reubicar un paso en cualquier posición que
desee.
5. Un algoritmo debe producir los valores de salida correctos para un
solo conjunto de valores de entrada.
6. Las computadoras pueden jugar ajedrez.
7. Un algoritmo siempre puede convertirse en un programa de
ordenador.
8. La programación es el proceso de creación de un programa de
ordenador.
9. Siempre hay tres partes involucradas en un programa de
computadora: el programador, la computadora y el usuario.
10. El programador y el usuario a veces pueden ser la misma persona.
11. Es posible que un programa de ordenador no produzca resultados.
12. Un diagrama de flujo es un programa de computadora.
13. Un diagrama de flujo está compuesto por un conjunto de formas
geométricas.
14. Un diagrama de flujo es un método utilizado para representar un
algoritmo.
15. Puede diseñar un diagrama de flujo sin utilizar ningún símbolo
Inicio/Fin.
16. Puede diseñar un diagrama de flujo sin utilizar ningún símbolo de
proceso.
17. Puede diseñar un diagrama de flujo sin utilizar símbolos de
entrada/salida de datos.
18. Un diagrama de flujo debe incluir siempre al menos un símbolo
de decisión.
19. En un diagrama de flujo, un símbolo Decisión puede tener una,
dos o tres vías de salida, dependiendo del problema dado.
20. Palabras reservadas son todas aquellas palabras que tienen un
significado estrictamente predefinido.
21. La programación estructurada incluye diseño estructurado.
22. C++ es un lenguaje informático estructurado.
23. El principio básico de la programación estructurada es que sólo
incluye cuatro estructuras de control fundamentales.
24. Una declaración, escrita diez veces, se considera una estructura
de control de bucle.
25. La estructura de control de decisión se refiere a la ejecución
línea por línea.
26. Una palabra clave mal escrita se considera un error lógico.
27. Se puede ejecutar un programa C++ aunque contenga errores
lógicos.
28. Un punto y coma que falta al final de una expresión se considera
un error de sintaxis.
29. Un signo de exclamación al final de una sentencia no puede
impedir que se ejecute todo el programa C++.
30. Una de las ventajas de la programación estructurada es que no se
cometen errores al escribir un programa de ordenador.
31. Los errores lógicos son capturados durante la compilación.
32. Los errores de sintaxis son los más difíciles de detectar.
33. Un programa que calcula el área de un triángulo pero emite
resultados incorrectos contiene errores lógicos.
34. Cuando un programa no incluye ninguna sentencia de salida,
contiene errores de sintaxis.
35. Un programa siempre debe contener comentarios.
36. Si agrega comentarios a un programa, el equipo puede
entenderlo más fácilmente.
37. Puedes añadir comentarios en cualquier parte del programa.
38. Los comentarios no son visibles para los usuarios de un
programa.
39. Un programa se llama de fácil manejo si puede ser usado
fácilmente por un usuario principiante.
40. El acrónimo POLA significa "Principio de Entretenimiento
Menor".
4.17 Preguntas de revisión: Elección múltiple
Seleccione la respuesta correcta para cada una de las siguientes
afirmaciones.
1. Un algoritmo es una secuencia finita estrictamente definida de
instrucciones bien definidas que proporciona la solución para
a. un problema.
b. una clase específica de problemas.
c. los dos anteriores
2. ¿Cuál de las siguientes no es una propiedad que un algoritmo
debería satisfacer?
a. eficacia
b. Montaje
c. definición
d. entrada
3. Un programa de computadora es
a. un algoritmo.
b. una secuencia de instrucciones.
c. los dos anteriores
d. ninguno de los anteriores
4. Cuando alguien prepara una comida, él o ella es el
a."programador".
b."usuario".
c. ninguno de los anteriores
5. ¿Cuál de las siguientes opciones no pertenece a las tres etapas
principales implicadas en la creación de un algoritmo?
a. producción de datos
b. introducción de datos
c. Salida de datos
d. tratamiento de datos
6. Un diagrama de flujo puede ser
a. presentado en un pedazo de papel.
b. introducidos directamente en un ordenador tal como está.
c. los dos anteriores
7. Un rectángulo en un diagrama de flujo representa
a. entrada/salida.
b. una operación de tratamiento.
c. una decisión.
d. ninguno de los anteriores
8. ¿Cuál de las siguientes es/son estructuras de control?
a. una decisión
b. a secuencia
c. un bucle
d. Todo lo anterior son estructuras de control.
9. ¿Cuál de las siguientes sentencias C++ contiene un error de
sintaxis?
a. cout <<< "Hola Poseidón"
b. cout <<< "¡Soy yo! ¡Contengo un error de sintaxis!" <<< al final;
c. cout<<< "Hola Athena" << endl;
d. ninguno de los anteriores
10. ¿Cuál de las siguientes declaraciones se ejecuta realmente?
a. //cout << "Hola Apolo" <<< endl;
b. /* cout <<< "Hola Artemis" << endl; */
c. // Esto se ejecuta // cout <<< "Hola Ares"<<< endl;
d. /* Esto se ejecuta */ cout <<< "Hello Aphrodite" << endl;
e. ninguno de los anteriores
Capítulo 5
Variables y constantes
5.1 ¿Qué es una variable?
En informática, una variable es una ubicación en la memoria principal del
ordenador (RAM) donde se puede almacenar un valor y cambiarlo a
medida que se ejecuta el programa.
Imagínate una variable como una caja transparente en la que puedes
insertar y sostener una cosa a la vez. Debido a que la caja es transparente,
también puede examinar su contenido.
Además, si tiene dos o más casillas puede dar a cada casilla un nombre
único. Por ejemplo, podría tener tres casillas, cada una de las cuales
contendría un número diferente, y podría nombrar las casillas númeroA,
númeroB y númeroC.
Los recuadros llamados numberA, numberB y numberC en el ejemplo
contienen los números 13, 8 y 4, respectivamente. Por supuesto, usted
puede examinar o incluso alterar el valor contenido de cada una de estas
cajas en cualquier momento.
Ahora, digamos que alguien le pide que busque la suma de los valores de
las dos primeras cajas y luego guarde el resultado en la última caja. Los
pasos que debe seguir son:
1. Eche un vistazo a las dos primeras cajas y examine los valores
contenidos.
2. Usa tu CPU (éste es tu cerebro) para calcular la suma (el resultado).
3. Introduzca el resultado en la última casilla. Sin embargo, dado que cada
caja sólo puede contener un valor individual a la vez, el valor 4 se sustituye
por el número 21.
Las cajas ahora se ven así.
En un diagrama de flujo, la acción de almacenar un valor en una variable
está representada por una flecha a la izquierda.
Esta acción suele expresarse como "Asignar un valor, o el
resultado de una expresión, a una variable". La flecha izquierda se llama
el "operador de valoración".
Nota: Tenga en cuenta que esta flecha siempre apunta hacia la izquierda.
Además, en el lado izquierdo de la flecha sólo debería existir una única
variable.
En la informática real, las tres casillas son tres regiones individuales en la
memoria principal (RAM), denominadas numberA, numberB y numberC.

Acceso aleatorio
Memoria (RAM)
Cuando un programa ordena a la CPU que ejecute la sentencia
númeroC <- númeroA + númeroB
sigue el mismo proceso de tres pasos que en el ejemplo anterior.
1. El número 13 se transfiere desde la región de la RAM llamada numberA
a la CPU.
El número 8 se transfiere desde la región de la RAM llamada numberB a
la CPU.
(Este es el primer paso, en el que se examinan los valores contenidos en
las dos primeras casillas).
2. La CPU calcula la suma de 13 + 8.
(Este es el segundo paso, en el cual usaste tu cerebro para calcular la suma,
o resultado.)
3. El resultado, 21, se transfiere desde la CPU a la región de la RAM
denominada numberC, reemplazando el número 4 existente.
(Este es el tercer paso, en el cual insertó el resultado en la última casilla.
Después de la ejecución, la RAM se ve así.
Recuerda! Mientras un programa C++ está ejecutando una variable puede
contener varios valores, pero sólo un valor a la vez. Cuando se asigna un
valor a una variable, este valor permanece almacenado hasta que se asigna
un nuevo valor. El valor antiguo se pierde.
Una variable es uno de los elementos más importantes de la informática
porque ayuda a interactuar con los datos almacenados en la memoria
principal (RAM). Pronto, aprenderás todo sobre cómo declarar y usar
variables en C++.
5.2 ¿Qué es una Constante?
A veces es posible que necesite utilizar un valor que no pueda cambiar
mientras el programa está en ejecución. Tal valor se llama una "constante".
En términos simples, se podría decir que una constante es una variable
bloqueada. Esto significa que cuando un programa comienza a ejecutarse
y se asigna un valor a la constante, nada puede cambiar el valor de la
constante mientras se está ejecutando el programa. Por ejemplo, en un
programa financiero, un tipo de interés puede declararse como una
constante.
Un nombre descriptivo para una constante también puede mejorar la
legibilidad de su programa y ayudarle a evitar errores. Por ejemplo,
digamos que está usando el valor 3.14159265 (pero no como una
constante) en muchos puntos de su programa. Si comete un error al escribir
el número, se producirán resultados incorrectos. Pero, si a este valor se le
da un nombre, cualquier error tipográfico en el nombre es detectado por
C++, y se le notifica con un mensaje de error.
En un diagrama de flujo, puede representar la acción de fijar una constante
igual a un valor con el signo igual, (=).
Const IVA = 0,2
Nota: Este libro usa la palabra reservada Const para distinguir una
constante de una variable.
Considere un algoritmo que permita al usuario ingresar los precios de tres
productos diferentes y luego calcule y muestre el 20% de Impuesto al
Valor Agregado (conocido como IVA) para cada producto El diagrama de
flujo en la Figura 5-1 muestra este proceso cuando no se usa una constante.

Figura 5-1 Cálculo del 20% de IVA para tres productos sin el uso de una
constante.
Aunque este algoritmo es absolutamente correcto, el problema es que el
autor utilizó el 20% de IVA (20/100) tres veces. Si se tratara de un
programa informático real, la CPU se vería obligada a calcular el resultado
de la división (20/100) tres veces de forma individual.
Nota: En términos generales, la división y la multiplicación son
operaciones que consumen mucho tiempo y deben evitarse cuando sea
posible.
Una solución mucho mejor sería utilizar una variable, como se muestra en
la Figura 5-2. Esto reduce el número de operaciones de división y
multiplicación y también disminuye el potencial de errores tipográficos.
Start
Read
product_priceA,
product_priceB,
productpriceC
vat <- 20/100
I
Write
vat_A, vat_B, vat_C
Figura 5-2 Cálculo del 20% de IVA para tres productos utilizando una
variable, IVA
Esta vez la división (20/100) se calcula sólo una vez, y luego su resultado
se utiliza para calcular el IVA de cada producto.
Pero incluso ahora, el algoritmo (que más tarde podría convertirse en un
programa de ordenador) no es perfecto; la tina es una variable y cualquier
programador podría accidentalmente cambiar su valor.
La solución ideal sería cambiar el depósito variable a un IVA constante,
como se muestra en la Figura 5-3.
Figura 5-3 Cálculo del 20% de IVA para tres productos utilizando un IVA
constante.
Nota: Tenga en cuenta que cuando se declara una constante, se utiliza el
símbolo igual (=) en lugar de la flecha izquierda.
Esta última solución es la mejor opción por muchas razones.
Nadie, incluyendo el programador, puede cambiar el valor del IVA
simplemente escribiendo accidentalmente una declaración como VAT <-
0.60 en cualquier posición del programa.
Se minimiza el potencial de errores tipográficos.
El número de operaciones de multiplicación y división se mantiene lo más
bajo posible.
Si un día el Ministro de Hacienda decide aumentar el Impuesto al Valor
Agregado de 20% a 22%, el programador necesita cambiar sólo una línea
de código!
5.3 ¿Cuántos tipos de variables y constantes existen en C++?
Existen muchos tipos diferentes de variables y constantes en todos los
lenguajes informáticos. La razón de esta diversidad radica en los diferentes
tipos de datos que cada variable o constante puede contener. La mayoría
de las veces, las variables y constantes contienen los siguientes tipos de
datos.
Enteros: Los valores enteros son números positivos o negativos sin
ninguna parte fraccionaria, tales como 5,100,135, -25, y -5123.
Realidades: Los valores reales son números positivos o negativos que
incluyen una parte fraccionaria, como 5.14,7.23,5.0,3.14 y -23.78976. Los
valores reales también se conocen como "holguras".
Booleanos: Las variables o constantes booleanas sólo pueden contener
uno de dos valores:
verdadero o falso.
Caracteres: Los caracteres son valores alfanuméricos (siempre entre
comillas simples o dobles) tales como "a", "c", "Hola Zeus", "Tengo 25
años de edad", o "Peter ama a Jane para siempre". ¡Una secuencia de
caracteres también se conoce como una “cadena”!!
(Probablemente la palabra "cuerda" te hace visualizar algo llevable, pero
desafortunadamente no lo es. ¡Por favor, mantén tu sucia y preciosa mente
concentrada en informática!
5.4 Reglas para nombrar variables en C++
Se deben seguir ciertas reglas al asignar nombres a sus variables.
El nombre de una variable sólo puede contener caracteres latinos
(caracteres en mayúsculas o minúsculas en inglés), números y el carácter
de subrayado (_]).
Ejemplos de nombres de variables son nombre, apellido y edad.
Los nombres de las variables son sensibles a mayúsculas y minúsculas, lo
que significa que hay una diferencia clara entre mayúsculas y minúsculas.
Por ejemplo, myVAR, myvar, MYVAR y MyVar son en realidad cuatro
variables diferentes.
No se permiten caracteres de espacio. Si una variable se describe con más
de una palabra, puede utilizar el carácter de subrayado (_) entre las
palabras. Por ejemplo, la variable nombre edad del estudiante es
incorrecta. En su lugar, puede usar student_age, o incluso studentAge.
Un nombre de variable válido puede comenzar con una letra o un guión
bajo. Se permiten números, pero no se pueden utilizar al principio del
nombre de la variable. Por ejemplo, el nombre de la variable lstudent name
no está escrito correctamente. En su lugar, puede usar algo como el
nombre del estudiante o el nombre_de_estudiante.
Normalmente se elige un nombre de variable de forma que describa el
significado y la función de los datos contenidos. Por ejemplo, una variable
que contiene un valor de temperatura podría llamarse temperatura,
temperatura o incluso t.
5.5 Reglas para nombrar constantes en C++
Se deben seguir ciertas reglas al asignar nombres a sus constantes.
El nombre de una constante sólo puede contener caracteres latinos
(caracteres en mayúsculas o minúsculas en inglés), números y el carácter
de subrayado (_).
Además, aunque se permiten las letras minúsculas, es aconsejable utilizar
sólo letras mayúsculas. Esto le ayuda a distinguir visualmente las
constantes de las variables. Ejemplos de nombres constantes son IVA y
COMPUTER_NAME.
Los nombres constantes son sensibles a mayúsculas y minúsculas, lo que
significa que hay una diferencia clara entre caracteres en mayúsculas y
minúsculas. Por ejemplo, el myCONST, myconts, MYCONST y MyConst
son en realidad cuatro constantes diferentes.
No se permiten caracteres de espacio. Si una constante se describe con
más de una palabra, puede utilizar el carácter de subrayado () entre las
palabras. Por ejemplo, el nombre de la constante COMPUTER NAME es
incorrecto. En su lugar, puede utilizar COMPUTER_NAME, o incluso
COMPUTERNAME.
Un nombre de constante válido puede comenzar con una letra o un guión
bajo. Se permiten números, pero no se pueden utilizar al principio del
nombre de la constante. Por ejemplo, el nombre de la constante 1
COMPUTER NAME no está escrito correctamente. En su lugar, puede
utilizar algo como C0MPUTER_NAME1 o C0MPUTER1_NAME.
Un nombre constante se escoge generalmente de una manera que describe
el significado y el papel de sus datos contenidos. Por ejemplo, una
constante que mantiene el valor
El Impuesto Agregado podría denominarse IVA o IMPUESTO AL
VALOR AÑADIDO.
5.6 ¿Qué significa la frase "Declarar una variable"?
La declaración es el proceso de reservar una parte en la memoria principal
(RAM) para almacenar el contenido de una variable. En muchos lenguajes
de computación de alto nivel (incluyendo C++), el programador debe
escribir una declaración específica para reservar esa porción en la RAM.
En la mayoría de los casos, incluso necesitan especificar el tipo de variable
para que el compilador o el intérprete sepan exactamente cuánto espacio
reservar.
5.7 Cómo declarar variables en C++
C++ es un lenguaje de programación fuertemente mecanografiado. Esto
significa que cada variable debe tener asociado un tipo de datos específico.
Por ejemplo, una variable puede contener un entero, un real o un carácter.
En C++ algunos de los tipos de datos primitivos son: bool, int, float,
double, y char. Cuál de los dos depende del problema! Además, varios de
los tipos básicos pueden ser modificados utilizando uno o más de estos
modificadores:
no firmado
corto
> largo
Para ser más específico:
bool sólo puede contener dos valores posibles: es decir, verdadero o falso
tipo int puede contener un número entero entre -231 y +231 - 1
tipo int no firmado puede contener un número entero entre 0 y +232 - 1
tipo int corto puede contener un número entero entre -215 y +215 - 1
tipo corto sin signo int puede contener un número entero entre 0 y +216 -
1
El flotador tipo float puede mantener una precisión única real
tipo doble puede sostener una verdadera precisión doble
tipo char puede contener un solo carácter.
En muchos lenguajes de ordenador, hay un tipo de variable más llamado
"string", que puede contener una secuencia de caracteres. Estas secuencias
de caracteres, o "strings" están generalmente encerradas en comillas
dobles o simples, como "Hola Zeus","Tengo 25 años de edad", y así
sucesivamente. C++ también soporta cadenas, pero tenga en cuenta que
una cadena en C++ no es un tipo de datos primitivos. Sin entrar en detalles,
una cadena en C++ se declara de la misma manera que se declara un tipo
de datos primitivos como int, byte o doble, pero internamente C++
almacena y maneja los datos de una manera muy diferente.
Para declarar una variable, la forma general de la sentencia C++ es escribir
nombre[ = valor]; donde
tipo puede ser bool, int, int, int corto, int corto sin signo, int corto, la cuerda
y así sucesivamente
nombre es un nombre de variable válido
valor puede ser cualquier valor inicial válido
A continuación se presentan algunos ejemplos de cómo declarar variables.
número int;
Bool encontrado;
cadena nombre_de_primero;
string nombre_estudiante;
En C++ se puede declarar y asignar directamente un valor inicial a una
variable. El siguiente código

fragment
int num = 5;
string name = "Hera";
char favorite_character = 'w';
is equivalent to
int num;
string name;
char favorite_character;
num = 5;
name = "Hera";
carácter favorito =' w';
Nota: En C+++, puede representar la acción de asignar un valor a una
variable utilizando el signo igual (=). Esto es equivalente a la flecha
izquierda en los diagramas de flujo.
Nota: Tenga en cuenta que en C++ se asigna un valor a una variable de
tipo string utilizando comillas dobles (" pero se asigna un valor a una
variable de tipo char usando comillas simples ('').
Por último, pero no menos importante, puede declarar muchas variables
del mismo tipo en una línea, separándolas con comas.
double x, y, z;
long int w = 3, u = 2;

5.8 Cómo declarar constantes en C++


Puede declarar constantes en C++ utilizando la palabra clave const.
const type name = value;
Los siguientes ejemplos muestran cómo declarar constantes en C++.
const double VAT = 0.22;
const int NUMBER OF PLAYERS = 25;
const string FAV0RITE_S0NG = "We are the world";
const char FAVORITE CHARACTER = 'w';
Nota: Tenga en cuenta que C++ requiere que todas las declaraciones
terminen con un punto y coma (;).
Una vez definida una constante, su valor no puede modificarse mientras
el programa está en ejecución.

5.9 Preguntas de revisión: Verdadero/Falso


Elija verdadero o falso para cada una de las siguientes afirmaciones.
1. Una variable es una ubicación en el dispositivo de
almacenamiento secundario del equipo.
2. Para un operador de valoración en un diagrama de flujo, puede
utilizar una flecha a la izquierda o a la derecha.
3. Una variable puede cambiar su contenido mientras el programa se
ejecuta.
4. Una constante puede cambiar su contenido mientras el programa
se ejecuta.
5. El valor 10.0 es un entero.
6. Una variable booleana sólo puede contener uno de dos valores.
7. El valor "10.0" entre comillas dobles es un valor real.
8. En informática, una cuerda es algo que puedes usar.
9. El nombre de una variable puede contener números.
10. Una variable puede cambiar su nombre mientras el programa se
ejecuta.
11. El nombre de una variable no puede ser un número.
12. El nombre de una constante debe ser siempre descriptivo.
13. El nombre del estudiante no es un nombre de variable válido.
14. Entonces nombre_nombre_de_estudiante es una constante válida.
15. En C++, el nombre de una constante puede contener letras
mayúsculas y minúsculas.
16. En C++, no es necesario declarar una variable.
17. En C++, siempre debe declarar al menos una constante.

5.10 Preguntas de revisión: Elección múltiple


Seleccione la respuesta correcta para cada una de las siguientes
afirmaciones.
1. Una variable es un lugar en
a. un disco duro.
b. un disco DVD.
c. una unidad flash USB.
d. todo lo anterior
e. ninguno de los anteriores
2. Una variable puede contener
a. un valor a la vez.
b. muchos valores a la vez.
c. todo lo anterior
d. ninguno de los anteriores
3. Uso de constantes en un programa C++
a. ayuda a los programadores a evitar completamente errores tipográficos.
b. ayuda a los programadores a evitar el uso de la división y la
multiplicación.
c. todo lo anterior
d. ninguno de los anteriores
4. ¿Cuál de los siguientes es un entero?
a. 5.0
b. -5
c. “5”
d. ninguno de los anteriores es un número entero.
5. Una variable booleana puede mantener el valor
a. uno.
b. cero.
c. cierto.
d."Verdadero".
e. ninguno de los anteriores
6. En C++, las cuerdas son
a. Incluidos entre comillas.
b. Incluidos en comillas dobles.
c. los dos anteriores
7. ¿Cuál de las siguientes variables no es una variable C++ válida?
a. nombre_de_ciudad
b. Nombre de la ciudad
c. nombre de la ciudad
8. Puede definir una constante utilizando la palabra clave const. Una
vez definida una constante,
a. nunca puede ser cambiado.
b. puede ser cambiado usando la palabra clave const de nuevo.
c. Ambas cosas son correctas.
5.11 Ejercicios de revisión
Realice los siguientes ejercicios.
1. Haga coincidir cada elemento de la primera columna con un elemento
de la segunda columna.
Value Data Type
1. "True” a. Boolean
2. 123 b. Real
3. False c. String
4. 10.0 d. Integer

2. Match each element from the first column with one element from the
second column.
Data Data Type
1. The name of a person a. Boolean
2. The age of a person b. Real
3. The result of the division 5/2 c. Integer
4. Is it black or is it white? d. String
Capítulo 6
Manejo de entradas y salidas
6.1 ¿Qué sentencia emite mensajes y resultados en la pantalla del usuario?
Un diagrama de flujo utiliza el paralelogramo oblicuo y la palabra
reservada "Escribir" para mostrar un mensaje o los resultados finales en la
pantalla del usuario.
+
/ Write
/ argl, arg2, arg3, ...
donde argl, argl, arg2 y arg3 pueden ser variables, expresiones o incluso
cadenas encerradas en comillas dobles.
El paralelogramo oblicuo que usted acaba de ver es equivalente a
En C++, puede obtener el mismo resultado utilizando la expresión
argl < argl< argl < arg2 << arg3<<< arg3<< argl << argl< arg2 <<
arg3<<< arg3<<< <<....;
o la secuencia equivalente de expresiones.
cout << argl;
cout << arg2;
cout << arg3;
Recuerda! Si desea visualizar un string en la pantalla, el string debe estar
entre comillas dobles.
El siguiente programa C++:
iinclude <iostream>
using namespace std;
int main() {
int a;
a = 5 + 6;
cout « "The sum of 5 and 6 is " « a;
return 0;
}
muestra el mensaje mostrado en la Figura 6-1.
La suma de 5 y 6 es 11.
Figura 6-1A Cadena mostrada en la pantalla
Nota: Por favor note el espacio insertado al final de la primera cadena en
C++, justo después de la palabra "es". Si lo quitas, el número 11 se
acercará demasiado a la última palabra y el resultado en la pantalla será
La suma de 5 y 6 esll
También puede calcular el resultado de una expresión matemática
directamente en una sentencia cout. La siguiente declaración:
iinclude <iostream>
using namespace std;
int main() {
cout « "The sum of 5 and 6 is " << 5 + 6;
return 0;
muestra exactamente el mismo mensaje que las instrucciones de la Figura
6-1.
Nota: Tenga en cuenta que C++ requiere que todas las declaraciones se
terminen con un punto y coma.
6.2 Cómo imprimir caracteres especiales
Mire cuidadosamente el siguiente ejemplo:
iinclude <iostream>
using namespace std;
int main() {
cout « "Good Morning";
cout « "Good Evening";
cout « "Good Night";
return 0;
1
or use the endl manipulator as follows
iinclude <iostream>
using namespace std;
int main() {
cout « "Good Morning" « endl;
cout « "Good Evening" « endl;
cout « "Good Night" « endl;
return 0;
1
The output result now appears in Figure 6-3.
E3
Figure 6-3 The output result now displays line breaks
Keep in mind that the same result can also be accomplished with one
single statement
cout « "Good Morning\nGood Evening\nGood Night\n";
Another interesting sequence of characters is the \t which can be used to
output a “tab stop.” The tab character (\t) is useful for aligning output
iinclude <iostream>
using namespace std;
int main() {
cout « "Good Morning\t";
cout « "Good Evening\n";
cout « "Good Afternoon\t";
cout « "Good Night";
return 0;
}
The output result now appears in Figure 6-4.
Figure 6-4 The output result now displays tabs
Of course, the same result can be accomplished with one single statement.
cout « "Good Morning\tGood Evening\nGood Afternoon\tGood Night";

6.3 ¿Qué sentencia permite al usuario introducir datos?


¿Recuerda las tres etapas principales de la creación de un algoritmo o de
un programa informático? La primera etapa fue la fase de "introducción
de datos", en la que el ordenador permite al usuario introducir datos como
los números, el nombre, la dirección o el año de nacimiento.
Un diagrama de flujo utiliza el paralelogramo oblicuo y la palabra
reservada "Leer" para permitir que un usuario introduzca sus datos.
±
Read
var_name1, var_name2, var_name3,...
~i=
donde var_name1, var_name2 y var_name3 sólo deben ser variables.
El paralelogramo oblicuo que usted acaba de ver es equivalente a
//Leer una cadena que incluye espacios y pestañas del teclado
getline(cin, var_name_str);
where
> var_name can be a variable of any type.
> var_name_str can be any variable of type string.
Nota: Por favor, tenga en cuenta que cin considera los caracteres de
espacio como caracteres de terminación cuando lee una cadena desde el
teclado. Por lo tanto, leer una cadena con cin significa siempre leer una
sola palabra, no una frase o una frase entera. Para leer una línea entera se
puede utilizar la función getline ().
La expresión cin también se puede utilizar para solicitar más de un valor.
El siguiente fragmento de código permite al usuario introducir su nombre
y edad.
string name;
int age;
cin » name » age;
cout « "Wow, you are already" « age « "years old," « name « "!");
Sin embargo, podría ser aún mejor si, antes de cada entrada de datos, se
visualiza un mensaje de "aviso". Esto hace que el programa sea más fácil
de usar. Por ejemplo, mire el siguiente programa.
string name;
int age;
cout « "What is your name? ";
cin » name;
cout « "What is your age? ";
cin » age;
cout « "Wow, you are already" « age « "years old," « name « "!");
El fragmento del diagrama de flujo correspondiente tiene este aspecto.
i
Write
'What is your name?'

Read
name

Write
'What is your age?"

Read
age

Write
'Wow, you are already", age, "years old,", name,"!
Ahora, cuando un usuario ejecuta su programa, sabe exactamente qué
introducir.
Nota: En este libro hay una sutil diferencia entre las palabras "avisa" y
"deja". Cuando la redacción de un ejercicio dice "Escribe un programa
C++ que le pide al usuario que ingrese..." esto significa que debe incluir
un mensaje rápido antes de cada entrada de datos. Por otro lado, cuando
la redacción de un ejercicio dice "Escribe un programa C++ que permita
al usuario entrar..." esto significa que no es necesario que incluyas un
mensaje rápido; es decir, ¡no está mal incluir uno pero no tienes que
hacerlo!
6.4 Preguntas de Revisión: Verdadero/Falso
Elija verdadero o falso para cada una de las siguientes afirmaciones.
1. En C++, la palabra cin es una palabra reservada.

2. La sentencia cout se puede utilizar para mostrar un mensaje o el


contenido de una variable.
3. Cuando se ejecuta la sentencia cin, el flujo de ejecución se
interrumpe hasta que el usuario ha introducido un valor.
4. Se puede utilizar una sola sentencia, cin, para introducir varios
valores de datos.
5. Antes de la entrada de datos, siempre debe aparecer un mensaje
de aviso.
6.5 Preguntas de revisión: Elección múltiple
Seleccione la respuesta correcta para cada una de las siguientes
afirmaciones.
1. Aparece el mensaje "Hola" en la pantalla.
a. la palabra Hola (sin las comillas dobles).
b. la palabra "Hola" (incluidas las comillas dobles).
c. el contenido de la variable Hola.
d. ninguno de los anteriores
2. Aparece el mensaje "Hola Hermes".
a. el mensaje Hola Hermes.
b. la palabra Hola en una línea y la palabra Hermes en la siguiente.
c. el mensaje HelloHermes.
d. el mensaje Hello\nHermes.
e. ninguno de los anteriores
3. La sentencia cin "datal data2
a. permite al usuario introducir un valor y asignarlo a la variable datal.
Variable
data2 permanece vacío.
b. permite al usuario introducir un valor y asignarlo a la variable
datal_data2.
c. permite al usuario introducir dos valores y asignarlos a variables datal
y datos2.
d. ninguno de los anteriores
Capítulo 7
Operadores
7.1 El operador de asignación de valores
El operador más comúnmente utilizado en C++ es el operador de
valoración (=). Por ejemplo, la sentencia C++
x = 5;
asigna un valor de 5 a la variable x.
Como se lee en el Capítulo 5, esto es equivalente a la flecha izquierda
usada en los diagramas de flujo.
±
x <- 5
*
Probablemente la flecha izquierda utilizada en un diagrama de flujo es más
conveniente y clara que el signo operador de asignación de valor (=)
porque muestra de una manera más gráfica que el valor o el resultado de
una expresión de la derecha se asigna a una variable de la izquierda.
¡Ten cuidado! El signo (=) no es equivalente al utilizado en matemáticas.
En matemáticas, la expresión x = 5 se lee como "x es igual a 5". Sin
embargo, en C++ la expresión x = 5 se lee como "asignar el valor 5 a x" o
"set x igual a 5". Parecen iguales pero actúan de manera diferente!
En matemáticas, las dos líneas siguientes son equivalentes:
x=y+z
y+z=x
El primero puede leerse como "x es igual a la suma de y y z" y el segundo
como "la suma de y y z es igual a x".
Por otra parte, en C++, las dos afirmaciones siguientes no son en absoluto
equivalentes. De hecho, ¡el segundo se considera equivocado!
x = y + z;
y + z = x;
La primera afirmación parece bastante correcta. Puede leerse como "Setx
igual a la suma de y y z" o "Assign the sum ofy and z to x.".
¿Pero qué hay del segundo? ¡Piensa! ¿Es posible asignar el valor de x a y
+ z?
La respuesta es obviamente un gran "¡NO!"
Recuerda! En C++, la variable en el lado izquierdo del signo (=) representa
una región en la memoria principal (RAM) donde se puede almacenar un
valor. Por lo tanto, en el lado izquierdo sólo debe existir una única
variable! Sin embargo, en el lado derecho puede haber un número, una
variable, una cadena o incluso una expresión matemática compleja.
In Table 7-1 you can find some examples of value assignments.
Table 7-1 Examples of Value Assignments
a= 9 Assign a value of 9 to variable a.
b= c Assign the content of variable c to variable b.
d= "Hello Zeus" Assign the string Hello Zeus to variable d.
, ,, Calculate the sum of the contents of variables a and b and
assign the result to variable d.
Calcular la suma del contenido de la variable a y 1 y
b = a = a + 1 asigna el resultado a la variable b. Tenga en cuenta que el
contenido de la variable a no se altera.
Calcular la suma del contenido de la variable a y 1 y
a = a = a + 1 devuelve el resultado a la variable a. En otras palabras,
aumenta la variable a por una.
¿Confundido sobre el último? ¿Estás pensando en tu profesor de
matemáticas ahora mismo?
¿Qué diría si hubiera escrito a = a + 1 en la pizarra? ¿Puedes pensar
personalmente en un número que sea igual al número más uno? ¿Estás
chiflado? Esto significa que 5 es igual a 6 y 10 es igual a 11!
Obviamente, las cosas son diferentes en informática. La declaración a = a
= a + 1 es absolutamente aceptable! Indica a la CPU que recupere el valor
de la variable a de la memoria principal (RAM), que aumente el valor en
uno, y que asigne el resultado de nuevo a la variable a. El valor antiguo de
la variable a es reemplazado por el nuevo.
¿Todavía no lo entiendes? Veamos cómo la CPU y la memoria principal
(RAM) cooperan entre sí para ejecutar la sentencia A <- A + 1 (esto es lo
mismo que la sentencia a = a = a + 1 en C++).
Digamos que hay una región en la memoria, llamada A y que contiene el
número 13.
Cuando un programa ordena a la CPU que ejecute la sentencia
A^A+1
the following procedure is executed:
> the number 13 is transferred from the RAM's region named A to
the CPU;
> the CPU calculates the sum of 13 and 1; and
> the result, 14, is transferred from the CPU to the RAM's region
named A
replacing the existing number, 13.
After execution, the RAM looks like this.
Main Memory se ejecuta el siguiente procedimiento:
el número 13 se transfiere desde la región de la RAM denominada A a la
CPU;
la CPU calcula la suma de 13 y 1; y
el resultado, 14, se transfiere desde la CPU a la región de la RAM
denominada A
sustituyendo el número actual, 13.
Después de la ejecución, la RAM se ve así.
Memoria principal
7.2 Operadores aritméticos
Al igual que todos los lenguajes de programación de alto nivel, C++ es
compatible con casi todos los tipos de operadores aritméticos.
Aritmética
Descripción del operador
+ Adición
Sustracción
Multiplicación
División / División
Módulo (resto después de división entera)

Los cuatro primeros operadores son sencillos y no necesitan más


explicaciones.
El operador del módulo (%) devuelve el resto de una división entera, lo
que significa que
a = 13 % 3
asigna un valor de 1 a la variable a.
Nota: En C++, el operador del módulo (%) no se puede utilizar con
números de punto flotante.
Por ejemplo, la operación 13,4 % 4 no se puede realizar.
Nota: Por favor, tenga en cuenta que los diagramas de flujo son un método
suelto usado para representar un algoritmo. Aunque el uso del operador
del módulo (%) está permitido en los diagramas de flujo, este libro utiliza
el operador MOD comúnmente aceptado en su lugar! Por ejemplo, la
expresión C++ b = 13 % 3 se representa en un diagrama de flujo como
l
b + 13 MOD 3
1
En matemáticas, como ya saben, se les permite usar paréntesis, así como
brackets y corchetes.
Sin embargo, en C++ no existen los brackets y brackets. Los paréntesis
son todo lo que tienes; por lo tanto, la misma expresión debe ser escrita
sando paréntesis en vez de frenillos o corchetes.
y = 5 / 2 * (3 + 2 * (4 + 7 + (7 - 4 / 3)) );
Otra cosa que es legal en matemáticas pero no en C++ es que puedes
saltarte el operador de multiplicación y escribir 3x, que significa "3 veces
x". En C++, sin embargo, siempre debe utilizar un asterisco en cualquier
lugar donde exista una operación de multiplicación. Este es uno de los
errores más comunes que los programadores novatos cometen cuando
escriben expresiones matemáticas en C++.
7.3 ¿Cuál es la precedencia de los operadores aritméticos?
Los operadores aritméticos siguen las mismas reglas de precedencia que
en matemáticas, y éstas son: primero se realizan la multiplicación y
división, después la suma y la resta.
Operadores aritméticos de mayor precedencia
£ ■■■
Precedencia inferior
Cuando la multiplicación y división existen en la misma expresión, y
puesto que ambas son de la misma precedencia, se realizan de izquierda a
derecha (de la misma manera que se lee), lo que significa que la expresión
y=6/3*2
es equivalente a y = |? 2, y asigna un valor de 4 a la variable y, (la división
se realiza antes de la multiplicación).
Sin embargo, si desea que la multiplicación se realice antes de la división,
puede utilizar paréntesis para modificar la precedencia, es decir, si desea
que la multiplicación se realice antes de la división:
y = 6 / (3*2)
que es un juguete equivalente =
(20 + 3) + 12 + 8 / 4 * 3
23 + 12 +8/4*
1
23 + 12 i
+2*
1
23 +
1 12 +6
35 +6
1
i
41

7.4 Operadores de asignación de compuestos


C++ ofrece un conjunto especial de operadores conocidos como
operadores de asignación compuesta, que pueden ayudarle a escribir
código más rápido.
Descripción del operador Ejemplo Equivalente a
+= Addition assignment a += b a = a + b
-= Subtraction assignment a -= b a = a - b
*_ Multiplication assignment a *= b a = a * b
/= Division assignment a /= b a = a / b
%= Modulus assignment a %= b a = a % b

Mirando a la columna "Equivalente a", se hace claro que el mismo


resultado puede ser alcanzado sólo usando la asignación clásica (=)
operador. Así que la pregunta que surge aquí es ¿por qué existen estos
operadores?
La respuesta es simple: es cuestión de conveniencia. Una vez que
empiezas a usarlas, tu vida encuentra un significado diferente!
Nota: Por favor, tenga en cuenta que los diagramas de flujo son un método
suelto para representar un algoritmo. Aunque el uso de operadores de
asignación compuesta está permitido en los diagramas de flujo, este libro
usa sólo los operadores comúnmente aceptados que se muestran en la
columna "Equivalente a". Por ejemplo, la sentencia C++ a += b se
representa en un diagrama de flujo como
_^L_
a +- a + b
~r
Ejercicio 7.4-1 ¿Qué declaraciones C++ son correctas sintácticamente?
¿Cuál de las siguientes sentencias de asignación C++ es sintácticamente
correcta?
i. fb
II
CD V. a = COWS; ix. a = true;
ii. 10 = b; vi. a + b = 40; X. a 9— 0 .
o— Z r
iii. a b = a b + 1; vii. a = 3 b; xi. a II
iv. a = "COWS"; viii. a = "true"; xii. a
=* 2;

Solución
i. Correcto. Asigna el valor entero -10 a la variable a.
ii. Incorrecto. En el lado izquierdo del operador de asignación, sólo
pueden existir variables.
iii. Correcto. Aumenta la variable a b por uno.
iv. Correcto. Asigna la cadena (el texto) VACAS a la variable a.
v. Correcto. Asigna el contenido de las VACAS constantes a la variable a.
vi. Incorrecto. En el lado izquierdo del operador de asignación, sólo
puede existir una variable.
vii. Incorrecto. Debería haber sido escrito como a = 3 * b.
viii. Correcto. Asigna la cadena verdadera a la variable a.
ix. Correcto. Asigna el valor verdadero a la variable a.
x. Correcto. Esto es equivalente a a = un % 2.
xi. Correcto. Esto es equivalente a a = a + 1
xii. Incorrecto. Debería haber sido escrito como >= 2 (que es
equivalente a a = a * 2)
Ejercicio 7.4-2 Encontrar Tipos de Variables
¿Cuál es el tipo de cada una de las siguientes variables?
i. a = 15; iii. b = "15";
ii. anchura = "10 metros"; iv. temp = 13.5;
Solución
i. El valor 15 pertenece al conjunto de números enteros, por lo que
la variable a es un número entero.
ii. El "10 metros" es texto, por lo tanto la variable width es una
cadena.
iii. El "15" es una cadena de texto, por lo tanto la variable b es una
cadena.
iv. El valor 13.5 pertenece al conjunto de números reales, por lo que
la variable temp es
real.
v. El valor verdadero es booleano, por lo tanto la variable b es booleana.
vi. El valor true es un texto, por lo tanto la variable b es una cadena.

7.5 Operadores en aumento/disminución


Sumar 1 a un número, o restar 1 de un número, son tan comunes en los
programas informáticos que C++ incorpora un conjunto especial de
operadores para hacer esto. C++ soporta dos tipos de operadores
incrementantes y decrecientes:
Operadores de pre-incrementos/decrementos
operadores post-incrementos/decrementos
Los operadores de pre-incrementos/decrementos se colocan antes del
nombre de la variable.
Los operadores de post-incrementos/decrementos se colocan después del
nombre de la variable.
Estos cuatro tipos de operadores se muestran aquí.
Descripción del operador Ejemplo Equivalente a
Incremento previo Incremento de una variable por ++a, * a = a = a + 1
Pre-decrementar Disminuir una variable por una -a; a = a - 1
Incremento posterior Incrementar una variable por una variable a++; a =
a+1
Post-decrementario Disminuir una variable por una variable a--; a = a - 1

Una vez más, al ver la columna "Equivalente a", queda claro que se puede
lograr el mismo resultado utilizando el operador de asignación clásico (=).
Sin embargo, es mucho más sofisticado y productivo utilizar estos nuevos
operadores. Al principio puede que los odies, ¡pero con el paso de los años
te van a encantar!
Veamos un ejemplo con un operador de pre-incrementos, a = 5;
++a; //Esto es equivalente a a = a + 1
b = a;
cout « a « endl;
cout « b « endl;
y otro con un operador post-incrementante.

a = 5;
a++; //This is equivalent to a = a + 1
b = a;
cout « a « endl;
cout « b « endl;
En ambos ejemplos se asigna un valor de 6 a la variable b! ¿Dónde está la
trampa? ¿Son estos dos ejemplos equivalentes? La respuesta es "sí", pero
sólo en estos dos ejemplos.
En otros casos es probable que la respuesta sea "no".
¡Vamos a ver esa diferencia! La regla es que un operador de pre-
incremento/disminución realiza la operación de incremento/disminución
primero y luego entrega el nuevo valor.
Un operador posterior al incremento/disminución entrega primero el valor
antiguo y luego realiza la operación de incremento/disminución. Observe
cuidadosamente los dos ejemplos siguientes.
a = 5;
b = ++a;
cout « a « endl; //Outputs: 6
cout « b « endl; //Outputs: 6
and
a = 5;
b = a++;
cout « a « endl;
cout « b « endl;
En el primer ejemplo, la variable a es incrementada en uno y luego su
nuevo valor es asignado a la variable b. Al final, ambas variables
contienen un valor de 6. En el primer ejemplo, la variable a es
incrementada en uno y luego su nuevo valor es asignado a la variable b.
Al final, ambas variables contienen un valor de 6.
En el segundo ejemplo, el valor 5 de la variable a se asigna a la variable
b, y luego la variable a se incrementa en uno. Al final, la variable a
contiene un valor de 6, mientras que la variable b contiene un valor de 5!
Nota: Los cortes dobles después de las declaraciones de costura indican
que el texto que sigue es un comentario; por lo tanto, nunca se ejecuta.
7.6 Operadores de String
Hay dos operadores que se pueden utilizar para concatenar (juntar)
cadenas.
Concatenación a = "Hola" + " allí";
+= Asignación de concatenación a += "Hola"; a = a + "Hola";
Nota: Unir dos cuerdas separadas en una sola se llama "concatenación".
El siguiente ejemplo muestra "¿Qué pasa, amigo?"
iinclude <iostream>
using namespace std;
int main() {
string a, b, c;
a = "What's ";
c = a + b;
c += "dude?";
cout « c;
return 0;
Ejercicio 7.6-1 Nombres de concentración
Escriba un programa C++ que le indique al usuario que introduzca su
nombre y apellido (asignado a dos variables diferentes) y luego los une en
una sola cadena (concatenación).
Solución
Aquí se muestra el programa C++.
iinclude <iostream>
using namespace std;
int main() {
string first_name, last_name, full_name;
cout « "Enter first name:
cin » first_name;
cout « "Enter last name:
cin » last_name;
full_name = first_name + " " + last_name;
cout « full_name;
return 0;
Nota: Por favor note el espacio extra que se agrega entre el nombre y el
apellido.
7.7 Preguntas de revisión: Verdadero/Falso
Elija verdadero o falso para cada una de las siguientes afirmaciones.
1. La sentencia x = 5 puede leerse como "Variable x es igual a 5."
2. El operador de valoración asigna el resultado de una expresión a
una variable.
3. Una cadena puede ser asignada a una variable sólo usando la
sentencia cin.
4. La sentencia 5 = y = y asigna el valor 5 a la variable y.
5. En el lado derecho de un operador de valoración siempre debe
existir un operador aritmético.
6. En el lado izquierdo de un operador de valoración pueden existir
más de una variable.
7. No se puede utilizar la misma variable en ambos lados de un
operador de valoración.
8. La sentencia a = a = a + 1 decrementos variable a por uno.
9. En C++, la palabra MOD es una palabra reservada.
10. La sentencia x = 0 % 5 asigna un valor de 5 a la variable x.
11. La operación 5 % 0 no es posible.
12. La división y multiplicación tienen la mayor prioridad entre los
operadores aritméticos.
13. Cuando los operadores de división y multiplicación coexisten en
una expresión, las operaciones de multiplicación se realizan antes que la
división.
14. La expresión 8 / 4 * 2 es igual a 1.
15. La expresión 4 + 6 / 6 + 4 es igual a 9.
16. La expresión a + b + c + c / 3 calcula el valor medio de tres
números.
17. La declaración a += 1 es equivalente a a++.
18. La expresión a = "true" asigna un valor booleano a la variable a.
19. La sentencia a = 2 a duplica el contenido de la variable a.
20. Las expresiones a+++ y ++a son completamente equivalentes.
21. La sentencia a = a = a++ - a--; siempre asigna un valor de -1 a la
variable a.
22. La expresión a = "George"+ " Malkovich" asigna el valor
GeorgeMalkovich a la variable a.
23. El siguiente fragmento de código satisface la propiedad de la
definición.

int a, b;
double x;
cin » a;
cin » b;
x = a / (b - 7) ;
cout « x « endl;
7.8 Preguntas de revisión: Elección múltiple
Seleccione la respuesta correcta para cada una de las siguientes
afirmaciones.
1. ¿Cuál de las siguientes sentencias C++ asigna un valor de 10 a la
variable a?
a. 10 = a. 10 = a;
b. a <-10;
c. a = 100 / 10;
d. ninguno de los anteriores
2. La declaración a = bean debe leerse como
a. Asignar el contenido de la variable a a a la variable b.
b. la variable b es igual a la variable a.
c. Asignar el contenido de la variable b a la variable a.
d. ninguno de los anteriores
La expresión 0 % 10 + 2 es igual a
a. 7.
b. 2.
c. 12.
d. ninguno de los anteriores
¿Cuál de las siguientes sentencias C++ es sintácticamente correcta?
a. a = 4 * 2 y - 8 / (4 * q);
b. a = 4 * 2 * y - 8 / 4 * q);
c. a = 4 * 2 * y - 8 / (4 */ q);
d. ninguno de los anteriores

¿Cuál de las siguientes sentencias C++ incrementa la variable a por una y


luego asigna su valor a la variable b?
a. b = a + 1;
b. b = a++;
C. b = ++a;
d. todo lo anterior
¿Cuál de las siguientes sentencias C++ asigna el valor George Malkovich
a la variable a?
a. a = "George" + "+" Malkovich ";
b. a = "George" + " Malkovich";
c. a = "George " + "Malkovich";
d. todo lo anterior
El siguiente fragmento de código
x = 2;
x++;
no satisface la propiedad de
a. finitud.
b. la definición.
c. eficacia.
d. ninguno de los anteriores
El siguiente fragmento de código
int a;
doble x;
cin "a;
x = 1 / a;
no satisface la propiedad de
a. finitud.
b. entrada
c. eficacia.
d. ninguno de los anteriores
7.9 Ejercicios de revisión
Realice los siguientes ejercicios.
1. ¿Cuál de las siguientes sentencias de asignación C++ es
sintácticamente correcta?
i. a <- a + 1; vi. a = 40";
ii. a += b; vii. a = b -5;
iii. a b = a b + 1; viii. a =+ "true";
iv. a = a++; ix. fdadstwsdgfgw = 1;
v. a = hello; X. **a;
¿Cuál es el tipo de cada una de las siguientes variables?
i. a = "false"; iii. b=" 15 meters"; v. b = 13.0;
ii. w = false; iv. weight = "40"; vi. b = 13;
Haga coincidir cada elemento de la primera columna con un elemento de
la segunda columna.
Result
i. 1/2 a. 100
ii. 1/2*2 b. 0.25
iii. 0%10*10 c. 0
iv. 10 % 2 + 7 d. 0.5
e. 7
f. 1
¿Qué se visualiza en la pantalla después de ejecutar cada uno de los
siguientes fragmentos de código?
i. a = 5; ii. a - 9;
b = a * a + 1; b=a/3* a;
cout « b++ « endl; cout « ++b « endl;
¿Qué se visualiza en la pantalla después de ejecutar cada uno de los
siguientes fragmentos de código?
i. a = 5; ii. a - 5;
a = a++; a = ++a;
cout « a « endl; cout « a « endl;
3.
6. ¿Cuál es el resultado de cada una de las siguientes operaciones?
i. 21 % 5
ii. 10 % 2
iii. 11 % 2
iv. 10 % 6 % 3
v. 0%3
vi. 100 / 10 % 3

¿Qué se muestra en pantalla después de ejecutar cada uno de los siguientes


fragmentos de código?
Calcular el resultado de la expresión
b * (a % b) + a / b
para cada uno de los siguientes casos.
i. a = 10, b = 5 ii. a = 10, b = 4
10. ¿Qué se visualiza en la pantalla después de ejecutar el siguiente
fragmento de código?
a = "My name is";
a += " ";
a = a + "George Malkovich";
cout << a << endl;
11. Rellene los espacios en cada uno de los siguientes fragmentos de
código para que muestren un valor de 5.
a = 2;
a=a- ;
cout << a << endl;

a = 4;
b = a * 0.5;
b += a;
a=b- ;
cout << a << endl;
Capítulo 8
Tablas de trazas
8.1 ¿Qué es una tabla de trazas?
Una tabla de trazas es una técnica utilizada para probar algoritmos o
programas de ordenador en busca de errores lógicos que ocurren mientras
el algoritmo o programa se ejecuta.
La tabla trace simula el flujo de ejecución. Las expresiones se ejecutan
paso a paso y los valores de las variables cambian a medida que se ejecuta
una expresión de asignación.
Las tablas de trazos son típicamente usadas por programadores novatos
para ayudarles a visualizar cómo funciona un algoritmo o programa en
particular. Las tablas de seguimiento también pueden ayudar a los
programadores avanzados a detectar errores lógicos.
Aquí se muestra una tabla de trazas típica.
Paso Estado de cuenta Notas variable variable2 variable3
Veamos una tabla de trazas en acción! Para el siguiente programa C++ se
crea una tabla trace para determinar los valores de las variables en cada
paso.
#include <iostream>
using namespace std;
int main() {
int x, y,
x= 10;
y= 15;
z= x*y
z++;
cout << z
return 0;

}
z
?
Ugly = "Beautiful";
Beautiful = "Ugly";
Handsome = Ugly;
cout « "Beautiful";
cout « Ugly;
cout « Handsome;
return 0;
}
Solution
Vamos a crear una tabla de trazas para encontrar el resultado de salida
Declaración de pasos
Aparece el texto "Beautifur".
Aparece el texto "Beautifur".
Aparece la cadena "Beautiful".
Ejercicio 8.1-2 Intercambio de valores de variables
Escribe un programa C++ que permita al usuario introducir dos valores,
en las variables a y b. Al final del programa, las dos variables deben
intercambiar sus valores. Por ejemplo, si las variables a y b contienen los
valores 5 y 7 respectivamente, después de intercambiar sus valores, la
variable a debe contener el valor 7 y la variable b debe contener el valor
5!
Solución
El siguiente programa, aunque parezca correcto, es erróneo y realmente
no intercambia los valores de las variables a y b!
jfinclude <iostream>
using namespace std;
int main() {
int a, b;
cin » a;
cin » b;
a = b;
b = a;
cout << ; a
cout << : b
return 0;
endl;

1
Veamos por qué! Supongamos que el usuario introduce dos valores, 5 y 7.
La tabla de trazas se muestra aquí.
Step Statement Notes 3 b
1 cin » a User enters the value 5 5 ?
2 cin » b User enters the value 7 5 7
3 a=b The value of variable b is assigned to variable
a. Value 5 is lost! 7 7
D b=a The value of variable a is assigned to variable
b 7 7
5 cout « a « endl The value 7 is displayed
6 cout « b « endl The value 7 is displayed

¡Oops! ¿Dónde está el valor 5?


La solución no era tan obvia después de todo! Entonces, ¿cómo cambias
los valores de todos modos?
Considere dos vasos: un vaso de jugo de naranja (llamado vaso A) y un
vaso de jugo de limón (llamado vaso B). Si quieres intercambiar su
contenido, todo lo que tienes que hacer es encontrar y usar un vaso extra
vacío (llamado vidrio C).
Vaciar el contenido del vaso A (jugo de naranja) en el vaso C.
ABC
Vaciar el contenido del vaso B (jugo de limón) en el vaso A.
ABC
Vaciar el contenido del vaso C (jugo de naranja) en el vaso B.
ABC
Cambio realizado con éxito!
Puede seguir los mismos pasos para intercambiar el contenido de dos
variables en C++.
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a;
cin >> b;
c= a; //Empty the contents of glass
A (orange juice) into glass C
a= b; //Empty the contents of glass
B (lemon juice) into glass A
b= c; //Empty the contents of glass
C (orange juice) into glass B
cout << a << endl;
cout << b << endl;
return 0;
}
Nota: Tenga en cuenta los cortes dobles después de cada una de las tres
declaraciones de asignación.
El texto después de las barras dobles se considera un comentario y nunca
se ejecuta.
Ejercicio 8.1-3 Intercambio de valores de variables - Un segundo enfoque
Escribe un programa C++ que permita al usuario introducir dos valores
numéricos, en las variables a y b.
Al final, las dos variables deberían intercambiar sus valores.
Solución
Dado que las variables sólo contienen valores numéricos, se puede utilizar
el siguiente C+++
program.
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a;
cin >> b;
a =a +b
b =a -b
a =a -b

cout << a << endl;


cout << b << endl;
return 0;
}
Nota: En comparación con el ejercicio anterior, la única desventaja
importante de este método es que no puede intercambiar el contenido de
variables alfanuméricas (cuerdas).
Ejercicio 8.1-4 Crear una tabla de trazas
Cree una tabla trace para determinar los valores de las variables en cada
paso del programa C++ para tres ejecuciones diferentes.
Los valores de entrada para las tres ejecuciones son: (i) 0,3, (iij 4,5 y (Hi)
10.

jfinclude <iostream>
using namespace std;
int main() {
double a, b, c;
cin » b;
c = 3;
c = c * b;
a = 10 * c % 10;
cout « a;
return 0;
}
Solution
For the input value of 0.3, the trace table looks like this.
2 c= 3 ? 10 3
3 c= c*b ? 10 30
4 a= 10 * c % 10 0 10 30
cout
The value 0 is displayed

Exercise 8.1-5 Creating a Trace Table


Create a trace table to determine the values of the variables in each step
when a value of 3 is entered.
jfinclude <iostream>
using namespace std;
int main() {
double a, b, c, d;
cm » a;
b = a + 10;
a = b * (a - 3) ;
c = 3 * b / 6;
d = c * c;
d—;
cout « d;
return 0;
Solution
For the input value of 3, the trace table looks like this.
8.2 Review Questions: True/False
Choose true or false for each of the following statements.
1. A trace table is a technique for testing a computer.
2. Trace tables help a programmer find errors in a computer program.
3. You cannot write a computer program without first creating its
corresponding trace table.
4. In order to swap the values of two integer variables, you always
need an extra variable.
8.3 Review Exercises
Complete the following exercises.
1. Create a trace table to determine the values of the variables in each
step of the C++ program for three different executions.
The input values for the three executions are: (i) 3, (ii) 4, and (iii) 1.
#include <iostream>
using namespace std;
int main() {
int a, b, c, d;
cin >> a;
a = (a + 1) * (a + 1) + 6 / 3 * 2 + 20;
b = a % 13;
c = b % 7;
d = a * b * c;
cout << a << ", " << b << ", " << c << ", " << d;
return 0;
}
2. Create a trace table to determine the values of the variables in each
step of the C++ program for two different executions.
The input values for the two executions are: (i) 3, 4; and (ii) 4, 4
#include <iostream>
using namespace std;
int main() {
double a, b, c, d, e;
cin >> a;
cin >> b;
c = a + b;
d = 1 + a / b * c + 2;
e = c + d;
c += d + e;
e--;
d -= c + d % c;
cout << c << ", " << d << ", " << e;
return 0;
}
Chapter 9
Using NetBeans IDE
9.1 Creating a New C++Project
So far, you have learned some really good basics about C++ programs.
Now it’s time to learn how to enter programs into the computer, execute
them, see how they perform, and see how they display the results.
The first thing you must do is create a new C++ project. The NetBeans
IDE provides a wizard to help you do that. Start the NetBeans IDE, and
from its main menu select
"File->New Project..." as shown in Figure 9-1.
O NetBeans IDE 8.0.2 '
File] Edit View Navigate Source Refactor Run Debug Team Tools
Window Help
£ New Project...
ffl New File...
££ Open Project...
Open Recent Project
Close Project
Close Other Projects
Close All Projects
Open File...
Hnon Rur&nf Filn
Figura 9-1 Iniciar un nuevo proyecto C++ desde NetBeans IDE
Aparecerá el asistente "Nuevo proyecto", que le guiará a través de los
pasos que siguen.
1. En la pantalla "Nuevo proyecto" del asistente, en "Seleccionar
proyecto", seleccione "C++ Aplicación" como se muestra en la Figura 9-
2. A continuación, haga clic en el botón "Siguiente".

Figura 9-2 Selección de la aplicación C++ en Proyectos


2. Verá la pantalla "Nueva aplicación C++" del asistente. En
"Nombre y ubicación", en el campo "Nombre del proyecto", escriba
"testingProject" como se muestra en la Figura 9-3. Deje todos los demás
campos sin modificar. A continuación, haga clic en el botón "Siguiente".
Figura 9-3 Selección del nombre y la ubicación de un nuevo proyecto C++
3. Haga clic en el botón "Finalizar".
El proyecto se crea y se abre en su IDE NetBeans. Debería ver los
siguientes componentes (vea la Figura 9-4):
la ventana Proyectos, que contiene una vista de árbol de los componentes
de los proyectos, incluidos los archivos fuente, las bibliotecas de las que
puede depender el código, etcétera. Encuentre y haga doble clic en el
archivo testingProject-> Source Files->main. cpp.
la ventana del Editor de fuentes con el archivo llamado "main. cpp" que
acaba de abrir. En este archivo puede escribir su código C++. Por
supuesto, un solo proyecto puede contener muchos de estos archivos.
Figura 9-4 Visualización de las ventanas "Proyectos" y "Editor de fuentes"
en NetBeans IDE
9.2 Escribir y ejecutar un programa C++
Acaba de ver cómo crear un nuevo proyecto C++. Escribamos ahora el
siguiente programa (¡Terrorífico, y bastante horroroso!) C++ e intentemos
ejecutarlo.

jfinclude <iostream>
using namespace std;
int main() {
cout « "Hello World";
return 0;
}
En la ventana "main. cpp", borra todo y escribe sólo el primer carácter de
la sentencia jfinclude pulsando la tecla "#" en el teclado. Aparece una
ventana emergente, como se muestra en la Figura 9-5. Esta ventana
contiene todas las sentencias C++ disponibles, y otros elementos que
comienzan con el carácter "#".
Figura 9-5 La pantalla emergente en la ventana del Editor de fuentes
Puede resaltar una selección utilizando las teclas de flecha arriba y abajo
del teclado.
Escriba el segundo carácter "i" de la sentencia #include. Ahora las
opciones se han reducido como se muestra en la Figura 9-6.

Figure 9-6 The popup screen in the Source Editor window


Select the option = induce and hit "Enter «J" key. The statement is
automatically entered into your program. Complete the statement by
writing <iostream>. Then, continue typing the rest of the C++ program (as
shown in Figure 9-7). Your NetBeans IDE should look like this.

Figure 9-7 Entering a C++ program in the "main.cpp" file

Now let's try to execute the program! From the main menu, select "Run -
> Run
Project" or hit the F6 key. The C++ program executes and the output is
displayed in the "Output" window as shown in Figure 9-8.
Q testingproject - NetBeans IDE 8.0.2 (na-]|t-
File Edit View Navigate Source Refactor Run Debug Team Tools
Window Help Search (Ctrl+I)
B H testingProject
E0 Si Header Flies
E-flS Resource Files
Source Files
1 ffi maln.cpp
S-fiB Test Files
El# Important Flies Source History | IE) ® ■ -f1^. »|v ffl
1
2
3
4
5
6 tinclude <iostream> * *
using namespace std;
B int main() { -
cout « "Hello World"; _
return 0;
L)
- Nevrgetor 381, Q,
© malnQ
ffl > ® main > *
Output-testingPro]«ct [Run] K| S
Figura 9-8 Visualización de los resultados del programa ejecutado en la
ventana de Salida
Felicitaciones! Acaba de escribir y ejecutar su primer programa C++!
Ahora escribamos otro programa C++, uno que le pida al usuario que
introduzca su nombre. Escriba las siguientes declaraciones C++ en el IDE
NetBeans y pulse F6 para ejecutar el proyecto.

pro ject_9_2
jfinclude <iostream>
using namespace std;
int main() {
string name;
cout « "Enter your name:
cin » name;
cout « "Hello " « name « endl;
cout « "How do you do?" « endl;
return 0;
Recuerda! Puede ejecutar un proyecto seleccionando "Run ->Run Project"
en el menú principal, o pulsando la tecla F6.
Una vez ejecutado el programa, en la ventana "Output" se visualiza el
mensaje "Enter your name". El programa espera a que usted ingrese su
nombre, como se muestra en la Figura 9-9.
Output-testingProject (Run] E31 E
Enter your name:
Figura 9-9 Ver un aviso en la ventana de Salida
Escriba su nombre y presione la tecla "Enter *>". Una vez hecho esto, el
equipo continúa ejecutando el resto de las sentencias. Cuando finaliza la
ejecución, la salida final es como se muestra en la Figura 9-10.
Output - testingProject (Run) »| B
n
> Enter your name: Zeus A
to Hello Zeus =
How do you do?
a —
RUN SUCCESSFUL (total time: 38s) -

Figura 9-10 Responder al prompt en la ventana de Salida


9.3 ¿Qué significa "depuración"?
La depuración es el proceso de encontrar y reducir el número de defectos
(bugs) en un programa de ordenador, para que funcione como se espera.
Hay un mito sobre el origen del término "depuración". En 1940, mientras
Grace Hopper trabajaba en una computadora Mark II en la Universidad de
Harvard, sus asociados descubrieron un error (una polilla) atascada en un
relé (un interruptor eléctrico). Este fallo estaba bloqueando el correcto
funcionamiento de la computadora Mark II. Así que, mientras sus
asociados trataban de eliminar el error, Grace Hopper comentó que
estaban "depurando" el sistema!
9.4 Depuración de programas C++ con NetBeans IDE
Como usted ya sabe, cuando alguien escribe código en un lenguaje de alto
nivel hay dos tipos de errores que puede cometer: errores de sintaxis y
errores lógicos.
NetBeans IDE proporciona todas las herramientas necesarias para
ayudarle a depurar sus programas y encontrar los errores.
Errores en la sintaxis de depuración
Afortunadamente, el IDE NetBeans detecta errores de sintaxis mientras
escribes (o cuando intentas ejecutar el proyecto) y los subraya con una
línea roja ondulada como se muestra en la Figura 9-11.
Start Pape »|@main.cpp «|
Todo lo que tiene que hacer es corregir el error correspondiente y la línea
roja desaparecerá inmediatamente. Sin embargo, si no está seguro de lo
que está mal con su código, simplemente puede colocar el cursor del ratón
en el signo de exclamación rojo. NetBeans IDE intentará ayudarle
mostrando una ventana emergente con una breve explicación del error,
como se muestra en la Figura 9-12.
4 E 3 unexpected token: b
5 unexpected token: 4
6 —
7 (Alt-Enter shows hints)
9 a = b # 4;

Figura 9-12 El IDE NetBeans muestra una explicación de un error de


sintaxis
Depuración de errores lógicos ejecutando programas paso a paso
En comparación con los errores de sintaxis, los errores lógicos son más
difíciles de encontrar. Ya que el IDE de NetBeans no puede detectar y
subrayar errores lógicos, usted está solo! Veamos el siguiente programa
C++, por ejemplo. Se le pide al usuario que introduzca dos números y
calcula y muestra su suma. Sin embargo, ¡contiene un error lógico!

project_9 4a
jfinclude <iostream>
using namespace std;
int main() {
double s, a, b, S;
s = 0;
cout « "Enter 1st value:
cin » a;
cout « "Enter 2nd value:
cin » b;
S = a + b;
cout « "The sum is: " « s;
return 0;
Si escribe este programa en el IDE NetBeans, notará que no hay ni siquiera
un signo de exclamación que indique un error. Sin embargo, si ejecuta el
programa e introduce dos valores, 5 y 2, puede ver por sí mismo que
aunque la suma de 5 y 2 es 7, NetBeans IDE insiste en que es cero, como
se muestra en la Figura 9-13. El IDE insiste en que es cero.
QQB»!l9ei^g:
Figura 9-13 Visualización del resultado de un error lógico en la ventana
de Salida
¿Qué demonios está pasando? Por supuesto, para un programador experto,
corregir este error sería pan comido. Pero para ti, un principiante, aunque
te esfuerces mucho, no encuentras nada malo. Entonces, ¿dónde está el
error?
A veces los ojos humanos se cansan tanto que no pueden ver lo obvio. Así
que, ¡tratemos de usar algo de magia! Intentemos ejecutar el programa
paso a paso utilizando el depurador.
Esto le da la oportunidad de observar el flujo de ejecución y observar más
de cerca los valores actuales de las variables en cada paso.
Sitúe el cursor en la línea donde existe la sentencia s = 0 y pulse la
combinación de teclas CTRL+F8. Un rectángulo rosa aparece en el
margen gris y la línea correspondiente tiene fondo rosa resaltando como
se muestra en la Figura 9-14.
ED int main() {
double s, a, b, S;
5 = 0;
cout « "Enter 1st value:
cin » a;
cout « "Enter 2nd value:
Figura 9-14 Uso del depurador en el IDE NetBeans
Ahora, inicie el depurador seleccionando "Debug-> Debug Project" en el
menú principal o pulsando la combinación de teclas CTRL+F5. Haciendo
esto, habilita el depurador y se muestran más iconos en la barra de
herramientas.
El contador de programas (icono de flecha verde en el margen gris) se
detiene en la primera línea del programa, tal como se muestra en la Figura
9-15.
3 □ int main() {
4 double s, a, b, S;
5
| s = 0;
cout « "Enter 1st value: ";
cin >> a;
cout « "Enter 2nd value: ";
Figura 9-15 Uso del depurador en el IDE NetBeans
Aviso: El contador de programa le muestra, en cualquier momento, qué
sentencia es la siguiente que se debe ejecutar.
Haga clic en el icono "Step Over" de la barra de herramientas. Esta acción
ejecuta la sentencia s = 0, y el contador de programa se desplaza a la
segunda sentencia C++, que es la siguiente a ejecutar.
En el menú principal, seleccione "Window->Debugging->Variables". En
la ventana que aparece, se pueden ver todas las variables declaradas en la
memoria principal (RAM) y el valor que contienen durante cada paso de
ejecución como se muestra en la Figura 9-16.
Variables K | Output - teatifKjProjecI (Debug} ]. Call Stack |
Breakpoints | a.
13 Name Value isi
© <Enter new watch>

i£] ❖s 0 Q

2.679992872460716ie+i59 □
vb 6.0409628779608391e+159 □
«>S 1.8222382500290773e-154 □
-
Figura 9-16 Todas las variables declaradas se muestran en la ventana
Variables del depurador

Nota: Tenga en cuenta que, actualmente, sólo la variable s contiene un


valor significativo.
Vuelva a hacer clic en el icono de la barra de herramientas "Paso a paso".
Se ejecuta la segunda sentencia.
Puede volver a la ventana "Salida" y ver el resultado de salida (vea Figura
9-17).
Variables-. | Output-testngPrafect (Debug] ** | Call Stack | Breakpoints |
s
a
» Enter 1st value: | A.
m
Figure 9-17 Viewing a prompt in the Output window
igure 9-17 Visualización de un aviso en la ventana de salida

Vuelva a hacer clic en el icono de la barra de herramientas "Paso a paso".


Se ejecuta la tercera sentencia C++ y el programa espera a que se
introduzca un valor. Sitúe el cursor dentro de la ventana "Salida", escriba
el valor 5 y pulse la tecla "Enter P".
El contador de programas se mueve a la cuarta sentencia C++ Haga clic
dos veces en el icono de la barra de herramientas "Step Over". Esta acción
ejecuta las declaraciones C++ cuarta y quinta. Sitúe el cursor dentro de la
ventana "Salida", escriba el valor 2 y pulse la tecla "Enter" J ".
El contador de programa se mueve a la sexta sentencia C++. Haga clic de
nuevo en el icono de la barra de herramientas "Step Over" l". Se ejecuta
la expresión S = a + b. Lo que se esperaba aquí era la suma de 5.0 y 2.0,
que es 7.0, que se asignaría a la variable s. En lugar de esto, el valor 7.0
se asigna a la variable S (con una S mayúscula), como se muestra en la
Figura 9-18.
Variables K | Output - testingProject (Debug) | Call Stack |
Breakpoints J s.
Figura 9-18 Las variables y sus valores se muestran en la ventana
Variables del depurador.
Ahora es más evidente para ti! Declaró erróneamente dos variables en la
memoria principal (RAM), la variable s y la variable S con mayúscula S.
Así, cuando el flujo de ejecución pasa a la última sentencia, se muestra el
valor 0 en lugar del valor 7 "La suma es:" s ".
Acaba de encontrar el error! Haga clic en el icono de la barra de
herramientas "Finish Debugger Session" 0 para cancelar la ejecución,
corregir el error cambiando la variable S a s y ya está listo!
Acabas de realizar tu primera depuración! Vuelva a ejecutar el programa
y verá que éste calcula y muestra la suma correctamente.
Depuración de errores lógicos añadiendo puntos de interrupción
La depuración paso a paso tiene una gran desventaja. Tienes que hacer clic
en el botón "Step Over".
icono de la barra de herramientas © una y otra vez hasta que llegue a la
posición donde el error puede ser. ¿Puedes imaginarte haciendo esto en un
programa grande?
Para los programas grandes hay otro enfoque. Si sospecha que el error se
encuentra al final del programa, no hay necesidad de depurar todo desde
el principio. Puede agregar un marcador (llamado "breakpoint") donde
piense que el error podría ser, ejecute el programa y cuando el flujo de
ejecución alcance ese breakpoint, el flujo de ejecución se detendrá
automáticamente. A continuación, puede examinar más de cerca los
valores actuales de las variables en la posición donde se ha interrumpido
el programa.
Nota: Cuando el programa se detiene, tiene dos opciones para reanudar la
ejecución:
puede añadir un segundo breakpoint en alguna parte del programa, hacer
clic en el icono de la barra de herramientas © "Continuar" y permitir que
el programa continúe la ejecución hasta ese nuevo breakpoint; o bien,
puede utilizar el icono de la barra de herramientas "Step Over" I®] y
ejecutar el programa paso a paso a continuación.
El siguiente programa C++ le pide al usuario que introduzca dos valores
y calcula su valor promedio.
Sin embargo, el programa contiene un error lógico. Cuando el usuario
introduce los valores 10 y 12, se visualiza el valor 16 en lugar de 11.
project_9_4b
jfinclude <iostream>
using namespace std;
int main() {
double a, b, average;
cout « "Enter 1st value:
cin » a;
cout « "Enter 2nd value:
cin » b;
average = a + b / 2;
cout « "The average value is: " « average;
return 0;
Usted sospecha que el problema está en algún lugar al final del programa.
Sin embargo, no desea depurar todo el programa, sino sólo la parte en la
que puede estar el error. Por lo tanto, tratemos de agregar un punto de
ruptura en la sentencia average = a + b / 2 (ver Figura 9-19). Hay dos
maneras de hacer esto: puede hacer clic en el margen gris izquierdo en el
número de línea correspondiente, o puede colocar el cursor en la línea de
interés y presionar la combinación de teclas CTRL+F8.

cin » a;
cout « "Enter 2nd value:
cin » b;
average = a + b / 2;
cout « "The average value is: " « average;
Figura 9-19 Añadir un breakpoint a un programa
Nota: Usted sabe que se ha configurado un punto de ruptura cuando el
rectángulo rosa D aparece en el margen gris y la línea correspondiente
tiene fondo rosa resaltando Hit CTRL+F5 para iniciar el depurador.
Introduzca los valores 10 y 12 en la ventana de salida. Notará que justo
después de ingresar el segundo número y presionar la tecla "Enter <J", el
flujo de ejecución se detiene en el punto de interrupción (vea que el
resaltado del punto de interrupción rosa se reemplaza por el resaltado
verde del contador de programas).
Recuerda! Puede depurar un proyecto seleccionando "Depurar ->Debug
Project" en el menú principal o pulsando la combinación de teclas
CTRL+F5.
Ahora puede examinar más de cerca los valores actuales de las variables.
Las variables a y b contienen los valores 10.0 y 12.0 respectivamente,
como deberían, por lo que no hay nada malo con la entrada de datos, como
se muestra en la Figura 9-20.
Variables S8 [output ,| Call Stack Breakpoints | Q
(H Name Value [®]
© < Enter newwatch>
>3 10 □

❖b 12 □

Figure 9-20 Viewing the current values of the variables in the Variables
window
Click on the "Step Over” &!il toolbar icon once. The statement
average = a + b / 2 executes and the main memory (RAM] now contains
the following values (see Figure 9-21],
Variables ■ [Output | Call Stack | J 3

Figura 9-21 Visualización de los valores actuales de las variables en la


ventana Variables

¡Ahí está! Acaba de encontrar la expresión que erróneamente asigna un


valor de 16.0, en lugar de 11.0, al promedio variable! Y ahora viene la
parte difícil; ¡debería considerar por qué sucede esto!
Después de dos días de pensar, ¡se hace evidente! Acababas de olvidarte
de encerrar a + b dentro de los paréntesis; por lo tanto, sólo la variable b
se dividió por 2. Haga clic en el icono de la barra de herramientas "Finish
Debugger Session" ®, elimine todos los puntos de interrupción, corrija el
error encerrando un + b dentro de los paréntesis y ya está listo! Vuelva a
ejecutar el programa y compruebe ahora que calcula y visualiza
correctamente el valor medio.
Nota: Puede eliminar un breakpoint de la misma manera que lo agregó:
haga clic en el margen gris izquierdo en el número de línea
correspondiente, o coloque el cursor en la línea que contiene un breakpoint
y presione la combinación de teclas CTRL+F8.
9.5 Ejercicios de revisión
Realice los siguientes ejercicios.
1. Escriba el siguiente programa C++ en el IDE NetBeans y ejecútelo
paso a paso. Determinar por qué no calcula correctamente la suma de 1 +
3 + 5.

jfinclude <iostream>
using namespace std;
int main() {
int SS, SI, S3, S5, S;
SS = 0;
SI = 1;
S3 = 3;
S5 = 5;
S = SI + S3 + SS;
cout « S;
return 0;
1
2. Cree una tabla trace para determinar los valores de las variables
en cada paso del programa C++ para dos ejecuciones diferentes. A
continuación, escriba el programa en el IDE NetBeans, ejecútelo paso a
paso y confirme los resultados.
Los valores de entrada para las dos ejecuciones son: (i) 5,5; y (ii) 4,8.
jfinclude <iostream>
using namespace std;
int raainf) {
double a, b, c, d, e;
cin » a;
cin » b;
c=a+b;
d=5+a/b*c+2;
e = c - d;
c -= d + c;
e--;
d -= c + a % c;
cout << c << ", " << d << ", " << e;
return 0;
}
3. Cree una tabla trace para determinar los valores de las variables
en cada paso del programa C++ para tres ejecuciones diferentes. A
continuación, escriba el programa en el IDE NetBeans, ejecútelo paso a
paso y confirme los resultados.
Los valores de entrada para las tres ejecuciones son: (i) 0.50, (ii) 3, y (iii)
15. Los valores de entrada para las tres ejecuciones son: (i) 0.50, (ii) 3, y
(iii) 15.
#include <iostream>
using namespace std;
int main() {
int a;
double b, c;
cin >> b;
c = 5;
c = c * b;
a = 10 * c % 10;
cout << a;
return 0;
}
Revisar preguntas en "Comenzando con C++"
Conteste las siguientes preguntas.
1. ¿Qué es un algoritmo?
2. Déle el algoritmo para hacer una taza de café.
3. ¿Cuáles son las cinco propiedades de los algoritmos?
4. ¿Puede un algoritmo ejecutarse para siempre?
5. ¿Qué es un programa de ordenador?
6. ¿Cuáles son las tres partes involucradas en un algoritmo?
7. ¿Cuáles son las tres etapas que componen un programa de
ordenador?
8. ¿Puede un programa informático constar de dos etapas?
9. ¿Qué es un diagrama de flujo?
10. ¿Se puede introducir un diagrama de flujo en una computadora tal
como está?
11. ¿Cuáles son los símbolos básicos que usan los diagramas de flujo?
12. ¿Qué significa el término "palabras reservadas"?
13. ¿Qué es la programación estructurada?
14. ¿Cuáles son las tres estructuras de control fundamentales de la
programación estructurada?
15. Proporcione un ejemplo de cada estructura de control utilizando
diagramas de flujo.
16. ¿Puede un programador escribir programas C++ en un editor de
texto?
17. ¿Qué es un error de sintaxis? Dé un ejemplo.
18. ¿Qué es un error lógico? Dé un ejemplo.
19. ¿Qué tipo de error es causado por una palabra clave mal escrita,
un carácter de puntuación faltante o el uso incorrecto de un operador?
20. ¿Por qué un programador debe añadir comentarios en su código?
21. ¿Por qué debería un programador escribir programas fáciles de
usar?
22. ¿Qué significa el acrónimo POLA?
23. ¿Qué es una variable?
24. ¿Cuántas variables pueden existir en el lado izquierdo de la flecha
izquierda en los diagramas de flujo?
25. ¿En qué parte de un ordenador se almacenan los valores de las
variables?
26. ¿Qué es una constante?
27. ¿Cómo se pueden utilizar las constantes para ayudar a los
programadores?
28. ¿Por qué un programa de computadora debe evitar las operaciones
de división y multiplicación siempre que sea posible?
29. ¿Cuáles son los cuatro tipos fundamentales de variables y
constantes en C++?
30. ¿Qué significa la frase "declarar una variable"?
31. ¿Cómo se declara una variable en C++? Da un ejemplo.
32. ¿Cómo se declara una constante en C++? Da un ejemplo.
33. ¿Qué símbolo se utiliza en los diagramas de flujo para mostrar un
mensaje?
34. ¿Qué secuencia especial de caracteres se utiliza en C++ para
generar un salto de línea?
35. ¿Qué símbolo se utiliza en los diagramas de flujo para permitir
que el usuario introduzca datos?
36. ¿Qué símbolo se utiliza en C++ como operador de valoración y
cómo se representa en un diagrama de flujo?
37. ¿Qué operadores aritméticos soporta C++?
38. ¿Qué es un operador de módulo y cómo se representa
habitualmente en los diagramas de flujo?
39. Resuma las reglas para la precedencia de operadores aritméticos.
40. ¿Qué operadores de asignación compuesta soporta C++?
41. ¿Qué operadores incrementales/disminuyentes soporta C++?
42. ¿Qué operadores de string soporta C++?
43. ¿Qué es una tabla de trazas?
44. ¿Cuáles son los beneficios de usar una tabla de rastreo?
45. Describa los pasos para intercambiar el contenido (ya sea
numérico o alfanumérico) de dos variables.
46. En este libro se han propuesto dos métodos para intercambiar los
valores de dos variables. ¿Cuál es mejor, y por qué?
47. ¿Qué significa el término "depuración"?
48. Describa la forma en que NetBeans IDE le ayuda a encontrar
errores de sintaxis.
49. Describa las formas en que NetBeans IDE le ayuda a encontrar
errores lógicos.
Sección 3
Estructuras de control de secuencia
Capítulo 10
Introducción a las estructuras de control de secuencia
10.1 ¿Qué es la Estructura de Control de Secuencia?
La "Estructura de control de secuencia" se refiere a la ejecución línea por
línea mediante la cual se ejecutan secuencialmente las sentencias, en el
mismo orden en que aparecen en el programa.
Pueden, por ejemplo, llevar a cabo una serie de operaciones de lectura o
escritura, operaciones aritméticas o asignaciones a variables.
La estructura de control de secuencia es la más simple de las tres
estructuras de control fundamentales que usted aprendió en el Capítulo 4.
El siguiente programa muestra un ejemplo de sentencias C++ que se
ejecutan secuencialmente.

project_10_1
#include <iostream>
using namespace std;
int main() {
double a, b;
cout << "Enter a number: ";
cin >> a;
b = a * a;
cout << "The square of " << a << " is " << b;
return 0;
Ejercicio 10.1-1 Cálculo del área de un paralelogramo
Escribe un programa C++ que calcule y muestre el área de un
paraiieiograma.
Solución
El área de un paralelogramo se puede calcular utilizando la siguiente
fórmula:
Superficie = Base x Altura
En este ejercicio, el usuario introduce valores para Base y Altura y el
programa calcula y muestra el área del paralelogramo. La solución a este
problema se muestra aquí.
project_10_1_1
#include <iostream>
using namespace std;
int main() {
double area, base, height;
cout << "Enter the length of Base: ";
cin >> base;
cout << "Enter the length of Height: ";
cin >> height;
area = base * height;
cout << "The area of the parallelogram is " << area;
return 0;
}
Ejercicio 10.1-2 Cálculo del área de un círculo
Escribe un programa C++ que calcule y muestre el área de un círculo.
Solución
El área de un círculo se puede calcular utilizando la siguiente fórmula:
Area = n ■ Radius2
El valor de n es una cantidad conocida, que es 3.14159. Por lo tanto, el
único valor que el usuario debe introducir es un valor para Radio. La
solución a este problema se muestra aquí.
project_10_1_2a
#include <iostream>
using namespace std;
int main() {
double area, radius;
cout << "Enter the length of Radius: ";
cin >> radius;
area = 3.14159 * radius * radius;
cout << "The area of the circle is " << area;
return 0;
}
A much better approach would be with to use a constant, PI.
project_10_1_2b
#include <iostream>
using namespace std;
const double PI = 3.14159;
int main() {
double area, radius;
cout « "Enter the length of Radius:
cin » radius;
area = PI * radius * radius;
cout « "The area of the circle is " « area;
return 0;
Notice: Please note that the constant PI is declared outside of the function
main.
Exercise 10.1-3 Calculating Fuel Economy
In the United States, a car’s fuel economy is measured in miles per gallon,
or MPG. A car’s MPG can be calculated using the following formula:
miles driven
MPG = —
gallons of gas used
Escriba un programa C++ que le indique al usuario que ingrese el número
total de millas que ha conducido y los galones de gas utilizados. A
continuación, el programa debería calcular y mostrar el MPG del coche.
Solución
Es un caso bastante sencillo. El usuario introduce el número total de millas
que ha conducido y los galones de gasolina utilizados, y luego el programa
debe calcular y mostrar la MPG del coche.
project 10 1 3
iinclude <iostream>
using namespace std;
int main() {
double gallons, miles^driven, mpg;
cout « "Enter miles driven: ";
cin >> miles_driven;
cout « "Enter gallons of gas used: ";
cin » gallons;
mpg = miles_driven / gallons;
cout « "Your car's MPG is: " « mpg;
return 0;
Ejercicio 10.1-4 ¿Dónde está el auto? Cálculo de la distancia recorrida
Un coche arranca desde el reposo y se mueve con una aceleración
constante a lo largo de una carretera horizontal recta durante un tiempo
determinado. Escriba un programa C++ que le solicite al usuario que
ingrese la aceleración y la hora en que el vehículo viajó, y luego calcule y
muestre la distancia recorrida. La fórmula requerida es
1_
S = u0 + — at2
where
> S is the distance the car traveled, in meters (m)
> Uo is the initial velocity (speed) of the car, in meters per second
(m/sec)
> t is the time the car traveled, in seconds (sec)
> a is the acceleration, in meters per second2 (m/sec2)
Solución
Como el coche arranca desde reposo, la velocidad inicial es cero. Así, la
fórmula se convierte en
S = —at2
2
and the C++ program is
project_10_1_4
#include <iostream>
using namespace std;
int main() {
double S, a, t;
cout << "Enter acceleration: ";
cin >> a;
cout << "Enter time traveled: ";
cin >> t;
S = 0.5 * a * t * t;
cout << "Your car traveled " << S << " meters";
return 0;
}
Ejercicio 10.1-5 de Kelvin a Fahrenheit
Escriba un programa C++ que convierta un valor de temperatura de grados
Fahrenheit1 a grados Kelvin equivalente La fórmula requerida es
1,8 x Kelvin = Fahrenheit + 459,67
Solución
La fórmula dada no se puede utilizar en su programa tal como está. En un
lenguaje informático como C++, no está permitido escribir
1,8 * kelvin = fahrenheit + 459,67
Recuerda! En la posición del lado izquierdo del signo (=), sólo puede
existir una sola variable Esta variable es en realidad una región de la RAM
donde se puede almacenar un valor.
El programa convierte grados Fahrenheit a grados Kelvin. El valor para
grados Fahrenheit es un valor conocido y es dado por el usuario, mientras
que el valor para grados Kelvin es lo que el programa C++ debe calcular.
Así que, necesitas resolver para Kelvin. Después de un poco de trabajo, la
fórmula se convierte en
Fahrenheit + 459.67
Kelvin =
1.8
and the C++ program is shown here.
pro j e c t 10_1_5
jfinclude <iostream>
using namespace std;
int main() {
double fahrenheit, kelvin;
cout « "Enter a temperature in Fahrenheit:
cin » fahrenheit;
kelvin = (fahrenheit + 459.67) / 1.8;
cout « "The temperature in Kelvin is " « kelvin;
return 0;
1
Ejercicio 10.1-6 Cálculo del impuesto sobre las ventas
Un empleado necesita un programa para introducir el precio antes de
impuestos de un producto y calcular su precio final. Supongamos un
impuesto sobre el valor añadido (IVA) del 19%.
Solución
El IVA se puede calcular fácilmente. Debe multiplicar el precio antes de
impuestos del producto por el tipo impositivo del impuesto sobre las
ventas. Tenga cuidado: el impuesto sobre el volumen de negocios no es el
precio final, sino sólo el importe del impuesto.
El precio después de impuestos se puede calcular añadiendo el precio
inicial antes de impuestos y el IVA calculado previamente.
En este programa se puede utilizar una constante denominada IVA para el
tipo impositivo del IVA.
project_10_1_6
#include <iostream>
using namespace std;
const double VAT = 0.19;
int main() {
double price_after_tax, price_before_tax, sales_tax;
cout << "Enter the before-tax price of a product: ";
cin >> price_before_tax;
sales_tax = price_before_tax * VAT;
price_after_tax = price_before_tax + sales_tax;
cout << "The after-tax price is: " << price_after_tax;
return 0;
}
Nota: Tenga en cuenta que el IVA constante se declara fuera de la función
principal.
Ejercicio 10.1-7 Calcular un descuento de ventas
Escriba un programa C++ que le solicite al usuario que introduzca el
precio de un artículo y el descuento ofrecido como porcentaje (en una
escala de 0 a 100). El programa debería entonces calcular y visualizar el
nuevo precio.
Solución
El precio final después del descuento se puede calcular restando el importe
de descuento calculado previamente del precio inicial antes del descuento.
project_10_1_7
#include <iostream>
using namespace std;
int main() {
int discount;
double discount_amount, price_after_discount, price_before_discount;
cout << "Enter the price of a product: ";
cin >> price_before_discount;
cout << "Enter the discount offered (0 - 100): ";
cin >> discount;
discount_amount = price_before_discount * discount / 100;
price_after_discount = price_before_discount - discount_amount;
cout << "The price after discount is: " << price_after_discount;
return 0;
}
Ejercicio 10.1-8 Cálculo de la tasa de IVA y el descuento
Escriba un programa C++ que le solicite al usuario que introduzca el
precio antes de impuestos de un artículo y el descuento ofrecido como
porcentaje (en una escala de 0 a 100). El programa debería entonces
calcular y visualizar el nuevo precio. Suponga una tasa de impuestos sobre
las ventas del 19%.
Solución
discount_amount = price_before_discount * discount / 100;
price_after_discount = price_before_discount - discount_amount;
sales_tax = price_after_discount * VAT;
price_after_tax = price_after_discount + sales_tax;
cout << "The discounted after-tax price is: " << price_after_tax;
return 0;
}
10.2 Ejercicios de revisión
Realice los siguientes ejercicios.
1. Escriba un programa C++ que le pida al usuario que introduzca
los valores de base y altura, y luego calcule y muestre el área de un
triángulo.
2. Escriba un programa C++ que le indique al usuario que introduzca
dos ángulos de un triángulo, y luego calcule y muestre el tercer ángulo.
Sugerencia: La suma de las medidas de los ángulos interiores de cualquier
triángulo es de 180 grados.
3. Escriba un programa C++ que le permita al estudiante ingresar sus
calificaciones de cuatro exámenes, y luego calcula y muestra la
calificación promedio.
4. Escriba un programa C++ que le pida al usuario que introduzca un
valor para el radio y luego calcule y muestre el perímetro de un círculo.
5. Escriba un programa C++ que le pida al usuario que ingrese el
cargo por una comida en un restaurante y luego calcule y muestre la
cantidad de 10% propina, 7% impuesto sobre ventas y el total de las tres
cantidades.
6. Un coche arranca desde el reposo y se mueve con una aceleración
constante a lo largo de una carretera horizontal recta durante un tiempo
determinado en segundos. Escribe un programa C++ que indique al
usuario que introduzca la aceleración (en m/sec2) y el tiempo recorrido
(en seg) y luego calcula la distancia recorrida. La fórmula requerida es
1_
S = u0+ -at2
7. Escriba un programa C++ que le indique al usuario que introduzca
una temperatura en grados Fahrenheit, y luego lo convierta en su
equivalente en grados Celsius.
La fórmula requerida es
C _F - 32
5= 9
El Índice de Masa Corporal (IMC) se utiliza a menudo para determinar si
una persona tiene sobrepeso o peso insuficiente para su estatura. La
fórmula utilizada para calcular el IMC es
peso - 703
altura2
Escriba un programa C++ que le indique al usuario que ingrese su peso
(en libras) y altura (en pulgadas), y luego calcule y muestre el IMC del
usuario.
9. Escriba un programa C++ que indique al usuario que introduzca
la tasa de subtotal y propina (en una escala de 0 a 100) y luego calcule la
punta y el total. Por ejemplo, si el usuario ingresa 30 y 10, el programa
C++ debe mostrar' Tip is $3.00 and Total is $33.00 ".
10. Un empleado necesita un programa para introducir el precio antes
de impuestos de tres productos y, a continuación, calcular el precio final
después de impuestos de cada producto, así como su valor medio. Asumir
un impuesto sobre el valor añadido (IVA) del 20%.
11. Un empleado necesita un programa para introducir el precio
después de impuestos de un producto y, a continuación, calcular su precio
antes de impuestos. Asumir un impuesto sobre el valor añadido (IVA) del
20%.
12. Escriba un programa C++ que le pide al usuario que introduzca el
precio inicial de un artículo y el descuento ofrecido como porcentaje (en
una escala de 0 a 100), y luego calcula y muestra el precio final y la
cantidad de dinero ahorrado.
13. Escriba un programa C++ que le indique al usuario que ingrese la
lectura del medidor eléctrico en kilovatios-hora (kWh) al principio y al
final de un mes. El programa debe calcular y mostrar la cantidad de kWh
consumido y la cantidad de dinero que se debe pagar, dado un costo de
cada kWh de $0.06 y un impuesto al valor agregado (IVA) del 20%.
14. Escriba un programa C++ que le indique al usuario que introduzca
dos números, que correspondan al mes actual y al día actual del mes, y
luego calcula el número de días hasta el final del año. Asuma que cada
mes tiene 30 días.
Capítulo 11
Manipulación de números
11.1 Introducción
Al igual que todos los lenguajes de programación de alto nivel, C++
proporciona muchas funciones (métodos) que se pueden utilizar cuando y
donde quiera. Las funciones no son más que un bloque de sentencias
empaquetadas como una unidad que tiene un nombre y realiza una tarea
específica.
Para entender mejor las funciones, tomemos la fórmula iterativa de Heron
que calcula la raíz cuadrada de un número positivo.
donde
y es el número para el que desea encontrar la raíz cuadrada
x "es el valor de iteración n-ésimo de la raíz cuadrada ofy
¡Por favor, no se decepcione! Nadie en este momento calcula la raíz
cuadrada de un número de esta manera. Afortunadamente, C++ incluye
una función para ese propósito! A esta función, que en realidad es un
pequeño subprograma, se le ha dado el nombre sqrt y lo único que tiene
que hacer es llamarla por su nombre y hará el trabajo por usted.
Function sqrt probablemente usa la fórmula iterativa de Heron, o quizás
una fórmula de otro matemático antiguo o moderno. La verdad es que
realmente no te importa!
Lo que realmente importa es que sqrt le da el resultado correcto! Aquí se
muestra un ejemplo.
jfinclude <iostream>
jfinclude <cmath>
using namespace std;
int main() {
double x, y;
cin » x;
y = sqrt(x);
cout « y;
return 0;
Nota: Tenga en cuenta que la función sqrt () está definida en la librería
cmath. Por lo tanto, para poder utilizar la función sqrt, debe incluir el
cmath de la librería utilizando el sentencia ffinclude <cmath> al principio
de su programa.
A pesar de que C++ soporta muchas funciones matemáticas, este capítulo
cubre sólo las absolutamente necesarias para el propósito de este libro. Sin
embargo, si necesitas más información puedes visitar
http://www.cplusplus.com/reference/cmath/ DIFUNDE LA PALABRA-
Nota: Las funciones matemáticas de C++ se utilizan cuando se necesita
calcular una raíz cuadrada, el seno, el coseno, un valor absoluto, etcétera.
11.2 Funciones matemáticas útiles
Absolute value
abs( number )
This returns the absolute value of number. It is defined in the cmath
library.
Example
project 11 2a
jfinclude <iostream>
jfinclude <cmath>
using namespace std;
int main() {
int a, b;
a = -5;
b = abs(a);
cout « abs(a) « endl;
cout « b « endl;
cout « abs(-5.2) « endl;
cout « abs(5.2) « endl;
return 0;
1
Cosine
cos( number )
This returns the cosine of number. The value of number must be expressed
in radians.
It is defined in the cmath library.
Example
project 11 2b
iinclude <iostream>
iinclude <cmath>
using namespace std;
int main() {
double a, p;
p = 3.14159265;
a = cos(2 * p);
cout « a « endl; //outputs: 1
return 0;
}
Integer value
(int)number
This returns the integer value of number.
Example
project 11 2c
iinclude <iostream>
using namespace std;
int main() {
double a = 5.4;
cout << (int)a < < endl; //outputs: 5
cout << (int)34 « endl; //outputs: 34
cout << (int)34. 9 « endl; //outputs: 34
cout << (int)-34 .999 « endl; //outputs: -34
return 0;

Notice: In computer science, type casting is a way of converting a variable


of one data
type into another. Please note that (int) is not a function. It is just a way in
C++ to
turn a real into an integer. Also note that if a real contains a fractional part,
that part
is lost during conversion.
Real value
(double)number
This returns the number as real.
Example
iinclude <iostream>
using namespace std;
int main() {
int a = 5;
cout « (double)a « endl;
cout « (double)34 « endl;
cout « (double)-34 « endl;
cout « a / 2 « endl;
cout « (double)a / 2 « endl;
return 0;
1
Notice: In computer science, type casting is a way of converting a variable
of one data
type into another. Please note that (double) is not a function. It is just a
way in C++ to
turn an integer into a real.
Notice: In C++, the result of the division of two integers is always an
integer. Thus, in
the expression a / 2, since variable a and number 2 are integers, the results
is always
an integer. As shown in the last statement, if you wish a result of type real
you need to
add the (double) casting operator in front of at least one of the operands of
the
division.
Moreover, the statement
cout « (double)a / 2 « endl;
is equivalent to
cout « a / (double)2 « endl;
and to
}
Notice: Please note that M_PI is a constant, not a function. This is why no
parentheses
are used.
Notice: The statement cout.precision(20) sets the maximum number of
digits that
the statement cout displays.
Power
pow( number, exp )
This returns the result of number raised to the power of exp. It is defined
in the cmath
library.
Example
project_11_2f
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a, b, c;
a = 2;
b = 3;
cout << pow(a, b) << endl; //outputs: 8.0
c = pow (3, 2);
cout << c << endl; //outputs: 9.0
return 0;
}
Notice: Function pow () can be used to calculate the square root of a
number as well. It
is known from mathematics that VX=Xz. So, you can write y = pow(x,
1/2) to
calculate the square root of x or you can even write y = pow(x, 1/3) to
calculate
the cube root of x, and so on!
int main() {
//output a random integer between 0 and RAND_MAX
cout « rand()<< endl;
//output a random integer between 0 and RAND_MAX
cout « rand()« endl;
//output a random integer between 0 and RAND_MAX
cout « rand()« endl;
return 0;
}
Pseudo-random numbers appear to be random but actually they are not! If
you
execute the previous program you will find that each time you execute it,
you get
exactly the same sequence of "random" numbers.
This is the same as getting an already mixed up deck of cards and picking
the first
card in order, then the second one, then the third one, and so on. Then you
put the
cards back on the deck in the same order as they were before picking them.
Then you
start again and you pick the first card in order, then the second one, then
the third
one, and so on. Obviously these three cards are the same as those that you
picked
previously. So what you need to do here is to always mix the cards up
before you
start picking them.
In C++ you need to do the same. You need to "mix the cards up.” To do
so, you can
use the srand (time (NULL)) statement at the beginning of your program
as shown in
the example that follows.
Example
project 11 2h
jfinclude <iostream>
jfinclude <ctime>
jfinclude <cstdlib>
using namespace std;
int main() {
srand (time(NULL));
//output a random integer between 0 and RAND_MAX
cout « rand() « endl;
//output a random integer between 0 and RAND_MAX
cout « rand() « endl;
//output a random integer between 0 and RAND_MAX
cout « rand() « endl;
return 0;
}
Notice: Please note that function time () is defined in the library ctime.
If you want a pseudo-random integer between minimum and maximum
you can use the
following pattern
minimum + rand() % (maximum - minimum + 1)
iinclude <iostream>
iinclude <ctime>
iinclude <cstdlib>
using namespace std;
int main() {
srand (time(NULL));
//output a random integer between 2 and 10
cout « 2 + rand() % (10 -2+1) « endl;
//output a random integer between 20 and 25
cout « 20 + rand() % 6 « endl;
return 0;
1
Notice: Random numbers are widely used in computer games. For
example, an
"enemy" may show up at a random time or move in random directions.
Moreover,
random numbers are used in simulation programs, in statistical programs,
in
computer security to encrypt data, and so on.
Round
round( number )
This returns the closest integer. It is defined in the cmath library.
If you want the rounded value of number to a specified precision, you can
use the
following formula:
round(number * pow(10, precision)) / pow(10, precision)
Example
project_l1_2 j
iinclude <iostream>
iinclude <cmath>
using namespace std;
int main() {
double a, y;
a = 5.9;
cout << round(a) << endl;
cout << round(5.4) << endl;
a = 5.312;
y = round(a * pow(10, 2)) / pow(10, 2);
cout << y << endl;
a = 5.315;
y = round(a * pow(10, 2)) / pow(10, 2);
cout << y << endl; //outputs:5.32
//outputs: 2.345
cout << round(2.3447 * 1000) / 1000;
return 0;
}
Sine
sin( number )
This returns the sine of number. The value of number must be expressed
in radians.
Function sin() is defined in the cmath library.
Example
project_11_2k
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a;
a = sin(3 * M_PI / 2);
cout << a << endl; //outputs: -1.0
return 0;
}
Square root
sqrt( number )
This returns the square root of number. It is defined in the cmath library.
Example
project_11_2l
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << sqrt(9) << endl;
cout << sqrt(2) << endl;//outputs: 1.41421
cout.precision(15);
cout << sqrt(2) << endl;//outputs: 1.4142135623731
return 0;
}
Remember! The statement cout.precision(15) sets the maximum number
of digits
that the statement cout displays.
Tangent
tan( number )
This returns the tangent of number. The value of number must be
expressed in radians.
Function tan() is defined in the cmath library.
Example
project_11_2m
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a;
a = tan(10);
cout << a << endl; //outputs: 0.648361
return 0;
}
Exercise 11.2-1 Calculating the Distance Between Two Points
Write a C++ program that prompts the user to enter the coordinates (x, y)
of two points
and then calculates the straight line distance between them. The required
formula is
d = VOi -x2)2 + (yi -y2)2
Solution
In this exercise, you need to use two functions: the pow () function, which
returns the
result of a number raised to a power; and the sqrt() function, which returns
the
square root of a number.
To simplify things, the terms (xi — x2)2 and (yi — y2)2 are calculated
individually
and the results are assigned to two temporary variables.
The C++ program is shown here.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double d, x1, x2, x_temp, y1, y2, y_temp;
cout << "Enter coordinates for point A: ";
cin >> x1;
cin >> y1;
cout << "Enter coordinates for point B: ";
cin >> x2;
cin >> y2;
x_temp = pow(x1 - x2, 2);
y_temp = pow(y1 - y2, 2);
d = sqrt(x_temp + y_temp);
cout << "Distance between points: " << d;
return 0;
}
Now let's see another approach.
You should realize that it is actually possible to nest one function within
another.
Doing that, the result of the nested function is used as an argument for the
outer
function. This is a writing style that most programmers prefer to follow
because it
can save a lot of code lines. Of course, if you nest too many functions, no
one will be
able to understand your code. A nesting of up to four levels is quite
acceptable.
The C++ program that uses nested functions is shown here.
project_11_2_1b
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double d, x1, x2, y1, y2;
cout << "Enter coordinates for point A: ";
cin >> x1;
cin >> y1;
cout << "Enter coordinates for point B: ";
cin >> x2;
cin >> y2;
d = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
cout << "Distance between points: " << d;
return 0;
}
Exercise 11.2-2 How Far Did the Car Travel?
A car starts from rest and moves with a constant acceleration along a
straight
horizontal road for a given distance. Write a C++ program that prompts
the user to
enter the acceleration and the distance the car traveled and then calculates
the time
traveled. The required formula is
1_
S = u0 + — at
where
> S is the distance the car traveled, in meters (m)
> Uo is the initial velocity (speed) of the car, in meters per second
(m/sec)
> t is the time the car traveled, in seconds (sec)
> a is the acceleration, in meters per second2 (m/sec2)
Solution
In C++, you can use the sqrt () function, which returns the square root of
a number.
project_11_2_2
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double S, a, t;
cout << "Enter acceleration: ";
cin >> a;
cout << "Enter distance traveled: ";
cin >> S;
t = sqrt(2 * S / a);
cout << "Your car traveled for " << t << " seconds";
return 0;
}
11.3 Review Questions: True/False
Choose true or false for each of the following statements.
1. In general, functions are small subprograms that solve small
problems.
2. Every programmer must use Heron’s iterative formula to calculate
the
square root of a positive number.
3. The abs () function returns the absolute position of an item.
4. The statement (int) 3.59 returns a result of 3.6.
5. The M_PI constant is equal to 3.14.
6. Thestatementpow(2, 3) returns a result of 9.
7. The rand () function can also return negative random numbers.
8. There is a 50% possibility that the statement y = rand () % 2 will
assign a
value of 1 to variable y.
9. The statement round (3.5 9) returns a result of 4.
10. To calculate the sinus of 90 degrees, you have to write
y = sin (M_PI / 2).
11. The statement y = sqrt (-2) is valid.
12. The following code fragment satisfies the property of definiteness.
double a, b, x;
cin » a;
cin » b;
x = a * sqrt (b) ;
cout « x « endl;
11.4 Review Questions: Multiple Choice
Select the correct answer for each of the following statements.
1. Which of the following calculates the result of the variable a raised
to the
power of 2?
a. y = a * a;
b. y = pow (a, 2) ;
c. y = a*a/a*a;
d. all of the above
2. What is the value of the variable y when the statement y = abs
(+5.2) is
executed?
a. -5.2
b. -5
c. 0.2
d. 5.2
e. 5
f. none of the above
3. Which of the following calculates the sinus of 180 degrees?
a. sin (180)
b. sin (M_PI)
c. all of the above
d. none of the above
4. What is the value of the variable y when the statement y = (int)
(5/2) is
executed?
a. 2.5
b. 3
c. 2
d. 0.5
5. What is the value of the variable y when the statement
y = pow (sqrt (4), 2) is executed?
a. 4
b. 2
c. 8
d. 16
6. What is the value of the variable y when the statement y = round
(5.2) / 2.0
is executed?
a. 2
b. 2.5
c. 2.6
d. none of the above
11.5 Review Exercises
Complete the following exercises.
1. Create a trace table to determine the values of the variables in each
step of
the C++ program for two different executions.
The input values for the two executions are: (i) 9, and (ii) 4.
iinclude <iostream>
jfinclude <cmath>
using namespace std;
int raain() {
double a;
int b, c;
cin » a;
a += 6 / sqrt(a) * 2 + 20;
Chapter 12
Complex Mathematical Expressions
12.1 Writing Complex Mathematical Expressions
In Chapter 7 you learned all about arithmetic operators but little about how
to use
them and how to write your own complex mathematical expressions. In
this chapter,
you are going to learn how easy is to convert mathematical expressions to
C++
statements.
Remember! Arithmetic operators follow the same precedence rules as in
mathematics, which means that multiplication and division are performed
before
addition and subtraction. Moreover, when multiplication and division co-
exist in the
same expression, and since both are of the same precedence, these
operations are
performed left to right
Exercise 12.1-1 Representing Mathematical Expressions in C++
Which of the following C++ statements correctly represent the following
mathematical
expression?
1
10+ z

i. X= =1* 21 / 10 + z V. x= - (1 / 10 1
L Z) ; <r 27
ii. X= =1■ 27 / (10 + z) vi. X= =1 ! (do
+ z) * 27)
iii. X= = 27 / 10 i ■z vii. X= =1 / ( 10
+ z) * 27
iv. X= = 27 / (10 + z) viii. X= =1 / ( 10
+ z) / 27

Solution
i. Wrong. Since the multiplication and the division are performed
before the
addition, this is equivalent to x = —27 + z.
ii. Wrong. An asterisk should have been used for multiplication.
iii. Wrong. Since the division is performed before the addition, this is
. , 27 ,
equivalent to x = — + z.
27
iv. Correct This is equivalent to x =
M 10 +z
v. Wrong. Inside parentheses, the division is performed before the
addition.
This is equivalent to x = 27.
Oops! Now the expression is more complex! In fact, it is much more
complex! So, let’s
take a look at a quite different approach.
The main idea is to break the complex expression into smaller, simpler
expressions
and assign each sub-result to temporary variables. In the end, you can
build the
original expression out of all these temporary variables! This approach is
presented
here.
project_12_l_3a
iinclude <iostream>
using namespace std;
int main() {
double denominator, nominator, tempi, temp2, temp3, w, x, y, z;
cout « "Enter value for x:
cin » x;
cout « "Enter value for w:
cin » w;
cout « "Enter value for z:
cin » z;
tempi = 3 * x * x + 5 * x + 2;
temp2 =7*w-l/z;
temp3 = (3 + x) / 7;
nominator = 5 * tempi / temp2 - z;
denominator = 4 * temp3;
y = nominator / denominator;
cout « "The result is: " « y;
return 0;
You may say, “Okay, but I wasted so many variables and as everybody
knows, each
variable is a portion of main memory. How can / write the original
expression in one
single line and waste less memory?”
This job may be a piece of cake for an advanced programmer, but what
about you?
What about a novice programmer?
The next method will help you write even the most complex mathematical
expressions without any syntax or logic errors! The rule is very simple.
“After
breaking the complex expression into smaller, simpler expressions and
assigning each
sub-resuit to temporary variables, start backwards and replace each
variable with its
assigned expression. Be careful though! When you replace a variable with
an
expression, you must always enclose the expression in parentheses!"
Confused? Don’t be! It’s easier in action. Let’s tiy to rewrite the previous
C++
program. Starting backwards, replace variables nominator and
denominator with
their assigned expressions. The result is
y = (5 * tempi / temp2 - z) / (4 * temp3);
nominator denominator
Notice: Please note the extra parentheses added.
Now you must replace variables tempi, temp2, and temp3 with their
assigned
expressions, and the one-line expression is complete!
y = (5 * (3 * x * x + 5 * x + 2)/(7 * w - 1 / z) - z) / (4 * ((3 + x) / 7));
tempi temp2 temp3
It may look scary at the end but it wasn't that difficult, was it?
The C++ program can now be rewritten
project_12_l_3b
iinclude <iostream>
using namespace std;
int main() {
double w, x, y, z;
cout « "Enter value for x:
cin » x;
cout « "Enter value for w:
cin » w;
cout « "Enter value for z:
cin » z;
y = (5 * (3*x*x + 5*x + 2) / (7 * w - 1 / z) - z) / (4 * ((3 + x) / 7));
cout « "The result is: " « y;
return 0;
12.2 Review Exercises
Complete the following exercises.
1. Match each element from the first table with one or more elements
from the
second table.
Expression
i. 5 / pow(x, 2) * y + pow(x,3)
ii. 5 / (pow(x, 3) * y) + pow(x, 2)
Write the following mathematical expressions in C++ using one line of
code
for each.
(%+3)Sw
70-4 )

Write a C++ program that prompts the user to enter a value for x and then
calculates and displays the result of the following mathematical
expression.
y = Vx(x3 + x2)
Write a C++ program that prompts the user to enter a value for x and then
calculates and displays the result of the following mathematical
expression.
lx
^ 2x + 4(x2 + 4)
Suggestion: Try to write the expression in one line of code.
Write a C++ program that prompts the user to enter a value for x and w
and
then calculates and displays the result of the following mathematical
expression.
(tan(^+5)-tan(f+1))
Suggestion: Tiy to write the expression in one line of code
Write a C++ program that prompts the user to enter a value for x and w
and
then calculates and displays the result of the following mathematical
expression.
y=6x-7(x + 4) + ^V§^TI)(x3 + 3)(x-ir
Suggestion: Tiy to write the expression in one line of code.
Write a C++ program that prompts the user to enter a value for x and w
and
then calculates and displays the result of the following mathematical
expression.
■+
(Sin(^+5)-x) (V7W)2
Suggestion: Tiy to write the expression in one line of code
Write a C++ program that prompts the user to enter the lengths of all three
sides A, B, and C, of a triangle and then calculates and displays the area
of
the triangle. You can use Heron’s formula, which has been known for
nearly
2,000 years!
Area = JS(S - A)(S - B)(S - C)
where 5 is the semi-perimeter
A+B+C
S=

Chapter 13
Exercises With a Quotient and a Remainder
13.1 Introduction
What types of problems might require the use of the quotient and the
remainder of
an integer division? There is no simple answer to that question! However,
quotients
and remainders can be used to:
> split a number into individual digits
> examine if a number is odd or even
> convert an elapsed time (in seconds) to hours, minutes, and
seconds
> convert an amount of money (in USD) to a number of $100 notes,
$50 notes,
$20 notes, and such
> determine if a number is a palindrome
> count the number of digits within a number
> determine how many times a specific digit occurs within a number
Of course, these are some of the uses and certainly you can find so many
others. Next
you will see some exercises that make use of the quotient and the
remainder of
integer division.
Exercise 13.1-1 Calculating the Quotient and Remainder of Integer
Division
Write a C++ program that prompts the user to enter two integers and then
calculates
the quotient and the remainder of the integer division.
Solution
Since C++ doesn’t actually incorporate an arithmetic operator that
calculates the
integer quotient, you can use the (int) casting operator to achieve the same
result.
project 13 1 1
jfinclude <iostream>
using namespace std;
int main() {
int numberl, number2, q, r;
cout « "Enter first number:
cin » numberl;
cout « "Enter second number:
cin » number2;
q = (int)(number1 / number2);
r = numberl % number2;
cout << "Integer Quotient: " << q << "\nInteger Remainder: " << r;
return 0;
}
Notice: In flowcharts, in order to calculate the quotient of an integer
division, you can
use the popular DIV operator. An example is shown here.
i
q ^ numberl DIV number2
Notice: In C++, the result of the division of two integers is always an
integer. Thus, in
the statement q = (int)(number1 / number2), since variables number1 and
number2
are integers, the (int) casting operator is redundant. However, it is a good
practice to
keep it there just for improved readability.
Exercise 13.1-2 Finding the Sum of Digits
Write a C++ program that prompts the user to enter a four-digit integer
and then
calculates the sum of its digits.
Solution
What you should keep in mind here is that the statement
cin >> number;
in the beginning of the program assigns the given four-digit integer to one
single
variable, number, and not to four individual variables.
So, first you must split the integer into its four digits and assign each
digit to a
separate variable. Then you can calculate the sum of these four variables
and get the
required result. There are two approaches available.
First Approach
Let's try to understand the first approach using an arithmetic example.
Take the
number 6753, for example.
First digit = 6 The first digit can be isolated if you divide the given
number by 1000 to get the integer quotient
digit1 = (int)(6753 / 1000)
Remaining digits = 753 The remaining digits can be isolated if you divide
the
given number by 1000 to get the integer remainder
r = 6753 % 1000

Second digit = 7 The second digit can be isolated if you divide the
remaining digits by 100 to get the integer quotient
digit2 = (int)(753 / 100)
Remaining digits = 53 The remaining digits are now
r = 753 % 100
Third digit = 5 The third digit can be isolated if you divide the
remaining digits by 10 to get the integer quotient
digit3 = (int)(53 / 10)
Fourth digit = 3 The last remaining digit, which happens to be the
fourth digit, is
digit4 = 53 % 10
The C++ program that solves this algorithm is shown here.

project_13_1_2a
#include <iostream>
using namespace std;
int main() {
int digit1, digit2, digit3, digit4, number, r, sum;
cout << "Enter a four-digit integer: ";
cin >> number;
digit1 = (int)(number / 1000);
r = number % 1000;
digit2 = (int)(r / 100);
r = r % 100;
digit3 = (int)(r / 10);
digit4 = r % 10;
sum = digit1 + digit2 + digit3 + digit4;
cout << sum;
return 0;
}
The trace table for the program that you have just seen is shown here.
Step Statement Notes number digit1 N
■W
'So
■3 digit3 .9°
■3 1 sum
B cout << "Enter a ... The message “Enter a ...” is displayed

2 cin » number User


enters 6753 ? ? ? 7 7 7
3 digitl = (int)(number / 1000) 6753 6753 6 7
? 7 7 7
D r = number % 1000 6753 6 7 7
7 75
3 7
5 digit2 = (int)(r / 100) 6753 6 7 7
7 75
3 7
6 r = r % 100 6753 6 7 7 7
53 7
n digit3 = (int)(r / 10) 6753 6 7 5
7 53 7
8 digit4 = r % 10 6753 6 7 5 3
53 7
9 sum = digitl+digit2+... 6753 6 7 5
3 53 18
10 cout « sum Value 18 is displayed
To further help you, there is also a general purpose C++ program that can
be used to
split any given integer. Since the length of your program depends on the
number of
digits, N, all you have to do is write N-l pairs of statements.
For example, if you want to split a six-digit integer, you need to write five
pairs of
statements.
pro ject_13_l_2b
jfinclude <iostream>
using namespace std;
int main() {
int digitl, digit2, digit3, digit4, digits, digit6, number, r;
}
Second Approach
Once more, let's try to understand the second approach using an arithmetic
example.
Take the same number, 6753, for example.
Fourth digit = 3 The fourth digit can be isolated if you divide the given
number by 10 to get the integer remainder
digit1 = 6753 % 10
Remaining digits = 675 The remaining digits can be isolated if you divide
the given number by 10 to get the integer quotient
r = (int)(6753 / 10)
Third digit = 5 The third digit can be isolated if you divide the
remaining digits by 10 to get the integer remainder
digit3 = 675 % 10
Remaining digits = 67 The remaining digits are now
r = (int) (675 / 10)
Second digit = 7 The second digit can be isolated if you divide the
remaining digits by 10 to get the integer remainder
digit3 = 67 % 10

#include <iostream>
using namespace std;
int main() {
int digit1, digit2, digit3, digit4, number, r, sum;
cout << "Enter a four-digit integer: ";
cin >> number;
digit4 = number % 10;
r = (int)(number / 10);
digit3 = r % 10;
r = (int)(r / 10);
digit2 = r % 10;
digit 1 = (int)(r / 10);
sum = digit1 + digit2 + digit3 + digit4;
cout << sum;
return 0;
}
To further help you, there is also a general purpose C++ program that can
be used to
split any given integer. This program uses the second approach. Once
again, since the
length of your program depends on the number of the digits, N, all you
have to do is
write N-1 pairs of statements.
cout << "Enter a N-digit integer: ";
Exercises With a Quotient and a Remainder 148
!digit2 = r % 10;
jdigitl = (int)(r / 10); (N-1)th pair of statements
For example, if you want to split a five-digit integer, you must use four
pairs of statements.

project_13_1_2d
}
Exercise 13.1-3 Displaying an Elapsed Time
Write a C++ program that prompts the user to enter an integer that
represents an elapsed time in seconds and then displays it in the format
"DD days HH hours MM minutes and SS seconds". For example if the
user enters the number 700005, the message "8 days 2 hours 26 minutes
and 45 seconds" must be displayed.
Solution
As you may already know, there are 60 seconds in a minute, 3600 seconds
in an hour, and 86400 seconds in a day.
Let's try to analyze number 700005 using the first approach.
Days = 8 The number of days can be isolated if you divide the given
integer by 86400 to get the integer quotient
days = (int) (700005 / 86400);
Remaining seconds = 8805 The remaining seconds can be isolated if
you divide the given integer by 86400 to get the integer remainder
r = 700005 % 86400;
Hours = 2 The number of hours can be isolated if you divide the
remaining seconds by 3600 to get the integer quotient
hours = (int)(8805 / 3600);
Remaining seconds = 1605 The remaining seconds are now
r = 8805 % 3600;
Minutes = 26 The number of minutes can be isolated if you divide the
remaining seconds by 60 to get the integer quotient
minutes = (int)(1605 / 60);
Seconds = 45 The last remainder, which happens to be the
number of seconds left, is
seconds = 1605 % 60;
The C++ program for this algorithm is as follows.

project_13_1_3
#include <iostream>
using namespace std;
int main() {
int days, hours, minutes, number, r, seconds;
cout << "Enter a period of time in seconds: ";
cin >> number;
days = (int)(number / 86400); // 60 * 60 * 24 = 86400
r = number % 86400;
hours = (int)(r / 3600); // 60 * 60 = 3600
r = r % 3600;
minutes = (int)(r / 60);
seconds = r % 60;
cout « days « " days " « hours « " hours " « endl;
cout « minutes « " minutes and " << seconds « " seconds";
return 0;
Exercise 13.1-4 Reversing a Number
Write a C++ program that prompts the user to enter a three-digit integer
and then
reverses it. For example, if the user enters the number 375, the number
573 should be
displayed.
Solution
To isolate the three digits of the given number, you can use either first or
second
approach. Afterward, the only difficulty in this exercise is to build the
reversed
number. Take the number 375, for example. The three digits, after
isolation, are
digitl = 3;
digit2 = 7;
digit3 = 5;
You can build the reversed number by simply calculating the sum of the
products:
digit3 x 100 + digit2 * 10 + digitl x l
For a change, you can split the given number using the second approach.
The C++
program will look like this.
pro ject_13_l_4
iinclude <iostream>
using namespace std;
int main() {
int digitl, digit2, digit3, number, r, reversed;
cout « "Enter a three-digit integer: " « endl;
cin » number;
digit3 = number % 10; //This is the rightmost digit
r = (int)(number / 10);
digit2 = r % 10; //This is the digit in the middle
digitl = (int)(r / 10); //This is the leftmost digit
reversed = digit3 * 100 + digit2 * 10 + digitl;
cout « reversed;
return 0;
13.2 Ejercicios de revisión
Realice los siguientes ejercicios.
1. Escriba un programa C++ que le pida al usuario que ingrese
cualquier número entero y luego multiplique su último dígito por 8 y
muestre el resultado.
Sugerencia: Se puede aislar el último dígito de cualquier número entero
utilizando el módulo 10 de operación.
2. Escriba un programa C++ que le pida al usuario que introduzca
un número entero de cinco dígitos y luego lo invierta. Por ejemplo, si el
usuario ingresa el número 32675, se debe mostrar el número 57623.
3. Escriba un programa C++ que le pida al usuario que ingrese un
número entero y luego muestre 1 cuando el número es impar; de lo
contrario, muestra 0. Trate de no usar ninguna estructura de control de
decisiones, ya que aún no ha aprendido nada sobre ellas!
4. Escriba un programa C++ que le pida al usuario que ingrese un
entero y luego muestre 1 cuando el número esté parejo; de lo contrario,
mostrará 0. Trate de no usar ninguna estructura de control de decisiones,
ya que aún no ha aprendido nada sobre ellas!
5. Escriba un programa C++ que le pida al usuario que introduzca
un entero que represente un tiempo transcurrido en segundos y luego lo
muestre en el formato "WW semanas DD días DD días HH horas MM
minutos y SS segundos". Por ejemplo, si el usuario ingresa el número
2000000, debe aparecer el mensaje "3 semanas 23 días 3 horas 33
minutos y 20 segundos".
6. Dentro de un cajero automático de cajeros automáticos hay
billetes de $20, $10, $5 y $1. Escriba un programa C++ que le pida al
usuario que ingrese la cantidad de dinero que desea retirar (utilizando un
valor entero) y luego muestre el menor número de billetes que el cajero
automático debe dar. Por ejemplo, si el usuario ingresa una cantidad de
$76, el programa debe mostrar el mensaje "3 notas de $20,1 nota de
$10,1 nota de $5, y 1 nota de $1".
7. Un robot llega a la luna para realizar algunos experimentos.
Cada uno de los pasos del robot tiene 25 pulgadas de largo. Escriba un
programa C++ que le solicite al usuario que introduzca el número de
pasos que ha realizado el robot y luego calcule y muestre la distancia
recorrida en millas, pies, yardas y pulgadas. Por ejemplo, si la distancia
recorrida es de 100000 pulgadas, el programa debe mostrar el mensaje "1
milla, 1017 yardas, 2 pies y 4 pulgadas".
Se da por supuesto que
1 milla = 63360 pulgadas
1 yarda = 36 pulgadas
1 pie = 12 pulgadas
Capítulo 14
Manipulación de cadenas de texto
14.1 Introducción
En términos generales, una cadena es todo lo que se puede escribir con el
teclado, incluyendo letras, símbolos (como &, * y @) y dígitos. A veces
un programa trata con datos que vienen en forma de cadenas (texto). En
C++, una cuerda siempre está entre comillas dobles como esta:"
Cada sentencia del siguiente ejemplo genera una cadena de texto.
iinclude <iostream>
using namespace std;
int main() {
cout « "Everything enclosed in double quotes is a
cout « "string, even the numbers below:" << endl;
cout « "3, 4, 7" « endl;
cout « "You can even mix letters, symbols and
cout « "numbers like this:" « endl;
cout « "The result of 3 + 4 equals to 4";
return 0;
Las cadenas de texto se encuentran en todas partes, desde procesadores de
texto, navegadores web y programas de mensajería de texto. Muchos
ejercicios en este libro realmente hacen un uso extensivo de las cuerdas.
A pesar de que C++ soporta muchas funciones útiles para manipular
cadenas, este capítulo cubre sólo aquellas funciones que son
absolutamente necesarias para el propósito de este libro.
Sin embargo, si necesitas más información puedes visitar
http: //www.cplusplus.com/ reference/string/ string/ string/
Nota: Las funciones de cadena C++ se pueden utilizar cuando es
necesario, por ejemplo, aislar un número de caracteres de una cadena,
eliminar espacios que puedan existir al principio de la misma o convertir
todos sus caracteres a mayúsculas.
Recuerda! Las funciones no son más que pequeños subprogramas que
resuelven pequeños problemas. Un subprograma puede definirse como un
bloque de expresiones empaquetado como una unidad que tiene un
nombre y realiza una tarea específica.
Por otra parte, aunque hay muchas funciones de cadena de texto útiles que
C++ soporta, algunas de las que utiliza este libro no forman parte del
estándar C++, sino que están definidas en las librerías Boost C++. En este
caso, cada proyecto C++ que utilice cualquiera de esas funciones debe
incluir estas bibliotecas. Esto se puede hacer si, desde el menú principal,
selecciona "Archivo-> Propiedades del Proyecto" y en la categoría
"Compilador C++" incluye el directorio (la carpeta) de sus Bibliotecas
Boost C++ como se muestra en la Figura 14-1.
Figura 14-1 Inclusión de las bibliotecas C++ Boost en un proyecto C++
14.2 La posición de un carácter en una cadena de caracteres
Usemos el texto "Hola Mundo" para el siguiente ejemplo. La cadena
consta de 11 caracteres (incluyendo el espacio entre las dos palabras). La
posición de cada carácter se muestra aquí.

0 1 2 3 4 5 6 7 8
9
H e 1 1 o W o r
1
C++ numera los caracteres asumiendo que el primero está en la posición
0, el segundo en la posición 1, y así sucesivamente. Tenga en cuenta que
el espacio entre las dos palabras también se considera un carácter.
Recuerda! Un espacio es un personaje como cualquier otro. ¡Sólo porque
nadie pueda verlo, no significa que no exista!
14.3 Recuperar un carácter individual de una cadena de caracteres
C++ permite recuperar los caracteres individuales de una cadena
utilizando la notación de subcadena. Puede utilizar el índice 0 para acceder
al primer carácter, el índice 1 para acceder al segundo carácter, y así
sucesivamente. El índice del último carácter es 1 menos que la longitud de
la cadena. El siguiente programa C++ muestra un ejemplo.
project_14_3
iinclude <iostream>
using namespace std;
int main() {
string a;
a = "Hello World";
cout « a.at(O) « endl;
cout « a.at(6) « endl;
cout « a.at(10) « endl;
return 0;
1
Notice: Please note that the space between the words "Hello" and "World"
is
considered a character as well. So, the letter W exists in position 6 and not
in position
5.
If you attempt to use an invalid index such as a negative one or an index
greater than
the length of the string, C++ displays an error message as shown in Figure
14-2.
/start Page «j| fi main.cpp
#include <iostreain>
using namespace std;
5 int main() {
string a ="Hello World";
cout « a.at (-5);
cout « a.at(5);
return 0;
rrr
WtingPwued (Build, Run) -1 testlngProject (Run) * [
terminate called after throwing an instance
of 'std::out_of_range'
what(}: basic_string::at: n (which is 4
294967291) >= this—>size() (which is 11)
RUN FAILED (exit value 1, total time: 550ms)
Figure 14-2 An error message indicating an invalid index
Remember! String indexes must be in a range from 0 to one less than the
length of the
string.
Exercise 14.3-1 Displaying a String Backwards
Write a C++ program that prompts the user to enter any string with four
letters and
then displays its contents backwards. For example, if the string entered is
“Zeus”, the
program should display “sueZ”.
Solution
Let’s say that user’s input is assigned to variable str. You can access the
fourth letter
using str. at (3), the third letter using str. at (2), and so on.
The C++ program is shown here.
project 14 3 1
jfinclude <iostream>
using namespace std;
int main() {
string str;
cout « "Enter a word with four letters:
cin » str;
cout « str.at (3) « str.at(2) « str.at(l) « str.at(0);
return 0;
14.4 Useful String Functions
Trimming
Trimming is the process of removing whitespace characters from the
beginning or
the end of a string.
Some of the whitespace characters that are removed with the trimming
process are:
> " " an ordinary space
> "\t" a tab
> "\n" a new line (line feed)
> "\r" a carriage return
For example, you can trim any spaces that the user mistakenly entered at
the end of a
string.
The function that you can use to trim a string is
trim_copy( subject )
This removes any whitespace characters from both the beginning and the
end of
subject. It is defined in the boost library.
Example
project_14_4a
jfinclude <iostream>
jfinclude <boost/algorithm/string.hpp>
using namespace boost::algorithm;
using namespace std;
int main() {
string a, b;
a=" Hello ";
b = trim_copy(a);
cout << b << " Poseidon!" << endl; //Outputs: Hello
Poseidon!
return 0;
}
String replacement
replace_all_copy( subject, search, replace )
This searches in subject and replaces all occurrences of the search string
with the
replace string. It is defined in the boost library.
Example
project_14_4b
#include <iostream>
#include <boost/algorithm/string.hpp>
using namespace boost::algorithm;
using namespace std;
int main() {
string a, b;
a = "I am newbie in Java. Java rocks!";
b = replace_all_copy(a, "Java", "C++");
cout << b << endl; //Outputs: I am newbie in C++. C++ rocks
return 0;
}
Counting the number of characters
subject.length()
This returns the length of subject or, in other words, the number of
characters
subject consists of (including space characters, symbols, numbers, and so
on).
Example
project_14_4c
#include <iostream>
using namespace std;
int main() {
string a, b;
a = "Hello Olympians!";
cout << a.length() << endl; //Outputs: 16
b = "I am newbie in C++";
cout << b.length() << endl; //Outputs: 18
return 0;
}
Finding string position
subject.find( search )
This finds the numeric position of the first occurrence of search in subject.
Example
project_14_4d
iinclude <iostream>
using namespace std;
int main() {
int i;
string a;
a = "I am newbie in C++. C++ rocks!";
i = a. find ("newbie");
cout « i « endl; //Outputs: 5
return 0;
1
Remember! The first character is at position 0.
Converting to lowercase or uppercase
There are two functions that let you convert all letters in a string to
lowercase or
uppercase.
T o lowercase
to_lower_copy( subject )
This returns the subject, converted to lowercase. It is defined in the boost
library.
Example
project_14_4e
iinclude <iostream>
iinclude <boost/algorithm/string.hpp>
using namespace boost::algorithm;
using namespace std;
int main() {
string a, b;
a = "My NaMe is JohN";
b = to_lower_copy(a);
cout « b « endl; //Outputs: my name is john
return 0;
1
To uppercase
to_upper_copy( subject )
This returns the subject, converted to uppercase. It is defined in the boost
library.
Example
project 14 4f
iinclude <iostream>
iinclude <boost/algorithm/string.hpp>
using namespace boost::algorithm;
using namespace std;
int main() {
string a, b;
a = "My NaMe is JohN";
b = to_upper_copy(a);
cout « b « endl; //Outputs: MY NAME IS JOHN
return 0;
Getting part of a string
subject. substr( beginlndex [, length] )
This returns a portion of subject. Specifically, it starts from position
beginlndex and
returns a substring of length characters or up to the end of the subject,
whichever
comes first. The argument length is optional. If it is omitted, the substring
starting
from position beginlndex until the end of subject is returned.
Example
project_14_4g
iinclude <iostream>
using namespace std;
int main() {
string a;
a = "Hello Athena";
cout « a.substr(6, 3) « endl;
cout « a.substr(6, 300) « endl;
cout « a.substr(7) « endl;
return 0;
1
Checking if string is numeric
cin.fail()
This returns true if the last cin statement fails, and false otherwise.
Moreover, if you
tiy to read something with the cin statement and something goes wrong,
you need to
clear the error state of cin. This is why the cin. fail () function is always
used in
combination with the functions cin.clear () and cin.ignore ().
Example
project_14_4h
iinclude <iostream>
iinclude <boost/algorithm/string.hpp>
using namespace boost::algorithm;
using namespace std;
int main() {
int a; //Variable a is an integer
cin » a; //Assume that user enters the word "Hello",
cout « cin.fail () « endl; //Since cin fails, this displays 1
(true)
//Clear the error state of cin
cin.clear();
cin.ignore(100, '\n');
cin » a; //Assume that user enters an integer,
cout « cin.fail() « endl; //If cin succeeds, display 0 (false)
//If the last cin statement succeeds,
//there is no need to clear its error state
return 0;
}
Retrieving an individual character
subject.at( index )
This returns the character located at subject's specified index. As already
mentioned, the string indexes start from zero. The index of the last
character is 1 less
than the length of the string.
Example
project_14_4i
iinclude <iostream>
using namespace std;
int main() {
string a = "Hello Hermes";
cout « a.at(0) « endl; //outputs: H
cout « a.at(11) « endl; //outputs: s
cout « a.at(5) « endl; //outputs a space character
return 0;
Exercise 14.4-1 Switching the Order of Names
Write a C++ program that prompts the user to enter in one single string
both first and
last name. In the end, the program should change the order of the two
names.
Solution
This exercise is not the same as the one that you learned in Chapter 8,
which
swapped the numeric values of two variables. In this exercise, you must
split the
string and assign each name to a different variable. If you manage to do
so, then you
can just rejoin them in a different order.
Let's try to understand this exercise using an example. The string that you
must split
and the position of its individual character is shown here.
The character that visually separates the first name from the last name is
the space
character between them. The problem is that this character is not always
at position
3. Someone can have a short first name like "Tom” and someone else
can have a
longer one like "Robert”. Thus, you need something that actually finds the
position of
the space character regardless of the content of the string.
Function find () is what you are looking for! If you use it to find the
position of the
space character in the string ‘Tom Smith”, it returns the value 3. But if you
use it to
find the space character in another string, such as "Angelina Brown", it
returns the
value 8 instead.
Notice: The value 3 is not just the position where the space character
exists. It also
represents the number of characters that the word “Tom" contains! The
same applies
to the value 8 that is returned for the string “Angelina Brown". It
represents both the
position where the space character exists and the number of characters that
the word
“Angelina" contains!
The C++ program for this algorithm is shown here.
project 14 4 1
iinclude <iostream>
using namespace std;
int main() {
string full_name, namel, name2;
int space_pos;
cout « "Enter your full name:
getline(cin, full_name);
//find the position of space character. This is also the number
//of characters first name contains
space_pos = full_name.find(" ");
//get space_pos number of characters starting from position 0
namel = full_name.substr(0, spacejpos);
//get the rest of the characters starting from position space_pos + 1
name2 = full_name.substr(space_pos + 1);
full_name = name2 + " " + namel;
cout « full_name;
return 0;
Remember! The statement cin considers space characters as terminating
characters
when reading a string from the keyboard. Thus, reading a string with cin
means to
always read a single word, not a phrase or an entire sentence. To read an
entire line
you can use the getline () function.
Notice: Please note that this program cannot be applied to a Spanish name
such as
"Maria Teresa Garcia Ramirez de Arroyo.” The reason is obvious!
Exercise 14.4-2 Creating a Login ID
Write a C++ program that prompts the user to enter his or her last name
and then
creates a login ID from the first four letters of the name (in lowercase) and
a three-digit
random integer.
Solution
To create a random integer you can use the rand () function. Since you
need a
random integer of three digits, the range must be between 100 and 999.
The C++ program for this algorithm is shown here.
project_14_4 2
jfinclude <iostream>
#include <boost/algorithm/string.hpp>
jfinclude <ctime>
jfinclude <cstdlib>
using namespace boost::algorithm;
using namespace std;
int main() {
int random_int;
string last_name;
srand(time(NULL));
cout « "Enter last name:
cin » last_name;
//Get Random integer between 100 and 999
random_int = 100 + rand() % 900;
cout « to_lower_copy(last_name.substr(0, 4)) « random_int;
return 0;
1
Notice: Please note how the function substr () is nested within the function
tolowercopy (). The result of the inner (nested) function is used as an
argument for
the outer function. This is a writing style that most programmers prefer to
follow
because it helps to save a lot of code lines. Of course, if you nest too many
functions, no
one will be able to understand your code. A nesting of up to four levels is
quite
acceptable.
Exercise 14.4-3 Creating a Random Word
Write a C++ program that displays a random word consisting of five
letters.
Solution
To create a random word you need a string that contains all 26 letters of
the English
alphabet. Then you can use the rand () function to choose a random letter
between
position 0 and 25.
The C++ program for this algorithm is shown here.
project 14 4 3
iinclude <iostream>
iinclude <ctime>
iinclude <cstdlib>
using namespace std;
int main() {
string alphabet;
srand(time(NULL));
alphabet = "abcdefghijklmnopqrstuvwxyz";
cout « alphabet.at(rand() % 26) «
alphabet.at(rand() % 26) «
alphabet.at(rand() % 26) «
alphabet.at(rand() % 26) «
alphabet.at(rand() % 26);
return 0;
}
14.5 Review Questions: True/False
Choose true or false for each of the following statements.
1. A string is anything that you can type using the keyboard.
2. Strings must be enclosed in parentheses.
3. The phrase “Hi there!” contains 8 characters.
4. In the phrase “Hi there!” the letter “t” is at position 3.
5. The statement y = a.at(1) assigns the second letter of the string
contained
in variable a to variable y.
6. The statement
y = a.at(-1);
is a valid statement.
7. Trimming is the process of removing whitespace characters from
the
beginning or the end of a string.
8. The statement y = trim_copy("Hello Aphrodite") assigns the
value “HelloAphrodite” to variable y.
9. The statement cout << replace_all_copy("Hi there!", "Hi",
"Hello")
displays the message “Hello there! ”.
10. The following code fragment
a = "Hi there";
index = a.find("the");
assigns the value 4 to the variable index.
11. The statement cout << to_upper_copy("hello there!") displays the
message “Hello There”.
12. The following code fragment
a = "Hello there!";
cout << a.substr(0);
displays the message “Hello there! ”.
13. The statement cout << a.substr(0, a.length()) displays some letters
of
the variable a.
14. The statement cout << a.substr(a.length() - 1, 1) is equivalent to
the
statement cout << a.at(a.length() - 1)).
15. The following code fragment
y = "hello there!";
cout << to_upper_copy(y).substr(0, 5);
displays the word “HELLO”.
16. The following code fragment
y = "HELLO THERE!";
cout << to_lower_copy(y);
displays the message “Hello there! ”.
17. The statement a.substr(0, 1) is equivalent to the statement a.at(0).
14.6 Review Questions: Multiple Choice
Select the correct answer for each of the following statements.
1. Which of the following is not a string?
a. “Hello there!”
b. “13”
c. “13.5”
d. All of the above are strings.
2. In which position does the space character in the string “Hello
Zeus!”, exist?
a. 6
b. 5
c. Space is not a character.
d. none of the above
3. The statement cout << a.substr(a.length() - 1, 1) displays
a. the last character of variable a.
b. the second to last character of variable a.
c. The statement is not valid.
4. The statement
trim_copy(replace_all_copy(replace_all_copy(a,"a","b"),"w","y"))
is equivalent to the statement
a.
replace_all_copy(replace_all_copy(trim_copy(a),"a","b"),"w","y
")
b.
replace_all_copy(trim_copy(replace_all_copy(a,"w","y")),"a","b
")
c.
replace_all_copy(replace_all_copy(trim_copy(a),"w","y"),"a","b
")
d. all of the above
5. The statement replace_all_copy(a, " ", "")
a. adds a space between each letter in the variable a.
b. removes all space characters from the variable a.
c. empties the variable a.
6. The statement replace_all_copy(" Hello ", " ", "") is
equivalent to
the statement
a. replace_all_copy(" Hello ", "", " ").
b. trim_copy(" Hello ").
c. all of the above
d. none of the above
7. The following code fragment
- _ IIII .
a- ;
cout << a.length();
displays
a. nothing.
b. 1.
c. 0.
d. The statement is invalid.
e. none of the above
8. Which value assigns the following code fragment
to_be_or_not_to_be - "2b || !2b";
Shakespeare = to_be_or_not_to_be.find("b");
to the variable Shakespeare?
a. 1
b. 2
c. 6
d. none of the above
9. What does the following code fragment?
a = "Hi there";
b = a.substr(a.find(" ") + 1);
a. It assigns the word “Hi” to the variable b.
b. It assigns a space character to the variable b.
c. It assigns the word “there” to the variable b.
d. none of the above
10. What does the following code fragment?
a = "Hi there";
b = replace_all_copy(a, "Hi", "Hello");
a. It assigns the string “Hello there” to the variable a.
b. It displays the message “Hello there”.
c. all of the above
d. none of the above
14.7 Review Exercises
Complete the following exercises.
1. Write a C++ program that prompts the user to enter his or her first
name,
middle name, last name, and his or her preferred title (Mr., Mrs., Ms., Dr.,
and
so on) and displays them formatted in all the following ways.
Title FirstName MiddleName LastName
FirstName MiddleName LastName
LastName, FirstName
LastName, FirstName MiddleName
LastName, FirstName MiddleName, Title
FirstName LastName
For example, assume that the user enters the following:
First name: Aphrodite
Middle name: Maria
Last name: Boura
Title: Ms.
The program should display the user’s name formatted in all the following
ways:
Ms. Aphrodite Maria Boura
Aphrodite Maria Boura
Boura, Aphrodite
Boura, Aphrodite Maria
Boura, Aphrodite Maria, Ms.
Aphrodite Boura
2. Write a C++ program that creates and displays a random word
consisting of
five letters. The first letter must be a capital letter.
3. Write a C++ program that prompts the user to enter his or her
name and
then creates a secret password consisting of three letters (in lowercase)
randomly picked up from his or her name, and a random four-digit
number.
For example, if the user enters "Vassilis Bouras” a secret password can
probably be one of "sarl359” or "vbs7281” or "bor!459”.
Review Questions in “Sequence Control Structures”
Answer the following questions.
1. What is a sequence control structure?
2. What operations can a sequence control structure perform?
3. What does the term "type casting" mean in computer science?
4. Give some examples of how you can use the quotient and the
remainder of
an integer division.
5. What is a function?
6. What does the term “nest a function” mean?
Index

A
absO,123
add a breakpoint, 106
algorithm, 37
alphanumeric, 56
application software, 15,16
Aristides, 9
arithmetic operator, 73
arrow, 39
assign, 52
assigned, 71
asterisk-slash, 47
atQ,159
B
BMI, 121
Body Mass Index, 121
bool, 58
Boolean, 56
breakpoint, 106
bug, 100
c

computer language, 16
computer program, 38
concatenation, 79
concatenation assignment, 79
Const, 54
constant, 53
control structure, 43
Corrado Bohm, 43
cosO,123
cosine, 123
CPU,15
D
data input, 38, 40, 67
data processing, 38
debugger, 104
debugging, 100
debugging step by step, 102
decision control structure, 43
Decision symbol, 40
declaration, 57
declare constant, 59
decrementing operator, 78
definiteness, 38
DIV, 143
double, 58,124,125
double slashes, 47,79
E
effectiveness, 38
End symbol, 39
execute, 16,99
F
Fahrenheit, 117
failO, 158
findQ, 157,160
Finish Debugger Session, 105
finite, 37
finite sequence, 37
finiteness, 38
float, 58
flow of execution, 39,103
flowchart, 39
function, 122,152
G
Giuseppe Jacopini, 43
Grace Hopper, 101
graphical method, 39
green arrow, 104
H
hardware, 15
Heron, 122
Heron's formula, 141
high-level, 21
high-level language, 17
hosting application, 21
I
IDE, 17,28
incoming off-page connector symbol,
40
incrementing operator, 78
index, 153
input, 37
input device, 16
input value, 37
instruction, 15,17,37
int, 58,124
integer, 56
integer division, 74
integer value, 124
Integrated Development Environment,
17,28
0
off-page connector symbol, 40
operating system, 16
outgoing off-page connector symbol, 40
output, 37
output device, 16
output value, 37
P
palindrome, 142
parenthesis, 74
part of a string, 158
pink rectangle, 107
POLA, 48
post-decrementing operator, 78
post-incrementing operator, 78
powO, 126,130
power, 126
precedence rule, 74,136
pre-decrementing operator, 78
pre-defined process, 40
pre-incrementing operator, 78
Principle of Least Astonishment, 48
problem, 37
Process symbol, 40
program, 15,16, 21
program counter, 104
programmer, 15, 38
property, 37
Q
quotient, 142
R
RAM, 15
randO, 126,161
random, 126
Random Access Memory, 15
random word, 162
real, 56
real value, 124
red exclamation mark, 46,101
remainder, 142
remove a breakpoint, 108
replace_all_copyO, 156
reserved word, 42
results output, 38,40
reversed number, 150
round, 128
roundO, 128
run, 16
s
script, 21
secondary storage device, 15,16
semicolon, 46
sequence control structure, 43,113
short int, 58
sin(), 129
sine, 129
slash-asterisk, 47
software, 16
software developer, 15
source code, 17
sqrtO, 129,130,132
square root, 126,129
stand-alone, 21
Start symbol, 39
statement, 15, 37,43
step by step, 102
step over, 104,106,107
string, 56,152
string index, 154
string position, 157
string replacement, 156
structured code, 43
structured design, 43
structured programming, 43
subprogram, 40
substrO, 158, 162
substring notation, 153
sum, 143
swap, 87, 88
syntax error, 46, 101
system software, 16
T
trim_copy(), 155
trimming, 155
U
unsigned int, 58
unsigned short int, 58
user, 38
user-friendly, 47
tab character, 66
tab stop, 66
tan(), 130
tangent, 130
three main stages, 38
three parties, 38
to lowercase, 157
to uppercase, 157
to_lower_copy(), 157, 162
to_upper_copy(), 157
trace table, 85
My Books
Available at
amazon

C+ +
AND ALGORITHMIC THINKING
FOR THE COMPLETE BEGINNER

JAVA
AND ALGORITHMIC THINKING
FOR THE COMPLETE BEGINNER

A R I s T I D I: s S . BOURAS
LOUKIA V A INAKQZIIIOtl

ARISTIDES S BOURAS
LOUKIA V. AINAROZIDOU

ARISTIDES S. BOURAS
LOUKIA V. AINAROZIDOU
AND ALGORITHMIC THINKING
FOR THE COMF1. IITE BEGINNER

VISUAL BASIC
AND ALGORITHMIC THINKING
FOR THE COMPLETE BEGINNER

PYTHON
AND ALGORITHMIC THINKING
FOR THE COMPLETE BEGINNER

> THINK LIKC A PBOGRAMUIR


PHP
AND ALGORITHMIC THINKING
FOR THE COMPLETE BEGINNER
RCode: 160216
I cout « (double)a / (double)2 « endl;
and of course to
cout « a / 2.0 « endl;
They all output the value of 2.5.
M_PI
This returns the value of IT. It is defined in the cmath library.
Example
project_ll_2e
jfinclude <iostream>
jfinclude <cmath>
using namespace std;
int main() {
cout « M_PI « endl; //outputs: 3.14159
cout.precision(20); //Set the maximum number of digits to display
cout « M_PI « endl; //outputs: 3.141592653589793116
return 0;

S-ar putea să vă placă și