Založen: Sep 03, 2019 Příspěvky: 69 Bydliště: Karlovy Vary
Zaslal: ne listopad 03 2019, 21:39 Předmět: NEzobrazování mrtvývh nul ve výsledném čísle na displeji.
Ahoj,
mám tu další oříšek, mám tu převod 16bit binárního čísla přímo na ASCII. Principu rozumím, ale nevímm jak se zbavit těch nepotřebných nul před hodnotou. Když tam mám např číslo, jehož převod je 300 (dec), tak mi to vyzobrazí 00300. Určitě existuje nějaká finta, jak to vyrušit, dokud budou první výsledky v REG "nulové".
Az to cislo budes mit prevedene do ascii proste kontroluj zleva jednotlive cislice a pokud to bude nula, nahrad ji mezerou. Pokud to bude jine cislo nez nula, ukonci kontrolu. Nevim v cem vidis problem.
Ten program funguje tak, že předpokládá číslo max. 99999. A odečítá 10000 tolikrát, až se dostane do záporných čísel. Přitom počítá, kolikrát odečetl těch 10000. Když se dostane do mínusu, přičte 10000, odečte 1 z počítadla desetitisíců a má počet desetitisíců. To samé pak dělá s 1000, to samé se 100, s 10 a pak mu zbyde počet jednotek. Takže na konci každé odečítací procedury bys měl kontrolovat, zdali není výsledek 0. Pokud je, neodesílat nic (nebo mezeru), jinak odesiláš počet v počítadle odečítání.
Nebo bys mohl na začátku odečítání kontrolovat, zdali je číslo vyšší než 10000. Pokud ano, odečítá s. Pokud ne, nevracíš nic (nebo mezeru).
Založen: May 22, 2016 Příspěvky: 855 Bydliště: Čelákovice / Brandýs n.L / Stará Boleslav
Zaslal: po listopad 04 2019, 18:13 Předmět:
vtip je v tom, že nemáš sestavený algoritmus a projekt, ale hned kóduješ program "z hlavy". Kdyby jsi postupoval řádně, sepsal nejprve algoritmus a projekt programu, a teprve potom podle projektu zakódoval program, tak by jsi tyhle potíže neměl.
Jenže to je důsledek pofiderní rychlokvaškové výuky na českých školách. Začíná se od konce, vše se dělá "zadkem napřed", obráceně. Programy se zhotovujé bez projektu, bez algoritmů, kódováním z hlavy.
Představ si, že by jsi stejným způsobem stavěl dům, bez projektu. Skládal by jsi cihly z hlavy, tak jak tě napadne. To by byly konce, co? Anebo by jsi takto bez projektu tvořil auto. Prostě by jsi bez výkresů, bez projektu soustružil, frézoval díly a snažil se je sestavit a chtěl, aby vzniklo jezdící auto. Ve strojírenství a stavařině si bez projektu troufnou pracovat leda tak blázni. V elektronice a prgramování to je v Česku "normální".
Co je to za vyraz "zakodoval program" ? To jsi slysel v nejakem serialu na Nove?
Ja zadne projekty ani "algoritmy programu" nezakodovavam, ale na ty nuly proste vzdycky zapomenu. Tech par radku na jejich vymazani dopisu az je uvidim na displeji.
Když se použije pro převod/zobrazování čísel algoritmus dělení deseti (obecně základem č. soustavy) dokud není podíl 0, problém s nevýznamnými nulami nevzniká.
Založen: Jan 19, 2016 Příspěvky: 1523 Bydliště: Liberecko
Zaslal: po listopad 04 2019, 22:05 Předmět:
Jak píše lesana, v cyklu děl číslo deseti, podíl schovej pro další dělení, zbytek vždy vem a přičti k němu ASCII hodnotu znaku "0" a "předpoj" k výstupnímu řetězci. Jakmile je podíl 0, skonči. Pokud chceš zarovnávat napravo, vpisuj číslice do předpřipraveného řetězce pevné délky vyplněného mezerami.
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: po listopad 04 2019, 22:39 Předmět:
Ovšem pokud procesor má instrukci dělení, je dělení 10 pro n-bytové číslo víceméně triviální záležitost na pár řádků. Zbytek po dělení se přes push uloží do stacku, načež se pozpátku vyzvedne a dokud jsou nuly, zobrazuje se mezera. První nenulové číslo nastaví flag a pak už se nuly zobrazují, nesmí se ale zapomenout na poslední místo, kde už se nula musí zobrazit, pokud je číslo nulové.
Dá se tam i přihodit desetinná tečka (fakt nemám rád čárku) a podobné operace... _________________ Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Založen: May 22, 2016 Příspěvky: 855 Bydliště: Čelákovice / Brandýs n.L / Stará Boleslav
Zaslal: út listopad 05 2019, 9:21 Předmět:
tady jsou dva podprogramy, které normálně používám. První je pro integer 16-místné číslo a druhý pro real 16-místné číslo. V real číslu se musí detekovat desetinná tečka, aby se nemazaly nuly v případě hodnoty 0.00.
Princip dekodování vychází z hardwarového řazení obvodů 7447, které zháší nevýznamné nuly hardwarově.
pro 16 mistny integer:
sub leadzero [P]
for i=15 to 1 step -1; if P[i]=0; sf[i]; ascii(127)->P[i]; ret[P];
cf[i]; next; ret[P];
endsub;
pro 16 mistny real:
sub leadzero [P]
for i=15 to 1 step -1; if P[i]="."; ret[P];
if P[i]=0; sf[i]; ascii(127)->P[i]; ret[P];
cf[i]; next; ret[P];
endsub;
v assembleru p-proměnných 1 podprogram vypadá takto:
cyci{0f};dec i;eqz{P[i]};1->f{i};00h->{P[i]};rtn{P[i]};
0->f{i};rtcy-1;rtn{P[i]};
2. podprogram se liší pouze tím, že se detekuje desetinná tečka, tedy příkazy
Az to cislo budes mit prevedene do ascii proste kontroluj zleva jednotlive cislice a pokud to bude nula, nahrad ji mezerou. Pokud to bude jine cislo nez nula, ukonci kontrolu. Nevim v cem vidis problem.
Jde to ještě jednodušeji, není potřeba žádných kontrol ani jiných algoritmů. Prostě při úvodní inicializaci naplní proměnné pro displej (kromě řádu jednotek) místo nulami prázdným znakem, to je celé (tedy za předpokladu, že začíná od nul, tedy pokud např. nenačítá poslední použitou hodnotu z EEPROM a podobně, a taky za předpokladu, že s proměnnými pro displej neprovádí výpočty, např. inkrementaci, ale jen do nich zapisuje hodnotu).
V jednom programu jsem to řešil ještě jinak - prostě jsem nespínal tranzistory pro ovládání segmentovek, a to za podmínky "dokud není poprvé použito", tedy zařídil jsem si na to flag registr (což lze, protože první číslo "k použití" nikdy není nula, a to i když se s těmi registry provádí nějaká operace typu INC apod - tedy samozřejmě zase kromě řádu jednotek, na něj jsem tu podmínku prostě neuplaňoval vůbec).
Pokud to tak udelas, bude ti cislo pri obnovovani blikat. Ten algoritmus neni nijak slozity, je to par radku kodu.
Ja mam napsane podprogramy pro prevod do bcd, ascii a vymazani tech nul a jednoduse pouziju bez vetsiho premejsleni ty ktere zrovna potrebuju pro danou aplikaci. Ctrl+c, ctrl+v je mnohem rychlejsi nez to psat pro kazdou znovu jako soucast jedineho procesu zobrazovani.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.