コラム問題集を解いてみた


問題:

20から120までの整数の中で17で割り切れる値をすべて表示し、
その総個数を求めるプログラムを作成しなさい。

解いたやつ:

function Hoge(min, max, num: Integer): Integer;
var
 i: Integer;
begin
 Result := 0;

 if (min > max) or (num <= 0) then
 begin
   ShowMessage('何らかのエラーが発生しました'+ #13 +'諦めてください');
   Exit;
 end;

 for i := min to max do
 begin
   if (i mod num) = 0 then Inc(Result);
 end;
end;

// var i, j: Integer;
// i := Hoge(20, 120, 17);
// for j := 1 to i do ShowMessage(InttoStr(j*17));

問題:

数値列が並んでいるテキストファイルがあって

12 34 68 1 4
2 89 24 58 7 46
…   こんな感じのが10行あります

これを行ごとに足し算するプログラムをつくりなさい
行ごとに数字の個数は、5つだったり、6つだったりバラバラです

解いたやつ:

function addNums(str: String): Integer;
var
 s: String;
 t: String;
 i: Integer;
begin
 Result := 0;
 s := str + ' ' + #0;
 i := 1;

 while byte(s[i]) <> 0 do
 begin
   if s[i] = ' ' then
   begin
     Result := Result + StrtoInt(t);
     Inc(i);
     t := '';
     continue;
   end;
   t := t + s[i];
   Inc(i);
 end;
end;

// var
//  sl: TStringList;
//  i : Integer;
// begin
//  sl := TStringList.Create;
//  try
//    sl.LoadFromFile('number.txt');
//    for  i := 0 to sl.Count -1 do ShowMessage(InttoStr(addNums(sl[i])));
//  finally
//   sl.Free;
//  end;
// end;