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

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

新規登録して質問してみよう
ただいま回答率
85.50%
基本情報技術者

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

Q&A

解決済

3回答

2237閲覧

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

ai5

総合スコア40

基本情報技術者

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

0グッド

0クリップ

投稿2017/03/22 08:55

基本情報技術者

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

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

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

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

イメージ説明

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2017/03/22 09:14

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

2017/03/22 15:24 編集

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

2017/03/23 02:20

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

2017/03/23 07:36

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

回答3

0

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

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

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

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

投稿2017/03/22 09:04

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ai5

2017/03/23 07:48

ありがとうございます。まさにどこがわからないかわからないといった部分に近く、そういった意味では後者の処理の内容を追えないです。 ネットでしらべて別の解答を探したりしてもやはりわからないままです。。。 短い期間で基本情報すべてやらなくてはいけなくていろいろ追い付いてないです
maisumakun

2017/03/23 07:53

記号の意味がわからないわけでないなら、下手に思い悩むより、バカ正直に線に沿って値を動かしてみましょう。 コンピューターの中身も、「バカ正直に繰り返す」ことがメインになっています。
guest

0

ベストアンサー

これは設問の図(フローチャート)の中にある、白抜きの四角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/22 09:25

編集2017/03/22 09:26
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ai5

2017/03/24 08:05

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

2017/03/24 08:11

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

0

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

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

投稿2017/03/22 13:49

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問