Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu. Zároveň využij akce až 80 % zdarma při nákupu kreditů. Více informací:
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

Aktivity
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka: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
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Ondřej Hanák
Tvůrce
Avatar
Odpovídá na David Čápka
Ondřej Hanák: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 Čápka
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 Čápka
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 Ondřej Hanák
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 Čápka
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
Ondřej Hanák
Tvůrce
Avatar
Odpovídá na Ondrca
Ondřej Hanák: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 Čápka
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
Jenkings
Tvůrce
Avatar
Jenkings: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
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Ondřej Hanák
Tvůrce
Avatar
Odpovídá na David Čápka
Ondřej Hanák: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 Ondřej Hanák
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 Ondřej Hanák
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
Ondřej Hanák
Tvůrce
Avatar
Odpovídá na Old Account
Ondřej Hanák: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 Ondřej Hanák
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
Jenkings
Tvůrce
Avatar
Jenkings:22.10.2013 20:12

Tak zatím to vypadá nějak takhle

Nahoru Odpovědět
22.10.2013 20:12
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Jenkings
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 Čápka
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
Mo8ilε 15 Ѐλđ
Avatar
Jenkings
Tvůrce
Avatar
Jenkings: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
Největší časovou náročnost má výpočet časové náročnosti..
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
Mo8ilε 15 Ѐλđ
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
Mo8ilε 15 Ѐλđ
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 Čápka
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
Avatar
Odpovídá na Jan Vargovský
Neaktivní uživatel:25.10.2013 17:11

viz. "Proč to dělat jednoduše, když to jde udělat složitě" :D

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

Tak něco takového bych fakt nestvořil... funguje to pěkně.

Nahoru Odpovědět
25.10.2013 17:39
Časem je vše možné.
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:25.10.2013 18:07

Do teď jsem nepřišel na to, jak v tom ten kód spustit.

Nahoru Odpovědět
25.10.2013 18:07
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka:25.10.2013 18:09

Mezikód už jsem spustil.

Nahoru Odpovědět
25.10.2013 18:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Neaktivní uživatel
Michael Olšavský:25.10.2013 19:17

Musím uznat, že to funguje fakt skvěle, ale podle mě to má naprosto neefektivní kód. Nechápu tvůj způsob myšlení :-D, zřejmě jsi na mě až moc geniální, protože já se v tom ne a ne vyznat :-D Je to opravdu síla. Samá statika, podmínky, metody. Za kód bych ti nedal ani bod, ale za ten zbytek teda poklona. :-)

 
Nahoru Odpovědět
25.10.2013 19:17
Avatar
Odpovídá na Michael Olšavský
Neaktivní uživatel:25.10.2013 19:26

Je to jednoduché :D Máš tam 3 statické třídy, které to celé řídí:
Scanner: akorát čte jednotlivé tokeny ze zdrojového programu.
Parser: kontroluje syntaxi a když to jde, tak i sémantiku
Interpret: Provádí instrukce, které získal od parseru, zbytek sémantické analýzy.
Ale uznávám, že je ten kód docela přehnaný.

Nahoru Odpovědět
25.10.2013 19:26
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Libor Šimo (libcosenior):25.10.2013 19:39

Dúfal som, že sa z tvojho kódu niečo naučím, ale nemám šancu to ani pochopiť.
Možno budem múdrejší o pár rokov...

Nahoru Odpovědět
25.10.2013 19:39
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:25.10.2013 20:05

Tak snad může být ten SkyDrive, jinak tady to je http://sdrv.ms/16AzKgG :)

Nahoru Odpovědět
25.10.2013 20:05
Mo8ilε 15 Ѐλđ
Avatar
Odpovídá na David Čápka
Michael Olšavský:25.10.2013 20:10

Je to co udělal Theodor Johnson povolené(udělal pouze parser a pak použil vestavěnou třídu)? Protože pokud ano, tak to naprosto znehodnotí smysl soutěže ...

 
Nahoru Odpovědět
25.10.2013 20:10
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Michael Olšavský
Theodor Johnson:25.10.2013 20:11

no tak mě neukřižuj, že jsem na to šel jednoduše :)

Nahoru Odpovědět
25.10.2013 20:11
Mo8ilε 15 Ѐλđ
Avatar
Odpovídá na Theodor Johnson
Michael Olšavský:25.10.2013 20:12

Né v pohodě :-) Je to náhodou chytré. ;-) Jen jestli je to povolené.

 
Nahoru Odpovědět
25.10.2013 20:12
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Michael Olšavský
Theodor Johnson:25.10.2013 20:14

Jak jsem to tak četl tak zakázaný ne, využít vestavěný kompiler bylo první co mě napadlo když jsem se nedočetl jeho zákazu :)

Nahoru Odpovědět
25.10.2013 20:14
Mo8ilε 15 Ѐλđ
Avatar
Odpovídá na Theodor Johnson
Libor Šimo (libcosenior):25.10.2013 20:19

Nemal by si upraviť zdrojový súbor.txt aby vypočítal faktoriál?

Nahoru Odpovědět
25.10.2013 20:19
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:25.10.2013 20:22

Já to mám podle vzoru, někde tam mám chybu?

Nahoru Odpovědět
25.10.2013 20:22
Mo8ilε 15 Ѐλđ
Avatar
Libor Šimo (libcosenior):25.10.2013 20:25

Blok treba upraviť:

blok:

pokud (a <= 10)      // pokud == if
{
vysledek *= a;
a++;
jdi blok;                   // jdi == goto
}
Nahoru Odpovědět
25.10.2013 20:25
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):25.10.2013 20:29

takto to má spočítať:

Nahoru Odpovědět
25.10.2013 20:29
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:25.10.2013 20:29

Díky, hned to přepíšu, nevěděl jsem to, faktoriál běžně nepočítám

Nahoru Odpovědět
25.10.2013 20:29
Mo8ilε 15 Ѐλđ
Avatar
Odpovídá na Michael Olšavský
Jakub Lásko[Saarix]:25.10.2013 20:33

Je pravda že v kódu od Posix je opravdu těžké se vyznat. :-) Snad něco pochytím od loapmaila.

Nahoru Odpovědět
25.10.2013 20:33
Časem je vše možné.
Avatar
Odpovídá na Jakub Lásko[Saarix]
Libor Šimo (libcosenior):25.10.2013 22:20

Je to také jednoduché(zlo­žité), až sa to sdracovi nebude páčiť. :`

Nahoru Odpovědět
25.10.2013 22:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
vitamin
Člen
Avatar
vitamin:26.10.2013 2:03

Mam to viac menej hotove, takto vyzera moj jazyk:
Syntax je podobna javascriptu:
(script musy byt v utf-8 alebo ascii)

/*
 * Vypocet faktorialu pomocou cyklu
 */
function factorialA(var x){
        var temp = 1;

        if(true);
        while(x > 1){
                temp *= x;
                --x;
        }
        return temp;
}

/*
 * Vypocet faktorialu pomocou rekruzie
 */
function factorialB(x) {
        if(x <= 1) return 1;

        var temp;

        temp = (x * factorialB(x - 1));
        return temp;
}

//Start
function main(){
        var x = readInt();

        //Vypocet faktorialov:
        print("factorialA(", x, ") = ", factorialA(x));
        print("factorialB(", x, ") = ", factorialB(x));

        /*
         * Práca s poľom:
         */
        var array = [];
        var i = 7;
        while(--i)array ~= factorialA(i);

        print('array: ', array);

        /*
         * Práca so štruktúrov:
         */
         var struct = {
                arr: array,
                length: array.length,
                text: "string",
                lambda: function(x, y){return x + y;},
                real: 3.14,
                int: 23

         };

         print("struktura: ", struct);

         struct.lambda = "'string'";
         struct.arr = null;

         print("\n\n [struktura po jednotlivych prvkoch: ]");
         print("arr: ", struct.arr);
         print("length: ", struct.length);
         print("text: ", struct.text);
         print("lambda: ", struct.lambda);
         print("real: ", struct.real);
         print("int: ", struct.int);

}
 
Nahoru Odpovědět
26.10.2013 2:03
Avatar
Odpovídá na vitamin
Jakub Lásko[Saarix]:26.10.2013 7:20

Tak s tímhle asi nepochodíš :-) sdraco v úvodu psal že tam něco jako funkce či metoda factorial() nemůže být.

Nahoru Odpovědět
26.10.2013 7:20
Časem je vše možné.
Avatar
vitamin
Člen
Avatar
Odpovídá na Jakub Lásko[Saarix]
vitamin:26.10.2013 7:58

Tu su zdrojaky (zabudol som ich pripjit :) ):
http://uloz.to/…/wtflang-zip
Je to napisane v jazyku D ( dmd 2.-63.2).

 
Nahoru Odpovědět
26.10.2013 7:58
Avatar
Odpovídá na Jakub Lásko[Saarix]
Zdeněk Pavlátka:26.10.2013 9:00

Pokud jí v tom jazyce nadefinuje, neměla by vadit. Dokonce by to měla být výhoda, pokud umí jazyk i tvorbu funkcí.

Nahoru Odpovědět
26.10.2013 9:00
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Zdeněk Pavlátka:26.10.2013 9:24

Nakonec se nezúčastním. Nefunguje mi funkce strtok (vrací prázdné řetězce), na které jsem to měl založené a nic nového už nestihnu.

Nahoru Odpovědět
26.10.2013 9:24
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na vitamin
Jakub Lásko[Saarix]:26.10.2013 9:40

Ale jinak to vypadá pěkně :-)

Nahoru Odpovědět
26.10.2013 9:40
Časem je vše možné.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.10.2013 9:44

Tiež som to skúšal v céčku. Funkcia strtok() funguje správne, ale ako vstup potrebuješ reťazec.

#include <stdio.h>
#include <string.h>

int main ()
{
     char str[] ="- This, a sample string.";
     char * pch;
     printf ("Splitting string \"%s\" into tokens:\n",str);
     pch = strtok (str," ,.-");
     while (pch != NULL)
     {
        printf ("%s\n",pch);
        pch = strtok (NULL, " ,.-");
     }
     return 0;
}
Nahoru Odpovědět
26.10.2013 9:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.10.2013 11:15

Takto sa jednotlivé reťazce vracajú:

#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *fr;
    int c, i, j;
    char str[200];
    char * pch;
    char * pole[50];

    /* blok nacitania suboru */
    if ((fr = fopen("objekt.txt", "r")) == NULL) {
        printf("Subor sa nepodarilo otvorit.\n");
        return;         /* ukoncenie programu */
    }
    i = 0;
    while ((c = getc(fr)) != EOF) {
        str[i] = c;
        i++;
    }
    str[i] = '\0'; // povinne ukoncenie retazca
    fclose(fr);
    /* koniec bloku nacitania suboru */

    /* blok rozdelenia na jednotlive retazce */
    pch = strtok (str," ");
    i = 0;
    while (pch != NULL) {
        pole[i] = pch;
        pch = strtok (NULL, " ");
        i++;
    }
    /* koniec bloku rozdelenia na jednotlive retazce */

     for (j = 0; j < i; j++)
        printf("%s\n", pole[j]);
    return 0;
}
Nahoru Odpovědět
26.10.2013 11:15
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:26.10.2013 12:56

Já to psal v C++. Při prvním volání mi funkce strtok vrátila první "slovo", ale při dalších voláních vrací prázdné řetězce. Parametry mám určitě správně.

Nahoru Odpovědět
26.10.2013 12:56
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):26.10.2013 13:01

Vyskúšaj si ten kód vyššie, uvidíš, že pracuje správne a môžeš ho použiť aj v c++, poprípade si ho uprav do c++.

Nahoru Odpovědět
26.10.2013 13:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:26.10.2013 13:08

Teď mě napadlo, že bych mohl mít chybu v načítání ze souboru.

Nahoru Odpovědět
26.10.2013 13:08
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Neaktivní uživatel:26.10.2013 13:47

to je sranda.. chces delat interpret, ale zaseknes se uz na takove veci :D :D

Nahoru Odpovědět
26.10.2013 13:47
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:26.10.2013 14:02

Vypadá to super, ale doplň to prosím o spustitelnou verzi.

Nahoru Odpovědět
26.10.2013 14:02
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka
Kit:26.10.2013 14:21

To by mě zajímalo, co bys dělal s ELF binárkou...

Nahoru Odpovědět
26.10.2013 14:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vitamin
Člen
Avatar
Odpovídá na David Čápka
vitamin:26.10.2013 14:32

Kompilator na D je tu: http://dlang.org/download.html
Ak mas Visual Studio tak je tam aj plugin ktory integruje podporu D pre VS.
Ak chcete kompilovat cez prikazovy riadok tak staci dat do parametrov dmd zoznam vsetkych suborov, samotny kompilator to rovno aj zlinkuje a vyslednu binarku staci spustit.

Ten moj program ma mensi bug (ako main funkcia sa pouzie posledna funkcia v globalnom namespace, opravenu verziu poslem neskor).

Pre ostatnych:
Preco vobec pouzivate funkcie ako strtok, pripadne regexy? Nie je jednoduhsie si spravyt stavovy automat ktory bude generovat tokeny?

 
Nahoru Odpovědět
26.10.2013 14:32
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:26.10.2013 14:36

Nemůžu si kvůli každému výtvoru stahovat jazyk, proto je podmínkou, aby se program odevzdal i v exe podobě.

Nahoru Odpovědět
26.10.2013 14:36
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Odpovídá na vitamin
Neaktivní uživatel:26.10.2013 14:44

regex je trosku pohodlnejsi

Nahoru Odpovědět
26.10.2013 14:44
Neaktivní uživatelský účet
Avatar
vitamin
Člen
Avatar
Odpovídá na David Čápka
vitamin:26.10.2013 14:45

Oprášim virtualku winu a dam ti sem .exe :)

 
Nahoru Odpovědět
26.10.2013 14:45
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka
Kit:26.10.2013 14:53

Částečně máš pravdu, ale v čem chceš dnes vyvíjet systémové aplikace v OOP? O ničem jiném nevím.

Nahoru Odpovědět
26.10.2013 14:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:26.10.2013 15:00

Download https://www.dropbox.com/…jenkings.zip
Ukázka : http://jenkings.eu/…/prog-jazyk/
Vzorový kód : http://jenkings.eu/…zyk/vzor.txt

Nejspíš tu zítra nebudu, takže to sem dám hned. Možná že to ještě do zítra trochu vylepším když budu stíhat

Nahoru Odpovědět
26.10.2013 15:00
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Kit
Tvůrce
Avatar
Odpovídá na vitamin
Kit:26.10.2013 15:01

Pošli mu ELF, však on si jistě poradí :)

Nahoru Odpovědět
26.10.2013 15:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka
Kit:26.10.2013 15:12

Filozofickou otázkou je, co si představuješ pod pojmem "spustitelná podoba". Z určitého pohledu je to nejen ELF, ale i program napsaný v PHP či Pythonu. Z jiného úhlu pohledu to není ani EXE, protože ten přímo spustitelný není. Všechny jsou závislé na konfiguraci operačního systému a jeho virtuálních prostředí.

Nahoru Odpovědět
26.10.2013 15:12
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
vitamin
Člen
Avatar
vitamin:26.10.2013 15:30

http://leteckaposta.cz/205542297

Obsahuje opravene chyby a binarku pre linux aj windows.
Cesta k scriptu sa da predat programu cez parameter, ak nie je zadana cesta tak sa otvori subor "script.txt"

 
Nahoru Odpovědět
26.10.2013 15:30
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:26.10.2013 15:34

Chyba se hledá dost špatně, když se ti při ladění ukazuje, že nefunguje úplně jiná část. A teoreticky by můj kód měl fungovat.

Nahoru Odpovědět
26.10.2013 15:34
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:27.10.2013 9:28

Už jsem našel chybu, při volání funkce strtok jsem nezadal jako oddělovač konec řádku a ona pak vracela prázdné řetězce na konci každého řádku (soubor jsem načítal po řádkách).

Nahoru Odpovědět
27.10.2013 9:28
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:27.10.2013 17:52

Tak jsem to stihl. Odkaz by se měl za nějakou chvíli zaktivnit. Dropbox mi píše 25 minut. Za chvíli přidám i PDF s popisem svého jazyka.

https://dl.dropboxusercontent.com/…ni_jazyk.zip

Nahoru Odpovědět
27.10.2013 17:52
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Nahoru Odpovědět
27.10.2013 18:28
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:27.10.2013 18:36

Koukám, že jsem ten faktoriál výše napsal blbě, za to se omlouvám :)

Nahoru Odpovědět
27.10.2013 18:36
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:27.10.2013 19:32

Výtvory jsou opravdu skvělé. Každý si zde určitě něco najde a budu moc rád, když je publikujete. Něco je opravdu jednoduché, něco je naopak velmi blízko reálným programovacím jazykům. Rozhodl jsem se opět udělit více placek.

Posix (100 bodů) - Tohle je zajímavé, komentáře, větev else, cykly, ten manuál se fakt povedl, skoro bych si ho zarámoval :P Koukám, že vyrábíš binární mezikód, skvělé. Zdroják je teda fakt hustý, asi by chvíli trvalo, než bych to celé pochopil. Hlavní je, že používáš tokenizer a serializuješ do binárky. Je tam nějak moc statiky, ale to asi tak nevadí. Jsem zvědavý, jestli tohle někdo překoná.
Silvinious (100 bodů) - Ví se o mně, že jsem objektový člověk a tenhle zdroják se mi opravdu líbí. Vypadá to jako návrhový vzor interpreter, každopádně v tomhle se člověk vyzná, třídy jsou jednoduché, sice jich je více, ale to řeší jmenné prostory.
vitamin (100 bodů) - Další zajímavý kousek, datové typy a definice funkcí, dokonce struktury a lambda. Jazyk D jsem ještě neviděl, ale naštěstí je poměrně čitelný. Obávám se, že jsi zde opravdu vytvořil plnohodnotný jazyk, ani jsem nečekal, že tohle někdo udělá :)
loapmail (80 bodů) - Šel jsi na to zajímavě, aneb proč to dělat složitě, když to jde jednoduše. Projekt ale asi nesplňuje zadání, jelikož nejde o interpreter, ale překladač. Nicméně dobrý, používáš tam zajímavé věci.
nuz (80 bodů) - Jazyk obsahuje některé zajímavé funkce a přípravu pro datové typy. Co se mi příliš nezdá jsou ty goto skoky uvnitř hlavní smyčky, možná by to chtělo trochu refaktorovat, aby bylo možné syntaxi jazyka dále rozšiřovat.
jenkings (75 bodů) - Krásně jednoduché, o výkonu se nedá moc hovořit, ale je to krátké a funguje to dobře. Podobně bych to asi dělal, jen objektově.

Gratuluji vítězům, své výtvory publikujte a adresu pošlete do zpráv x. Všem děkuji za účast, jsem hrozně rád, že se v soutěžích objevují i věci, které převyšují mé dosavadní znalosti :)

Nahoru Odpovědět
27.10.2013 19:32
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:27.10.2013 19:39

Tak gratuluji vítězům ;)

Jak tak koukám tak ostatní jsou o na úplně jiné úrovni než já ;)

Nahoru Odpovědět
27.10.2013 19:39
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:27.10.2013 19:39

Nebyl čas :D Měl jsem v plánu něco mnohem lepšího (základ svého plánovaného jazyka) ale čtení ze souboru jsem zprovoznil včera odpoledne. Musel jsem čtení přepsat z C++ do C. A čekal jsem, že mi zkritizuješ tu dlouhou funkci interpret :D
A samozřejmě gratuluji všem vítězům. 8-)

Editováno 27.10.2013 19:42
Nahoru Odpovědět
27.10.2013 19:39
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
David Čápka:27.10.2013 19:42

Né že bych si jí nevšiml, ale nemám dost zkušeností s tím, jak jinak se to dá napsat. Nicméně minimálně bys z toho mohl volat další podprogramy :)

Editováno 27.10.2013 19:42
Nahoru Odpovědět
27.10.2013 19:42
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:27.10.2013 19:44

Chtěl jsem udělat funkce alespoň pro ten vstup a výstup, ale i takhle jsem to stihl tak tak.

Nahoru Odpovědět
27.10.2013 19:44
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Ondřej Hanák
Tvůrce
Avatar
Ondřej Hanák:27.10.2013 20:06

Gratuliji :)

 
Nahoru Odpovědět
27.10.2013 20:06
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:28.10.2013 1:01

Gratuluji vítězům. btw. chtěl jsem to udělat jako recesi, že místo několika tříd to jde napsat na pár řádků, ale jaksi mi nedošlo že v mém případě používám kompiler namísto interpretu :-)

Nahoru Odpovědět
28.10.2013 1:01
Mo8ilε 15 Ѐλđ
Avatar
Odpovídá na Zdeněk Pavlátka
Neaktivní uživatel:28.10.2013 2:05

nefunguje ti tam správně if :(

Nahoru Odpovědět
28.10.2013 2:05
Neaktivní uživatelský účet
Avatar
Nahoru Odpovědět
28.10.2013 8:40
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Neaktivní uživatel:28.10.2013 10:04

treba

if A
  ...
   if B
     ...
   endif
   X
endif

kdyz neni pravda A, tak se stejne provede X

Editováno 28.10.2013 10:04
Nahoru Odpovědět
28.10.2013 10:04
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Zdeněk Pavlátka:28.10.2013 10:19

Na vnořování nebyl čas. Pokud podmínka neplatí, přesune se běh programu na nejbližší end_if.

Nahoru Odpovědět
28.10.2013 10:19
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
Odpovídá na Zdeněk Pavlátka
vitamin:28.10.2013 11:05

Preto sa kod najprv prevadza do stromu kde sa taketo veci riesia lahko.

 
Nahoru Odpovědět
28.10.2013 11:05
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:28.10.2013 11:21

Stromům já vůbec nerozumím.

Nahoru Odpovědět
28.10.2013 11:21
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na vitamin
Zdeněk Pavlátka:28.10.2013 12:00

Z teorie něco málo umim. Jen to nedovedu přepsat do programu.

Nahoru Odpovědět
28.10.2013 12:00
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Neaktivní uživatel:28.10.2013 13:34

No ono se to nepřevádní přímo do nějakého stromu. Taky proto se to jmenuje abstraktní strom

Nahoru Odpovědět
28.10.2013 13:34
Neaktivní uživatelský účet
Avatar
vitamin
Člen
Avatar
Odpovídá na Neaktivní uživatel
vitamin:28.10.2013 14:29

Ako si to myslel? Kód sa prevádza z tokenov primo do stromovej štruktúry.

 
Nahoru Odpovědět
28.10.2013 14:29
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:28.10.2013 15:09

Jmenuje se to derivační strom, který se skutečně vytváří.

Nahoru Odpovědět
28.10.2013 15:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Kit:16.11.2013 18:07

Našel jsem interpretr jazyka Lisp napsaný v C++ na 90 řádcích:
http://howtowriteaprogram.blogspot.cz/…es-of-c.html

Nahoru Odpovědět
16.11.2013 18:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 116 zpráv z 116.