Zdravím programátory a nadšence,
snad se najde někdo kdo mi rozšíří obzory v mé problematice.
Mám 24 proměnných (cislo1, cislo2, cislo3,... cislo24),
Timer přičítá těmto proměnným v každém intervalu různé jednotky a to v závisloti na splněných podmínkách (zde nezmiňuji, není potřeba).
(např. po 20 cyklech cislo1 = 5, cislo2 = 121, cislo3 = 0, cislo4 = 0,... cislo24 = 35) .
Těchto 24 proměnných potřebuju každý cyklus Timeru seřadit vzestupně do řady (s řadou budu dále pracovat).
Nyní mám další proměnnou x (která podle splněných podmínek nabýva hodnot 0,1,2,...6).
Když bude x=1 potřebuji aby script rozpoznal poslední proměnnou na konci řady seřazené podle velikosti (tzn. pozná nejvyšší číslo z 24 proměnných), když bude x = 0 samozřejmě script nic nevyhledává.
Pokud bude nejvyšší proměnná např. cislo8, potřebuji přidat proměnné cislo8stat hodnotu 1 ( proměnných cisloXstat je také 24 - nabývají pouze hodnot 1 a 0).
Pokud je proměnná cislo8stat = 1, je proměnná cislo8 odstraněna z řady 24 proměnných (v řadě je nyní 23 proměnných) dokud proměnná cislo8stat nenabyde opět hodnoty 0 (tehdy je proměnná cislo8 přidána zpět do řady proměnných seřazené podle velikosti).
Nyní trochu komplikace pokud bude x = 3. Tzn. script vybere z řady 24 proměnných seřazených vzestupně poslední 3 proměnné ( = 3 nejvyšší hodnoty z řady), po rozpoznání těchto třech proměných nastavý script "příbuzným" proměnným "stat" hodnotu 1 a původní proměnné jsou všechny 3 odstraněny z řady (v řadě pro další cykly zbývá pouze 21 proměnných) dokud hodnoty stat nenabydou opět hodnoty 0 (kterou určují moje již hotové scripty).
Př. x = 3, nejvyšší 3 proměnné = cislo24, cislo18, cislo13. Následně cislo24stat = 1, cislo18stat = 1, cislo13stat = 1 načež jsou cislo24, cislo18 a cislo13 odstraněny z řady dokud se jejich příslušné hodnoty cislo24stat, cislo18stat a cislo13stat nerovnají opět 0.
V některých případech jsou proměnné cisloX totožné (např. nabydou hodnoty 81 tři proměnné, hodnota 81 je zároveň nejvyšší), nyní zvolme proměnnou x = 2 - nyní je na systému, které 2 ze 3 proměnných umístí na konec řady.
Netuším, zda je potřeba řadit proměnné do vzestupné řady nebo je jednodušší naprogramovat kód který z nich najde rovnou např. 5 nejvyšších (každopádně musí být v řadě, ze kterých se aktivní odečtou).
Jsem kóder laik a programuji pro zábavu, snažím se prokázat že z náhodných čísel nejde obejít statistiku a pravděpodobnost.
Díky,
Pavel.
Fórum › Visual Basic
Nejvyšší hodnoty ze seznamu proměnných
Na seřazení prvků v poli existuje funkce Array.Sort(). Zbytek je už jen o naprogramování potřebných funkcí.
Tak nevím proč, ale v mém VB6 mi to funkci Array.Sort() nechce vzít nebo nevím jak ji použít. Napsal jsem si na seřazení vlastní funkci. Pro ukázku posílám jen 5 hodnot.
Dim Pocet As Integer 'definice proměnných
Dim A, B As Integer
Dim cislo1, cislo2, cislo3, cislo4, cislo5 As Integer
Dim cislo1stat, cislo2stat, cislo3stat, cislo4stat, cislo5stat As Integer
Pocet = 5 'počet jednotek v poli - pro příklad 5, poté zvolím 24
ReDim Pole(Pocet)
cislo1 = 11 'aktuálně zvolené hodnoty proměnných cisloX, které se jinak v reálu generují
cislo2 = 24
cislo3 = 0
cislo4 = 6
cislo5 = 99
cislo1stat = 0 'pokud je proměnná cisloXstat = 0 je hodnota proměnné cisloX zobrazováno v poli, nabývají hodnot 1 a 0
cislo2stat = 0
cislo3stat = 0
cislo4stat = 0
cislo5stat = 0
If cislo1stat = 0 Then
For A = 1 To 1
Pole(1) = cislo1 'ke každému z 5ti polí přidávám příslušnou proměnnou cisloX
Next A
Else
Pole(1) = 0 'pokud je cisloXstat ruzné od 0, pole(1) má hodnotu 0 a je umístěno na konec řady
End If
If cislo2stat = 0 Then
For A = 1 To 1
Pole(2) = cislo2
Next A
Else
Pole(2) = 0
End If
If cislo3stat = 0 Then
For A = 1 To 1
Pole(3) = cislo3
Next A
Else
Pole(3) = 0
End If
If cislo4stat = 0 Then
For A = 1 To 1
Pole(4) = cislo4
Next A
Else
Pole(4) = 0
End If
If cislo5stat = 0 Then
For A = 1 To 1
Pole(5) = cislo5
Next A
Else
Pole(5) = 0
End If
For A = 1 To Pocet
For B = 1 To Pocet
If Pole(A) < Pole(B) Then ' seřazení podle velikosti
cislo = Pole(A)
Pole(A) = Pole(B)
Pole(B) = cislo
End If
Next B
Next A
For A = 1 To Pocet
Print Pole(A) 'zobrazení již seřazené řady
Next A
Bohužel nepřišel jsem na to, jak např. když potřebuji zvolit 3 poslední čísla v řadě nastavit jejich "příbuzným proměnným" cisloXstat hodnotu 1 (následně mi už můj kód proměnné cisloX z řady odstraní). Jedná se mi pouze o část kódu který z pole vybere podle proměnné "y" příslušný počet posledních hodnot a proměnným stat nastaví 1.
Díky za každou radu.
To Pavel : Aha, ty děláš ve VB6? Hmm, tak to nevím, já dělám ve VB9 (Visual Basic.NET). A ta funkce Array.Sort() je nejspíše součástí .NET Framework-u. :-( -nejsem si jist. Leda to protřídit nějakou vlastní funkcí, v praxi existuje několik metod (probublávání, atd.).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak seřadit pole od nejvyšší hodnoty k nejnižší? — založil yaqwsx
Seřazení prvků v poli od nejvyšší hodnoty po nejnižší hodnotu — založil Kubas129
Hledání nejvyšší hodnoty součinu kombinace prvků dvojrozměrného pole — založil bobek11
Velké hodnoty proměnných - BCMath — založil Monty
Vždy uloži pouze poslední hodnoty do seznamu (ArrayListu) a minulé s… — založil lenochod
Moderátoři diskuze