Relative Content

Monthly Archives: May 2016

11.1 文字列とポインタ

ポインタの配列 複数の文字列をchar型の2次元配列で宣言しました。それを下記に示します。 char kw[3][7] = {“double”, “extern”, “switch”}; 同様なものをポインタを使って宣言すると、下記のようにポインタの配列となります。 const static char *wday[ ] = { “Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, NULL }; [ ]の中には8が入るのですが、コンパイラが数えてくれるので省略しています。 wday[0]は最初は”Sunday”の先頭アドレスを指します。 wday[1]は最初は”Monday”の先頭アドレスを指します。 wday[0]++とすると、 wday[0]は”Sunday”の1番目の要素を指します。 wday[1]++とすると、 wday[1]は”Monday の2番目の要素を指します。 以下、同様です。 配列の最後の要素は、’NULL’です。このようにしてあるのは、ポインタの配列が幾つあるか計るためです。 ‘NULL’を使わない場合は、ポインタの配列の数を保持している変数が必要になります。 #include <stdio.h> /* ポインタwday[ ]の指している文字列の配列は、 const:書き変え禁止で static:他のファイルから参照禁止 */ const static char *wday[ ] = { “Sunday”, “Monday”, “Tuesday”, […]

C# exercises (6) Graphics and Paint

Graphicsオブジェクト ウインドウの内部を表示したり描き直したりする必要が生ずると、Formに「Paint」というイベントが発生し、Paintプロパティに設定されているメソッドが呼び出されるようになっています。 このPaintイベント用のメソッドは、これまでのクリック時のイベント用メソッドなどとは微妙に違いがあります。これは以下のように定義されます。 private void メソッド名 (object sender, PaintEventArgs e) {     ……ここに描画処理を書く…… } 第1引数に、イベントが発生したオブジェクトが渡されるのは同じですが、第2引数に渡されるのはSystem.Windows.Formsパッケージの「PaintEventArgs」というクラスのインスタンスです。これは、描画のためのイベント情報を管理するもので、描画に必要なオブジェクトなどもこの中にまとめられているのです。 中でも重要なのが「Graphics」というオブジェクトです。これはSystem.Drawingパッケージに用意されているクラスで、これはGDI+(Graphics Device Interfaceというグラフィック描画のための機能の強化版)を利用して画面にさまざまな描画を行うための機能を提供します。 Paintイベント フォームのプロパティをイベントに切り替えて、Paintイベントを探し、メソッド名Form1Paintを入力 Paintイベントで渡されるPaintEventArgsインスタンスから以下のようにして取り出します。 Graphics 変数 = 《PaintEventArgs》.Graphics; Penと図形の描画 g.DrawLine(p,75,75,50,50);  // 直線 g.DrawEllipse(p,75,75,50,50);  // 円 private void Form1Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen p = new Pen(Color.Red); // Penインスタンスの作成 g.DrawEllipse(p,75,75,50,50); } Penと多角形を描く private void […]

10.3 ポインタと配列

ポインタの仕組み:ポインタで変数を指す ポインタとは ポインタ (pointer)とは、あるオブジェクトがなんらかの論理的位置情報でアクセスできるとき、それを参照するものである。有名な例としてはC/C++でのメモリアドレスを表すポインタが挙げられる。(ja.wikipedia.org) ポインタ=メモリアドレス 間接演算子 * と アドレス演算子 & ポインタの使用手順 宣言 アドレスの設定 使用 ポインタで変数 間接演算子を使って、ポインタが指すメモリの値を取得することを間接参照するといいます。 間接演算子を用いれば、アドレスを間接参照するだけではなく、ポインタが表すアドレスに値を間接代入することもできます。 #include <stdio.h> int main() { int iVar = 0; int *iPo = &iVar; // 宣言&設定 printf(“*iPo = %d\n” , *iPo); // 使用 *iPo = 100; // 間接代入 printf(“iVar = %d\n” , iVar); return 0; }   ポインタで配列 配列とポインタは全く別物 配列とは、多数の変数を順番つけでまとめて扱う方法であり、 ポインタとは、変数のショートカットを作る方法です。 […]

2.2 型

型と型変換 型 int — 整数 double — 浮動小数点数 平均点を求めるプログラム #include <stdio.h> int main(int argc, const char * argv[]) { // insert code here… int score[5]; // 5人の点数を入れる配列 int sum; // 合計点 // 各点数を入れる score[0] = 77; score[1] = 80; score[2] = 65; score[3] = 60; score[4] = 70; // 各点数を全て足して合計点を求める sum = score[0] + score[1] […]

10.1 アドレス

ポインタの仕組み:アドレスとは ポインタはC言語(および拡張言語)に特有の概念で、C言語を学び始めた初心者が必ずといっていいほどつまづく概念でもあります。ポインタがどうしても理解できないためにC言語に挫折してしまう方もいます。 アドレスの基本 コンピュータの記憶装置(メモリ)には、アドレスが付けられている。 変数のアドレス 変数のアドレスを取得するには変数名の前にアンパサンド “&”をつけます。 int a = 123; printf(“aのアドレス : %p\n”, &a); 配列のアドレス 配列の先頭をアドレスは、配列名だけで示します。要素のアドレスは&配列名[添字]で示します。 #include <stdio.h> int main() { char str[3] = “AB”; printf(“str[0]の要素のアドレス: %p\n”, &str[0]); printf(“strのアドレス: %p\n”, str); getch(); return 0; }     二次元配列のアドレス 二次元配列の先頭アドレスは、配列名だけで示します。要素のアドレスは&配列名[行][列]で示します。 値とアドレスの表現 変数、1次元配列、2次元配列の整理 値 (要素)アドレス 先頭アドレス 変数 変数名 &変数名 1次元配列 配列名[添字] &配列名[添字] 配列名 2次元配列 配列名[行][列] &配列名[行][列] […]

Compile a C code on MacBook

MacBookで、C言語開発環境の構築 Macに最初から入っている「テキストエディット」とMacに最初から入っている「ターミナル」から入門できますが、無料で多機能Atomを使えこなせるとより本格的にC言語開発できます。   Mac:C言語開発環境 Xcode またはXcode Command Line Toolsを入れる。 Xcode MacBookでは、Xcodeの開発環境を入れるは普通だか、サイズが大きい。iPhoneのアプリ開発環境も一気に揃う利点があります。 Xcode Command Line Tools Xcode Command Line Toolsだけ入れるとする。サイズの節約になります。 # xcode-select –install 上記コマンド打って「インストール」を選択するだけでいい! インストールしたら、確認する: chen-no-air:bin chen$ gcc –version Configured with: –prefix=/Library/Developer/CommandLineTools/usr –with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 7.3.0 (clang-703.0.29) Target: x86_64-apple-darwin15.4.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin chen-no-air:bin chen$ chen-no-air:bin chen$ git –version git version 2.6.4 (Apple Git-63) […]

C# exercises (5) Calculator

my電卓を作ろう 逆ポーランド記法電卓 Reverse Polish Notation Calculator 画面をデザインする ツールボックスの中で、 コモンコントロール「TextBox」 TextBox –>  (name): typeText;  text: 0 TextBox –> (name): lastText;  text: 0 コモンコントロール「Button」 Button1 –> (name): plusButton;  text: + Button2 –> (name): subButton; text: – Button3 –> (name): multiButton; text: x Button4 –> (name): divButton; text: / Button5 –> (name): clrButton; text: CL Button6 –> (name): enterButton; text: ER Formにドラッグ&ドロップする プログラミング KeyPressイベントを作成 Form1を選択し、Form1のイベントの表示に切り替えて、「KeyPress」イベントに、FormKeyPressを入力 FormKeyPressメソッドを作成 六つボタンを選択した状態で、コントロール類の、「KeyPress」イベントに、FormKeyPressを選択。 private […]

Calculator

電卓プログラムの考え方、書き方例 2つの数値の加減乗除をする電卓のようなプログラムを作ります。 簡単なようですが、多くの話題(データ型の選択、入力、判断や繰り返しなど)を含んでおり、学習に役立つ例題です。 今回は、プログラムをつくる流れも分かるように、どんなプログラムにするか検討するところから始めます。 それを処理手順に書き、C言語のコードに直します。 プログラムの機能を考える まずは、どんなプログラムにするかを考え、前提とすることや制約についても検討します。 数や演算の指定はどうする? たとえば「2 + 5」のように、「数値1 演算記号 数値2」の順に入力すると計算結果が表示されるようにする。 演算記号は、+, -, *, / のみとする。 繰り返して計算できるようにする 繰り返しの終了は、指定が上記の書式でなかったときとしよう。 他に考えておくことは? (1) 浮動小数点数でも計算できるようにする (2) 加減乗除以外の演算記号が指定されたらどうする? (3) 割り算で、ゼロ割しようとしたときはどうする? (4) 電源ON の代わりに指定の書式を示すメッセージを表示しよう。電源OFF のメッセージも表示しよう (2) と (3) のケースは、エラー・メッセージを表示して、指定し直せるようにしよう。 処理手順として書く 上の検討結果を踏まえて、処理内容を具体的かつ端的に書きます。 判断や繰り返し、データの入出力も分かるようにします。 下記では、チャートを使わずに書きます。 【 電卓プログラムの処理手順 】 指定の書式を示すメッセージを表示する <繰り返し> |  「数値1 演算記号 数値2」の指定を受け取る –> 変数 a, op, b へ |    指定の書式でなかったとき) 繰り返しを抜ける |  演算記号 op に応じた計算をする –> […]

Reverse Polish Notation Calculator

逆ポーランド記法 逆ポーランド記法 逆ポーランド記法を使えば、式の計算をする(評価)には、先頭からひとつずつ順番に記号を読み込み、その記号が演算子以外であればスタックに値を積み、演算子であればスタックから値を取り出して演算し結果をスタックに積む、という簡単な操作の繰り返しだけでよい。そのため、プログラミング初心者の練習課題として、逆ポーランド記法の電卓を作ることがよく行われる。 逆ポーランド記法による計算の例 2+3を計算するとき,逆ポーランド記法では,次のように表す.数値や演算子(+, -, *, /)の間にはスペースを設ける. 2 3 + これはいくつかのメモリー(記憶場所)が準備されているとき, 2を1番目のメモリーに記憶 3を2番目のメモリーに記憶 1番目のメモリーの内容と2番目のメモリーの内容を加算 加算結果を1番目のメモリーに記憶 という手順で計算することを表している. 特徴: 日本語の並びと同じ計算順序 逆ポーランドには括弧がない キータッチ数は最少 【中置記法】 3 * ( 1 + 2 ) / ( ( 4 – 5 ) / ( 6 + 7 ) ) =  キータッチ数は22回 【逆ポーランド記法】 3 1 2 + * 4 5 – 6 7 […]

2.1 演算

C言語の特徴(2) 関数型言語 コンピュータに実行してもらう命令はすべて関数の中に記述されている。関数がプログラムの実行単位。いくつかの関数を組み合わせ、コンピュータへ命令をする。最初にコンピュータが実行する関数はmain()に決まっている。 戻り値の型 関数名(引数リスト) { 命令文; } 命令文(Statement) 名札付き文 式文 複合文 選択文 繰り返し文 ジャンプ文 式(Expression) オペランド 演算子 オペランド… トークン(token) コンパイラが認識する最小単位のテキスト、トークン(token) キーワード 識別子 定数 リテラル文字列 演算子 区切り子 #include <stdio.h> int main() { printf(“Hello World\n”); return 0; } トークンに分解 トークン トークンの種類 int キーワード main 識別子 ( 区切り子 ) 区切り子 { 区切り子 printf 識別子 ( 演算子 “Hello World\n” […]