OldComp.cz

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


Právě je 27.04.2024, 10:27

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 100 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  Další
Autor Zpráva
PříspěvekNapsal: 12.05.2020, 23:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
Průšvih v C je zapomenutý maličký nenápadný středník za else, strašně blbě se pak hledá proč se program chová divně: if (ok) a = 5; else; ab = 10;
Nebo je veselé zapomenout uvést středník za deklarací třídy, překladač pak vyhazuje nelogické chyby o několik souborů dál.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 12.05.2020, 23:58 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 790
Bydliště: Šlapanice
Has thanked: 132 times
Been thanked: 99 times
Dík za vysvětlení, jak se ale na to koukám tak FORTRAN 77 je přehlednější. To že ten první IF končí proste tím že není středník je postě bomba aneb pokut není odsazení tak je to zrale na přehlédnutí. Ve FORTRANU 10 000 řádek kódu je klidně jen takový drobný podprogram, takže takové prasárny typu že IF skončí tím, že někde chybí jeden pošetilí znak si fakt nemohli dovolit. Už se v té zvrácené logice PACKALu začínám pomalu orientovat. Procedura je ve své podstatě podprogram a to co volá tu proceduru, aneb hlavní program je na konci … toto mohli vymyslet jen akademici s teoretiky a to ještě pěkně sjetí. Takže můj názor na PACKAL se nemění aneb středníkové peklo s logikou postavenou na hlavu, takže už zase vím, proč bytostně nesnáším, PACKAL. Ještě co je to DO na konci definice cyklu.

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 00:34 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1120
Has thanked: 100 times
Been thanked: 161 times
tomascz píše:
Éh, technická - BEGIN+END (resp. složené závorky v C/C++) označuje začátek+konec sekvence příkazů - výdobytek strukturovaných jazyků, mezi něž ZX Basic bohužel nepatří.
Promin, neznam presnou terminologii. Nemam vzdelani v oboru informatiky. Predpokladam ale ze jsem si rozumeli, ze to BEGIN .. END udela z te sekvence prikazu jakoby jeden prikaz:
Kód:
if (podminka) then neco;
Kód:
if (podminka) begin ... end;
a proto se pise ten strednik na konci a proto se nepise za begin.



tomascz píše:
BEGIN-END nemá pragmatickej dopad, tj. nepřeloží se do žádných konkrétních instrukcí. Je to jenom informace pro kompilátor, že "tahle sekvence příkazů se má provést společně" (typicky pokud je podmínka v IFu splněna, provede se jedna sekvence, naopak pokud není splněna, provede se jiná "alternativní" sekvence).
Jo. A v C to jeste udela viditelnost... lokalnost? promnenych. Ty co deklarujes uvnitr bloku nebudou videt za tim blokem. V podstate rikas kompilatoru ze je muze uvolnit a zdroje pouzit jinde. V pascalu nevim... tam mu to musis rici hned na zacatku, je na to pedant, kdyz to ma byt vyukovy jazyk tak ti haze klacky pod nohy kdyz chces prasit. Mozna pres ty lokalni podfunkce.
Mam pocit ze nejake prastare C taky chtelo ty promnene vzdy na zacatku, protoze to usnadnuje praci prekladaci.



tomascz píše:
Středníky - netušil jsem, že to může někomu činit dlouhodobě nepohodu... Nevíš kdy psát středník v Práskalu a Céčku? A jakto že víš, kdy máš psát "Enter" v Basicu?!
Ja si nestezoval, jen reagoval na :
EC1045.01 píše:
Tak dobře vyjádřím se k PACKALu, který .... (to sprosté slovo si doplňte sami) to vymyslel aneb středníkové peklo aneb kdy se píše a kdy ne jsem dodnes nepochopil a odmítám to pochopit. Na co tam je BEGIN ... kde končí cykly a podmínky .... že by středníkové peklo? Údajně byl PACKAL vyvinut pro výuku programování, aneb krásný paskvil, který bytostně nesnáším.


Tak jsem se sam kouknul po cca 20 letech na pascal a uz me delal problem neco napsat, vcetne tech stredniku. :D Nebo ze typ funkce se pise dozadu, ze se neco oddeluje dvojteckou. Dokonce jsem udelal i chybu v prirazeni, protoze jsem to kopiroval z C a zapomnel dopsat dvojtecky. Uz to z rukavu nesypu, ale stale bez problemu prectu.
Kód:
#include <stdio.h>

int checksign(int x)
{
   if (x < 0)
      return -1;
   else
      if (x == 0)
         return 0;
      else
         return 1;
}

int main()
{
   int x = 0;
   printf( "checksign(%i) = %i\n", x, checksign(x));

   return 0;
}
Kód:
Program Pascal;

function checksign(x: integer):integer;
begin
   if (x < 0) then
      checksign := -1
   else
      if (x = 0) then
         checksign := 0
      else
         checksign := 1;
end;

var
   x: integer;
begin
   x := 100;
   writeln( 'checksign(', x,') = ', checksign(x));
end.
Tady mozna byl ten zakopany pes, ze za if se strednik nepise, protoze se to bere cely jako jeden celek. Mam pocit ze to stejne asi nicemu nepomuze u vnorenych podminek, ze si na to musi clovek zvyknout jak to cist.



EC1045.01 píše:
U toho FORTRANu aspoň půjde snaze dohledat pro které FI a DO to navěstí platí.

FORTRAN taky nezná tu kravinu se středníky aneb řádek příkaz konci „CR, LF“ nebo pozicí 72.
Tak popsat si } muzes taky kdyz nejsi linej a mas pocit ze by se to uz hodilo. "} //a" jako "NEXT a".

Jinak se necitim silnej obhajovat stredniky. Slo by vyhodit za THEN blok BEGIN END a mit misto toho jen ELSE ale asi by to bylo dost nekonzistentni a jen by to delalo zmatky. Diky stredniku muzes mit nejake prikazy i na vic radku. Nejake bloky "retezecu" treba a zarovnat si kod jak se ti libi. Blbej strednik ti udela deklaraci funkce a prekladac uz vi jak ma ulozit parametry, kolik jich je a co to vraci a samotnou funkci mit v uplne jinem souboru. Pomaha to urcite i prekladaci jak rozsekat zdrojak na lexemy. A mam fakt pocit ze u nejakych nejednoznacnych veci to jednoznacne rozlisi co chceme. Ale nevybavim si nic. Ted teda myslim C, ktery hodne zjednodusuje zapis.




Aaaaaa... koukam ze je to tady uz dost zaspamovany, ale kdyz uz jsem si dal tu praci... :)


PS: Jinak stredniky urcite nejsou jedina cesta kdyz se kouknes na python.
PSS: U te funkce checksign vim ze to jde napsat lepe a prehledneji kdyz mame return.

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


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 00:54 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1980
Bydliště: Most, Praha
Has thanked: 874 times
Been thanked: 699 times
_dworkin píše:
...Mam pocit ze nejake prastare C taky chtelo ty promnene vzdy na zacatku, protoze to usnadnuje praci prekladaci....
Je to požadavek v základní definici ANSI C (v C++ už ne), protože funkce si potřebuje v zásobníku vyhradit prostor pro lokální proměnné, dřív než začne něco vůbec dělat. Většina nových překladačů to už umí obejít, ale dá se překládat ve striktním módu kompatibilním s originálním ANSI C. Jen chybová hlášení jsou v takovém případě dost zmatená a moc nenapovídají že proměnná není na začátku.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 01:14 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3675
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 798 times
Panda38 píše:
_dworkin píše:
...Mam pocit ze nejake prastare C taky chtelo ty promnene vzdy na zacatku, protoze to usnadnuje praci prekladaci....
Je to požadavek v základní definici ANSI C (v C++ už ne), protože funkce si potřebuje v zásobníku vyhradit prostor pro lokální proměnné, dřív než začne něco vůbec dělat. Většina nových překladačů to už umí obejít, ale dá se překládat ve striktním módu kompatibilním s originálním ANSI C. Jen chybová hlášení jsou v takovém případě dost zmatená a moc nenapovídají že proměnná není na začátku.
Moderne prekladace cecka si vsetky premenne deklarovane kdekolvek vo funkcii pekne "pozbieraju", a pri spusteni funkcie sa vytvori na zasobniku jedno velke spolocne miesto pre vsetky premenne, deklarovane kdekolvek, v ktoromkolvek bloku v tej funkcii. Takze z hladiska vysledneho kodu je uplne jedno ci su uplne vsetky premenne deklarovane hned na zaciatku funkcie, alebo na zaciatkoch jednotlivych blokov kde sa pouzivaju (ako predpisuje Ansi C), alebo kdekolvek v kode kde ich prave treba (C++).


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 05:29 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2788
Has thanked: 230 times
Been thanked: 608 times
EC1045.01 píše:
Procedura je ve své podstatě podprogram a to co volá tu proceduru, aneb hlavní program je na konci …

Pascal má jednoprůchodový překladač, je to malý jazyk navržený pro malé počítače. Vezmi si pravítko, jeď po programu shora dolů a dělej si poznámky, vypisuj si názvy proměnných a podprogramů. To co je ještě pod pravítkem překladač nezná, takže v každém okamžiku můžeš použít jenom to, co už jsi přečetl.

PROGRAM JE SEZNAM DEKLARACÍ. *

  • Takže první deklarace je název programu/procedury/funkce, a původně tam byly ještě soubory se kterými program má pracovat.
  • Potom se deklarují konstanty, například nějaké hraniční meze, k tomu ještě nepotřebuješ vědět nic dalšího.
  • Pak se deklarují typy proměnných platných v téhle úrovni, a u polí už potřebuješ nějaké ty meze vědět, proto jsou zapsané dřív, jinak by je překladač neznal. Pokud je nemáš v poznámkách, hodí překladač error.
  • Dál přijdou na řadu deklarace podprogramů, ty uvidí konstanty a proměnné z téhle a vyšších úrovní, takže ty byly zapsané před nimi, jinak by je překladač neznal. Ale protože byly napsané dřív, máš je v poznámkách a nebude error.
  • A nakonec přijde na řadu deklarace příkazu, tedy přesněji toho složeného příkazu mezi begin a end, a ten bude používat konstanty, proměnné a podprogramy, které byly zapsané už před ním. Takže jsou ve tvých poznámkách, pokud se tam vyskytne něco co tam nemáš, je error.

Tím překlad skončil, není tu žádný objektový kód a linker, který ho musí zase celý rozžvýkat a poskládat, ale máš už přímo hotový spustitelný kód.

Totéř průběžně provádíš i pro každý ten podprogram, akorát si rekurzivně vezmeš na každou z nich další papír. Lokální proměnné se stejnými názvy v nich "překryjí" ty stejnojmenné na předchozích úrovních. Pokud v podprogramu použiješ nějakou která tam není deklarovaná, tak se použije stejnojmenná z předchozí úrovně, ta tak funguje podobně jako globální. Ty z hlavního programu jsou tak úplně globální pro všechny. A protože každý podprogram má úplně stejnou strukturu a možnosti jako hlavní program, může mít svoje vlastní lokální podprogramy, pro které platí totéž co pro proměnné - ty se stejnými názvy překryjí ty z předchozích úrovní, pokud zavoláš nějaký co tu lokálně nemáš, použije se nejbližší z předchozích úrovní. Prostě rekurze použitá i na úrovni strukturování kódu.

* LISPaři tohle samozřejmě vědí už od roku 1958 ;-)

_________________
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říspěvekNapsal: 13.05.2020, 07:03 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3829
Has thanked: 280 times
Been thanked: 457 times
Co všechno se člověk nedozví při nahánění algoritmu pro čárovou grafiku na XY 4150 :-). Ale za mě :like:, třeba ten popis jak vlastně v kostce funguje Pascal je velmi šikovný. I ty ostatní programovací jazyky, znalostí není nikdy dost.


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 08:55 
Offline
Radil

Registrován: 31.01.2018, 01:33
Příspěvky: 483
Bydliště: Praha
Has thanked: 179 times
Been thanked: 497 times
Czech Human píše:
Co všechno se člověk nedozví při nahánění algoritmu pro čárovou grafiku na XY 4150 :-).

pořád se nabízím s tou přednáškou o válcování plechu...


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 09:27 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
BASIC pro Sharp MZ-800


Přílohy:
2020-05-13_09-24-56.png
2020-05-13_09-24-56.png [ 28.42 KiB | Zobrazeno 6868 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 09:31 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3675
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 798 times
faraon píše:
EC1045.01 píše:
To co je ještě pod pravítkem překladač nezná, takže v každém okamžiku můžeš použít jenom to, co už jsi přečetl.
Az tak jednoduche to nebude, lebo napriklad mozes urobit dopredne GOTO, ktore skace na este neznamy kod (velkost skoku je pri prvom kompilacnom prechode este neznama). Takze bud viac prechodov, alebo nejaky jednoduchy linker, ktory po kompilacii podoplna dopredne definicie.


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 09:50 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 903
Has thanked: 51 times
Been thanked: 230 times
Busy píše:
Az tak jednoduche to nebude, lebo napriklad mozes urobit dopredne GOTO, ktore skace na este neznamy kod (velkost skoku je pri prvom kompilacnom prechode este neznama). Takze bud viac prechodov, alebo nejaky jednoduchy linker, ktory po kompilacii podoplna dopredne definicie.

To už nie je Pascal podľa Wirtha. GOTO a EXIT boli pridané pre lenivých programátorov.
M1


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 10:06 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 903
Has thanked: 51 times
Been thanked: 230 times
EC1045.01 píše:
A ty středníky, BEGIN první výjimka z pravidla a kolik těch výjimek z pravidla tam ještě je.

Ak si dobre pamätám, ešte nie je bodkočiarka/středník pred ELSE. A ďalšia záludnosť je END v príkaze CASE.
Pascal má veľmi prísne pravidlá, preto bol asi dobrý na výuku, ale náročnejší na písanie.
Aj deti učíme, že treba cestu prechádzať po prechode, ale keď sa ponáhľame, rezneme to kde sa dá...


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 11:45 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1566
Has thanked: 487 times
Been thanked: 642 times
_dworkin píše:
Promin, neznam presnou terminologii. (...) Ja si nestezoval, jen reagoval na...
Jasný, já jsem tě pochopil :-) Nereagoval jsem a priori na tvůj příspěvek, jenom jsem se "svýmami slovami" snažil EC1045.01 vyjasnit nějaký nepřesnosti v tvým výkladu. Mám sice technický vzdělání, ale taky nevím jak konstrukt BEGIN-END popsat - tak jsem si vymyslel termín "sekvence příkazů," protože u "bloku příkazů" by nebylo vysloveně daný, že se mají provést jeden po druhým, což by EC1045.01 mohlo teoreticky zmást; v některých opět ad-absurdum paralelních jazycích se totiž všechny příkazy provádí paralelně, pokud není explicitně dáno, že se mají provést sekvenčně (jméno jazyka už jsem úspěšně po cca 15 letech zapomněl).

_dworkin píše:
A v C to jeste udela viditelnost... lokalnost? promnenych.
Jak to překládají do češtiny nevím, ale v anglické terminlogii je to "scope" (rozsah, oblast...) a proměnné jeho prostřednictvím získávají "lifetime" (životnost). A je to přesně jak píšeš - pokud chod programu opouští "scope" (funkce končí, do-while cyklus končí apod.), zavolají se destruktory objektů v něm obsažených a zásobník se "zkrátí" (opět vlastnímami slovami...) o tyto zrušené objekty. Už to i pojmenovali - Resource acquisition is initialization (RAII).

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 13:01 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3675
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 798 times
tomascz píše:
v některých opět ad-absurdum paralelních jazycích se totiž všechny příkazy provádí paralelně, pokud není explicitně dáno, že se mají provést sekvenčně
My sme v skole mali priamo paralelny pascal - vsetky prikazy, ktore boli v ramci bloku COBEGIN...COEND sa vykonavali paralelne naraz. A mali sme v tom programovat rozne ulohy na paralelne spracovanie dat.


Nahoru
 Profil  
 
PříspěvekNapsal: 13.05.2020, 15:23 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1566
Has thanked: 487 times
Been thanked: 642 times
To není ono - když jsi napsal COBEGIN-COEND, tak už jsi explicitně (výslovně) určil, co se má provést paralelně. Já myslím jazyky, které automaticky (implicitně, nevýslovně, samy od sebe...) všechno dělají paralelně.

Do Wikipedie jsem zkusmo zadal termín "implicit parallelism" a vypadlo přesně co si pamatuju - akorát názvy jazyků mi pořád nic neříkají - Axum, NESL, SaC, SISAL... :shrug:
Citace:
A programmer that writes implicitly parallel code does not need to worry about task division or process communication. (stručně: programátor nemusí znát metody jak psát paralelní kód a nezažije šťastné chvíle kolem jeho synchronizace)
Many of the constructs necessary to support (implicit parallelism) also add simplicity or clarity even in the absence of actual parallelism. (program se stává přehlednějším ať už principielně jde nebo nejde vykonat paralelně)

Bottom implicitního paralelizmu: Languages with implicit parallelism reduce the control that the programmer has over the parallel execution of the program, resulting sometimes in less-than-optimal parallel efficiency. (pouze programátor ví co vlastně dělá a na jednoduchý paralelizmus dokáže napsat jednoduchou synchronizaci, na rozdíl od kompilátoru s "prefabrikovanými" postupy). (...) A larger issue is that every program has some parallel and some serial logic. Binary I/O, for example, requires support for such serial operations as Write() and Seek(). If implicit parallelism is desired, this creates a new requirement for constructs and keywords to support code that cannot be threaded or distributed. (pro operace které z principu nejdou paralelizovat, jako je třeba zápis do souboru, je nutno mít připravena speciální slovíčka kterými se implicitní paralelizmus potlačí).


Je, oživily se mi vzpomínky... :-)

Obrázek

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


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ů: 100 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7  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 21 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