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

Pomoc DU – Pascal – Fórum – Programujte.comPomoc DU – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Gorn
~ Anonymní uživatel
1 příspěvek
31. 10. 2007   #1
-
0
-

Dobrý den,mám problém s úkolem.............vůbec nevím jak na to..........Je dán počet vstupních hodnot N a dále posloupnost N čísel a1, a2, …, aN. Všechna zadaná čísla jsou celá , počet čísel N není větší než 10000. Určete, kolik různých hodnot se nachází v zadané posloupnosti. Například pro vstup ve tvaru

10

4 7 5 5 7 7 20 25 7 30

bude výsledkem číslo 6 pomoste pls

Nahlásit jako SPAM
IP: 82.202.12.–
Reklama
Reklama
Mircosoft+1
Věrný člen
31. 10. 2007   #2
-
0
-

Muzes si treba udelat pole tolika booleanu, kolik muze byt v te posloupnosti maximalne cisel. Na zacatku ho naplnis hodnotami false. Pak projdes tu zadanou posloupnost a pro kazde cislo nastavis v poli bunku s timto indexem na true (pole[cislo]:=true). Nakonec spocitej, kolik mas v poli hodnot true a je to.

Nahlásit jako SPAM
IP: 147.32.164.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
mylan40
Super člen
31. 10. 2007   #3
-
0
-

To Mircosoft : Lenže v tej postupnosti môžu byť ľubovoľne veľké celé čísla, obmedzený je len ich počet. Takže to by si musel použiť pole s niekoľkými tisíckami prvkov, čo nie je veľmi rozumné.

Nahlásit jako SPAM
IP: 85.248.56.–
Mircosoft+1
Věrný člen
31. 10. 2007   #4
-
0
-

Pokud to budou integery (což jsem předpokládal), není problém udělat pole booleanů s indexem pokrývajícím celý rozsah integeru, do limitu 64KB na jednu proměnnou je to akorát. Není důvod šetřit pamětí, nic jiného ten program dělat nebude.

Ale jestli to budou longinty, tak máš pravdu. To se pak bude muset vyrobit nějaký seznam přímo těch čísel (pole bude stačit), který se vždycky po načtení nového čísla z posloupnosti projde a pokud v něm to číslo ještě není, tak se tam přidá. Nakonec se spočítá počet čísel v tom poli.

Nahlásit jako SPAM
IP: 89.176.249.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Laaca0
Stálý člen
31. 10. 2007   #5
-
0
-

Buďto to můžeš řešit hrubou silou nebo v rukavičkách.
Hrubou silou znamená, že si uděláš pole 1..10000, budeš tam zapisovat nelezené prvky a pořád ho budeš procházet, jestli tam je prvek na vstupu. Jestli neni, tak ho tam přidáš a postup se opakuje. Algoritmus je jednoduchý, ale pomalý, protože čísla nejsou nijak tříděná a pole se většinou prochází zbytečně dlouho.

var data,prac:array[1..10000] of longint;

a,b,c,p:integer;
je_tam:boolean;
begin
write('Kolik zadas cisel? ');
readln(a);
for b:=1 to a do
begin
write('Zadej hodnotu c.',b,': ');
readln(data);
end;
{Data mame nactena, jdem je zpracovavat}
p:=0;
for b:=1 to a do
begin
je_tam:=false;
for c:=1 to p do
if prac[c]=data then begin je_tam:=true;Break;end;
if je_tam=false then
begin
inc(p);
prac[p]:=data;
end;
end;

writeln('Zadano bylo ',p,' ruznych hodnot.'#13#10'Tady jsou:');
for b:=1 to p do
write(prac,', ');
writeln(#8#8' '); {umaze posledni carku}
readln;
end.


V rukavičkách znamená, že přijímaná data budeš za pochodu řadit podle velikosti, takže procházení, jestli číslo už bylo, bude mnohem rychlejší. Na takovýhle postup se ale pole nehodí. Na to se používají binární vyhledávací stromy, a to je tak o tři levely obtížnější.

Nahlásit jako SPAM
IP: 82.208.37.–
DOS-u-akbar
Laaca0
Stálý člen
31. 10. 2007   #6
-
0
-

Zdá se, že redakční systém má ještě mouchy ve zvýrazňování syntaxe, chichichi.

Nahlásit jako SPAM
IP: 82.208.37.–
DOS-u-akbar
Mircosoft+1
Věrný člen
31. 10. 2007   #7
-
0
-

Už jsem to říkal Curovi, ať to v kódech zruší :smile20:

Pro čtenáře: tam, jak začíná to tučné, má být [ b ]:
readln(data); - správně readln(data[ b ]);

Pro pisatele: veškeré hranaté závorky pro jistotu vykládejte mezerami...

Nahlásit jako SPAM
IP: 89.176.249.–
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, 13 hostů

Podobná vlákna

Pomoc — založil piwolukas

Pomoc !!! — založil Vlasta

Pomoc — založil marta

Moderátoři diskuze

 

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý