• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Virtual Void

[C++] Ajuda: Problemas numa funçao (Resolvido)

5 mensagens neste tópico

Ola pessoal. Estou a tentar fazer um programa com a seguinte funçao:

void Library::ordenaCota(){
     
     Livro *aux=0;
     
     for(int i=0; i<getSize()-1; i++)                         //getSize() retorna o numero de elementos do array Livro *lib[1000] ocupados
     {
         for(int j=i+1; i<getSize(); j++)
         {
             if(lib[i]->getCota()>lib[j]->getCota())              //getCota() retorna um inteiro e é um metodo publico de Livro
             {
                 aux=lib[i];
                 lib[i]=lib[j];
                 lib[j]=aux;
             }
         }
     }
}     

no entanto ao correr o programa ele da uma excepçao e termina o programa. O problema e nesta funçao. no entanto não estou a perceber pk isto esta a acontecedr. Alguem me pode ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a função getSize() não recebe nenhum argumento nem é enviada a nenhum objecto?

EDIT: tens mesmo que definir uma nova função de ordenação? não podes usar as funções do C?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a funçao getSize() é um membro publico de Library portanto tem o ponteiro this implicito logo n é preciso mecher com objectos.

Tenho de definir a funçao. Parece-me que o problema esta nakela troka do

 aux=lib[i];
lib[i ]=lib[j];
lib[j]=aux;

, pk se eu meter uns couts para debug ele pára dps de terminado o ciclo for mais interior.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Repara no teu segundo for, tas a incrementar o j mas no entanto tas a comparar o i com o getSize(), ora o i é constante para todo o teu segundo for e dada a condição do primeiro for, a condição do segundo for nunca será falsa, portanto tens aí um ciclo infinito (isto é... até tentares ler uma posição de memoria a qual não tens acesso e supostamente aí o teu programa deveria rebentar).

Talvez seja um erro de copy paste ou isso, mas anyway, procura por um algoritmo chamado quicksort. É simples e eficaz para aquilo que queres fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lolololol. k besta!!! tava mesmo ceguinho! era isso mesmo! obviamente que já funciona! Muito obrigado! :cheesygrin:

0

Partilhar esta mensagem


Link 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