Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

Anexo D: Código del programa en C++ de proyección de la población del Perú

#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);

int main(int argc, char** argv) {

int anio[MAX] = {1940, 1961, 1972, 1981, 1993, 2007, 2017};


long pob[NC] = {7023111, 10420357, 14121564, 17762231, 22639443,
28220764, 31237385}; // Perú
// long pob[NC] = {36957, 103320, 240322, 354301, 509312, 766082,
919899}; // Trujillo
long pma[MAX], pmg[MAX], pme[MAX];
string titulo;
// pma = vector población método arimético
// pmg = vector población método geométrico
// pme = vector población método exponencial
int i, na;

48
// // Proceso
system("cls");
cout << "Ingrese anios de proyeccion: ";
cin >> na;

// Inicializamos el vector anios[MAX]


for (i=NC; i<MAX; i++)
anio[i] = anio[i-1] + 1;

// Proceso
aritmetico(anio, pob, MAX, pma);
geometrico(anio, pob, MAX, pmg);
exponencial(anio, pob, MAX, pme);

// Salida
proyeccion(anio, pob, pma, pmg, pme, na);

// Imprime mejor modelo


mejorModelo(anio, pob, pma, pmg, pme, na, titulo);

system("Pause");
return 0;
}

void aritmetico(int a[], long p[], int n, long pma[])


{
int i;
double k, r = 0.0; // Tasa de crecimiento

// 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 );
}

void geometrico(int a[], long p[], int n, long pmg[])


{
int i;
double k, r = 0.0; // Tasa de crecimiento

// 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 );
}

void exponencial(int a[], long p[], int n, long pme[])


{
int i;
double k, r = 0.0; // Tasa de crecimiento

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;

// Selección del mejor modelo


mejorModelo = 0; // Falso
if ( (proma<promg) && (proma<prome) )
mejorModelo = 1;
else
if ( (promg<proma) && (promg<prome) )
mejorModelo = 2;
else
if ( (prome<proma) && (prome<promg) )
mejorModelo = 3;

// Impresión
printf("eca = %2.6f\n", proma);
printf("ecg = %2.6f\n", promg);
printf("ece = %2.6f\n", prome);

// Imprime mejor modelo


if (mejorModelo == 1)
{
titulo = "Modelo Aritmetico";
proyeccionMM(a, p, pma, n, titulo); // Imprime modelo arit-
mético
}
else

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

También podría gustarte