Ir ao conteúdo

C Rotação para esquerda de um vetor em C


Ir à solução Resolvido por VIAJC,

Posts recomendados

Postado

Olá. Tenho o seguinte problema.

 

Faça um programa que faça a rotação para esquerda de um vetor. Ex: vetor1 = {1,2,3,4,5} torna-se vetor2={2,3,4,5,1}.

 

Tentei resolver, mas não consegui. Tenho a sensação que é algo fácil, mas infelizmente não cheguei ao resultado correto. Se possível, me ajudem usando conhecimentos de C para iniciantes, que é o meu caso.

 

#include<stdio.h>

int main(){
	
	int vetor1[5]={1,2,3,4,5};
	int vetor2[5];
	int i=0,x;
	
	while(vetor1[i]>0 && vetor1[i]<5){
		
		vetor2[i]==vetor1[i+1];
		
		if(i==0){
			vetor2[i+4]==vetor1[i];
		}
		i++;
	}
	for(x=0;x<5;x++){
		printf("elementos: %d\n",vetor2[x]);
	}
	
	
	
	return 0;
}

 

  • Amei 1
  • Solução
Postado

🤔

 

/*Questão 07. /*Faça um programa que faça a rotação para esquerda de um vetor
(Cuidado com a sobreposição de valores).*/
#include<stdio.h>

int main(){
	
	int tamanho;
	
	printf("Informe o tamanho do vetor: ");
	scanf("%d",&tamanho);
	
	int vetor1[tamanho];
	int vetor2[tamanho];
	int i;
	
	for(i=0;i<tamanho;i++){
		
		printf("Informe o valor: ",i);
		scanf("%d",&vetor1[i]);
	}
	
	for(i=1;i<tamanho;i++){
		
		vetor2[i-1]=vetor1[i];
	}
	
	vetor2[tamanho-1]=vetor1[0];
	
	printf("Vetor informado\n");
	for(i=0;i<tamanho;i++){
		printf("%d  \t",vetor1[i]);
	}
	
	printf("\nVetor rotacionado para esquerda\n");
	for(i=0;i<tamanho;i++){
		printf("%d  \t",vetor2[i]);
	}
	
	return 0;
}

 

****

Para uma rotação para a direita.

 

/*Questão 08. Faça um programa que faça a rotação para a direita de um vetor
(Cuidado com a sobreposição de valores).
*/
#include<stdio.h>

int main(){
	
	int tamanho;
	
	printf("Informe o tamanho do vetor: ");
	scanf("%d",&tamanho);
	
	int vetor1[tamanho];
	int vetor2[tamanho];
	int i;
	
	for(i=0;i<tamanho;i++){
		
		printf("Informe o valor: ",i);
		scanf("%d",&vetor1[i]);
	}
	
	for(i=0;i<tamanho;i++){
		
		vetor2[i+1]=vetor1[i];
	}
	
	vetor2[0]=vetor1[tamanho-1];
	
	printf("Vetor informado\n");
	for(i=0;i<tamanho;i++){
		printf("%d  \t",vetor1[i]);
	}
	
	printf("\nVetor rotacionado para a direita\n");
	for(i=0;i<tamanho;i++){
		printf("%d  \t",vetor2[i]);
	}
	
	return 0;
}

 

  • Obrigado 1
Postado

Apenas entenda que se rodar para a esquerda  vai sumir o primeiro, se rodar para a direita vai sumir o último então salve antes e copie os caras.

 

Se não vai fazer no mesmo vetor nem precisa: apenas copie a partir do segunda para tras se for rodar para a esquerda, ou a partir do primeiro até o penultimo para frente conforme a rotação for para a esquerda ou para a direita. E depois reponha o elemento que salvou.

 

Se vai criar um novo vetor pode usar memcpy() e copiar todos menos um em uma chamada só. 

 

12345 para a esquerda pode copiar 2345 e depois o 1

12345 para a direita pode copiar 1234 e depois o 5

  • Curtir 1
  • Obrigado 1
Postado

@VIAJC Outra forma é com o operador módulo (%). A rotação para a esquerda com um deslocamento,

 

int desloca = 1;
    
for(int i = 0; i < MAX; i += 1){
    vetor2[i] = vetor1[(i + desloca) % MAX];
}

 

E para a direita,

int desloca = MAX - 1;

 

Para mais deslocamentos é só mudar a atribuição.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...