はじめてのDelphi(その4−1)

戻る

ここでは、VBC++BuilderDelphiのループ文の違いを見てみます。ループ文は言語により同じような記述ができないので注意が必要です。

ループ文

  • for文の例です。

 


VBの場合

  • continue がないので、if 文を使用しています。(Ex.5)

先頭へ


Private Sub Command1_Click()
    Dim iloop As Integer
    Dim icount As Integer
    Dim msg As String
    
    ' Ex.1:for
    ' 1づつカウントアップの例
    icount = 0
    msg = ""
    For iloop = 1 To 10
        icount = icount + 1
        msg = msg + Str(iloop) + ","
    Next iloop
    msg = msg + vbCrLf + Str(icount) + "回forループしました"
    Call MsgBox(msg)

    ' Ex.2:for
    ' 2づつカウントアップの例
    icount = 0
    msg = ""
    For iloop = 1 To 10 Step 2
        icount = icount + 1
        msg = msg + Str(iloop) + ","
    Next iloop
    msg = msg + vbCrLf + Str(icount) + "回forループしました"
    Call MsgBox(msg)

    ' Ex.3:for
    ' カウントダウンの例
    icount = 0
    msg = ""
    For iloop = 10 To 1 Step -1
        icount = icount + 1
        msg = msg + Str(iloop) + ","
    Next iloop
    msg = msg + vbCrLf + Str(icount) + "回forループしました"
    Call MsgBox(msg)

    ' Ex.4:for
    ' カウントアップ中にループ脱出の例
    icount = 0
    msg = ""
    For iloop = 1 To 10
        If iloop = 5 Then
            Exit For    ' ループ脱出
        End If
        icount = icount + 1
        msg = msg + Str(iloop) + ","
    Next iloop
    msg = msg + vbCrLf + Str(icount) + "回forループしました"
    Call MsgBox(msg)
    
    ' Ex.5:for
    ' カウントアップ中にループ先頭に戻る例
    '
    ' VBはC/C++やPascalのようにループ先頭への記述はできない
    ' そのためロジックで対応します
    icount = 0
    msg = ""
    For iloop = 1 To 10
        If (iloop Mod 2) <> 1 Then
            icount = icount + 1
            msg = msg + Str(iloop) + ","
        End If
    Next iloop
    msg = msg + vbCrLf + Str(icount) + "回forループしました"
    Call MsgBox(msg)
    
End Sub


C++Builderの場合

先頭へ


//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int iloop;
  int icount;
  AnsiString msg;

  // forループ1
  // 1づつカウントアップの例
  icount = 0;
  msg = "";
  for( iloop = 1; iloop <= 10; iloop++ ){
    icount ++;
    msg = msg + IntToStr( iloop ) + ", ";
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回forループしました";
  ShowMessage( msg );

  // forループ2
  // 2づつカウントアップの例
  icount = 0;
  msg = "";
  for( iloop = 1; iloop <= 10; iloop += 2 ){
    icount ++;
    msg = msg + IntToStr( iloop ) + ", ";
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回forループしました";
  ShowMessage( msg );

  // forループ3
  // カウントダウンの例
  icount = 0;
  msg = "";
  for( iloop = 10; iloop >= 1; iloop-- ){
    icount ++;
    msg = msg + IntToStr( iloop ) + ", ";
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回forループしました";
  ShowMessage( msg );

  // forループ4
  // カウントアップ中にループ脱出の例
  icount = 0;
  msg = "";
  for( iloop = 1; iloop <= 10; iloop++ ){
    if( iloop == 5 ){
      break;  // ループ脱出
    }
    icount ++;
    msg = msg + IntToStr( iloop ) + ", ";
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回forループしました";
  ShowMessage( msg );

  // forループ5
  // カウントアップ中にループ先頭に戻る例
  icount = 0;
  msg = "";
  for( iloop = 1; iloop <= 10; iloop++ ){
    if( ( iloop % 2 ) == 1 ){
      continue;  // ループ先頭へ
    }
    icount ++;
    msg = msg + IntToStr( iloop ) + ", ";
  }
  msg = msg + "\n" + IntToStr( icount ) + " 回forループしました";
  ShowMessage( msg );

}


Delphiの場合

  • for はループカウンタの増減に1以外を指定できないので、while do を使用しています。(Ex.2)

先頭へ


procedure TForm1.Button1Click(Sender: TObject);
var
  iloop: Integer;
  icount: Integer;
  msg: AnsiString;
begin
  // Ex.1:for
  // 1づつカウントアップの例
  icount := 0;
  msg := '';
  for iloop := 1 to 10 do
  begin
    Inc( icount );
    msg := msg + IntToStr( iloop ) + ', ';
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回forループしました';
  ShowMessage( msg );

  // Ex.2:for
  // 2づつカウントアップの例
  // VBやC/C++のようにfor文で増分の変更ができない
  // よってwhile ..do文で代用する
  iloop := 1;
  icount := 0;
  msg := '';
  while iloop <= 10 do
  begin
    Inc( icount );
    msg := msg + IntToStr( iloop ) + ', ';
    Inc( iloop, 2 );
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回for(while do)ループしました';
  ShowMessage( msg );

  // Ex.3:for
  // カウントダウンの例
  icount := 0;
  msg := '';
  for iloop := 10 downto 1 do
  begin
    Inc( icount );
    msg := msg + IntToStr( iloop ) + ', ';
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回forループしました';
  ShowMessage( msg );

  // Ex.4:for
  // カウントアップ中にループ脱出の例
  icount := 0;
  msg := '';
  for iloop := 1 to 10 do
  begin
    if iloop = 5 then
    begin
      Break; // ループ脱出
    end;
    Inc( icount );
    msg := msg + IntToStr( iloop ) + ', ';
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回forループしました';
  ShowMessage( msg );

  // Ex.5:for
  // カウントアップ中にループ先頭に戻る例
  icount := 0;
  msg := '';
  for iloop := 1 to 10 do
  begin
    if ( iloop mod 2 ) = 1 then
    begin
      Continue; // ループ先頭へ
    end;
    Inc( icount );
    msg := msg + IntToStr( iloop ) + ', ';
  end;
  msg := msg + #13#10 + IntToStr( icount ) + '回forループしました';
  ShowMessage( msg );


end;


 

先頭へ/戻る