Documente Academic
Documente Profesional
Documente Cultură
/ 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
*
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;
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";
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.
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
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
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
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.
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) -
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
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
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;
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
#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