OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 15:09

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 159 ]  Přejít na stránku 1, 2, 3, 4, 5 ... 11  Další
Autor Zpráva
 Předmět příspěvku: Programování v C
PříspěvekNapsal: 22.10.2015, 05:59 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Vlákno pro všechny céčkaře.

Zatím jsem jen zkompiloval Faraonův kód pod emulací Amigy a upravil kód na stisk klávesy, tak aby jsem si v klidu mohl přečíst výstup. Z nějakýho zatím pro mne nepochopitelného důvodu měl kompilátor problém s tím, když jsem getchar dával mezi definice proměnných. :lol: No nic pokračuji jindy (to jsem si ale máknul :lol:)


Přílohy:
faraonuvKod.jpg
faraonuvKod.jpg [ 118.27 KiB | Zobrazeno 16223 krát ]

_________________
Amiga - PMD 85
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 08:39 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Myslis nieco taketo ?
Kód:
int c = getchar();
char a[]=...
Standartne cecko ocakava najprv deklaracie premennych a az potom kod. Ale moderne kompilatory nerobia problem ani vtedy ked su deklaracie roztrusene po kode. Mozno ze tebou pouzity kompiler ma nejake nastavenie ktorym sa to da povolit.

Btw. preco si nenapisal rovno char *a="DIDAKTIK\0"; ? :?:


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 09:59 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Je to Faraonův kód. Ten kód napsal v tomhle vláknu:
viewtopic.php?f=85&t=3196&start=60#p35768
Já jsem v C napočátku. Jen se když bude čas to pokusím rozebrat. Co se týče vlákna, kde ho napsal je každopádně v rámci myšlenky zjišťování toho co se programem napíše nečitelnější původní zápis.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 10:08 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
A já bych kompileru nepovoloval to, aby byl ohleduplnější. To že jsou deklarace u sebe je naprosto v pořádku. To byl jen jeden z mým prvních nástřelů v rámci C. Alespoň je z programu jasný, s kolika základníma proměnnými se dělá v rámci možné optimalizace kódu. Alespoň já jsem se vždy snažil program udělat na co nejméně proměnných ale ne na úkor nějaké výrazné nepřehlednosti samotného kódu a věřil, že je to tak napsáno lépe.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 11:31 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 25.05.2014, 12:29
Příspěvky: 1671
Bydliště: Praha
Has thanked: 318 times
Been thanked: 372 times
Odpověď z vlákna - viewtopic.php?f=85&t=3196&start=75 ;-)
Lisiak4 píše:
rEVERzi a znásilňování je u Tebe programování?

A tobě ten kód od faraona přijde košér ? Jde jen o to zapsat úlohu složitěji/méně čitelně.
Takových úloh jsem viděl vícero, kdy se testuje co ještě překladač pobere ;-)

Já tedy žádný "kodér" nejsem, to jen pro jistotu.
Céčko používám pokud možno čitelně jak to jen jde...už hlavně proto že nepíšu komentáře a
někdy to po sobě číst musím ;-)

_________________
Atari 65XE, 600XL, 400, 800, 800XL/XE, 130XE, 1200XL, XEGS
Commodore C64, C64C, C128, Plus/4
Amiga A600, A1200+Blizzard 060/50
ZX Spectrum, +2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 12:15 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
No operacemi pomocí bitového posunu by se mělo získat na někdy tolik potřebné rychlosti zpracování samého programu. Pokud C používáš na test HW, tak tam je rychlost asi ne tak podstatná, ale pokud chceš v rámci C tahat z HW maximum, musíš použít někdy i ne zrovna nejčitelnější způsob. Samozřejmě čitelnost po rychlosti je hned na 2. místě v rámci psaní kódu, který pojede na HW co nejrychleji/bude zabírat v paměti co nejméně místa.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 12:34 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 25.05.2014, 12:29
Příspěvky: 1671
Bydliště: Praha
Has thanked: 318 times
Been thanked: 372 times
Tak zase až tak úplnej elév nejsem ;-)
Píšu v práci pro jednočipy takový pseudo céčkoassembler, s bitovými operacemi dost často.

Já měl spíše namysli např. "i=!I" ;-)
Ale pravda, někde četl že i K&R na překladači dělali tak dlouho než se jim nějaká prapodivná
konstrukce podařila přeložit.

_________________
Atari 65XE, 600XL, 400, 800, 800XL/XE, 130XE, 1200XL, XEGS
Commodore C64, C64C, C128, Plus/4
Amiga A600, A1200+Blizzard 060/50
ZX Spectrum, +2


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 12:49 
Offline
Radil

Registrován: 08.10.2013, 18:00
Příspěvky: 296
Has thanked: 12 times
Been thanked: 228 times
Lisiak4 píše:
No operacemi pomocí bitového posunu by se mělo získat na někdy tolik potřebné rychlosti zpracování samého programu. Pokud C používáš na test HW, tak tam je rychlost asi ne tak podstatná, ale pokud chceš v rámci C tahat z HW maximum, musíš použít někdy i ne zrovna nejčitelnější způsob. Samozřejmě čitelnost po rychlosti je hned na 2. místě v rámci psaní kódu, který pojede na HW co nejrychleji/bude zabírat v paměti co nejméně místa.
To ovšem není případ tebou výše uvedeného kódu, tam jde opravdu o zmatení nepřítele, jak píže rEVERz, psát !7 místo 0 fakt nic neurychlí, jen zmate a ta tautologie na konci je už úplně zbytečný masakr, který maximálně vychytává případné chyby kompilátoru.
Když se to přepíše "lidsky" takto:
Kód:
   do {
      for (i=0;i<=I;i++) if (a[A]&(1<<i)) a[I-i]^=' ';
      printf("%s\n",a);
   }   while (++a[A]!=~0);

tak to musí pochopit i začínající student.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 12:50 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
smazáno Lisiakem4

_________________
Amiga - PMD 85


Naposledy upravil Lisiak4 dne 22.10.2015, 12:53, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 12:52 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
rEVERz píše:
Tak zase až tak úplnej elév nejsem ;-)
Píšu v práci pro jednočipy takový pseudo céčkoassembler, s bitovými operacemi dost často.

Já měl spíše namysli např. "i=!I" ;-)
Ale pravda, někde četl že i K&R na překladači dělali tak dlouho než se jim nějaká prapodivná
konstrukce podařila přeložit.

Jó z mé strany těžko u všeho hodnotit, co splňuje účel a co ne. V rámci základní logiky Pythonu bych neměl problém, ale s C se teprve seznamuji.

elév - kde Ty na ty termíny chodíš? :lol:

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 18:26 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Kód:
char a[10] = {68,73,68,65,75,84,73,75,0,0};

Tak tohle by měla být inicializace jednorozměrného pole. Je to standardní zápis. Jen jsem přidal určení počtu prvků, co je v poli. Napoprvé jsem tam dal ze zvyku číslo 9, jak jsem zvyklý s prací u indexace (jsem já ale elév). Při chybě v kompilaci dal hned desítku a již to je OK. Ale jo, nesnižování čísla v určování počtu prvků v poli má svou logiku. Pokračovat budu jindy.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 19:03 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
nobomi píše:
psát !7 místo 0 fakt nic neurychlí

Ani nezpomalí, tohle jsou konstanty a ty vypočítá preprocesor ještě před samotným překladem. Teda aspoň by měl.

Ta hrůzostrašnost v tom while() vznikla jako rozšíření původního (++a[A]!=A*~-(I<<1)) s konstantami 7 a 9, což dalo 63 opakování. Jenže to bylo stavěné na slovo se šesti znaky, zatímco DIDAKTIK jich má osm, a tam je na změnu všech potřeba 255 opakování. Konstanty se změnily, potřebný počet opakování se změnil, co s tím?
No moc jsem se s tím nesral, prostě jsem to co se tam vypočítalo pomocí ! vynuloval, doplňkem ~ přepnul na jedničky, a protože jako počítadlo slouží a[A], tedy ta druhá nula na konci řetězce, což je typ char, porovná se jeden bajt s nejnižším bajtem toho výsledku, který je zrovna nastavený na 255. Stejně tak jsem tam mohl vrazit -1, udělalo by to (doufám) totéž.

Ten kód jsem tam postnul jako malou provokaci, ale rozhodně ne jako vzor "správného" programovacího stylu, to spíš právě naopak. Tohle je přesně ukázka toho jak se programovat NEMÁ :lol:
Jenže to je právě to co na Céčku miluji, dovolí člověku absolutně cokoliv, ale s tím že za to také má absolutní odpovědnost. Větší volnost už je jenom v assembleru, ale nepřenositelně, vždycky jenom pro jeden určitý procesor. Zato Céčko se dá zkompilovat prakticky na čemkoliv, když se člověk drží normy... Takže ANSI C nebo C90 je prostě jistota, zatímco novinky ve stylu for (int i=0;i<10;++i) těžko trávím.

P.S. Ještě jeden příklad: main(){main();}

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 19:28 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2278
Bydliště: Brno
Has thanked: 842 times
Been thanked: 302 times
Já se jen procvičuji a učím. Zatím jsem si vždy v programu dělal vlastní logiku. Horší je to s přístupem třeba k Amiga HW pomocí C, tam již musím více okoukávat, upravovat a snad to nějak zvládnu, pokud se budu programování věnovat i nadále. Jak se prolouskám přes základy C, možná se pokusím prolouskat přes základy assembleru v rámci Amigy, zatím mne to láká. Dokončím v C řídící struktury a možná zkusím assembler a možná taky ne a možná seknu s programováním, ale to bych opravdu nerad.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 20:18 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 times
faraon píše:
Takže ANSI C nebo C90 je prostě jistota, zatímco novinky ve stylu for (int i=0;i<10;++i) těžko trávím.

Me to prave prijde jako lepsi reseni nez s tvarit ze ta promena je "globalni" a pouzit ji nekolikrat na ruzne veci. Kdyz se kouknes co s tim prekladac kolikrat provede, predela treba uplne konstanty start a stop a necha jen jejich rozdil. Z pohledu Cecka se muzes snazit o nejakou optimalizaci poctu promenych a mit z toho dobry pocit, ale kdyz se na to podivas jak bych to asi napsal v assembleru tak ti to muze prijit zbytecne protoze to bude v registru. Spustu veci za tebe muze a udela ten prekladac at to nemusis psat sice v C, ale jako prepis assembleru. While misto For atd. Muzes se pak vic venovat treba ktery test udelat jako prvni, protoze je nejvetsi sance ze odseknes nejake vykonani kodu, vystrcit predpocitane veci ze smycky, pristupovat do poli po radcich a ne sloupcich a jine blbosti.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Programování v C
PříspěvekNapsal: 22.10.2015, 22:34 
Offline
Radil

Registrován: 27.09.2014, 23:56
Příspěvky: 446
Has thanked: 436 times
Been thanked: 230 times
C-čko se narodilo pro UNIX, tak snad nebudu příliš off-topic když uvedu následující:

Filosofie Unixu podle Eric S. Raymonda:

Pravidlo modularity: Pište jednoduché části, které budou spojeny bezchybným rozhraním.
Pravidlo srozumitelnosti: Srozumitelnost je lepší než šikovnost.
Pravidlo kompozice: Navrhujte programy tak, aby mohly být napojeny na jiné programy.
Pravidlo oddělování: Oddělujte postupy od mechanismů; oddělujte rozhraní od nástrojů.
Pravidlo jednoduchosti: Programujte jednoduše; složitě jen tam, kde je to nezbytné.
Pravidlo úspornosti: Pište rozsáhlé programy jen je-li zřejmé, že to jiným způsobem nejde.
Pravidlo přehlednosti: Programujte přehledně, aby byly audity kódu a odstraňování chyb jednodušší.
Pravidlo robustnosti: Robustnost je potomek přehlednosti a jednoduchosti.
Pravidlo reprezentace: Převeďte znalosti do kódu, aby mohl být program hloupý a robustní.
Pravidlo nejméně překvapivého: Při návrhu rozhraní vždy dělejte tu nejméně překvapivou věc.
Pravidlo ticha: Nemá-li program co nového říct, neměl by říkat nic.
Pravidlo opravy: Musíte-li selhat, selžete hlasitě a co nejdříve.
Pravidlo úspornosti: Programátorův čas je drahý, šetřte ho použitím strojového času.
Pravidlo rozmnožování: Vyhněte se ručnímu psaní kódu; kdykoliv to jde, pište programy, které píšou další programy.
Pravidlo optimalizace: Vytvořte správně fungující program, než ho začnete optimalizovat.
Pravidlo pestrosti: Nevěřte pouze v jedno správné řešení.
Pravidlo rozšiřitelnosti: Plánujte do budoucnosti, protože ta přijde dříve, než si myslíte.

_________________
ZX Spectrum DELTA, D80, Melodik, XY4150, Aritma 0512
PGP: A6EA 1F93 EF6B D8D1 35AD B6D7 1E79 73E5 1B28 17F9


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 159 ]  Přejít na stránku 1, 2, 3, 4, 5 ... 11  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat 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 přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz