当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/*
* 2011/11/11 sample-001.c
*/
/*
*
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
* データ型(平面上の点)を表す型(Point2D)の定義
*/
typedef struct {
int x; /* x 座標 */
int y; /* y 座標 */
} Point2D; /* 新しい型 Point2D の定義 */
/*
* 入力 (Input)
* キーボードから「点」を「座標の形」で入力してもらる
*/
Point2D input_Point2D() {
Point2D result;
s_print_string ( "x=" ); /* x 座標の入力 */
result.x = s_input_int();
s_print_string ( "y=" ); /* y 座標の入力 */
result.y = s_input_int();
return result; /* 入力した結果を返す */
}
/*
* 出力 (Output)
* 「点」を、画面に出力する ( 座標の形で.. )
*/
void output_Point2D( Point2D pt ) {
s_print_string ( "( " );
s_print_int ( pt.x );
s_print_string ( ", " );
s_print_int ( pt.y );
s_print_string ( " )" );
}
/*
* move_x_Point2D
* x 方向の移動: 点 pt を x 軸方向に dx だけ平行移動する関数
*/
Point2D move_x_Point2D( Point2D pt, int dx ) {
pt.x += dx; /* 点 pt の x 座標だけを dx だけ増やす */
/* pt.x は pt の x の部分 */
/*
「pt.x += dx」は「pt.x = pt.x + dx」 の省略形
( cf. x++ ⇔ x += 1 ⇔ x = x + 1 )
*/
/* pt が (2,4)で dx が 3 だったら
この代入文で (2,5) になる */
return pt; /* この計算した (座標) を結果として返す */
/*
Point2D result; // 結果の値を入れる変数
result.x = pt.x + dx; // 新しい x 座標は、元の座標+移動距離
result.y = pt.y; // 新しい y 座標は、元と同じ
return result; // 新しい座標を結果として返す
*/
}
/*
* y 方向の移動
*/
Point2D mopte_y_Point2D( Point2D pt, int dy ) {
pt.y += dy;
return pt;
}
/*
* 90 度回転
*/
Point2D rotate_Point2D( Point2D pt ) {
Point2D result; /* 90 回転した結果を入れる */
/*
(x,y) -> (y,-x)
*/
result.x = - pt.y; /* 新しい x 座標は、元の y 座標の符号をかえたもの */
result.y = pt.x; /* 新しい y 座標は、元の x 座標 */
return result; /* 結果を返す */
}
/*
*
*/
int main ( void ) {
Point2D pt;
Point2D pt2;
int c;
s_print_string ( "一つ目の点の座標をいれてください。\n" );
pt = input_Point2D();
output_Point2D( pt );
s_print_string ( "が入力されました。\n" );
s_print_string ( "x 軸方向の移動量をいれてください\n" );
c = s_input_int();
s_print_int ( c );
s_print_string ( "だけ x 軸方向に移動します。\n" );
pt2 = move_x_Point2D ( pt, c );
output_Point2D( pt2 );
s_print_string ( " になりました\n" );
s_print_string ( " 90 度回転した結果は " );
output_Point2D( rotate_Point2D ( pt ) );
s_print_string ( " となります\n" );
return 0;
}
/*
*
*/
2 3 4
C:\usr\c\> sample-001< sample-001.in 一つ目の点の座標をいれてください。 x=2 y=3 ( 2, 3 )が入力されました。 x 軸方向の移動量をいれてください 4 4だけ x 軸方向に移動します。 ( 6, 3 ) になりました 90 度回転した結果は ( -3, 2 ) となります C:\usr\c\>
Download : sample-002.c ( SJIS 版 )
/*
* 2011/11/11 sample-002.c
*/
/*
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "s_print.h"
#include "s_input.h"
/*
* 有理数(分数)を表す型(Rational)の定義
*/
typedef struct {
int bunbo; /* 分母 (自然数 > 0) */
int bunshi; /* 分子 (整数)*/
} Rational; /* 新しい型 Rational の定義 */
int iabs ( int v ) {
if ( v < 0 ) {
v = -v;
}
return v;
}
int gcm ( int m, int n ) {
if ( n == 0 ) {
return m;
} else {
return gcm ( n, m % n );
}
}
Rational normalize_Rational ( Rational r ) {
int g; /* 分母、分子の共通因数 */
if ( r.bunbo == 0 ) { /* 有理数としては表現不可 */
s_print_string ( "分母が 0 なので、終了します\n" );
exit ( -1 ); /* プログラムを終了する。その時 error code -11 とする */
}
if ( r.bunbo < 0 ) { /* -2/-4 -> 2/4 */
r.bunbo = - r.bunbo;
r.bunshi = - r.bunshi;
}
/* 約分をする */
g = gcm ( r.bunbo, iabs ( r.bunshi ) );
r.bunbo /= g; /* r.bunbo = r.bunbo / g */
r.bunshi /= g;
return r;
}
/*
0 (整数値)は、<1,0> (分母が 1 となる) 形にする
/*
* 入力 (Input)
* キーボードから「点」を「座標の形」で入力してもらる
*/
Rational input_Rational() {
Rational result;
s_print_string ( "分子=" ); /* 分子の入力 */
result.bunshi = s_input_int();
s_print_string ( "分母=" ); /* 分母の入力 */
result.bunbo = s_input_int();
return normalize_Rational ( result ); /* 入力した結果を正規化して返す */
}
/*
* 出力 (Output)
* 「有理数」を、画面に出力する ( 分数の形で.. )
*/
void output_Rational( Rational r ) {
s_print_int ( r.bunshi );
if ( r.bunbo > 1 ) {
s_print_string ( " / " );
s_print_int ( r.bunbo );
}
}
/*
* multiply_Rational : 有理数のかけ算
*/
Rational multiply_Rational ( Rational a, Rational b ) {
Rational result;
result.bunshi = a.bunshi * b.bunshi;
result.bunbo = a.bunbo * b.bunbo;
return normalize_Rational ( result ); /* 約分の問題も解決 */
}
/*
*
*/
int main ( void ) {
Rational r;
Rational s;
s_print_string ( "一つ目の有理数をいれてください。\n" );
r = input_Rational();
output_Rational( r );
s_print_string ( "が入力されました。\n" );
s_print_string ( "二つ目の有理数をいれてください。\n" );
s = input_Rational();
output_Rational( r );
s_print_string ( " と " );
output_Rational( s );
s_print_string ( " の積は " );
output_Rational( multiply_Rational ( r, s ) );
s_print_string ( " となります。\n" );
return 0;
}
/*
*
*/
1 2 2 3
C:\usr\c\> sample-002< sample-002.in 一つ目の有理数をいれてください。 分子=1 分母=2 1 / 2が入力されました。 二つ目の有理数をいれてください。 分子=2 分母=3 1 / 2 と 2 / 3 の積は 1 / 3 となります。 C:\usr\c\>
Download : 20111111-01.c ( SJIS 版 )
/*
* 20111111-1-QQQQ.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
* データ型 : Vector2D の定義
*/
typedef struct {
int x; /* x 成分 */
int y; /* y 成分 */
} Vector2D;
/*
typedef struct {
int length; // 長さ
int angle; // 角度
} Vector2D; // 極座標表現
| v
| /
| / 長さ
|/ 角度
----+---------
*/
/*
* 入力 (Input)
*/
Vector2D input_Vector2D() {
Vector2D result;
s_print_string ( "x=" );
result.x = s_input_int();
/*
** この部分を完成させなさい
*/
return result;
}
/*
* 出力 (Output)
*/
void output_Vector2D( Vector2D v ) {
s_print_string ( "( " );
s_print_int ( v.x );
s_print_string ( ", " );
/*
** この部分を完成させなさい
*/
s_print_string ( " )" );
}
/*
* 定数倍
*/
Vector2D scale_Vector2D( int c, Vector2D v ) {
v.x *= c; /* v.x = v.x * c の事 */
/*
** この部分を完成させなさい
*/
return v;
}
/*
* 和
*/
Vector2D add_Vector2D( Vector2D v, Vector2D w ) {
Vector2D result;
result.x = v.x + w.x;
/*
** この部分を完成させなさい
*/
return result;
}
/*
*
*/
int main ( void ) {
Vector2D v;
Vector2D w;
Vector2D r;
int c;
s_print_string ( "一つ目のベクトルをいれてください。\n" );
v = input_Vector2D();
output_Vector2D( v );
s_print_string ( "が入力されました。\n" );
s_print_string ( "拡大サイズをいれてください\n" );
c = s_input_int();
s_print_int ( c );
s_print_string ( " 倍します\n" );
r = scale_Vector2D ( c, v );
s_print_string ( "結果は \n" );
output_Vector2D( r );
s_print_string ( " です。\n" );
s_print_string ( "二つ目のベクトルをいれてください。\n" );
w = input_Vector2D();
output_Vector2D( v );
s_print_string ( " と " );
output_Vector2D( w );
s_print_string ( " の和は " );
output_Vector2D( add_Vector2D ( v, w ) );
s_print_string ( " となります\n" );
return 0;
}
/*
*
*/
3 4 2 -2 9
C:\usr\c\> 01< 01.in 一つ目のベクトルをいれてください。 x=3 y=4 ( 3, 4 )が入力されました。 拡大サイズをいれてください 2 2 倍します 結果は ( 6, 8 ) です。 二つ目のベクトルをいれてください。 x=-2 y=9 ( 3, 4 ) と ( -2, 9 ) の和は ( 1, 13 ) となります C:\usr\c\>