Pomoc s návrhem algoritmu

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Ajciso
nováček
Příspěvky: 7
Registrován: leden 14
Pohlaví: Muž
Stav:
Offline

Pomoc s návrhem algoritmu

Příspěvekod Ajciso » 10 črc 2015 15:00

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 :)

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomoc s návrhem algoritmu

Příspěvekod faraon » 10 črc 2015 18:21

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.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Pomoc s návrhem algoritmu

Příspěvekod satik » 10 črc 2015 18:51

Lejblík je předpokládám prvek Label, tedy kontrolka pro obyčejný výpis textu, i když zní to dost zajímavě :D .

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

Rutherther
Level 2
Level 2
Příspěvky: 227
Registrován: říjen 14
Pohlaví: Muž
Stav:
Offline

Re: Pomoc s návrhem algoritmu

Příspěvekod Rutherther » 11 črc 2015 09:59

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?

Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Pomoc s návrhem algoritmu

Příspěvekod satik » 11 črc 2015 10:38

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

Rutherther
Level 2
Level 2
Příspěvky: 227
Registrován: říjen 14
Pohlaví: Muž
Stav:
Offline

Re: Pomoc s návrhem algoritmu

Příspěvekod Rutherther » 11 črc 2015 15:54

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?

Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Pomoc s návrhem algoritmu

Příspěvekod satik » 11 črc 2015 16:07

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

Rutherther
Level 2
Level 2
Příspěvky: 227
Registrován: říjen 14
Pohlaví: Muž
Stav:
Offline

Re: Pomoc s návrhem algoritmu

Příspěvekod Rutherther » 11 črc 2015 16:23

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.

Uživatelský avatar
Sender
Level 3.5
Level 3.5
Příspěvky: 700
Registrován: leden 07
Bydliště: Vysočina
Pohlaví: Muž
Stav:
Offline

Re: Pomoc s návrhem algoritmu

Příspěvekod Sender » 11 črc 2015 16:34

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.

Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: leden 15
Bydliště: Krkonoše
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Pomoc s návrhem algoritmu

Příspěvekod satik » 11 črc 2015 17:44

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


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pomoc s webem
    od Tay » 09 úno 2025 15:53 » v Web-tipy a vaše weby
    5
    19735
    od Tay Zobrazit poslední příspěvek
    10 úno 2025 12:09
  • Pomoc při taktu Příloha(y)
    od ondyN » 14 led 2025 15:53 » v Taktování a další úpravy PC
    2
    6785
    od Dyonysos Zobrazit poslední příspěvek
    14 led 2025 16:19
  • Pomoc pri upgrade procesoru
    od filipo88 » 16 úno 2025 19:11 » v Rady s výběrem hw a sestavením PC
    5
    3045
    od petr22 Zobrazit poslední příspěvek
    17 úno 2025 12:45
  • Pomoc se zpomaleným notebookem
    od trefort » 29 zář 2024 14:02 » v Problémy s hardwarem
    8
    2813
    od atari Zobrazit poslední příspěvek
    30 zář 2024 10:04
  • Pomoc s výběrem komponent
    od kurkisak » 02 pro 2024 14:48 » v Rady s výběrem hw a sestavením PC
    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 5 hostů