Ir ao conteúdo

Ajuda com percorrimento de vetor em C


avl

Posts recomendados

Postado

Estou fazendo um exercício de programação e estou em duvida numa parte especifica do codigo:

for (i=4;i<9;i++){

int k=0;
if (verificacao(p2[k],4,o1)==0){
aux=p2[k];
o1[i]=aux;
k++;
}
}

O que estou tentando fazer no codigo acima é preencher o vetor "o1" a partir da quarta posição(as outras já estão preenchidas) com os valores de um outro vetor "p2", mas tem uma condição: os valores que eu vou preencher não podem estar no vetor o1(ou seja, nao podem estar nas quatro primeiras posicões deste).

Para isso eu chamo a função verificacao: se ela retornar zero, o valor do p2 nao está em o1 e ai eu faço o preenchimento do o1. Acontece que se retornar um, ou seja, o valor de p2 está em o1, ele não faz o preenchimento do o1 e a posição em questao fica vazia,pulando para a proxima(o "i" é incrementado) . O que eu queria era que não pulasse até encontrar um valor em p2 que não esta em o1(ou seja, verificacao=0) e aí sim passar para proxima posição.

Será que alguem poderia me dar uma ideia de como fazer? Se tivet mt confuso, eu explico de novo. Abraço!

Postado

Uns detalhes:

Aquela variável auxiliar alí, não é necessária;

A variável 'k', você declarou dentro do for. Declare no início da função á qual este laço pertence.

Sobre o problema, talvez um segundo loop dentro do for para percorrer o vetor funcione.

Algo do tipo

while(verificacao(...)==0)

Postado

Valeu pela ajuda. Fiz assim, mas continua não dando certo



int k=0

for (i=9/2;i<9;i++){

while(colunas(p2[k],9/2,o1)==1){// enquanto o valor de p2 estiver em o1, ele procura o proximo valor de p2(k++)
k++;
}
o1[i]=p2_novo[k];
k++;

}

Postado

Aqui está senhor:

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

int main()
{
int vetor[10] , vetor2[10],i,j,h=0,count;

vetor[0] = 1;
vetor[1] = 2;
vetor[2] = 3;
vetor[3] = 4;

printf("Preencha O Vetor2");

for(i=0;i<10;i++)
{
scanf("%d",&vetor2[i]);
}

for(i=4;i<10;i++)
{
count = 0;

for(j=0;j<4;j++)
{

if(vetor2[h] != vetor[j])
count++;

}
if(count == 4)
{
vetor[i] = vetor2[h];
}
else
{
vetor[i] = 0;
}

h++;

}
for(i=0;i<10;i++)
{
printf("%d\n",vetor[i]);
}
system("pause");
}

Explicando minha logica , o primeiro for é para percorre o vetor da posição 4 até a 9 , ou seja preencher ele , no outro for dentro dele acontece a comparação da primeira posição do segundo vetor com os 4 primeiros elementos do primeiro vetor , se der count = 4 quer dizer que aquele numero do segundo vetor não está em nenhuma das 4 primeiras posições do primeiro vetor , então aquela posição recebe o elemento do segundo vetor , se for diferente quer dizer que algum elemento do primeiro é igual ao do segundo , então aquela posição recebe 0 , e depois o h é adicionado , para andar no segundo vetor.

Fiz meio bagunçado e tudo mais , mas a minha logica é essa.

Postado

Valeu pela ajuda, mas agora já consegui resolver. Cometi um erro bobo no meu codigo aqui e por isso nao tava dando certo. Era só colocar um while mesmo, assim como eu respondi ao WntD. Agora so falta uma coisinha para concluir: suponha que eu tenha um vetor de tamanho 5, com os elementos indo de 0 até 4, por exemplo: (0,1,2,3,4). Tenho que sortear dois numeros desse vetor e trocá-los de posição. Por exemplo se os numeros sorteados forem 2 e 4, o novo vetor ficará assim: (0,1,4,3,2)..

Como fazer isso? Será que tem que usar aquela função rand() ?

Preciso de ajuda: Suponha que eu tenha um vetor de tamanho 5, com os elementos indo de 0 até 4, por exemplo: (0,1,2,3,4). Tenho que sortear dois numeros diferentes desse vetor e trocá-los de posição. Por exemplo se os numeros sorteados forem 2 e 4, o novo vetor ficará assim: (0,1,4,3,2).

Tentei fazer assim e nao deu certo, ele imprime o mesmo vetor, sem fazer a troca. Alguem tem uma ideia?

int main(){

int v[5] = {0,1,2,3,4};
int num1,num2,i,aux;

num1=(rand()%4)+1;
num2=(rand()%4)+1;

if (num1!=num2){
aux=v[num2];
v[num2]=v[num1];
v[num1]=aux;
}

for (i=0;i<5;i++){
printf("%d\n",v[i]);
}
}

Postado

Tente adicionar


srand(time(NULL));

acima dos 'rand()'.

O que ocorre é que se você não 'semeia' o rand() com números dinâmicos (como no caso, a hora com a função time()), todos os rands do código irão retornar os mesmos valores.

Ah, e no uso de rand(), faça o módulo de 5, ao invés de fazer módulo de 4 e somar 1. Se fizer módulo de 4 e somar 1, a posição 0 (zero) de seu vetor nunca será trocada.


num1=rand()%5;
num2=rand()%5;

E como há a possibilidade de num1 e num2 serem iguais, pode-se fazer com que, caso forem iguais, sorteie novamente...


do{
srand(time(NULL));
num1=rand()%5;
num2=rand()%5;
} while(num1 == num2);

O código final...


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

int main(){
int v[5] = {0,1,2,3,4};
int num1,num2,i,aux;

do{
srand(time(NULL));
num1=rand()%5;
num2=rand()%5;
} while(num1 == num2);

aux = v[num2];
v[num2] = v[num1];
v[num1] = aux;

for (i=0;i<5;i++){
printf("%d\n",v[i]);
}

return(0);
}

Postado

Nao tinha visto sua resposta editada. Obrigado pela ajuda!

Problemas resolvidos. Obrigado aos que me ajudaram. Moderação, pode trancar..

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!