desing c++

ANDM hpp


#ifndef _ANDM_
#define _ANDM_

#include "Puerta.hpp"
#include <vector>

class AndM : public Puerta {

private:
std::vector<Puerta*> _pts;

public:

AndM(std::string nombre);

AndM() = default;

void conecta(Puerta* pt);

void conecta(Puerta* pt, int i);

virtual int salida();

virtual std::string info(int numEspacios = 0);

};




#endif


ANDM CPP


#include "AndM.hpp"
#include <sstream>

AndM::AndM(std::string nombre) : Puerta(nombre){
}


void AndM::conecta(Puerta* pt){
_pts.push_back(pt);
}

void AndM::conecta(Puerta* pt, int i){

if ( i <= _pts.size()){

_pts[i] = pt;

}else{

for ( int j = _pts.size(); j < i; j++){
_pts.push_back(NULL);
_pts[j] = nullptr;
}
//Ponemos todo a null hasta llegar a la posiciĆ³n indicada y luego conectamos la puerta
_pts.push_back(pt);



}

}

int AndM::salida() {

std::vector<int> entradas;
int entrada;
unsigned cuenta = 0;
unsigned cuentacero = 0;
unsigned cuentaND = 0;

for(size_t i = 0; i < _pts.size(); i++){

if(_pts[i] == nullptr){
entrada = ND;
entradas.push_back(entrada);
}else{
entrada = _pts[i]->salida();
entradas.push_back(entrada);
}
}

for (size_t i=0; i < entradas.size(); i++){

if(entradas[i] == ND){
cuentaND ++;
}
if(entradas[i] == 1){
cuenta ++;
}
if(entradas[i] == 0){
cuentacero ++;
}
}

if((cuentaND > 0) || (_pts.empty())){
return ND;
}else{
if(cuentacero > 0){
return 0;
}

if(cuenta == entradas.size()){
return 1;
}
}


}

std::string AndM::info(int numEspacios){

std::ostringstream oss;
std::string espacios(numEspacios,' ');
std::string esp2(numEspacios + 2,' ');
oss << espacios << "Puerta ANDM ";

if (_nombre != "SinNombre") {
oss << "[" << _nombre << "] ";
}

oss <<"(id=" << _id << ") salida = "
<< salida() << "\n";

for(size_t i = 0; i < _pts.size(); i++){
if (_pts[i] == nullptr){
oss << esp2 << "NO CONECTADA\n";
}else{
oss << _pts[i]->info(numEspacios +2);
}
}

return oss.str();

}

ORM HPP

#ifndef _ORM_
#define _ORM_

#include "Puerta.hpp"
#include <vector>

class OrM : public Puerta {

private:
std::vector<Puerta*> _pts;

public:

OrM(std::string nombre);

OrM() = default;

void conecta(Puerta* pt);

void conecta(Puerta* pt, int i);

virtual int salida();

virtual std::string info(int numEspacios = 0);

};




#endif


ORMCPP

#include "OrM.hpp"
#include <sstream>

OrM::OrM(std::string nombre) : Puerta(nombre){
}


void OrM::conecta(Puerta* pt){
_pts.push_back(pt);
}

void OrM::conecta(Puerta* pt, int i){

if ( i <= _pts.size()){

_pts[i] = pt;

}else{

for ( int j = _pts.size(); j < i; j++){
_pts.push_back(NULL);
_pts[j] = nullptr;
}
//Ponemos todo a null hasta llegar a la posiciĆ³n indicada y luego conectamos la puerta
_pts.push_back(pt);

}

}

int OrM::salida() {

std::vector<int> entradas;
int entrada;
unsigned cuenta = 0;
unsigned cuentaND = 0;

for(size_t i = 0; i < _pts.size(); i++){

if(_pts[i] == nullptr){
entrada = ND;
entradas.push_back(entrada);
}else{
entrada = _pts[i]->salida();
entradas.push_back(entrada);
}
}

for (size_t i=0; i < entradas.size(); i++){

if(entradas[i] == ND){
cuentaND ++;
}
if(entradas[i] == 1){
cuenta ++;
}
}

if((cuentaND > 0) || (_pts.empty())){
return ND;
}else{
if(cuenta != 0){
return 1;
}else{
return 0;
}
}


}

std::string OrM::info(int numEspacios){

std::ostringstream oss;
std::string espacios(numEspacios,' ');
std::string esp2(numEspacios + 2,' ');
oss << espacios << "Puerta ORM ";

if (_nombre != "SinNombre") {
oss << "[" << _nombre << "] ";
}

oss <<"(id=" << _id << ") salida = "
<< salida() << "\n";

for(size_t i = 0; i < _pts.size(); i++){
if (_pts[i] == nullptr){
oss << esp2 << "NO CONECTADA\n";
}else{
oss << _pts[i]->info(numEspacios +2);
}
}

return oss.str();

}

Topic archived. No new replies allowed.