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, prosím vás o radu, jak mám naprogramovat v Pascalu tyto dvě úlohy.
1) Je zadán seznam přirozených čísel ukončený -1, které nepatří do seznamu. Vypište nejprve všechna sudá čísla a potom lichá, v tom pořadí v jakém byla v seznamu oddělená mezerou. Lichých čísel nebude víc než tisíc.
2) Je dána posloupnost N celých čísel, N<=1000. Určete největší číslo, které se v posloupnosti nachází alespoň dvakrát.
Vstup: První řádek vstupu obsahuje počet prvků posloupnosti N (0 <= N <= 1000). Druhý řádek obsahuje N prvků posloupnosti oddělených mezerami.
Výstup: Jeden řádek obsahující buďto hledané číslo (v případě, že řešení existuje) nebo řetězec "ne" v případě že řešení neexistuje (tj. posloupnost neobsahuje žádný prvek více než jednou)
Příklad 1:
vstup:
8
12 3 54 6 15 12 6 6
výstup:
12
Příklad 2:
vstup:
7
1 8 9 45 6 84 5
výstup:
ne
Offline
↑ Týnuuus:
Ahoj,
není to nic složitého, jen se toho nesmíš bát;-)
ad 1: První nápad by asi byl čísla třídit do dvou polí, ale to je zbytečné plýtvání pamětí, zejm. pokud máš omezen jen počet lichých čísel. Lepší je ze vstupu číst číslo po čísle a testovat je na sudost/lichost (zbytek po celočíselném dělení dvojkou). Sudá zrovna vypíšeš, lichá si uložíš do pole licha:Array[1..1000] of integer. Až bude na vstupu -1, načítání končí a druhým cyklem vypíšeš obsah pole licha.
ad 2: Tohle už je zajímavější, protože jde vymyslet několik postupů:
Přímočaré řešení: Při prvním průchodu najdi maximum vč. jeho indexu, po průchodu celým polem maximum vyřaď přepsáním hodnoty na -1. Pokud jsou ještě v poli nezáporné prvky pokračuj hledáním nového maxima. Pokud je totožné s maximem z předchozího kroku, má nalezen výsledek, jinak opakuj.
Jiné přímočaré řešení: Modifikuj Bubble Sort tak, aby při vložení nového prvku "nahoru" kontroloval, jestli nad ním není stejně velký prvek.
Lepší řešení: Posloupnost si načti do pole, pole si celé uspořádej a pak ho procházej od největšího prvku, zda v něm nejsou za sebou dva stejné prvky. První taková nalezená dvojice splňuje zadání. Pokud na to takhle po ránu koukám dobře, má toto řešení lepší asymptotickou složitost než přímočaré postupy.
Offline
↑ Formol:
jenom drobnost - v Pascalu je přímo funkce odd, která vrací true nebo false...
Offline
No, já si myslím že najít největší duplicitní číslo se dá na jeden jediný průchod.
Ale možná se mýlím.
Princip:
procházím pole, a nalezené prvky si ukládám do zásobníku. Při každém novém prvku se dotážu, zda zásobník ten nový prvek obsahuje. Když ano, a bude větší jak dosavadní největší duplicita, zapamatuji si jí, jinak procházím dál.
Jo, ten program je jen kostra, a obsahuje určitou malou chybu ;-) ale ta se dá snadno napravit, aby čísla v zásobníku byla nezaměnitelná.
Offline
Stránky: 1