Paweł G.

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.
Piotr M.

Piotr M. programista

Temat: tabela z losowymi danymi

Szukałeś i nie znalazłeś ale konkretnie to na czym utknąłeś? Jaka baza danych?
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: tabela z losowymi danymi

Piotr F.:
Szukałeś i nie znalazłeś ale konkretnie to na czym utknąłeś? Jaka baza danych?
Jak to jaka? DBGrid! ;-)
Co do pytania "Jak utworzyć tabelę..." to dla Pawła wystarczy CDS (ClientDataSet).
http://delphi.about.com/od/usedbvcl/a/tclientdataset.htm

Może być też ADO (komponenty dbGO) i bezpośrednia obsługa arkusza Excela za pomocą Jet.Engine; będzie się zachowywać jak baza danych, ale będzie plikiem Excela.

Można też użyć plików tekstowych jako "bazy danych", a bezpośredni dostęp zapewni:
http://www.torry.net/pages.php?id=567

BTW - czy już nikt nie czyta i kupuje normalnych książek? W każdej "normalnej" pozycji o Delphi w/w problem to podstawa...

konto usunięte

Temat: tabela z losowymi danymi

Paweł G.:
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.

Zgadza się, zdecydowanie za długie, żeby pomóc na forum.
To jest po prostu mini-projekt.
Sorry, ale nikt nie zrobi tego za Ciebie (chociaż wyjątki się zdażają).

Poczytaj trochę o kontrolkach bazodanowych, o grupowaniu (k-means), o odległości Levenstein'a i użyj jakiejś bazy pamięciowej (memory-only). Dane możesz wygenerować jakimś narzędziem na zewnątrz i wczytać jako CSV.
Paweł G.

Paweł G. Psycholog

Temat: tabela z losowymi danymi

Tego za mnie oczywiście nikt nie zrobi. Bardziej liczę na pomoc w stylu - w tym miejscu użyj tego i tego bo bedzie łatwiej i szybciej. Potem już w ruch pójdą google i inne booki i jakoś do tego dojdę. Program ma udowodnić wpływ stanu nieustalonego na ustalony. Jest całkowicie niekomercyjny i ma służyć nauce a dokładniej psychologii.

Największy jednak problem mam z generowaniem danych do tablicy.
Juz pewne wasze wskazówki pomogły i trochę ruszyłem do przodu.
Dzięki.

Następna dyskusja:

Aplikacja internetowa do za...




Wyślij zaproszenie do