(Exercício 6.5 das folhas)
Dados:
vec
com size
valores (e.g. inteiros);val
Queremos:
val
ocorre em vec
int ocorre(int vec[], int size, int val) {
for(int i = 0; i < size; i++) {
if(vec[i] == val)
return 1; // encontrou
}
return 0; // não encontrou
}
int pesquisa(int vec[], int size, int val) {
for(int i = 0; i < size; i++) {
if(vec[i] == val)
return i; // encontrou
}
return -1; // não encontrou
}
Dado: uma variável indexada vec
de inteiros
Queremos:
vec
Exemplos:
{2, 3, 4} -> {2, 3, 4}
{2, 3, 2, 2, 4, 2} -> {2, 3, 4}
{4, 3, 2, 2, 4} -> {4, 3, 2}
{3, 3, 3} -> {3}
Vamos definir uma função
int elimrep(int vec[], int size);
cujo resultado será o número \(k\) de valores distintos na variável indexada vec
.
Além disso, modificamos vec
:
int a[7] = {2, 3, 3, 2, 4, 3, 5};
k = elimrep(a, 7);
// a[] : {2, 3, 4, 5, 4, 3, 5}
// k : 4
vec
variável indexada para eliminar repetidos
size
tamanho de vec
(número de valores)
i
índice do próximo valor (possívelmente repetido)
k
número de valores diferentes já encontrados
int elimrep(int vec[], int size) {
int i, k = 0;
// i: índice do próximo valor
// k: número de valores distintos
for(i = 0; i < size; i++) {
int val = vec[i];
if(!ocorre(vec, k, val)) {
// encontramos um novo valor
// distinto dos anteriores
vec[k++] = val;
}
}
return k;
}
\[ \scriptsize \overbrace{\begin{array}{|c|c|c|} \hline \texttt{v[0]} & \cdots & \texttt{v[k-1]} \\ \hline \end{array}}^{\text{sem repetidos}} \overbrace{\begin{array}{|c|c|c|c|c|} \hline \texttt{v[k]} & \cdots &\texttt{v[i]}&\cdots & \texttt{v[size-1]} \\ \hline \end{array}}^{\text{?}} \]