Geração de população em c++

1. Geração de população em c++

Renan
encautrenan

(usa KUbuntu)

Enviado em 02/11/2015 - 20:43h

Gostaria de um exemplo onde são gerados n números aleatórios em binário de 9 digitos e depois convertê-los para decimal e depois escolher o maior ou menor em decimal ..




tentei da seguinte maneira :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <cmath>


int main()
{

int contador,q,x[30],a,b;
int matriz[30][9],selecionado[30];
double aptidao[30],aux,soma=0;
int selecionadomatriz[30][9],decimal[30];
double aptidao2[30];
int aux2[4];

int vezes = 0, maximo = 50;

for(contador=0;contador<30;contador++)x[contador]=0;

//Gerando a população

for(contador=0;contador<30;contador++)
{
for(q=0;q<9;q++)
{
matriz[contador][q] = rand()%2;

}
for(q=0;q<9;q++)
{
printf("%d", matriz[contador][q]);
}
printf("\n");
}

while(vezes<maximo)
{
vezes++;

//Tranformar para decimal
for(contador=0;contador<30;contador++)
{
for(q=0;q<9;q++)
{
x[contador]=x[contador]+ matriz[contador][q]*(pow(2,(8-q)));

}
}
printf("%e \n",aptidao2[contador]);
}
}
}

for(int i=29; i >= 1; i--)
{
for( int j=0; j < i ; j++)
{
if(aptidao2[j]>aptidao2[j+1])
{

aux = aptidao2[j];
aptidao2[j] = aptidao2[j+1];
aptidao2[j+1] = aux;

aux = x[j];
x[j] = x[j+1];
x[j+1] = aux;

}

}
}


porém falta a parte de colocar em ordem crescente



  


2. Em C++, mais precisamente, em C++11 ...

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 02/11/2015 - 21:39h

Uma solução mais coesa que eu penso:


#include <iostream>
#include <random>
#include <list>
#include <algorithm>
#include <functional>

int random_9_bits()
{
std::random_device random_d;
std::default_random_engine engine(random_d());
std::uniform_int_distribution<int> distribution(0, 511);
return distribution(engine);
}

std::list<int> create_randoms(size_t length)
{
std::list<int> result(length);
for (auto& it: result) {
it = random_9_bits();
}

return result;
}

std::pair<int, int> min_and_max(const std::list<int>& numbers)
{
auto elements = std::minmax_element(begin(numbers), end(numbers));
return std::make_pair(*(elements.first), *(elements.second));
}

int main() {

auto numbers = std::move(create_randoms(5));

for (const auto& it : numbers) {
std::cout << it << '\n';
}

std::pair<int, int> min_max = min_and_max(numbers);
std::cout << "MIN: " << min_max.first << std::endl;
std::cout << "MAX: " << min_max.second << std::endl;

return 0;
}


Eu usei valores hardcode, apenas para demonstrar e também não coloquei iteração com stdin.


3. algoritmo e c++

Renan
encautrenan

(usa KUbuntu)

Enviado em 02/11/2015 - 22:21h

muito obrigado






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts