サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
brain.cc.kogakuin.ac.jp/~kanamaru
手続き型プログラミングとの違い 第十三回-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日記す) 「微分方程式」という学問の特性上やむを得ないことですが、ひたすら計算、計算の演習でした。 解答はかなり丁寧に書いたつもりなので、印刷して無料問題集としてご利用頂くのが良いのではないかと思います。 金丸隆志の講議資料に戻る
本ページの資料は私 (金丸) が 2005 年度から工学院大学にて行っている講議「情報処理概論及演習 (情報処理演習)」の資料に基づいています。 VBA を習得すると、卒論や研究などで Excel をより強力なツールとして活用できるようになります。 なお、本ページは LibreOffice/OpenOffice にも対応しています。 VBAに関連し、私の著書 「高校数学からはじめるディープラーニング」および 「Excel / OpenOffice で学ぶフーリエ変換入門」では VBA で書かれたマクロを ソースが閲覧可能な形で用いていますので御活用ください。 (Mac 版と LibreOffice/OpenOffice にも対応しています)
前回、VBA から Excel のシートにアクセスする方法を学んだ。 この機能を用いると、様々な数学的な操作を Excel 上で行うことができるようになる。 ここでは「微分方程式の数値解法」を取り上げ、VBA (および Excel) 学習の総仕上げとする。 微分方程式の数値的に解くのは、「Excel のみを使う方法」と「VBA と Excel を組み合わせて使う方法」のどちらでもできる。 ここではその両方を取り上げ、その違いを体感してもらう。 準備 Euler 法で数値解を求めてみる 数値解と解析解を比較してみる 準備 本日取り扱う微分方程式は以下のものである。 この微分方程式は、ばね系に周期的な外力が加わっている系の運動方程式 において、質量 m、ばね定数 k、外力の大きさ F、外力の振動数 ω に対し、 以下の制限を設けたものである。 この微分方程式 (運動方程式) は 2 階微分を含
本ページでは「演算子のオーバーロード」について解説する。 前のページでは代入演算子 (=) のオーバーロードを行ったが、ここでは [] 演算子と + 演算子である。 array クラスの記述 ([] 演算子のオーバーロード例) ここでは array クラスについて解説し、その過程で [] 演算子のオーバーロードについて学ぶ。 まず、array クラスの意義から解説してゆこう。以下のコード (の断片) を見てみよう。 見ての通り、要素数 10 の配列 x を定義し、その配列の 100 番目 (配列は 0 から使うので正確には 101 番目) に 1 という値を書きこんでいる。 あきらかに問題のあるプログラムだが、C/C++ では配列の境界チェックを行わないのでこのプログラムは文法上は何の問題もない。 とはいえ、(当然だが) このように境界を超えて配列の読み書きをすることは時として深刻なエラー
Visual Basic でも、このような記述を何度かしてきた。 (例えばこちら) しかし、この記述は何か奇妙だと思わないだろうか?例えば、配列の要素数を 10 に変えたいと思った場合、 1 行目と2行目に含まれている2箇所の 「5」を「10」に変更せねばならず、無駄が多い。 むしろ、プログラムの美しさを考えれば以下の記述の方が自然だと思うかもしれない。 int n=5; // まずは配列の要素数を決める int array[n]; // 要素数 n の配列を宣言 (しかしコンパイルエラー!!) しかし、この記述は「int array[n];」 という行に対して以下のコンパイルエラーが出る。 この1行目にエラーの理由が書かれているが、 配列の宣言の際、配列のサイズは定数でなければいけないというルールが守られていないため、エラーが出るのである。 「int array[n];」の n は、すぐ
本ページの資料は私 (金丸) が 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 の開発タブから「マクロのセキュリティ」をクリックしよう。 現れる「セキュリティセンター」ダイアログから「マクロの設定」を選択し
ここまでに取り扱った 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
学生の指導の過程でプログラミングを行うことがあるのですが、 その成果物で一般に役に立ちそうなものをいくつか公開しています。 Android 用ユーザーアプリケーション試作品 (Java) 動画再生&キャプチャのサンプル DxPlay 改良版 (C#) System.Speech.Recognition デモ (C#) Google Android 完全解説 (アスキームック) 注意点 Google 携帯 Android のプログラミングを習得するために作成したアプリケーションを公開。 フラクタル集合を表示・拡大するだけという、実用性に乏しいものですが。 以下のリンクにより「カオス・非線形力学入門」ページ内のダウンロードページにたどり着きます。 マンデルブロー集合 for Android フラクタルベイスン境界 for Android リドル・ベイスン for Android android
本ページでは私 (金丸) が 2001 ~ 2004 年度に東京農工大学にて行った「マイクロプロセッサおよび演習」の演習分に関する資料を公開しています。 [教科書] パターソン、ヘネシー「コンピュータの構成と設計 第二版 (上)」: 出版元である日経 BP 社へのリンク。 [リンク] SPIM (MIPS CPUシミュレータ): 演習で用いる SPIM (MIPS CPU シミュレータ) の配付元。 家などでダウンロードする場合はこちらからダウンロードすること [アセンブリ言語ファイル (*.asm) の閲覧について] 本演習で配布するアセンブリ言語ファイルは Unix 型式の改行コードで記述しているため、 Windows に付属している「メモ帳」では正しく表示されません。 「秀丸」のような、Unix 型式の改行コードを理解するテキストエディタを用いてファイルを開いて下さい。 演習用ページ
まず、グラフのタイトルは下図のようにクリックして書き換えることができる。 下図のようにグラフの意味がよくわかるようなタイトルを記入しよう。 なお、今回はグラフタイトルは自動で現れたが、もしこれが存在しなかったら、 下図のようにリボンの「レイアウト」タブから「グラフタイトル」→「グラフの上」 と選択すると、タイトルが表示される。 グラフのタイトル以外にも、 軸の名前、軸の単位は実験レポートなどで必ずチェックされるポイントであるので、 以下で軸の名前等を記入しよう。 まず横軸から。 下図のようにリボンの「レイアウト」タブから「軸ラベル」→「主横軸ラベル」 →「軸ラベルを軸の下に配置」 と選択すると、横軸のラベルが現れる。 現れた横軸ラベルに、以下のように記入しよう。 次に縦軸である。 下図のようにリボンの「レイアウト」タブから「軸ラベル」→「主縦軸ラベル」 →「縦軸ラベルを回転」 と選択すると
例えば int 型に通常の変数とポインタ変数があったように、クラスにも通常の変数とポインタ変数とが存在する。 クラスにおいてポインタの利用は避けられない事が多い。 本ページではそのために必要な知識を学ぶ。 テレビクラスをポインタ変数で利用してみよう main 関数における実際の使用例がこちら。第十三回-01とやっていることはほとんど変わらない。 コピーペーストできる形式での表示は以下の通り。 #include "Television.h" int main() { Television *tvp; // テレビクラスのポインタの宣言 tvp = new Television(); // テレビクラスのオブジェクトをヒープ領域に確保 // これにより、ポインタの指す先が決まる。 // ここでコンストラクタが呼ばれる tvp->printStatus(); tvp->setPower(1);
本ページでは「オブジェクトの配列とコンストラクタ」について学ぶ。 オブジェクトの配列 (1) 以下のプログラムを見てみよう。 #include <iostream> using namespace std; class samp{ int a; public: void set_a(int n){ a = n; } int get_a(){ return a; } }; int main(){ samp ob[4]; // オブジェクトの配列の宣言 samp ob2; // オブジェクト1個のみの宣言 for(int i=0 ; i<4 ; i++) ob[i].set_a(i); for(int i=0 ; i<4 ; i++) cout << ob[i].get_a(); cout << "\n"; return 0; } 上記がコードであるが、samp クラスのオブジェクトの配列 o
本ページの資料は私 (金丸) が 2005 年度から工学院大学にて行っている講議「情報処理概論及演習」の資料に基づいています。 VBA を習得すると、卒論や研究などで Excel をより強力なツールとして活用できるようになります。 Apache OpenOffice および LibreOffice にも対応しています。その場合、VBAではなくOpenOffice Basicが対象となります。 また、Excel 2013 以降に対応したページは こちらになります。 VBAに関連し、私の著書 「高校数学からはじめるディープラーニング」および 「Excel / OpenOffice で学ぶフーリエ変換入門」では VBA で書かれたマクロを ソースが閲覧可能な形で用いていますので御活用ください。 (Mac 版と OpenOffice にも対応しています)
次のページ
このページを最初にブックマークしてみませんか?
『Takashi Kanamaru's Web Page』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く