Ir para conteúdo
Fórum Script Brasil
  • 0

inverter valores de um vetor com recursividade


alexandre henrique

Pergunta

Olá, tenho esse código onde uma função recursiva recebe um vetor de 6 elementos e devolve na tela os valores do vetor na ordem original e na ordem invertida;
Consegui mostra os valores na ordem original, mas na ordem invertida está bugando... alguém pode dá uma olhada nisso e identificar onde está o erro?

 

#include <stdio.h>

int pos=0; 

int inv(int num,int vet[]){

	if(num <= pos){
		return vet;
	}else{
		int aux = vet[num];
		vet[num] = vet[pos];
		vet[pos] = aux;
		pos++;
		
		return inv(--num, vet);		
	}	  
}


main(){
    int i, p = 6;
	int vet[6]={5,1,8,7,2,0};
    
	
	printf("Ordem original:");
	for (i=0;i<p;i++)
	{
		printf("%d",vet[i]);
	}
	
	int *veti = inv(p,vet);
	
	printf("\nOrdem invertida:");
	for (i=0;i<p;i++){
		printf("%d", veti[i]);
	}
	
}

 

Editado por alexandre henrique
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

os erros são:

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Documents and Settings\killdozer\Escritorio\main.cpp||In function 'int inv(int, int*)':|
C:\Documents and Settings\killdozer\Escritorio\main.cpp|8|error: invalid conversion from 'int*' to 'int' [-fpermissive]|
C:\Documents and Settings\killdozer\Escritorio\main.cpp||In function 'int main()':|
C:\Documents and Settings\killdozer\Escritorio\main.cpp|31|error: invalid conversion from 'int' to 'int*' [-fpermissive]|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Somente nos reparamos nas letras negritas. na função int inv(int, int*), na linha 8 do seu programa, você tem uma conversão invalida de int* a int... Por que acontece isso? sua função tem o tipo de retorno de int, sem porem vet é um ponteiro, si não veja na linha do erro In function 'int inv(int, int*)', o segundo parâmetro "int*" que você declarou é um ponteiro. Isso int vet[] é a mesma coisa que int *vet, o compilador confirma isso no erro. então ao fazer return vet; sua função você declarou como que ia devolver um inteiro, porem você retorna um ponteiro. Isso você pode consertar mudando o tipo de retorno para int* inv(...), Automaticamente o segundo erro se soluciona, pois como você pode ver o erro é na linha 31(int *veti = inv(p,vet);), seu ponteiro esta esperando a direção e você le retorna o int, ao mudar o tipo de função de int a int* a função retorna a direção, ou seja, retorna um ponteiro, isso é o que retorna int *inv(...).

Prove arrumar isso e depois comente ;).

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...