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

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

ただいまの
回答率

87.36%

条件に適合する配列要素を数える

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,694
退会済みユーザー

退会済みユーザー

条件に適合する配列要素を数える
下はトランプのカードの名前の文字列を要素とする配列である。

    ar = [ 'ハート','ダイヤ','スペード','ダイヤ','ダイヤ','ハート','ダイヤ','ダイヤ','クラブ','ハート','クラブ','ハート','ハート','ダイヤ','ハート','スペード','ダイヤ','ダイヤ','クラブ','スペード','ハート','スペード','クラブ','クラブ','ハート','ダイヤ','ハート','スペード','スペード','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','スペード','スペード','ハート','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','ハート','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','ハート','ハート','ダイヤ','ダイヤ','ハート','ハート','スペード','ダイヤ','ダイヤ','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','ハート','クラブ','ダイヤ','ダイヤ','ダイヤ','ダイヤ','ダイヤ','クラブ','ダイヤ','クラブ','ダイヤ','ダイヤ','クラブ','スペード','ハート','ハート','ハート','クラブ','クラブ','スペード','ハート','ダイヤ','ダイヤ','ハート','スペード','ダイヤ','ダイヤ','ハート','ハート','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','ダイヤ','ダイヤ','ダイヤ','スペード','ハート','スペード','ダイヤ','スペード','クラブ','ダイヤ','ダイヤ','ダイヤ','ダイヤ','クラブ','ダイヤ','スペード','クラブ','クラブ','スペード','スペード','ハート' ] 

この配列データを使って,赤いカード(ハートまたはダイヤ)の数を数える プログラムを,以下の方針で作りなさい。
・あらかじめ配列 ar に複数個の文字列データが格納される処理が, プログラムの最初で行われているものとする。 その部分については書く必要はない。
・ 目的としては赤の札,つまりハートまたはダイヤのカードの総数を数えたい。
・数を数え上げるためのカウンタとなる変数(たとえば count) ゼロに初期化して定義しておく。
・for ループで 配列の要素を読み込んでいく,
・配列要素の文字列が条件に合っていたら,カウンタを1だけ増やす。
・ ループが終了したら,下の例のように出力する。xx は整数で,行の最後には改行がある。

    赤いカードの数 = xx
以下の形式で書きなさい。
count = 0
for i in ????
   # このループの中で if 構文を使ってデータを判定して集計する。
end

・自分の回答
n  = ar.size
count = 0
for i in 0 .. n-1
   if ar[i]  == 'ダイヤ' or ar[i] ==  'ハート'
    count += 1
   end
end
puts"赤いカードの数 = #{count}"

かんがえてみたんですけど、ifの中の書き方、puts"赤いカードの数"の表し方が間違っているみたいです。回答のほどお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • ozwk

    2016/01/15 16:46

    何が聞きたいんですか?

    キャンセル

  • cateye

    2016/01/15 17:13

    何かの課題でしょうか?
    課題なら自分で解いたところまで書いて、分からない所を質問しましょうd^^

    キャンセル

回答 3

checkベストアンサー

+1

問題文に沿った方法と、それとは違う方法5つを書いてみました。

count = 0
for i in ar
  count += 1 if i == 'ダイヤ' || i == 'ハート'
end
puts "赤いカードの数 = #{count}"

red_cards = %w(ダイヤ ハート)
count2 = 0
ar.each do |card|
  count2 += 1 if red_cards.include?(card)
end
puts "赤いカードの数 = #{count2}"

count3 = ar.count { |card| red_cards.include?(card) }
puts "赤いカードの数 = #{count3}"

count4 = ar.select { |card| card == 'ダイヤ' }.count + ar.select { |card| card == 'ハート' }.count
puts "赤いカードの数 = #{count4}"

count5 = ar.sort.reverse.index('スペード')
puts "赤いカードの数 = #{count5}"

grouped = ar.group_by{ |x| x }.map{|k, v| [k, v.size] }.to_h
p grouped
puts "赤いカードの数 = #{grouped['ダイヤ'] + grouped['ハート']}"

他にもあると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

Rubyですとこんな感じですかね。

result = ar.select { |x| /ダイヤ|ハート/ =~ x }
p "赤いカードの数 = #{result.count}"

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

かんがえてみたんですけど、ifの中の書き方、puts"赤いカードの数"の表し方が間違っているみたいです。回答のほどお願いします。

別に間違って無さそうです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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