unsigned int i = 1000;
while(i <= 1000) {
//...
}
Onde acontece uma falha de segmentação que não faz sentido ocorrer, sei que a falha é no while pois ao retiralo o codigo roda corretamente mas obviamente com apenas uma interação.
O trecho de código real segue abaixo:void Interface::comparaMetodos() {
cout << "\t\tComparando os a ordenação obtemos os seguinte resultados:" << endl << endl << endl;
//gera os vetores para comparacao
Ordena *vetorParaOrdenacao;
//define fluxo para guardar a tabela de comparacao final
stringstream tabelaFinal, compPorAtribuicao;
tabelaFinal << " comparacao atribuição" << endl; //14 espacos antes de metodo
//CUIDADO código construido baseado na arquitetura de 64 bits
unsigned int numeroDeElementos = 1000; //delimita o número de elementos inicial para as comparações
long long **medicoes = new long long *[6];//vetor que guarda medicoes
while (numeroDeElementos <= 1000) { //delimita o número máximo de elementos para as comparações
//inicializa vetor
vetorParaOrdenacao = new Ordena(numeroDeElementos);
cout << "Os resultados para as comparações de " << numeroDeElementos << " elemtos:" << endl << endl;
//coleta as medições da ordenação em MELHOR CASO
preencheVetorCrescente(vetorParaOrdenacao);
//não preenche novamente o vetor pois apos a execução de uma ordenação ele continua ordenado
medicoes[0] = vetorParaOrdenacao->insercao();
medicoes[1] = vetorParaOrdenacao->selecao();
medicoes[2] = vetorParaOrdenacao->bolha();
medicoes[3] = vetorParaOrdenacao->merge();
medicoes[4] = vetorParaOrdenacao->quick();
medicoes[5] = vetorParaOrdenacao->shell();
cout << "Em relação ao numero de comparacoes:" << endl;
// | | | | | | |
cout << " insercao selecao bolha merge quick shell "
<< endl << "melhor " << std::right;
for (int i = 0; i < 6; i++)
cout << setw(18) << medicoes[i][0] << ' ';
cout << endl;
compPorAtribuicao << "Em relação ao numero de atribuiçoes:" << endl;
// | | | | | | |
compPorAtribuicao << "melhor insercao selecao bolha merge quick shell "
<< endl << "melhor " << std::right;
for (int i = 0; i < 6; i++)
compPorAtribuicao << setw(18) << medicoes[i][1] << ' ';
compPorAtribuicao << endl;
//escreve na tabela Final
long long *vetorBasico = new long long[6];
for (int i = 0; i < 6; i++) vetorBasico[i] = medicoes[i][0];
tabelaFinal << " melhor " << setw(10) << std::right << menor(vetorBasico) << ' ';
for (int i = 0; i < 6; i++) vetorBasico[i] = medicoes[i][1];
tabelaFinal << setw(10) << menor(vetorBasico) << endl;
delete []vetorBasico;
for (int i = 0; i < 6; i++) delete []medicoes[i]; //deleta medicoes retornadas pelos métodos
//coleta as medições da ordenação em MEDIO CASO
preencheVetorAleatorio(vetorParaOrdenacao);
medicoes[0] = vetorParaOrdenacao->insercao();
preencheVetorAleatorio(vetorParaOrdenacao);
medicoes[1] = vetorParaOrdenacao->selecao();
preencheVetorAleatorio(vetorParaOrdenacao);
medicoes[2] = vetorParaOrdenacao->bolha();
preencheVetorAleatorio(vetorParaOrdenacao);
medicoes[3] = vetorParaOrdenacao->merge();
preencheVetorAleatorio(vetorParaOrdenacao);
medicoes[4] = vetorParaOrdenacao->quick();
preencheVetorAleatorio(vetorParaOrdenacao);
medicoes[5] = vetorParaOrdenacao->shell();
cout << "médio " << std::right;
for (int i = 0; i < 6; i++)
cout << setw(18) << medicoes[i][0] << ' ';
cout << endl;
compPorAtribuicao << "médio " << std::right;
for (int i = 0; i < 6; i++)
compPorAtribuicao << setw(18) << medicoes[i][1] << ' ';
compPorAtribuicao << endl;
//escreve na tabela Final
for (int i = 0; i < 6; i++) vetorBasico[i] = medicoes[i][0];
tabelaFinal << " 1000 médio " << setw(10) << std::right << menor(vetorBasico) << ' ';
for (int i = 0; i < 6; i++) vetorBasico[i] = medicoes[i][1];
tabelaFinal << setw(10) << menor(vetorBasico) << endl;
delete []vetorBasico;
for (int i = 0; i < 6; i++) delete []medicoes[i]; //deleta medicoes retornadas pelos métodos
//coleta as medições da ordenação em PIOR CASO
preencheVetorDecrescente(vetorParaOrdenacao);
medicoes[0] = vetorParaOrdenacao->insercao();
preencheVetorDecrescente(vetorParaOrdenacao);
medicoes[1] = vetorParaOrdenacao->selecao();
preencheVetorDecrescente(vetorParaOrdenacao);
medicoes[2] = vetorParaOrdenacao->bolha();
preencheVetorDecrescente(vetorParaOrdenacao);
medicoes[3] = vetorParaOrdenacao->merge();
preencheVetorDecrescente(vetorParaOrdenacao);
medicoes[4] = vetorParaOrdenacao->quick();
preencheVetorDecrescente(vetorParaOrdenacao);
medicoes[5] = vetorParaOrdenacao->shell();
cout << "pior " << std::right;
for (int i = 0; i < 6; i++)
cout << setw(18) << medicoes[i][0] << ' ';
cout << endl;
compPorAtribuicao << "pior " << std::right;
for (int i = 0; i < 6; i++)
compPorAtribuicao << setw(18) << medicoes[i][1] << ' ';
compPorAtribuicao << endl;
//escreve na tabela Final
for (int i = 0; i < 6; i++) vetorBasico[i] = medicoes[i][0];
tabelaFinal << " pior " << setw(10) << std::right << menor(vetorBasico) << ' ';
for (int i = 0; i < 6; i++) vetorBasico[i] = medicoes[i][1];
tabelaFinal << setw(10) << menor(vetorBasico) << endl;
delete []vetorBasico;
for (int i = 0; i < 6; i++) delete []medicoes[i]; //deleta medicoes retornadas pelos métodos
string compAtt = compPorAtribuicao.str();
cout << compAtt << endl;
//destroi vetor
delete vetorParaOrdenacao;
numeroDeElementos *= 10; //almenta o numero de elementos por comparações por etapa
}
delete []medicoes;
cout << "TABELA FINAL" << endl;
cout << tabelaFinal.str() << endl;
}