平成20年春午後問4(リストの操作のアルゴリズム)

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
まきさん  
(No.1)
  すみません、大分古い問題ですが解説をお願い致します。
  平成20年春  問4  リスト操作のアルゴリズムを解説をお願い致します。
  問題の趣旨は
①makelist(リストを作成して、リスト追加をするプログラム)
②organizingSearch(そのリストから文字列を探して先頭に持ってきて並べるプログラム)
というのはわかりました。

解説をお願いする部分
a-dまでの具体例を書いて理解したいのですが、どういう風に解法を導くようにすればいいのかわかりません。参考書を見ても全く分からないので困っています。
よろしくお願いします
2018.05.01 21:41
mitochaosさん 
(No.2)
どの程度の知識をお持ちかわかりませんので、とりあえずaダ系の説明をします。まず具体例をとのことですが、問題にある「図1リストの例」が具体例です。長方形の上の段Nextの値があり、下の段にValueの値があります。たとえばList[1].Nextは2で、List[1].Valueはramです。追加する前の最後のデータはリストの数ListsizeですのでList[Listsize-1]です。MakeListは入力するデータをリストの最後に追加するとなっていますのでList[Listsize-1].Nextが追加するデータを指すようにします。追加するデータはList[Listsize]
2018.05.02 17:43
mitochaosさん 
(No.3)
すみません、パソコンの操作ミスで途中で投稿してしまいました。続きを投稿します。
追加するデータはList[Listsize]にありますから、List[Listsize-1].Next←Listsizeがaの答えになります。
この説明でお分かりいただけたでしょうか?
2018.05.02 17:51
ちっさいおじさんさん 
(No.4)
お勉強お疲れ様です。
私自身、初めての問題でした。有難うございます。
プログラムは、最初は細部に行きすぎず、
全体の流れを把握するとおおよそ見えてくることがあります。
OrganizationSearchでは、検索した値を先頭に持ってくるんだな、
Currentは、日本語で「今の」「現在の」という意味なので、要素をひとつひとつ調べて行く過程での現在地くらいの意味なんだろうなくらいの当たりをつけて見ていくといいと思います。
b,c,d欄は、Svalueに一致した[Current].Valueが見つかったときの動作ですので、問題文の例にあてはめれば、
Nextである3を代入すべき場所がb,
新たにNextに代入すべき0である変数Firstがc,
新たにFirstに代入すべき2である変数Currentがd,
ということになります。
bは少しひねられていますが、
Cutrentのひとつ前のNextですので、
Svalueに一致しない間に更新してきたCurrentの1個前の値が保存されているTemp
に目が向けば正答が得られるでしょう。

どの参考書をお使いなのか分かりませんが、
この欄でご理解いただけるように書くのは難しいです。
出来れば、参考書の名前をご紹介いただいて、この部分がわからないと書いていただければ、
それを持っている人がより適切なコメントしてくれると思いますよ。
2018.05.03 01:12
まきさん  
(No.5)
ありがとうございます。どうしてもアルゴリズムの問題に対しては、理屈が分かればいいのですが、問題の流れがわからないと難しく考えてしまい、流れがつかめずにいました。
今は問題が分からないですが、過去の問題をトレースして練習することをひたすらしています。
パターンを知ることも大切なので。
出典は、インホテックサーブの(基本情報技術者  午後問題集からです)

2018.05.03 21:25
まきさん  
(No.6)
ありがとうございます。問題を見てもリスト構造を理解してないため、苦戦をしました。
またそこからやり直しします。
2018.05.03 21:29
コマ大情報科さん 
(No.7)
この投稿は投稿者により削除されました。(2018.05.21 05:17)
2018.05.21 05:17
コマ大情報科さん 
(No.8)
この投稿は投稿者により削除されました。(2018.05.19 15:15)
2018.05.19 15:15
コマ大情報科さん 
(No.9)
この投稿は投稿者により削除されました。(2018.05.19 15:15)
2018.05.19 15:15
まきさん  
(No.10)
ありがとうございます??早速実践します
2018.05.14 12:30
コマ大情報科さん 
(No.11)
この投稿は投稿者により削除されました。(2018.05.21 05:15)
2018.05.21 05:15
コマ大情報科さん 
(No.12)
この投稿は投稿者により削除されました。(2018.05.21 05:15)
2018.05.21 05:15
コマ大情報科さん 
(No.13)
この投稿は投稿者により削除されました。(2018.05.21 05:15)
2018.05.21 05:15
まきさん  
(No.14)
コマ大情報科さん

実行プログラムなのですが
Option Explicit

Sub stack()  ←黄色
Dim listsize As Integer
Dim First As Integer

Type Prelist  ←実行するとプロシージャ内では無効ですとででしまいます。どうしてですか?

    next As Integer
    Value As String
End Type
Dim List(10) As Prelist

Dim i As Integer
Dim mvalue, svalue As String
Dim search, hitNo, result   '追加変数

'問題文 『next = -1 : 初期値は-1』処理部  (100→10:F8連打対策)
For i = 0 To 9
    List(i).next = -1
Next

listsize = 0
First = -1

Do
    mvalue = InputBox("追加文字列 【終了:00】 【検索~OrganizingSearch部:99】")
    
    If mvalue = "00" Then
        Exit Do
    ElseIf mvalue = "99" Then
        svalue = InputBox("検索文字は?")
        hitNo = OrganizingSearch(svalue)
        MsgBox ("検索文字:" & svalue & "は、添字:" & hitNo)
    Else
        Call MakeList(mvalue)
    End If
Loop

If listsize <> 0 Then
    List(listsize - 1).next = listsize
Else
    First = 0
End If

List(listsize).Value = mvalue
listsize = listsize + 1

End Sub

Function OrganizingSearch(svalue)


Dim current As Integer
Dim temp As Integer

current = First

Do While current <> -1
    If List(current).Value = svalue Then
        If current <> First Then
            List(temp).next = List(current).next
            List(current).next = First
            First = current
        End If
        Exit Do
    Else
        temp = current
        current = List(current).next
    End If
    
Loop

OrganizingSearch = current

 
End Function
2018.05.19 20:58
コマ大情報化さん 
(No.15)
この投稿は投稿者により削除されました。(2018.05.21 05:16)
2018.05.21 05:16
コマ大情報科さん 
(No.16)
この投稿は投稿者により削除されました。(2018.05.21 05:16)
2018.05.21 05:16
まきさん  
(No.17)
コマ大情報科さん
Sub MakeList(mvalue)
'◆副プログラム「MakeList」部
'  みてわかる通り、ほぼ問題文のソースままです
'  ↑大嘘、ごっそり 「If」部が一つぬけてました、誰もこんな意味不明投稿読んでないか
'  「F8連打」 と 「ローカルウィンドウ」 を あわせることで 変数の遷移をトレース可能です

If listsize <> 0 Then
    List(listsize - 1).next = listsize
Else
    First = 0
End If

List(listsize).Value = mvalue  ←黄色になります。(デバッグが無効とでます)
listsize = listsize + 1

End Sub
実行できるのですが、デバッグが無効とでます。にすいません。
2018.05.20 08:49
コマ大情報科さん 
(No.18)
この投稿は投稿者により削除されました。(2018.05.20 14:44)
2018.05.20 14:44
コマ大情報科さん 
(No.19)
この投稿は投稿者により削除されました。(2018.05.21 05:16)
2018.05.21 05:16
コマ大数学科さん 
(No.20)
まきさん、結果はどうでした?
VBAの詳細なディティールや問題文をプログラムにおこせるスキルは試験学習においてまったく必要ないものですし、極論、PCを所有していなくても、頭と紙だけで十分です。むしろ、頭と紙の上で問題文を自己再現できるアルゴリズム力(造語)こそが、要求される資格であり、ツギハギプログラミング力よりも遙かに重要な基礎力です。その辺は、起動成功・失敗どちらにせよ、気にされる必要はないと思います。
ヘタな動画や文字解説より遙かにソリッドな(1000を越えるサンプルでも一切の誇張も省略もない)正答例を提示できるツールを提示できたという自負も事実ですが。

なによりも掲示板を散らかしてしまい、管理人様、申し訳ありませんでした。
それでは。
2018.05.21 05:14

返信投稿用フォーム

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

その他のスレッド


Pagetop