Open31

勉強の記録

中井圭輔中井圭輔

2024年秋の試験を受ける予定だが、勉強が進まない。学習習慣をつけるべく、毎日の進捗状況を投稿することにした。

中井圭輔中井圭輔

2024年1月30日(火)30分勉強。2進数の計算の練習問題。2進数難しい。もっと練習せねば。

中井圭輔中井圭輔

2024年2月1日(木)20分勉強。
シフト演算と2進数のかけ算とわり算

【思ったこと】

  • 2進数を10進数、10進数を2進数に変換するコードを書きたくなった。
  • 負の2進数は「2の補数」に直してから10進数にする。そのまま10進数にしてはいけない(戒め)。
  • シフト演算を用いてかけ算とわり算をできるとある。解説を見ても分かったような分からないような...シフト演算はたくさん練習問題を解かないと身につかない気がする。
  • 2進数を10進数に直す練習もした方がよさそう。なれてないので、基本的なところでつまづいてしまう。
中井圭輔中井圭輔

2024年2月2日(金)20分勉強。
シフト演算の練習問題。難しい。
P42に2進数の乗算の流れ図が載っていた。これを基に乗算のコードを書きたい。

中井圭輔中井圭輔

2024年2月5日(月)20分勉強。
1-4:誤差について勉強(けたあふれ誤差とか)

思ったこと

  • 「10進数の0.1を2進数に変換すると無限小数になるので、四捨五入や切り捨てを行い誤差が発生する」→私は普段当たり前のように0.1を使って計算するが、そこには誤差が含まれているのだろうか
  • 誤差があっても問題を起こさないためにはどのような処理が必要か
  • 桁あふれ誤差や丸め誤差など5つの誤差が載っている。しかしこれらを普段あまり意識することはない。これらの誤差をパソコンで発生させて理解を深める。
  • またこれらの誤差が実際に問題になるのはどのようなケースか調べる。0.1なら消費税率とか問題になりそう
  • 丸め誤差、延々と続く計算を予め定めた規則に従い打ち切るとある。では私のパソコンでは円周率を何桁まで計算しているのだろうか。またその桁を変更することはできるのだろうか
中井圭輔中井圭輔

2024年2月6日(火)5分だけ勉強。
1-5 集合とベン図のところを読んだ。

基礎情報のときには補集合や差集合、対照差集合は無かった気がする。
演算記号に新しいものが出てきて面白い

補集合はひょっとして補数と関係あったりする...?調べねば

中井圭輔中井圭輔

2024年2月7日(水)勉強しなかった。広島について調べていたら時間が無くなった。

中井圭輔中井圭輔

2024年2月8日(木)10分勉強。ドモルガンの法則や論理演算。論理演算ムズい。練習を積まねば。

中井圭輔中井圭輔

2024年2月9日(金)5分勉強^^; 真理値表の問題解いた。論理演算の練習を積めば、if文とかの条件分岐を考えやすくなるかも

中井圭輔中井圭輔

2024年2月13日(火)2-1 思い出しておきたい数値計算たち。平方根とか対数とか。15分勉強。

対数全然分からなくなってつらみ

中井圭輔中井圭輔

2024年2月14日(水)ジャンプ読んでたので勉強しなかった。アスミカケル終わったのショック。なんで私が好きな作品ばかり打ち切りになるのか...

2024年2月15日(木)15分勉強。確率、マルコフ過程

中井圭輔中井圭輔

2024年2月16日(金)片付けしてたら遅くなったので勉強しなかった。時間の使い方を見直すべきかも

中井圭輔中井圭輔

2024年2月22日(木)20分ほど勉強

2-3 統計
特に言うことなし。正規分布、分散、標準偏差などが出た。懐かしい。
高校以来、数え切れないほど標準偏差の話を聞いてきた。しかしよく考えると、実際に何かの標準偏差を出した経験はあまりない。学生時代のレポートくらいのもので、あれはやりたくてやった訳ではない。自発的に算出したことはないかもしれない。一度身の回りの事象を測定して標準偏差を出してみると面白いかもしれない。缶の重さとか。葉の長さとか。

2-4 グラフ理論
全体的に私の知っているグラフでは無い。ちょっとピンとこなかった。ノードが出たけど、HTMLのノードも関連しているのだろうか。それならブラウザみたいにhtmlを表示する何かをつくれたりして?

グラフのデータ構造の項目

  • 東京または岡山の隣接行列や隣接リストを試すと面白いかも。

重み付きグラフ

  • 東京または岡山の最短経路探索をすると面白いかも
  • 路線図の最短経路探索するプログラムを考える

隣接行列とか重み付きグラフとかが世の中のどこに使われているのか調べる

中井圭輔中井圭輔

2024年2月24日(土)15分勉強

3-1 情報量
情報量とは「それがどのくらい起こりにくいか」を表す尺度
起こりにくいほど情報量が大きい
語感と意味が逆

中井圭輔中井圭輔

2024年2月25日(日)10分勉強
3-2 符号化とデータ圧縮 データ量の理論値

2024年2月26日(月)10分勉強
ハフマン符号化 ラングレス符号化
ハフマン符号化むずい
ラングレス符号化、分かりやすい。実際の画像データなどを圧縮してみると理解が深まるかも。できればモノクロ2値画像
ハフマン符号化も応用例を調べたい

中井圭輔中井圭輔

2024年2月27日(火)15分勉強
3-3 オートマトン
名前かっこいい。有限オートマトンのところを読んだ。
有限オートマトンをどのような場面で使っているのか知りたい。って毎回こんなこと言ってるな

中井圭輔中井圭輔

2024年2月28日(水)10分勉強

3-3 オートマトンのつづき、正規表現によるパターン表現
正規表現も有限オートマトンを用いるとある。有限オートマトンによる正規表現を自作する

中井圭輔中井圭輔

2024年3月4日(月)10分勉強

3-4 形式言語難しい。飛ばす

4-1 ビットとバイトとその他の単位 基本情報と全く同じ。

中井圭輔中井圭輔

2024年3月6日(水)10分勉強
2024年3月7日(木)5分

音声のサンプリング

中井圭輔中井圭輔

2024年3月27日(水)15分勉強 5-1論理回路
論理回路つくったら面白そう

中井圭輔中井圭輔

試験勉強だけでなく、プログラミングとか普段の勉強とかも載せることにした

中井圭輔中井圭輔

Visual Studio インストール

  1. マイクロソフトのサイトにアクセスする:https://visualstudio.microsoft.com/ja/downloads/
  2. 「コミュニティ」の無料ダウンロードをクリック
  3. VisualStudioSetup.exeファイルがダウンロードされるのでダブルクリックして実行
  4. インストールするコンポーネントを選択する。「.NETデスクトップ開発」にチェックを入れる
  5. 「インストール」をクリック。数分かけてインストールが行われる。
  6. インストールが完了したら再起動
中井圭輔中井圭輔

Vue.js メモ

Vue からしばらく離れた後でもすぐ思い出せるよう、メモを残す

初期設定

あとで書く

基本構造

<template>
  <!-- ここにHTML -->
</template>

<script>
// ここにJavaScript
</script>

<style>
/** ここにCSS */
</style>

<script>タグの中にいろいろ書ける

<script>
export default {
  // コンポーネント名
  name: "",

  // コンポーネント内で用いるデータ
  data() {},

  // メソッド
  methods: {},

  // 算出プロパティ。何らかの計算結果を返す
  computed: {},

  // ウォッチャー。監視対象の値の変更に応じて行う処理
  watch: {},

  // インポートしたコンポーネントを登録する
  components: {},

  // コンポーネントに登録できるカスタム属性
  props: {},

  // ここからライフサイクルフック(他にもいろいろある)
  // インスタンスがすべての状態関連オプションの処理を終了した後(?)に行う処理
  created() {},

  // レンダリングを終了し DOM ノードを生成した後に行う処理
  mounted() {},
};
</script>

v-bind

<template>
  <div>
    <input v-bind:value="text" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: "hoge",
    };
  },
};
</script>

TODO:ここに CodePen

省略形

<input :value="text" />

いろいろな属性で使える

<template>
  <div>
    <input :id="index" :class="className" :value="text" :disabled="disabled" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      index: "1",
      className: "aaa",
      text: "hoge",
      disabled: true,
    };
  },
};
</script>

TODO:ここに CodePen

v-if

<template>
  <div>
    <p v-if="condition">a</p>
    <p v-else>b</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      condition: false,
    };
  },
};
</script>

TODO:ここに CodePen

v-show

<template>
  <div>
    <p v-show="condition">a</p>
    <p v-show="!condition">b</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      condition: false,
    };
  },
};
</script>

ブラウザでの表示は以下のようになる

<div>
  <p style="display: none;">a</p>
  <p style="">b</p>
</div>

TODO:ここに CodePen

v-if・v-show の違い

v-if:非表示のとき、要素が DOM から削除される
v-show:要素は常に DOM に保持され、CSS で表示・非表示を切り替える

表示の切り替えが頻繁に行われるときはv-show、それほど切り替えが行われないときはv-ifがよい

参考:Vue.js の v-if と v-show の違い

v-for

<template>
  <ul>
    <li v-for="(item, index) in items" v-bind:key="index">
      {{ item.message }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [{ message: "hoge" }, { message: "fuga" }, { message: "piyo" }],
    };
  },
};
</script>

TODO:ここに CodePen

v-on

<template>
  <div>
    <button v-on:click="onClick">button</button>
  </div>
</template>

<script>
export default {
  methods: {
    onClick() {
      alert("click");
    },
  },
};
</script>

TODO:ここに CodePen

省略形

<button @click="onClick">button</button>

v-model

v-modelを用いると「双方向バインディング」なるものを使えるらしい

<template>
  <div>
    <input v-model="text" />
    <p>{{ text }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      text: "hello",
    };
  },
};
</script>

TODO: ここに CodePen

算出プロパティ

何らかの計算結果を返す

<template>
  <div>{{ isMoreThanThreePerson }}</div>
</template>

<script>
export default {
  data() {
    return { persons: ["Tanaka", "Sato", "Yamada", "Fujiwara", "Watanabe"] };
  },
  computed: {
    isMoreThanThreePerson() {
      return this.persons.length > 3 ? "3人より多い" : "3人以下";
    },
  },
};
</script>

TODO:ここに CODEPEN

methods との違い

算出プロパティではなくメソッドでも同じことができる

<template>
-  <div>{{ isMoreThanThreePerson }}</div>
+  <div>{{ isMoreThanThreePerson() }}</div>
</template>

<script>
export default {
  data() {
    return { persons: ["Tanaka", "Sato", "Yamada", "Fujiwara", "Watanabe"] };
  },
-  computed: {
+  methods: {
    isMoreThanThreePerson() {
      return this.persons.length > 3 ? "3人より多い" : "3人以下";
    },
  },
};
</script>

算出プロパティは同じ値による計算だと以前の結果を返す(キャッシュ)。したがって多くの計算を必要とする処理に向いている。メソッドは再描画の度に関数を実行するので、キャッシュしたくない場合に用いる。

ウォッチャー

監視対象の値の変更に応じて処理を行う

<template>
  <div>
    <button @click="number++">button</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      number: 0,
    };
  },
  watch: {
    // 監視対象(変更前の値, 変更後の値)
    number(newValue, oldValue) {
      // 行う処理
      alert(newValue, oldValue);
    },
  },
};
</script>

TODO:ここに CodePen

参考

Vue.js 公式ドキュメント

中井圭輔中井圭輔

VB.NETで英単語アプリをつくった

VB.NET 入門 英単語アプリを作ろう|ひろにもブログ」にて紹介されていた練習用アプリ。何も見ずに書いたので、記録として残す

Form1.vb
Public Class Form1
    Dim question() As String = {"リンゴ", "学校", "鉛筆", "机", "鞄", "本", "部屋", "コップ", "椅子", "頭"}
    Dim answer() As String = {"apple", "school", "pencil", "desk", "bag", "book", "room", "cup", "chair", "head"}
    Dim count As Integer = 0

    ''' <summary>
    ''' 読み込み時の処理
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Form1_Activate(sender As Object, e As EventArgs) Handles Me.Load
        number.Text = $"第{count + 1}問"
        questionLabel.Text = question(0)
    End Sub

    ''' <summary>
    ''' 答えボタン
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles answerBtn.Click
        answerLabel.Text = answer(count)
        If input.Text = answer(count) Then
            result.Text = "○"
            result.ForeColor = Color.Red
        Else
            result.Text = "×"
            result.ForeColor = Color.Blue
        End If
    End Sub

    ''' <summary>
    ''' 戻るボタン
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles backBtn.Click
        count = count - 1
        number.Text = $"第{count + 1}問"
        questionLabel.Text = question(count)
        answerLabel.Text = ""
        input.Text = ""
        result.Text = ""
        If count = 0 Then
            backBtn.Enabled = False
        End If
        If count <> 9 Then
            nextBtn.Enabled = True
        End If
    End Sub

    ''' <summary>
    ''' 進むボタン
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub nextBtn_Click(sender As Object, e As EventArgs) Handles nextBtn.Click
        count = count + 1
        number.Text = $"第{count + 1}問"
        questionLabel.Text = question(count)
        answerLabel.Text = ""
        input.Text = ""
        result.Text = ""
        If count <> 0 Then
            backBtn.Enabled = True
        End If
        If count = 9 Then
            nextBtn.Enabled = False
        End If
    End Sub
End Class
Form1.Designer.vb
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナーで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
    'Windows フォーム デザイナーを使用して変更できます。
    'コード エディターを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.answerBtn = New System.Windows.Forms.Button()
        Me.backBtn = New System.Windows.Forms.Button()
        Me.nextBtn = New System.Windows.Forms.Button()
        Me.number = New System.Windows.Forms.Label()
        Me.answerLabel = New System.Windows.Forms.Label()
        Me.questionLabel = New System.Windows.Forms.Label()
        Me.input = New System.Windows.Forms.TextBox()
        Me.result = New System.Windows.Forms.Label()
        Me.SuspendLayout()
        '
        'answerBtn
        '
        Me.answerBtn.Location = New System.Drawing.Point(96, 196)
        Me.answerBtn.Name = "answerBtn"
        Me.answerBtn.Size = New System.Drawing.Size(101, 47)
        Me.answerBtn.TabIndex = 0
        Me.answerBtn.Text = "答え"
        Me.answerBtn.UseVisualStyleBackColor = True
        '
        'backBtn
        '
        Me.backBtn.Enabled = False
        Me.backBtn.Location = New System.Drawing.Point(120, 332)
        Me.backBtn.Name = "backBtn"
        Me.backBtn.Size = New System.Drawing.Size(136, 52)
        Me.backBtn.TabIndex = 1
        Me.backBtn.Text = "前の問題"
        Me.backBtn.UseVisualStyleBackColor = True
        '
        'nextBtn
        '
        Me.nextBtn.Location = New System.Drawing.Point(504, 332)
        Me.nextBtn.Name = "nextBtn"
        Me.nextBtn.Size = New System.Drawing.Size(136, 52)
        Me.nextBtn.TabIndex = 2
        Me.nextBtn.Text = "次の問題"
        Me.nextBtn.UseVisualStyleBackColor = True
        '
        'number
        '
        Me.number.AutoSize = True
        Me.number.Location = New System.Drawing.Point(69, 69)
        Me.number.Name = "number"
        Me.number.Size = New System.Drawing.Size(56, 18)
        Me.number.TabIndex = 3
        Me.number.Text = "第1問"
        '
        'answerLabel
        '
        Me.answerLabel.AutoSize = True
        Me.answerLabel.Font = New System.Drawing.Font("MS UI Gothic", 11.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
        Me.answerLabel.Location = New System.Drawing.Point(333, 210)
        Me.answerLabel.Name = "answerLabel"
        Me.answerLabel.Size = New System.Drawing.Size(0, 22)
        Me.answerLabel.TabIndex = 4
        '
        'questionLabel
        '
        Me.questionLabel.AutoSize = True
        Me.questionLabel.Font = New System.Drawing.Font("MS UI Gothic", 11.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
        Me.questionLabel.Location = New System.Drawing.Point(93, 102)
        Me.questionLabel.Name = "questionLabel"
        Me.questionLabel.Size = New System.Drawing.Size(0, 22)
        Me.questionLabel.TabIndex = 5
        '
        'input
        '
        Me.input.Location = New System.Drawing.Point(337, 99)
        Me.input.Name = "input"
        Me.input.Size = New System.Drawing.Size(300, 25)
        Me.input.TabIndex = 6
        '
        'result
        '
        Me.result.AutoSize = True
        Me.result.Font = New System.Drawing.Font("MS UI Gothic", 14.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
        Me.result.Location = New System.Drawing.Point(543, 214)
        Me.result.Name = "result"
        Me.result.Size = New System.Drawing.Size(0, 28)
        Me.result.TabIndex = 7
        '
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(10.0!, 18.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(800, 450)
        Me.Controls.Add(Me.result)
        Me.Controls.Add(Me.input)
        Me.Controls.Add(Me.questionLabel)
        Me.Controls.Add(Me.answerLabel)
        Me.Controls.Add(Me.number)
        Me.Controls.Add(Me.nextBtn)
        Me.Controls.Add(Me.backBtn)
        Me.Controls.Add(Me.answerBtn)
        Me.Name = "Form1"
        Me.Text = "英単語アプリ"
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub

    Friend WithEvents answerBtn As Button
    Friend WithEvents backBtn As Button
    Friend WithEvents nextBtn As Button
    Friend WithEvents number As Label
    Friend WithEvents answerLabel As Label
    Friend WithEvents questionLabel As Label
    Friend WithEvents input As TextBox
    Friend WithEvents result As Label
End Class
中井圭輔中井圭輔

FizzBuzz

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For i As Integer = 0 To 100
            If i Mod 15 = 0 Then
                System.Diagnostics.Debug.WriteLine($"{i}:FizzBuzz")
            ElseIf i Mod 3 = 0 Then
                System.Diagnostics.Debug.WriteLine($"{i}:Fizz")
            ElseIf i Mod 5 = 0 Then
                System.Diagnostics.Debug.WriteLine($"{i}:Buzz")
            Else
                System.Diagnostics.Debug.WriteLine(i)
            End If
        Next
    End Sub
End Class