Download : sample-001.c ( utf8 版 )
/*
* 2016/06/03 sample-001.c
*/
/*
* コマンドライン引数
*/
#include <stdio.h>
/*
* main 関数
*/
int main ( int argc, char *argv[] ) { /* main 関数の引数が変化 */
/*
main 関数の引数は、どちらでも良い
「引数を宣言」する事により、「利用が可能」になる
*/
/*
このプログラムを実行する場合は
./sample-001.c.exe abc
の様に、コマンド引数を指定する必要がある
コマンドラインを指定しなかったりすると、
エラー (core dumped) になったりする。
*/
printf ( "一つ目のコマンドライン引数は「" );
printf ( argv[1] );
printf ( "」でした。\n" );
return 0;
}
$ ./sample-001.exe abc 一つ目のコマンドライン引数は「abc」でした。 $
Download : sample-002.c ( utf8 版 )
/*
* 2016/06/03 sample-002.c
*/
/*
* コマンドライン引数 (2)
*/
#include <stdio.h>
/*
* main 関数
*/
int main ( int argc, char *argv[] ) { /* main 関数の引数が変化 */
/*
このプログラムを実行する場合は
./sample-002.c.exe abc 123 zzzzz
の様に、コマンド引数を 2 つ以上、指定する必要がある
*/
printf ( "プログラムファイル名は「" );
printf ( argv[0] ); /* argv[0] はプログラムファイル名 */
printf ( "」でした。\n" );
printf ( "一つ目のコマンドライン引数は「" );
printf ( argv[1] );
printf ( "」でした。\n" );
printf ( "二つ目のコマンドライン引数は「" );
printf ( argv[2] );
printf ( "」でした。\n" );
return 0;
}
$ ./sample-002.exe abc 123 zzzz プログラムファイル名は「./sample-002.exe」でした。 一つ目のコマンドライン引数は「abc」でした。 二つ目のコマンドライン引数は「123」でした。 $
Download : sample-003.c ( utf8 版 )
/*
* 2016/06/03 sample-003.c
*/
/*
* 再起の利用
*/
#include <stdio.h>
/*
* triangle ( N ) -- サイズ N の三角を作る
*/
void triangle ( char *N ) {
if ( !strcmp ( N, "" ) ) { /* サイズ 0 の時 */
/* 何もしない */
} else { /* サイズが一般の N の時 */
triangle ( N + 1 ); /* 文字列は 1 を加えると短かくなる */
/* 再起呼び出し */
printf ( N ); /* N を表示 */
printf ( "\n" ); /* 改行 */
}
}
/*
* main 関数
*/
int main ( void ) { /* main 関数の引数を利用しないので */
triangle ( "***" ); /* サイズ 3 の三角 */
printf ( "---\n" ); /* 仕切り */
triangle ( "1234567" ); /* サイズ 7 の三角 */
return 0;
}
$ ./sample-003.exe * ** *** --- 7 67 567 4567 34567 234567 1234567 $
/*
* 2016/06/03 hanoi2.c
*/
#include <stdio.h>
/*
* 亀プログラムには、s_hanoi.h が必要
*/
#include "s_hanoi.h"
/*
* ハノイの塔 プログラム
*
*/
int main ( void ) {
/*
* 最初は "1" に全ての円盤がおいてある
*/
/*
* ハノイで、できること
* s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する
* s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す
* s_hanoi_clear () : 最初の状態に戻す
* s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す
*/
s_hanoi_init();
s_hanoi_size ( "***" ); // 高さを 7 に設定
putchar ( '>' );
putchar ( getchar() );
/*
1
2
3
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動
s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動
/*
3 1 2
--------------------
(1) (2) (3)
*/
putchar ( '>' );
putchar ( getchar() );
s_hanoi_stop();
return 0;
}
#include <stdio.h>
int main(void) {
printf ( "1:" );
putchar ( getchar() ); /* ???????????A??????o????? */
printf ( "\n" ); /* ????????????A?o????A?v?????v?g?????
?s?????????????A????? */
return 0;
}
#include <stdio.h>
int main(void) {
printf ( "1:" );
putchar ( getchar() ); /* ???????????A??????o????? */
printf ( "\n" ); /* ????????????A?o????A?v?????v?g?????
?s?????????????A????? */
getchar(); /* ??????A??s???????? */
printf ( "2:" );
putchar ( getchar() ); /* ???????????A??????o????? */
printf ( "\n" ); /* ????????????A?o????A?v?????v?g?????
?s?????????????A????? */
getchar(); /* ??????A??s???????? */
printf ( "3:" );
putchar ( getchar() ); /* ???????????A??????o????? */
printf ( "\n" ); /* ????????????A?o????A?v?????v?g?????
?s?????????????A????? */
getchar(); /* ??????A??s???????? */
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[]) {
/*
?R?}???h???C????w?????R?}???h???C????
??????????Aargv ?o?R??A???p?????
??F
../p-004.exe
????..
../p-004.exe abc 123456
argv[1] argv[2]
*/
printf ( argv[1] ); /* ?????R?}???h???C???? */
printf ( "\n" );
printf ( argv[2] ); /* ?????R?}???h???C???? */
printf ( "\n" );
/*
????v???O???????A
../p-004.exe abc 123456
??????A
abc
123456
*/
return 0;
}
/*
* 2016/06/03 p-005.c
*/
#include <stdio.h>
/*
* 亀プログラムには、s_hanoi.h が必要
*/
#include "s_hanoi.h"
/*
* ハノイの塔 プログラム
*
*/
int main ( int argc, char *argv[] ) {
/*
* 最初は "1" に全ての円盤がおいてある
*/
/*
* ハノイで、できること
* s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する
* s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す
* s_hanoi_clear () : 最初の状態に戻す
* s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す
*/
s_hanoi_init();
s_hanoi_size ( argv[1] ); // 高さを 3 に設定
putchar ( '>' );
putchar ( getchar() );
/*
1
2
3
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動
s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動
/*
3 1 2
--------------------
(1) (2) (3)
*/
putchar ( '>' );
putchar ( getchar() );
s_hanoi_stop();
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[]) {
/*
?R?}???h???C????w?????R?}???h???C????
??????????Aargv ?o?R??A???p?????
??F
../p-004.exe
????..
../p-004.exe abc 123456
argv[1] argv[2]
"abc"[1] -> 'b'
"abc"[0] -> 'a'
*/
printf ( argv[0] );
printf ( "\n" );
printf ( argv[1] ); /* ?????R?}???h???C???? */
printf ( "\n" );
printf ( argv[2] ); /* ?????R?}???h???C???? */
printf ( "\n" );
/*
????v???O???????A
../p-004.exe abc 123456
??????A
abc
123456
*/
return 0;
}
/*
* 2016/06/03 p-005.c
*/
#include <stdio.h>
/*
* 亀プログラムには、s_hanoi.h が必要
*/
#include "s_hanoi.h"
/*
* ハノイの塔 プログラム
*
*/
int main ( int argc, char *argv[] ) {
/*
* 最初は "1" に全ての円盤がおいてある
*/
/*
* ハノイで、できること
* s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する
* s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す
* s_hanoi_clear () : 最初の状態に戻す
* s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す
*/
s_hanoi_init();
s_hanoi_size ( argv[1] ); // 高さを 3 に設定
putchar ( '>' );
putchar ( getchar() );
/*
1
2
3
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動
s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動
/*
3 1 2
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "2", "3" ); // ディスク 1 を 2 から 3 に移動
/*
1
3 2
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "1", "2" ); // ディスク 3 を 1 から 2 に移動
/*
1
3 2
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "3", "1" ); // ディスク 1 を 3 から 1 に移動
/*
1 3 2
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "3", "2" ); // ディスク 2 を 3 から 2 に移動
/*
2
1 3
--------------------
(1) (2) (3)
*/
s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動
/*
1
2
3
--------------------
(1) (2) (3)
*/
putchar ( '>' );
putchar ( getchar() );
s_hanoi_stop();
return 0;
}
/*
* 2016/06/03 p-005.c
*/
#include <stdio.h>
/*
* 亀プログラムには、s_hanoi.h が必要
*/
#include "s_hanoi.h"
/*
* ハノイの塔 プログラム
*
*/
int main ( int argc, char *argv[] ) {
/*
* 最初は "1" に全ての円盤がおいてある
*/
/*
* ハノイで、できること
* s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する
* s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す
* s_hanoi_clear () : 最初の状態に戻す
* s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す
*/
s_hanoi_init();
s_hanoi_size ( argv[1] ); // 高さを 3 に設定
putchar ( '>' );
putchar ( getchar() );
/*
1
2
3
--------------------
(1) (2) (3)
*/
/* N = 1 -> 1 = H(1) */
/* N = 2 -> 3 = H(2) */ /* 3 - 1 = 2 */
/* N = 3 -> 7 = H(3) */ /* 7 - 3 = 4 */
/* N = 4 -> 15 = H(4) */ /* ? - 7 = 8 */
/* H(1) + 1 = 2 */
/* H(2) + 1 = 4 */
/* H(3) + 1 = 8 */
/* H(4) + 1 = 16 */
/* H(N) + 1 = 2^N */
/* H(N) = 2^N - 1 */
= 2^(N-1) * 2 - 1
= (2^(N-1) - 1) * 2 + 1
= H(N-1) * 2 + 1
N 段のハノイの塔を解くには、 H(N) だけディスクを動かす
それは
N-1 段のハノイの塔を二回解いて、あと、一回ディスクを動かすのと同じ
位大変だ
*/
/*
1
2
3
------------------
*/
s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動
s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動
s_hanoi_move ( "2", "3" ); // ディスク 1 を 2 から 3 に移動
/*
1
3 2
------------------
*/
s_hanoi_move ( "1", "2" ); // ディスク 3 を 1 から 2 に移動
/*
1
3 2
------------------
*/
s_hanoi_move ( "3", "1" ); // ディスク 1 を 3 から 1 に移動
s_hanoi_move ( "3", "2" ); // ディスク 2 を 3 から 2 に移動
s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動
/*
1
2
3
--------------------
(1) (2) (3)
*/
putchar ( '>' );
putchar ( getchar() );
s_hanoi_stop();
return 0;
}
/*
* 2016/06/03 p-009.c
*/
#include <stdio.h>
/*
* ハノイプログラムには、s_hanoi.h が必要
*/
#include "s_hanoi.h"
/*
* ハノイの塔 プログラム
*
*/
/*
hanoi ( N 段を, From, To, Work )
N
===========
F T W
*/
void hanoi(char *N, char *From, char *To, char *Work ) {
/*
N 段を From, から To へ、 Work を使って移動したい
N - 1 段を、From から Work に移動する
From から To へ、一つ運ぶ
N - 1 段を、Work から、 To に移動する
*/
if ( !strcmp ( N, "" ) ) {
/* */
} else {
hanoi ( N + 1, From, Work, To );
s_hanoi_move ( From, To );
hanoi ( N + 1, Work, To, From );
}
}
int main ( int argc, char *argv[] ) {
/*
* 最初は "1" に全ての円盤がおいてある
*/
/*
* ハノイで、できること
* s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する
* s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す
* s_hanoi_clear () : 最初の状態に戻す
* s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す
*/
s_hanoi_init();
s_hanoi_size ( argv[1] ); // 高さを 3 に設定
putchar ( '>' );
putchar ( getchar() );
hanoi ( argv[1], "1", "2", "3" );
putchar ( '>' );
putchar ( getchar() );
s_hanoi_stop();
return 0;
}