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

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

ただいまの
回答率

90.34%

  • 基本情報技術者

    49questions

    基本情報技術者とは、経済産業省が行う国家資格「情報処理技術者試験」の区分の一つです。試験ではプログラマーやシステムエンジニアなどIT業界で働くために必要とされる基礎知識や情報処理において論理的な考え方ができるか等が問われ、企業から高い評価を獲ることができ、IT業界の入門的な資格として人気があります。

【基本情報技術者】アルゴリズム

解決済

回答 3

投稿

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

ai5

score 32

基本情報技術者

情報処理はほぼ初心者に近く、多々わからないことがありますが、
ご教授のほどお願い致します。

そもそもアルゴリズムではある処理についてトレースしろと口酸っぱくいっていますが、知識がなければ正しいのかわからないままトレースしている可能性があると思います。

事実、下記問題がなぜ記載されているような答えになるのかいまいちわかりません。

問題文)配列A[n]には任意の数値があらかじめ設定されている。
ただしい処理内容は何か?

イメージ説明

答え)100個の数値中の負の数値の個数

解説)
A[N]と0を比較し、0よりも小さいときに、Sを一つ増やして、負の数値の個数を求めています。

出典:うかる福嶋先生の集中ゼミ 基本情報技術者

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • ikedas

    2017/03/22 18:14

    書籍のタイトルを正確に記していただけませんか。それとページ数も書いて下さい。

    キャンセル

  • swordone

    2017/03/22 18:45 編集

    自分でどこまでわかるのか、今現在どのような解釈をしているのか、説明を加えてみてください。それに対してであれば、ここがこう違うなどの指摘がしやすいです。

    キャンセル

  • swordone

    2017/03/23 11:20

    それと、質問を放置しすぎです。

    キャンセル

  • ai5

    2017/03/23 16:36

    ikedas さん うかる福嶋先生の集中ゼミ 基本情報技術者 午後アルゴリズム編58Pです。 swordone さんすみません、随時あちらもレスポンスしていきます。。。

    キャンセル

回答 3

+8

まず確認したいのですが、これが「わからない」というのは、次の2つだとどちらでしょうか。

  • フローチャートの記号の意味がわからない
  • 記号としての意味は知っているけれど、処理の内容を追えない

前者の場合は知識として得るとして、後者の場合、nのような一般項ではなく、まずは具体的な値、それも最初のうちは小さな値で処理を追いかけてみる、ということが役に立ちます。

実際のデバッグの際も、「整数の限界の値」とか「0」とか「挙動が変わる境目の値」など、具体的な特殊値を使ってバグがないか検証することがあります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/23 16:48

    ありがとうございます。まさにどこがわからないかわからないといった部分に近く、そういった意味では後者の処理の内容を追えないです。

    ネットでしらべて別の解答を探したりしてもやはりわからないままです。。。
    短い期間で基本情報すべてやらなくてはいけなくていろいろ追い付いてないです

    キャンセル

  • 2017/03/23 16:53

    記号の意味がわからないわけでないなら、下手に思い悩むより、バカ正直に線に沿って値を動かしてみましょう。

    コンピューターの中身も、「バカ正直に繰り返す」ことがメインになっています。

    キャンセル

checkベストアンサー

+1

これは設問の図(フローチャート)の中にある、白抜きの四角2か所(今は<と≧が入っている)が空欄になっていて、答えに書かれている内容から、「その答えを導き出せるような動きになるように図を完成させる」ものですよね。

まずフローチャートに出てくる変数(A、S、N)が何を表しているかを考えましょう。
そうすると、

  • ループがN>100までということは、Nは1~100までのループで、問題から100とはそもそもの値の個数であることが分かります
  • N を添え字に使っている A は配列ですから、これが入力元の配列であることが分かります
  • S は1ずつ増えるだけで減らない(減る処理がどこにもない)ので、何かのカウンタだと分かります

次にフローチャート内の菱形部分(A[N]:0)を考えます。これは分岐ですから、この比較結果によって処理が二通りに分かれていますね。一方のときのみ「S+1 → S」を通ります。これはつまり、「ある条件を満たしたら、S を1増やす」わけです。
そして答えとして欲しいのは「負数の数」ですから、この「ある条件」は「負数であること」となります。
このことから、このルートの条件は、A[N] と 0 との関係で、A[N]が負数であるときに成立する比較ですから、A[N] < 0 となることが分かります。
これで一方のルートが確定しましたから、もう一方はその逆、すなわち A[N] ≧ 0 のときとなります。

余談:
このフローチャートだと、最終結果として何を出力するかが書いてないので、問題としては不適切ですね。
実のところ、□の中身を逆にしても(正もしくは0の数をカウントしても)よいのです。最終出力を「100-S」としてしまえばよいのですから。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/24 17:05

    皆様ご回答ありがとうございました。
    tacsheavenさん、□の中身を逆にしても(正もしくは0の数をカウントしても)最終出力を「100-S」すれば成立するのを本質的に理解できないです。。

    行間に言葉を補っていただければ恐らく私でも理解できるかもしれません。。。。

    キャンセル

  • 2017/03/24 17:11

    図(フローチャート)には、ループの終わりのすぐあとに「終わり」となっています。つまりこの図には「何を答えとして出力する」が書いてありません。設問から答えとして表示して「欲しい」のは、負数の数と分かっています。
    100個のうちで負数の数をカウントしてSとしている(現在の図の状態)なら、Sを出力すればよいですが、逆に負数でないもの(正数もしくは0)をカウントしていたとしても(S→S+1につながっているほうを ≧ にした場合)、「全体から正数もしくは0の個数を引いたもの」は、負数のカウントですよね。ですからその場合 100-S を出力してしまえば、設問の条件は満たせるのです。
    そしてそもそもの図に「Sを出力する」が書いて無いので、どちらにしても「間違いではない」のです。だから設問が悪い、という話なのですけどね。

    キャンセル

0

この問題に関して問われていることは、「あなたはループ処理について理解できていますか?(プログラミング言語は問いません。)」という点だと思われます。

できれば、プログラムを書いてみるとよいと思われます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • 基本情報技術者

    49questions

    基本情報技術者とは、経済産業省が行う国家資格「情報処理技術者試験」の区分の一つです。試験ではプログラマーやシステムエンジニアなどIT業界で働くために必要とされる基礎知識や情報処理において論理的な考え方ができるか等が問われ、企業から高い評価を獲ることができ、IT業界の入門的な資格として人気があります。