Zdravím všechny kolemjdoucí. Chci se zeptat, jak udělat v pascalu (verze 1.9.2) max hodnotu (číslo) a druhou nejvyšší z pole. Na maximum je speciální příkaz, aby se to nemuselo dělat přes podmínku, ale už si ho nepamatuji. Všem děkuji za odpovědi...
Fórum › Pascal
Pole
To freelex.
Jak si myslíš, že ten příkaz na hledání maxima je udělaný?
Tedy nástin.
1. Nejdříve je potřeba tak zhruba vědět od jakých hodnot se ti to pole pohybuje.
2. Pak nadefinuješ proměnnou a přiřadíš jí hodnotu menší než je nejmenší očekávaná hodnota pole. (např. proměnná max)
3. Pak dáš cyklus, který projíždí všechny prvky pole a každý prvek porovná s hodnotou proměnné max.
Pokud je hodnota prvku větší než max, dáš za max hodnotu příslušného prvku, když ne neděláš nic. (to je ta podmínka)
4. Nakonec budeš mít v hodnotě max uloženou největší hodnotu pole.
Druhá největší.
1. Uděláš největší hodnotu.
2. V cyklu přes všechny prvky pole porovnáváš prvky s hodnotou max. Když se rovná přiřadíš tomu prvku pole nějako malou hodnotu (např. tu co jsi dával za max na začátku).
3. Tak máš pole, kde jsou hodnoty bez maximální hodnoty.
4. Teď zopakuješ krok pro výběr maxima pole.
5. V max budeš mít druhou největší hodnotu pole.
Z toho je zřejmé, že nejlepší je udělat funkci pro zjištění maximálního prvku pole. a tu pak 2x použít.
Šlo by to i na jeden průchod. Máš proměnné max (pro největší) a max2 (pro druhou největší). Před cyklem vlož nejmenší možnou hodnotu do obou dvou (nebo radši první číslo z pole, ať nehrozí, že se náhodou vyskytne něco menšího). Podmínka ve třetím bodě cyklu se změní na: Pokud je hodnota prvku větší než max, zkopíruješ max do max2 a za max dáš hodnotu příslušného prvku. A je to.
A nebo můžeš pole setřídit a pak prostě vzít první dvě různé hodnoty od konce, ale to je z praktického hlediska pitomost (třídění určitě potrvá déle než ten předchozí postup).
Moje stránka.
To Mircosoft
To ale není pravda.
Tvůj postup bude fungovat pouze v případě, že maximální prvek bude následovat až za
druhým největším. (Jinak ten druhý bude špatně) Je možné se přesvědčit viz příloha - do
StringGridu je nutné zadávat čísla typu Integer)
Jinak ještě k počáteční hodnotě proměnné max. Je samozřejmě možné podle typu čísel,
jakými je pole naplněno (myslím tím Integer, Single Double, Extended atd) dat tu počáteční
hodnotu jako nejmenší možné číslo příslušného typu (u Integer je to: -2147483647)
Jo, díky za upozornění. Chce to přidat ještě jednu podmínku:
Pokud je prvek větší než max, zkopíruj max do max2 a do max vlož ten prvek,
jinak když je prvek větší než max2 a zároveň menší než max, tak ten prvek vlož do max2.
K počáteční hodnotě: Když použiju nejmenší možnou hodnotu podle typu, musím ji přepisovat pokaždé, když ten typ měním nebo když použiju jiný překladač (např. pro TP je minimum integeru -32768 a ne -2147483647). Jenže zase když hodím do max2 první prvek z pole a on to náhodou zrovna bude ten největší, tak je to v pytli. Ledaže bych nejdřív našel minimum a to použil za počáteční hodnotu pro následné hledání dvou největších prvků, tj. o jeden průchod pole víc. No nic, máš pravdu :-).
Moje stránka.
Nebo jinak.
1) Použij speciální funkci na nalezení největší hodnoty pole
2) Hodnotu a její pozici výskytu si zapamatuj. (nebo si zazálohuj celé pole, pokud je zjištění pozice největšího prvku problém)
3) Nahraď jí 0 nebo ještě lépe nějakým hrozným záporným číslem
4) Funkci na nalezení největší hodnoty pole pusť znovu - a máš hledanou hodnotu
5) obnov nejvyšší hodnotu
Deja vu :smile8:
Moje stránka.
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
Razeni pole ktere v sobe ma dalsi pole podle hodnoty indexu — založil david
Zapsání generovaného čísla do pole a zapisování generovaných čísel d… — založil juraj111
Jak z "List<Integer> pole" uddelat normalni "int[] pole" — založil K4BlOs
Definice pole v C (jak použít pole uvnitř struct?) — založil oxidián
Odebrání prvku pole v C,problem s vypisem pole — založil Standa
Moderátoři diskuze