Pascal - třídící algoritmy

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Petr2000
nováček
Příspěvky: 13
Registrován: červen 19
Pohlaví: Nespecifikováno
Stav:
Offline

Pascal - třídící algoritmy

Příspěvekod Petr2000 » 16 čer 2019 19:25

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

Reklama
Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod ITCrowd » 16 čer 2019 19:55

Podle jakého klíče?
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Petr2000
nováček
Příspěvky: 13
Registrován: červen 19
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod Petr2000 » 16 čer 2019 20:03

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.

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod ITCrowd » 16 čer 2019 20:27

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íš.
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Petr2000
nováček
Příspěvky: 13
Registrován: červen 19
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod Petr2000 » 16 čer 2019 20:34

Co to je for each? Já to musím udělat v Pascalu

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod ITCrowd » 16 čer 2019 20:38

Psal jsi algoritmus. To máš do školy?
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Petr2000
nováček
Příspěvky: 13
Registrován: červen 19
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod Petr2000 » 16 čer 2019 20:42

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.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod faraon » 16 čer 2019 20:47

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?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Petr2000
nováček
Příspěvky: 13
Registrován: červen 19
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod Petr2000 » 16 čer 2019 20:54

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:

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod ITCrowd » 16 čer 2019 20:56

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.
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Petr2000
nováček
Příspěvky: 13
Registrován: červen 19
Pohlaví: Nespecifikováno
Stav:
Offline

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

Příspěvekod Petr2000 » 16 čer 2019 21:03

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?

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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

Příspěvekod faraon » 16 čer 2019 21:30

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}
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti