Está en la página 1de 8

Universidad Nacional de Ingeniería | FIM-UNI | Programación Orientada a Objetos (MB545)

FIM-UNI Tercera Práctica Calificada – 29/01/2021.


Apellidos: GALINDO COLONIO
Nombres: JESUS ANGEL
Código: 20154126I
Curso: MB545
Sección (E/F): E
NOTA: (dejar en blanco)

Indicaciones generales:

1) La práctica es individual.
2) En el programa (al inicio) incluir un rótulo de identificación con el nombre del programa, autor
(apellidos y nombres), código, fecha y versión.
3) En el programa principal (main) no deberá realizar ninguna operación de cálculo ni de impresión de
resultados. Usar todos los métodos que sean necesarios.
4) No usar identificadores o variables globales, salvo el valor constante de PI.
5) Validar todos los datos ingresados y mostrar mensajes de error según sea el caso.
6) Usar comentarios con textos adecuados indicando la operación a realizar.
7) Los nombres de las variables deben ser afines a la función o tipo de valor que guardan.
8) El programa finalizará cuando el usuario responda con “S” a la pregunta “¿Desea Salir?”.
9) Copiar en este documento sólo el código fuente del programa (*.h, *.cpp) y además, incluir al menos
tres corridas (“pantallazos”) del programa.
10) Subir a la plataforma del Aula Virtual FIM-UNI, este mismo documento en WORD con la solución y
corridas. No lo convierta a formato PDF. Y en el nombre del archivo Word incluir también su sección,
apellido y nombre.

Pregunta 1:

Se solicita realizar un programa en el lenguaje de programación Visual C++ que - usando el paradigma de
Programación Orientada a Objetos POO (Clases, Atributos, Métodos, Objetos) - permita evaluar, calcular y
mostrar el área total y el volumen de un cuerpo geométrico (cilindro y/o cono recto/regular). Para ello el
programa deberá solicitar el ingreso del tipo de cuerpo geométrico a evaluar, y en función a ello, solicitará los
demás datos requeridos (radio de la base, altura y/o generatriz) según sea el caso. Usar archivos de cabecera
*.h para la declaración de la clase(s). Además, tener en cuenta el proceso de encapsulamiento para mayor
seguridad de los atributos (datos).

Pregunta 2:

Se solicita realizar un programa en el lenguaje de programación Visual C++ que - usando el paradigma de la
Programación Orientada a Objetos POO (Clases, Atributos, Métodos, Objetos) - permita leer un número entero
de N dígitos y en función a ello deberá almacenar los divisores pares de dicho número en un vector
unidimensional. Finalmente, mostrar lo siguiente: el número entero (original), la cantidad de elementos
guardados en el vector, la suma y el mayor valor de dichos elementos. Para cada operación (lectura, procesos
e impresión de resultados) deberá usar métodos independientes. No se aceptará como válido que se cree un
solo método para todos los procesos/cálculos. Usar encapsulamiento.
Solución (Pregunta 1)
//-------------------------------------------------------------------------------------------

//Programa : Se solicita realizar un programa en el lenguaje de programación Visual C++


//que - usando el paradigma de Programación Orientada a Objetos POO (Clases, Atributos,
Métodos, Objetos)
//- permita evaluar, calcular y mostrar el área total y el volumen de un cuerpo geométrico
//(cilindro y/o cono recto/regular).cpp

//Autor GALINDO COLONIO JESUS 29 Enero 2021 Version 2.0

//-------------------------------------------------------------------------------------------
//Ingreso de Bibliotecas
#include <iostream>
#include <math.h>
#define pi 3.14159265359

using namespace std;

//Creando la clase de cono


class cono {
private:
float r, h, g;
public:
cono(float, float);
float area_total();
float volumen();
void impresion();
};

//Creando la clase de cilindro


class cilindro {
private:
float r, h;
public:
cilindro(float, float);
float area_total();
float volumen();
void impresion();
};

//Constructores del cono


cono::cono(float _r, float _h) {
r = _r;
h = _h;
g = sqrt(r * r + h * h);
}

//Constructores del cilindro


cilindro::cilindro(float _r, float _h) {
r = _r;
h = _h;
}

//Creando los metodos


float cono::area_total() {
float _area_total;
_area_total = pi * r * r + pi * r * g;
return _area_total;
}
float cilindro::area_total() {
float _area_total;
_area_total = 2 * pi * r * r + 2 * pi * r * h;
return _area_total;
}

float cono::volumen() {
float _volumen;
_volumen = pi * r * r * h/3;
return _volumen;
}

float cilindro::volumen() {
float _volumen;
_volumen = pi * r * r * h;
return _volumen;
}

//Creando el metodo para la validacion


void cilindro::impresion() {
cout << "\n\nImpresion de datos:\n";
cout << "El area total del cilindro es: :" << area_total() << endl;
cout << "El volumen del cilindro es: :" << volumen() << endl;
}

void cono::impresion() {
cout << "\n\nImpresion de datos:\n";
cout << "El area total del cono es: :" << area_total() << endl;
cout << "El volumen del cono es: :" << volumen() << endl;
}

//PROGRAMA PRINCIPAL
int main() {
float _r = 0, _h = 0, _t = 0;
char op = 'S';
int opc = 1;
do {
do{
if (opc != 1 && opc != 2) {
cout << "Solo puede ingresar (1) o (2) intente de nuevo\n";
}
cout << "Elija la opcion:\n";
cout << "<1>Cilindro:\n";
cout << "<2>Cono Regular:\n ";
cout << "RESPUESTA: ";cin >> opc;
cout << endl;
if (opc == 1) {
cout << "\n\tIngrese radio: ";cin >> _r;
cout << "\n\tIngrese altura: ";cin >> _h;
cilindro c1(_r, _h);
c1.impresion();
}
if (opc == 2) {
cout << "\n\tIngrese radio: ";cin >> _r;
cout << "\n\tIngrese altura: ";cin >> _h;
cono c2(_r, _h);
c2.impresion();
}
} while (opc!=1 && opc!=2);
do {
if (op != 'N' && op != 'S') {
cout << "Solo puede ingresar (S) o (N) intente de nuevo\n";
}
cout << "Desea Salir? (S) o (N)\n\tRespuesta: ";cin >> op;
cout << endl;
} while (op != 'N' && op != 'S');
if (op == 'S') {
break;
}
} while (true);
return 0;
}
Solución (Pregunta 2)

//-------------------------------------------------------------------------------------------

//Programa : Se solicita realizar un programa en el lenguaje de programación Visual C++


//que - usando el paradigma de Programación Orientada a Objetos POO (Clases, Atributos,
Métodos, Objetos)
//- permita mostrar la cantidad de divisores de un número, igual que la suma y el mayor de
ellos.
//Autor GALINDO COLONIO JESUS 29 Enero 2021 Version 2.0

//-------------------------------------------------------------------------------------------

//Ingreso de librerias
#include <iostream>
#include <stdio.h>
#include <conio.h>

using namespace std;

class preg2{
private:
int N;
int nDivPar;
int v[10000];
int MDivPar;
public:
void leer();
void mostrarN();
void mostrarnDivPar();
void mostrarSuma();
void mostrarMDivPar();
void calcuVector();
int calcuSuma();
};
//Programa principal
int main(){
char op='N';
preg2 a;
//cuando el usuario ingresa 'S' o 's' el programa termina
while(op!='S'&&op!='s'){
//Realizamos las llamadas
a.leer();
a.mostrarN();
a.mostrarnDivPar();
a.mostrarSuma();
a.mostrarMDivPar();
//Preguntamos al usuario
cout<<"¿Desea salir? (S/N) : ";
op=getche();
cout<<endl;
}
getche();
return 0;
}
void preg2::leer(){
cout<<"Ingrese un numero entero: ";cin>>N;
calcuVector();
//si no tiene divisores pares el programa termina
if(nDivPar==0){
cout<<"El numero ingresado no tiene divisores pares ... \n";
}
}
void preg2::calcuVector(){
int i=2;
int c=0;
//Hallamos los divisores pares diviendo de dos en dos hasta que la división sea menor a
1
//c nos indica la cantidad de divisores, cada que encuentre un divisor este aumenta en 1
while(N/i>=1){
if(N%i==0){
v[c]=i;
c++;
}
i=i+2;
}
nDivPar=c;
//El ultimo divisor será el mayor
MDivPar=v[c-1];
}
int preg2::calcuSuma(){
int s=0;
//sumamos iterativamente cada elemento para obtener la suma del vector
for(int i=0;i<nDivPar;i++){
s+=v[i];
}
return s;
}
//imprimir
//Solo se imprimirá cuando halla divisores pares o sea cuando nDivPAr sea diferente de cero
void preg2::mostrarN(){
if(nDivPar!=0)
cout<<"\tEl numero ingresado es: "<<N<<endl;
}
void preg2::mostrarnDivPar(){
if(nDivPar!=0)
cout<<"\tEl numero de divisiores pares es: "<<nDivPar<<endl;
}
void preg2::mostrarSuma(){
if(nDivPar!=0)
cout<<"\tLa suma de los divisores pares es: "<<calcuSuma()<<endl;
}
void preg2::mostrarMDivPar(){
if(nDivPar!=0)
cout<<"\tEl mayor divisor par es: "<<MDivPar<<endl;
}

También podría gustarte