Zdravím,
narazil jsem při programování na jeden problém a už dva dny se snažím přijít na jeho řešení.
Jde o to, že mám 6 lejblíků a do dvou se snažím dostat číslo z proměnné a do ostatních generuji náhodné číslo.
Dosud není problém, jenže potřebuji aby se při každém vyvolání zaměnil obsah lejblíků.
Přesněji to myslím tak, že při dvou vyvolání nebude 2x po sobě ve stejném leblíku hodnota z proměnné... (Opět aby to řídila "náhoda").
A právě s tímto si nevím rady, snažil jsem se to vyřešit použitím dalších proměnných, kde jsem kontroloval jejich použití.
Moje řešení dopadlo katastrofálně... hromada pomocných proměnných a spousta cyklů navíc...
Už nějak nevím, jak se na ten problém dívat.
Proto bych se Vás rád zeptat, jak by jste to řešily vy ?
Předem děkuji za jakýkoliv nápad :)
Pomoc s návrhem algoritmu
Re: Pomoc s návrhem algoritmu
Jo, ty máš opravdu problém. Mohl bys mi vysvětlit co to jako má být ten lejblík? Ono to sice vzdáleně připomíná jedno slovo v programování používané, ale to má už víc než sedmdesát let jasně daný význam, který do tvého výlevu ani trochu nezapadá: https://en.wikipedia.org/wiki/Label_%28 ... science%29
Takže jestli chceš aby se něco lišilo od předchozího stavu, musíš uchovat předchozí stav a nový s ním porovnávat. Jestli chceš aby se něco lišilo od předchozích dvou stavů, musíš oba předchozí stavy uchovávat a porovnávat s nimi nový. A tak dál, kolikrát je potřeba.
Takže jestli chceš aby se něco lišilo od předchozího stavu, musíš uchovat předchozí stav a nový s ním porovnávat. Jestli chceš aby se něco lišilo od předchozích dvou stavů, musíš oba předchozí stavy uchovávat a porovnávat s nimi nový. A tak dál, kolikrát je potřeba.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- satik
- Level 6
- Příspěvky: 3509
- Registrován: leden 15
- Bydliště: Krkonoše
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Pomoc s návrhem algoritmu
Lejblík je předpokládám prvek Label, tedy kontrolka pro obyčejný výpis textu, i když zní to dost zajímavě
.
V jakém to řešíš jazyce?
A jinak já bych to řešil třeba tak, že bych si do seznamu uložil všechny lejblíky.
Při každé změně bych pak ten seznam zkopíroval, vybral v něm náhodný lejblík, nastavil do něj první proměnnou, odebral ho ze seznamu, nastavil druhou proměnnou do náhodného zbývajícího lejblíku ze seznamu a hned ho zase odebral.
Pak už jen naházet do zbývajících lejblíků náhodné hodnoty... :)

V jakém to řešíš jazyce?
A jinak já bych to řešil třeba tak, že bych si do seznamu uložil všechny lejblíky.
Při každé změně bych pak ten seznam zkopíroval, vybral v něm náhodný lejblík, nastavil do něj první proměnnou, odebral ho ze seznamu, nastavil druhou proměnnou do náhodného zbývajícího lejblíku ze seznamu a hned ho zase odebral.
Pak už jen naházet do zbývajících lejblíků náhodné hodnoty... :)
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
-
- Level 2
- Příspěvky: 227
- Registrován: říjen 14
- Pohlaví:
- Stav:
Offline
Re: Pomoc s návrhem algoritmu
Nebylo by lepší při každé změně jen náhodně vybrat, kde bude hodnota z proměnné a ostatní buď nechat, nebo do nich vygenerovat jiné náhodné číslo? Proč používat seznam?
- satik
- Level 6
- Příspěvky: 3509
- Registrován: leden 15
- Bydliště: Krkonoše
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Pomoc s návrhem algoritmu
S tím seznamem je to univerzálnější, ale můžeš i bez něj, pokud se nezamotáš do té spousty podmínek :)
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
-
- Level 2
- Příspěvky: 227
- Registrován: říjen 14
- Pohlaví:
- Stav:
Offline
Re: Pomoc s návrhem algoritmu
Proč spousty podmínek? Nepotřebuješ ani jednu, jen je pak pravděpodobnost, že budou proměnné na stejných místech.. Mýlím-li se, řekni mi, v čem se mýlím?
- satik
- Level 6
- Příspěvky: 3509
- Registrován: leden 15
- Bydliště: Krkonoše
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Pomoc s návrhem algoritmu
Tak pošli kód nebo pseudokód, mě to teda momentálně bez podmínek nenapadá :)
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
-
- Level 2
- Příspěvky: 227
- Registrován: říjen 14
- Pohlaví:
- Stav:
Offline
Re: Pomoc s návrhem algoritmu
Kód: Vybrat vše
//ukazu ti to na c#, jestli beres switch jako podminku, tak to promin.. Zkusim ale vymyslet jeste jedno reseni
Random rnd = new Random();
int toLab1 = rnd.Next(6), toLab2 = rnd.Next(6);
lab1 = rnd.Next(); //Uplne vsechny labely
switch(toLab1){
case 0:
lab0 = promenna;
case 1:
lab1 = promenna;
case 2:
lab1 = promenna; //a tak dale..
}
//to same pro toLab2
Druhé řešení mám ještě v hlavě, napíšu ho a pošlu
--- Doplnění předchozího příspěvku (11 Črc 2015 16:28) ---
Kód: Vybrat vše
static int promenna = 5;
static String lab0, lab1, lab2, lab3, lab4, lab5;
static void Main(string[] args)
{
String[] labels = new String[6];
Random rnd = new Random();
for(int i = 0; i < 6; i++){
labels[i] = rnd.Next().ToString();
}
int toLab1 = rnd.Next(6), toLab2 = rnd.Next(6);
labels[toLab1] = promenna.ToString();
labels[toLab2] = promenna.ToString();
lab0 = labels[0];
lab1 = labels[1];
lab2 = labels[2];
lab3 = labels[3];
lab4 = labels[4];
lab5 = labels[5];
Console.Write(lab0 + " " + lab1 + " " + lab2 + " " + lab3 + " " + lab4 + " " + lab5);
Console.ReadKey();
}
Možná by bylo dobré použít podmínku, aby se nemohlo stát, že toLab1 a 2 budou stejné, ale to je jen taková drobnost..
//edit má to být Next, ne NextInt, za to se omlouvám, ale dlouho jsem teď v c# nedělal, takže jsem si to popletl - opravil jsem to
//edit - druhý kód jsem přepsal ve VS, aby bylo vše správně
Naposledy upravil(a) Rutherther dne 11 črc 2015 16:44, celkem upraveno 2 x.
Re: Pomoc s návrhem algoritmu
Ajciso> bylo by dobře napsat problém víc dopodrobna.O jaký programovací jazyk se jedná (prostředí,verze)? Jaký rozsah čísel atd.
Pro inspiraci:
tak třeba v Delphi se náhodnost generuje voláním funkce random(),kdy se před tím volá procedura randomize kvůli vygenerování pseudo čísla.
procedure TForm1.Button1Click(Sender: TObject);
var i,old_num:integer;
label opakuj;
begin
randomize;
old_num:= StrToInt(Label1.Caption);
opakuj:
i:=Random(20); //generuje náhodný číslo od 0 do 19
if old_num=i then goto opakuj;
Label1.Caption:=inttostr(i);
end;
Procedura randomize se volá pouze jednou,třeba při startu programu.
Způsobů jak to řešit je celá řada.Tohle je jen ukázka.
Pro inspiraci:
tak třeba v Delphi se náhodnost generuje voláním funkce random(),kdy se před tím volá procedura randomize kvůli vygenerování pseudo čísla.
procedure TForm1.Button1Click(Sender: TObject);
var i,old_num:integer;
label opakuj;
begin
randomize;
old_num:= StrToInt(Label1.Caption);
opakuj:
i:=Random(20); //generuje náhodný číslo od 0 do 19
if old_num=i then goto opakuj;
Label1.Caption:=inttostr(i);
end;
Procedura randomize se volá pouze jednou,třeba při startu programu.
Způsobů jak to řešit je celá řada.Tohle je jen ukázka.
- satik
- Level 6
- Příspěvky: 3509
- Registrován: leden 15
- Bydliště: Krkonoše
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Pomoc s návrhem algoritmu
Rutherther: jo, ta druha moznost by sla, to moje reseni by generovalo pro kazdej label hodnotu jen jednou, ty ji vygenerujes nahodne pro vsechny a pak ty dva nahodne vybrany labely prepises hodnotou z promenne.
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 5
- 19735
-
od Tay
Zobrazit poslední příspěvek
10 úno 2025 12:09
-
- 2
- 6785
-
od Dyonysos
Zobrazit poslední příspěvek
14 led 2025 16:19
-
- 5
- 3045
-
od petr22
Zobrazit poslední příspěvek
17 úno 2025 12:45
-
- 8
- 2813
-
od atari
Zobrazit poslední příspěvek
30 zář 2024 10:04
-
- 2
- 1776
-
od kurkisak
Zobrazit poslední příspěvek
02 pro 2024 18:11
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti