Jump to content

Vetor noutra função


alphasil

Recommended Posts

Oi ppl;

De volta as minhas perguntas de principiante...

Tenho uma função que ordena um vetor de 4 posições

Quero é agora chamar esta função no main, isso faço bem, o que quero é que nesta função o utilizador ordene os números e que depois haja comparação entre o vetor ordenado e aquele que o utilizador prrencher, se for igual faz return, o que tenho é isto

int main(int num[])
{
   int vet[3], i;
   system("cls");                                                                  
   vetor(); //chama a função vetor que onde está o bubblesort
   printf("\nOrdene os 4 primeiros numeros de forma ascendente\n");
   for (i=0; i<=3; i++)
   {
    printf("Ordene estes numeros ");
    scanf("%d", &vet[i]);
   }
   if(vet[i]==vetor(num[i])) //aqui é onde quero comparar 
   {
    printf("Acertou");
   }
   }

int vetor()
{
 int num[TAM];
 int i;
 int n=4;
 LeVetor(num,n);

 for(i=0;i<n;i++)
 printf("%d\n", num[i]);
 printf("\n");
 bubbleSort(num, n);
 printf ("\n*=============================================================================*\n");
    printf ("|					   >>>>Vetor ordenado<<<<							    |\n");
    printf ("*=============================================================================*\n");
    printf ("																			   \n");
    for(i=0; i<n; i++)
  {
  // printf("%d\n",num[i]);
  }
  return 0;
}

Sempre que uso a função main, depois de inserir números estoira (seg fault)

Que se passa com isso?

gmc11

 

Link to comment
Share on other sites

O teu vetor

int vet[3]

tem espaco para tres elementos.

No entanto tu pretendes escrever no quarto elemento desse array

   for (i=0; i<=3; i++)
   {
           printf("Ordene estes numeros ");
           scanf("%d", &vet[i]);
   }

Repara que a variavel i pode ter os valores 0, 1, 2, ou 3 ... para respectivamente o primeiro, o segundo, o terceiro, e o quarto elemento para o scanf.

Nao facas isso. Se queres 4 elementos, declara o array como podendo ter 4 elementos!

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Depois deste ciclo for

    for (i=0; i<=3; i++)
   {
           printf("Ordene estes numeros ");
           scanf("%d", &vet[i]);
   }

a variavel i tem o valor 4. O teu programa pretende usar esse valor na instrucao

    if(vet[i]==vetor(num[i])) //aqui é onde quero comparar

mas nem vet nem num tem 5 elementos!!

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Sim estou a ver

Mas se na função de cima tenho n=4, partindo do 0 tenho 0(1) , 1(2) 2(3), 3(4)

Executando o bubble dá-me 4 números, portanto fiz a mesma coisa em baixo, um vetor que me dê 4 posições [3], partindo do [0][1][2][3]

Não estou a perceber nada... 😞

Estive a ver mais uns aspetos e dá-me uns warnings

warning: first argument of 'main' should be 'int' [-Wmain]|

warning: 'main' takes only zero or two arguments [-Wmain]|

Ou seja no protótipo do main quer um int e quer 2 argumentos, sinceramente estou perdido

gmc11

 

Link to comment
Share on other sites

epa ... tantos erros !!! e não estou a falar do teu ultimo post, estou a falar mesmo do primeiro ...

o meu conselho é :

faz um "hello world", compila e se der erros, corriges ... só depois deverias continuar na programação

só esta linha faz revirar os olhos de muita gente:

int main(int num[])
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

É a ti e a mim mesmo, estava a falar com um colega que me disse que era isso e achei muito estranho...mas enfim deixei andar.

A funções funcionam, as originais são estas:

int LeVetor(int num[], int n)
{
int i, x, tmp;
srand(time(NULL));
// Inicia o array
for(i = 0;i < TAM;++i)
 num[i] = i;
// Embaralha o array
for (i = TAM; i > 1;)
{
 x = rand() % i;
 --i;
 tmp = num[x];
 num[x] = num[i];
 num[i] = tmp;
}
for(i = 0;i<TAM;++i)
 printf("%d\n", num[i]);
 return 0;
}
int bubbleSort(int v[], int n)
{
 int i, j, temp;
 for (i = n; i > 0; i--)
for (j = 1; j < i; j++)
  if(v[j-1] > v[j])
  {
	  temp = v[j-1];
	  v[j-1] = v[j];
	  v[j] = temp;
	  }
	  return 0;
}
int vetorOrdenado()
{
 int num[TAM];
 int i;
 int n=4;
 LeVetor(num,n);
 printf ("\n*=============================================================================*\n");
	printf ("|					   >>>>Numeros Selecionados<<<<						  |\n");
	printf ("*=============================================================================*\n");
	printf ("																			   \n");
 // Iteração através do array. Os números já estão random
 for(i=0;i<n;i++)
  printf("%d\n", num[i]);
 printf("\n");
 bubbleSort(num, n);
 printf ("\n*=============================================================================*\n");
	printf ("|					   >>>>Vetor ordenado<<<<								|\n");
	printf ("*=============================================================================*\n");
	printf ("																			   \n");
	for(i=0; i<n; i++)
  {
   printf("%d\n",num[i]);
  }
  return 0;
}

Podem ser simplificadas, acredito, mas funcionam

O que me está a baralhar é como chamar o vetor para a função main para poder comparar com a introdução do user.

Edited by alphasil
gmc11

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.