Jump to content
AJBM

[Resolvido] Ordenar

Recommended Posts

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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

à primeira vista não vejo nenhum erro fundamental para "ir abaixo"

que mensagem aparece ?


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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

então apresenta o código da chamada de ordenação e mais algum relevante à apresentação


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

Share this post


Link to post
Share on other 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

Edited by AJBM

Share this post


Link to post
Share on other 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

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.