ola amigos, bom, dessa vez estou com um problema, o programa esta parando de funcionar e nao faço a menor ideia do que seja o problema.
Depois tenho que organizar com o salario de maneira crescente, e o nome de cada funcionario que tem aquele respectivo salario
Nao sei se foi pela maneira que mandei exibir, mas ele era pra exibir ordenando alfabeticamente os nomes, o que nao foi o caso.
Quero associar o salarioTotal e trazer ele em ordem crescente(o que tentei fazer com o bubble sort) e trazer os nomes associados a esse salario, ordenados alfabeticamente.
Copiei o teu codigo para o meu computador, fiz-lhe indentacao automatica (ao meu estilo) e comecei a percorre-lo. As coisas em que reparei sao
4) fflush(stdin); não está definido em muitos computadores. Só está definido (que eu saiba) para computadores Windows que usem a biblioteca Microsoft. Se conseguires evitar o uso desta instrução o teu programa fica funcional para mais compiladores/sistemas operativos.
5) no fgets() estás a dizer que o destino tem 1001 elementos quando só tem 1000. Se o utilizador escrever 1000 ou mais caracteres vai estourar.
7) não mistures scanf() com fgets(). Começaste, muito bem, com fgets(), continua com a mesma função (usa sscanf() para ir buscar elementos à string usado no fgets())
9) Reve o teu bubble sort (faz uma funcao!): nunca precisas de comparar os elementos com o mesmo indice; quando precisares de copiar elementos dum lado para o outro, acho que também precisas de copiar o salario e a comissao.
4) eu tinha utilizado o getchar pra ele que o enter nao interfira no scanf, mas tbm coloquei o fflush(stdin).
6) na verdade como é só um sistema hipotetico, ele SEMPRE terá o FIM como quebra da funçao, nada mais.
7) mas como eu iria passar pro fgets, que tipo de variavel eu teria passar pra ele pegar tanto os floats quanto a string?
utilizando o sscanf como eu vou fazer pra procurar pelo salario e pela comissao no vetor trazido do fgets?
9) Reve o teu bubble sort (faz uma funcao!): nunca precisas de comparar os elementos com o mesmo indice; quando precisares de copiar elementos dum lado
quero ordenar da maneira que eu inseri mas aparentemente estou me perdendo na logica pra ordenar tanto o salario quanto o nome junto, poderia me dar uma luz?
10) Porque necessito ordenar o salario em ordem crescente, e depois ordenar o nome segundo o salario total.(segundo aquela saida que eu postei acima)
11) como estou utilizando o windows, acabei colocando pra ele poder parar o sistema pra eu poder analizar a saida.
e a funcao trocanecessaria() teria de comparar o salario em primeiro lugar; e caso fosse igual comparar o nome.
Repara que inicializaei a variavel auxiliar com um 'valor impossivel' (-1). Isto 'e importante para perceber o funcionamento.
No ciclo comparo o primeiro salario com o valor impossivel. Como 'e diferente imprime o salario, alem do nome que imprimiria sempre. Na mesma altura mete a variavel auxiliar com o valor do salario.
Na segunda passagem do ciclo compara o primeiro salario com o segundo. Se forem diferentes imprime o salario e depois o nome; se forem iguais so imprime o nome.
Em suma, em cada passagem pelo ciclo ou imprime o salario ou nao consoante seja igual ao anterior e, independentemente do salario, imprime sempre o nome.
Entao, ja tinha tentando fazer isso, mas no caso da inserção de dados com o mesmo salario, ele fica desta maneira:
se o que te está a aparecer é o que apresentas, limpa o projecto, compila novamente o código e verifica que estás a correr a última versão compilada
Só que agora fui fazer os testes finais, ele esta ordenando erroneamente alguns valores e alguns nomes
sabes que podes copiar a informação de uma estrutura completa de uma só vez com o operador atribuição ?
Na verdade ele troca tanto o nome quanto o salario, que no caso eu to trocando apenas o salario total.
O que fiquei curioso é que ele ta dando erro em apenas alguns, porque o resto ele ta fazendo direitinho, isso que me deixa entrigado.
ta sendo ordenado incorretamente, sendo que ele tem o valor de salario maior, mas se todos os outros foram ordenados por que raios este tambem nao é?
nem eu, porque apesar de teres debitado muito código, em nenhuma parte dele tens a atribuição do valor de "k" ...
se k tem o valor de zero, então a ordenação não é feita, nem sequer uma única comparação é efectuada
a ta, entendi, mesmo que dentro do while ele esteja atribuindo um valor pro k, fora ele nao esta replicando esse valor, ele esta sobreposicionando o valor de k por 0.
entao, como faço pra fora ele conseguir indicar quantas vezes esse loop foi feito? pra poder relacionar tanto o bubble sort quanto o print das informações?
porque eu tirei a atribuição de k=0, e deixei só declarado k, e o loop de exibição começou a ficar doido.
Fiz uns testes pedindo pra ele dar print no k, que agora troquei por M, e ele printou a quantidade de nomes inseridos, que foram 100, esta correto, era pra ordenar corretamente do mesmo jeito.
o teu problema é que estás a actualizar o valor de "k" depois da ordenação. o que acontece é que falta sempre ordenar o último elemento.
por isso, a solução rápida é parra o incremento do "k" ara antes da ordenação, ou a solução menos simples (mas simples também) mover a ordenação para fora da inserção dos dados.
eu tirei o k=0 que estava fora do while, e movi o k++ pra antes da ordenação, ele ficou doido....sem contar que o programa para de executar.