NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Machr na algoritmy - Vlastní programovací jazyk

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:22.10.2013 10:38

Opět zdravím všechny programátory, minisoutěž na tento týden o placku bude obzvláště zajímavá. Naprogramujeme si totiž vlastní interpreter (vlastní programovací jazyk). Nebojte, není to tak složité, jak si myslíte, vlastně to jde udělat i poměrně jednoduše :)

Úkolem soutěže je vytvořit jednoduchý skriptovací jazyk, ve kterém půjde naprogramovat výpočet faktoriálu. Měl by tedy umět psát a číst z proměnných, zpracovat jednoduchou podmínku a umět přeskočit na jiné místo v programu pomocí GOTO. Tyto 3 věci by měly stačit k tomu, aby se dal program na faktoriál napsat.

Aplikace zpracuje vstupní zdrojový kód ve vašem jazyce, který si můžete navrhnout jak chcete. A ne, opravdu tam nemůže být napsáno faktorial(x) :P Zdrojový kód by mohl vypadat např. takto:

prom x = 5;
prom vysledek = 1
prom i = 2
sekce 1
pokud i <= x
  vysledek = vysledek * i;
  jdi 1
konecpokud
vypis vysledek

Výše uvedený jazyk jsem si vymyslel a kód v něm zapsaný by měl spočítat faktoriál z proměnné x. Váš program načte z textového souboru zdrojový kód podobný tomuto a bude ho interpretovat (vykonávat). Na konci by se měl vypsat výsledný faktoriál. Samozřejmě můžete místo GOTO použít např. příkaz opakuj pocet, kde pocet bude x - 1.

Jazyk nemusí umět pracovat se složitými matematickými výrazy, stačí ho naučit jen a * b, a > b a podobně. Nemusí umět 2+8*4a/52. Kdyby se někdo rozvášnil, může poslat kromě faktoriálu i nějaký pokročileší program ve svém jazyce, který např. používá funkce.

Určitě si to zkuste, takovéhle skripty se používají často ve hrách, sám jsem je používal u své adventury. Můžete použít libovolný programovací jazyk. Čas si dejme jako vždy do neděle 27.10. do 18:00 hodin.

Hodnotit budu co jazyk umí a také jak je to napsané. Jako vždy platí, raději naprogramujte méně a dejte si záležet, aby byl kód hezký a jednoduchý. Podrobnější pravidla soutěží naleznete zde: http://www.itnetwork.cz/…outezi-machr

Editováno 22.10.2013 10:39
Odpovědět
22.10.2013 10:38
New kid back on the block with a R.I.P
Avatar
adas
Tvůrce
Avatar
Odpovídá na David Hartinger
adas:22.10.2013 16:13

Zrovna v pondeli jsem premyslel proc jsem nedas machra na vlastni progr. jazyk :D

 
Nahoru Odpovědět
22.10.2013 16:13
Avatar
Odpovídá na David Hartinger
Zdeněk Pavlátka:22.10.2013 16:27

Vytvořit svůj jazyk byl vždycky můj sen. Už jsem na tom dokonce začal pracovat (objektově orientovaný jazyk překládaný do assembleru) :D . Rozhodně se zúčastním, pak to využiju při ladění ve svém editoru kódu.

Nahoru Odpovědět
22.10.2013 16:27
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na David Hartinger
Jakub Lásko[Saarix]:22.10.2013 16:52

Tak už jsem začal, ale vůbec to nevidím slibně :-) Je to docela zvláštní téma, ještě sem nedostal nějaký nápad jak to pěkně zaonačit. Snad to přijde.

Nahoru Odpovědět
22.10.2013 16:52
Časem je vše možné.
Avatar
Odpovídá na Zdeněk Pavlátka
Jakub Lásko[Saarix]:22.10.2013 17:01

Pokud se ale nepletu, tak bez zkoumání toho zda je řádku kódu daný znak nebo řetězec a na základě toho "něco" se neobejdu asi že?

Nahoru Odpovědět
22.10.2013 17:01
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Zdeněk Pavlátka:22.10.2013 17:03

Piš trochu srozumitelněji a nevynechávej slova.
Edit: Základem je dobrá práce s textem/řetězci

Editováno 22.10.2013 17:04
Nahoru Odpovědět
22.10.2013 17:03
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Jakub Lásko[Saarix]:22.10.2013 17:08

Jaj promiň nečetl jsem to už po sobě. Uf no zatím sem s texty moc nepracoval, tak uvidíme. Držím všem palce.

Nahoru Odpovědět
22.10.2013 17:08
Časem je vše možné.
Avatar
Neaktivní uživatel:22.10.2013 17:09

takové zajímavé témata by měly být přes prázdniny a ne během semestru :D

Nahoru Odpovědět
22.10.2013 17:09
Neaktivní uživatelský účet
Avatar
Old Account
Člen
Avatar
Old Account:22.10.2013 17:39

Mne sa to osobne paci, myslim si ze je to krok jedine k lepsiemu, len tak dalej.
//Ospravedlnujem sa, mal som otvorenych viac okien v prehliadaci a splietol som si diskusiu.

Editováno 22.10.2013 17:42
Nahoru Odpovědět
22.10.2013 17:39
"If you keep your eye on the profit, you’re going to skimp on the product. But if you focus on making really gre...
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na adas
Ondrca:22.10.2013 18:41

<q>Zrovna v pondeli jsem premyslel proc jsem nedas machra na vlastni progr. jazyk :D</q>
jsem? Snad sem, ne?

Nahoru Odpovědět
22.10.2013 18:41
Zase jsem o něco chytřejší
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Ondrca
Jan Vargovský:22.10.2013 18:43

Mám ti opravit tvou gramatiku ... ?

 
Nahoru Odpovědět
22.10.2013 18:43
Avatar
Ondrca
Tvůrce
Avatar
Ondrca:22.10.2013 18:44

Jestli něco najdeš tak můžeš :).

Nahoru Odpovědět
22.10.2013 18:44
Zase jsem o něco chytřejší
Avatar
Odpovídá na Ondrca
Neaktivní uživatel:22.10.2013 18:53

Chybí ti čárka. (Rýpanec ze srandy, nejspíš vím, jak jsi to původně myslel. Chyba tam opravdu je, jen pro někoho není tak viditelná. :))

Editováno 22.10.2013 18:54
Nahoru Odpovědět
22.10.2013 18:53
Neaktivní uživatelský účet
Avatar
Odpovídá na David Hartinger
Zdeněk Pavlátka:22.10.2013 19:09

Jsem docela zvědavý, kolik lidí tohle zkusí.

Nahoru Odpovědět
22.10.2013 19:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
adas
Tvůrce
Avatar
Odpovídá na Ondrca
adas:22.10.2013 19:18

Jsou toto snad nějaké testy z gramatiky ?
Jde o to, aby ostatní pochopili myšlenku, ne aby rýpali do něčeho, co není podstatné ;)

 
Nahoru Odpovědět
22.10.2013 19:18
Avatar
Odpovídá na Zdeněk Pavlátka
Jakub Lásko[Saarix]:22.10.2013 19:28

No účast bude asi menší než na šibenici.

Nahoru Odpovědět
22.10.2013 19:28
Časem je vše možné.
Avatar
Vojtěch Pospíchal:22.10.2013 19:31

Trochu jsem přemýšlel, jestli se zúčastnit. Na vlastním jazyce dělám chvíli, přesto si myslím, že už něco umí. Ale nikdy jsem nebyl fanda zveřejňování ZK, tak nevím, nevím no......

 
Nahoru Odpovědět
22.10.2013 19:31
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:22.10.2013 19:42

Asi to udělám v PHP, ale na objekty zapomeň :D

Nahoru Odpovědět
22.10.2013 19:42
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:22.10.2013 19:45

Tak už pracuju na javascriptové verzi :D zatím to umí jen VYPIS a ERROR :D :D

Nahoru Odpovědět
22.10.2013 19:45
Neaktivní uživatelský účet
Avatar
adas
Tvůrce
Avatar
Odpovídá na David Hartinger
adas:22.10.2013 19:49

Ono to vypadá složitě, ale je to visoce lehké(a ještě to je na týden).

 
Nahoru Odpovědět
22.10.2013 19:49
Avatar
Odpovídá na adas
Zdeněk Pavlátka:22.10.2013 19:51

Záleží na syntaxi vytvořeného jazyka.

Nahoru Odpovědět
22.10.2013 19:51
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Old Account
Člen
Avatar
Odpovídá na adas
Old Account:22.10.2013 19:58

Urcite to je "visoce" lahke...

Nahoru Odpovědět
22.10.2013 19:58
"If you keep your eye on the profit, you’re going to skimp on the product. But if you focus on making really gre...
Avatar
adas
Tvůrce
Avatar
Odpovídá na Old Account
adas:22.10.2013 20:10

Hej tak fakt sorry..., *vysoce.
Vy jste na té gramatice totálně závislí.

 
Nahoru Odpovědět
22.10.2013 20:10
Avatar
Old Account
Člen
Avatar
Odpovídá na adas
Old Account:22.10.2013 20:11

Ja osobne urcite nie, ale nemozem sa pozerat, ked niekto spravi takuto hrubku.

Nahoru Odpovědět
22.10.2013 20:11
"If you keep your eye on the profit, you’re going to skimp on the product. But if you focus on making really gre...
Avatar
Neaktivní uživatel:22.10.2013 20:12

Tak zatím to vypadá nějak takhle

Nahoru Odpovědět
22.10.2013 20:12
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Jakub Lásko[Saarix]:22.10.2013 21:11

Já sem zatím asi tady :-) Teď už ale jdu dělat cykly a zpracování příkazů.

Nahoru Odpovědět
22.10.2013 21:11
Časem je vše možné.
Avatar
Odpovídá na David Hartinger
Jakub Lásko[Saarix]:23.10.2013 16:57

Je zásadní, aby program uměl příkaz GOTO? :)

Nahoru Odpovědět
23.10.2013 16:57
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Neaktivní uživatel:23.10.2013 17:01

řekl bych, že je to celkem jedno.. btw příkaz goto je snad nejjednodušší příkaz :D

Nahoru Odpovědět
23.10.2013 17:01
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jakub Lásko[Saarix]
Kit:23.10.2013 17:18

Příkaz GOTO je docela složitý na implementaci u novějších jazyků. Pokud použiješ podmínky a cykly, tak ho vůbec nebudeš potřebovat.

Zřejmě se předpokládá, že navrhneme a implementujeme něco jako Basic, ale jazyk a implementace interpretru je na nás. Je jedno, jestli to uděláš ve stylu Lisp, Forth nebo Bash. Osobně mě láká ten Lisp, ale Forth je mnohem jednodušší a Basic je také na pár řádek. Že bych zkusil Waduzitdo?

Nahoru Odpovědět
23.10.2013 17:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:23.10.2013 17:23

To poslední jsi se naučil v Bradavicích? Řek jsem to až napotřetí :D

Nahoru Odpovědět
23.10.2013 17:23
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Jakub Lásko[Saarix]:23.10.2013 17:25

taky si myslim, ale myslel jsem to spíš jako že si nemyslím že tam bude potřeba, když to zpracuje vstup a vyhodí výstup.

Nahoru Odpovědět
23.10.2013 17:25
Časem je vše možné.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:23.10.2013 17:27

To je asi nejjednodušší interpretr, který znám. I s editorem se vejde do 256 B, pro požadovaný účel bych ho však musel trochu rozšířit.

Nahoru Odpovědět
23.10.2013 17:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:23.10.2013 20:39

Zkusil jsem si to, a za cca hodinu mám tohle:

 
Nahoru Odpovědět
23.10.2013 20:39
Avatar
Neaktivní uživatel:23.10.2013 21:18

Tak.. zadání mám splněné ;)
Na obrázku je jako příklad výpočet faktoriálu pro čtyřku a osmičku.
Teď se asi pokusím to trochu zpřehlednit a případně přidat nějaké další možnosti.

Nahoru Odpovědět
23.10.2013 21:18
Neaktivní uživatelský účet
Avatar
Odpovídá na Theodor Johnson
Jakub Lásko[Saarix]:24.10.2013 6:19

Nechápu jak si to dal tak rychle :-) sice mám asi podobný stav, ale dělal sem to trochu delší dobu...

Nahoru Odpovědět
24.10.2013 6:19
Časem je vše možné.
Avatar
Odpovídá na Theodor Johnson
Libor Šimo (libcosenior):24.10.2013 7:59

Máš to pekne a prehľadne urobené, len sa mi zdá, že ti to nepočíta správne.
Ak som dobre pochopil kód, tak je tento:

int main(void)
{
    int x = 10;
    int vysledok = 1;
    int a = 2;

    blok:
    if (vysledok <= 10)
    {
        vysledok += a;
        goto blok;
    }
    printf("%d", vysledok);
}

a tam je výsledok 11 a nie 16.

Nahoru Odpovědět
24.10.2013 7:59
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Theodor Johnson:24.10.2013 8:07

ale ty tam máš výsledek + a, já tam mám výsledek * a

 
Nahoru Odpovědět
24.10.2013 8:07
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Jakub Lásko[Saarix]
Theodor Johnson:24.10.2013 8:16

stačí vědět jak na to ;-) btw. nedělám to poprvé

 
Nahoru Odpovědět
24.10.2013 8:16
Avatar
Odpovídá na Theodor Johnson
Jakub Lásko[Saarix]:24.10.2013 10:11

aha to bude tím :-) pro mě tohle bude první pokus o něco takového

Nahoru Odpovědět
24.10.2013 10:11
Časem je vše možné.
Avatar
Neaktivní uživatel:24.10.2013 10:58

Předpokládám, že na výrazy nemůžeme používat různ é eval funkce a podobně.. Nebo můžu hodit eval na celý porgram? :D

Nahoru Odpovědět
24.10.2013 10:58
Neaktivní uživatelský účet
Avatar
Odpovídá na Theodor Johnson
Libor Šimo (libcosenior):24.10.2013 11:25

Sorry, veď mi aj bolo divné, že to nepracuje správne.

Nahoru Odpovědět
24.10.2013 11:25
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jakub Lásko[Saarix]:24.10.2013 17:15

Hm tak boužel tuto soutěž vzdávám... :( Nemůžu nějak najít rešení co je praktické a proto jsem narazil u podmínky, takže snad příště. Přeju všem hodně štěstí.

Nahoru Odpovědět
24.10.2013 17:15
Časem je vše možné.
Avatar
Libor Šimo (libcosenior):24.10.2013 19:26

Priznávam porážku. :@

Editováno 24.10.2013 19:27
Nahoru Odpovědět
24.10.2013 19:26
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Zdeněk Pavlátka:24.10.2013 20:14

Doufám, že to stihnu dokončit včas. O víkendu budu pryč a dnes a zítra už nemám moc času. Snažím se to vytvořit tak, abych to mohl v budoucnu použít.

Nahoru Odpovědět
24.10.2013 20:14
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Jakub Lásko[Saarix]:25.10.2013 12:03

Zdálo se to lehké, ale až tak lehké to zase není. :(

Nahoru Odpovědět
25.10.2013 12:03
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Michael Olšavský:25.10.2013 12:49

Pokud se na to nejde opravdu nízkoúrovňově, tak to poměrně lehké je. Stačí se nad tím zamyslet. Zkoušel jsem to jen tak s jednodušším parserem a bylo to hnedka. Kdyžtak napiš. Klidně poradím.

 
Nahoru Odpovědět
25.10.2013 12:49
Avatar
Odpovídá na Michael Olšavský
Jakub Lásko[Saarix]:25.10.2013 13:39

Já sem to dělal asi složitější než to je potřeba, ale počkám si co vytvoří ostatní a zkusím si to dodělat. Mám to prakticky hotové, ale podmínka mě tam nejde a chtělo by to celkově zjednodušit.

Nahoru Odpovědět
25.10.2013 13:39
Časem je vše možné.
Avatar
Odpovídá na Michael Olšavský
Jakub Lásko[Saarix]:25.10.2013 13:40

Přece není všem soutěžím konec, tak nevadí když se jedna nepovede :-)

Nahoru Odpovědět
25.10.2013 13:40
Časem je vše možné.
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:25.10.2013 16:38

Tady je můj výtvor. V tomto případě jsem se řídil heslem "Proč to dělat jednoduše, když to jde udělat složitě" :D Nicméně faktoriál to vypočítá, tak se v tom prozatím už nebudu hrabat :D http://leteckaposta.cz/815124883

Editováno 25.10.2013 16:39
Nahoru Odpovědět
25.10.2013 16:38
Neaktivní uživatelský účet
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Jan Vargovský:25.10.2013 16:54

Je tam vůbec něco, co není static ? :D

 
Nahoru Odpovědět
25.10.2013 16:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 116.