質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.02%

  • Ruby

    6361questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

最大値最小値を求めるプログラムでの問題

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 307

018

score 3

min = 100000
max = 0

num_of_child.times{
    height = chi[1].to_f #身長
    if chi[0] == "0"
        if min > height
            min = height
        end
    else chi[0] 
        if max < height
            max = height
        end
    end
}

前提・実現したいこと

このプログラムは一人の身長のわからない子供の身長を、他の子供と比較して考えられる最大値、最小値を求めるプログラムである。

minが10000と適当に大きい数字を入れても動くが、一人目の身長の初期値を代入したい。
num_of_child.times内に書くと上書きされてしまい最小値が求められない

どう書くのが適切か

変数の説明

num_of_child...他の子供の数 
chi[0]には0か1が入っていて0だった場合その子供の身長以下である。1の場合はその子供以上である
chi[1]当該の子供の身長

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kimurayu

    2017/10/21 14:54

    問題文そのまま書いたみたいに書かないでくれますか?

    キャンセル

  • 退会済みユーザー

    2017/10/23 10:26

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

+1

大枠として下記のような処理を考えると良さそうです

  1. プログラムの外部から渡されたデータをひとまとめにする(個別の変数や配列にまとめる)
  2. 配列を捜査して、条件に沿う値を見つけ出す
  • 最大で探す処理を関数として定義
  • 最小で探す処理を関数として定義

構成するデータとしては下記のようにすると処理が簡単になるかもしれません

# 外部からの入力を受け取り、以下のようなデータを形成する
mystery_height_child = n # 身長不明な子の数値
children_height = [120.0, 140.2, 155.5 ...]

捜査する処理はそれぞれ独立させ別個の処理として走らせると、簡潔なコードになると思います

最大を求める処理は、条件あるいは捜査対象を反転させると最小を求める処理に早変わりするかとおもいます
なので、最初に最大の求め方を考えるのが早いでしょう

肝心の検索処理ですが

  • each.with_index , each_with_index , map.with_index あたりの出番?
  • ループ処理の中で比較し、条件に合えば配列のインデックスを返す

といったイメージになると思います

一つのことを上手く、そして個々の処理は小さく書くことで、コードの分かり易さ、考えのまとまり易さを上げていけると思います


質問と直接関係ありませんが: 外部からデータを受け取る処理は、再帰で書くとラクです
(受け取る個数によっては StackLevelTooDeep が発生します)

def input(n, ret = [])
  return ret if n.zero?
  ret << gets.chomp.to_i
  input(n - 1, ret)
end

# 最初に何個のデータを受け取るか取得し、再帰でデータを繰り返し取得
# 処理結果を配列として受け取る
input_data = input(gets.chomp.to_i)

競技プログラミングの問題文に類似する部分が見受けられたので それ前提で書いてしまいました
勘違いであればご容赦ください

何か参考になれば幸いです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/23 09:52

    ご丁寧に解説ありがとうございます。

    ただ解答を教えていただけるのではなく、考え方の部分からご回答いただき大変為になりました。
    gouf様の回答を元に今後も精進していきたいと思います、ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    6361questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。