Bonjour
Je m initie à delphi et à la programmation objet et j ai du mal avec cette derniere.
J'ai une liste de valeurs (1,10,8,3) qui sont donc initialement classées 1,2,3 et 4
à l issue d un tri décroissant, j ai 10,8,3,1 soit d apres les positions initiales 2,3,4,1
je souhaite faire les differences deux à deux de ces classements c est à dire 1-2, 2-3, 3-4 et 4-1.
Je suis convaincu qu en declarant un objet nombre avec position initiale et valeur initiale et valeur triee=0 au debut pour tous, puis en faisant un tri sur valeur initiale et en affectant cette nouvelle position à valeur triee je peux y arriver mais je ne sais absolument pas comment faire.
Pourriez vous svp me montrer comment declarer cet objet et lancer le tri sur valeur initiale s il vous plait car je n ai pas compris du tout comment y parvenir.
pour l algo de tri il y en a sur le net, donc a priori pas de pb sauf que, à l issue du tri, comment boucler sur le nouveau classement ? Je n ai aucune idee de comment faire etant donné que mes seules valeurs sont valeurs initiale...
Je sais j en demande un peu beaucoup mais là je seche. Ce n est pas que je n y ai pas reflechi, je suis meme parvenu à le realiser mais sans objet et c est tres lent et c est un bon exemple pour comprendre, à defaut de maitriser l objet.
donc pour prouver ma bonne foi, voici mon code, pas tres accademique pour la plus part d entre vous mais j ai pas pu faire mieux...
merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 List_Temp := TStringList.Create; for j := 0 to List.Count - 1 do begin if (strtofloat(List[j]) < 10) then List_Temp.Add('0' + List[j]) else List_Temp.Add(List[j]); end; List_Temp.Sort; List_vt := TStringList.Create; c := 0; for j := 0 to List_Temp.Count - 1 do begin for L := 0 to List_Temp.Count - 1 do begin if strtofloat(List[j]) = strtofloat(List_Temp[L]) then begin c := c + 1; List_vt.Add(inttostr(L)); List_Temp[L] := '-1'; Diff := abs(L - j); Diff := Diff * Diff; s_diff := s_diff + Diff; break; end; end; end; List_Temp.destroy;
EDIT : Je precise que la finalité est de faire la somme des carres de toutes ces differences de positions. donc si il y a plus simple comme raisonnement, je suis aussi prenneur ;-). merci
Partager