Organizando uma Tabela e Dando Critério para Desempate

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Organizando uma Tabela e Dando Critério para Desempate

Mensagem por Gonçalves em Seg 18 Jul 2011, 15:40

Oi. Estou criando uma tabela (com ds_list), consigo adicionar valores à ela, porém não faço ideia de como fazer isso:

1. Existem duas tabelas com dois valores, que são:

teams_tab - Com team[1].name e team[2].name
points_tab - Com team[1].pts e team[2].pts

A segunda tabela eu uso sort e funciona, mas como fazer as Strings team[1].name e team[2].name acompanhá-las? Porque quando dou sort na teams_tab organiza por ordem alfabética.

2. Se existirem dois valores iguais na tabela, como fazer com que a tabela deixe à frente o time que tiver mais de outra variável? (Que está em outra tabela, que seria a goals_tab).

Até e obrigado.

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por PedroX em Seg 18 Jul 2011, 15:52

Você precisaria fazer isso:

- Depois de usar sort:
Código:
indice_team1=ds_list_find_index(points_tab, team[1].pts)
indice_team2=ds_list_find_index(points_tab, team[2].pts)
ds_list_replace(teams_tab, indice_team1, team[1].name)
ds_list_replace(teams_tab, indice_team2, team[2].name)

Vou pesquisar sobre a questão 2.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por Gonçalves em Seg 18 Jul 2011, 18:35

Pô, funcionou não... olha o que eu fiz: (Create)

Código:
team1 = 'Flamengo'
team2 = 'Botafogo'
team3 = 'Fluminense'
team4 = 'Vasco'

pts1 = round(random_range(floor(5),20))
pts2 = round(random_range(floor(5),20))
pts3 = round(random_range(floor(5),20))
pts4 = round(random_range(floor(5),20))


teams_tab = ds_list_create();

ds_list_add(teams_tab,team1);
ds_list_add(teams_tab,team2);
ds_list_add(teams_tab,team3);
ds_list_add(teams_tab,team4);


pts_tab = ds_list_create();

ds_list_add(pts_tab,pts1);
ds_list_add(pts_tab,pts2);
ds_list_add(pts_tab,pts3);
ds_list_add(pts_tab,pts4);

ds_list_sort(pts_tab,true)

indice_team1=ds_list_find_index(pts_tab, team1)
indice_team2=ds_list_find_index(pts_tab, team2)
indice_team3=ds_list_find_index(pts_tab, team3)
indice_team4=ds_list_find_index(pts_tab, team4)

ds_list_replace(teams_tab, indice_team1, pts1)
ds_list_replace(teams_tab, indice_team2, pts2)
ds_list_replace(teams_tab, indice_team3, pts3)
ds_list_replace(teams_tab, indice_team4, pts4)

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por Markituh em Seg 18 Jul 2011, 18:40

Já que você quer acompanhá-las, seria correto usar ds_list_insert, o Pedro Henrique usou replace (descuido, acho eu)
Código:
ds_list_insert(teams_tab, indice_team1, pts1)
ds_list_insert(teams_tab, indice_team2, pts2)
ds_list_insert(teams_tab, indice_team3, pts3)
ds_list_insert(teams_tab, indice_team4, pts4)
Vê se funciona agora.

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por PedroX em Seg 18 Jul 2011, 18:44

Nessa parte, inverta tudo:
Código:
indice_team1=ds_list_find_index(pts_tab, team1)
indice_team2=ds_list_find_index(pts_tab, team2)
indice_team3=ds_list_find_index(pts_tab, team3)
indice_team4=ds_list_find_index(pts_tab, team4)

ds_list_replace(teams_tab, indice_team1, pts1)
ds_list_replace(teams_tab, indice_team2, pts2)
ds_list_replace(teams_tab, indice_team3, pts3)
ds_list_replace(teams_tab, indice_team4, pts4)
Ficando assim:
Código:
indice_team1=ds_list_find_index(pts_tab, pts1)
indice_team2=ds_list_find_index(pts_tab, pts2)
indice_team3=ds_list_find_index(pts_tab, pts3)
indice_team4=ds_list_find_index(pts_tab, pts4)

ds_list_replace(teams_tab, indice_team1, team1)
ds_list_replace(teams_tab, indice_team2, team2)
ds_list_replace(teams_tab, indice_team3, team3)
ds_list_replace(teams_tab, indice_team4, team4)

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por Gonçalves em Seg 18 Jul 2011, 19:31

Nenhuma das duas funcionou... Será que está no Draw o problema?

Draw:

Código:
for(i=0;i<ds_list_size(teams_tab);i+=1) {draw_text(60,16+(16*i),ds_list_find_value(teams_tab,i));}

for(i=0;i<ds_list_size(pts_tab);i+=1){draw_text(160,16+(16*i),ds_list_find_value(pts_tab,i));}

Até.

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por PedroX em Seg 18 Jul 2011, 20:04

Você poderia fazer com ds_map.

Código:
team1 = 'Flamengo'
team2 = 'Botafogo'
team3 = 'Fluminense'
team4 = 'Vasco'
pts1 = round(random_range(5,20))
pts2 = round(random_range(5,20))
pts3 = round(random_range(5,20))
pts4 = round(random_range(5,20))

teams_tab = ds_map_create();
ds_map_add(teams_tab, pts1, team1)
ds_map_add(teams_tab, pts2, team2)
ds_map_add(teams_tab, pts3, team3)
ds_map_add(teams_tab, pts4, team4)
//ordenar
maior[0]=ds_map_find_last(teams_tab);
time[0]=ds_map_find_value(teams_tab, maior[0]);
for(i=1;i<ds_map_size(teams_tab);i+=1){
maior[i]=ds_map_find_previous(teams_tab, maior[i-1]);
time[i]=ds_map_find_value(teams_tab, maior[i]);
}
O maior[0] é a maior pontuação.
O time[0] é o time mais pontuado.
É só você desenhar de tras para frente agora.
Essa é sua tarefa. Tudo está em ordem, basta desenhar agora.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por Gonçalves em Ter 19 Jul 2011, 19:01

Tentei desenhar aqui porém sem sucesso... Nunca mexi com ds_map. Pode dar uma mãozinha?

Gonçalves

Ranking : Nota B
Número de Mensagens : 1013
Data de inscrição : 29/10/2010
Notas recebidas : B + A + C
Reputação : 79
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por vinians em Ter 19 Jul 2011, 19:26

Amigo, a maneira mais simples de fazer isso resolvendo os 2 problemas ao mesmo tempo é a seguinte:
Veja:
Código:

lista_geral = ds_list_create();
//adicionar na lista assim:
ds_list_add(lista_geral, team[1].pts "|" + team[1].name + "|" + goals_tab[1] + "|";
ds_list_add(lista_geral, team[2].pts "|" + team[2].name + "|" + goals_tab[2] + "|";
//etc
ds_list_sort(lista_geral);
//agora basta separa cada item ordenado
for (i = 0; i < ds_list_size(lista_geral); i += 1)
{
  str = ds_list_find_value(lista_geral, i);
  p = string_pos("|", str);
  time = string_copy(str, 1, p - 1);str = string_delete(str, 1, p);
  p = string_pos("|", str);
  pontos = string_copy(str, 1, p - 1);str = string_delete(str, 1, p);
  p = string_pos("|", str);
  goal = string_copy(str, 1, p - 1);str = string_delete(str, 1, p);
  //Viu retiramos todos os dados devidamente ordenados
}
Basicamente é isso. Esse é o código, funciona mas eu nao testei no GM pode ter algum erro de sintaxe. Mas a idéia funciona.
FlwS!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Organizando uma Tabela e Dando Critério para Desempate

Mensagem por Conteúdo patrocinado Hoje à(s) 02:55


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum