Trabajo de Habilitación Ascenso2022 8
Trabajo de Habilitación Ascenso2022 8
#include <iostream>
#include <cstring>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
/* run this program using the console pauser or add your own getch,
system("pause") or input loop */
const int MAX = 107, NC = 7; // Número de censos
// Prototipos de funciones
void aritmetico(int [], long [], int, long []);
void geometrico(int [], long [], int, long []);
void exponencial(int [], long [], int, long[]);
void proyeccion(int [], long [], long [], long [], long [], int);
void visualizar(int [], long [], int);
void mejorModelo(int [], long [], long [], long [], long [], int, string);
void proyeccionMM(int [], long [], long [], int, string);
48
// // Proceso
system("cls");
cout << "Ingrese anios de proyeccion: ";
cin >> na;
// Proceso
aritmetico(anio, pob, MAX, pma);
geometrico(anio, pob, MAX, pmg);
exponencial(anio, pob, MAX, pme);
// Salida
proyeccion(anio, pob, pma, pmg, pme, na);
system("Pause");
return 0;
}
// Cálculo
for (i=1; i<NC; i++)
{
k = (p[i]-p[i-1])*1.0/(a[i]-a[i-1]);
r = r + k;
}
49
r = r/(NC-1);
printf("ra = %2.6f\n", r);
// Población inicial
pma[0] = p[0];
for (i=1; i<n; i++)
pma[i] = trunc( (pma[i-1] + r*(a[i] - a[i-1])) + 0.5 );
}
// Cálculo
for (i=1; i<NC; i++)
{
k = pow((p[i]*1.0/p[i-1]), (1.0/(a[i]-a[i-1]))) - 1;
r = r + k;
}
r = r/(NC-1);
printf("rg = %2.6f\n", r);
// Población inicial
pmg[0] = p[0];
for (i=1; i<n; i++)
pmg[i] = trunc( pmg[0]*pow(1+r, (a[i]-a[0])) + 0.5 );
}
50
// Cálculo
for (i=1; i<NC; i++)
{
k = (log(p[i]) - log(p[i-1])) / (a[i]-a[i-1]);
r = r + k;
}
r = r/(NC-1);
printf("re = %2.6f\n", r);
// Población inicial
pme[0] = p[0];
for (i=1; i<n; i++)
pme[i] = trunc( pme[0]*exp(r*(a[i]-a[0])) + 0.5 );
}
void proyeccion(int a[], long p[], long pma[], long pmg[], long pme[], int
n)
{
int i;
char b = ' '; // Blanco
// Membrete
printf("-----------------------------------------------------------
-----------\n");
printf("Anio Poblacion M. Aritmetico M. Geometrico M. Ex-
ponencial\n");
printf("-----------------------------------------------------------
-----------\n");
// Salida
for (i=0; i<NC+n; i++)
{
if (i==NC)
printf("-----------------------------------------------------
-----------------\n");
if (i<NC)
51
printf("%4d %15d %15d %16d %16d\n",a[i], p[i], pma[i], pmg[i],
pme[i]);
else
printf("%4d %15c %15d %16d %16d\n",a[i], b, pma[i], pmg[i],
pme[i]);
}
}
void mejorModelo(int a[], long p[], long pma[], long pmg[], long pme[],
int n, string titulo) /* desarrollo */
{
int i;
int mejorModelo;
float eca1, eca2, eca;
float ecg1, ecg2, ecg;
float ece1, ece2, ece;
float suma1, suma2, suma3;
float proma, promg, prome;
// Cálculo
suma1 = suma2 = suma3 = 0; // Acumuladores
for (i=0; i<NC; i++)
{
// Modelo aritmético
eca1 = 100.0-(p[i]*100.0/pma[i]);
eca2 = fabs(eca1/100.0);
eca = pow(eca2, 2);
suma1 = suma1 + eca;
// Modelo geométrico
ecg1 = 100.0-(p[i]*100.0/pmg[i]);
ecg2 = fabs(ecg1/100.0);
ecg = pow(ecg2, 2);
suma2 = suma2 + ecg;
52
// Modelo exponencial
ece1 = 100.0-(p[i]*100.0/pme[i]);
ece2 = fabs(ece1/100.0);
ece = pow(ece2, 2);
suma3 = suma3 + ece;
}
// Cálculo de promedios
proma = suma1/NC;
promg = suma2/NC;
prome = suma3/NC;
// Impresión
printf("eca = %2.6f\n", proma);
printf("ecg = %2.6f\n", promg);
printf("ece = %2.6f\n", prome);
53
if (mejorModelo == 2)
{
titulo = "Modelo Geometrico";
proyeccionMM(a, p, pmg, n, titulo); // Imprime modelo geomé-
trico
}
else
{
titulo = "Modelo Exponencial";
proyeccionMM(a, p, pme, n, titulo); // Imprime modelo expo-
nencial
}
}
void proyeccionMM(int a[], long p[], long pmm[], int n, string titulo)
{
int i;
char b = ' '; // Blanco
// Membrete
printf("---------------------------------------------\n");
printf("Anio Poblacion M. ");
cout << titulo << "\n";
printf("---------------------------------------------\n");
// Salida
for (i=0; i<NC+n; i++)
{
if (i==NC)
printf("---------------------------------------------\n");
if (i<NC)
printf("%4d %15d %15d\n",a[i], p[i], pmm[i]);
else
printf("%4d %15c %15d\n",a[i], b, pmm[i]);
}
}
54