100 doors: Difference between revisions

m
→‎{{header|Oberon-07}}: Syntax highlight with MediaWiki markup
m (→‎{{header|Oberon-07}}: Syntax highlight with MediaWiki markup)
Line 9,209:
=={{header|Oberon-07}}==
[http://oberon07.com/ Oberon-07], by [http://people.inf.ethz.ch/wirth/index.html Niklaus Wirth].
<syntaxhighlight lang="modula2"> '''MODULE''' Doors;
'''IMPORT''' Out;
'''PROCEDURE''' Do*; ''(* In Oberon an asterisk after an identifier is an export mark *)''
'''CONST''' N = 100; len = N + 1;
'''VAR''' i, j: INTEGER;
closed: '''ARRAY''' len '''OF''' BOOLEAN; ''(* Arrays in Oberon always start with index 0; closed[0] is not used *)''
'''BEGIN'''
'''FOR''' i := 1 '''TO''' N '''DO''' closed[i] := '''TRUE''' '''END''';
'''FOR''' i := 1 '''TO''' N '''DO'''
j := 1;
'''WHILE''' j <&lt; len '''DO'''
'''IF''' j '''MOD''' i = 0 '''THEN''' closed[j] := ~closed[j] '''END'''; INC(j) ''(* ~ = NOT *)''
'''END'''
'''END''';
''(* Print a state diagram of all doors *)''
'''FOR''' i := 1 '''TO''' N '''DO'''
'''IF''' (i - 1) '''MOD''' 10 = 0 '''THEN''' Out.Ln '''END''';
'''IF''' closed[i] '''THEN''' Out.String("- ") '''ELSE''' Out.String("+ ") '''END'''
'''END'''; Out.Ln;
''(* Print the numbers of the open doors *)''
'''FOR''' i := 1 '''TO''' N '''DO'''
'''IF''' ~closed[i] '''THEN''' Out.Int(i, 0); Out.Char(" ") '''END'''
'''END'''; Out.Ln
'''END''' Do;
'''END''' Doors.
 
END Doors. </syntaxhighlight>
Execute: Doors.Do<br/>
{{out}}
3,048

edits