Ir para o conteúdo
AJBM

[Resolvido] Ordenar

Mensagens Recomendadas

AJBM

Boas!

Eu tenho que ordenar um array de alunos pelo bi, o que eu tenho feito para já é isto

EstruturaPrincipal ordenar(EstruturaPrincipal ePrincipal) {

unsigned i, j;
Aluno temp;

for (i = 0; i < ePrincipal.countAlunos - 2; i++) {
	for (j = 0; j < ePrincipal.countAlunos - 2 - i; j++) {
		if (ePrincipal.alunos[j].bi > ePrincipal.alunos[j + 1].bi) {
			temp = ePrincipal.alunos[j];
			ePrincipal.alunos[j] = ePrincipal.alunos[j + 1];
			ePrincipal.alunos[j + 1] = temp;
		}
	}
}
return ePrincipal;
}

Mas sempre que eu executo este código a aplicação vai abaixo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Eu antes estava a chamar a função quando listava os alunos, listarAlunos(ordenar(eprincipal)); agora chamo a função noutro sitio do programa assim já não vai "abaixo" ,mas não ordena.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

já deverias ter percebido que enquanto não disseres qual a mensagem não terás resposta ....

e se "não ordena" é porque não estás a guardar a ordenação efectuada

Editado por HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Agora não aparece nenhuma mensagem, e estou a guardar o resultado da ordenação, mas mesmo antes quando o programa ia "abaixo", simplesmente ia "abaixo" não aparecia nenhuma mensagem em particular só dizia RUN SUCCESSFUL.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Boas!

Ja funciona só que acho que o algoritmo de ordenação esta mal implementado, porque se o meu array Alunos tiver 2 alunos não ordena mas se tiver 3 já ordena, mas não fica bem ordenado, eu adicionei 3 alunos, o primeiro adicionar tinha bi 12, segundo bi 1 terceiro bi 2, o resultado após a ordenação é aluno com bi1 aluno com bi12 aluno com bi2

Editado por AJBM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

ok, tens agora de praticar a executar o código na cabeça.

eu vou escrever aqui o que está a acontecer para ver como deves pensar:

// INÍCIO
// nota : ePrincipal.countAlunos = 3
for (i = 0;                                  // i = 0, j = lixo
    i < ePrincipal.countAlunos - 2;         // i < 3 - 2 >> 0 < 1 >> verdadeiro
    i++) {
 for (j = 0;                                // i = 0, j = 0
      j < ePrincipal.countAlunos - 2 - i;   // j < 3 - 2 - 0 >> 0 < 1 >> verdadeiro
      j++) {                                // no final : j = j + 1 >> j = 1
 }
 //------------------------------
 // segundo cíclo do for interior
 //------------------------------
 for (j = 0;                                // ignorar (só executado no início do ciclo)
      j < ePrincipal.countAlunos - 2 - i;   // j < 3 - 2 - 0 >> 1 < 1 >> falso
      j++) {                                // ignorar (só executado no fim da execução do bloco de instruções)
 }
//------------------------------
// segundo cíclo do for exterior
//
// nota : i = i + 1 > i = 2 (código a ser executado no fim da execução do bloco de instruções)
//------------------------------
for (i = 0;                                  // ignorar (só executado no início do ciclo)
    i < ePrincipal.countAlunos - 2;         // i < 3 - 2 >> 1 < 1 >> false
    i++) {                                  // ignorar (só executado no fim da execução do bloco de instruções)

como vês, tanto o ciclo interior e o exterior só é executado 1 única vez para uma lista de 3 elementos

por esta ordem de ideias :

2 elemento >> 0 vezes

3 elementos >> 1 vez

4 elementos >> 2 vezes

5 elementos >> 3 vezes

6 elementos >> 4 vezes

como podes verificar, irá sempre faltar 1 verificação nos dois ciclos

agora altera de acordo a efectuar as verificações necessárias


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

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.