Pomoc s návrhem algoritmu
Moderátor: Mods_senior
Pomoc s návrhem algoritmu
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 :)
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 :)
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: 09 led 2015 12:49
- Bydliště: Krkonoše
- Kontaktovat uživatele:
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
-
Rutherther
- Level 2

- Příspěvky: 227
- Registrován: 10 říj 2014 13:01
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: 09 led 2015 12:49
- Bydliště: Krkonoše
- Kontaktovat uživatele:
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
-
Rutherther
- Level 2

- Příspěvky: 227
- Registrován: 10 říj 2014 13:01
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: 09 led 2015 12:49
- Bydliště: Krkonoše
- Kontaktovat uživatele:
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
-
Rutherther
- Level 2

- Příspěvky: 227
- Registrován: 10 říj 2014 13:01
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
--- 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();
}
//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: 09 led 2015 12:49
- Bydliště: Krkonoše
- Kontaktovat uživatele:
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
-
- Podobná témata
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 14 Odpovědi
- 16844 Zobrazení
-
Poslední příspěvek od belphegor666
-
- 2 Odpovědi
- 11156 Zobrazení
-
Poslední příspěvek od Dyonysos
-
- 5 Odpovědi
- 56207 Zobrazení
-
Poslední příspěvek od Tay
-
- 6 Odpovědi
- 15733 Zobrazení
-
Poslední příspěvek od WinDroid
-
- 29 Odpovědi
- 24540 Zobrazení
-
Poslední příspěvek od WinDroid


