Leonardo_Silva 0 Denunciar post Postado Novembro 25, 2009 Olá pessoal tudo em paz? http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Então para finalizar a materia de registros onde tive grande dificuldades por não ter como testar. Estou querendo uma força, para verificar onde não tive de certeza de estar correto: Principalmente na parte da busca binaria e ordenação. Considerando a necessidade de um programa que armazene o nome e as notas bimestrais de 20 alunos do curso de Técnicas de Programação, defina a estrutura de registro apropriada e a codificação de um programa que, por meio do uso de um menu de opções, execute as seguintes etapas: a) Cadastrar os 20 registros (após o cadastro efetuar a classificação por nome). B) Pesquisar os 20 registros, de cada vez, pelo campo nome (usar o método binário, nesta pesquisa o programa deverá também apresentar a média do aluno e as mensagens: “Aprovado” caso sua média seja maior ou igual a 5, ou “Reprovado” para média abaixo de 5). c) Apresentar todos os registros, médias e a mensagem de aprovação ou reprovação. d) Sair do programa de cadastro. algoritmo "AlunoCurso" tipo bimestre = vetor[1..4] de real rCurso = registro nome : caracter nota : bimestre media : real msg : caracter fimregistro var curso : vetor[1..20] de rCurso aux : rCurso t, h, comeco, meio, final : inteiro pesqNome: caracter sMedia : real acha : logico inicio para t de 1 ate 20 faca escreva("Nome: "); leia(curso[t].nome) para h de 1 ate 4 faca escreva("Digite as notas: "); leia(curso[t].nota[h]) fimpara fimpara para t de 1 ate 19 faca para h de t + 1 ate 20 faca se (curso[t].nome > curso[h].nome) entao aux <- curso[t] curso[t] <- curso[h] curso[h] <- aux fimse fimpara fimpara escreva("O que procura? ") leia(pesqNome) comeco <- 1 final <- 20 acha <- falso enquanto (comeco <= final) e (acha = falso) faca meio <- (comeco + final) div 2 se (pesqNome = curso[meio].nome) entao acha <- verdadeiro senao se (pesqNome < curso[meio].nome) entao final <- meio - 1 senao comeco <- meio + 1 fimse fimse fimenquanto sMedia <- 0 para t de 1 ate 20 faca para h de 1 ate 4 faca sMedia <- sMedia + curso[t].nota[h] fimpara curso[t].media <- sMedia / 4 sMedia <- 0 fimpara para t de 1 ate 20 faca se (curso[t].media >= 5) entao curso[t].msg <- "Aprovado" senao curso[t].msg <- "Reprovado" fimse fimpara se (acha = verdadeiro) entao escreva("Nome: ", curso[meio].nome) escreva("Media: ", curso[meio].media) escreva("Foi ", curso[meio].msg) senao escreva("Nada encontrado") fimse para t de 1 ate 20 faca escreva(curso[t].nome) escreva(curso[t].media) escreva(curso[t].msg) fimpara fimalgoritmo Se tiver uma maneira melhor de fazer e ate uma lógica bem melhor, só da um toque ! http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Obrigadão pela força ! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 25, 2009 Nunca programei em Visualg, por isso fica dificil eu saber se tem comandos prontos e tal.. você usou: curso[t].nome > curso[h].nomeIsso até pode dar certo, + n creio que dará certo para todos os casos, verificar a grandeza de um nome não signifca descobrir se ele é maior que outro; bom se esta rodando e classificando os nomes beleza, + isso em um programa em C, com ctz não daria certo, + como disse na linguagem C temos funções predefinidas para isso. Acho que o melhor é você primeiro cadastrar os 20 registros e depois você os classifica; E outra você já saber trabalhar com modularização?? isso deixaria seu código umas 21321x + claro ;D []s Compartilhar este post Link para o post Compartilhar em outros sites
Leonardo_Silva 0 Denunciar post Postado Novembro 25, 2009 Ae Quit. Não entendi bem, pq a verificação não daria certo. Cadastrei 20 registros com 3 campos e apartir do campo nome que sera ordenado. No prox. capitulo que irei aprender procedimentos e funções *ansioso* :P Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 26, 2009 Então é assim eu digo isso pq sei q se fosse em C/C++ isso não funcionario para ordenar, + como disse se no visualg faz beleza ;D você tentou entradas como: xxxxx asdfas x a oprere oarere ele ordena certinho? []s Compartilhar este post Link para o post Compartilhar em outros sites
Leonardo_Silva 0 Denunciar post Postado Novembro 26, 2009 Opa ! Cara pior que o visualg não roda registros, por isso não testei. Mas o erro de não ordenar, tem a ver com a tebela ascii? já que são comparadas caracteres. []s Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 26, 2009 Não sei te dizer ao certo o pq mano. + digo isso pq qnd eu fazia uns algoritmos do spoj, que é um site de desafios, já me deparei com ordenação de nomes e tive q buscar uma função especifica para isso. []s Compartilhar este post Link para o post Compartilhar em outros sites