Loops/Downward for

From Rosetta Code
Task
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

Works with: ALGOL 68 version Standard - no extensions to language used
Works with: ALGOL 68G version Any - tested with release mk15-0.8b.fc9.i386
Works with: ELLA ALGOL 68 version Any (with appropriate job cards) - tested with release 1.8.8d.fc9.i386
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

AWK

<lang awk>BEGIN {

 for(i=10; i>=0; i--) {
    print i
 }

}</lang>

BASIC

Works with: QuickBasic version 4.5

<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>

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

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

Works with: Fortran version 90 and later

<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>

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

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>

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(1) do |i|

  puts i

end</lang>

Scheme

<lang scheme>(do ((i 10 (- i 1)))

   ((< i 0))
   (display i)
   (newline))</lang>

SNUSP

++++++++++>++++++++++!/- @!\=@\.@@@-@-----#   atoi
    \n      counter  #\?>.</  \ @@@+@+++++#   itoa
                       loop

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