Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PlayMa256

Problema de ordenação.

Recommended Posts

PlayMa256

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.

obs: este é um sistema hipotetico

Bom, deixa eu contar ao que se destina o programa.

Tenho varias entradas, onde na 1 linha é um nome, na 2 um salario tipo float, e na 3 a comissao.

o recebimento de dados acaba quando for achado a palavra FIM.

Depois tenho que organizar com o salario de maneira crescente, e o nome de cada funcionario que tem aquele respectivo salario

Salario no Mes: R$ 350.00

- Pedro de Aparecida Francisco

Salario no Mes: R$ 1000.00

- Arlette Castanheira

- Wilson Rogerio

Bom, eis o meu codigo:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <ctype.h>
int main(){
struct pagamentos{
   char nome[1000];
   float salario;
   float comissao;
   float salarioTotal;
   char aux[1000];
};
   int i,j,k,m;
   int tamanho = 0;
   float salarioBase = 0.0;
   char vetor[1001];
   int qtd;
   qtd = 0;
   struct pagamentos pg[1001];
   k=0;
while(1){

   printf("Nome:");
   fflush(stdin);
   fgets(pg[k].nome, 1001, stdin);
   //Quebra se for FIM
   tamanho = strlen(pg[k].nome);
   if((tamanho >= 3) && (pg[k].nome[0] == 70) && (pg[k].nome[1] == 73) && (pg[k].nome[2] == 77)){
       break;
    }
   printf("Salario: ");
   scanf("%f", &pg[k].salario);
   printf("comissao: ");
   scanf("%f", &pg[k].comissao);
   //aqui é pra arrumar o problema do \n no buffer que fica depois do scanf
   getchar();

       pg[k].salarioTotal = pg[k].salario + pg[k].comissao;
//------------Bubble sort do nome---------------//
   for(i=0;i<k;i++){
       for(j=0;j<k;j++){
           //char aux[1001];
           if(strcmp(pg[j].nome, pg[i].nome) < 0){
               strcpy(pg[i].aux, pg[j+1].nome);
               strcpy(pg[i].nome, pg[j].nome);
               strcpy(pg[j].nome, pg[i].aux);
           }
       }
}
//------------FIM Bubble sort nome--------------//
//-------------------------BUBBLE SORT------------------//
int l,c,u;
float temp;
   for(l=0;l<k;l++){
       for(u=0;u<k;u++){
           if(pg[l].salarioTotal < pg[u].salarioTotal){
               temp = pg[l].salarioTotal;
               pg[l].salarioTotal = pg[u].salarioTotal;
               pg[u].salarioTotal = temp;
           }
       }
   }
//------------------------FIM---------------------------//
k++;
}//while
//------Parte de printagem--------//
printf("Folha de Pagamento\n");
for(i=0;i<k;i++){
   printf("Salario do mes: %4.2f", pg[i].salarioTotal);
   printf("%s", pg[i].nome);
}
//------Fim parte da printagem------//
stem("pause");
return 0;
}

Eu fiz a entrada destes dados:

Nome:lucas

Salario: 200

comissao: 200

Nome: andre

Salario: 200

comissao: 200

porem minha saida foi essa

Salario do mes: 400.00lucas

Salario do mes: 400.00andre

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.

Mais ou - assim:

Entrada:

Pedro Paulo

1000.00

2000.00

Ana Maria da Silva

5000.00

100.00

Luis Meira

3000.00

0.00

Guilherme Coelho

2500.00

500.00

Saida:

Salario no Mes: R$ 3000.00

- Guilherme Coelho

- Luis Meira

- Pedro Paulo

Salario no Mes: R$ 5100.00

- Ana Maria da Silva

Obrigado;

Edited by pmg
removi formatacao; adicionei GeSHi

Share this post


Link to post
Share on other sites
pmg

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

1) tens o header <ctype.h> repetido (não há crise, mas fica mal)

2) define a struct pagamentos fora da funcao main

3) escreve mais funcoes. Nao ponhas tudo na mesma funcao!

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.

6) o teste de "FIM" tambem aceita "FIM_DO_TESTE" ou outros inputs que comecem por "FIM"

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())

8) para "arrumar o problema do \n no buffer" ve a linha anterior :)

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.

10) OOOPS ... 2 bubble sorts???? um para o nome e outro para o slaaraio? Porque???

11) o system("pause"); nao funciona no meu computador. Se conseguires escrever o teu programa sem recurso a essa instrucao, o teu programa pode funcionar no meu computador.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
PlayMa256

4) eu tinha utilizado o getchar pra ele que o enter nao interfira no scanf, mas tbm coloquei o fflush(stdin).

5) de fato eu acabei colocando menos, porem pra testes só fiz com no max 3.

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

para o outro, acho que também precisas de copiar o salario e a comissao.

Para eu colocar em ordem crescente o SALARIOTOTAL nao necessito fazer desta maneira?

int l,c,u;
float temp;
for(l=0;l<k;l++){
	for(u=0;u<k;u++){
		if(pg[l].salarioTotal < pg[u].salarioTotal){
			temp = pg[l].salarioTotal;
			pg[l].salarioTotal = pg[u].salarioTotal;
			pg[u].salarioTotal = temp;
		}
	}
}

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.

Edited by PlayMa256

Share this post


Link to post
Share on other sites
pmg

O que está a acontecer no(s) teu(s) bubble sort é que misturas o nome/salario/comissao de utilizadores diferentes.

O que tens que fazer, em cada troca, é copiar tudo (nome, salario e comissao).

for (l = 0; l < k; l++) {
   for (u = 0; u < k; u++) {
       if (trocanecessaria(pg, l, u)) { /* falta escrever a funcao trocanecessaria() */
           trocaelementos(pg, l, u);    /* falta escrever a funcao trocaelementos() */
       }
   }
}

e a funcao trocanecessaria() teria de comparar o salario em primeiro lugar; e caso fosse igual comparar o nome.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
PlayMa256

obrigado pmg, fiz isso e deu certo.

Porem nao estou conseguindo fazer ele "agrupar" os nomes em relação ao salario.

Como um exemplo:

Entrada:

Lucas

200.00

300.00

Pedro

200.00

300.00

Matheus

400.00

400.00

ele traz:

Salario Total: 500.00

Lucas

Salario total: 500.00

Pedro

Salario total: 800.00

Matheus

Eu gostaria que ficasse desta maneira:

Salario no Mes: R$ 500.00

- Lucas

- Pedro

Salario no Mes: R$ 800.00

- Matheus

Eis o meu codigo de exibição:


for(i=0;i<k;i++){
   printf("Salario do mes: %4.2f\n", pg[i].salarioTotal);
   printf("Nome da pesoa: %s\n", pg[i].nome);
}

obrigado

Edited by pmg
GeSHi

Share this post


Link to post
Share on other sites
pmg

Porem nao estou conseguindo fazer ele "agrupar" os nomes em relação ao salario.

Eis o meu codigo de exibição:


for(i=0;i<k;i++){
   printf("Salario do mes: %4.2f\n", pg[i].salarioTotal);
   printf("Nome da pesoa: %s\n", pg[i].nome);
}

obrigado

Precisas de uma variável auxiliar

double auxiliar = -1; /* ninguem tem salario negativo! */
for (i = 0; i < k; i++) {
   if (pg[i].salarioTotal != auxiliar) {
       printf("Salario do mes: %4.2f\n", pg[i].salarioTotal);
       auxiliar = pg[i].salarioTotal;
   }
   printf("Nome da pesoa: %s\n", pg[i].nome);
}

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
PlayMa256

Obrigado, de fato acabou funcionando, só que nao entendi a logica.

poderia me explicar por gentileza?

Share this post


Link to post
Share on other sites
pmg

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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
PlayMa256

muito bom, agora nao consigo colocar um bendito espaço embaixo...

tem que ficar assim quando se tem a entrada de 2 salarios diferentes.

Salario no Mes: R$ 3000.00

- Guilherme Coelho

- Luis Meira

- Pedro Paulo

Salario no Mes: R$ 5100.00

- Ana Maria da Silva

mas ja taquei \n em tudo conté lugar, e nada!.

Me deem uma luz por favor.

Share this post


Link to post
Share on other sites
HappyHippyHippo
double auxiliar = -1; /* ninguem tem salario negativo! */
for (i = 0; i < k; i++) {
   if (pg[i].salarioTotal != auxiliar) {
       printf("\nSalario do mes: %4.2f\n", pg[i].salarioTotal); // <------------
       auxiliar = pg[i].salarioTotal;
   }
   printf("Nome da pesoa: %s\n", pg[i].nome);
}


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

Share this post


Link to post
Share on other sites
PlayMa256

double auxiliar = -1; /* ninguem tem salario negativo! */
for (i = 0; i < k; i++) {
if (pg[i].salarioTotal != auxiliar) {
	printf("\nSalario do mes: %4.2f\n", pg[i].salarioTotal); // <------------
	auxiliar = pg[i].salarioTotal;
}
printf("Nome da pesoa: %s\n", pg[i].nome);
}

Entao, ja tinha tentando fazer isso, mas no caso da inserção de dados com o mesmo salario, ele fica desta maneira:

Salario do mes: 400.00

- andre

- carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

Entao, ja tinha tentando fazer isso, mas no caso da inserção de dados com o mesmo salario, ele fica desta maneira:

a alteração que apresentei nunca implica a apresentação da quebra de linha entre nomes das pessoas.

a quebra é feita imediatamente antes da apresentação do texto "Salario do mes: %4.2f"

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


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

Share this post


Link to post
Share on other sites
PlayMa256

Realmente era erro de versao.

Só que agora fui fazer os testes finais, ele esta ordenando erroneamente alguns valores e alguns nomes

como aqui:

Salario no Mes: R$ 3000.00

- Guilherme Coelho

- Pedro Paulo

- Luis Meira

Salario no Mes: R$ 5100.00

- Ana Maria da Silva

P vem antes de L, e infelizmente nao sei o problema

Tambem esta acontecendo aqui com o salario:

Folha de Pagamento

Salario no Mes: R$ 1700.00

- Rubens Ewald Filho

Salario no Mes: R$ 80000.00

- Farokh Bommi Bulsara

Salario no Mes: R$ 1800.00

- Liliane de Carvalho

Salario no Mes: R$ 2100.00

- Gabriel Contino

Salario no Mes: R$ 3000.00

- Ana Luisa

- Guilherme Coelho

- Luis Meira

- Marina Zatz de Camargo

- Pedro Paulo

- Zabumba Maria

Salario no Mes: R$ 5100.00

- Ana Maria da Silva

Salario no Mes: R$ 7000.00

- Katheryn Elizabeth Hudson

Salario no Mes: R$ 7600.00

- Adriana Moraes Rego Reis

- Arlette Pinheiro Esteves Silva

- Daniel Michaeli

Salario no Mes: R$ 8000.00

- Helio Antonio do Couto Filho

- Juliana Couto Paes

Salario no Mes: R$ 9100.00

- Dolores Gonçalves Costa

Salario no Mes: R$ 13000.00

- Willian Bonemmer Junior

Salario no Mes: R$ 25000.00

- Natalie Hershlag

Salario no Mes: R$ 35000.00

- Eric Patrick Clapp

Salario no Mes: R$ 80000.00

- Senor Abravanel

Só que neste caso ele ordenou erroneamente o salario

R$ 80000.00

- Farokh Bommi Bulsara

e nao fez o agrupamente com o de 80000 la em baixo

qual seria o problema?

meu codigo:


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <ctype.h>
int main(){

struct pagamentos{
char nome[1000];
float salario;
float comissao;
float salarioTotal;
char aux[1000];
};
int i,j,k,m;
int tamanho = 0;
float salarioBase = 0.0;
int qtd;
qtd = 0;
struct pagamentos pg[1001];
k=0;

while(1){

//printf("Nome:");
fgets(pg[k].nome, 1000, stdin);

//Quebra se for FIM
tamanho = strlen(pg[k].nome);
if((tamanho >= 3) && (pg[k].nome[0] == 70) && (pg[k].nome[1] == 73) && (pg[k].nome[2] == 77)){
break;
}

//printf("Salario:");
scanf("%f", &pg[k].salario);
getchar();
//printf("comissao:");
scanf("%f", &pg[k].comissao);

getchar();
//aqui é pra arrumar o problema do \n no buffer que fica depois do scanf

pg[k].salarioTotal = pg[k].salario + pg[k].comissao;

//------------Bubble sort do nome---------------//

//------------FIM Bubble sort nome--------------//

//-------------------------BUBBLE SORT------------------//
int l,c,u;
float temp;
char auxiliar[1000];
for(l=k;l>0;l--){
for(u=0;u<k;u++){
if(pg[l].salarioTotal < pg[u].salarioTotal){
temp = pg[l].salarioTotal;
pg[l].salarioTotal = pg[u].salarioTotal;
pg[u].salarioTotal = temp;

strcpy(pg[l].aux, pg[u].nome);
strcpy(pg[u].nome, pg[l].nome);
strcpy(pg[l].nome, pg[l].aux);

}else if((pg[l].salarioTotal == pg[u].salarioTotal) && (strcmp(pg[l].nome, pg[u].nome) < 0)){
strcpy(pg[l].aux, pg[l].nome);
strcpy(pg[l].nome, pg[u].nome);
strcpy(pg[u].nome, pg[l].aux);

}
}
}

//------------------------FIM---------------------------//

k++;
}//while
//------Parte de printagem--------//
printf("Folha de Pagamento");
printf("\n");
double auxiliar = -1; /* ninguem tem salario negativo! */
for (i = 0; i < k; i++) {
if (pg[i].salarioTotal != auxiliar) {
printf("\nSalario no Mes: R$ %4.2f\n", pg[i].salarioTotal); // <------------
auxiliar = pg[i].salarioTotal;
}
printf("- %s", pg[i].nome);
}


//------Fim parte da printagem------//
//system("pause");
return 0;
}

Edited by PlayMa256

Share this post


Link to post
Share on other sites
HappyHippyHippo

depois de vascular por esse código ...

no teu bubble sort, a troca de valores é só trocar o nome ?? e o resto da info ?

sabes que podes copiar a informação de uma estrutura completa de uma só vez com o operador atribuição ?


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

Share this post


Link to post
Share on other sites
PlayMa256

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.

Neste caso, como posso arrumar isto?

Share this post


Link to post
Share on other sites
HappyHippyHippo

simples e sem complicações ...

struct pagamentos temp;
int l, u, k;

/* ordenação */
for(l = k; l > 0; l--)
{
 for(u = 0; u < k; u++)
 {
   if(pg[l].salarioTotal < pg[u].salarioTotal ||
      (pg[l].salarioTotal == pg[u].salarioTotal && strcmp(pg[l].nome, pg[u].nome) < 0))
   {
     temp = pg[l];
     pg[l] = pg[u];
     pg[u] = temp;
   }
 }
}
/* ordenação */


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

Share this post


Link to post
Share on other sites
PlayMa256

isso nao sabia que podia atribuir um struct com outro.

Mas mesmo assim ainda continuo com o mesmo erro, ele nao ta ordenando um.

Por algum motivo esse erro, ja vasculhei o codigo inteiro e nada.

esse

Salario no Mes: R$ 80000.00

- Farokh Bommi Bulsara

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 é?

Folha de Pagamento

Salario no Mes: R$ 350.00

- Pedro de Aparecida Francisco Carlos Xavier de Joaquim Gonzaga Pascoal Cipriano de Braganca e Bourbon

Salario no Mes: R$ 80000.00

- Farokh Bommi Bulsara

Salario no Mes: R$ 700.00

- Arlington Florencio

- Francislene Coutinho

Salario no Mes: R$ 950.00

- Lilian Alfredo

Salario no Mes: R$ 1000.00

- Wilson Rogerio

Salario no Mes: R$ 1050.00

- Dante Aliguieri Pereira

Salario no Mes: R$ 1300.00

- Arlette Castanho

- Luis Coelho

- Luis Corridor

Salario no Mes: R$ 1700.00

- Rubens Ewald Filho

Salario no Mes: R$ 1800.00

- Alan Godoy

- Alan Silva

- Liliane de Carvalho

Salario no Mes: R$ 1930.00

- Lener Luis

Salario no Mes: R$ 2000.00

- Natalia Peres

- Zuleide Aparecida Castanho

Salario no Mes: R$ 2100.00

- Gabriel Contino

- Gabriela Alves

- Romis Ribeiro

Salario no Mes: R$ 2205.00

- Luis Molina

Salario no Mes: R$ 2300.00

- Rubens Leitao

Salario no Mes: R$ 2500.00

- Caio Alfredo

- Natalia Ventura

Salario no Mes: R$ 2550.00

- Hamilton Ferreira

Salario no Mes: R$ 2600.00

- Anderson Roberto

Salario no Mes: R$ 2950.00

- Ana Luisa Rocha

Salario no Mes: R$ 3000.00

- Ana Luisa

- Guilherme Coelho

- Luis Meira

- Marina Zatz de Camargo

- Pedro Paulo

- Zabumba Maria

Salario no Mes: R$ 3100.00

- Ana Luisa Henriques

Salario no Mes: R$ 3160.00

- Jacques Wainer

Salario no Mes: R$ 3210.00

- Luisa Helena

Salario no Mes: R$ 3500.00

- Angela Rosa

- Carlos Renato Azevedo

- Fernando Von Zuben

- Natalie Potiguar

Salario no Mes: R$ 4000.00

- Carlos Renato Antunes

- Pedro Paulo Rangel

- Wagner Suarez

- William Sarroche

Salario no Mes: R$ 4200.00

- Luisa Possi

Salario no Mes: R$ 4750.00

- Pedro de Alcantara

Salario no Mes: R$ 5000.00

- Paulo Rangel

- Raul Seixas

- Ronald Golias

Salario no Mes: R$ 5100.00

- Ana Maria da Silva

Salario no Mes: R$ 5200.00

- Katie Hudson

Salario no Mes: R$ 5250.00

- Wagner Santisteban

Salario no Mes: R$ 5320.00

- Ana Maria Pereira

Salario no Mes: R$ 5750.00

- Adriana Moraes Rego Reis

Salario no Mes: R$ 6000.00

- Louise Chiffon

Salario no Mes: R$ 6130.00

- Guilherme Meira

- Guilherme Mendes Junior

- Gustavo Henrique

Salario no Mes: R$ 6200.00

- Jurandir Carvalho

- Rogerio Ferracini

- Rubem Alves

Salario no Mes: R$ 6700.00

- Pedro Paulo Zutz

Salario no Mes: R$ 6800.00

- Guilherme Nunes

Salario no Mes: R$ 7000.00

- Celmar Guimaraes

- Hamilton Lemos

- Katheryn Elizabeth Hudson

Salario no Mes: R$ 7600.00

- Adriana Moraes Rego Reis

- Arlette Pinheiro Esteves Silva

- Daniel Michaeli

Salario no Mes: R$ 8000.00

- Christiano Lyra

- Cid Carvalho Costa

- Daniel Regis

- Daniela Regina

- Gabriela Castellano

- Guido Araujo

- Helio Antonio do Couto Filho

- Helio Waldman

- Julia Von Zuben

- Juliana Couto Paes

- Juliana Lyra

Salario no Mes: R$ 8050.00

- Ana Carolina Garcia

- Guilherme Palermo

Salario no Mes: R$ 8500.00

- Ana Estela Antunes

- Christiano Sabin

Salario no Mes: R$ 8700.00

- Zenaide Dutra

Salario no Mes: R$ 9000.00

- Anamaria Gomide

Salario no Mes: R$ 9100.00

- Dolores Gonçalves Costa

- Fernando Gomide

Salario no Mes: R$ 9150.00

- Dante Gonçalves Costa

Salario no Mes: R$ 9800.00

- Dirce Palermo Falleiros

Salario no Mes: R$ 12000.00

- Thomasz Kowaltowski

Salario no Mes: R$ 13000.00

- Maiana Zatz

- Willian Bonemmer Junior

Salario no Mes: R$ 15730.00

- Eric Clapton

Salario no Mes: R$ 25000.00

- Natalie Hershlag

Salario no Mes: R$ 27000.00

- Ana Maria Braga

Salario no Mes: R$ 30000.00

- Freddie Mercury

Salario no Mes: R$ 34750.00

- Pedro de Alcantara Francisco Carlos Xavier de Joaquim Gonzaga Pascoal Cipriano de Braganca e Bourbon

Salario no Mes: R$ 35000.00

- Eric Patrick Clapp

Salario no Mes: R$ 80000.00

- Senor Abravanel

Seria assim, ele ordenado corretamente

Folha de Pagamento

Salario no Mes: R$ 350.00

- Pedro de Aparecida Francisco Carlos Xavier de Joaquim Gonzaga Pascoal Cipriano de Braganca e Bourbon

Salario no Mes: R$ 700.00

- Arlington Florencio

- Francislene Coutinho

Salario no Mes: R$ 950.00

- Lilian Alfredo

Salario no Mes: R$ 1000.00

- Wilson Rogerio

Salario no Mes: R$ 1050.00

- Dante Aliguieri Pereira

Salario no Mes: R$ 1300.00

- Arlette Castanho

- Luis Coelho

- Luis Corridor

Salario no Mes: R$ 1700.00

- Rubens Ewald Filho

Salario no Mes: R$ 1800.00

- Alan Godoy

- Alan Silva

- Liliane de Carvalho

Salario no Mes: R$ 1930.00

- Lener Luis

Salario no Mes: R$ 2000.00

- Natalia Peres

- Zuleide Aparecida Castanho

Salario no Mes: R$ 2100.00

- Gabriel Contino

- Gabriela Alves

- Romis Ribeiro

Salario no Mes: R$ 2205.00

- Luis Molina

Salario no Mes: R$ 2300.00

- Rubens Leitao

Salario no Mes: R$ 2500.00

- Caio Alfredo

- Natalia Ventura

Salario no Mes: R$ 2550.00

- Hamilton Ferreira

Salario no Mes: R$ 2600.00

- Anderson Roberto

Salario no Mes: R$ 2950.00

- Ana Luisa Rocha

Salario no Mes: R$ 3000.00

- Ana Luisa

- Guilherme Coelho

- Luis Meira

- Marina Zatz de Camargo

- Pedro Paulo

- Zabumba Maria

Salario no Mes: R$ 3100.00

- Ana Luisa Henriques

Salario no Mes: R$ 3160.00

- Jacques Wainer

Salario no Mes: R$ 3210.00

- Luisa Helena

Salario no Mes: R$ 3500.00

- Angela Rosa

- Carlos Renato Azevedo

- Fernando Von Zuben

- Natalie Potiguar

Salario no Mes: R$ 4000.00

- Carlos Renato Antunes

- Pedro Paulo Rangel

- Wagner Suarez

- William Sarroche

Salario no Mes: R$ 4200.00

- Luisa Possi

Salario no Mes: R$ 4750.00

- Pedro de Alcantara

Salario no Mes: R$ 5000.00

- Paulo Rangel

- Raul Seixas

- Ronald Golias

Salario no Mes: R$ 5100.00

- Ana Maria da Silva

Salario no Mes: R$ 5200.00

- Katie Hudson

Salario no Mes: R$ 5250.00

- Wagner Santisteban

Salario no Mes: R$ 5320.00

- Ana Maria Pereira

Salario no Mes: R$ 5750.00

- Adriana Moraes Rego Reis

Salario no Mes: R$ 6000.00

- Louise Chiffon

Salario no Mes: R$ 6130.00

- Guilherme Meira

- Guilherme Mendes Junior

- Gustavo Henrique

Salario no Mes: R$ 6200.00

- Jurandir Carvalho

- Rogerio Ferracini

- Rubem Alves

Salario no Mes: R$ 6700.00

- Pedro Paulo Zutz

Salario no Mes: R$ 6800.00

- Guilherme Nunes

Salario no Mes: R$ 7000.00

- Celmar Guimaraes

- Hamilton Lemos

- Katheryn Elizabeth Hudson

Salario no Mes: R$ 7600.00

- Adriana Moraes Rego Reis

- Arlette Pinheiro Esteves Silva

- Daniel Michaeli

Salario no Mes: R$ 8000.00

- Christiano Lyra

- Cid Carvalho Costa

- Daniel Regis

- Daniela Regina

- Gabriela Castellano

- Guido Araujo

- Helio Antonio do Couto Filho

- Helio Waldman

- Julia Von Zuben

- Juliana Couto Paes

- Juliana Lyra

Salario no Mes: R$ 8050.00

- Ana Carolina Garcia

- Guilherme Palermo

Salario no Mes: R$ 8500.00

- Ana Estela Antunes

- Christiano Sabin

Salario no Mes: R$ 8700.00

- Zenaide Dutra

Salario no Mes: R$ 9000.00

- Anamaria Gomide

Salario no Mes: R$ 9100.00

- Dolores Gonçalves Costa

- Fernando Gomide

Salario no Mes: R$ 9150.00

- Dante Gonçalves Costa

Salario no Mes: R$ 9800.00

- Dirce Palermo Falleiros

Salario no Mes: R$ 12000.00

- Thomasz Kowaltowski

Salario no Mes: R$ 13000.00

- Maiana Zatz

- Willian Bonemmer Junior

Salario no Mes: R$ 15730.00

- Eric Clapton

Salario no Mes: R$ 25000.00

- Natalie Hershlag

Salario no Mes: R$ 27000.00

- Ana Maria Braga

Salario no Mes: R$ 30000.00

- Freddie Mercury

Salario no Mes: R$ 34750.00

- Pedro de Alcantara Francisco Carlos Xavier de Joaquim Gonzaga Pascoal Cipriano de Braganca e Bourbon

Salario no Mes: R$ 35000.00

- Eric Patrick Clapp

Salario no Mes: R$ 80000.00

- Farokh Bommi Bulsara

- Senor Abravanel

Edited by PlayMa256

Share this post


Link to post
Share on other sites
HappyHippyHippo

nem eu, porque apesar de teres debitado muito código, em nenhuma parte dele tens a atribuição do valor de "k" ...

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other sites
PlayMa256

sim, possui a declaração sim:

int i,j,k,m;

int tamanho = 0;

struct pagamentos pg[1001];

k=0;

logo no inicio...

Este erro esta me deixando curioso, porque raios funciona parcialmente?

Share this post


Link to post
Share on other sites
HappyHippyHippo

se k tem o valor de zero, então a ordenação não é feita, nem sequer uma única comparação é efectuada


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

Share this post


Link to post
Share on other sites
PlayMa256

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.

Uma outra coisa que sei tbm, é que será feita a entrada de no maximo 100 funcionarios no mes.

########UPDATE######

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.

Edited by PlayMa256

Share this post


Link to post
Share on other sites
HappyHippyHippo

ok ... acho que já percebi o teu código

estás a ordenar os dados SEMPRE que inseres um elemento, algo que bastaria fazer no fim da inserção

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.


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

Share this post


Link to post
Share on other sites
PlayMa256

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.

Se eu deixo o k=0, e entro com os dados, ele simplesmente faz isso:

Salario no Mes: R$ 0.00

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu nunca disse para tirar o k=0 ...

apresenta o código que tens agora


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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×

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.