Auxilio com estudo em C++

1. Auxilio com estudo em C++

william jussim
jussim

(usa Ubuntu)

Enviado em 11/05/2018 - 16:33h

É o seguinte, me foi passado uma atividade para ler determinado vetor e exibir os valores que se repetem e quantas vezes se repetem.
A seguir esta o meu codigo porém ele exibe vários lixos de memoria. Alguem me ajuda a encontrar aonde errei?


#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main()
{
const int t=10;
int vet[t], repeticao[t], quantidade[t], continuo[t], i=0, a=0, b=0;

while (i<t)
{
cout << "Digite o " << i+1 << "º valor" << endl;
cin >> vet[i];
i++;
}

for (i=0; i<t; i++)
{
for (int j=i+1; j<t; j++)
{
if (vet[i]==vet[j])
{
repeticao[a]=vet[i];
b++;
quantidade[a]=b;
}
/*else
{
continuo[a]=vet[i];
}*/

}

a++;
b=0;

}

for (i=0; i<a; i++)
{
cout << "O numero " << repeticao[i] << " repete " << quantidade[i] << "vezes" << endl;
}


}



  


2. Re: Auxilio com estudo em C++

Fernando
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;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts