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.
Ada
<lang ada> for I in reverse 0..10 loop
Put_Line(Integer'Image(I));
end loop; </lang>
ALGOL 68
FOR i FROM 10 BY -1 TO 0 DO print((i,new line)) OD
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.
FOR i FROM 10 DOWNTO 0 DO print((i,new line)) OD
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 = %output%`n%x% x-- } msgbox % output }</lang>
AWK
<lang awk>BEGIN {
for(i=10; i>=0; i--) { print i }
}</lang>
BASIC
<lang qbasic>for i = 10 to 0 step -1
print i
next i</lang>
Befunge
55+>:.:v ^ -1_@
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>
ColdFusion
With tags:
<cfloop index = "i" from = "10" to = "0" step = "-1"> #i# </cfloop>
With script:
<cfscript> for( i = 10; i <= 0; i-- ) { writeOutput( i ); } </cfscript>
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.
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
Using it
|dc < ./for.dc 10 9 ... 0
E
<lang e>for i in (0..10).descending() { println(i) }</lang>
FALSE
10[$0>][$." "1-]#.
Forth
Unlike the incrementing 10 0 DO-LOOP, this will print eleven numbers. The LOOP words detect crossing the floor of the end limit.
: loop-down 0 10 do i . -1 +loop ;
Fortran
<lang fortran> DO i = 10, 0, -1
WRITE(*, *) i END DO</lang>
Haskell
import Control.Monad forM_ [10,9..0] print
IDL
Using a loop (with an "increment of minus one" ):
for i=10,0,-1 do print,i
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:
print,10-indgen(11)
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).
3 : 0 ] 11 for_i. i. - y do. i 1!:2 ]2 end. i.0 0 )
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>
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.
for [i 10 0] [print :i]
MAXScript
for i in 10 to 0 by -1 do print i
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-3
FOR i := 10 TO 0 BY -1 DO IO.PutInt(i); END;
Oberon-2
FOR i := 10 TO 0 BY -1 DO Out.Int(i,0); END;
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>
Pascal
<lang pascal> for i := 10 downto 0 do
writeln(i);
</lang>
Perl
<lang perl>foreach (reverse 0..10) {
print "$_\n";
}</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>
Pop11
lvars i; for i from 10 by -1 to 0 do printf(i, '%p\n'); endfor;
Python
<lang python> for i in xrange(10, -1, -1):
print i
</lang>
Ruby
<lang ruby>10.downto(0) do |i|
puts i
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
++++++++++>++++++++++!/- @!\=@\.@@@-@-----# atoi \n counter #\?>.</ \ @@@+@+++++# itoa loop
Tcl
<lang tcl>for {set i 10} {$i >= 0} {incr i -1} {
puts $i
}
- puts "We have liftoff!"</lang>
UnixPipes
yes \ |cat -n |head -n 10 | tac
V
10 [0 >] [dup puts pred] while
Visual Basic .NET
For i = 10 To 0 Step -1 Console.WriteLine(i) Next