解の総数を表示するには?

解決


karuru  2004-08-13 02:33:02  No: 10384  IP: [192.*.*.*]

ボタンを押すと10<a*a-b*b<100、ただしa,bは整数で1<a<b<20の範囲で、という式を満たすa,bをすべて求めてリストボックスに表示して、それとは別の欄にその解の組の総数を表示するにはどうしたらよいでしょうか。よろしくお願いします

編集    削除
jok  2004-08-13 04:47:49  No: 10385  IP: [192.*.*.*]

計算するまでもなく

1<a<b<20

これで

10<a*a-b*b<100

を満たすことはないのでゼロです。

b>a ですから a*a-b*b は常に負。

編集    削除
karuru  2004-08-13 05:01:11  No: 10386  IP: [192.*.*.*]

すいません、書き間違いです。10<b*b-a*a<100でした

編集    削除
jok  2004-08-13 05:58:38  No: 10387  IP: [192.*.*.*]

どこがわからないのですか?

1)for 文
2)判断
3)個数の求め方
4)ListBox への書き込み方
5)その他

編集    削除
.  2004-08-13 08:43:55  No: 10388  IP: [192.*.*.*]

procedure TForm1.Button1Click(Sender: TObject);
var a,b:byte;
    c:integer;
    str:string;
begin
str:='';
for b:=19 downto 3 do
 for a:=b-1 downto 2 do
 begin
    c:=b*b-a*a;
    if (10<c) and (c<100) then
      str:=str + '(a:'+inttostr(a)+
                 ',b:'+inttostr(b)+
                 ') b*b-a*a='+inttostr(c)+
                #13#10;

 end;
ListBox1.Items.Text:=str;
end;

編集    削除
karuru  2004-08-13 21:41:36  No: 10389  IP: [192.*.*.*]

jokさん3、4です。リストボックスに表示して行数でも数えればいいのでしょうか?(その方法もわからないのです・・・すいません

編集    削除
jok  2004-08-13 22:28:37  No: 10390  IP: [192.*.*.*]

3)個数の求め方

var
  kosuu:integer

としておいてコードの最初で kosuu := 0; と初期化しておき、条件が合致する
たびに Inc(kosuu); として、kosuu を一つずつ増加させます。指を折るのと
同じですね。

4)ListBox への書き込み方

数え終わったら、

ListBox1.Items.Add('個数 = '+IntToStr(kosuu));

とします。

> リストボックスに表示して行数でも数えればいいのでしょうか?

この方法もあります。最初に ListBox1.Clear と項目をクリアしておき、
全部の解の組を書き終わったら、最後に

ListBox1.Items.Add('個数 = '+IntToStr(ListBox1.Items.Count));

とすると項目の数を表示できます。

編集    削除
karuru  2004-08-13 23:53:58  No: 10391  IP: [192.*.*.*]

count使って何とかなりました。本当にありがとうございました

編集    削除