逐次探索

明解C言語 入門編 > 6. 関数 >

逐次探索

C


#include <stdio.h>

#define NINSU 5
#define FAILED -1

int search(const int ary[], const int key, const int no)
{
int i = 0;
while (1)
{
if (i == no ) return FAILED;
if (ary[i] == key) return i + 1;
i++;
}
}

int main(int argc, char* argv[])
{
int ary[NINSU] = {83, 55, 777, 499, 20};
int key = 18;

int idx = search(ary, key, NINSU);
if (idx == FAILED)
printf("%dは、見つかりませんでした。\n", key);
else
printf("%dは、%d番目にあります。\n", key, idx);

key = 499;

idx = search(ary, key, NINSU);
if (idx == FAILED)
printf("%dは、見つかりませんでした。\n", key);
else
printf("%dは、%d番目にあります。\n", key, idx);

return 0;
}

実行結果


R:\>lesson049\project1.exe
18は、見つかりませんでした。
499は、4番目にあります。

Delphi


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

const
NINSU = 5;
FAILED = -1;

function search(const ary:array of Integer; const key: Integer):Integer;
var
i: Integer;
begin
result := FAILED;

for i := Low(ary) to High(ary) do
begin
if ary[i] = key then
begin
result := i + 1;
exit;
end;
end;
end;

var
ary: array[1..NINSU] of Integer = (83, 55, 777, 499, 20);
key, idx: Integer;
begin
key := 18;
idx := search(ary, key);

if idx = FAILED then
writeln(format('%dは、見つかりませんでした。', [key]))
else
writeln(format('%dは、%d番目にあります。', [key, idx]));

key := 499;
idx := search(ary, key);

if idx = FAILED then
writeln(format('%dは、見つかりませんでした。', [key]))
else
writeln(format('%dは、%d番目にあります。', [key, idx]));
end.

実行結果


S:\>lesson049\project1.exe
18は、見つかりませんでした。
499は、4番目にあります。

Perl
$NINSU  =  5;
$FAILED = -1;

sub search
{
    my @ary = @_;
    my $key = $ary[0];
    my $no  = $ary[1];
    
    $i = 2;
    while (1)
    {
        return $FAILED if ($i       == $no + 2);
        return $i - 1  if ($ary[$i] == $key) ;
        $i++;
    }
}

@ary = (83, 55, 777, 499, 20);
$key = 18;
$idx = &search($key, $NINSU, @ary);
if ($idx == $FAILED)
{
    print "$keyは、見つかりませんでした。\n";
}
else
{
    print "$keyは、$idx番目にあります。\n";
}

$key = 499;
$idx = &search($key, $NINSU, @ary);
if ($idx == $FAILED)
{
    print "$keyは、見つかりませんでした。\n";
}
else
{
    print "$keyは、$idx番目にあります。\n";
}

実行結果

L:\>perl lesson_06_049.pl
18は、見つかりませんでした。
499は、4番目にあります。

Ruby
NINSU  =  5
FAILED = -1

def search(key, no, ary)
    i = 0
    while (1)
        return FAILED if (i      == no)
        return i + 1  if (ary[i] == key)
        i += 1
    end
end

ary = [83, 55, 777, 499, 20]
key = 18
idx = search(key, NINSU, ary)
if (idx == FAILED)
    print "#{key}は、見つかりませんでした。\n"
else
    print "#{key}は、#{idx}番目にあります。\n"
end

key = 499
idx = search(key, NINSU, ary)
if (idx == FAILED)
    print "#{key}は、見つかりませんでした。\n"
else
    print "#{key}は、#{idx}番目にあります。\n"
end

実行結果

L:\>ruby l:\lesson_06_049.rb
18は、見つかりませんでした。
499は、4番目にあります。