Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Ahoj, mám problém s algoritmem, který má nalézt minimum a maximum z určité množiny.
Napadlo mě, že porovnám všechny prvky množiny (26 prvků) a tímto způsobem zjistím, který záznam má nejvyšší hodnotu a samozřejmě i nejnižší, ale nedaří se mi vymyslet algoritmus, který by fungoval v praxi.
Celý proces porovnávání jsem zacyklil.
Nevíte někdo jak na to, aby vše bylo funkční?
Díky moc.
Offline
V jakém jazyce?
Obecně:
Vytvoříš 3 proměné:
int max;
int min;
pole mnozina;
int max = mnozina[0];
int min = mnozina[0];
for(int i = 1; i < mnozina.count();i++)
{
if(mnozina[i]>max)
max = mnozina[i];
if(mnozina[i]<min)
min = mnozina[i];
}
Offline
↑ ReVolt:
Myšlenka (rekurze): pro jednoprvkovou množinu je maximem i minimem tento prvek. Nechť pro n prvkouvou množinu A máme maximum a minimum max(n) a min(n), pak pro n+1 prvkovou množinu (A spolu s nějakým dalším prvkem b) je max(n+1)=max(max(n),b), min(n+1)=min(min(n),b). Stačí tedy provést celkem 2.(n-1) porovnání. Vždy však alespoň n-1.
Offline
Děkuji za konstruktivní příspěvky, prosím načrtněte někdo prosím vývoják, nějak mi to nedochází a nemůžu si to všechno srovnat.
Množinově jsem to pochopil, i princip zjištění minima a maxima, ale program z toho nějak nemůžu vyždímat.
Poslední dobou jsem njakej dutej, tak se nezlobte, že pořád prudím.
Offline
Jindra ti napsal správný postup, pokud se ho budeš držet, tak ti to bude fungovat.
Program bude mít několik částí:
1. Nejdřív musíš mít Pole obsahující všechna data jenž se budou prohledávat. Příklad v Maximě:
Pole: [5,1,7,3,5,2,9,9,1,2,4,6]
2. Vytvoříš si dvě proměnné, které pojmenuješ Max a Min. Do proměnné o názvu Min budeš ukládat nejnižší nalezený prvek a do proměnné Max budeš ukládat nejvyšší nalezený prvek. Pro začátek do nich vložíš první položku z prohledávaného Pole:
Min: Pole[1]; Max: Pole[1];
Tím obě proměnné Max a Min budou mít hodnotu Pole[1], která je 5 (viz první část). Dvojtečka je v Maximě přiřazení hodnoty.
3. Teď budeš ve smyčce for procházet všechny položky z Pole od druhého členu až po poslední člen pomocí indexu i. Poslední člen zjistím příkazem lenght(Pole).
V tělu smyčky for budu provádět kontrolu zda proměnná Min je větší jak kontrolovaná položka z Pole, pokud ano tak do proměnné Min zapíšu nově nalezenou hodnotu. Obdobně to udělám pro proměnou Max, ale obráceně. tentokrát pokud Max je menší než kontrolovaná položka, tak jsem našel novou větší hodnotu.
for i:2 thru length(Pole) do ( if Min>Pole[i] then Min: Pole[i], if Max<Pole[i] then Max: Pole[i] );
4. Nyní už je to všechno. Pokud si vše správně opsal, tak v proměnné Min se nalézá nejmenší hodnota a v proměnné Max zase nejvyšší hodnota.
Poznámka: v Maximě první položka Pole začíná jedničkou, v jiném jazyku může začínat nulou.
Offline
Offline
Moc díky, nějak jsem to předtím pomotal, těď už vím co a jak
jinak ještě informace: píšu to v C#
Offline
Pokud by ti to stále nešlo, tady máš funkční řešení v C#
int[] mnozina = { 5, 10, 11, 1 }; //Nastavíme první hodnotu. C# má pole od 0 int max = mnozina[0]; int min = mnozina[0]; for (int i = 1; i < mnozina.Count(); i++) { if (mnozina[i] > max) { max = mnozina[i]; } if (mnozina[i] < min) { min = mnozina[i]; } } Console.WriteLine("Největší: " + max); Console.WriteLine("Nejmenší: " + min); Console.ReadLine();
Offline
Stránky: 1