Jump to content
Fórum Script Brasil
  • 0

inverter valores de um vetor com recursividade


alexandre henrique
 Share

Question

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]);
	}
	
}

 

Edited by alexandre henrique
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...