大滝みや子先生のトレーニングブックより(4)

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
まきさん  
(No.1)
スレッド乱立させて申し訳ございません。
大滝本のP174のプログラムの改良という問題につきまして

 >mzcisskさん
丁寧な解説ありがとうございました。概要はそう言った背景があるんだと分かりました。

この問題で2つほど質問があります。
例題
①S1←sub(r)の位置。他のページを見ると、外側のfor文の外にあるのに
行番号1に代入文が入るのに行番号3に代入しているのが不明です。欄外にfor文内でrの値を変更することはありませんと謳われるのにどうしてですか
②選択肢のウとエにある
行番号4  xrc←x(r,c)
行番号5  if(xrc>s1)
行番号6  xrc←S1

xrcは代入しただけの変数のなのでS1の値を変更することが出来ないとあるのですが
例えば  r=4 c=5 S1=10とした時に
行番号4  20x←x(4、5)
行番号5  if(20x>10)
行番号6  20x←10

という意味不明なことをするということですか
③イの選択肢で
行番号5  if(x[r,c]>s1) ここのS1も比較だけされているから呼び出しではない
行番号6  x[r,c]←S1 ここで呼び出しするから1回となるのですか
  
また質問がもう1つあります。
P178からの複合条件なのですが(同じ問題が福嶋本にもあります)
1,テストケース①でa<10の時点で真である。だからb<20は評価しない
同様にc>10 偽の時だからd>10は評価しない
a  b  c  d    a <10 真    b評価しない
9 19 10 10    c <10 偽    d評価しない

2,テストケース②
a   b   c   d
10  20  11  11 a<10 偽    評価する
               b<20 偽    評価する
               c>10 真    評価する
               d>10 真    評価する

ということからすべて正解の単独条件が評価すると書いてありますが

テストケース①とテストケース2の違いが分かりません。
この問題の単独条件とはどのような意味を成しているのすか。

応用問題で1回目で苦戦しています。
繰り返しやれば力は付くのでしょうか
2023.07.14 13:50
まきさん  
(No.2)
大滝本で辛いと言っているうちは、まだまだ実力が足らないのですか?まだ1回目です。
2023.07.14 14:57
電タックさん 
FE ブロンズマイスター
(No.3)
そちらの書籍を持っていないので質問の意図とあっているか不明ですが
予想できそうだったので書いてみます。
※見当違いだったら読み捨ててください。

ちなみになのですがIPAの言語仕様
https://www.ipa.go.jp/shiken/syllabus/ps6vr7000000i9dp-att/shiken_yougo_ver5_0.pdf
に、よくある言語の仕様には「左辺から云々・・・」という決めごとがあるのですが、複合条件および処理が並んでいた場合にどのように評価していくかの順序の記載がないため同一の優先順位を伴う処理は「存在しない。」もしくは「その部分が問題になるような出題はしない。」と考えて良いと思います。

例:3x4+5x6
3x4からやってるのか5x6やっているのかが不明ということです。
この不明な部分を考えないと行けないような出題は無いと思います。
ですがこの答えは42ですよね?順序なんて気にしない部分は問題にしてくるかも・・・

■単独条件とは
> 10  20  11  11 
> a<10 偽    評価する
> b<20 偽    評価する
> c>10 真    評価する
> d>10 真    評価する
このa,b,c,dのそれぞれ(偽、偽、真、真)の事だと思います。

これは予測ですが、こちらのb,d評価しないは先に上げた同一演算子による処理順序が影響しよくある処理系であれば左辺から処理されます。
その上で、「a or b」と「c and d」と考えれば筋が通ります。
> a  b  c  d    a <10 真    b評価しない
> 9 19 10 10    c <10 偽    d評価しない

予測:a or b
a真とb(不明)の場合に左辺で真が選ばれている以上、何をorした所で真になるので、右辺(後の評価処理)は評価しない

予測:c and d
c偽とd(不明)の場合に左辺で偽が選ばれている以上、何をandした所で偽になるので、・・・同上

長くなるのでabだけを真偽値表で表すと以下です。
a|b|Xor|Yand
真|真|真_|真
真|偽|真_|偽
偽|真|真_|偽
偽|偽|偽_|偽

テストケース①のa
Xの1・2行目のことですが3・4行目であった場合右辺のbを評価するまでorの結果は確定できません。そのため評価が必要になります。
テストケース①のc(a=c,b=d)
Yの3・4行目のことですが1・2行目であった場合右辺のb=dを評価するまでandの結果は確定できません。そのため評価が必要になります。

この確定できません・・・の部分がテストケース②の真偽値であると分かります。
2023.07.14 15:16
電タックさん 
FE ブロンズマイスター
(No.4)
で結局何が書きたかったかですが
時間はかかると思いますが評価の有無は考慮すること無く、いかなる時も全部評価してしまうのが間違いないと思います。

なれて来てから効率を求めればいいです。
2023.07.14 15:34
mzcisskさん 
(No.5)
すいませんが私自身も今追い込み中なので、レスをつけるのは厳しいです。
試験後にレスさせていただきます。
2023.07.15 14:24
まきさん  
(No.6)
すみませんご教授ありがとうございます。
2023.07.15 14:48
まきさん  
(No.7)
皆様お待ちしております。
2023.07.16 09:13
mzcisskさん 
(No.8)
①について
そもそも変数rはfor文の中では引数や二次元配列の行番号としてしか使われていません。
x[r,c]への代入はありますが、これはxという名前の二次元配列のr行c列への代入でしかない為、変数r自体への代入がされるわけではありません。

②について
例題に挙げられている元々のプログラム自体、示されている処理の最終目的は二次元配列x[r,c]へのsub(r)の処理結果の代入です。
xrcはx[r,c]の値を代入したものでしかなく、ここに直接sub(r)の結果を代入しようが、sub(r)の結果を代入したs1の値を代入しようが、x[r,c]には何も代入されません。
よって、ウやエでは元々のプログラムの最終目的を果たせない為、どちらもNGになります。

③について
どちらもsub(r)の結果を比較・代入する回数は元々の例題と変わりません。
しかし、イの選択肢であれば既にsub(r)の結果はs1に代入されています。
if(x[r,c]>sub(r))またはif(x[r,c]>s1)は間違いなくr×c回繰り返されますが、r×c回もsub(r)の処理をしてからその結果をx[r,c]と比較する前者より、単にr×c回変数s1をx[r,c]と比較する後者の方が圧倒的に速いのは明白です。
x[r,c]←sub(r)とx[r,c]←s1も正確な回数は分かりませんが、sub(r)の結果がs1である以上、繰り返し回数が同じことは明白です。
繰り返し回数が1回以上あれば当然後者が速いですし、繰り返し回数が0であれば速さはイコールにはなるものの、少なくとも前者が速いということはありません。

p.178の件はまた後ほど。
2023.07.16 20:32
mzcisskさん 
(No.9)
p.178について
テストケース①
一つ目のif文が意味しているのは「aが10未満またはbが20未満」です。
テストケース①はaもbも条件を満たしていますが、「左から右に向かって順に評価」するので、aの数値9をif文の条件(a<10)と比べた(評価した)時点でこの条件はOK、つまり真になります。
「または」なので、aかbどちらか一つだけでも真ならばif文自体が真なのですが、aを先に評価し、そこで真が確定するので、わざわざbの比較(評価)を行う必要がないのです。
だから「b<20は評価されない」となります。

二つ目のif文が意味しているのは「cが10より大きいかつdが10より大きい」です。
こちらの場合、テストケースはcもdも条件を満たしていません。
ここでも「左から右に向かって順に評価する」ので、cの数値10をif文の条件(c>10)と比べた(評価した)時点でこの条件はNG、つまり偽になります。
「かつ」なので、cとdのどちらか一つだけでも偽ならばif文自体が偽なのですが、cを先に評価し、そこで偽が確定するので、わざわざdの比較(評価)を行う必要がないのです。
だから「d>10は評価されない」となります。

テストケース②も考え方は同じです。
逆にaやcを評価しただけではif文自体の真偽を確定できない為、bやdも評価する必要があるわけです。
2023.07.16 21:05
まきさん  
(No.10)
>mzcisskさん
丁寧な解説ありがとうございました。
1つ1つ聞いてよろしいですか理解できないまま進めると自分が困るので、すみませんがよろしくお願いいたします。

①の解説は分かりました。x[r,c]って二次元配列なんですね。そこすらもわかりませんでした。やはり基礎が出来てないことが分かりました。

②の解説で
>xrcはx[r,c]の値を代入したものでしかなくとあるのですが
例えば2行3列に直接sub(r)の結果を代入しようが、sub(r)の結果を代入したs1の値を代入しようが、x[r,c]には何も代入されませんと解説されていますが・・・
ウ、エの例で r=5 c=4 s1=10とした時に
4行目 x54←x[5,4]
5行目 x54>10
6行目 x54←10  
(10を代入するという意味不明なアルゴリズムしているということでしょうか。一つ前のスレッドにも書きました。これで理解してますでしょうか)

もし5行4列に代入するなら (s1=10)
x[5,4]←Sub(r)またはx[5,4]←s1  
        10                    10
というコーディングとしなければならない。
なのでウとエは目的に反しているということですね。

③の解説にて
>if(x[r,c]>sub(r))またはif(x[r,c]>s1)は間違いなくr×c回繰り返されますが、
r×c回もsub(r)の処理をしてからその結果をx[r,c]と比較する前者より、単にr×c回変数s1をx[r,c]と比較する後者の方が圧倒的に速いのは明白ですと解説されていますが・・・。

そもそも
(1)sub(r)の関数処理後にx[r,c]で比較後また関数呼出して代入するのより
(2)最初に変数宣言して、s1(変数)とx[r,c]と比較して変数代入するのではこちらのほうが明らかに速い

→(1)関数の呼出が2度手間ということですね。
結局やっていることは二次元配列x[r,c]へのsub(r)の処理結果の代入ということが頭に浮かべれるになります。

こういった問題はトレースはどのようにしたらよろしいですか。

長文すみません

P178の問題につきましては別途書きます
2023.07.17 17:42
mzcisskさん 
(No.11)
②はそういうことです。
なお、xrcはそれだけで一つの変数です。
名前は似ていますが、配列xや変数r・cと直接関係があるわけではありません。
よって、rが5、cが4だからとx54と名前が変わることはありません。

③に関してもそういう理解で良いかと思います。

トレースする場合はsub(r)の処理をどう記録するかが問題ですが、「sub(r)呼び出し」とその度にメモをつけておくのが良いかと思います。
sub(r)は時間がかかる、つまりボトルネックなのですから、トレース中にsub(r)の呼び出し回数(つまりメモをつけられた回数)が少ない選択肢が正解です。
繰り返し回数となるrMaxやcMaxは1か2程度に設定した方がいいでしょう。
数を増やすとトレースが長くなります。
sub(r)の返り値は本来であればrが変わる度に変わるはずですが、この問題は関数subの内容にも返り値にも何も触れていないので、適当な数値で固定してしまって良いです。
2023.07.17 19:48
まきさん  
(No.12)
最後合格おめでとうございます
2023.07.17 21:53
mzcisskさん 
(No.13)
ありがとうございます。
応用情報技術者は…どうするか今考えてます。
2023.07.18 19:25
まきさん  
(No.14)
>mzcisskさん
再度丁寧な解説ありがとうございました。

自分で真偽表作ってみたら分かりました。
真=1  偽=0として

OR            テストケース①
a     b       a=1(真)の場合にはすべて真になる
0     0   0     
1     0   1
0     1   1
1     1   1

and          テストケース①
c     d
0     0   0   c=0(偽)の時にはすべて偽になる
1     0   0
0     1   0
1     1   1

だからb、dは評価されない

OR            テストケース②
a     b       a=0(偽)の場合には真、偽もどちらにもなる
0     0   0     
1     0   1
0     1   1
1     1   1

and            テストケース②
c     d
0     0   0    c=1(真)の時には真、偽になる
1     0   0
0     1   0
1     1   1

だから,すべての単独条件が評価されるというわけです。
ありがとうございました。
2023.07.20 11:25
まきさん  
(No.15)
>mzcisskさん
>電タックさん
トレーニング本にはこういったことが書かれてないんですよね。
私個人としては、なんでそう言ったことが書かれてないのか不思議で仕方ないです。不親切な本なのかと・・・・
2023.07.20 18:42
mzcisskさん 
(No.16)
>まきさん
その後、応用情報技術者試験も狙ってみようと技術評論社の合格教本を購入しました。
この本も「トレーニングブック」同様、筆者が大滝先生ですが、普通ならあるはずの説明がなかったり、説明の順番がおかしかったりと元々文系の自分には非常にわかりづらい。

どうも大滝先生は元々既にある程度のレベルになっている人間以外は相手にする気がないみたいです。
(私自身も科目B対策で最初に買ったのが大滝先生のトレーニングブックだったら撃沈していたと思います。)

どうしてもダメなら他の先生の書いた本に逃げるしかないです。
事実、私は応用技術社試験についてはきたみ先生のキタミ式イラストIT塾のテキスト(こちらも技術評論社)に逃げました。
2023.07.22 18:39
まきさん  
(No.17)
この投稿は投稿者により削除されました。(2023.07.22 19:26)
2023.07.22 19:26
まきさん  
(No.18)
>mzcisskさん
解答ありがとうございました.

今、重点対策でもじっくりやって(1回目で苦戦してます。繰り返しが重要)
パイザでプログラム組んでみて、もう一回大滝本やって出来なければ橋本本やります。その上でパーフェクトラーニングやってみて受験します。

まだまだサンプル問題がよくわからないものが多いので練習積みます。
自信がないためです(解説何回聞いても分からないものが結構ある)
どんな問題が出るのか自分でも把握できておらずにいます
2023.07.22 19:44

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop