投稿

9月, 2020の投稿を表示しています

ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

HTML5 Canvasで簡単な論理回路図を描いてみた

今回は、HTML5 CanvasのAPIを利用し、伝統的な論理ゲート記号によって簡単な論理回路図を描く手順について書き留める。 同じ論理ゲート記号を複数回使うことになるので、それらの論理ゲート記号を描く機能の一部をまずは 函数 かんすう 化してみた。 ここでは、オブジェクトを初期化するための特別な函数であるコンストラクター函数と呼ばれるものを使ってみた。コンストラクター函数はまるでクラスのように働き、これによって同じ種類の異なるオブジェクトを量産することができるようになる。 NANDゲート記号をコンストラクター函数化 実用論理ゲートだけによって基本論理ゲートと同じ機能を実現できることを示す論理回路図を描くため、NANDゲート記号のソースコードをコンストラクター函数にまとめてみた。 コンストラクター函数の引数としては、第1と第2に座標を、第3には輪郭線の太さを、第4には指定することができるようにしてみた。 こうすることで異なる属性を持つ複数のオブジェクトを一つの雛形から描画することができるようになる。 コンストラクター函数NoAndGateのソースコードは次のとおり。使っているスクリプト言語はJavaScript。 <script> /* コンストラクター函数でNoAndGateオブジェクトを定義 引数にはx座標, y座標, 輪郭線の太さ, 輪郭線の色 */ function NoAndGate(argX, argY, lineW, argColor) { //座標のプロパティ this.x = argX; this.y = argY; //輪郭線の太さのプロパティ this.width = lineW; //本体部分の輪郭線の色のプロパティ this.color = argColor; /* 2つの頭部直線先端と1つの尾部直線先端の座標を表わすプロパティ hornPoint1: 頭部(左端)の上の直線の先端の座標 hornPoint2: 頭部(左端)の下の直線の先端の座標 tailPoint: 尾部(右端)の先端の座標 */ this.hornPoint1X = x+0; this.hornPoint1Y = y+11; this.hor

HTML5 Canvasでその他の論理ゲート記号を描く

今回は、HTML5 CanvasのAPIを利用してMIL(軍事)規格のXNORゲート記号を描いてみた。 XNORゲートのシンボルの完成図は次のとおり。 あなたのブラウザはCanvas要素に対応していません。 XNORゲートのシンボルは、XORゲートのソースコードとNORゲートのソースコードとを合成するだけなので簡単。XORゲートの本体部分の末尾に小さな円をくっつけ、さらにそこに接尾する直線の位置をそれに合わせてやや調節してやればよい。 まず前回の実用論理ゲート記号を描いたときのXORゲートのソースコード全体をコピー&ペーストし、NORゲートのソースコードにある小さな円を描く部分のソースコードを挿入した。さらに、本体部分に付属する三つの直線を描く部分のソースコードをNORゲートのソースコードのそれに置き換えた。 これだけでXNORゲートのシンボル図のソースコードは完成。それは次のようになる。 <!DOCTYPE html> <head> <title>HTML5 Canvasで論理ゲート記号を描く</title> </head> <body> <div style="text-align: center"> <canvas id="exclusiveNotOrGateSymbol" width="100" height="50"> あなたのブラウザはCanvas要素に対応していません。 </canvas> </div> <script> //特定のcanvas要素を取得して変数に代入 var canvas = document.getElementById("exclusiveNotOrGateSymbol"); //2次元描画コンテキストを取得して変数に代入 var context = canvas.getContext("2d"); //translate(x,y)メソッドで図形を平行移動できる context.translate(0, 0); //scale()メソッドで図形を上下左右に伸縮で

HTML5 Canvasで実用論理ゲート記号を描いてみた

今回はMIL(軍事)規格の論理ゲート記号を描いてみたその2。前回は基本論理ゲートであるORゲートとANDゲートとNOTゲートを描いた。今回は実用論理ゲートであるNORゲートとNANDゲートと、そしてXORゲートをHTML5 CanvasのAPIを利用して描いてみることにした。 NORゲート記号を描く NORゲートのシンボルの完成図は次のとおり。 あなたのブラウザはCanvas要素に対応していません。 NORゲートを描くためのHTMLとJavaScriptのソースコードは次のとおり。 <!DOCTYPE html> <head> <title>HTML5 Canvasで論理ゲートを描く</title> </head> <body> <div style="text-align: center"> <canvas id="notOrGateSymbol" width="100" height="50"> あなたのブラウザはcanvas要素に対応していません。 </canvas> </div> <script> //特定のcanvas要素を取得して変数に代入 var canvas = document.getElementById("notOrGateSymbol"); //2次元描画コンテキストを取得して変数に代入 var context = canvas.getContext("2d"); //translate(x,y)メソッドで図形を平行移動できる context.translate(0, 0); //scale()メソッドで図形を上下左右に伸縮できる context.scale(1,1); /* NORゲートの本体部分の輪郭線を描く */ //輪郭線の太さ context.lineWidth = 2; //輪郭線の色 context.strokeStyle = 'black'; //パス(軌道)を初期化 context.beginPath(); //輪郭線を描き始める座標 co

HTML5 Canvasで基本論理ゲート記号を描いてみた

MIL(軍事)規格の論理ゲート記号(もどき)をHTML5のcanvas要素に描いてみた。今回は、ORゲート、ANDゲート、NOTゲートの3つの基本論理ゲートだけを描いた。 ORゲートを描く まずはORゲートを描いてみた。出来上がりは次のとおり。 あなたのブラウザはCanvas要素に対応していません。 ORゲートのためのHTMLとJavaScriptのソースコードは次のとおり。 <!DOCTYPE html> <html lang="ja"> <head> <title>HTML5 Canvasで論理ゲート記号を描く</title> </head> <body> <div style="text-align: center"> <canvas id="orGateSymbol" width="100" height="50"> あなたのブラウザはcanvas要素に対応していません。 </canvas> </div> <script> //特定のcanvas要素を取得して変数に代入 var canvas = document.getElementById("orGateSymbol"); //2次元描画コンテキストを取得して変数に代入 var context = canvas.getContext("2d"); //translate(x,y)メソッドで図形を平行移動できる context.translate(0, 0); //scale()メソッドで図形を上下左右に伸縮できる context.scale(1,1); /* ORゲートの本体部分の輪郭線を描く */ //輪郭線の太さ context.lineWidth = 2; //輪郭線の色 context.strokeStyle = 'black'; //パス(軌道)を初期化 context.beginPath(); //輪郭線を描き始める座標 context.moveTo(12,2); //本体上辺

1+1=1になるとき。ブール代数、数理論理学、論理回路

ブール演算が扱う数は0と1の2つだけ。しかも 位取 くらいど りなし。つまり複数の桁を持たない。 0を偽に、1を真に、真理値として対応付けると、ブール演算を論理演算と同等に扱うことができる。その場合、偽はfalseの頭文字のF、真はtrueの頭文字のTと記されることがある。 あるいはまた、0をOFFに、1をONに、そしてまた、0を電圧の低さに、1を電圧の高さに対応付けることでブール演算をスイッチング演算と同様に見なすことができる。 集合演算もまた、これらと極めて近しい関係にあることを直感できるはず。 ちなみに数理論理学にはFとTに限られない2値以上の値を扱う多値論理演算がある。ここではそれらについては触れない。 ここでは数学としてよりもコンピューター科学としての目的に重きを置くため、ブール演算と2値論理演算とを同じものとして扱う。それらの定理の証明にはほとんど触れない。各々の論理演算は、コンピューターに使われているデジタル集積回路を構成するデジタル電子回路の基本単位となっている論理ゲートと呼ばれるものにそれぞれ対応している。 以下では、ブール演算のパターンと各々の真理値表、それらに対応する論理ゲートを表わすシンボルを記した。\( a, b, c, \cdots \)はここではブール変数を表わすものとする。 論理和 (OR) ブール代数の加法は、与えられた数の内にどれか1つでも1が含まれていればその出力が必ず1になり、それ以外は0になる 函数 かんすう と見なすことができる。これに対応する論理演算は論理和。それはOR演算とも呼ばれ、\( a + b \)や\( a \vee b \)などと記されている。 ORは英語でorのこと。日本語では「または」という訳語が当てられていることが多いが、日本語の「または」には後に記す 排他 はいた 的論理和の意味合いがあるので要注意。 \[ \begin{align*} 0 + 0 &= 0 \\ 0 + 1 &= 1 \\ 1 + 0 &= 1 \\ 1 + 1 &= 1 \end{align*} \] 論理和の真理値表は次のとおり。 論理和の真理値表 \( a \) \( b \) \( a + b \) 0 0 0 0 1 1 1

LibreOffice Calcのダイアログ(ユーザーフォーム)のタブオーダー設定法

イメージ
LibreOffice Calc 6.1では、スプレッドシート上とダイアログ上にコントロールまたはフォームコントロールを配置することができる。ダイアログというのはエクセルでいうところのユーザーフォームのこと。 操作中のコントロールはアクティブになる。コントロールがアクティブな状態にあることは、キーボードからの入力などの操作をそのコントロールが受け付ける状態になっていることを意味している。 キーボードのTabキーを用いてアクティブな状態にあるコントロールを遷移させることができる。遷移させていくときの順番はタブの順序またはタブオーダーと呼ばれている。 コントロールには「タブの順序」と名付けられた属性を持っているものがあり、この値である数値によってアクティブな状態のコントロールが遷移していく順番を決定することができる。 LibreOffice 6.1 Calcには、スプレッドシート上に配置するフォーム・コントロールのタブオーダーを一括で管理することができるダイアログ・ボックスが用意されている。各コントロールの属性一覧を表示するダイアログ・ボックスを開けば「タブの順序」という項目があり、その右端のボタンを押せばタブの順序を一括管理するダイアログ・ボックスが開く。 しかし、ダイアログ上に配置するコントロールに関してはこの機能がどうやらないようだ。そのため、タブの順序を設定するのに手間取ることがある。ダイアログ上に配置したコントロールの数が多くなるとやっかい。 ここではこの問題に対するちょっとした対処方法を書き留めておく。 シート上のコントロールとダイアログ上のコントロール LibreOffice 6.1 Calcでは、スプレッドシート上のコントロールとダイアログ上のコントロールとでは、タブの順序を決める属性値の挙動が異なる。 スプレッドシート上のコントロールにおけるタブの順序を示す属性値では、コントロール間の同一値が受け入れられる。数値は0から始まるが、同じ番号が重複していても問題は起こらない。 例えば5つのコントロールがスプレッドシート上に配置されている場合、各々の属性値を0, 0, 1, 1, 2と設定することが可能。0, 0, 1, 1, 2という順番でアクティブなコントロールが遷移する。 しかし、ダイアログ上のコントロールの場合、コントロー

LibreOffice Calcでダイアログ上のテキストフィールドからセルへの転記

イメージ
先回 は、LibreOffice Calcのスプレッドシート上に置いたプッシュ・ボタンを押すとダイアログ(フォーム)が開き、そのダイアログ上のコマンド・ボタンを押すとそのダイアログが閉じるマクロをLibreOffice Basicによって作った。 今回は、このダイアログを用いてスプレッドシート上のセルに文字列を入力・転記するコードを書くのが目的。その手順を以下に書き留める。 ここで前提とするLibreOfficeのバージョン LibreOffice 6.1 Calc マクロ作成に使用する言語 LibreOffice Basic (Apache OpenOffice Basic) スプレッドシート・ドキュメントの前提条件 Sheet1という名のシートを1つだけ用意 実装したい機能 今回実現したい機能はおおよそ次のとおり。 LibreOffice Calcのスプレッドシート上に設けたプッシュ・ボタンを押すとダイアログが表示される。 そのダイアログが表示される際、スプレッドシート上のA5というセルに入力されている文字列が、ダイアログ上にあるテキスト・フィールドにも反映される。 ダイアログのテキスト・フィールドに全角または半角の文字列を入力して特定のコマンド・ボタンを押すと、その文字列が10文字以内(11文字未満)であるかどうかを検証し、10文字以内であればその文字列をスプレッドシート上のA5というセルに転記する。 テキスト・フィールドに入力された文字列が11文字以上である場合はその旨を表示して処理を中止する。 ダイアログ上の特定のコマンド・ボタンを押すと、テキスト・フィールドに入力された文字列が削除される。 ダイアログ上の特定のコマンド・ボタンを押すとそのダイアログが非表示になる。 ダイアログとはダイアログ・ボックスのこと。Microsoft Excelではユーザーフォームと呼ばれているものに当たる。 ダイアログ上へ各種コントロールを追加 まずは、前回作成したダイアログ上に各種コントロールを追加する。例えば次のように配置する。 いちばん上にあるのがラベルフィールドと呼ばれるコントロール。上から2番目にあるのがテキスト・フィールドと呼ばれるコントロール。その下にコマンド・ボタンと呼ばれる3つのコントロールが配置されてい

LibreOffice 6 Calcでフォーム(ダイアログ)を作成してマクロで表示

イメージ
ここで用いたLibreOfficeのバージョンと設定 LibreOffice 6.1 LibreOfficeの「ツール」-「オプション」-「LibreOffice」の「詳細」で「Java実行環境を使用」にチェックが入っていること。「インストール済みのJava実行環境(JRE)」が表示されていること。 LibreOffice 6.1 Calcにはデータを入力したり表示したりするのに使うことができるフォームが用意されている。そしてそのフォームはダイアログと呼ばれている。今回はそのダイアログを作成し、それを表示させたり閉じたりするマクロをLibreOffice Basicを使って実装してみる。 フォームコントロールの作成 LibreOffice Calcを起動。 トップメニューで「表示」-「ツールバー」-「フォームコントロール」という順に選び、フォームコントロールのツールバーを表示させる。 フォームコントロールのツールバーの中から「ボタン」(プッシュ・ボタン)を選び、スプレッドシートの適当な場所にプッシュ・ボタンを作成して配置する。 作成されたプッシュ・ボタンの上でマウスの右クリックメニューを表示させ、その中から「コントロール」を選ぶ。 「属性 プッシュボタン」というダイアログが表示されるので、「全般」タブ内にある「タイトル」の項目を「ダイアログ表示」に変える。 トップメニューで「ファイル」-「保存」を選んで変更内容を保存する。 スプレッドシート上でのプッシュ・ボタンの作成とその属性の設定はこれで終わり。 ダイアログを作成 「閉じる」というコマンド・ボタンだけを持つ単純なダイアログを作成する。 LibreOffice Calcのトップメニューで「ツール」-「マクロ」-「ダイアログの管理」を選ぶ。 そうすると「LibreOffice Basicマクロの管理」というダイアログが開く。「ダイアログ」というタブを選び、ダイアログに表示されている.odsファイル(今開いているスプレッドシート名)を選ぶ。 「新規作成」ボタンを押して「Dialog1」を作成し、「編集」ボタンを押す。 そうすると統合開発環境(IDE)が起動し、ダイアログの雛形が表示されるはず。 ツールバーの中から「ボタン」(コマンド・ボタン)を選び、ダイアログの雛