AJBM Posted December 14, 2012 at 07:53 PM Report #487163 Posted December 14, 2012 at 07:53 PM 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.
HappyHippyHippo Posted December 14, 2012 at 09:54 PM Report #487183 Posted December 14, 2012 at 09:54 PM à primeira vista não vejo nenhum erro fundamental para "ir abaixo" que mensagem aparece ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 14, 2012 at 10:03 PM Author Report #487184 Posted December 14, 2012 at 10:03 PM 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.
HappyHippyHippo Posted December 14, 2012 at 10:19 PM Report #487187 Posted December 14, 2012 at 10:19 PM (edited) 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 December 14, 2012 at 10:19 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 14, 2012 at 10:28 PM Author Report #487189 Posted December 14, 2012 at 10:28 PM 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.
HappyHippyHippo Posted December 14, 2012 at 10:31 PM Report #487190 Posted December 14, 2012 at 10:31 PM 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 Portugol Plus
AJBM Posted December 15, 2012 at 10:51 AM Author Report #487223 Posted December 15, 2012 at 10:51 AM (edited) 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 December 15, 2012 at 11:09 AM by AJBM
HappyHippyHippo Posted December 15, 2012 at 01:33 PM Report #487242 Posted December 15, 2012 at 01:33 PM 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 Portugol Plus
AJBM Posted December 15, 2012 at 03:28 PM Author Report #487256 Posted December 15, 2012 at 03:28 PM Consegui Obrigado pela ajuda 👍 .
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now