HOME»応用情報技術者試験掲示板»令和4年春 午後問7 設問4(3)
投稿する
はい,その理解で正しいです。
リングバッファ内にデータが無い状態は,ごく普通に,頻繁に起こります。
No.3で紹介のあった H26秋 午後 問7 のように,
R=W(読出しインデックスの値 = 書込みインデックスの値)の状態を
「バッファ内に格納データなし」とするリングバッファの場合の
データ格納イメージはこうなります。
(文字位置がズレているので,等幅フォントの環境に文字列を貼り付けてください)
つまり,R=W を 格納データなし とするリングバッファ
であるなら,RとWの関係はこうなります。
・Rは格納データの先頭を指している(ただしR=Wの場合を除く)
・Wは格納データの末尾の「次」を指している
・格納できるデータの最大長は「リングバッファ長 ー 1」である。
送信されないでしょう。
送信対象となるのは,リングバッファ内に格納されているデータだけ
(回答No.4のイメージで説明するなら,位置Rから位置Wー1のデータだけ)
という範囲チェックはおこなわれているという前提でよいはずです。
それをしていないのなら,配列を扱うプログラムのバグですから。
令和4年春 午後問7 設問4(3) [4615]
尾根ギアさん(No.1)
https://www.ap-siken.com/s/kakomon/04_haru/pm07.html
読み取りポインタと書き込みポインタが一致している時は、異常なデータは送信されないのですか?
一致のタイミングは、購入してすぐの作動の時やデータを初期化した時、書き込みポインタがちょうど読み取りポインタに来た時など。
読み取りポインタと書き込みポインタが一致している時は、異常なデータは送信されないのですか?
一致のタイミングは、購入してすぐの作動の時やデータを初期化した時、書き込みポインタがちょうど読み取りポインタに来た時など。
2023.10.03 11:58
Rさん(No.2)
組み込みというのがポイントで、PCのように汎用的でリッチなメモリサイズを使うわけではありません。(最近はリッチなのかも)
組み込みでは決まった処理を行うため、メモリサイズを計算して最小限の構成とするためです。
したがって、処理で発生するデータサイズに対して十分なメモリサイズのリングバッファを使うと考えれば、読み取りポインタと書き込みポインタが一致することがないです。
組み込みでは決まった処理を行うため、メモリサイズを計算して最小限の構成とするためです。
したがって、処理で発生するデータサイズに対して十分なメモリサイズのリングバッファを使うと考えれば、読み取りポインタと書き込みポインタが一致することがないです。
2023.10.03 13:05
尾根ギアさん(No.3)
ありがとうございます。
データ量に関して理解できました。
一方で浅見を承知で聞きたいのですが、以下にも一致する場合が出たことがあり(設問2 (2))
https://www.ap-siken.com/s/kakomon/26_aki/pm07.html
本問題に当てはめて想像したときに、購入してすぐのバッファがない初期の状態では一致した状態と考えたのですがいかがでしょうか?
他にも、バッファのデータを全て消去した場合も一致するのかどうか。
となるといつ読み取りポインタと書き込みポインタがズレるのかが分からず。
それとも、リングバッファの初期状態は読み取りポインタと書き込みポインタの位置が違う仕様になっているのでしょうか?
データ量に関して理解できました。
一方で浅見を承知で聞きたいのですが、以下にも一致する場合が出たことがあり(設問2 (2))
https://www.ap-siken.com/s/kakomon/26_aki/pm07.html
本問題に当てはめて想像したときに、購入してすぐのバッファがない初期の状態では一致した状態と考えたのですがいかがでしょうか?
他にも、バッファのデータを全て消去した場合も一致するのかどうか。
となるといつ読み取りポインタと書き込みポインタがズレるのかが分からず。
それとも、リングバッファの初期状態は読み取りポインタと書き込みポインタの位置が違う仕様になっているのでしょうか?
2023.10.03 14:08
jjon-comさん(No.4)
★AP プラチナマイスター
> 購入してすぐのバッファがない初期の状態では
> 一致した状態と考えたのですがいかがでしょうか?
> 他にも、バッファのデータを全て消去した場合も一致するのかどうか。
はい,その理解で正しいです。
リングバッファ内にデータが無い状態は,ごく普通に,頻繁に起こります。
No.3で紹介のあった H26秋 午後 問7 のように,
R=W(読出しインデックスの値 = 書込みインデックスの値)の状態を
「バッファ内に格納データなし」とするリングバッファの場合の
データ格納イメージはこうなります。
(文字位置がズレているので,等幅フォントの環境に文字列を貼り付けてください)
リングバッファにデータが2個格納されている状態
R W
↓ ↓
□□□■■□□□□□
0123456789
リングバッファにデータが1個格納されている状態
RW
↓↓
□□□■□□□□□□
0123456789
リングバッファにデータが無い状態
R=W
↓
□□□□□□□□□□
0123456789
リングバッファ内に最大長のデータが格納されている状態
WR
↓↓
■■□■■■■■■■
0123456789
R W
↓ ↓
□□□■■□□□□□
0123456789
リングバッファにデータが1個格納されている状態
RW
↓↓
□□□■□□□□□□
0123456789
リングバッファにデータが無い状態
R=W
↓
□□□□□□□□□□
0123456789
リングバッファ内に最大長のデータが格納されている状態
WR
↓↓
■■□■■■■■■■
0123456789
つまり,R=W を 格納データなし とするリングバッファ
であるなら,RとWの関係はこうなります。
・Rは格納データの先頭を指している(ただしR=Wの場合を除く)
・Wは格納データの末尾の「次」を指している
・格納できるデータの最大長は「リングバッファ長 ー 1」である。
2023.10.03 19:40
jjon-comさん(No.5)
★AP プラチナマイスター
> 読み取りポインタと書き込みポインタが一致している時は、
> 異常なデータは送信されないのですか?
送信されないでしょう。
送信対象となるのは,リングバッファ内に格納されているデータだけ
(回答No.4のイメージで説明するなら,位置Rから位置Wー1のデータだけ)
という範囲チェックはおこなわれているという前提でよいはずです。
それをしていないのなら,配列を扱うプログラムのバグですから。
2023.10.03 19:52
尾根ギアさん(No.6)
なるほど、そうことだったんですね!
懇切丁寧な回答いただきありがとうございました。
懇切丁寧な回答いただきありがとうございました。
2023.10.03 22:52