Logo Hardware.com.br
EricCartman
EricCartman Novo Membro Registrado
16 Mensagens 7 Curtidas

[Resolvido] [Ajuda] Trocar as posições do vetor em C

#1 Por EricCartman 16/01/2018 - 02:57
Enunciado:
Ler um vetor A com 4 elementos. Separar os elementos pares e ímpares de A utilizando apenas um vetor extra B. Sugestão: no início do vetor B armazene os elementos pares de A e nas posições restantes do vetor B armazene os elementos de A que são ímpares.

No caso eu consegui fazer o código em python, mas não consigo fazer em C. (o append em python me ajudou muito porque ao invés de substituir posições existentes, ele acresenta posições) mas em C não está dando certo. Vou mostrar aqui o código em python e em C comentado (o em python pra ajudar a descobrir onde estou errando)

vetor=[] [HASHTAG]#Declarando[/HASHTAG] o vetor onde será armazenado
b=[] [HASHTAG]#Declarando[/HASHTAG] o vetor que irá apresentar

for i in range(0,4,1):
n = int(input("Digite o valor: "))
vetor.append(n) [HASHTAG]#Armazenando[/HASHTAG] os valores ao vetor

for i in range(0,4,1):
if vetor % 2 == 0: [HASHTAG]#Testando[/HASHTAG] se ele é par
b.append(vetor) [HASHTAG]#Caso[/HASHTAG] ele seja, armazena ao vetor b

for i in range(0,4,1):
if vetor % 2 != 0: [HASHTAG]#Testando[/HASHTAG] se ele é ímpar
b.append(vetor) [HASHTAG]#Acrescentando[/HASHTAG] nas posições restantes

print("\n")
for i in b:
print(i) [HASHTAG]#Apresentando[/HASHTAG]

Agora o código em C que está dando errado:

[code=C]#include
#include

int main(){

int a[4],b[4],i,cPar=0,cImpar=0,j=0;

for(i=0;i<4;i++){
printf("Digite o %d. valor: ",i+1);
scanf("%d",&a); //Lê os números e os armazena no vetor a

if(a%2==0){

cPar++; //Incrementa caso seja par para definir onde começar o for do ímpar

}

}

cPar=cPar+1; //Acrescenta mais um para o for do ímpar não substituir o último número na posição do par

for(i=0;i<4;i++){
if(a%2==0){ //Caso seja par vai ir acrescentando os números nas primeiras posições

b[ i ]=a[ i ];
}
}

for(i=cPar;i<4;i++){ //Como já se sabe quantos números pares tem, ele inicia a partir da última posição do número par
if(a[j]%2!=0){ //Se não for par ele vai atribuir na posição i (posição após o último par) o j que foi testado (j para não bugar)
b[ i ]=a[j]; //Como i é o número da posição, j é o número normal. Aí vai incrementando ambos e colocando nas posições restantes
j++;
}

}

for(i=0;i<4;i++){
printf("\n %d ",b); //Aqui apresenta o vetor b com as posições trocadas.
}

printf("\n\n\n");
system("pause");
return(0);
}[/code]

Por algum motivo esse código não está dando certo, e como não tenho o append em C para me ajudar, não sei o que fazer. Se alguém puder me ajudar eu agradeço.
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
16/01/2018 - 10:29
Bom dia, @EricCartman.

O problema é que você mudou o algoritmo.
Em Python está assim:
[LIST=1]
Início

Crie dois vetores a, b (com 4 células cada)

Popule o vetor a
Percorra a inserindo os valores pares em b
Repita para inserir os valores ímpares em b
Mostre o vetor b
Fim
[/LIST]
Apesar do modo "força bruta" este algoritmo funciona em qualquer linguagem.

Veja só:
[code=c]#include

int main() {

int a[4], b[4], i, aux=0;

for (i=0; i<4; i++) {
printf("Digite o %d. valor: ", i+1);
scanf("%d", &a[i]);
}

for (i=0; i<4; i++) {
if (a[i]%2 == 0) {
b[aux] = a[i];
aux++;
}
}

for (i=0; i<4; i++) {
if (a[i]%2 != 0) {
b[aux] = a[i];
aux++;
}
}

printf("\nVetor B = [ ");

for(i=0; i<4; i++){
printf("%d", b[i]);
if (i<3) printf(", ");
}

printf(" ]\n\n");
return(0);
}[/code]
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
EricCartman
EricCartman Novo Membro Registrado
16 Mensagens 7 Curtidas
#3 Por EricCartman
16/01/2018 - 17:14
esquiloesperto disse:
Bom dia, @EricCartman.

O problema é que você mudou o algoritmo.
Em Python está assim:
[LIST=1]
Início

Crie dois vetores a, b (com 4 células cada)

Popule o vetor a
Percorra a inserindo os valores pares em b
Repita para inserir os valores ímpares em b
Mostre o vetor b
Fim
[/LIST]
Apesar do modo "força bruta" este algoritmo funciona em qualquer linguagem.

Veja só:
[code=c]#include

int main() {

int a[4], b[4], i, aux=0;

for (i=0; i<4; i++) {
printf("Digite o %d. valor: ", i+1);
scanf("%d", &a[i]);
}

for (i=0; i<4; i++) {
if (a[i]%2 == 0) {
b[aux] = a[i];
aux++;
}
}

for (i=0; i<4; i++) {
if (a[i]%2 != 0) {
b[aux] = a[i];
aux++;
}
}

printf("\nVetor B = [ ");

for(i=0; i<4; i++){
printf("%d", b[i]);
if (i<3) printf(", ");
}

printf(" ]\n\n");
return(0);
}[/code]


Muito obrigado! Tem uns 2 meses que não conseguia fazer esse programa em C kkkkk, eu pensava que iria substituir se atribuísse dessa maneira. Mas não aconteceu. Obrigado <3
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#4 Por esquiloesper...
16/01/2018 - 19:10
Apenas para "atiçar" um pouco mais o vosso conhecimento sobre algoritmos...

- Visto que não foi exigido preservar a ordem de entrada:
"Somente entrada e saída"

[code=c]#include

const short int tam = 4;

int main() {

char ab = 'A';
int A[tam], B[tam], auxA=0, auxB=tam, i;

// Carregar os vetores A e B ao mesmo tempo
for (i=0; i printf("Digite o %d. valor: ", i+1);
scanf("%d", &A);
if (A[i]%2 == 0)
B[auxA++] = A[i];
else {
B[--auxB] = A[i];
}
}

// Exibir os vetores A e B
for (i=0; i if (!i) printf("\nVetor %c = [ ", ab);
printf("%d", ab=='A'? A[i]: B[i]);
if (i<3) {
printf(", ");
}
else {
printf(" ]");
i = -1;
++ab;
}
}

printf("\n");
return(0);
}
[/code]


[I]- Este preserva a ordem:
"Pares na entrada / ímpares na saída"

[code=c]#include

int main() {

int a[4], b[4], i, aux=0;

// Carrega (a) e popula pares em (b)
for (i=0; i<4; i++) {
printf("Digite o %d. valor: ", i+1);
scanf("%d", &a[i]);
if (a[i]%2 == 0) {
b[aux] = a[i];
aux++;
}
}

// Popula ímpares em (b) enquanto o imprime
printf("\nVetor B = [ ");

for (i=0; i<4; i++) {
if (a[i]%2 != 0) {
b[aux] = a[i];
aux++;
}
printf("%d", b[i]);
if (i<3) printf(", ");
}

printf(" ]\n\n");
return(0);
}
[/code]
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal