Prob 2

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

#include <iostream>

#include <cstdlib>
#include <ctime>
#include <list>
#include <iomanip>

int maxs[3];

using namespace std;


struct strcontract{
int dia, mes, anio;
int numcontract;
};

void rellenardatos(struct strcontrato *contrato, int tam){


int dia, maxdia = 0, mes, maxmes =0, anio, maxanio =0;
srand(time(NULL));
int sum = 20 + rand() % 30;
for (int i = 0; i <tam; i++){
dia = 1 + rand() % 29;
if (dia > maxdia) maxdia = dia;
contrato[i].dia = dia;
mes = 1 + rand() % 11;
if (mes > maxmes) maxmes = mes;
contrato [i].mes = mes;
anio = 2000 + rand() % 14;
if (anio > maxanio) maxanio = anio;
contrato[i]. anio = anio;
contrato[i]. numcontrato = i + sum;
}
maxs[0] = maxdia; maxs[1] = maxmes; maxs[2] = maxanio;
}

void radixinv(struct strcontrato *nums, int tam){


list<struct strcontracto> urna [10];
int i;
for (int it = 0; it < 3; it++){
for (int n = 1; n<= maxs[it]; n*= 10){
for (i = 0; i < tam; i++){
int actual;
switch (it){
case 0: actual = nums[i]. dia; break;
case 1: actual = nums[i]. mes; break;
case 2: actual = nums[i]. anio; break;
}
urna[(actual / n) % 10].push_back(nums[i]);
}
int k = 0;
for (int i = 9; i = >= 0; urna [i--].clear())
for (list<struct strcontrato.::iterator j = urna[i].begin();
j != urna[i].end(); nums[k++] = *(j++));
}
}
}

int main(){
int tam = 100;
struct strcontrato nums[tam];
rellanardatos((struct strcontrato *)nums, tam);
radixinv((struct strcontrato *)nums, tam);
cout << "Orden Radix inverso: \n";
for (int i = 0 ; i < tam; i++){
cout << "\tFecha: " <<set(2) << nums[i], dia << " / "<<
set(2) << nums[i],mes << " / " << nums[i], anio;
cout << "\tContrato: " << nums [i]. numcontrato << endl;
}
return 0;
}

You might also like