フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: 1 から 100 までの整数を表示する
DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する
on: 2014/08/23 23:31 Sat

似非原さんの LT のお題を Delphi で受けてみましょう!

[forやめろ -- LL Diver 2014 LT枠]
http://www.slideshare.net/esehara/for-38276816

Delphi では繰り返し処理には何らかのループ変数が必要となりますね。

DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する (1)
on: 2014/08/23 23:32 Sat

Pascal ではあまり使わない goto (with label) です。

program loop1;

{$APPTYPE CONSOLE}

uses
SysUtils;

label
_LOOP;
var
Cnt: Integer = 0;
begin
_LOOP:
Inc(Cnt);
Writeln(Cnt);
if Cnt < 100 then
goto _LOOP;
end.
DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する (2)
on: 2014/08/23 23:34 Sat

メジャーな for to do です。

program loop2;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
Cnt: Integer;
begin
for Cnt:=1 to 100 do
Writeln(Cnt);
end.

 
Delphi の for (to do) 文は BASIC と比べてもシンプルなものであり、ループ変数と開始値と終了値の指定しかありません。STEP もありませんし、開始値が終了値よりも大きいというのも許容されません。例えば 100~1 を表示するには

program loop2;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
Cnt: Integer;
begin
for Cnt:=100 downto 1 do
Writeln(Cnt);
end.

 
for downto do を使う事になります。

DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する (3)
on: 2014/08/23 23:35 Sat

while 文です。

program loop3;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
Cnt: Integer = 0;
begin
while Cnt < 100 do
begin
Inc(Cnt);
Writeln(Cnt);
end;
end.
DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する (4)
on: 2014/08/23 23:37 Sat

repeat until です。

program loop4;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
Cnt: Integer = 0;
begin
repeat
Inc(Cnt);
Writeln(Cnt);
until (Cnt = 100);
end.
DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する (5)
on: 2014/08/23 23:38 Sat

再帰です。

program loop5;

{$APPTYPE CONSOLE}

uses
SysUtils;

procedure Recursive(Cnt: Integer);
begin
Writeln(Cnt);
Inc(Cnt);
if Cnt <= 100 then
Recursive(Cnt);
end;

begin
Recursive(1);
end.
DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する (6)
on: 2014/08/23 23:39 Sat

for in do です。

program loop6;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
Cnt: Integer;
begin
for Cnt in [1..100] do
Writeln(Cnt);
end.

 
お題が 「1 から 100 までの整数」なので実行可能なコードです。[1..100] の部分は集合なので、256 要素までしか定義できません。[1..1024] とかはダメなのです。

DEKO
管理者
投稿数: 2690
1 から 100 までの整数を表示する (7)
on: 2014/08/24 02:14 Sun

手続きをループ実行する手続きを作ってみます。

uses
..., SysUtils;

procedure LoopProc(Start, Stop: Integer; Proc: TProc<Integer>);
var
i: Integer;
begin
for i:=Start to Stop do
Proc(i);
end;

 
…まぁ、結局 for to do 使ってるんですけどね。で、こんな感じで手続きを実行できます。

procedure TEST(Cnt: Integer);
begin
// 処理内容は何でもいい
Writeln(Cnt);
end;

begin
LoopProc(1, 100, TEST);
end.

 
もちろん無名メソッドで書く事もできます。

begin
LoopProc(1, 100,
(
procedure (Cnt: Integer)
begin
// 処理内容は何でもいい
Writeln(Cnt);
end
)
);
end.

 
再帰とコレは Delphi の制御構文ではないのでちょっぴり「何かが違う」気がします (^^;A

DEKO
管理者
投稿数: 2690
5種類?
on: 2014/08/24 04:30 Sun

LT で言及されているのは以下の 6 種類。

  • goto – (1)
  • while – (3)
  • 再帰 – (5)
  • for – (2)
  • each – (6)?
  • map() – (7)?

map() に関しては組み込み関数なので言語にそれが存在するのか?なければ (7) みたいに自前で用意しちゃってもいいのか?という話ではあります。あと、「同一の言語で」という縛りだと、そもそも 5 種類用意するのが難しい (できない) ものもあるかと思われます。

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.048 sec.