Jump to content
dramos21

arrays

Recommended Posts

dramos21

Bom dia pessoal,

Tenho um exercicio para resolver que me pede para eu pedir ao utilizador para preencher um vector com dimensao qualquer,

E eu tenho de meter o vector por ordem decrescente, excepto se houverem 0's no vector, esse zeros têm sempre de ficar no fim do vector e para trás desses 0's tem de ficar por ordem decrescente. Eu já consegui resolver o problema mas acho que vou dar uma grande volta para o conseguir resolver.

Alguém me consegue ajudar no algoritmo numa maneira simples de resolver o exercicio?

Share this post


Link to post
Share on other sites
dramos21

Eu fiz este funcao organizaVector grande e confusa porque não achei outra maneira de o fazer. primeiro organizei o vector todo para ficar com ordem decrescente. Depois fui buscar uma variavel conta para me dar os numeros maiores que 0 , para poder restringir o meu ciclo apenas aos numeros menores e iguais a 0 . Depois organizei crescentemente esses mesmos numeros e no final , como os numeros negativos ainda estavam em ordem crescente tive de novamente ordenar o vector decrescentemente já sem entrarem os zeros no ciclo, confuso eu sei :s

void organizaVector(int v[], int dim)
{
 int i=0,j=1;
 int conta=0,conta1=0;
 int troca,troca1,troca2;

 for(i=0; i<dim; i++){
if(v[i] > 0){
  conta=conta+1;
}
 }
 while(j<dim){
for(i=0; i<dim-1; i++){
  if(v[i] < v[i+1]){
troca=v[i+1];
v[i+1]=v[i];
v[i]=troca;
  }
}
j=j+1;
 }

 j=1;
 while(j<dim-conta){
for(i=conta; i<dim-1; i++){
  if(v[i] > v[i+1]){
troca1=v[i+1];
v[i+1]=v[i];
v[i]=troca1;
  }
}
j=j+1;
 }

 j=1;

 for(i=0; i<dim; i++){
if(v[i] == 0){
  conta1=conta1+1;
}
 }

 while(j<dim-conta1){
for(i=0; i<dim-conta1-1; i++){
  if(v[i] < v[i+1]){
troca2=v[i+1];
v[i+1]=v[i];
v[i]=troca2;
  }
}
j=j+1;
 }

 return;
}

Edited by dramos21

Share this post


Link to post
Share on other sites
HappyHippyHippo

mas que grande confusão ... podes colocar o enunciado para se saber o que realmente pretendes fazer ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
dramos21

Foi de um exame que eu fiz a semana passada e não tenho o enunciado.

Dizia mais ou menos isto, construa uma função que ordene um vector de forma decrescente excepto se este vector tiver o valor 0 em alguma posiçao , nesse caso, os 0's deverão sempre aparecer no fim do vector e o vector tem de aparecer em ordem decrescente à esquerda desses valores 0( inicio do vector ).

Share this post


Link to post
Share on other sites
HappyHippyHippo

ok, aqui está então uma solução feita em 5 minutos :

int main()
{
 int * v, i, aux, length, resized;

 printf("qual o tamanho do vector ?\n");
 scanf("%d", &length);

 v = malloc(sizeof(int) * length);

 for (i = 0; i < length; i++)
   scanf("%d", &v[i];

 resized = length;
 for (i = 0; i < resized; i++)
 {
   if (v[i] == 0)
   {
     aux = v[i];
     v[i] = v[resized - 1];
     v[resized - 1] = aux;

     resized--;
   }
 }

 // ordenar à descrição os elementos de 0 a resized

 for (i = 0; i < length; i++)
   printf("%d ", v[i]);

 free(v);
 return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
dramos21

nao consegui perceber o que fazes com o v no inicio. aquilo do malloc, nao sei de que se trata. e o free(v) também o que faz?

Share this post


Link to post
Share on other sites
polska

nao consegui perceber o que fazes com o v no inicio. aquilo do malloc, nao sei de que se trata. e o free(v) também o que faz?

O malloc server para alocar espaço na memória, neste caso o @Happy pediu o tamanho do vector ao utilizador e alocou o espaço necessário para o ponteiro v, ficando com um vector com tamanho dado pelo utilizador...

O free serve para libertar o espaço alocado por determinada variável na memória, neste caso foi esse mesmo ponteiro v .


Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites
pmg

A biblioteca comum a todos os compiladores de C (a "Standard Library") tem uma funcao que ordena um array de acordo com outra funcao de comparacao indicada pelo utilizador.

A tua funcao de comparacao so precisa de dizer que 0 é maior que outro numero qualquer e seguir a regra logica para os outro numeros.

A funcao da biblioteca padrao é a qsort().

Edited by thoga31
Correcção do URL

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!

Share this post


Link to post
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
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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.


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