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: 11
Registrován: červen 19
Pohlaví: Nespecifikováno

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ů
Elite Level 12
Elite Level 12
Příspěvky: 17020
Registrován: březen 10
Pohlaví: Muž

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: 11
Registrován: červen 19
Pohlaví: Nespecifikováno

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ů
Elite Level 12
Elite Level 12
Příspěvky: 17020
Registrován: březen 10
Pohlaví: Muž

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: 11
Registrován: červen 19
Pohlaví: Nespecifikováno

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ů
Elite Level 12
Elite Level 12
Příspěvky: 17020
Registrován: březen 10
Pohlaví: Muž

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: 11
Registrován: červen 19
Pohlaví: Nespecifikováno

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: 6795
Registrován: prosinec 10
Pohlaví: Muž

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?
GOTT is REAL, unless declared INTEGER

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

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ů
Elite Level 12
Elite Level 12
Příspěvky: 17020
Registrován: březen 10
Pohlaví: Muž

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: 11
Registrován: červen 19
Pohlaví: Nespecifikováno

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: 6795
Registrován: prosinec 10
Pohlaví: Muž

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}
GOTT is REAL, unless declared INTEGER


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pascal - pomoc s programem
    od Pelda01 » 13 lis 2018 14:07 » v Programování a tvorba webu
    20
    1667
    od faraon
    13 lis 2018 19:30
  • Pascal - načtení ze záznamu
    od Petr2000 » 15 čer 2019 23:27 » v Programování a tvorba webu
    2
    493
    od Petr2000
    16 čer 2019 07:14
  • Pascal - jak vypočítat řadu při diferenciaci
    od Pelda01 » 04 pro 2018 14:50 » v Programování a tvorba webu
    5
    836
    od faraon
    04 pro 2018 20:05
  • Nvidia přináší podporu pro raytracing i pro Pascal a Polaris
    od DesperadoKHY » 20 bře 2019 13:32 » v Vše ostatní (hw)
    2
    441
    od DesperadoKHY
    20 bře 2019 14:09

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

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 6 hostů