Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
62
Task/Show-ASCII-table/Free-Pascal/show-ascii-table.pas
Normal file
62
Task/Show-ASCII-table/Free-Pascal/show-ascii-table.pas
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
// The FPC (FreePascal compiler) discards the program header
|
||||
// (except in ISO-compliant “compiler modes”).
|
||||
program showAsciiTable(output);
|
||||
|
||||
const
|
||||
columnsTotal = 6;
|
||||
|
||||
type
|
||||
// The hash indicates a char-data type.
|
||||
asciiCharacter = #32..#127;
|
||||
asciiCharacters = set of asciiCharacter;
|
||||
|
||||
var
|
||||
character: asciiCharacter;
|
||||
characters: asciiCharacters;
|
||||
column, line: integer;
|
||||
begin
|
||||
// characters needs to be initialized,
|
||||
// because the next `include` below
|
||||
// will _read_ the value `characters`.
|
||||
// Reading _unintialized_ values, however,
|
||||
// is considered bad practice in Pascal.
|
||||
characters := [];
|
||||
// `div` denotes integer division in Pascal,
|
||||
// that means the result will be an _integer_-value.
|
||||
line := (ord(high(asciiCharacter)) - ord(low(asciiCharacter)))
|
||||
div columnsTotal + 1;
|
||||
// Note: In Pascal for-loop limits are _inclusive_.
|
||||
for column := 0 to columnsTotal do
|
||||
begin
|
||||
// This is equivalent to
|
||||
// characters := characters + […];
|
||||
// i.e. the union of two sets.
|
||||
include(characters, chr(ord(low(asciiCharacter)) + column * line));
|
||||
end;
|
||||
|
||||
for line := line downto 1 do
|
||||
begin
|
||||
// the for..in..do statement is an Extended Pascal extension
|
||||
for character in characters do
|
||||
begin
|
||||
// `:6` specifies minimum width of argument
|
||||
// [only works for write/writeLn/writeStr]
|
||||
write(ord(character):6, ' : ', character);
|
||||
end;
|
||||
// emit proper newline character on `output`
|
||||
writeLn;
|
||||
|
||||
// `characters` is evaluated prior entering the loop,
|
||||
// not every time an iteration finished.
|
||||
for character in characters do
|
||||
begin
|
||||
// These statements are equivalent to
|
||||
// characters := characters + [character];
|
||||
// characters := characters - [succ(character)];
|
||||
// respectively, but shorter to write,
|
||||
// i.e. less susceptible to spelling mistakes.
|
||||
exclude(characters, character);
|
||||
include(characters, succ(character));
|
||||
end;
|
||||
end;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue