Actualizados comentarios.
This commit is contained in:
parent
b26a0fecfd
commit
a9a178c7b3
292
main.cpp
292
main.cpp
@ -1,146 +1,146 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
AR - Ejercicio de análisis RTO
|
AR - Ejercicio de análisis RTO
|
||||||
Fernando Méndez Torrubiano (https://fernmend.ddns.net)
|
Fernando Méndez Torrubiano (https://fermdez.net)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//Constantes:
|
//Constantes:
|
||||||
const int nDatos = 200;
|
const int nDatos = 200;
|
||||||
const int nSeries = 5;
|
const int nSeries = 5;
|
||||||
|
|
||||||
//Tipos:
|
//Tipos:
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double
|
double
|
||||||
M, //Muestra.
|
M, //Muestra.
|
||||||
RTTs, //RTTs.
|
RTTs, //RTTs.
|
||||||
D, //Desviación.
|
D, //Desviación.
|
||||||
RTO_Jacobson, //RTO de Jacobson.
|
RTO_Jacobson, //RTO de Jacobson.
|
||||||
RTO_Jacobson_Karels; //RTO de Jacobson/Karels.
|
RTO_Jacobson_Karels; //RTO de Jacobson/Karels.
|
||||||
} tDatos;
|
} tDatos;
|
||||||
typedef tDatos tListaDatos[nDatos];
|
typedef tDatos tListaDatos[nDatos];
|
||||||
|
|
||||||
struct Comma final : std::numpunct<char>{ //Cambia los '.' de los double por ','.
|
struct Comma final : std::numpunct<char>{ //Cambia los '.' de los double por ','.
|
||||||
char do_decimal_point() const override { return ','; }
|
char do_decimal_point() const override { return ','; }
|
||||||
};
|
};
|
||||||
|
|
||||||
//Funciones:
|
//Funciones:
|
||||||
void inicializa(tListaDatos&); //Inicializa el array de datos.
|
void inicializa(tListaDatos&); //Inicializa el array de datos.
|
||||||
bool cargar(tListaDatos&, string&); //Carga los archivos de las series.
|
bool cargar(tListaDatos&, string&); //Carga los archivos de las series.
|
||||||
void calcular(tListaDatos&, string&); //Calcula los resultados de los algoritmos de Jacobson y Jacobson/Karels.
|
void calcular(tListaDatos&, string&); //Calcula los resultados de los algoritmos de Jacobson y Jacobson/Karels.
|
||||||
void guardar(tListaDatos&, string&); //Guarda los resultados de los algoritmos de Jacobson y Jacobson/Karels.
|
void guardar(tListaDatos&, string&); //Guarda los resultados de los algoritmos de Jacobson y Jacobson/Karels.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
system("chcp 1252"); //Castellano.
|
system("chcp 1252"); //Castellano.
|
||||||
system("cls");
|
system("cls");
|
||||||
|
|
||||||
tListaDatos _datos;
|
tListaDatos _datos;
|
||||||
string serie = "../Series/serie", salida = "../Resultados/output"; //Nombres de los archivos.
|
string serie = "../Series/serie", salida = "../Resultados/output"; //Nombres de los archivos.
|
||||||
|
|
||||||
|
|
||||||
for (int i = 1; i <= nSeries+1; i++){
|
for (int i = 1; i <= nSeries+1; i++){
|
||||||
serie += to_string(i) + ".dat";
|
serie += to_string(i) + ".dat";
|
||||||
if (cargar(_datos, serie)) {
|
if (cargar(_datos, serie)) {
|
||||||
salida += to_string(i) + ".dat";
|
salida += to_string(i) + ".dat";
|
||||||
calcular(_datos, salida);
|
calcular(_datos, salida);
|
||||||
cout << "Serie " << i << " calculada correctamente." << endl;
|
cout << "Serie " << i << " calculada correctamente." << endl;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cout << "Error al cargar uno o m<>s archivos de datos." << endl;
|
cout << "Error al cargar uno o m<>s archivos de datos." << endl;
|
||||||
}
|
}
|
||||||
serie = "../Series/serie";
|
serie = "../Series/serie";
|
||||||
salida = "../Resultados/output";
|
salida = "../Resultados/output";
|
||||||
}
|
}
|
||||||
|
|
||||||
//system("PAUSE");
|
//system("PAUSE");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void inicializa(tListaDatos& _datos) {
|
void inicializa(tListaDatos& _datos) {
|
||||||
for (int i = 0; i < nDatos; i++){
|
for (int i = 0; i < nDatos; i++){
|
||||||
_datos[i].M = 0;
|
_datos[i].M = 0;
|
||||||
_datos[i].D = 0;
|
_datos[i].D = 0;
|
||||||
_datos[i].RTTs = 0;
|
_datos[i].RTTs = 0;
|
||||||
_datos[i].RTO_Jacobson = 0;
|
_datos[i].RTO_Jacobson = 0;
|
||||||
_datos[i].RTO_Jacobson_Karels = 0;
|
_datos[i].RTO_Jacobson_Karels = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cargar(tListaDatos& _datos, string& serie) {
|
bool cargar(tListaDatos& _datos, string& serie) {
|
||||||
bool carga = false;
|
bool carga = false;
|
||||||
ifstream archivo;
|
ifstream archivo;
|
||||||
|
|
||||||
inicializa(_datos);
|
inicializa(_datos);
|
||||||
archivo.open(serie);
|
archivo.open(serie);
|
||||||
if (!archivo.is_open()) {
|
if (!archivo.is_open()) {
|
||||||
cout << "Error al cargar el archivo: " << serie << endl;
|
cout << "Error al cargar el archivo: " << serie << endl;
|
||||||
carga = false;
|
carga = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (!archivo.eof() && i < nDatos) {
|
while (!archivo.eof() && i < nDatos) {
|
||||||
archivo >> _datos[i].M;
|
archivo >> _datos[i].M;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
carga = true;
|
carga = true;
|
||||||
}
|
}
|
||||||
archivo.close();
|
archivo.close();
|
||||||
|
|
||||||
return carga;
|
return carga;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calcular(tListaDatos& _datos, string& fichero) {
|
void calcular(tListaDatos& _datos, string& fichero) {
|
||||||
double alpha = 0.125; // 1/8
|
double alpha = 0.125; // 1/8
|
||||||
double beta = 0.25; // 1/4
|
double beta = 0.25; // 1/4
|
||||||
double gamma = 2;
|
double gamma = 2;
|
||||||
|
|
||||||
// Caso Base:
|
// Caso Base:
|
||||||
_datos[0].RTTs = _datos[0].M; //Calculamos RTTs de 0.
|
_datos[0].RTTs = _datos[0].M; //Calculamos RTTs de 0.
|
||||||
_datos[0].D = _datos[0].M / 2; //Calculamos la desviación de 0.
|
_datos[0].D = _datos[0].M / 2; //Calculamos la desviación de 0.
|
||||||
_datos[0].RTO_Jacobson = gamma * _datos[0].RTTs; //Calculamos RTO de Jacobson de 0.
|
_datos[0].RTO_Jacobson = gamma * _datos[0].RTTs; //Calculamos RTO de Jacobson de 0.
|
||||||
_datos[0].RTO_Jacobson_Karels = _datos[0].RTTs + (4 * _datos[0].D); //Calculamos RTO de Jacobson/Karels de 0.
|
_datos[0].RTO_Jacobson_Karels = _datos[0].RTTs + (4 * _datos[0].D); //Calculamos RTO de Jacobson/Karels de 0.
|
||||||
// Resto de casos:
|
// Resto de casos:
|
||||||
for (int i = 1; i < nDatos; i++) {
|
for (int i = 1; i < nDatos; i++) {
|
||||||
_datos[i].RTTs = (((1 - alpha) * _datos[i - 1].RTTs) + (alpha * _datos[i].M)); //Calculamos RTTs de i.
|
_datos[i].RTTs = (((1 - alpha) * _datos[i - 1].RTTs) + (alpha * _datos[i].M)); //Calculamos RTTs de i.
|
||||||
_datos[i].RTO_Jacobson = gamma * _datos[i].RTTs; //Calculamos RTO de Jacobson de i.
|
_datos[i].RTO_Jacobson = gamma * _datos[i].RTTs; //Calculamos RTO de Jacobson de i.
|
||||||
_datos[i].D = (((1 - beta) * _datos[i - 1].D) + (beta * abs(_datos[i - 1].RTTs - _datos[i].M))); //Calculamos la Desviación de i.
|
_datos[i].D = (((1 - beta) * _datos[i - 1].D) + (beta * abs(_datos[i - 1].RTTs - _datos[i].M))); //Calculamos la Desviación de i.
|
||||||
_datos[i].RTO_Jacobson_Karels = (_datos[i].RTTs + (4 * _datos[i].D)); //Calculamos RTO de Jacobson/Karels de i.
|
_datos[i].RTO_Jacobson_Karels = (_datos[i].RTTs + (4 * _datos[i].D)); //Calculamos RTO de Jacobson/Karels de i.
|
||||||
}
|
}
|
||||||
|
|
||||||
guardar(_datos, fichero);
|
guardar(_datos, fichero);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void guardar(tListaDatos& _datos, string& fichero) {
|
void guardar(tListaDatos& _datos, string& fichero) {
|
||||||
ofstream archivo;
|
ofstream archivo;
|
||||||
|
|
||||||
archivo.open(fichero);
|
archivo.open(fichero);
|
||||||
if (!archivo.is_open()) {
|
if (!archivo.is_open()) {
|
||||||
cout << "Error al guardar el fichero." << fichero << endl;
|
cout << "Error al guardar el fichero." << fichero << endl;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
archivo.imbue(std::locale(std::locale::classic(), new Comma));
|
archivo.imbue(std::locale(std::locale::classic(), new Comma));
|
||||||
archivo << left
|
archivo << left
|
||||||
<< setw(20) << "RTO(Jacobson)"
|
<< setw(20) << "RTO(Jacobson)"
|
||||||
<< setw(25) << "RTO(Jacobson/Karels)"
|
<< setw(25) << "RTO(Jacobson/Karels)"
|
||||||
<< setw(15) << "RTTs"
|
<< setw(15) << "RTTs"
|
||||||
<< setw(15) << "Desviación"
|
<< setw(15) << "Desviación"
|
||||||
<< setw(0) << " M" << endl;
|
<< setw(0) << " M" << endl;
|
||||||
for (int i = 0; i < nDatos; i++) {
|
for (int i = 0; i < nDatos; i++) {
|
||||||
archivo << left << setprecision(5)
|
archivo << left << setprecision(5)
|
||||||
<< setw(20) << _datos[i].RTO_Jacobson
|
<< setw(20) << _datos[i].RTO_Jacobson
|
||||||
<< setw(25) << _datos[i].RTO_Jacobson_Karels
|
<< setw(25) << _datos[i].RTO_Jacobson_Karels
|
||||||
<< setw(15) << _datos[i].RTTs
|
<< setw(15) << _datos[i].RTTs
|
||||||
<< setw(15) << _datos[i].D
|
<< setw(15) << _datos[i].D
|
||||||
<< setw(0) << _datos[i].M << endl;
|
<< setw(0) << _datos[i].M << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
archivo.close();
|
archivo.close();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user