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.
Fórum › Pascal
Třídění zatřiďováním - chybný výsledek
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?)
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.
Moje stránka.
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.
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
SQL - dělení - chybný výsledek — založil SGTEAM
Chybný layout? — založil Zeleny_Muzik
Chybný obsah v proměnné — založil TomyB
Chybný výstup programu — založil homer4
Bankomat - chybný zdrojový kód — založil FFilip13
Moderátoři diskuze