Algoritmizace prace s SD kartou
Pavel Kutina
hw na prelude.cz
Pondělí Březen 30 22:22:47 CEST 2020
To je hezký, jak se nechápeme :)
Otevřu adresář v tom filemenegeru, mám v něm předvolené třídění podle
něčeho. Na první stránce mi nabídne prvních deset souborů, setříděných od
prvního po desátý. V dalším PgDn dalších deset, od jedenáctého po dvacátý
atd.
Protože soubory jsou na médiu chaoticky a ne podle zvoleného řazení, tak je
musí setřídit. A zobrazit prvních deset (nebo následujících deset na další
stránce). Není tam žádná mez, odkud pokud má nějaké soubory zobrazit - ne,
zobrazí jich deset.
Tady už ale tuším, jak by to mělo jít udělat - první stránku zobrazí
vytříděním prvních deseti (viz algoritmus, který jsi popisoval). Z toho mi
povstane jméno souboru, který je poslední s tím, že vím která jména souborů
při dalším zatřídění zahazovat (ty, co jsou v kritériu pod ním). Použiju
opět ten algoritmus, co jsi popsal, ale už s tím, že znám tu spodní mez. A
tak dále, až do konce adresáře, budu-li toho schopen.
No, teď už to jenom přepsat do kódu :)
Díky, tohle by mělo bohatě stačit, mělo by to chodit.
Pavel Kutina
P.S.: Jo a to zpomalování při hromadě souborů možná nedělal Norton, ale
M602, jeden z nich určitě (já používal NC, v práci většinou M602 nebo
Volkova) - prostě zatuhnul, hrabal po disku, a nic se nedělo, pak poskočil o
další kus výpisu adresáře a dělal, jako by se nic nedělo - až do dalšího
přeskoku stránky.
----- Original Message -----
From: "Jindrich Fucik" <fulda na seznam.cz>
To: <hw-list na list.hw.cz>
Sent: Monday, March 30, 2020 9:47 PM
Subject: Re: Algoritmizace prace s SD kartou
> Nebo jsem já nepochopil něco z tvého programu?
> Proč potřebuješ počítat ty prvky? Pokud pro to, aby jsi vypsal číslo
> stránky, tak to poznáš podle toho, kolik prvků jsi zahodil.
> Jinak co si pamatuji, ani ten norton to nezajímalo. Stiskneš PgDn a
> dostaneš následující stránku, bez ohledu na to, kolikátý prvek z kolika.
> Stiskneš klávesu "šipka dolů" na posledním řádku a dostaneš stránku
> posunutou o jeden řádek.
> Pokud jsi v adresáři prvně, dostaneš první stránku. Stiskneš PgDn a máš
> druhou stránku. Jednou šipka nahoru, druhá stránka mínus jeden prvek, PgUp
> ukazuje na mínus první prvek, takže dostanu zase první stránku od začátku.
>
> Dne 30.3.2020 v 16:54 Pavel Kutina napsal(a):
>> Chápu - a, tady je to nepochopení. Když použiju tvůj příklad, já přece
>> ale nehledám B > 5, já vůbec nevím, větší než kolik to má být, protože
>> nevím, který prvek z A bude ten rozhodující "dělicí". Primárně mi jde o
>> zobrazení seznamu souborů, takže vám, kolik jich je na jedná stránce, ale
>> nevím, jakým písmenem bude ten seznam třeba už na druhé stránce začínat.
>>
>> Věta "Hledáme pole B[10], které obsahuje prvky nejbližší větší než je
>> prvek B1 v uspořádaném stavu." je nesprávná, mělo by být "Hledáme pole
>> B[10], které obsahuje prvky nejbližší větší než je pátý prvek A v
>> uspořádaném stavu".
>>
>> A[] 1 14 8 15 6 2 7 9 4 11
>>
>> Tvojí metodou dostanu B 6, 7 8 (tři následující, větší než 5), ale já
>> bych potřeboval setřídit A:
>>
>> A[] 1 2 4 6 7 8 9 11 14 15
>>
>> a z něj dostat tři prvky po pátém prvku, tedy 8, 9, 11.
>>
>> Jinak ten algoritmus chápu. Leda ho protočit N-krát (kde N je číslo
>> stránky při stránkování) - při prvním bude B>0, při druhém bude B větší
>> než největší-poslední B z prvního průchodu, při třetím než ze druhého
>> průchodu atd. Jo, bude to trvat a při dvacáté stránce se to bude třidit
>> dvacetkrát a z toho devatenáctkrát zbytečně, ale zase je to daň za nízké
>> využití paměti. Mimochodem - tak nějak to vypadá jako to, o čem tu psal
>> kolega Sladký, jen jsem to původně nepochopil :)
>>
>> Jestli jsem to teda nakonec pochopil správně, tak tohle je to správné
>> řešení. Mimochodem, co si tak vybavuju, tak i ten původně zmiňovaný
>> Norton Commander na slabších strojích s velkým počtem souborů v adresáři
>> také znatelně zpomaloval, možná se k těm seznamům choval nějak podobně.
>>
>> Pavel Kutina
>>
>>
>>
>>
>>
>>
>>
>> ----- Original Message ----- From: "Jindrich Fucik" <fulda na seznam.cz>
>> To: <hw-list na list.hw.cz>
>> Sent: Monday, March 30, 2020 1:42 PM
>> Subject: Re: Algoritmizace prace s SD kartou
>>
>>
>>> A=ha, po mne je chyba se dívat na A[] jako na pole, je to stream,
>>> přichází, odchází.
>>> Hledáme pole B[10], které obsahuje prvky nejbližší větší než je prvek B1
>>> v uspořádaném stavu.
>>>
>>> Pro ilustraci příklad, kdy hledám 3 prvky, větší než B1=5:
>>> A[] obsahuje prvky v pořadí z leva doprava:
>>> 1 14 8 15 6 2 7 9 4 11
>>>
>>> Na začátku si naplním B[3]=[-1,-1,-1] - to jako že prvek o kterém vím,
>>> že není v seznamu.
>>> První iterace A[]=1; B[3]=[-1,-1,-1]; B1=5;
>>> prvek 1<5, takže zahodím
>>>
>>> Druhá iterace A[]=14; B[3]=[-1,-1,-1]; B1=5;
>>> prvek 14>5, takže přidám; s prvkem -1 pracuji jako s neexistujícím a
>>> první pozice v poli je neexistující prvek, takže přidám na začátek,
>>> všechny ostatní prvky v poli posunu o jednu doprava, poslední logicky
>>> vypadne.
>>>
>>> Třetí iterace A[]=8; B[3]=[14,-1,-1]; B1=5;
>>> prvek 8>5, takže přidám. Prvek 8 je menší než první prvek (14), takže
>>> přidám dopředu. Všechny ostatní prvky posunu.
>>>
>>> Čtvrtá iterace A[]=15; B[3]=[8,14,-1]; B1=5;
>>> prvek 15>5, takže přidám. Prvek 15 je menší než posldní prvek (-1),
>>> takže přidám na konec. Všechny ostatní prvky bych posunul, ale jsem na
>>> konci, takže jen zahodím poslední.
>>>
>>> Pátá iterace A[]=6; B[3]=[8,14,15]; B1=5;
>>> prvek 6>5, takže přidám. Prvek 6 je menší než první prvek (8), takže
>>> přidám dopředu. Všechny ostatní prvky posunu.
>>>
>>> Šestá iterace A[]=2; B[3]=[6,8,14]; B1=5;
>>> prvek 2<5, takže zahodím
>>>
>>> Sedmá iterace A[]=7; B[3]=[6,8,14]; B1=5;
>>> prvek 7>5, takže přidám. Prvek 7 je menší než druhý prvek (8), takže
>>> přidám na druhé místo. Všechny ostatní prvky posunu.
>>>
>>> Osmá iterace A[]=9; B[3]=[6,7,8]; B1=5;
>>> prvek 9>5, takže bych přidal, ale je větší než poslední (8), takže
>>> zahodím.
>>>
>>> Devátá iterace A[]=4; B[3]=[6,7,8]; B1=5;
>>> prvek 4<5, takže zahodím.
>>>
>>> Desátá iterace A[]=11; B[3]=[6,7,8]; B1=5;
>>> prvek 11>5, takže bych přidal, ale je větší než poslední (8), takže
>>> zahodím.
>>>
>>> Takže mám můj nový seznam B[3]=[6,7,8] a nikde jsem si nepotřeboval ani
>>> uložit obsah streamu A[] a a ani nic sortovat.
>>>
>>> Chápeš?
>>>
>>> Dne 30.3.2020 v 10:39 Pavel Kutina napsal(a):
>>>> Tak jsem si myslel, že to, že se mi to v hlavě nerovná do nějakého
>>>> pochopitelného algoritmu, je jen pokročilou hodinou - a mně se to tam
>>>> nerovná ani teď, takže si fandím a bude to bude spíš demencí.
>>>>
>>>> Když to rozepíšu:
>>>>
>>>> Mám pole prvků na vstupu, dejme tomu A[], kde jsou hromady
>>>> neuspořádaných položek. Mám pole B[] výstupu, kde potřebuju mít těch
>>>> deset správně setříděných - s tím, že je to výřez setříděného pole
>>>> Äsort[] , tedy při obrazení třeba čtvrté "stránky" z toho celku Asort[]
>>>> bude platit, že pole B[] obsahuje položky Asort[30] - Asort39]".
>>>>
>>>> Buď jsme se úplně nepochopili, nebo to v tom řešení prostě nevidím -
>>>> jak zjistím, který prvek je první (B[0]), tedy na pozici 30 toho
>>>> setříděného pole (Asort[29])? Kdyby to bylo od nuly, tak jo, ale když
>>>> chci najít třicátý, tak musím to pole stejně nějak přetřídit, abych
>>>> zjistil, které jsou na těch pozicích před ním a které tedy mám zahodit
>>>> jako podlimitní?
>>>>
>>>> Asi potřebuju flipchart, kafe, a programátora, kterej to umí :)
>>>>
>>>> Pavel Kutina
>>>>
>>>>
>>>> ----- Original Message ----- From: "Jindrich Fucik" <fulda na seznam.cz>
>>>> To: <hw-list na list.hw.cz>
>>>> Sent: Sunday, March 29, 2020 10:38 PM
>>>> Subject: Re: Algoritmizace prace s SD kartou
>>>>
>>>>
>>>>> Ty přímo vkládáš na správné místo.
>>>>> Tedy:
>>>>> Je aktuální menší něž poslední minulý? Ano = zahoď + konec
>>>>> Je aktuální větší než poslední v seznamu? Ano - je poslední v seznamu
>>>>> větší než 9? ano = zahoď + konec, ne = dej na konec
>>>>> Jinak najdi pozici kam patří, posuň co je za pokud při posunu přeteklo
>>>>> 10, ta zahoď poslední.
>>>>>
>>>>> Dne 29.3.2020 v 21:19 Pavel Kutina napsal(a):
>>>>>> Jakože pro každou stránku projdu ceý adresář a zahodím, co se mi
>>>>>> nevejde do mezí, následně setřídím už jen těch deset zbylých? To zní
>>>>>> hodně pěkně, díky, to asi bylo to správné nakopnutí, díky, tohle
>>>>>> zkusím rozvinout.
>>>>>>
>>>>>> Pavel Kutina
>>>>>>
>>>>>>
>>>>>>
>>>>>> ----- Original Message ----- From: "Hynek Sladký" <econf na centrum.cz>
>>>>>> To: <hw-list na list.hw.cz>
>>>>>> Sent: Sunday, March 29, 2020 8:48 PM
>>>>>> Subject: Re: Algoritmiyace prace s SD kartou
>>>>>>
>>>>>>
>>>>>>> Napada me algoritmus, ktery si pamatuje jen 10 prvku pro zobrazeni a
>>>>>>> 1 jako posledni z minule stranky.
>>>>>>> Prochazi se vzdy cely adresar a do seznamu se pridava (tj. i vklada)
>>>>>>> nazev, ktery je vetsi nez posledni z minule stranky a mensi nez
>>>>>>> jeden z docasnych polozek seznamu. Po projiti celeho adresare by tam
>>>>>>> mely byt pozadovane polozky.
>>>>>>> Tento postup se pak muze opakovat, dokud se nedojde na konec
>>>>>>> seznamu.
>>>>>>> Nevim, jestli se mi podarilo to popsat pochopitelne, vysvetlovani mi
>>>>>>> nikdy neslo ;-)
>>>>>>>
>>>>>>> Hynek Sladky
>>>>>>>
>>>>>>>
>>>>>>> Dne 29.3.2020 v 13:35 Pavel Kutina napsal(a):
>>>>>>>> Zdravim,
>>>>>>>>
>>>>>>>> mam ted trochu cas na hrani, tak pro jednu svoji hracku chci
>>>>>>>> dodelat nejaky rozumny filemanager. Hloupe je, ze je to sice na
>>>>>>>> pomerne silnem procesoru (STM32F407VGT6 - 128kB RAM, 1MB flash),
>>>>>>>> ale porad to neni jako na PC...
>>>>>>>>
>>>>>>>> Chtel bych udelat okno ve stylu poloviny Norton Commanderu, tedy
>>>>>>>> vylistovani adresaru a souboru v danem adresari, prochazet soubory
>>>>>>>> a dal s nimi neco delat. Hacek je, ze mne nenapada, jak vyresit
>>>>>>>> trideni souboru - chci je mit srovnane abecedne (nebo treba podle
>>>>>>>> data, velikosti atd.), ale zobrazuju jich v seznamu na displeji
>>>>>>>> deset, na karte jich teoreticky muzou byt stovky, takze zobrazeni
>>>>>>>> musim strankovat. Kdyz nactu seznam do nejakeho pole a to setridim,
>>>>>>>> nasledne zobrazim vysek tech aktualne zobrazovanych deseti, je to
>>>>>>>> vsechno OK - ovsem krome toho, ze sezeru vsechnu pamet, co mam, a
>>>>>>>> jeste bych si musel nekde vypujcit :)
>>>>>>>>
>>>>>>>> Nenapadne nekoho, jak zmensit pametovou narocnost? Popravde mne nic
>>>>>>>> rozumneho nenapada.
>>>>>>>>
>>>>>>>> Diky za kazdy rozumny tip.
>>>>>>>>
>>>>>>>> Pavel Kutina
>>>>>>> _______________________________________________
>>>>>>> HW-list mailing list - sponsored by www.HW.cz
>>>>>>> Hw-list na list.hw.cz
>>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> HW-list mailing list - sponsored by www.HW.cz
>>>>>> Hw-list na list.hw.cz
>>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>> _______________________________________________
>>>>> HW-list mailing list - sponsored by www.HW.cz
>>>>> Hw-list na list.hw.cz
>>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>>
>>>>
>>>> _______________________________________________
>>>> HW-list mailing list - sponsored by www.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list