phoemur
(usa Debian)
Enviado em 11/05/2018 - 23:27h
À primeira vista trata-se de um problema de acesso aos arrays, pois o operador [] não checa se o acesso é válido e você está acessando para além do tamanho do seu array e por isso o lixo de memória está aparecendo.
Nos seus laços for ao invés de apenas uma variável de controle há várias (i, j, a, b) e você aparentemente está perdendo o controle e acessando fora do array....
Este é um dos erros de programação mais comuns...
Após arrumar isso, também há erros de lógica no seu programa. Não está funcionando, de forma que eu achei melhor escrever do zero:
Alternativa parecida com seu código:
#include <iostream>
using namespace std;
int main()
{
const int t=10;
int vet[t], repeticao[t];
for (int i=0; i<t; ++i) {
cout << "Digite o " << i+1 << "º valor" << endl;
cin >> vet[i];
}
for (int i=0; i<t; ++i) {
int reps = 1;
for (int j=i+1; j<t; ++j) {
if (vet[i] == vet[j]) {
reps++;
}
}
repeticao[i] = reps;
}
for (int i=0; i<t; i += repeticao[i]) {
cout << "O número " << vet[i] << " foi digitado " << repeticao[i] << " vezes" << endl;
}
return 0;
}
Alternativa que eu usaria:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main()
{
vector<int> values;
cout << "Digite os números (Ctrl+D para terminar): \n";
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(values));
sort(begin(values), end(values));
int reps = 0;
for (auto it = begin(values); it != end(values); advance(it, reps)) {
auto it_pair = equal_range(it, end(values), *it);
reps = distance(it_pair.first, it_pair.second);
cout << "O número " << *it << " foi digitado " << reps << (reps > 1 ? " vezes" : " vez") << endl;
}
return 0;
}