Pole – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pole – Pascal – Fórum – Programujte.comPole – Pascal – Fórum – Programujte.com

 

freelex0
Duch
20. 3. 2010   #1
-
0
-

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...

Nahlásit jako SPAM
IP: 217.197.149.–
liborb
~ Redaktor
+18
Guru
20. 3. 2010   #2
-
0
-

Příkaz je sice hezký a možná i existuje, ale podmínka je podmínka. A to druhé největší číslo najdeš podobně jako to největší, jenom musíš kontrolovat, jestli to není to největší (tato věta se mi opravdu povedla :-)).

Nahlásit jako SPAM
IP: 195.189.142.–
Honzc0
Stálý člen
22. 3. 2010   #3
-
0
-

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.

Nahlásit jako SPAM
IP: 85.207.57.–
Mircosoft+1
Věrný člen
22. 3. 2010   #4
-
0
-

Š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).

Nahlásit jako SPAM
IP: 93.91.144.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Honzc0
Stálý člen
23. 3. 2010   #5
-
0
-

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)

Nahlásit jako SPAM
IP: 85.207.57.–
Honzc0
Stálý člen
23. 3. 2010   #6
-
0
-

Jé omyl. Špatná příloha - nová viz. tato příloha

Nahlásit jako SPAM
IP: 85.207.57.–
Mircosoft+1
Věrný člen
23. 3. 2010   #7
-
0
-

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

Nahlásit jako SPAM
IP: 130.119.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Laaca0
Stálý člen
28. 3. 2010   #8
-
0
-

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

Nahlásit jako SPAM
IP: 193.179.2.–
DOS-u-akbar
Mircosoft+1
Věrný člen
29. 3. 2010   #9
-
0
-

Deja vu :smile8:

Nahlásit jako SPAM
IP: 130.119.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý