Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

dramos21

arrays

Mensagens Recomendadas

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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;
}

Editado por dramos21

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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().

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.