Está en la página 1de 14

UNIVERSIDAD POLITÉCNICA SALESIANA

CARRERA DE COMPUTACIÓN
PROGRAMACIÓN ORIENTADA A OBJETOS
PRACTICA 02: MIEMBROS ESTATICOS Y MANEJO DE OBJETOS

Nombre: Pedro Vinicio Alajo Huilcamaigua


Fecha:07/04/22

Docente: Ing. Rodrigo Tufiño


OBJETIVO:
• Resolver problemas de programación utilizando el paradigma orientado a objetos
PRE-REQUISITOS:
a) Computador personal con Microsoft Windows o GNU/Linux
b) Compilador para C++11
c) IDE de Desarrollo para C/C++
INSTRUCCIONES: 1. Lea detenidamente cada uno de los enunciados propuestos

2. Plantee una solución a cada uno de los ejercicios


3. Programe una solución utilizando el lenguaje de programación
C++
4. Elabore un informe con la solución de los ejercicios

Introducción
Podemos decir que una función se declararía a si misma como miembro estático cuando
la misma no varía, podemos poner cualquier base además de ingresar cualquier clase ya
sea particular de la conocida función objeto donde esta se volverá independiente por así
decirlo, estos miembros estáticos específicamente no necesitan ser invocados en algún ya
mencionado objeto, ya que, al nosotros inicializar una función de forma estática, la
agregaremos al código mas el nombre de la clase, en conjunto con el operador y
obviamente sus cuatro puntos de acceso, así automáticamente si ejecutara la función
estática.
Marco teórico
Podemos decir con exactitud que los métodos llamados “Estáticos” lo que básicamente
tratan es importar instancias ya sean grandes o pequeñas de una clase, en la cual se hará
una copia automatizada del nombre el cual declaremos como estático y este de igual
manera se compartirá automáticamente por todos los objetos y clases, si no existiera otra
declaración de inicialización al momento de crear el objeto, todos estos datos se inicializar
a un valor de 0.
ACTIVIDADES PARA DESARROLLAR:
Partiendo del código base que se estudió en clase sobre pacientes y Hospitales, resolver las
siguientespreguntas:

1. Pregunta de programación
Indica que sucede si se elimina el constructor por defecto de la clase “Paciente”
(archivo paciente.cpp y paciente.h). ¿Qué error emite el compilador?, ¿Por qué crees
que se produce este error ? Consulta en Internet y responde de forma razonada.
Coloca las referencias que consultaste para responder.

Inicialmente podemos observar que al eliminar la “Clase Y Subclase” Paciente el error


que nos va a emitir de manera automática va ser el cual nos indicara que este no está
asignado, por lo que el mismo estará ubicándose a una ubicación inexistente por lo que
por obvia razón se solicitara asignar la ubicación exacta, con esto los errores emitidos por
el programa vienen siendo variables las cuales no son declaradas, ya que podemos ver
que al eliminar paciente.cpp y paciente.h no se eliminaran todas las funciones ya antes
declaradas en el main.cpp y hospital.cpp porque como vemos en estas clases vienen
ancladas entre si por distintas funciones que tomamos para la ejecución del código.

2 Paciente
Nuestro programa ha tenido éxito y las autoridades sanitarias de la ciudad nos ha
solicitado querequieren más información de los pacientes hospitalizados. Estos
requerimientos son:
a) Genero del paciente, masculino o femenino (utiliza un tipo de dato char)
b) Altura en metros
c) Masa en kilogramos
d) Si un paciente ha sido dado de alta
e) Obtener el Índice de masa corporal del paciente, con su respectiva apreciación.

Deberás agregar más atributos y métodos a la clase Paciente. Además, tendrás que
modificar elmétodo “ficha()” para que imprima los atributos adicionales.

3 Hospital
Así mismo, los hospitales nos han solicitado agregar algunas funciones extra que se
listan acontinuación:
f) Dar de alta a un paciente.
g) Listar solo los pacientes con Covid-19

Por lo tanto, deberás agregar los métodos pertinentes que permitan realizar estas
funciones extra que nos solicitan.

4 Método main
Dentro del método main, debes realizar las modificaciones pertinentes para que
permita realizar losiguiente:
h) Ingresar el nombre del Hospital (solo la primera vez).
i) Mostrar un menú con las siguientes opciones:
1) Ingresar un paciente (solicitar todos los datos).
2) Listar todos los pacientes.
3) Listar pacientes con Covid-19.
4) Dar de alta a un paciente.
5) Establecer como contagiado a un paciente (establecer el atributo positivo a
verdadero)
6) Total de pacientes existentes
7) Salir
Las opciones 4 y 5 deberán solicitar el Identificador (id) del paciente, para que pueda
ser localizadodentro del vector y puedas modificar su estado. El menú siempre está
activo y el programa finaliza solamente cuando se elige la opción 8. Validar que la
opción ingresada sea correcta.

Código en C++
(Headers)

“Hospital.h”
En esta clase principalmente inicialice y agregue la librería en la cual podemos encontrar
variables y formulas del paciente ya que en paciente seria clave fundamental de este
código Hospital, por otro lado veremos que la clase(Hospital) y la subclase (paciente), ya
que podemos ver que estas se complementan entre si así que estas dependerán entre sí,
aquí mostraremos los pacientes con y sin SarsCOV y demás cosas que solicita el código.
#ifndef HOSPITAL_H
#define HOSPITAL_H
// librerias del sistema
#include <vector>
#include <iostream>
//librerias propias
#include "paciente.h"

using namespace std;

class Hospital
{
private:
string nombre;
vector<Paciente> pacientesCON;
vector<Paciente> pacientesTODO;
public:
Hospital();
Hospital (string nombre);
void ingresarPaciente();
void listarPacientesConSarsCov_19();
void listarPacientesENGENERAL();
void ALTAP();
};

#endif // HOSPITAL_H

“paciente.h”
Básicamente lo que yo pude utilizar para generar la solución para esta clase fue agregar
variables distintas que el código solicitaba ya que el código de partida por así decirlo fue
impartido por el docente, de igual manera agregue algunas variables las cuales son de tipo
(float y string) para poder inicializar y ejecutar el (código.h).
#ifndef PACIENTE_H
#define PACIENTE_H
#include <string>
using namespace std;

class Paciente
{
private:

int ID; //ID paciente, este numero en particular se


da para diferenciar al paciente
string Nombre; // Nombre del paciente
int edad; //Edad del paciente

bool positivo; //Si dio positivo o no para diferenciar si la


prueba del SARS-COV-19
bool alta;

string genero;

float altura; //En metros.


float masa; //En kg.
float IMCPersona; //Esto nos dara el IMC contando con los datos
de arriba

string TieneSarsCOV();
string EstadeAlta();

public:
static int totalPacientes; //Es un contador estatico para el
numero de pacientes los cuales se van a crear automaticamente.
Paciente();
Paciente(string Nombre, int edad, string genero, float altura,
float masa, float indice);
string ficha();
void thisALTA(bool newValue);
void setPositivo(bool newValue);
};
#endif // PACIENTE_H

(Sources)
“Hospital.cpp”

#include "hospital.h"

Hospital::Hospital()
{
this->nombre = "";
}
Hospital::Hospital(string nombre)
{
this->nombre = nombre;
cout << "\n\t" +this->nombre + "\n";
}

void Hospital::ingresarPaciente()
{
string nombre;
int EdadP;
bool TieneSarsCOV;

string GeneroP;

float IMCPersona;
float AlturaP;
float masa;

cout << "\nIngrese el nombre del paciente: ";


getline(cin >> ws,nombre);
cout << "\nIngrese la edad del paciente: ";
cin >> EdadP;
cout << "\nIngrese su Genero (M/F): ";
cin >> GeneroP;
cout << "\nIngrese su altura: ";
cin >> AlturaP;
cout << "\nIngrese su masa corporal: ";
cin >> masa;

// Creador de paciente
Paciente p(nombre, EdadP, GeneroP, AlturaP, masa, IMCPersona);

//Tene covid?
cout << "¿El paciente tiene Covid: \n";
cout << "1: Si\n0: No\n";
cout << "Ingrese el valor de la prueba: ";
cin >> TieneSarsCOV;

p.setPositivo(TieneSarsCOV);

this->pacientesTODO.push_back(p);

if(TieneSarsCOV == 1){
//Agrear al paciente a la lista de pacientes
this->pacientesCON.push_back(p); //Sirve solo en vectores
}else;
{

}
//limpiar el buffer de entrada
cin.ignore();
}

void Hospital::ALTAP(){
bool suAlta;
cout << "¿El paciente esta listo para dar de alta?: \n";
cout << "1: Si\n0: No\n";
cout << "Ingrese su opinion: ";
cin >> suAlta;

// Crear al paciente
Paciente p;

p.thisALTA(suAlta);

}
void Hospital::listarPacientesConSarsCov_19()
{
cout << "\n= Lista de pacientes contagiados por el CoVid-19
=\n";

for(Paciente p : this->pacientesCON){
cout << p.ficha();

void Hospital::listarPacientesENGENERAL(){
cout << "\n= Lista de todos pacientes =\n";
//Recorrer las lista de pacientes
for(Paciente p : this->pacientesTODO){
cout << p.ficha();
}

“main.cpp”
En el main.cpp podemos decir que es la parte mas importante del código ya que aquí
presentaremos el menú con sus distintas opciones aquí encontraremos varios métodos
void con los cuales pudimos inicializar el mismo, sin dejar de lado que tendremos que
agregar las librerías utilizadas para que este se ejecute.
#include "paciente.h"
#include "hospital.h"
using namespace std;

// Varible estatica!!!
int Paciente::totalPacientes = 0;

int main()
{

cout<<"[Universidad Politecnica Salesiana]"<<endl;


cout<<"{CODIGO HOSPITAL}"<<endl;
cout<<"[Autor]:Pedro Vinicio Alajo"<<endl;
int op=0, pa=0;
Hospital HCAM("***{Hospital Carlos Andrade Marin}***");
Paciente p;
do{
cout << "\t \t [Escoja una opcion] \t \n";
cout << "\n";
cout << "1.---{Ingreso del paciente}---\n";
cout << "2.---{Lista de pacientes}---\n";
cout << "3.---{Lista de pacientes contagiados}---\n";
cout << "4.---{Dar de alta paciente}---\n";
cout << "5.---{Indicar a un paciente como contagiado}---\n";
cout << "6.---{Total de pacientes}---\n";
cout << "7.---{Salir Programa}---\n\n";
cin >> op;
switch (op) {
case 1:
cout << "\n== INGRESO DEL PACIENTE ==";
HCAM.ingresarPaciente();
break;
case 2:
cout << "\n\n== LISTA DE LOS PACIENTES ==\n\n";
HCAM.listarPacientesENGENERAL();
break;
case 3:
cout << "\n\n== LISTA DE LOS PACIENTES CONTAGIADOS
==\n\n";
HCAM.listarPacientesConSarsCov_19();
break;
case 4:
cout << "\n\n* DAR DE ALTA A UN PACIENTE *\n\n";
cout << "QUE PACIENTE QUIERE DAR DE ALTA? \n";
cin >> pa;
if(pa == p.totalPacientes){
HCAM.ALTAP();
}
break;
case 5:
cout << "\n\n== ESTE PACIENTE ESTA CONTAGIADO ==\n\n";
HCAM.listarPacientesConSarsCov_19();
break;
case 6:
cout << "\n\n Los pacientes en total son: \n\n";
HCAM.listarPacientesENGENERAL();
break;

default:
break;
}
}while(op!=7);
cout << "\t ***{FIN MUCHAS GRACIAS}***\n\n";
/*
//Crear un paciente
Paciente p("Gorgolito Perez", 23);

// Imprimir la ficha del paciente


cout << p.ficha();

// Gorgorito Peres se contagio


p.setPositivo(true);

//Volver imprimir
cout << p.ficha();

//Crear otro paciente


Paciente q ("Lolita Caraguay", 20);
cout << q.ficha();
*/

return 0;
}

“paciente.cpp”

#include "paciente.h"

/**
* @brief Paciente::Paciente Constructor por defecto
*/
Paciente::Paciente()

this->ID = 0;
this->edad = 0;
this->Nombre = "";
this->positivo = false;
this->alta = false;

/**
* @brief Paciente::Paciente Constructor parametrizado
* @param nombre Nombre del paciente
* @param edad Edad del paciente
*/
Paciente::Paciente(string Nombre, int edad, string genero, float
altura, float masa, float indice):Nombre(Nombre), edad(edad),
genero(genero), altura(altura), masa(masa), IMCPersona(indice){

this->positivo = false;

// Incrementa los pacientes


Paciente::totalPacientes++;

//Asigna el numero actual como ID del paciente


this->ID = Paciente::totalPacientes;
this->genero = genero;
this->altura = altura;
this->masa = masa;
this->IMCPersona = masa/(altura*altura);
}

string Paciente::ficha()
{
string str = "ID: "+ to_string(this->ID) + "\n" +
"Nombre: "+ this->Nombre + "\n" +
"Genero: "+ this->genero + "\n" +
"Edad: "+ to_string(this->edad) + "\n" +
"Altura: "+ to_string(this->altura) + " metros\n" +
"Masa:"+ to_string(this->masa) + " kilogramos\n" +
"Indice de masa corporal: "+ to_string(this->IMCPersona)
+ "\n\n";

return str;
}

void Paciente::thisALTA(bool newValue){


this->alta = newValue;
}

void Paciente::setPositivo(bool newValue)

this->positivo = newValue;
}
Ejecución del programa (Se adjunta Capturas)
(Ejecución del menú)

(Ingreso del paciente o los pacientes)


(Listar Pacientes)

(Listar pacientes contagiados)


(Dar alta un paciente)

(Indicar a un paciente como contagiado)


(Total de pacientes)

(Salida del programa)


“Conclusiones”
Puedo decir en mis palabras que este algoritmo tuvo una dificultad media a la hora de
realizarlo, aprendí a utilizar e inicializar variables void de igual manera declarar las
mismas lo que me pareció mas interesante es como podemos declarar 1 variable a partir
de otras dos un ejemplo claro es el IMC con la cual necesitábamos los datos altura y peso
para realizar el cálculo de este, tengo en cuenta que podremos realizar más cálculos a
partir de datos extras.

Referencias y bibliografía

CodinGames. (05 de Enero de 2018). CodinGames. Obtenido de


https://www.codingame.com/playgrounds/50577/miembros-especiales-de-la-clase-
en-c-practica-2/constructores

https://www.codingame.com/playgrounds/50557/clases-y-objetos-en-c-practica-
1/miembros-de-clase-en-c-variables-y-metodos. (2018). Obtenido de CodinGame:
https://www.codingame.com/playgrounds/50557/clases-y-objetos-en-c-practica-
1/miembros-de-clase-en-c-variables-y-metodos

P.J.Deitel, H. (2008). Como Programar en C++. Obtenido de Como Programar en


C++:
http://www.uenicmlk.edu.ni/img/biblioteca/Ing%20en%20%20Sistema%20C++%20
Como%20Programar%20Deitel%206a%20Edicion.pdf

Programacion, T. d. (2019). https://gamedevtraum.com/es/programacion-


informatica/teoria-de-programacion/que-es-un-float-variables-primitivas-punto-
flotante/#:~:text=Existen%20distintos%20tipos%20de%20variables,o%20menos%2
0bits%20para%20su. Obtenido de Teorias de Programación :
https://gamedevtraum.com/es/programacion-informatica/teoria-de-
programacion/que-es-un-float-variables-primitivas-punto-
flotante/#:~:text=Existen%20distintos%20tipos%20de%20variables,o%20menos%2
0bits%20para%20su

También podría gustarte