/** * Get the sorted order of indices (the indices of the insertion of items, * sorted according to the values of the items). * * The returned vector will contain the indices of the inserted items in an * order such that the original items will be from large value to smaller value. */ std::vector<int> SortHelper::getSortedOrderInVector() const { std::vector<int> orderVector(size(), 0); int i; std::list<ListItem>::const_iterator itemsIter; for (i = 0, itemsIter = _list.begin(); i < size(); i++, itemsIter++) { orderVector[i] = itemsIter->_originalIndex; } return orderVector; }
main () { int i, elems = 0; // Quantidade de elementos que ele tem que digitar/percorrer. unsigned long vecLong[MAXELEMS]; // Vetor com o fatorial da parte inteira de cada elemento do vetor de double. double vecDouble[MAXELEMS]; // Vetor com os elementos digitados pelo usuário. do { printf("# Quantos números quer digitar? (1 a 60000)\n"); if (!scanf("%d", &elems)) { printf("# Você digitou LIXO\n\n"); } else if (elems < 1 || elems > MAXELEMS) { printf("# ERRO: %d é um valor inválido\n\n", elems); } cleanBuff(); } while(elems < 1 || elems > MAXELEMS); pushElems(vecDouble, elems); orderVector(vecDouble, elems); pushFactorial(vecDouble, vecLong, elems); printf("# Voce digitou os seguintes elementos:\n"); for (i = 0; i < elems; i ++) { printf("%.3lf\n", vecDouble[i]); } printf("\n\n"); for (i = 0; i < elems; i ++) { printf("Fatorial de %-2d = ", (int)(vecDouble[i] + 0.5)); if (vecLong[i] <= 0 || (int)(vecDouble[i] + 0.5) > 20) { printf("ERRO\n"); } else { printf("%lu\n", vecLong[i]); } } printf("\n# FIM\n"); }