サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
brain.cc.kogakuin.ac.jp/~kanamaru
本ページの資料は私 (金丸) が 2005 年度から工学院大学にて行っている講議「情報処理概論及演習 (情報処理演習)」の資料に基づいています。 VBA を習得すると、卒論や研究などで Excel をより強力なツールとして活用できるようになります。 なお、本ページは LibreOffice/OpenOffice にも対応しています。 VBAに関連し、私の著書 「高校数学からはじめるディープラーニング」および 「Excel / OpenOffice で学ぶフーリエ変換入門」では VBA で書かれたマクロを ソースが閲覧可能な形で用いていますので御活用ください。 (Mac 版と LibreOffice/OpenOffice にも対応しています)
手続き型プログラミングとの違い 第十三回-01でテレビクラスを実装し、main 関数から利用してみた。 あの中にオブジェクト指向プログラミングのエッセンスがある程度詰まっていると言える。 その意義を理解するため、先程の例を手続き型プログラミングの手法で書いてみよう。 以下の通りである。 #include <iostream> int main(int argc, char* argv[]) { // 電源、チャンネル、ボリューム変数の宣言 int power, channel, volume; // 電源、チャンネル、ボリュームの初期化 power = 0; channel = 1; volume = 0; // 値のセット power = 1; // 電源オン channel = 8; volume = 10; // 状態の表示 if(power == 1){ std::cout <<
ここまでで、一般に「C 言語」の教科書で取り扱う話題のうち主要なものを一通り学んだ。 (構造体は C++ の「クラス」とともに学べるので飛ばした) ここで、これまで学んで来たことがプログラミングの中でどう位置付けられるかを明らかにしておこう。 C/C++によるプログラミングの実際 C/C++ によるプログラミングを行う上で、必要になる知識を下の図にまとめた。 プログラミングを行う際にこの図のようなイメージが頭に入っていると見通しが良くなるだろう。 まず、C とC++の関係について押えておこう。 C++ は C を拡張した言語であるが、互換性が完全に保たれているわけではないので、 C++ からはみ出したC の部分があるような図にした。 さらに、C は一般に「手続き型プログラミング」を行えるが、 C++ により「オブジェクト指向プログラミング」を行えるよう拡張された。 ここまでで学んできたのは
本講義では Excel 上で Visual Basic というプログラミング言語を利用する方法を学ぶ。 Excel 上で用いる Visual Basic は正式には Visual Basic for Applications (VBA) と呼ばれる。 書店のプログラミング言語コーナーには VBA に関する多くの教科書を取り扱っているので、興味のある学生は参考にしてみると良いだろう。 多くの人にとってプログラミング言語によるプログラミングは初めての経験であろうから、 しっかりと学習して着実に身に着けるように欲しい。 なぜプログラミングを学ぶのか VBA によるプログラミング例1~フーリエ変換と音声合成 VBA によるプログラミング例2~Excelでディープラーニング VBA によるプログラミング例3~モーターの制御 後期の授業では、Excel 上で利用できる Visual Basic for
コメント (2008年11月11日記す) 「微分方程式」という学問の特性上やむを得ないことですが、ひたすら計算、計算の演習でした。 解答はかなり丁寧に書いたつもりなので、印刷して無料問題集としてご利用頂くのが良いのではないかと思います。 金丸隆志の講議資料に戻る
前回、VBA から Excel のシートにアクセスする方法を学んだ。 この機能を用いると、様々な数学的な操作を Excel 上で行うことができるようになる。 ここでは「微分方程式の数値解法」を取り上げ、VBA (および Excel) 学習の総仕上げとする。 微分方程式の数値的に解くのは、「Excel のみを使う方法」と「VBA と Excel を組み合わせて使う方法」のどちらでもできる。 ここではその両方を取り上げ、その違いを体感してもらう。 準備 Euler 法で数値解を求めてみる 数値解と解析解を比較してみる 準備 本日取り扱う微分方程式は以下のものである。 この微分方程式は、ばね系に周期的な外力が加わっている系の運動方程式 において、質量 m、ばね定数 k、外力の大きさ F、外力の振動数 ω に対し、 以下の制限を設けたものである。 この微分方程式 (運動方程式) は 2 階微分を含
本ページでは「演算子のオーバーロード」について解説する。 前のページでは代入演算子 (=) のオーバーロードを行ったが、ここでは [] 演算子と + 演算子である。 array クラスの記述 ([] 演算子のオーバーロード例) ここでは array クラスについて解説し、その過程で [] 演算子のオーバーロードについて学ぶ。 まず、array クラスの意義から解説してゆこう。以下のコード (の断片) を見てみよう。 見ての通り、要素数 10 の配列 x を定義し、その配列の 100 番目 (配列は 0 から使うので正確には 101 番目) に 1 という値を書きこんでいる。 あきらかに問題のあるプログラムだが、C/C++ では配列の境界チェックを行わないのでこのプログラムは文法上は何の問題もない。 とはいえ、(当然だが) このように境界を超えて配列の読み書きをすることは時として深刻なエラー
brain.cc.kogakuin.ac.jp
android 4.0.3 (ICS: Icecream Sandwich) on NetWalker : 工学院大学 金丸研究室 本ページでは、Sharp 製の NetWalker に android 4.0.3 (ICS: Icecream Sandwich) を 移植する方法をまとめます。 android 2.x のインストール法は左のナビゲーションからたどって下さい。 ベースとしては androidzaurus さんの Android on NetWalker (1.6 の移植) および sola さんのブログ (主に2011年11,12月のエントリ) を参考にさせて頂いております。 有益な情報を公開してくださっている androidzaurus さんと sola さんに感謝致します。 なお、repo のインストールなど、android のビルド環境の構築についての解説は省略します
Visual Basic でも、このような記述を何度かしてきた。 (例えばこちら) しかし、この記述は何か奇妙だと思わないだろうか?例えば、配列の要素数を 10 に変えたいと思った場合、 1 行目と2行目に含まれている2箇所の 「5」を「10」に変更せねばならず、無駄が多い。 むしろ、プログラムの美しさを考えれば以下の記述の方が自然だと思うかもしれない。 int n=5; // まずは配列の要素数を決める int array[n]; // 要素数 n の配列を宣言 (しかしコンパイルエラー!!) しかし、この記述は「int array[n];」 という行に対して以下のコンパイルエラーが出る。 この1行目にエラーの理由が書かれているが、 配列の宣言の際、配列のサイズは定数でなければいけないというルールが守られていないため、エラーが出るのである。 「int array[n];」の n は、すぐ
USB Webカメラ (Logicool QVX-13NS) をカスタムしたGalaxy Nexus (android 4.0.3) で動作させたデモ。 こちらは私の YouTube 動画では最もアクセスの多い動画となっており、今でもたまに見ると 「おお、頑張ってる!」と自分でもびっくりするくらい盛りだくさんの内容となっています。 カスタムした Android でカメラを有効にし、さらに /dev/video0 に 666 パーミッションを与えています。 そして、JNIで /dev/video0,1 にアクセスするアプリケーションを書いています。 カスタム Galaxy Nexus の作成についてはsolaさんらによるJCROM projectを参考にさせて頂いております。 sola さんに感謝します。 USB Webカメラ (Logicool Webcam C210) を純正 Iconi
本ページの資料は私 (金丸) が 2008 年度から工学院大学にて行っている講議「プログラミング演習 I」の資料に基づいています。 機械系学生が対象であるので、細かな文法にこだわることより画像処理などの具体例を用いて プログラミングの本質をつかんでもらうことを重視しています。 そのため内容はある程度限定せざるを得ませんが、このページで学んだ内容を足掛かりにして、 各自が C/C++ の自習を継続するための実力をつけてくれればよいと思います。 なお本講義の内容を、ブラウザ上で動作するオンラインコンパイラで学べるよう 若干簡略化した「オンラインコンパイラで C/C++ を自習しよう」も公開していますのでお好みでどうぞ。 2020.07: Visual Studio 2019 で演習を行えるよう加筆しました。
コメント (2008年11月11日記す) 線形代数で重要な固有値や対角化まで行かない範囲ですので、ひたすら地味ーな演習ですね。 行列の rank で連立方程式の解の個数が異なるところに、皆さん苦戦していたようです。 解答は結構丁寧に書いたつもりですので、計算練習用にご活用下さい。 金丸隆志の講議資料に戻る
本ページはVisual Basic for Applications (VBA) を用いる準備 の Excel 2007 対応版である。 このページでは VBA を学ぶ際に必要な設定についてまとめる。 Excel での準備 Visual Basic での準備 Excel での準備 Office ボタンから「Excel のオプション」を選択しよう。 あらわれたオプションダイアログの「基本設定」セクションにある 「[開発]タブをリボンに表示する」にチェックを入れよう。 さらに、「数式」セクションにある 「R1C1 参照形式を使用する」のチェックが外れていることを確認しよう。 通常はデフォルトでチェックが外れているはずなので、その場合はそのままで良い。 次に、Excel の開発タブから「マクロのセキュリティ」をクリックしよう。 現れる「セキュリティセンター」ダイアログから「マクロの設定」を選択し
本ページでは、Sharp 製の NetWalker に android 2.3.4 (Gingerbread) を 移植する方法をまとめます。 android 2.2.2 (Froyo) のインストール法は左のナビゲーションからたどって下さい。 ベースとしては androidzaurus さんの Android on NetWalker (1.6 の移植) や sola さんによるBeagleBoard に Froyo をのせる を参考にさせて頂いております。 有益な情報を公開してくださっている androidzaurus さんと sola さんに感謝致します。 なお、repo のインストールなど、android のビルド環境の構築についての解説は省略しますので、 他のサイトを御参考ください。 なお、Gingerbread のビルドには JDK 1.6 と 64bit OS が必要ですので
本ページでは、BeagleBoard 上の android 2.2.2 (Froyo) において、 無線 LAN Bluetooth USBカメラ などを利用するための方法をまとめます。 ベースとなるシステムには sola さんによるビルド法の解説を利用させて頂いております。 有益な情報を公開してくださっている sola さんに感謝致します。 更新履歴 2011.7.20: Googleトップを見てもブラウザが落ちないよう変更。 2011.7.13: 公開 基本的には sola さんのページの通り進めます。 「2. Android ソースコードのダウンロード」への補足 私は android-2.2.2_r1 ブランチで実行しました。 「3. BeagleBoard 用の変更ファイル、追加ファイルを適用する」への追加 sola さんの 3. 章にて sola さんによるパッチを適用した後、本
Android や iPhoneに代表されるスマートフォン/タブレットや、Raspberry Piに代表されるシングルボードコンピュータを用いて我々の生活を豊かにする研究を行っています。 学生によるいくつかの成果を紹介します (リンクをクリックすると内容を紹介する動画が現れます)。 Androidスマートフォンで操作するスマートカーテン 広角カメラを3つ搭載したルンバによる家庭見守りシステム Raspberry Piと二足歩行ロボットRapiroを用いたコミュニケーションロボット また、Kinectなどのセンサを用いて周囲の環境を認識し、適切な情報を提示する「教育支援システム」や「作業支援システム」の研究も行っています。こちらの動画は本ページに示されています。 センサを用いて外界環境を認識する際は、機械学習の技術を用いることもできます。その動画も本ページに示されています。 その他にもたくさ
ここまでに取り扱った MIPS のアセンブリ言語の命令をまとめておく。 演習で取り扱っていないくても、関連するものは載せてある (引き算 sub など)。 なお、$ 等はレジスタを、 は整数値を、 は定数値を、 はラベルを表す。 [演算系] add $R, $R, $R $R = $R $R sub $R, $R, $R $R = $R $R addi $R, $R, C $R = $R C [ロード・ストア系] la $R, L ラベル L のアドレスの値をレジスタ $R にロードする。 li $R, C 定数値 C をレジスタ $R にロードする。 lw $R, N($R) $R + N のアドレスの内容をレジスタ $R にロードする。(N は 4 の倍数) sw $R, N($R) レジスタ $R の内容を $R + N のアドレスにストアする。(N は 4 の倍数) [条件分岐系]
ここでは、典型的な C/C++ プログラムがどのような構造をしているかを提示し、 同時に今後頻出する用語の解説を行う。 C プログラムの構造 典型的な C プログラムは以下のような構造をしている。 このプログラムの意味は解説しないので、実際に動作させて意味を理解すること。 #include <stdio.h> int factorial(int n); // 関数のプロトタイプ (宣言) int factorial(int n){ // 関数の定義 int i; int val=1; for(i=1; i<=n ; i++){ val = val * i; } return(val); } int main(){ // main 関数 int x=5; int y; y = factorial(x); printf("%d! is %d\n",x,y); return 0; } C 言語で
インクリメントとデクリメント 演算子の優先順位 型に基づく演算と型変換 代入と型変換 int 型と double 型にまつわる注意 インクリメントとデクリメント 四則演算については「第一回-05 変数の利用と四則演算」で既に学んだ。「+」、「-」、「*」、「/」、「%」などのことを演算子と呼ぶ。 これらは算術演算 (数学上の演算) を行う演算子なので、算術演算子と言う (他には論理演算というものがあり、いずれ学ぶ)。 四則演算の演算子に、「インクリメント (++)」および「デクリメント (--)」という新たな演算子を追加したのが下表である。
第六回-01 配列の基礎 にて提示した、コンピュータの CPU とメモリとハードディスクの図を再び取り上げよう。 この図は「配列」について学んだ際に配列のイメージ図を描いたものである。 ハードディスクに格納されていた jpg 画像が、プログラムによって一旦メモリに格納され、それを自作プログラムで加工する、という話であった。 ここからは、プログラムが動いているときに CPU とメモリが どのような関係にあるか、 を理解することを目標の一つとする。 これは、言い替えると コンピュータ上でプログラムが動作する仕組みを理解するということでもある。 さて、「メモリ」とは記憶装置のことを指すコンピュータ用語である。 しかし一言でメモリと言っても、「USB メモリ」もメモリだし、 「CD-ROM (ROM = Read Only Memory)」もメモリであり、混乱しやすい。 しかし、コンピュータの世界
本ページは「Excel 2003 で学ぶ Visual Basic for Applications (VBA)」内のページ「シートへの高速なアクセス」を OpenOffice Basic に対応させたものである。 前ページにおいて、OpenOffice Basic から OpenOffice Calc のシート (表) にアクセスする方法を学んだ。 通常の用途ではこれで構わないのだが、 研究などで書き込むセルの数が増えるとどんどん実行速度が 遅くなってしまう。 それを避けるためのテクニックをここでは紹介しよう。 画面更新の抑制 まず、セルへのアクセスを高速化するための常道として、 画面更新を抑制することが多くの場合用いられる。 これは、セルへ値を書き込むのが終るまで画面更新を抑制しておき、 書き込み終了後に画面更新を再開するというもので、簡単であるがそれなりの効果がある。 前ページの「S
初めてのGUIアプリケーション 初めてのGUIアプリケーション このページでは、簡単な GUI アプリケーションの作成法を学ぶ。 ここでは、MFC (Microsoft Foundation Classes) というライブラリを用いて GUI アプリケーションを作成する。 なお、「第一回-02 コンソールアプリケーションとGUIアプリケーション」にて 「最新の v142 ビルドツール用 C++ MFC」にチェックをいれて Visual Studio のインストールを行わなかった場合、 本ページの内容を学習できない。追加インストールもできるので、必要に応じて追加すること。 まず、Windows のメニューから Visual Studio 2019 を起動すると、以下の画面が開く。「新しいプロジェクトの作成」をクリックしよう。 次に、下図のように「MFC アプリ」をクリックして「次へ」をクリッ
リストが C++ の標準テンプレートライブラリ (Standard Template Library: STL) に含まれていたのと同様に、 二分木や priority queue も STL に含まれている。 ここではその利用例を紹介する。 二分木の例 STL では map によって二分木が利用できる。 似たものとして、multimap、set、multiset などがある。興味のある人は違いを教科書で調べてみると良いだろう。 使用例は以下のようになる。BTree クラスと同様に「学籍番号&成績」という例でプログラミングした。 #include <iostream> #include <map> using namespace std; typedef map<int, char, less<int> > result; // map は int (学籍番号) の重複を許さないことに注意
このモデルは、気象学者のエドワード・N・ローレンツが 1963 年に「大気科学ジャーナル」に発表した論文 「決定論的非周期的流れ」で用いたものであり、系はフラクタル性をもったアトラクター上に収束します。 この論文は、カオスとそのメカニズムを論じた論文としては最も早いものとされています。 なお、ローレンツより早い 1961 年に日本の工学者である上田ヨシ亮先生が ダフィング方程式におけるカオスを見出しておられましたが、発表時期は遅れました (ヨシは目へんに完)。 さらに以前には、数学者のポアンカレ (19世紀末) や工学者のファン・デル・ポール (1927 年) が カオスに気づいていたようです。詳細はカオス語録を御覧下さい。 さて、ローレンツの研究の素晴らしい所は、まだカオスについてほとんどの人が何も知らなかった時期であるにも関わらず その本質を見抜き、その後の研究の流れを決定づけるような
前ページに引続き、微分方程式の数値解法を学ぶ。 本ページでは VBA のプログラミング機能を用いて実現する。 Euler 法 本ページの学習に入る前に、前ページの Excel シートを保存して閉じておこう。 本ページのプログラムを記述する際は、新しいファイルでスタートするようにして欲しい。 さて、Excel の場合と同様、Euler 法での数値積分を実現するのが 以下の VBA プログラムである。 ポイントは While 〜 Wend 文と t = t + dt により、時間を 0 から tmax (=30) まで進めている点 x1 (位置)、x2 (速度) を更新するプロシージャ Euler を作成し、「Euler x1, x2, t, dt」のように呼び出している点である。 記述して実行してみよう。 (Visual Basic Editor の起動方法は「第一回:プログラムを書き始める
本演習ではこれまでメモリの領域として「テキスト領域」、 「データ領域」、「スタック領域」の 3 つを取り扱った。 本章ではこれらのメモリ領域が C 言語や C++ 言語でどのように使われるかを 簡単に解説する。 本章は C 言語の知識が必要であるため、自信が無い人は読み飛ばして構わない。 なお、各領域の名称は処理系によって異なることがある (たとえば 80x86 系では「テキスト領域」は「プログラム領域」と呼ばれる、など) が、その本質は多くの処理系で共通している。 まず、C 言語で扱うメモリの論理的な模式図は 図 5 のように 4 つに分けられる。 このうち「静的領域」と「ヒープ領域」を合わせて「データ領域」と呼ぶことも あり、本演習でもその呼び方をしてきた。 なお、「論理的」という言葉は図 5 がハードウェア上での配置 をそのまま表しているのではなく、OS によって提供された仮想的なメ
初めてのGUIアプリケーション 保存時の注意 (GUI アプリケーション編) スタティックリンク 初めてのGUIアプリケーション このページでは、簡単な GUI アプリケーションの作成法を学ぶ。 ここでは、Visual C++ Express Edition を用いて .NET Framework を用いた GUI アプリケーションを作成する。 Visual Studio Community 2017に関する情報 Visual Studio Community 2017では、 「C++/CLIサポート」の追加インストールを行っていない場合、本ページの内容を実行できない。 追加インストールを行うには、プロジェクト作成画面の「Visual Studioインストーラーを開く」からインストーラーを起動し、右にある「C++/CLIサポート」にチェックしてインストールする。 また、MFCアプリケーショ
本ページでは「コピーコンストラクタ」、 および「代入演算子のオーバーロード」について解説する。 どういう時にコピーコンストラクタや代入演算子の記述が必要になるのかであるが、 「第二回-05 : オブジェクトの代入」や 「第三回-03 : 関数の戻り値」で既に学んだように、 メンバ変数としてポインタをもつクラスにおいて代入などを行う際に必要になるのであった。 まずこのページを学ぶまえに以前のページをしっかり復習しておくこと。 コピーコンストラクタ・代入演算子の呼ばれるタイミング まず、コピーコンストラクタと代入演算子がどのようなタイミングで呼ばれるのかを簡単に解説しておこう。 int main(){ samp x; // (1) samp y=x; // (2) samp z; z = x; // (3) // 以下、なんらかの処理 } 上記の例を見てみよう。この例は main 関数内で s
次のページ
このページを最初にブックマークしてみませんか?
『brain.cc.kogakuin.ac.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く