Třídění zatřiďováním - chybný výsledek – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Třídění zatřiďováním - chybný výsledek – Pascal – Fórum – Programujte.comTřídění zatřiďováním - chybný výsledek – Pascal – Fórum – Programujte.com

 

markito
~ Anonymní uživatel
1 příspěvek
9. 5. 2011   #1
-
0
-

Zdravím, přikladám soubor, ve kterém je bohužel chyba - nepracuje správně.
Snažil jsem se vytvořit metodu třídění zatřiďovaním, tzn. že uživatel zadá počet n číselných prvků (pole array), které nebudou seřazeny podle hodnoty a na závěr jště k počtu n dodá jedno "vložene" číslo (v). Program pak všechna zadaná čísla setřídí podle hodnot od nejmenší po nějvětší. Bohužel však nefunguje správně a já nevím, kde jsem udělal chybu, pomůžete mi ?
děkuju.

Nahlásit jako SPAM
IP: 95.85.248.–
KIIV
~ Moderátor
+43
God of flame
9. 5. 2011   #2
-
0
-

takova prasarna ze ani neni poznat, co k cemu patri...
co si to nejprve nejak rozumne odsazovat?

obdivuju taky tvoji predstavu, ze to pole zadane na zacatku, nemusis seradit - asi unikla pointa insert sortu... (tj. ze by to serazene pole nemuselo byt serazene?)

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
10. 5. 2011   #3
-
0
-

No, vyloženě špatně to není, ale to, že se pole musí zadat setříděné, není zrovna samozřejmost a přinejmenším by bylo dobré na to uživatele upozornit.
Tady máš pár mých úprav a poznámek:

program TRIDENI_ZATRIDOVANIM;

uses crt;
var a:array[1..100] of real;
z,i,n:integer;
v:real;
BEGIN
clrscr;

writeln('Zadej delku pole n < 100 :'); {musi byt mensi, protoze budes jedno cislo vkladat}
readln(n); {pro cteni z klavesnice je Readln vhodnejsi, Read mi obcas blbne}
{Tady by to chtelo podminku na otestovani, jestli je n opravdu <100. Ale dejme tomu, ze je uzivatel rozumny.}

writeln('Zadej vsechny prvky pole. Musi byt serazeny od nejmensiho po nejvetsi.');
for i:=1 to n do begin
write('a[',i,']=');
readln(a[i]);
end;

write('Zadejte cislo k vlozeni:');
readln(v);

i:=1;
while (i<=n)and(v>a[i]) do i:=i+1;
{^^^^podminku pro index vzdycky pis jako prvni, at nectes nesmysly zpoza konce pole}
z:=i; {takhle je to rychlejsi nez ho zvysovat soubezne s i}

for i:=n downto z do a[i+1]:=a[i];
a[z]:=v;

for i:=1 to n+1 do writeln('a[',i,']=',a[i]:6:0);

repeat until keypressed;
END.

Samotný vkládací algoritmus je v pořádku.

Nahlásit jako SPAM
IP: 130.119.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
KIIV
~ Moderátor
+43
God of flame
10. 5. 2011   #4
-
0
-

To Mircosoft : autor pise, ze zada pole hodnot "ktere nebudou serazeny podle hodnoty" ... takze ani upozorneni mu nepomuze

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
10. 5. 2011   #5
-
0
-

To KIIV : Aha, hups :-]

V tom případě stačí program trochu modifikovat: místo aby na začátku načetl čísla od 1. do n. a pak samostatně n+1. se zatříděním, tak je bude načítat v cyklu a rovnou každé třídit.

V praxi by to mohlo vypadat tak, že by n bylo na začátku rovné 0 (pole je prázdné). Vkládací algoritmus (v tom předchozím příkladu řádky 22..28) zůstane beze změny, za něj se přidá i:=i+1 a spolu se zadáváním v se to celé zabalí do cyklu, který proběhne tolikrát, kolik čísel má v poli být.

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é

Podobná vlákna

Chybný layout? — založil Zeleny_Muzik

Chybný obsah v proměnné — založil TomyB

Chybný výstup programu — založil homer4

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ý