Mnoho čecháčků má s programováním problém v tom, že syntax je anglicky. Proto jsem se rozhodl přeložit BASIC a C do češtiny. Pro Slováky by byl vhodný ČOBOL, ale na mém slovenštinu bude poznat, že to dělal Čech, takže to přenechám Slovákům samotným.
ZVUKSI
Začátečníkův VšeÚčelový Kód Symbolických Instrukcí
V BASICu jsem neprogramoval ani nepamatuju, a taky se mi nechce obcházet určité elegantnosti v návrhu Pythonu, takže ZVUKSI je víc pseudokód než Č. Podle úrovně symbolického myšlení je možné místo BUDIZ, ROVNO, NEROVNO, JE, NENI, VETSI, MENSI, NEVETSI, NEMENSI apod. používat odpovídající znaménka, ale to by COBOLovitost ZVUKSI tolik nevynikla. Taky by se měl ZVUKSI dát psát na české klávesnici, kde některá znaménka cílová skupina nemusí najít, nebo AltGr nefunguje.
Vyhrazený slovníček podle QBASIC 1.1 a VB.NET (todo):
AddHandler AddressOf Alias And
AndAlso As Boolean ByRef
Byte ByVal Call Case
Catch CBool CByte CChar
CDate CDbl CDec Char
CInt Class Constraint Class Statement CLng
CObj Const Continue CSByte
CShort CSng CStr CType
CUInt CULng CUShort Date
Decimal Declare Default Delegate
Dim DirectCast Do Double
Each Else ElseIf End Statement
End <keyword> EndIf Enum Erase
Error Event Exit False
Finally For (in For…Next) For Each…Next Friend
Function Get GetType GetXMLNamespace
Global GoSub GoTo Handles
If If() Implements Implements Statement
Imports (.NET Namespace and Type) Imports (XML Namespace) In In (Generic Modifier)
Inherits Integer Interface Is
IsNot Let Lib Like
Long Loop Me Mod
Module Module Statement MustInherit MustOverride
MyBase MyClass Namespace Narrowing
New Constraint New Operator Next Next (in Resume)
Not Nothing NotInheritable NotOverridable
Object Of On Operator
Option Optional Or OrElse
Out (Generic Modifier) Overloads Overridable Overrides
ParamArray Partial Private Property
Protected Public RaiseEvent ReadOnly
ReDim REM RemoveHandler Resume
Return SByte Select Set
Shadows Shared Short Single
Static Step Stop String
Structure Constraint Structure Statement Sub SyncLock
Then Throw To True
Try TryCast TypeOf…Is UInteger
ULong UShort Using Variant
Wend When While Widening
With WithEvents WriteOnly Xor
#Const #Else #ElseIf #End
#If = & &=
* *= / /=
\ \= ^ ^=
+ += - -=
>> Operator >>= Operator << <<=
Euklidův algoritmus v ZVUKSI:
----------------------------------------
VYPIS ""
VYPIS "NSD a Bezout 2 celých čísel."
VYPIS ""
ROZMER r JAKO CELE()
VSTUP "a := ", r(0)
VSTUP "b := ", r(1)
ROZMER k BUDIZ 1 JAKO CELE
ROZMER q JAKO CELE()
POZN Jednotková matice
ROZMER x BUDIZ (1, 0) JAKO CELE(2)
ZATIMCO r(-1) NEROVNO 0 DELEJ
q(k) BUDIZ r(k-1) DEL r(k) ' q je o 1 pozadu
r(k) BUDIZ r(k-1) ZB r(k) ' názorné modulo
x(k) BUDIZ x(k-1)-q(-1)*x(k)
y(k) BUDIZ y(k-1)-q(-1)*y(k)
k BUDIZ k + 1
SMYCKA
VYPIS ""
VYPIS "NSD(", a, ", ", b, ") = ", r(k), " = ", x(k), " * ", r(0), " + ", y(k), " * ", r(1)
VYPIS ""
JESTLI r(k) ROVNO 1 TAK
VYPIS "Čísla jsou nesoudělná."
VYPIS ""
KONEC JESTLI
VYPIS "Koncový stav: " ' mezivýpočty
VYPIS ""
VYPIS "q = ", q
VYPIS "r = ", r
VYPIS "x = ", x
VYPIS "y = ", y
VYPIS "k = ", k
VYPIS ""
KONEC
----------------------------------------
Č/Č++
Pro tuhle modifikaci jsem kdysi dal dohromady hlavičku plnou #defineů. Mám ji na starém netbooku. Tahle implementace by mohla doopravdy fungovat. Nevýhodou je, že původní vyhrazená slova jsou stále vyhrazená. Také názvy funkcí standardních knihoven by měly být přeloženy, ale nechce se mi. Také nejde psát na české klávesnici.
Je to také příležitost pro konzistentnější typový systém, který snese rozšíření. Používá to HolyC, Zig, Kotlin, Rust a kdeco ještě.
C jako celé, N jako nezáporné, Z jako znak, P jako plovoucí. Číslo za ním označuje počet bitů. K plovoucím lze přidat ještě R jako rozšířený rozsah za cenu nižší přesnosti. Zpravidla se jedná o 2x delší typ s useknutou mantissou, aby končila v půlce. Takové typy se objevují ve strojovém učení. Nejkratší je furt napsat int/cele nebo float/plov, když nechceme řešit, jak velký typ je potřeba. Pythonu stačí 4: bool, nafukovací int, nafukovací float, str.
C8 N8 N0 Z8
C16 N16 N1 Z16
C32 N32 P32 Z32
C64 N64 P64
C128 N128 P80
signed char unsigned char void char
short unsigned short bool char16_t
int unsigned float char32_t/wchar_t
long unsigned long double
long long unsigned long long long double
Poslední dobou se používají různé druhy plovoucích čísel, což se hodí do typového systému zanést:
P##p - přesné - P(##/2) s mantissou prodlouženou o ##/2 bitů
P## - standardně podle IEEE
P##r - rozšířený rozsah - P(##*2) s mantissou useknutou o ##/2 bitů
IEEE nestandardizuje 8-bitový plovoucí formát, takže P16p není z čeho odvodit, a z 8-bitových jde jenom P8r. Často se uvádí P8 jako 1-4-3, což je jen 1 vyměněný bit od P8r. Pak jsou tu ještě posit čísla, která se určují počtem bitů a rozsahem, ale v těch se nevyznám.
Vyhrazený slovníček (* pouze v C++, ** přibylo v C++11 až C++20):
alignas** zarovnat
alignof** zarovnani
asm* symbolickeprikazy symprik
atomic_cancel** nedelitelnezrus nedelzrus
atomic_commit** nedelitelneposli nedelposli
auto promenna prom funkce fun
bool* priznak
break prerus
case pripad
catch* chytni zachyt chyt
char znak
char8_t** znak8
char16_t** znak16
char32_t** znak32
class* trida
concept** pojem
const stala stale staly st
consteval** stalevyhod stvyh
constexpr** stalyvyraz stvyr
continue pokracuj
decltype** prohlasdruh prohldruh
default vychozi
delete* smaz
do delej
double realny realna realne
else jinak
enum vycet
explicit* narovinu
export* vyvez
extern vnejsi
false* lez
float plovouci plov
for pro
friend* soudruh pritel
goto jdina
if jestli kdyz
inline samodosad vradku
int cely cela cele
long dlouhy dlouha dlouhe
mutable* menitelny menitelna menitelne
namespace* prostor
new* novy
noexcept** bezvyjimky
nullptr** nic
operator* operace
private* soukromy soukroma soukrome
protected* chraneny chranena chranene
public* verejny verejna verejne
register registr
return vrat
short kratky kratka kratke
signed znamenkovy znam
sizeof velikost
static stojaty
static_assert** stojatevynuceni stojvyn stvyn
struct struktura
switch prepni
template* sablona
this* toto tohle tento sebe se
thread_local** vlaknuvlastni
throw* vyhod
true* pravda
try* zkus
typedef definujtyp deftyp
typeid* indetifikacetypu identtypu idtypu
typename* jmenotypu jmtypu
union jednota
unsigned neznamenkovy nezaporny nezap kladny
using* pouzivaje pouzij
virtual* virtualni mysleny myslena myslene
void prazdno procedura proc
volatile nestaly
wchar_t sirokyznak
while zatimco behem
override** prerizeni pretizeni
final** konecny konecna konecne
audit** proverka
axiom** dogma
#if jestli kdyz
#elif jinakjestli jinakkdyz
#else jinak
#endif konecjestli koneckdyz
#ifdef jestlistan kdyzstan
#ifndef jestlinestan kdyznestan
#define stanov
#undef zrus
#include zahrn
#line radek
#error chyba
#pragma ucin prekl prekladac
#defined stanoveno
#__has_include** mazahrnuto
#__has_cpp_attribute** mavlastnost
_Pragma** prekladac
Euklidův algoritmus v Č:
----------------------------------------
#include "cz.h"
zahrn <stdio.h>
zahrn <stdlib.h>
stanov PUV_KAP 16
// Co to je za jazyk, když si musím psát vlastní vypisování pole?
procedura vypispole(cele* pole, cele velikost){
jestli(velikost > 0 && pole){
printf("[%d", pole[0]);
pro(cele i = 1; i < velikost; ++i){
printf(", %d", pole[i]);
}
puts("]");
}
}
cele hlavni(){
cele a, b, k = 1, kap = PUV_KAP; cele *q, *x, *y;
x = malloc(PUV_KAP);
y = malloc(PUV_KAP);
x[0] = 1; x[1] = 0; // jednotková matice
y[0] = 0; y[1] = 1;
printf("a := "); scanf("%d", &a);
printf("b := "); scanf("%d", &b);
zatimco(r[k] != 0){
q[k] = r[k-1]/r[k]; // q je o 1 pozadu
r[k] = r[k-1]%r[k]; // názorné modulo
x[k] = x[k-1]-q[k]*x[k];
y[k] = y[k-1]-q[k]*y[k];
++k;
jestli(k >= kap){
kap *= 2;
y = realloc(y, kap);
x = realloc(x, kap);
}
}
printf("\nNSD(%d, %d) = %d = %d * %d + %d * %d\n\n", a, b, r[k], x[k], r[0], y[k], r[1]);
jestli(k == 1){
puts("Čísla jsou nesoudělná.");
}
puts("Koncový stav:"); // mezivýpočty
printf("q = "); vypispole(q, k);
printf("r = %d\n", r);
printf("x = "); vypispole(x, k);
printf("y = "); vypispole(y, k);
printf("k = %d\n", k);
free(x); free(y);
vrat 0;
}
----------------------------------------
Povolené Unicode znaky v identifikátorech podle C18:
00A8, 00AA, 00AD, 00AF, 00B2–00B5, 00B7–00BA, 00BC–00BE, 00C0–00D6, 00D8–00F6, 00F8–00FF, 0100–167F, 1681–180D, 180F–1FFF, 200B–200D, 202A–202E, 203F–2040, 2054, 2060–206F, 2070–218F, 2460–24FF, 2776–2793, 2C00–2DFF, 2E80–2FFF, 3004–3007, 3021–302F, 3031–303F, 3040–D7FF, F900–FD3D, FD40–FDCF, FDF0–FE44, FE47–FFFD, 10000–TamToStejněNikohoNezajímajá
Takže nepovolené znaky jsou: ¡¢£¤¥¦§©«¬®°±¶»¿×÷ ‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‣․‥…‧ ‰‱′″‴‵‶‷‸‹›※‼‽‾⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞ [šipky, rovnítka, APL a OCR] [pseudografika, dingbats] [další šipky, braillovo písmo, další rovnítka, alchymistické symboly] [další interpunkce] 、。〃〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟〠〰 [náhradní páry, soukromé užití] ﴾﴿ [neznaky FDD0~FDEF] ﹅﹆ [neznaky FFFE a FFFF]
Další znaky nepovolené na začátku: 0300–036F, 1DC0–1DFF, 20D0–20FF, FE20–FE2F
To jsou jenom diaktitická kombinační znaménka a kombinační ligatury
ČOBOL (TODO)
No tak můžu to zkusit, ale těch slov je hodně, takže se to protáhne.
Vyhrazený slovníček podle IBM na z/OS:
ACCEPT
ACCESS
ADD
ADDRESS
ADVANCING
AFTER
ALL
ALPHABET
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
ALPHANUMERIC
ALPHANUMERIC-EDITED
ALSO
ALTER
ALTERNATE
AND
ANY
APPLY
ARE
AREA
AREAS
ASCENDING
ASSIGN
AT
AUTHOR
BASIS
BEFORE
BEGINNING
BINARY
BLANK
BLOCK
BOTTOM
BY
CALL
CANCEL
CBL
CD
CF
CH
CHARACTER
CHARACTERS
CLASS
CLASS-ID
CLOCK-UNITS
CLOSE
COBOL
CODE
CODE-SET
COLLATING
COLUMN
COM-REG
COMMA
COMMON
COMMUNICATION
COMP
COMP-1
COMP-2
COMP-3
COMP-4
COMP-5
COMPUTATIONAL
COMPUTATIONAL-1
COMPUTATIONAL-2
COMPUTATIONAL-3
COMPUTATIONAL-4
COMPUTATIONAL-5
COMPUTE
CONFIGURATION
CONTAINS
CONTENT
CONTINUE
CONTROL
CONTROLS
CONVERTING
COPY
CORR
CORRESPONDING
COUNT
CURRENCY
DATA
DATE-COMPILED
DATE-WRITTEN
DAY
DAY-OF-WEEK
DBCS
DE
DEBUG-CONTENTS
DEBUG-ITEM
DEBUG-LINE
DEBUG-NAME
DEBUG-SUB-1
DEBUG-SUB-2
DEBUG-SUB-3
DEBUGGING
DECIMAL-POINT
DECLARATIVES
DELETE
DELIMITED
DELIMITER
DEPENDING
DESCENDING
DESTINATION
DETAIL
DISPLAY
DISPLAY-1
DIVIDE
DIVISION
DOWN
DUPLICATES
DYNAMIC
EGCS
EGI
EJECT
ELSE
EMI
ENABLE
END
END-ADD
END-CALL
END-COMPUTE
END-DELETE
END-DIVIDE
END-EVALUATE
END-IF
END-INVOKE
END-MULTIPLY
END-OF-PAGE
END-PERFORM
END-READ
END-RECEIVE
END-RETURN
END-REWRITE
END-SEARCH
END-START
END-STRING
END-SUBTRACT
END-UNSTRING
END-WRITE
ENDING
ENTER
ENTRY
ENVIRONMENT
EOP
EQUAL
ERROR
ESI
EVALUATE
EVERY
EXCEPTION
EXIT
EXTEND
EXTERNAL
FALSE
FD
FILE
FILE-CONTROL
FILLER
FINAL
FIRST
FOOTING
FOR
FROM
FUNCTION
GENERATE
GIVING
GLOBAL
GO
GOBACK
GREATER
GROUP
HEADING
HIGH-VALUE
HIGH-VALUES
I-O
I-O-CONTROL
ID
IDENTIFICATION
IF
IN
INDEX
INDEXED
INDICATE
INHERITS
INITIAL
INITIALIZE
INITIATE
INPUT
INPUT-OUTPUT
INSERT
INSPECT
INSTALLATION
INTO
INVALID
INVOKE
IS
JUST
JUSTIFIED
KANJI
KEY
LABEL
LAST
LEADING
LEFT
LENGTH
LESS
LIMIT
LIMITS
LINAGE
LINAGE-COUNTER
LINE
LINE-COUNTER
LINES
LINKAGE
LOCAL-STORAGE
LOCK
LOW-VALUE
LOW-VALUES
MEMORY
MERGE
MESSAGE
METACLASS
METHOD
METHOD-ID
MODE
MODULES
MORE-LABELS
MOVE
MULTIPLE
MULTIPLY
NATIVE
NATIVE_BINARY
NEGATIVE
NEXT
NO
NOT
NULL
NULLS
NUMBER
NUMERIC
NUMERIC-EDITED
OBJECT
OBJECT-COMPUTER
OCCURS
OF
OFF
OMITTED
ON
OPEN
OPTIONAL
OR
ORDER
ORGANIZATION
OTHER
OUTPUT
OVERFLOW
OVERRIDE
PACKED-DECIMAL
PADDING
PAGE
PAGE-COUNTER
PASSWORD
PERFORM
PF
PH
PIC
PICTURE
PLUS
POINTER
POSITION
POSITIVE
PRINTING
PROCEDURE
PROCEDURE-POINTER
PROCEDURES
PROCEED
PROCESSING
PROGRAM
PROGRAM-ID
PURGE
QUEUE
QUOTE
QUOTES
RANDOM
RD
READ
READY
RECEIVE
RECORD
RECORDING
RECORDS
RECURSIVE
REDEFINES
REEL
REFERENCE
REFERENCES
RELATIVE
RELEASE
RELOAD
REMAINDER
REMOVAL
RENAMES
REPLACE
REPLACING
REPORT
REPORTING
REPORTS
REPOSITORY
RERUN
RESERVE
RESET
RETURN
RETURN-CODE
RETURNING
REVERSED
REWIND
REWRITE
RF
RH
RIGHT
ROUNDED
RUN
SAME
SD
SEARCH
SECTION
SECURITY
SEGMENT
SEGMENT-LIMIT
SELECT
SELF
SEND
SENTENCE
SEPARATE
SEQUENCE
SEQUENTIAL
SERVICE
SET
SHIFT-IN
SHIFT-OUT
SIGN
SIZE
SKIP1
SKIP2
SKIP3
SORT
SORT-CONTROL
SORT-CORE-SIZE
SORT-FILE-SIZE
SORT-MERGE
SORT-MESSAGE
SORT-MODE-SIZE
SORT-RETURN
SOURCE
SOURCE-COMPUTER
SPACE
SPACES
SPECIAL-NAMES
STANDARD
STANDARD-1
STANDARD-2
START
STATUS
STOP
STRING
SUB-QUEUE-1
SUB-QUEUE-2
SUB-QUEUE-3
SUBTRACT
SUM
SUPER
SUPPRESS
SYMBOLIC
SYNC
SYNCHRONIZED
TABLE
TALLY
TALLYING
TAPE
TERMINAL
TERMINATE
TEST
TEXT
THAN
THEN
THROUGH
THRU
TIME
TIMES
TITLE
TO
TOP
TRACE
TRAILING
TRUE
TYPE
UNIT
UNSTRING
UNTIL
UP
UPON
USAGE
USE
USING
VALUE
VALUES
VARYING
WHEN
WHEN-COMPILED
WITH
WORDS
WORKING-STORAGE
WRITE
WRITE-ONLY
ZERO
ZEROES
ZEROS
ZVUKSI
Začátečníkův VšeÚčelový Kód Symbolických Instrukcí
V BASICu jsem neprogramoval ani nepamatuju, a taky se mi nechce obcházet určité elegantnosti v návrhu Pythonu, takže ZVUKSI je víc pseudokód než Č. Podle úrovně symbolického myšlení je možné místo BUDIZ, ROVNO, NEROVNO, JE, NENI, VETSI, MENSI, NEVETSI, NEMENSI apod. používat odpovídající znaménka, ale to by COBOLovitost ZVUKSI tolik nevynikla. Taky by se měl ZVUKSI dát psát na české klávesnici, kde některá znaménka cílová skupina nemusí najít, nebo AltGr nefunguje.
Vyhrazený slovníček podle QBASIC 1.1 a VB.NET (todo):
DO...LOOP, END, EXIT, FOR...NEXT,
IF...THEN...ELSE, GOSUB...RETURN,
GOTO, ON...GOSUB, ON...GOTO,
SELECT CASE, STOP, SYSTEM
CONST, DATA, DIM, ERASE, OPTION BASE,
READ, REDIM, REM, RESTORE, SWAP,
TYPE...END TYPE
CALL, DECLARE, EXIT, FUNCTION, RUN,
SHELL, SHARED, STATIC, SUB
CLS, CSRLIN, INKEY$, INP, INPUT,
KEY (Assignment), LINE INPUT, LOCATE,
LPOS, LPRINT, LPRINT USING, OPEN COM,
OUT, POS, PRINT, PRINT USING, SPC,
SCREEN Function, TAB, VIEW PRINT,
WAIT, WIDTH
CIRCLE, COLOR, GET (Graphics), LINE,
PAINT, PALETTE, PCOPY, PMAP, POINT,
PRESET, PSET, PUT (Graphics),
SCREEN Statement, VIEW, WINDOW
CHDIR, KILL, MKDIR, NAME, RMDIR
CLOSE, EOF, FILEATTR, FREEFILE
GET (File I/O), INPUT, INPUT$,
LINE INPUT, LOC, LOCK, LOF, OPEN,
PUT (File I/O), SEEK Function,
SEEK Statement, UNLOCK, WRITE
CLEAR, FRE, PEEK, POKE
ASC, CHR$, HEX$, INSTR, LCASE$, LEFT$,
LEN, LSET, LTRIM$, MID$ Function, MID$
Statement, OCT$, RIGHT$, RSET, RTRIM$
SPACE$, STR$, STRING$, UCASE$, VAL
ABS, ASC, ATN, CDBL, CINT, CLNG, COS,
CSNG, CVDMBF, CVSMBF, EXP, INT, LOG,
RANDOMIZE, RND, SGN, SIN, SQR, TAN,
TIME$ Function
COM, ERDEV, ERDEV$, ERL, ERR, ERROR,
KEY (Event Trapping), ON COM, ON ERROR,
ON KEY, ON PEN, ON PLAY, ON STRIG,
ON TIMER, PEN, PLAY (Event Trapping),
RESUME, RETURN, STRIG, TIMER Function,
TIMER Statement
AddHandler AddressOf Alias And
AndAlso As Boolean ByRef
Byte ByVal Call Case
Catch CBool CByte CChar
CDate CDbl CDec Char
CInt Class Constraint Class Statement CLng
CObj Const Continue CSByte
CShort CSng CStr CType
CUInt CULng CUShort Date
Decimal Declare Default Delegate
Dim DirectCast Do Double
Each Else ElseIf End Statement
End <keyword> EndIf Enum Erase
Error Event Exit False
Finally For (in For…Next) For Each…Next Friend
Function Get GetType GetXMLNamespace
Global GoSub GoTo Handles
If If() Implements Implements Statement
Imports (.NET Namespace and Type) Imports (XML Namespace) In In (Generic Modifier)
Inherits Integer Interface Is
IsNot Let Lib Like
Long Loop Me Mod
Module Module Statement MustInherit MustOverride
MyBase MyClass Namespace Narrowing
New Constraint New Operator Next Next (in Resume)
Not Nothing NotInheritable NotOverridable
Object Of On Operator
Option Optional Or OrElse
Out (Generic Modifier) Overloads Overridable Overrides
ParamArray Partial Private Property
Protected Public RaiseEvent ReadOnly
ReDim REM RemoveHandler Resume
Return SByte Select Set
Shadows Shared Short Single
Static Step Stop String
Structure Constraint Structure Statement Sub SyncLock
Then Throw To True
Try TryCast TypeOf…Is UInteger
ULong UShort Using Variant
Wend When While Widening
With WithEvents WriteOnly Xor
#Const #Else #ElseIf #End
#If = & &=
* *= / /=
\ \= ^ ^=
+ += - -=
>> Operator >>= Operator << <<=
Euklidův algoritmus v ZVUKSI:
----------------------------------------
VYPIS ""
VYPIS "NSD a Bezout 2 celých čísel."
VYPIS ""
ROZMER r JAKO CELE()
VSTUP "a := ", r(0)
VSTUP "b := ", r(1)
ROZMER k BUDIZ 1 JAKO CELE
ROZMER q JAKO CELE()
POZN Jednotková matice
ROZMER x BUDIZ (1, 0) JAKO CELE(2)
ROZMER y BUDIZ (0, 1) JAKO CELE(2)
q(k) BUDIZ r(k-1) DEL r(k) ' q je o 1 pozadu
r(k) BUDIZ r(k-1) ZB r(k) ' názorné modulo
x(k) BUDIZ x(k-1)-q(-1)*x(k)
y(k) BUDIZ y(k-1)-q(-1)*y(k)
k BUDIZ k + 1
SMYCKA
VYPIS ""
VYPIS "NSD(", a, ", ", b, ") = ", r(k), " = ", x(k), " * ", r(0), " + ", y(k), " * ", r(1)
VYPIS ""
JESTLI r(k) ROVNO 1 TAK
VYPIS "Čísla jsou nesoudělná."
VYPIS ""
KONEC JESTLI
VYPIS "Koncový stav: " ' mezivýpočty
VYPIS ""
VYPIS "q = ", q
VYPIS "r = ", r
VYPIS "x = ", x
VYPIS "y = ", y
VYPIS "k = ", k
VYPIS ""
KONEC
----------------------------------------
Č/Č++
Pro tuhle modifikaci jsem kdysi dal dohromady hlavičku plnou #defineů. Mám ji na starém netbooku. Tahle implementace by mohla doopravdy fungovat. Nevýhodou je, že původní vyhrazená slova jsou stále vyhrazená. Také názvy funkcí standardních knihoven by měly být přeloženy, ale nechce se mi. Také nejde psát na české klávesnici.
Je to také příležitost pro konzistentnější typový systém, který snese rozšíření. Používá to HolyC, Zig, Kotlin, Rust a kdeco ještě.
C jako celé, N jako nezáporné, Z jako znak, P jako plovoucí. Číslo za ním označuje počet bitů. K plovoucím lze přidat ještě R jako rozšířený rozsah za cenu nižší přesnosti. Zpravidla se jedná o 2x delší typ s useknutou mantissou, aby končila v půlce. Takové typy se objevují ve strojovém učení. Nejkratší je furt napsat int/cele nebo float/plov, když nechceme řešit, jak velký typ je potřeba. Pythonu stačí 4: bool, nafukovací int, nafukovací float, str.
C8 N8 N0 Z8
C16 N16 N1 Z16
C32 N32 P32 Z32
C64 N64 P64
C128 N128 P80
signed char unsigned char void char
short unsigned short bool char16_t
int unsigned float char32_t/wchar_t
long unsigned long double
long long unsigned long long long double
Poslední dobou se používají různé druhy plovoucích čísel, což se hodí do typového systému zanést:
P##p - přesné - P(##/2) s mantissou prodlouženou o ##/2 bitů
P## - standardně podle IEEE
P##r - rozšířený rozsah - P(##*2) s mantissou useknutou o ##/2 bitů
IEEE nestandardizuje 8-bitový plovoucí formát, takže P16p není z čeho odvodit, a z 8-bitových jde jenom P8r. Často se uvádí P8 jako 1-4-3, což je jen 1 vyměněný bit od P8r. Pak jsou tu ještě posit čísla, která se určují počtem bitů a rozsahem, ale v těch se nevyznám.
Vyhrazený slovníček (* pouze v C++, ** přibylo v C++11 až C++20):
alignas** zarovnat
alignof** zarovnani
asm* symbolickeprikazy symprik
atomic_cancel** nedelitelnezrus nedelzrus
atomic_commit** nedelitelneposli nedelposli
auto promenna prom funkce fun
bool* priznak
break prerus
case pripad
catch* chytni zachyt chyt
char znak
char8_t** znak8
char16_t** znak16
char32_t** znak32
class* trida
concept** pojem
const stala stale staly st
consteval** stalevyhod stvyh
constexpr** stalyvyraz stvyr
continue pokracuj
decltype** prohlasdruh prohldruh
default vychozi
delete* smaz
do delej
double realny realna realne
else jinak
enum vycet
explicit* narovinu
export* vyvez
extern vnejsi
false* lez
float plovouci plov
for pro
friend* soudruh pritel
goto jdina
if jestli kdyz
inline samodosad vradku
int cely cela cele
long dlouhy dlouha dlouhe
mutable* menitelny menitelna menitelne
namespace* prostor
new* novy
noexcept** bezvyjimky
nullptr** nic
operator* operace
private* soukromy soukroma soukrome
protected* chraneny chranena chranene
public* verejny verejna verejne
register registr
return vrat
short kratky kratka kratke
signed znamenkovy znam
sizeof velikost
static stojaty
static_assert** stojatevynuceni stojvyn stvyn
struct struktura
switch prepni
template* sablona
this* toto tohle tento sebe se
thread_local** vlaknuvlastni
throw* vyhod
true* pravda
try* zkus
typedef definujtyp deftyp
typeid* indetifikacetypu identtypu idtypu
typename* jmenotypu jmtypu
union jednota
unsigned neznamenkovy nezaporny nezap kladny
using* pouzivaje pouzij
virtual* virtualni mysleny myslena myslene
void prazdno procedura proc
volatile nestaly
wchar_t sirokyznak
while zatimco behem
override** prerizeni pretizeni
final** konecny konecna konecne
audit** proverka
axiom** dogma
#if jestli kdyz
#elif jinakjestli jinakkdyz
#else jinak
#endif konecjestli koneckdyz
#ifdef jestlistan kdyzstan
#ifndef jestlinestan kdyznestan
#define stanov
#undef zrus
#include zahrn
#line radek
#error chyba
#pragma ucin prekl prekladac
#defined stanoveno
#__has_include** mazahrnuto
#__has_cpp_attribute** mavlastnost
_Pragma** prekladac
Euklidův algoritmus v Č:
----------------------------------------
#include "cz.h"
zahrn <stdio.h>
zahrn <stdlib.h>
stanov PUV_KAP 16
// Co to je za jazyk, když si musím psát vlastní vypisování pole?
procedura vypispole(cele* pole, cele velikost){
jestli(velikost > 0 && pole){
printf("[%d", pole[0]);
pro(cele i = 1; i < velikost; ++i){
printf(", %d", pole[i]);
}
puts("]");
}
}
cele hlavni(){
cele a, b, k = 1, kap = PUV_KAP; cele *q, *x, *y;
x = malloc(PUV_KAP);
y = malloc(PUV_KAP);
x[0] = 1; x[1] = 0; // jednotková matice
y[0] = 0; y[1] = 1;
printf("a := "); scanf("%d", &a);
printf("b := "); scanf("%d", &b);
zatimco(r[k] != 0){
q[k] = r[k-1]/r[k]; // q je o 1 pozadu
r[k] = r[k-1]%r[k]; // názorné modulo
x[k] = x[k-1]-q[k]*x[k];
y[k] = y[k-1]-q[k]*y[k];
++k;
jestli(k >= kap){
kap *= 2;
y = realloc(y, kap);
x = realloc(x, kap);
}
}
printf("\nNSD(%d, %d) = %d = %d * %d + %d * %d\n\n", a, b, r[k], x[k], r[0], y[k], r[1]);
jestli(k == 1){
puts("Čísla jsou nesoudělná.");
}
puts("Koncový stav:"); // mezivýpočty
printf("q = "); vypispole(q, k);
printf("r = %d\n", r);
printf("x = "); vypispole(x, k);
printf("y = "); vypispole(y, k);
printf("k = %d\n", k);
free(x); free(y);
vrat 0;
}
----------------------------------------
Povolené Unicode znaky v identifikátorech podle C18:
00A8, 00AA, 00AD, 00AF, 00B2–00B5, 00B7–00BA, 00BC–00BE, 00C0–00D6, 00D8–00F6, 00F8–00FF, 0100–167F, 1681–180D, 180F–1FFF, 200B–200D, 202A–202E, 203F–2040, 2054, 2060–206F, 2070–218F, 2460–24FF, 2776–2793, 2C00–2DFF, 2E80–2FFF, 3004–3007, 3021–302F, 3031–303F, 3040–D7FF, F900–FD3D, FD40–FDCF, FDF0–FE44, FE47–FFFD, 10000–TamToStejněNikohoNezajímajá
Takže nepovolené znaky jsou: ¡¢£¤¥¦§©«¬®°±¶»¿×÷ ‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‣․‥…‧ ‰‱′″‴‵‶‷‸‹›※‼‽‾⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞ [šipky, rovnítka, APL a OCR] [pseudografika, dingbats] [další šipky, braillovo písmo, další rovnítka, alchymistické symboly] [další interpunkce] 、。〃〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟〠〰 [náhradní páry, soukromé užití] ﴾﴿ [neznaky FDD0~FDEF] ﹅﹆ [neznaky FFFE a FFFF]
Další znaky nepovolené na začátku: 0300–036F, 1DC0–1DFF, 20D0–20FF, FE20–FE2F
To jsou jenom diaktitická kombinační znaménka a kombinační ligatury
ČOBOL (TODO)
No tak můžu to zkusit, ale těch slov je hodně, takže se to protáhne.
Vyhrazený slovníček podle IBM na z/OS:
ACCEPT
ACCESS
ADD
ADDRESS
ADVANCING
AFTER
ALL
ALPHABET
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
ALPHANUMERIC
ALPHANUMERIC-EDITED
ALSO
ALTER
ALTERNATE
AND
ANY
APPLY
ARE
AREA
AREAS
ASCENDING
ASSIGN
AT
AUTHOR
BASIS
BEFORE
BEGINNING
BINARY
BLANK
BLOCK
BOTTOM
BY
CALL
CANCEL
CBL
CD
CF
CH
CHARACTER
CHARACTERS
CLASS
CLASS-ID
CLOCK-UNITS
CLOSE
COBOL
CODE
CODE-SET
COLLATING
COLUMN
COM-REG
COMMA
COMMON
COMMUNICATION
COMP
COMP-1
COMP-2
COMP-3
COMP-4
COMP-5
COMPUTATIONAL
COMPUTATIONAL-1
COMPUTATIONAL-2
COMPUTATIONAL-3
COMPUTATIONAL-4
COMPUTATIONAL-5
COMPUTE
CONFIGURATION
CONTAINS
CONTENT
CONTINUE
CONTROL
CONTROLS
CONVERTING
COPY
CORR
CORRESPONDING
COUNT
CURRENCY
DATA
DATE-COMPILED
DATE-WRITTEN
DAY
DAY-OF-WEEK
DBCS
DE
DEBUG-CONTENTS
DEBUG-ITEM
DEBUG-LINE
DEBUG-NAME
DEBUG-SUB-1
DEBUG-SUB-2
DEBUG-SUB-3
DEBUGGING
DECIMAL-POINT
DECLARATIVES
DELETE
DELIMITED
DELIMITER
DEPENDING
DESCENDING
DESTINATION
DETAIL
DISPLAY
DISPLAY-1
DIVIDE
DIVISION
DOWN
DUPLICATES
DYNAMIC
EGCS
EGI
EJECT
ELSE
EMI
ENABLE
END
END-ADD
END-CALL
END-COMPUTE
END-DELETE
END-DIVIDE
END-EVALUATE
END-IF
END-INVOKE
END-MULTIPLY
END-OF-PAGE
END-PERFORM
END-READ
END-RECEIVE
END-RETURN
END-REWRITE
END-SEARCH
END-START
END-STRING
END-SUBTRACT
END-UNSTRING
END-WRITE
ENDING
ENTER
ENTRY
ENVIRONMENT
EOP
EQUAL
ERROR
ESI
EVALUATE
EVERY
EXCEPTION
EXIT
EXTEND
EXTERNAL
FALSE
FD
FILE
FILE-CONTROL
FILLER
FINAL
FIRST
FOOTING
FOR
FROM
FUNCTION
GENERATE
GIVING
GLOBAL
GO
GOBACK
GREATER
GROUP
HEADING
HIGH-VALUE
HIGH-VALUES
I-O
I-O-CONTROL
ID
IDENTIFICATION
IF
IN
INDEX
INDEXED
INDICATE
INHERITS
INITIAL
INITIALIZE
INITIATE
INPUT
INPUT-OUTPUT
INSERT
INSPECT
INSTALLATION
INTO
INVALID
INVOKE
IS
JUST
JUSTIFIED
KANJI
KEY
LABEL
LAST
LEADING
LEFT
LENGTH
LESS
LIMIT
LIMITS
LINAGE
LINAGE-COUNTER
LINE
LINE-COUNTER
LINES
LINKAGE
LOCAL-STORAGE
LOCK
LOW-VALUE
LOW-VALUES
MEMORY
MERGE
MESSAGE
METACLASS
METHOD
METHOD-ID
MODE
MODULES
MORE-LABELS
MOVE
MULTIPLE
MULTIPLY
NATIVE
NATIVE_BINARY
NEGATIVE
NEXT
NO
NOT
NULL
NULLS
NUMBER
NUMERIC
NUMERIC-EDITED
OBJECT
OBJECT-COMPUTER
OCCURS
OF
OFF
OMITTED
ON
OPEN
OPTIONAL
OR
ORDER
ORGANIZATION
OTHER
OUTPUT
OVERFLOW
OVERRIDE
PACKED-DECIMAL
PADDING
PAGE
PAGE-COUNTER
PASSWORD
PERFORM
PF
PH
PIC
PICTURE
PLUS
POINTER
POSITION
POSITIVE
PRINTING
PROCEDURE
PROCEDURE-POINTER
PROCEDURES
PROCEED
PROCESSING
PROGRAM
PROGRAM-ID
PURGE
QUEUE
QUOTE
QUOTES
RANDOM
RD
READ
READY
RECEIVE
RECORD
RECORDING
RECORDS
RECURSIVE
REDEFINES
REEL
REFERENCE
REFERENCES
RELATIVE
RELEASE
RELOAD
REMAINDER
REMOVAL
RENAMES
REPLACE
REPLACING
REPORT
REPORTING
REPORTS
REPOSITORY
RERUN
RESERVE
RESET
RETURN
RETURN-CODE
RETURNING
REVERSED
REWIND
REWRITE
RF
RH
RIGHT
ROUNDED
RUN
SAME
SD
SEARCH
SECTION
SECURITY
SEGMENT
SEGMENT-LIMIT
SELECT
SELF
SEND
SENTENCE
SEPARATE
SEQUENCE
SEQUENTIAL
SERVICE
SET
SHIFT-IN
SHIFT-OUT
SIGN
SIZE
SKIP1
SKIP2
SKIP3
SORT
SORT-CONTROL
SORT-CORE-SIZE
SORT-FILE-SIZE
SORT-MERGE
SORT-MESSAGE
SORT-MODE-SIZE
SORT-RETURN
SOURCE
SOURCE-COMPUTER
SPACE
SPACES
SPECIAL-NAMES
STANDARD
STANDARD-1
STANDARD-2
START
STATUS
STOP
STRING
SUB-QUEUE-1
SUB-QUEUE-2
SUB-QUEUE-3
SUBTRACT
SUM
SUPER
SUPPRESS
SYMBOLIC
SYNC
SYNCHRONIZED
TABLE
TALLY
TALLYING
TAPE
TERMINAL
TERMINATE
TEST
TEXT
THAN
THEN
THROUGH
THRU
TIME
TIMES
TITLE
TO
TOP
TRACE
TRAILING
TRUE
TYPE
UNIT
UNSTRING
UNTIL
UP
UPON
USAGE
USE
USING
VALUE
VALUES
VARYING
WHEN
WHEN-COMPILED
WITH
WORDS
WORKING-STORAGE
WRITE
WRITE-ONLY
ZERO
ZEROES
ZEROS
No comments:
Post a Comment
Barely anyone comments, so I don't moderate. Free advertising, I guess.