Stránka 1 z 2

Pascal - třídící algoritmy

Napsal: 16 čer 2019 19:25
od Petr2000
Ahoj. Chtěl bych se zeptat, jak vytvořit algoritmus, který
by mi seřadil proměnné v řetězci, a přitom zaznamenal
jejich původní pořadí, abych je mohl následně popořadě
vypsat ze záznamu společně s ostatními údaji.
Já jsem začal řešit složitosti, a teď si s tím nevím rady.
Díky za pomoc

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 19:55
od ITCrowd
Podle jakého klíče?

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:03
od Petr2000
Mám zadány recepty, které se liší počtem surovin. A tyto recepty
mám uspořádat postupně za sebe od těch, co potřebují surovin
nejméně až po ty s nejvíce surovinami.

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:27
od ITCrowd
for each
vem si seznam surovin jako kolekci a pomocí for each zjistíš počet prvků v kolekci. Pak už si jednotlivé kolekce seřadíš.

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:34
od Petr2000
Co to je for each? Já to musím udělat v Pascalu

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:38
od ITCrowd
Psal jsi algoritmus. To máš do školy?

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:42
od Petr2000
Jojo a musí to být v Pascalu.
Mám program, ve kterém můžeš zapisovat recepty, mazat, vybírat podle doby přípravy
a taky bych chtěl, aby uměl seřadit recepty podle počtu potřebných surovin.

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:47
od faraon
Už se ti to podařilo načíst do paměti? Máš to ve statickém poli nebo alokuješ dynamicky?

Složitosti vůbec neřeš, jestli potřebuješ jednou za čas seřadit pár desítek položek, dej tam to nejjednodušší co umíš. BubbleSort je "good enough", navíc na rozdíl od jiných metod stabilní.

Co myslíš tím "a přitom zaznamenal jejich původní pořadí"?

Jestli si tím chceš zachránit vysvědčení, tak už moc času nemáš :crazy:

P.S. Turbo Pascal, Free Pascal, nebo něco jiného?

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:54
od Petr2000
Udělal jsem to takto:
procedure SERAZENI1;
var serazeni,poradi: array [1..100] of integer;
poz1,poz2:boolean;
begin
n:=filesize(SC);
poz1:=false;poz2:=false;
i:=1;
reset(SC);
while not eof(SC) do begin
read(SC, recept);
serazeni[i]:=recept.pocetsurovin;
i:=i+1 end;

Mám recepty seřazené podle stran, a když použiji jakýkoli třídící algoritmus,
tak se mi přehází pořadí, které původně souhlasí se stranami, je v čudu.

Bez příkladu vysvědčení nebude :roll:

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 20:56
od ITCrowd
Petr2000 píše:
Mám recepty seřazené podle stran, a když použiji jakýkoli třídící algoritmus,
tak se mi přehází pořadí, které původně souhlasí se stranami, je v čudu.

Bez příkladu vysvědčení nebude :roll:

Tak si na základě třídícího algoritmu vytvoř nové pole.

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 21:03
od Petr2000
Jenže když vytvořím nové pole, které seřadím, tak my stejně zůstanou
jen seřazené hodnoty, které se mohou opakovat a potom jsem na začátku.

Dodatečně přidáno po 20 vteřinách:
Nebo jsem to nepochopil?

Re: Pascal - třídící algoritmy

Napsal: 16 čer 2019 21:30
od faraon
Mohl bys sem dát do přílohy soubor, který načítáš? Ať si to odzkouším na reálných datech...

A zkus při vkládání zdrojového kódu použít tag (code), to je páté tlačítko zleva v horní řadě, tady nad editačním polem. Takhle se ten zdroják vůbec nedá číst, je strašně nepřehledný. Doufám teda, že to nějak slušně formátuješ už u sebe, aby ses v tom sám vyznal ;-)

Kód: Vybrat vše

procedure SERAZENI1;
var serazeni,poradi: array [1..100] of integer;
    poz1,poz2:boolean;

begin
n:=filesize(SC);
poz1:=false;poz2:=false;
i:=1;
reset(SC);
while not eof(SC) do
      begin
      read(SC, recept);
      serazeni[i]:=recept.pocetsurovin;
      i:=i+1
      end;
{tady mi chybí další end - konec procedury}