Loops/Downward for
You are encouraged to solve this task according to the task description, using any language you may know.
Write a for loop which writes a countdown from 10 to 0.
6502 Assembly
Code is called as a subroutine (i.e. JSR Start). Printing routines are only partially coded here, specific OS/hardware routines for printing are left unimplemented. <lang 6502asm>;An OS/hardware specific routine that is setup to display the Ascii character
- value contained in the Accumulator
Send = $9000 ;routine not implemented here PrintNewLine = $9050 ;routine not implemented here
*= $8000 ;set base address
Start PHA ;push Accumulator and Y register onto stack TYA PHA LDY #10 ;set Y register to loop start value TYA ;place loop value in the Accumulator Loop JSR PrintTwoDigits JSR PrintNewLine DEY ;decrement loop value BPL Loop ;continue loop if sign flag is clear PLA ;pop Y register and Accumulator off of stack TAY PLA RTS ;exit
- Print value in Accumulator as two hex digits
PrintTwoDigits PHA LSR LSR LSR LSR JSR PrintDigit PLA AND #$0F JSR PrintDigit RTS
- Convert value in Accumulator to an Ascii hex digit
PrintDigit ORA #$30 JSR Send ;routine not implemented here RTS </lang>
Ada
<lang ada>for I in reverse 0..10 loop
Put_Line(Integer'Image(I));
end loop;</lang>
ALGOL 68
<lang algol68>FOR i FROM 10 BY -1 TO 0 DO
print((i,new line))
OD</lang> As a common extension the DOWNTO is sometimes included to optimise the loop termination logic. The DOWNTO is available in Marcel's ALGOL 68G and Cambridge ALGOL 68C. <lang algol68>FOR i FROM 10 DOWNTO 0 DO
print((i,new line))
OD</lang>
AmigaE
<lang amigae>PROC main()
DEF i FOR i := 10 TO 0 STEP -1 WriteF('\d\n', i) ENDFOR
ENDPROC</lang>
AutoHotkey
<lang AutoHotkey>x := 10 While (x >= 0) {
output .= "`n" . x x--
} MsgBox % output }</lang>
AWK
<lang awk>BEGIN {
for(i=10; i>=0; i--) { print i }
}</lang>
Bash
<lang bash>for ((i=10;i>=0;i--)); do
echo $i
done</lang>
BASIC
<lang qbasic>for i = 10 to 0 step -1
print i
next i</lang>
Befunge
<lang befunge>55+>:.:v
^ -1_@</lang>
C
<lang c>int i; for(i = 10; i >= 0; --i)
printf("%d\n",i);</lang>
C++
<lang cpp>for(int i = 10; i >= 0; --i)
std::cout << i << "\n";</lang>
C#
<lang csharp>for (int i = 10; i >= 0; i--) {
Console.WriteLine(i);
}</lang>
Clojure
<lang csharp>(for [x (range 10 -1 -1)] (println x))</lang>
ColdFusion
With tags: <lang cfm><cfloop index = "i" from = "10" to = "0" step = "-1">
#i#
</cfloop></lang> With script: <lang cfm><cfscript>
for( i = 10; i <= 0; i-- ) { writeOutput( i ); }
</cfscript></lang>
Common Lisp
<lang lisp>(loop for i from 10 downto 1 do
(print i))</lang>
D
<lang d>for(int i = 10; i >= 0; --i) writefln(i)</lang> Foreach Range Statement since D2.003 <lang d>foreach_reverse(i ; 0..10+1) writefln(i) ;</lang>
dc
does not use GNU extensions
[]s. is a comment
c clears the stack
[~...]p s. to print strings
l<register>x executes the macro
uses the macro f - [p] to print, this can be replaced by any complex expressions.
<lang dc>c
[macro s(swap) - (a b : b a)]s. [Sa Sb La Lb] ss
[macro d(2dup) - (a b : a b a b)]s. [Sa d Sb La d Lb lsx] sd
[macro m(for) - ]s. [lfx 1 - ldx !<m ] sm
0 10 ldx [p] sf !<m q</lang>
Using it <lang dc>|dc < ./for.dc 10 9 ... 0</lang>
E
<lang e>for i in (0..10).descending() { println(i) }</lang>
Euphoria
<lang euphoria>for i = 10 to 0 by -1 do
? i
end for</lang>
Factor
<lang factor>11 iota <reversed> [ . ] each</lang>
FALSE
<lang false>10[$0>][$." "1-]#.</lang>
Forth
Unlike the incrementing 10 0 DO-LOOP, this will print eleven numbers. The LOOP words detect crossing the floor of the end limit. <lang forth>: loop-down 0 10 do i . -1 +loop ;</lang>
Fortran
<lang fortran>DO i = 10, 0, -1
WRITE(*, *) i
END DO</lang>
F#
<lang fsharp>for i in 10..-1..0 do
printfn "%d" i</lang>
Go
<lang go>for i := 10; i >= 0; i-- {
fmt.Printf("%d\n",i)
}</lang>
Haskell
<lang haskell>import Control.Monad forM_ [10,9..0] print</lang>
HicEst
<lang hicest>DO i = 10, 0, -1
WRITE() i
ENDDO</lang>
IDL
Using a loop (with an "increment of minus one" ):
<lang idl>for i=10,0,-1 do print,i</lang>
But in IDL one would rarely use loops (for anything) since practically everything can be done with vectors/arrays.
The "IDL way of doing things" for the countdown requested in the task would probably be this:
<lang idl>print,10-indgen(11)</lang>
Icon and Unicon
There are four looping controls 'every', 'repeat', 'until', and 'while' (see Introduction to Icon and Unicon/Looping Controls for more information.) The closest to a 'for' loop is 'every'.
Icon
<lang Icon>every i := 10 to 0 by -1 do {
# things to do within the loop }
</lang>
Unicon
The Icon solution works in Unicon.
J
J is array-oriented, so there is very little need for loops. For example, one could satisfy this task this way:
,. i. -11
J does support loops for those times they can't be avoided (just like many languages support gotos for those time they can't be avoided). <lang j>3 : 0 ] 11
for_i. i. - y do. i 1!:2 ]2 end. i.0 0 )</lang>
Though it's rare to see J code like this.
Java
<lang java>for(i = 10; i >= 0; --i){
System.out.println(i);
}</lang>
JavaScript
<lang javascript>for (var i=10; i>=0; --i) print(i);</lang>
Lisaac
<lang Lisaac>10.downto 0 do { i : INTEGER;
i.print; '\n'.print;
};</lang>
Logo
If the limit is less than the start, then FOR decrements the control variable. Otherwise, a fourth parameter could be given as a custom increment. <lang logo>for [i 10 0] [print :i]</lang>
Lua
<lang lua> for i=10,0,-1 do
print(i)
end </lang>
M4
<lang M4>define(`for',
`ifelse($#,0,``$0, `ifelse(eval($2 $3),1, `pushdef(`$1',$2)$5`'popdef(`$1')$0(`$1',eval($2+$4),$3,$4,`$5')')')')dnl
for(`x',`10',`>=0',`-1',`x ')</lang>
Mathematica
Mathematica provides several ways to iterate over a range of numbers, small subtle differences are amongst them. 3 possible implementations are (exactly the same output):
Using For: <lang Mathematica>For[i = 10, i >= 0, i--, Print[i]]</lang> Using Do: <lang Mathematica>Do[Print[i], {i, 10, 0, -1}]</lang> Using Scan: <lang Mathematica>Scan[Print, Range[10, 0, -1]]</lang>
MAXScript
<lang maxscript>for i in 10 to 0 by -1 do print i</lang>
Metafont
<lang metafont>for i = 10 step -1 until 0: show i; endfor end</lang>
The basic set of macros for Metafont defines downto, so that we can write
<lang metafont>for i = 10 downto 0: show i; endfor end</lang>
Modula-2
<lang modula2>MODULE Downward;
IMPORT InOut;
VAR i: INTEGER;
BEGIN
FOR i := 10 TO 0 BY -1 DO InOut.WriteInt(i, 2); InOut.WriteLn END
END Downward.</lang>
Modula-3
<lang modula3>FOR i := 10 TO 0 BY -1 DO
IO.PutInt(i);
END;</lang>
MUMPS
<lang MUMPS>LOOPDOWN
NEW I FOR I=10:-1:1 WRITE I WRITE:I'=1 ", " KILL I QUIT</lang>
Oberon-2
<lang oberon2>FOR i := 10 TO 0 BY -1 DO
Out.Int(i,0);
END;</lang>
Objeck
<lang objeck> for(i := 10; i >= 0; i -= 1;) {
i->PrintLine();
}; </lang>
OCaml
<lang ocaml>for i = 10 downto 0 do
Printf.printf "%d\n" i
done</lang>
Octave
<lang octave>for i = 10:-1:0
% ...
endfor</lang>
Oz
<lang oz>for I in 10..0;~1 do
{Show I}
end</lang>
PARI/GP
<lang>forstep(n=10,0,-1,print(n))</lang>
Pascal
<lang pascal>for i := 10 downto 0 do
writeln(i);</lang>
Perl
<lang perl>foreach (reverse 0..10) {
print "$_\n";
}</lang>
Perl 6
<lang perl6>for 10 ... 0 {
.say;
}</lang>
PHP
<lang php>for ($i = 10; $i >= 0; $i--)
echo "$i\n";</lang>
or <lang php>foreach (range(10, 0) as $i)
echo "$i\n";</lang>
PicoLisp
<lang PicoLisp>(for (I 10 (ge0 I) (dec I))
(println I) )</lang>
or: <lang PicoLisp>(mapc println (range 10 0))</lang>
Pike
<lang pike>int main(){
for(int i = 10; i >= 0; i--){ write(i + "\n"); }
}</lang>
PL/I
<lang PL/I> do i = 10 to 0 by -1;
put skip list (i);
end; </lang>
Pop11
<lang pop11>lvars i; for i from 10 by -1 to 0 do
printf(i, '%p\n');
endfor;</lang>
PowerShell
<lang powershell>for ($i = 10; $i -ge 0; $i--) {
$i
}</lang> Alternatively, the range operator might be used as well which simply returns a contiguous range of integers: <lang powershell>10..0</lang>
PureBasic
<lang PureBasic>For i=10 To 0 Step -1
Debug i
Next</lang>
Python
<lang python>for i in xrange(10, -1, -1):
print i</lang>
R
<lang R>for(i in 10:0) {print(i)}</lang>
REBOL
<lang REBOL>for i 10 0 -1 [print i]</lang>
Retro
<lang Retro>11 [ 1- putn space ] -times</lang>
REXX
<lang rexx>
do i = 10 to 0 by -1 say i end
/*another version:*/
do j=10 by -.1 to 7 say j end
</lang>
Ruby
<lang ruby>10.downto(0) do |i|
puts i
end</lang>
Sather
<lang sather>class MAIN is
main is i:INT; loop i := 10.downto!(0); #OUT + i + "\n"; end; end;
end;</lang>
Scheme
<lang scheme>(do ((i 10 (- i 1)))
((< i 0)) (display i) (newline))</lang>
Slate
<lang slate>10 downTo: 1 do: [| :n | print: n]</lang>
Smalltalk
<lang smalltalk>10 to: 1 by: -1 do:[:aNumber |
aNumber display. Character space display.
]</lang>
SNUSP
<lang snusp>++++++++++>++++++++++!/- @!\=@\.@@@-@-----# atoi
\n counter #\?>.</ \ @@@+@+++++# itoa loop</lang>
Tcl
<lang tcl>for {set i 10} {$i >= 0} {incr i -1} {
puts $i
}
- puts "We have liftoff!"</lang>
TI-83 BASIC
<lang ti83b> For i, 10, 0, –1 Disp i </lang>
TI-89 BASIC
<lang ti89b>Local i For i, 10, 0, –1
Disp i
EndFor</lang>
Trith
<lang trith>10 inc iota reverse [print] each</lang> <lang trith>10 [dup print dec] [dup 0 >=] while drop</lang>
UnixPipes
<lang bash>yes \ |cat -n |head -n 10 | tac</lang>
UNIX Shell
<lang bash>for(( Z=10; Z>=0; Z-- )); do
echo $Z
done</lang>
V
<lang v>10 [0 >]
[dup puts pred]
while</lang>
Vedit macro language
<lang vedit>for (#1 = 10; #1 >= 0; #1--) {
Num_Type(#1)
}</lang>
Visual Basic .NET
<lang vbnet>For i = 10 To 0 Step -1
Console.WriteLine(i)
Next</lang>
- Programming Tasks
- Iteration
- 6502 Assembly
- Ada
- ALGOL 68
- AmigaE
- AutoHotkey
- AWK
- Bash
- BASIC
- Befunge
- C
- C++
- C sharp
- Clojure
- ColdFusion
- Common Lisp
- D
- Dc
- E
- Euphoria
- Factor
- FALSE
- Forth
- Fortran
- F Sharp
- Go
- Haskell
- HicEst
- IDL
- Icon
- Unicon
- J
- Java
- JavaScript
- Lisaac
- Logo
- Lua
- M4
- Mathematica
- MAXScript
- Metafont
- Modula-2
- Modula-3
- MUMPS
- Oberon-2
- Objeck
- OCaml
- Octave
- Oz
- PARI/GP
- Pascal
- Perl
- Perl 6
- PHP
- PicoLisp
- Pike
- PL/I
- Pop11
- PowerShell
- PureBasic
- Python
- R
- REBOL
- Retro
- REXX
- Ruby
- Sather
- Scheme
- Slate
- Smalltalk
- SNUSP
- Tcl
- TI-83 BASIC
- TI-89 BASIC
- Trith
- UnixPipes
- UNIX Shell
- V
- Vedit macro language
- Visual Basic .NET