新しく発言する EXIT インデックスへ
最大値と最小値の求めかたを教えてください

  最大値と最小値の求めかたを教えてください KAZINO 2004/07/16 10:14:24 
  KAZINOさんのプログラムでいろいろわからな... 青木太一 2004/07/16 12:39:41 
  こんな感じです。 山中和義 2004/07/16 15:31:10 
  青木様、山中様お返事ありがとうございまし... KAZINO 2004/07/17 04:53:41 

  最大値と最小値の求めかたを教えてください KAZINO 2004/07/16 10:14:24  ツリーへ

最大値と最小値の求めかたを教えてください 返事を書く
KAZINO 2004/07/16 10:14:24
データの中から、最大値と最小値を検索する、プログラムを作っているのですが、どうしても上手く出来ません。
どなたかアドバイスしていただけるとうれしいです

10 N=5
20 DIM A$(N),B(N),C(n)
30 FOR K=1 TO N
40 READ A$(k),B(k),C(k)
50 IF C(k)=9999 THEN GOTO 70
60 NEXT K
70 M=M-1:MAX=:MIN=9999
80 FOR K=1 TO M-1
90 IF C(K)<MIN THEN MIN=C(k)
100 IF B(k)>MAX THEN MAX=B(K)
110 NEXT K
120 PRINT "体重が最も軽い人は";C(k);"kgで";A$(k);"です"
130 PRINT "身長が最も高い人は";B(k);"cmで";A$(k);"です"
140 DATA "一郎",170,60
150 DATA "二郎",165,55
160 DATA "三郎",160,50
170 DATA "四郎",155,45
180 DATA "五郎",150,40
190 END

Aが名前、Bが身長、Cが体重です。
これで実行すると、2番目のデータが結果表示されてしまいます。

よろしくお願いします。

  KAZINOさんのプログラムでいろいろわからな... 青木太一 2004/07/16 12:39:41  ツリーへ

Re: 最大値と最小値の求めかたを教えてください 返事を書く
青木太一 2004/07/16 12:39:41
KAZINOさんのプログラムでいろいろわからないところがあります。

・「M」は何を表しているのでしょう?
 また「M」の初期値が「0」なので70行目で「-1」になり、
 80〜110行のforループが一度も実行されません

・50行目の「IF C(k)=9999 THEN GOTO 70」は何をしたいのでしょう?

おそらくforループ実行中や、実行後のkの値についてなんらかの誤解をしているものと推測します。
KAZINOさんの役に立たなかったらごめんなさい。

参考に最大値を求めるプログラムを書きます。

randomize
LET n=5
dim a(1 to n)

!乱数で初期化
for i=1 to n
LET a(i)=rnd
print "a(";i;")=";a(i)
next i

!とりあえず最大値はa(1)としておく
LET max_a=a(1) !最大値
LET max_i=1 !最大値の配列の添え字

!最大値を探す
for i=2 to n
if max_a<a(i) then
LET max_a=a(i)
LET max_i=i
end if
next i

print "最大値はa(";max_i;")=";a(max_i)
END

  こんな感じです。 山中和義 2004/07/16 15:31:10  ツリーへ

Re: 最大値と最小値の求めかたを教えてください 返事を書く
山中和義 2004/07/16 15:31:10
こんな感じです。
変数Kが最大、最小と2つ使われています。(混同)
別々に記録しておく必要があると思います。

なお、元のプログラムを十進BASICで置き換えています。

10 LET N=5 !人数を設定する
20 DIM A$(N),B(N),C(N)
30 FOR K=1 TO N !人数分データを読込む
40 READ A$(K),B(K),C(K)

60 NEXT K
70 LET MAX=B(1) !最初の人を最大、最小と仮定する
LET K2=1
LET MIN=C(1)
LET K1=1
80 FOR K=2 TO N !2番目以降の人に対して確認する
90 IF C(K)<MIN THEN
LET MIN=C(K)
LET K1=K
END IF
100 IF B(K)>MAX THEN
LET MAX=B(K)
LET K2=K
END IF
110 NEXT K
120 PRINT "体重が最も軽い人は";C(K1);"kgで";A$(K1);"です"
130 PRINT "身長が最も高い人は";B(K2);"cmで";A$(K2);"です"
140 DATA "一郎",170,60
150 DATA "二郎",165,55
160 DATA "三郎",160,50
170 DATA "四郎",155,45
180 DATA "五郎",150,40
190 END

  青木様、山中様お返事ありがとうございまし... KAZINO 2004/07/17 04:53:41  ツリーへ

Re: 最大値と最小値の求めかたを教えてください 返事を書く
KAZINO 2004/07/17 04:53:41
青木様、山中様 お返事ありがとうございました

教科書やBASICの本を見ながら、作ったのですが
Mの意味やループのさせ方が理解できていなかったようです。
提示していただいたプログラムを参考にさせていただいて
理解できるように、頑張ります。
御忙しい中、アドバイスありがとうございました


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。