Está en la página 1de 29

UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS

EN EL VALLE DE SULA.

Alumna:
Cinthia Marilú Navarro Pérez

Número de Cuenta:
20192001599

Catedrático:
Héctor Adolfo García

Asignatura:
Lenguaje de programación II

Tema:
Capítulo 4

Sección:
1000

Fecha: sábado 19 de febrero 2022


5.1 Conteste con verdadero o falso a cada una de las siguientes proposiciones; en caso de
ser falso, explique por qué.

a) El caso default es requerido en la instrucción de selección switch.


R// Falso. El caso default es opcional. Sin embargo, se considera buena ingeniería de
software proporcionar siempre un caso default.

b) La instrucción break es requerida en el caso default de una instrucción de selección


switch, para salir del switch de manera apropiada.
R// Falso. La instrucción break se utiliza para salir de la instrucción switch. La instrucción
break no se requiere cuando el caso default es el último. Tampoco se requerirá la
instrucción break si hacer que el control se reanude en el siguiente caso tiene sentido

c) La expresión (x > y && a < b) es true si la expresión x > y es true, o si la expresión a < b
es true.
R// Falso. Al utilizar el operador &&, ambas expresiones relacionales deben ser true para
que toda la expresión sea true.

d) Una expresión que contiene el operador || es true si uno o ambos de sus operandos son
true.
R// Verdadero.

5.2 Escriba una instrucción o un conjunto de instrucciones en C++, para realizar cada una
de las siguientes tareas:

a) Sumar los enteros impares entre 1 y 99, utilizando una instrucción for. Suponga que se
han declarado las variables enteras suma y cuenta.
suma = 0;
for (cuenta = 1; cuenta <= 99; cuenta += 2)
suma += cuenta;
b) Imprimir el valor 333.546372 en una anchura de campo de 15 caracteres, con precisiones
de 1, 2 y 3. Imprimir cada número en la misma línea. Justificar a la izquierda cada número
en su campo. ¿Cuáles son los tres valores que se imprimen?
cout << fixed << left
<< setprecision (1) << setw (15) << 333.546372
<< setprecision (2) << setw (15) << 333.546372
<< setprecision (3) << setw (15) << 333.546372
<< endl;
La salida es:
333.5 333.55 333.546

c) Calcular el valor de 2.5 elevado a la potencia de 3, utilizando la función pow. Imprimir el


resultado con una precisión de 2 en una anchura de campo de 10 posiciones. ¿Qué se
imprime?
cout << fixed << setprecision (2)
<< setw (10) << pow (2.5, 3)
<< endl;
La salida es:
15.63

d) Imprimir los enteros del 1 al 20, utilizando un ciclo while y la variable contadora x.
Suponga que la variable x se ha declarado, pero no se ha inicializado. Imprimir solamente
cinco enteros por línea. [Sugerencia: use el cálculo x % 5. Cuando el valor de esta
expresión sea 0, imprima un carácter de nueva línea; de lo contrario, imprima un carácter
de tabulación.]
x = 1;
while (x <= 20)
{
cout << x;
if (x % 5 == 0)
cout << endl;
else
cout << '\t';
x++;
}

e) Repita el ejercicio 5.2 (d), usando una instrucción for.


for (x = 1; x <= 20; x++)
{
cout << x;
if (x % 5 == 0)
cout << endl;
else
cout << '\t';
}
o
for (x = 1; x <= 20; x++)
{
if (x % 5 == 0)
cout << x << endl;
else
cout << x << '\t';
}

5.3 Encuentre el(los) error(es), si los hay, en cada uno de los siguientes segmentos de
código, y explique cómo corregirlo(s):

a) x = 1;

while (x <= 10);

x++;

}
R// Error: el punto y coma después del encabezado while provoca un ciclo infinito.
Corrección: reemplazar el punto y coma por una llave izquierda ({), o eliminar tanto el punto y
coma (;) como la llave derecha (}).

b) for (y = .1; y! = 1.0; y += .1)


cout << y << endl;
R// Error: utilizar un número de punto flotante para controlar una instrucción de repetición for.
Corrección: utilice un entero, y realice el cálculo apropiado para poder obtener los valores
deseados:

for (y = 1; y! = 10, y++)

cout << (static_cast< double > (y) / 10) << endl;

c) switch (n)
{
case 1:
cout << "El número es 1" << endl;
case 2:
cout << "El número es 2" << endl;
break;
default:
cout << "El número no es 1 ni 2" << endl;
break;
}
R//Error: falta una instrucción break en el primer case.
Corrección: agregue una instrucción break al final de las instrucciones para el primer case.
Observe que esto no es un error, si el programador desea que la instrucción del case 2: se ejecute
siempre que lo haga la instrucción del case 1:
d) El siguiente código debe imprimir los valores 1 a 10:
n = 1;
while (n < 10)
cout << n++ << endl;
R// Error: se está utilizando un operador relacional inadecuado en la condición de continuación
de la instrucción de repetición while.
Corrección: use <= en lugar de <, o cambie 10 a 11.

5.4 Encuentre el(los) error(es), si los hay, en cada uno de los siguientes fragmentos de
código:

a) For (x = 100, x >= 1, x++)


cout << x << endl;

R// Error: primeramente, la variable x no esta declarada, el for no puede escribirse en mayúscula
y cada instrucción en el for no tiene punto y coma.

b) El siguiente código debe imprimirse sin importar que el entero valor sea par o impar:

switch (valor % 2)

case 0:

cout << "Entero par" << endl;

case 1:

cout << "Entero impar" << endl;

R// El switch no está evaluando una variable, está evaluando un operador y los case no tiene
break.
c) El siguiente código debe imprimir los enteros impares del 19 al 1:

for (x = 19; x >= 1; x += 2)

cout << x << endl;

R// Cambiar el signo de mas por el signo menos.

d) El siguiente código debe imprimir los enteros pares del 2 al 100:

contador = 2;

do

cout << Contador << endl;

www.FreeLibros.me

contador += 2;

} While (contador < 100);

R// El while no puede ser escrita en mayúscula, al principio no se declaro el tipo de variable.

5.5 Escriba un programa que utilice una instrucción for para sumar una secuencia de
enteros. Suponga que el primer entero leído especifica el número de valores que quedan por
introducir. Su programa debe leer sólo un valor por cada instrucción de entrada. Una
secuencia típica de entrada podría ser

5 100 200 300 400 500

donde el 5 indica que se van a sumar los 5 valores subsiguientes.


#include <iostream>

using namespace std;

int main ()

int a, numero=0, contador=1;

cout<<" Ingrese la cantidad de numero a sumar:";

cin>>contador;

for (int i=0; i<contador; I++)

cin>>a;

numero+=a;

cout<<"La suma de los números enteros es: "<<numero;

return 0;

5.6 Escriba un programa que utilice una instrucción for para calcular e imprimir el
promedio de varios enteros. Suponga que el último valor leído es el valor centinela 9999.
Una secuencia típica de entrada podría ser

10 8 11 7 9 9999

#include <iostream>
using namespace std;
int main ()
{
int enteros = 0, promedio = 0, contador = 0, suma = 0, contadorDos= 0;
for (contador=1; contador <=100000; contador++)
{
cout << "Ingrese el número, para finalizar -1:" << endl;
cin>>enteros;
if (enteros ==-1)
{
break;
}
suma = promedio + enteros;
promedio = suma;
contadorDos++;
}
promedio = suma / contadorDos;
cout << " El promedio es:" << promedio;
return 0;
}
5.7 ¿Qué hace el siguiente programa?
5.8 Escriba un programa que utilice una instrucción for para encontrar el menor de varios
enteros. Suponga que el primer valor leído especifica el número de valores restantes.

#include <iostream>
using namespace std;
int main ()
{
int z, menor, contador;
cout<<" Ingrese los números enteros, registre primero la cantidad de numero:";
cin>>contador;
cin>>menor;
for (int i=1; i<contador; i++)
{
cin>>z;
if (z<menor)
{
menor=z;
}
}
cout<<"El menor de los números es: "<<menor;
return 0;
}
5.9 Escriba un programa que utilice una instrucción for para calcular e imprimir el
producto de los enteros impares del 1 al 15.

#include <iostream>
using namespace std;
int main ()
{
int numero = 1;
cout << " Imprime el producto de los enteros impares del 1 al 15"<< endl;
for (int i=1; i<=15; i++)
{
numero*i;
cout<<i << " ";
}
return 0;
}
5.10 La función factorial se utiliza frecuentemente en los problemas de probabilidad.
Utilizando la definición de factorial del ejercicio 4.35, escriba un programa que utilice una
función for para evaluar las factoriales de los enteros del 1 al 5. Muestre los resultados en
formato tabular. ¿Qué dificultad podría impedir que usted calculara la factorial de 20?

#include <iostream>
using namespace std;
int main ()
{
for (int i = 1; i <= 5; i++)
{
int factorial = 1, enteros = i;
while (0 < enteros)
{
factorial *= enteros--;
}
cout << "El factorial de los enteros " << i << "es:" << factorial << endl;
}
return 0;
}
5.11 Modifique el programa de interés compuesto de la sección 5.4, repitiendo sus pasos
para las tasas de interés del 5, 6, 7, 8, 9 y 10%. Use una instrucción for para variar la tasa
de interés.

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double monto = 0, principal = 1000.0;
int interes=5;
cout << "Anio" << setw( 21 ) << "Monto en deposito" << endl;
cout << fixed << setprecision( 2 );
for(double tasa = 0.05; tasa <= 0.1; tasa += 0.01 )
{
cout<<"Tasa de interes de:"<<interes<<"\n";
interes+=1;
for ( int anio = 1; anio <= 10; anio++ ){
monto = principal * pow( 1.0 + tasa, anio );
cout << setw( 4 ) << anio << setw( 21 ) << monto << endl;
}
}
return 0;
}
5.12 Escriba un programa que utilice ciclos for para generar los siguientes patrones por
separado, uno debajo del otro. Use ciclos for para generar los patrones. Todos los asteriscos
(*) deben imprimirse mediante una sola instrucción de la forma cout << '*'; (esto hace que
los asteriscos se impriman uno al lado del otro). [Sugerencia: los últimos dos patrones
requieren que cada línea empiece con un número apropiado de espacios en blanco. Crédito
adicional: combine su código de los cuatro problemas separados en un solo programa que
imprima los cuatro patrones, uno al lado del otro, haciendo un uso inteligente de los ciclos
for anidados.]

#include<iostream>
using namespace std;
int main()
{
int i,j,k;
for(i=1;i<=10;i++)
{
for(j=1;j<=i;j++)
{
cout<<"*";
}
cout<<"\n";
}
cout<<"\n";
for(i=1;i<=10;i++)
{
for(j=10;j>=i;j--)
{
cout<<"*";
}
cout<<"\n";
}
cout<<"\n";
for(i=1;i<=10;i++)
{
for(j=1;j<=i;j++)
{
cout<<" ";
}
for(k=10;k>=i;k--)
{
cout<<"*";
}
cout<<"\n";
}
cout<<"\n";
for(i=1;i<=10;i++)
{
for(j=10;j>=i;j--)
{
cout<<" ";
}
for(k=1;k<=i;k++)
{
cout<<"*";
}
cout<<"\n";
}
return 0;
}
5.13 Una aplicación interesante de las computadoras es dibujar gráfi cos convencionales y
de barra. Escriba un programa que lea cinco números (cada uno entre 1 y 30). Suponga que
el usuario sólo introduce valores válidos. Por cada número leído, su programa debe
imprimir una línea que contenga ese número de asteriscos adyacentes. Por ejemplo, si su
programa lee el número 7, debe mostrar *******.

#include<iostream>

using namespace std;

int main()
{
int numero = 0;
cout<<"Introduzca un numero del 1 al 30:";
cin>>numero;
for( int i=0;i<numero;i++)
{
cout<<"*";
}
cout<<"\n";
return 0;
}
5.14 Un almacén de pedidos por correo vende cinco productos distintos, cuyos precios de
venta son los siguientes: producto 1, $2.98; producto 2, $4.50; producto 3, $9.98; producto
4, $4.49 y producto 5, $6.87. Escriba un programa que lea una serie de pares de números,
como se muestra a continuación:

a) número del producto;

b) cantidad vendida.

Su programa debe utilizar una instrucción switch para determinar el precio de venta de
cada producto. Debe calcular y mostrar el valor total de venta de todos los productos
vendidos.
Use un ciclo controlado por centinela para determinar cuándo debe el programa dejar de
iterar para mostrar los resultados finales.

#include<iostream>
using namespace std;
int main()
{
float costo = 0, montoTotal = 0;
int producto = 0, venta = 0;
cout <<"Precios de los productos en el almacen";
cout <<"\nProducto 1: $2.98";
cout <<"\nProducto 2: $4.50";
cout <<"\nProducto 3: $9.98";
cout <<"\nProducto 4: $4.49";
cout <<"\nProducto 5: $6.87\n";
cout <<"\n Introduzca el numero del primer producto ( -1 para terminar):";
cin >> producto;
while ( -1!= producto)
{
switch ( producto )
{
case 1:
{
cout <<"\nIntroduzca la cantidad de venta del producto:";
cin>> venta;
cout << "\nPrecio de esta venta:" <<venta*2.98;
montoTotal +=venta*2.98;
break;
}
case 2:
{
cout <<"\nIntroduzca la cantidad de venta del producto:";
cin>> venta;
cout << "\nPrecio de esta venta:" <<venta*4.50;
montoTotal += venta*4.50;
break;
}
case 3:
{
cout <<"\nIntroduzca la cantidad de venta del producto:";
cin>> venta;
cout << "\nPrecio de esta venta:" <<venta*9.98;
montoTotal += venta*9.98;
break;
}
case 4:
{
cout <<"\nIntroduzca la cantidad de venta del producto:";
cin>> venta;
cout << "\nPrecio de esta venta:" <<venta*4.49;
montoTotal += venta*4.49;
break;
}
case 5:
{
cout <<"\nIntroduzca la cantidad de venta del producto:";
cin>> venta;
cout << "\nPrecio de esta venta:" <<venta*6.87;
montoTotal += venta*6.87;
break;
}
default :
{
cout << "\nIngrese unn numero valido";
break;
}
}
cout << "\nPor favor introduzca el numero del siguiente producto:";
cout << "( -1 para terminar):";
cin >> producto;
}
cout<< "\nLas ventas totales fueron: " << montoTotal;
return 0;
}
5.16 Modifique el programa LibroCalificaciones de las figuras 5.9 a 5.11, de manera que
calcule el promedio de puntos de calificaciones para el conjunto de calificaciones. Una califi
cación A vale 4 puntos, B vale 3 puntos, etcétera.

#include <iostream>

#include <iomanip>

#include <cmath>

using namespace std;

int main()

float monto, principal = 1000.0, tasa =0.05;

double x;
cout << "Anio" << setw( 21 ) << "Monto de dolares en deposito" <<"Monto de centavos en
deposito"<< endl;

for ( int anio = 1; anio <= 10; anio++ )

monto = principal * pow( 1.0 + tasa, anio );

x = monto - int(monto);

cout << setw( 5 ) << anio << setw( 21 ) << int (monto)<< setw( 21 )<<x<< endl;

return 0;

5.17 Suponga que i = 1, j = 2, k = 3 y m = 2. ¿Qué es lo que imprime cada una de las


siguientes instrucciones? ¿Son necesarios los paréntesis en cada caso?

a) cout << ( i == 1 ) << endl;

b) cout << ( j == 3 ) << endl;

c) cout << ( i >= 1 && j < 4 ) << endl;


d) cout << ( m <= 99 && k < m ) << endl;

e) cout << ( j >= i || k == m ) << endl;

f) cout << ( k + m < j | 3 – j >= k ) << endl;

g) cout << ( !m ) << endl;

h) cout << ( !( j - m ) ) << endl;

i) cout << ( !( k > m ) ) << endl;


5.18 Escriba un programa que imprima una tabla de los equivalentes binario, octal y
hexadecimal de los números decimales en el rango 1 al 256. Si no está familiarizado con
estos sistemas numéricos, lea primero el apéndice D, Sistemas numéricos.

#include<stdio.h>

#include<iostream>
using namespace std;
int main(void)
{
int n, binario, j=0, k, n_temporal, n_temp=0, n_temp1=0;
cout<<"ingrese un numero del 1 al 256: ";
cin>>n;
for(n=1;n<=256;n++)
{
cout<<"binario:\n";
for(binario=1;binario<=n;binario*=2)
j=binario;
for(j=binario;j>=1;j=(binario/=2)){
for(j=binario;j>=1;j=(binario/=2))
{
n_temporal=n;
k=n_temp;
n_temp=n_temporal%j;
if(n_temporal>=j){
n_temp1=k/j;
cout<<n_temp1;
}
}
}
cout<<"\n";
cout<<"octal\n";
for(binario=1;binario<=n;binario*=8)
j=binario;
for(j=binario;j>=1;j=(binario/=8)){
for(j=binario;j>=1;j=(binario/=8))
{
n_temporal=n;
k=n_temp;
n_temp=n_temporal%j;
if(n_temporal>=j){
n_temp1=k/j;
cout<<n_temp1;
}
}
cout<<"\n";
/*hexadecimal*/
cout<<"hexadecimal\n";
for(binario=1;binario<=n;binario*=16)
j=binario;
for(j=binario;j>=1;j=(binario/=16))
{
for(j=binario;j>=1;j=(binario/=16))
{
n_temporal=n;
k=n_temp;
n_temp=n_temporal%j;
if(n_temporal>=j){
n_temp1=k/j;
if(n_temp1==10){
n_temp1='A';
cout<<n_temp1;
}
if(n_temp1==11){
n_temp1='B';
cout<<n_temp1;
}
if(n_temp1==12){
n_temp1='C';
cout<<n_temp1;
}
if(n_temp1==13){
n_temp1='D';
cout<<n_temp1;
}
if(n_temp1==14)
{
n_temp1='E';
cout<<n_temp1;
}
if(n_temp1==15){
n_temp1='F';
cout<<n_temp1;
}
else if(n_temp1>=0 && n_temp1<=9)
cout<<n_temp1;
}
}
cout<<"\n";
}
}
}
return 0;
}

5.19 Calcule el valor de π a partir de la serie infinita.

Imprima una tabla que muestre el valor aproximado de π, después de cada uno de los primeros
1000 términos de esta serie.

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double s =0;
int n, i;
double a;
cout<<"ingrese el valor:"<<endl;
cin>> n;
for (i=1;i<=n;i++)
{
a=(-4)*pow(-1,i)/(2*i-1);
s= s + a;
}
cout <<"el valor de pi es :"<<s<<endl;
return 0;
}
5.20 (Triples de Pitágoras) Un triángulo recto puede tener lados cuyas longitudes sean
valores enteros. Un conjunto de tres valores enteros para los lados de un triángulo recto se
conoce como triple de Pitágoras. Estos tres lados deben satisfacer la relación que establece
que la suma de los cuadrados de dos lados es igual al cuadrado de la hipotenusa. Encuentre
todos los triples de Pitágoras para lado1, lado2, y la hipotenusa, que no sean mayores de
500. Use un ciclo for triplemente anidado para probar todas las posibilidades. Este método
es un ejemplo de la computación de fuerza bruta. En cursos de ciencias computacionales
más avanzados aprenderá que existen muchos problemas interesantes para los cuales no
hay otra metodología algorítmica conocida, más que el uso de la fuerza bruta.

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int Tamano = 500;
cout << "\nEste programa prueba e imprime todas las ternas";
cout << " pitagoricas para numeros no mayores que %d " << Tamano;
cout <<" mediante la fuerza bruta.\n";
for ( int i = 1; i <= Tamano; i++ )
for ( int j = 1; j <= Tamano; j++ )
for ( int k = 1; k <= Tamano; k++ )
{
if ( i*i == j*j + k*k )
cout << "\n" <<i << j << k;
}
return 0;
}
5.22 (Leyes de De Morgan) En este capítulo, hemos hablado sobre los operadores lógicos
&&, || y !. Algunas veces, las leyes de De Morgan pueden hacer que sea más conveniente
para nosotros expresar una expresión lógica. Estas leyes establecen que la expresión !
( condición1 && condición2 ) es lógicamente equivalente a la expresión (! condición1 || !
condición2 ). Además, la expresión !( condición1 || condición2 ) es lógicamente equivalente a
la expresión (! condición1 && !condición2 ). Use las leyes de De Morgan para escribir
expresiones equivalentes para cada una de las siguientes expresiones, luego escriba una
aplicación que demuestre que, tanto la expresión original como la nueva expresión, son
equivalentes en cada caso:

a) !( x < 5 ) && !( y >= 7 )


b) !( a == b ) || !( g != 5 )
c) !( ( x <= 8 ) && ( y > 4 ) )
d) !( ( i > 4 ) || ( j <= 6 ) )

5.23 Escriba un programa que imprima la siguiente figura de rombo. Puede utilizar
instrucciones de salida que impriman un solo asterisco (*) o un solo espacio en blanco.
Maximice el uso de la repetición (con instrucciones for anidadas), y minimice el número de
instrucciones de salida.

#include <stdio.h>
int main()
{
int a, n, n1;
int contador = 1;
for (a = 5; a >= 1; a--){
for (n = 0; n <= a; n++){
printf(" ");
}
for (n1 = 1; n1 <= contador; n1++){
printf("*");
}
printf("\n");
contador += 2;
}
for (a = 4; a >= 1; a--){
for (n = 6; n >= a; n--){
printf(" ");
}
for (n1 = 2; n1 <= contador-3; n1 ++){
printf("*");
}
printf("\n");
contador -= 2;
}
return 0;
}

5.25 Una crítica de las instrucciones break y continue es que ninguna es estructurada. En
realidad, estas instrucciones pueden reemplazarse en todo momento por instrucciones
estructuradas, aunque hacerlo podría ser inadecuado. Describa, en general, cómo
eliminaría las instrucciones break de un ciclo en un programa, para reemplazarlas con
alguna de las instrucciones estructuradas equivalentes. [Sugerencia: la instrucción break se
sale de un ciclo desde el cuerpo de éste. La otra forma de salir es que falle la prueba de
continuación de ciclo. Considere utilizar en la prueba de continuación de ciclo una segunda
prueba que indique una “salida anticipada debido a una condición de ‘interrupción’.”] Use
la técnica que desarrolló aquí para eliminar la instrucción break de la aplicación de la fi
gura 5.13.

#include <iostream>
using namespace std;
int main()
{
int cuenta;
for ( cuenta = 1; cuenta <= 10; cuenta++ )
{
if ( cuenta == 5 )
goto salto;
cout << cuenta << " ";
}
salto:
cout << "\nSalio del ciclo en cuenta = " << cuenta << endl;

return 0;
}
5.26 ¿Qué hace el siguiente segmento de programa?

También podría gustarte