Stránka 1 z 3

Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

Napsal: 06 zář 2015 21:53
od faraon
Všechny bity hry:

00000001 - Jednoduchá kalkulačka
00000010 - Odebírání zápalek
00000100 - Gregoriánský kalendář
00001000 - Hádání kombinace
00010000 - Vigenérova šifra
00100000 - Hledání min
01000000 - Házení kostkou
10000000 - Conway's Game of Life




Výzva všem místním programátorům a programátorkám!

Letos v prosinci oslavíme 200. výročí narození první počítačové programátorky Ady Lovelace, dlouholeté spolupracovnice anglického filozofa a matematika Charlese Babbage, tvůrce prvního programovatelného číslicového počítače.

ada.gif


Ada byla sice dcera básníka, ale místo říkanek a vyšívání, běžných kratochvílí mladých dam té doby, jí zajímala spíš matematika a přírodní vědy, díky čemuž později pochopila Babbageovu práci mnohem lépe než spousta soudobých vzdělanců. Dokonce se jí připisuje nejdůležitější objev, skok podmíněný výsledkem předchozí operace, což umožňuje v programu vytvářet větvení a cykly. Teprve tím vzniklo skutečné programování a skutečné programy, ne jenom vyměnitelný dírkovaný kotouč do hrací skříně.

Do dnešních dnů se dochoval první počítačový program, počítající Bernoulliho čísla, a sotva si někdo dokáže představit jak těžké bylo vymyslet a zakódovat algoritmus, ovládající přímo páky, spojky, táhla a ozubená kola mechanického počítacího stroje, navíc bez možnosti vyzkoušet ho na skutečném hardwaru. Analytical Engine, jak se onen počítač nazýval, byl totiž tak složitý, že dodnes nebyl postaven, vznikly jenom jeho malé části pro ověření funkce. V konečném výsledku měl mít přibližně velikost fotbalového hřiště a jako pohon parní stroj. Byl to skutečně těžký hardware, a stejně těžká byla i práce s ním, obzvlášť pro křehkou ženu v první polovině devatenáctého století.

Dodnes je programování tvrdá práce, ale i umění, a také hra. Pojďme si tedy hrát! Právě teď začíná

MALÁ HRA O VELKÉHO BAJTA

Hrát může úplně každý kdo má chuť, od čerstvě vylíhnutých jednobitových pulců, kteří se chtějí pochlubit tím co se zrovna naučili, až po děrnou páskou zabandážované digitální mumie, ukazující že ještě všechno nezapomněly. Pravidla jsou jednoduchá:
  1. Každý hráč (nebo tým) musí přinést vlastní výtvor, program který vymyslel a sepsal sám, bez cizí pomoci. Plagiátorům a podvodníkům bude smazán harddisk a sežere je růžový dinosaurus.
  2. Je třeba ukázat zdrojový kód v jakémkoliv programovacím jazyce pro jakoukoliv platformu, nikoliv hotový zkompilovaný program, v případě nutnosti dodat i návod na zprovoznění a získání všeho potřebného, třeba použitých knihoven.
  3. Aspoň jeden další účastník hry musí program úspěšně rozběhat a vyzkoušet, a sdělit nám svůj názor na něj, hodnocení, připomínky, kritiku... A hlavně zjistit jestli funguje.
Tak to by asi mělo stačit, můžeme jít na to.

Každý výpočet musí začít od nejnižšího místa bajtu, a stejně začne naše hra, od nultého bitu úplně vpravo: 00000001

Nejdřív malý náhled do historie. Slovo computer je mnohem starší než ty kouzelné krabičky které se jím nazývají dnes. Původně znamenalo název povolání, označovalo člověka provádějícího výpočty. Anglicky computer, francouzsky ordinateur, německy rechner, česky počtář. Byla to těžká řehole, podobně jako opisování knih před vynálezem knihtisku, a vznikalo přitom mnoho chyb, někdy i s fatálními důsledky. Například špatné údaje v navigačních tabulkách měly na svědomí řadu potopených nebo ztracených lodí.

multijadro.jpg


Proto byla snaha jejich práci zmechanizovat, zjednodušit, a zamezit tak vzniku chyb způsobeným lidským faktorem, to byl i důvod pro který Charles Babbage začal konstruovat automatické počítací stroje. Zpočátku měli počtáři a počtářky jenom jednoduché pomůcky, různá počítadla jako je abakus nebo sčot, časem k nim přibyly kalkulátory, což byly nejdřív knihy předpočítaných tabulek nejčastěji používaných operací, později mechanické počítačky, které se časem vyvinuly do elektromechanických a ještě později elektronických přístrojů.

Úkol pro tento měsíc je naprogramovat právě takový kalkulátor, zvládající čtyři základní aritmetické operace: sčítání, odčítání, násobení, dělení, a to co možná nejjednodušším způsobem. Fantazii se meze nekladou, jestli se někdo bude chtít pochlubit vlastním interpretem BASICu, FORTHu, LISPu, nebo něčím podobným, má samozřejmě také možnost. Ale jednoduchá kalkulačka úplně postačí, program vyhoví zadání když zvládne vypočítat takovéhle a podobné příklady:

Kód: Vybrat vše

3 + 18
3 - 18
4 * 9
56 / 7


Tady je ukázkové řešení pro inspiraci:
http://www.youtube.com/watch?v=3LQI9FRBbTo
Kdo nevlastní ZX Spectrum nebo některý kompatibilní počítač jako byly Didaktiky, může pro vyzkoušení použít emulátor, třeba tenhle běžící přímo v prohlížeči: http://torinak.com/qaop

Re: Malá hra o Velkého Bajta (0)

Napsal: 08 zář 2015 20:37
od domitea
Tak ukáži jeden pokus o implementaci, který je starší, než zadání úkolu :lol:

Je to zásobníková kalkulačka, která umí pouze postfixový zápis. Je napsána v Javě a každý si ji může zkopírovat a vyzkoušet z mého Githubu

Re: Malá hra o Velkého Bajta (0)

Napsal: 23 zář 2015 18:01
od Oxxid
Mé řešení je zde https://gist.github.com/mbalous/d1c61ea58d8307d5157d . Melo by to byt relativne blbu-vzorne. Jsem otevreny kritice...

Re: Malá hra o Velkého Bajta (0)

Napsal: 26 zář 2015 20:13
od noko
Já jsem to vyřešil takto: http://noko.wz.cz/php-calc/ . Je to v PHP běží na straně serveru, musíte ho mít v pc nainstalované nebo na zprovoznění použít nějaký free hosting s podporou php třeba php5.cz.

Omlouvám se, špatně jsem si přečetl zadání, radši jsem to udělal v javascriptu: http://noko.wz.cz/js-calc . Kalkulačku zprovozníte tak že do textového editoru vložíte kód a potom uložíte jako .html nebo .php .

Re: Malá hra o Velkého Bajta (0)

Napsal: 26 zář 2015 20:19
od Oxxid
No to jsi to, ale nevyřešil správně. Vstupem je pouze jeden výraz! Tj. ty by jsi měl mít na stránce jeden <input type="text"/> a jeden <input type="submit/>! Výraz rozparsovat je právě úkolem toho programu.

Re: Malá hra o Velkého Bajta (0)

Napsal: 27 zář 2015 07:37
od faraon
Ale jo, vyřešil to správně, i když až napodruhé. Vlastně je to totéž co jsem udělal v tom ukázkovém videu, akorát je na to potřeba milionkrát výkonnější počítač a stotisíckrát víc paměti než před třiceti lety :lol:

Mělo jít o co nejjednodušší řešení, s maximálním využitím možností zvoleného jazyka, aby se program nemusel piplat s každým bajtem sám a bloudit ve spoustě větvení a cyklů. A to že program dokáže vyřešit i složitější výrazy než 1+1 je naopak bonus.

Jen bych prosil umístit kód na nějaké trvalejší místo než je osobní web, který může kdykoliv zmizet, nejlépe přímo sem do tagu |code|. Tak snad bude moci někdy v budoucnu posloužit někomu jinému jako inspirace.

Re: Malá hra o Velkého Bajta (0)

Napsal: 01 lis 2015 19:02
od faraon
Žádný další odvážlivec, který by se chtěl pochlubit vlastním řešením, už se nenajde? Kdyby ano, může ho sem vložit. Můžete napsat také hodnocení programů kolegů které jste si vyzkoušeli.

Zatím přidám vlastní výtvor, jeden řádek v jazyce C, počítá s reálnými čísly a hlídá dělení nulou:

Kód: Vybrat vše

#include <stdio.h>
#include <math.h>

int main(void)
    {
    float x,y;
    char z;

    for (printf("1+1 (C)2015 FARAON\n");3==scanf("%f%1[+-*/]%f",&x,&z,&y);printf("%.3f %c %.3f = %.3f\n",x,z,y,'+'==z?x+y:'-'==z?x-y:'*'==z?x*y:y&&'/'==z?x/y:NAN)) while ('\n'!=getchar());

    return 0;
    }


Hra stále trvá a pokračuje dalším bitem: viewtopic.php?f=61&t=162471

Re: Malá hra o Velkého Bajta (0)

Napsal: 01 lis 2015 19:25
od Denis V.
Tak jsem se teda přidal :)

VS Projekt, .exe, Jen zdroják, C++

Re: Malá hra o Velkého Bajta (0)

Napsal: 01 lis 2015 20:05
od faraon
Pěkné a jednoduché řešení, akorát když už počítáš celočíselně, možná by bylo lepší aby se ten zbytek vypisoval jenom když nějaký bude. Třeba u sčítání je to celkem zbytečná informace, dokonce trochu matoucí.

Re: Malá hra o Velkého Bajta (0)

Napsal: 01 lis 2015 20:21
od Denis V.
Oprava na desetinná čísla, zbytek odstraněn. Přidán link jen na zdroják :)

Re: Malá hra o Velkého Bajta (0)

Napsal: 01 lis 2015 20:29
od Akrej
Jen tak ze svědavosti zkusim napsat taky kalkulačku jak bylo uvedeno ale neslibuju že to bude taková dokonalita jako je tady víš uvedena

Re: Malá hra o Velkého Bajta (0)

Napsal: 01 lis 2015 20:52
od Oxxid
Denis V. píše:Tak jsem se teda přidal :)

VS Projekt, .exe, Jen zdroják, C++

nefrčí to