Está en la página 1de 17

PROGRAMACIÓN

ORIENTADA A OBJETOS
(MB545)
Ciclo 2023-2
Laboratorio 2
M. Eng. Jhul César Ochoa Espinoza
1 #include <iostream>
2 using namespace std;
3
4 int main(void)
5 {
6 int hours, years, months, days;
7 cout << "Ingrese el total de horas: ";
8 cin >> hours;
9

Utilización del
10 years = hours / (365*24);
11 hours = hours % (365*24);
12 months = hours / (30*24);

operador %: 13
14
15
hours = hours % (30*24);
days = hours / 24;
hours = hours % 24;
16
“Pedir un número entero 17 cout << "\nAños: " << years;
de horas y hallar 18 cout << "\nMeses: " << months;
19 cout << "\nDías: " << days;
cuantos años, meses, 20 cout << "\nHoras: " << hours << endl;
días, y horas contiene.” 21
22 return 0;
23 }
Secuencias de escape
Secuencia Significado Secuencia Significado
\a Alerta audible \\ Caracter \
\b Borra un espacio hacia atrás \’ Caracter ‘
\f Salto de página \” Caracter “
\n Salto de línea \? Caracter ?
\r Retorno de carro
\t Espacio tabular horizontal \v Espacio tabular vertical
Caracter ASCII correspondiente al Caracter ASCII correspondiente al
valor octal \ooo, por ejemplo \111 valor hexadecimal \xhhh, por
\ooo \xhhh
que en decimal es 73, corresponde ejemplo \x49 que en decimal es 73,
al caracter H. corresponde al caracter H.
1 #include <iostream>
2 using std::cout;
3
4 int main(void)
5 {
6 cout << '\a';
7 cout << "Check\b\b\b back\n";
8 cout << "Test\rCR\n";

Utilización de
9 cout << "\53\n\x2d\n";
10 cout << "T\"ree\'\n";
11 cout << "Check\t\t\\point\\\n";

secuencias de
12
13 return 0;
14 }

escape
Flag Significado
boolalpha Lee y escribe los valores booleanos utilizando true y
false
showbase Prefija valores octales con 0 y valores hexadecimales
con 0x
showpoint Muestra el punto decimal para valores de coma
flotante
showpos Prefija el símbolo + para valores numéricos positivos

skipws Descarta caracteres de espacio vacío en entrada de


datos Flags de
unitbuf El bufer asociado es vaciado en cada operación de
salida formato
uppercase Muestra la e de formato científico y la x de
hexadecimal en mayúscula
Pertenecen a iosbase, y se utilizan con cout.setf y cout.unsetf, por ejemplo:
Para activar cout.setf(iosbase::boolalpha) o equivalente cout.setf(std::ios::boolalpha)
Para desactivar cout.unsetf(iosbase::boolalpha) o equivalente
cout.unsetf(std::ios::boolalpha)
Flag Grupo Significado
dec basefield Lee y escribe números enteros en base decimal
hex basefield Lee y escribe números enteros en base hexadecimal
oct basefield Lee y escribe números enteros en base octal
fixed floatfield Escribe números de punto flotante en formato de punto fijo

scientific floatfield Escribe números de punto flotante enformato científico Flags


left
right
adjustfield
adjustfield
Alínea la salida a la izquierda del ancho del campo.
Alínea la salida a la derecha del ancho del campo.
selectivos
internal adjustfield Alínea los signos a la izquierda y los números a la derecha.

Pertenecen a iosbase, y se utilizan con cout.setf con dos flags, una se activa y la segunda se desactiva:
cout.setf(ios_base::hex, ios_base::floatfield) activa el flag hex y desactiva lo referente a floatfield.
Equivalente es cout.setf(std::ios::hex, std::ios::floatfield)
1 #include <iostream>
2 using namespace std;
3
4 int main(void)
5 {
6 double i = 12345.689;
7
8 cout << "Default mode: " << i << '\n';
9 cout.setf(ios::fixed, ios::floatfield);

Ejemplo de 10
11
12
cout << "Fixed mode: " << i << '\n’;
cout.setf(ios::scientific, ios::floatfield);

utilización de
cout << "Scientific mode: " << i << '\n';
13 cout.unsetf(ios_base::floatfield);
14 cout << "Default mode: " << i << '\n’;

flags:
15
16 return 0;
17 }
Manipuladores de salida
Manipulador Propósito
std::endl Inserta una nueva línea
std::flush Escribir sin esperar al buffer
std::setw(c) Cambia el ancho del próximo campo i/o
std::left, std::right; std::internal Justifica el texto
std::boolalpha, std::noboolalpha Formato de booleanos “Estos manipuladores
std::showpos, std::noshowpos Mostrar el signo + son equivalentes a la
utilización de flags,
std::dec, std::hex, std::oct Controla el sistema numérico
pero en este caso se
std::showbase, std::noshowbase Incluye el prefijo para mostrar base utilizan de forma
std::uppercase, std::nouppercase Muestra dígitos en mayúscula directa, sin necesidad
std::fixed, std::scientific Controla el tipo de formato de punto flotante de setf o unsetf”
std::setprecision Setea el número de dígitos de punto flotante
std::setfill(c) Cambia el caracter de llenado
std::showpoint, std::noshowpoint Muestra ceros decimales adicionales
Función Propósito
flags() Devuelve el estado de las flags
fill() Devuelve el caracter de llenado
fill(c) Setea el caracter de llenado a c
precision() Devuelve el valor de precisión actual

Funciones
precision(n) Setea el valor de precisión a n
width() Devuelve el ancho de salida actual

miembro de
width(n) Setea el ancho de salida a n
Al ser funciones miembro de cout, se tienen que utilizar en conjunto
con este comando, por ejemplo, setear la precision a 6:

cout cout.precision(6)
Recordar que esto es una forma alternativa al manejo con flags y
manipuladores de salida.
Ejemplo de utilización de manipuladores de salida:
1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4
5 int main(void)
6 {
7 int i = 100, k = 74;
8 double j = 100.536;
9
10 cout << i << oct << '\t' << i << hex << '\t' << i << endl;
11 cout << scientific << j << '\t' << fixed << j << endl;
12 cout << setprecision(2) << j << '\t' << setprecision(0) << '\t' << j << endl;
13 cout << showbase << uppercase << i << '\t' << 1.456 << '\t' << showpos << dec << i << endl;

14 return 0;
15 }
16
Manipulación de salida con números
1 #include<iostream> 25 //ancho 10, rellenado por '0', alineado a la der.
2 #include <cmath> 26 cout.width(10); cout.fill('0');
3 using namespace std; 27 cout.setf(ios::right);
4 28 cout << 2312 << endl;
5 const float PI = acos(-1.0); 29 //desactivar fix o sci, vuelve std, setea prec. 6
6 30 cout.unsetf(ios::floatfield);
7 int main(void) 31 cout.precision(6);
8 { 32 cout<< "<std, prec. 6> PI = "<< PI << endl;
9 // estándar, 6 dig. prec. incluidos enteros 33
10 cout << "<std, prec. 6> PI = " << PI << endl; 34 return 0;
11 // estándar, 3 dig. prec. incluidos enteros 35 }
12 cout.precision(3);
13
14
cout << "<std, prec. 3> PI = " << PI << endl; “Cuidado con los flags que activemos, normalmente
// formato fixed, 6 dig. prec. a partir del punto
15 cout.setf(ios::fixed);cout.precision(6); hace falta desactivarlos antes de activar otro, por
16 cout << "<fix, prec. 6> PI = " << PI <<endl; ejemplo si se activan fixed y scientific a la vez el
17 // formato scientific, 2 dig. prec. desde el punto
18 cout.unsetf(ios::fixed);cout.setf(ios::scientific); resultado se distorsiona. Experimenten con cada
19 cout.precision(2); detalle.”
20 cout << "<sci, prec. 2> PI = " << PI <<endl;
21 // formato fixed, 20 dig. prec. a partir del punto “Algunos seteos permanecen hacia adelante como
22 cout.unsetf(ios::scientific);cout.setf(ios::fixed); precisión o alineación, más detalle en la
23 cout.precision(20);
24 cout << "<fix, prec. 20> PI = "<< PI <<endl; documentación de C++”
25
26
// ancho 10, rellenado por '-', alineado a la izq.
cout.width(10);cout.fill('-');cout.setf(ios::left);
“No olviden verificar cómo varía la precisión de PI
27 cout << 12 << endl; cuando se define como double en lugar de float”
28
Números aleatorios
1 #include <iostream> 25 num = rand() % (num_max - num_min + 1) +
2 #include <cstdlib> num_min;
3 #include <ctime> 26 //número decimal entre 0 y 1
4 27 num01 = (float) rand() / RAND_MAX;
5 using namespace std; 28
6 29 cout << "Una lanzada de dado puede dar: "
7 int main(void) << dado << endl;
8 { 30 cout << "Una carta al azar puede dar: " <<
9 int dado, carta, num10, num1000, num; carta << endl;
10 int num_min = -120, num_max = 180; 31 cout << "Una número entre 0-10: " << num10
11 float num01; << endl;
12 32 cout << "Una número entero positivo menor a
13 //siembra de semilla 1000: " << num1000 << endl;
14 srand(time(NULL)); 33 cout << "Un número aleatorio entre " <<
15 num_min << " y " << num_max << ": " << num
16 //random entre 1 y 6 = (random 0 - 5) + 1 << endl;
17 dado = rand() % 6 + 1; 34 cout << "Un número decimal entre 0 y 1: "
18 //random entre 1 y 13 = (random 0 - 12) + 1 << num01 << endl;
19 carta = rand() % 13 + 1; 35
20 //número random entre 0 y 10 36 return 0;
21 num10 = rand() % (10 + 1); 37 }
22 //número random entre 0 y 999
23 num1000 = rand() % 1000;
24 //random entre un valor mínimo y un máximo
“Generar las notas de las prácticas calificadas y los
Ejemplo nota del curso exámenes parcial y final de forma aleatoria y calcular el
promedio del curso, mostrar con dos cifras decimales.”
1 #include <iostream> 25 ep = rand() % 21;
2 #include <cmath> 26 ef = rand() % 21;
3 #include <cstdlib> 27
4 #include <ctime> 28 pf = (pp + ep + 2 * ef) / 4.0;
5 29
6 using namespace std; 30 cout << "Practica 1: " << pc1 << endl;
7 31 cout << "Practica 2: " << pc2 << endl;
8 int main(void) 32 cout << "Practica 3: " << pc3 << endl;
9 { 33 cout << "Practica 4: " << pc4 << endl;
10 int pc1, pc2, pc3, pc4, ep, ef, pmin; 34
11 float pp, pf; 35 cout << fixed; cout.precision(2);
12 36
13 srand(time(NULL)); 37 cout << "\nPromedio de practicas: " << pp
14 << endl;
15 pc1 = rand() % 21; 38 cout << "Examen Parcial: " << ep << endl;
16 pc2 = rand() % 21; 39 cout << "Examen Final: " << ef << endl;
17 pmin = fmin(pc1, pc2); 40
18 pc3 = rand() % 21; 41 cout << "\nPROMEDIO DEL CURSO: " << pf <<
19 pmin = fmin(pc3, pmin); endl;
20 pc4 = rand() % 21; 42
21 pmin = fmin(pc4, pmin); 43 return 0;
22 44 }
23 pp = (pc1 + pc2 + pc3 + pc4 - pmin) / 3.0;
24
Ejercicios propuestos
1. Escriba un programa que genere tres lados de un triángulo de forma aleatoria, enteros de un valor máximo
de 50, y determinar si los tres lados forman un triángulo válido (condición de existencia de un triángulo). La
salida del programa debería ser del tipo: Los lados del triángulo son: 25, 15, 45. ¿El triángulo es válido?
false.
2. Considere que un trabajador gana 50 soles por un día de trabajo de 8 horas. Si tiene que trabajar horas
extra (después de las 8 primeras), hasta un máximo de 2 horas se le paga el 25% extra, y después de esto se
le paga el 35%. Considere que se paga por hora o fracción. Si un día, después de 6 horas de trabajo se
presenta un trabajo correctivo que puede durar media hora en el mejor de los casos y 8 horas en el peor.
Escriba un programa que indique cuántas horas trabajó en el día en cuestión y cuánto cobrará por este si
puede trabajar un máximo de 12 horas consecutivas.
3. Se tiene una población cuyo crecimiento se ajusta al modelo de crecimiento compuesto (Pf = Po x (1 + r)^n,
donde Pf es población final, Po población inicial, r tasa de crecimiento anual, y n la cantidad de años).
Escriba un programa que permita determinar, para una población inicial de 6.36 millones, en cuántos años
se superarán los 10 millones si se tiene una tasa de crecimiento del 2% anual. El programa deberá indicar
cuantos años (enteros) harán falta y cuantas personas por encima de los 10 millones habrán al final.
4. Escriba un programa que pida dos números enteros y devuelva el menor de los dos. (No utilizar cmath ni if)
Ejercicios propuestos
5. Escriba un programa que pida la nota de tres estudiantes y devuelva el número de aprobados (nota
aprobatoria mínima > 10.00). Por ejemplo si se ingresa 14.50, 12.00, 8.20, debería devolver 2. (No utilizar
alguna función que calcule mínimos ni if)
6. Amplie el programa anterior para que calcule el promedio de los aprobados. Con los datos del ejemplo
anterior, debería devolver 13.25. Asuma además que siempre por lo menos debe haber un aprobado.
7. Escriba un programa que lea los valores hexadecimales de tres caracteres ASCII, y muestre los tres
caracteres correspondientes juntos en la consola. Por ejemplo, si ingresa 48, 49, 21, el programa debería
mostrar el mensaje HI!
8. Considere una cabecera de protocolo TCP que tiene la siguiente estructura:
bit 8 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1

URG ACK SYN FIN

Cada bit con nombre tiene un significado particular, escriba un programa que pida un valor entero positivo
de 8 bits (0 - 255) y entregue los valores de URG, ACK, SYN, FIN correspondientes. Por ejemplo, si se ingresa
86 (0b01010110), entregue URG: 1, ACK: 0, SYN: 1, FIN: 0. Utilice operadores bitwise (&, |, ^, ~, <<, >>)
¿PREGUNTAS?
¡GRACIAS!

También podría gustarte