Relative Content

Author Archive for chen

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” […]

7.3 math and utility

数学関数 数学的な計算が必要な場合に使用する命令セットです。引数と返りは全てdouble型になります。 主なもの: sin(x):角度x(ラジアン)のsinの値を返す cos(x):角度x(ラジアン)のcosの値を返す tan(x):角度x(ラジアン)のtanの値を返す pow(x,y):xのy乗の値を返す exp(x):指数関数eのx乗の値を返す log(x):xの自然対数の値を返す log10(x):xの常用対数の値を返す sqrt(x):xの平方根の値を返す ceil(x):小数第一位を切り捨てした値を返す floor(x):小数第一位を切り上げした値を返す round(x):小数第一位を四捨五入した値を返す サンプル: #include <stdio.h> #include <math.h> //math.hのインクルードを忘れずに int main(int argc, const char * argv[]) { // insert code here… double value = 0.5; printf(“sin : %f\n”, sin(value));     printf(“sqrt : %f\n”, sqrt(value)); printf(“ceil : %d\n”, (int)ceil(value)); printf(“floor : %d\n”, (int)floor(value)); return 0; }  文字列を数値型に変換する関数 文字列を数値型にするときに使われる関数がatoi関数(整数型に変換する場合)とatof関数(小数型に変換する場合)があります。 サンプル: […]

C# exercises (4) Slot machine

Visual Studio community 2015 アカウントについて (学内専用) スロットマシンの作成 Slot machine スロットのプログラムに必要な3つの部品 数字を表示させるための部品   → ラベル (Labelコントロール) スロットを開始するための部品   → ボタン (Buttonコントロール) 数字の書き換えを短い間隔で行うため、その間隔を計るための部品   → タイマー (Timerコントロール) これらの部品はツールボックスに入っている デザイン 部品の貼り付け 文字の大きさの変更 フォントの大きさを72ポイント程度にする プログラム コントロールとプログラムの関係 コントロールに対して何かをすると、イベントが発生する イベントに対応したプログラムを作成する フォーム上のボタン(button1)をダブルクリックすると、ボタンをクリックしたときに発生するイベントに対応したプログラム(button1_Click)が自動的に生成される Timerコントロール 一定の間隔で処理をさせたいときに使う timer1:Timerコントロールの変数名 Start()はタイマーを開始する命令 Intervalに設定している間隔で、定期的にtimer1_Tick()を発生させる Intervalプロパティに設定する時間はミリ秒単位 Intervalプロパティに100を設定すると、100ミリ秒(0.1秒)ごとにtimer1_Tick()が呼ばれる 乱数を生成するイベントのプログラムの作成 0以上10未満の乱数を生成する Timerコントロールをダブルクリック –フォームの下に貼り付いているTimerコントロールをダブルクリックすると、自動的にtimer1_Tickというイベントのプログラムが生成される –その中に、以下のプログラムを書く –Next()命令により、0以上10未満の乱数を生成する –それをLabelコントロールのTextプロパティに代入する using System; using System.Collections.Generic; using System.ComponentModel; using […]

C# exercises (3) Common Control

ディジタル時計の作成 Create Digital Clock デザイン ツールボックスの中で、 –コモンコントロール「TextBox」 –コンポーネント「Timer」 Formにドラッグ&ドロップする Timerのプロパティ(値)を変更 timer1のプロパティ Enabled⇒ True (Enabled:タイマーを実行する) Interval⇒ 1000 (Interval:タイマーの実行間隔, 1000⇒1000ms(1秒))   TextBoxのプロパティ Font :36ポイント –文字のサイズ⇒好きなサイズに ForeColor :緑 –文字の色⇒好きな色に BackColor :ブラック –TextBoxの背景色⇒好きな色に TextAlign :Center –文字を表示する場所⇒真ん中(Center) Text: 00:00:00 –表示する文字列⇒最初は00時00分00秒をあらわす     ディジタル時計の完成 timer1をダブルクリックすると、timer処理に関する関数(メソッド)が自動生成される using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; […]

1.3 入力

puts関数:表示を行う関数 書式化の必要がなく、改行もしたいの場合 puts(“ABC”); printf(“ABC\n”);   scanf関数:読込みを行う関数 scanf関数は、処理の途中でキーボードから文字の入力を求め、入力されたものを処理に利用するというものです。 実例: #include <stdio.h> int main(int argc, const char * argv[]) { // insert code here… int input; printf(“数字を入力して下さい。\n”); scanf(“%d”, &input); printf(“入力された数字は、%dです。\n”, input); getch(); return 0; }   実行例: 数字を入力して下さい。 3 入力された数字は、3です。  テキストが出力され キーボードからの入力待ちの状態。入力してエンターキーを押しますと処理が再開 書式付き出力 scanfの2番目の引数に変数を指定する際は、「&(変数名)」というように「&」をつけてポインタとして扱って下さい。そういうルールだと思っていただいて構いません。 実践レベルの問題を考えれば、実は scanf() 関数が使われることは滅多にありません。理由はエラーチェックが十分にできないからです。十分なエラーチェックを行う必要がある入力は(商用のプログラムは十分なエラーチェックが必要であり、結果として本格的なプログラムには scanf() をあまり使わない)変換作業を行わずに、他の標準入力関数を用いて文字列として入力された情報を受け取り、入力された文字列を調べて適切な値に変換するというような作業を行います。もちろんこれらの作業は複雑になります。

Nim game

Nim game ニム (nim) は、2人で行うレクリエーション数学ゲームの1つである。ルーツは古代中国からあるとされ、16世紀初めの西欧で基本ルールが完成したが、名前については、一般的に1901年にハーバード大学のチャールズ・L.バウトン (Charles L. Bouton) によって名付けられたとされる。 ゲームルール: 一人1個か2個か3個か4個だけ取れて、交互にやっていって、 最後の1個の石を取った人が負けとなります。 #include <stdio.h> int main(void) { int i, stone, n=0, turn=0; char name[2][256]; printf(“Input players’ names\n”); printf(“player 1:”); gets(name[0]); printf(“player 2:”); gets(name[1]); printf(“\nnumber of stones:”); scanf(“%d”, &stone); while (stone > 0){ printf(“\nThere are %d stones.\n”, stone); printf(“%s’s turn! Take some stones:”, name[turn]); while (n […]