Paweł G. Psycholog
Temat: tabela z losowymi danymi
W sumie powiem tak: szukałem nie znalazłem. Jestem początkujący i dlatego nie śmiejcie się z tego pytania:Jak utworzyć tabelę TDBGrid w której znajdzie się 20 rekordów i 3 kolumny z wpisanymi losowo (po kliknięciu w buton1) danymi ? Nazwy kolum to 1k, 2k i 3k. Dane jakie mają być losowane to w kolumnie 1k litery od A do J, w 2k liczby od 1 do 10, w 3k ciągi znaków aaa, bbb, ccc do jjj.
Teraz jest na formularzu zwykłe pole edit1 w którym jest już jakaś litera (A-J), drugie pole edit2 w którym jest już jakaś liczba (1-10) i trzecie pole edit3 w którym jest już jakiś ciąg znaków (aaa-jjj).
Teraz za pomoca butona program ma sprawdzić który rekord jest najbliżej wartości edit1 edit2 edit3 jednocześnie. Liczy się przede wszystkim trafienie a dopiero potem odchylenie od wartości szukanej ale tylko w edit1 i edit2. W edit3 jezeli nie jest taki sam ciąg znaków to nie liczy się żadnego odchylenia wówczas albo jest albo nie ma.
Dokładam teraz dwadzieścia shapów, które wszystkie są szarymi kołami. Każdy z nich ma numer od 1 do 20 (tyle ile rekordów). Teraz po naciśnięciu w buton2 jedno z kół z odpowiadającym mu rekordem zmienia kolor na czerwony wówczas gdy jego zmienne są najbardziej dopasowane. Różnica matematycznie istotna między kołem szarym a czerwonym jest taka że jezeli np pierwszy rekord trafi wszystkie trzy zmienne takie same jak w editach a nie będzie innego takiego rekordu o tych samych danych to będzie tylko ten jeden czerwony a reszta powinny pozostać szare. Jeżeli np pierwszy rekord trafi tylko 2 zmienne a nie będzie takiego innego rekordu o takich samych zmiennych to również powienien zmienić się na czerwony a reszta musi być szara. Może się też zdarzyć że żaden rekord nie będzie miał takich zmiennych jak edity. Wówczas trzeba wziąć po uwagę odchylenie i np jeżeli w edit1 jest liczba 5 to najbliższą wartością jest albo 4(-1) albo 6(+1). Ten rekord który ma wszystkie dane najbliższe odpowiedniemu editowi wygrywa i staje się czerwony. To jest bardzo ważne - tylko jedno koło może być czerwone.
Przykładowo wygląda to tak:
1. 3, B, ccc
2. 8, G, aaa
3. 1, H, bbb
4. 2, B, ggg
5. 10, C, jjj
6. 2, I, fff
7. 7, A, aaa
8. 9, D, eee
9. 1, E, ddd
10. 5, E, iii
11. 4, G, ccc
12. 8, F, hhh
13. 2, C, ccc
14. 4, A, bbb
15. 6, H, jjj
16. 7, F, ggg
17. 1, D, bbb
18. 3, I, fff
19. 2, E, ddd
20. 9, C, eee
w polach:
edit1 3
edit2 C
edit3 ddd
Rekordy 1 i 18 spełniają edit1
Rekordy 5, 13, 20 spełniają edit2
Rekordy 9 i 19 spełniają edit3
Teraz patrzymy z tych rekordów 1, 18, 5, 13, 20, 9, 19 który jest najbliżej editów z pozostałymi zmiennymi. W nawiasach są odchylenia.
1. 3, B(-1), ccc razem 1 odchylenie
18. 3, I(+6), fff razem 6 odchyleń
5. 10(+7), C, jjj razem 7 odchyleń
13. 2(-1), C, ccc razem 1 odchylenie
20. 9(+6), C, eee razem 6 odchyleń
9. 1(-2), E(+2), ddd razem 4 odchylenia
19. 2(-1), E(+2), ddd razem 3 odchylenia
Jak widać nie ma takiej kombinacji (zero odchyleń) wśród wylosowanych rekordów. Więc trzeba sprawdzić który rekord jest najbliżej editów. W tym wypadku będzie to rekord 1 i 13.
Tu najważniejsze są przede wszystkim trafienia a nie suma odchyleń. Więc przede wszystkim brane są pod uwagę te rekordy które mają taką samą wartość jak edity a dopiero potem te które mają najmniej odchyleń od editów.
Teraz trzeba te rekordy poukładać według trafienia. Każdy edit1, 2 czy 3 ma dodatkowo tzw rangę. Zawiera się ona w przedziale od 1 do 10. Tak więc aby rozstrzygnąć który rekord będzie jako pierwszy trzeba spojrzeć na rangę. Ranga jest związana z editami i pewnie jest dodatkowym editem, jej wartość jest wpisywana w oddzielnym edicie. Im niższa wartość rangi tym wartość jest ważniejsza dla rankingu. Dla przykładu:
edit1 ranga 2
edit2 ranga 5
edit3 ranga 7
Już widać że rekord 1 będzie pierwszy a rekord 13 drugi. Potem 19, 9, 18, 20, 5.
Jednocześnie chciałbym sprawdzić co sie wylosowało w zwycięskim rekordzie. Ale tylko w nim. Dane te muszą się pokazywać w DBEditach bo chciałbym też mieć bazę danych z każdego losowania i móc ją przejrzeć w excelu (buton z exportem do excela).
W przyszłości dane nie będą się powtarzać bo kolumn bedzie ok 200 a rekordów ok 1000.
Zadanie długie i nie każdemu pewnie chciało sie to czytać. Jest w nim jednak sporo problemów do rozwiązania. Gdyby ktoś podał choć częściowo jakieś rozwiązania to byłbym wdzięczny. Nawet pomoc gdzie mogę szukac na sieci rozwiązań do tego zadania będzie cenna.