1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() malloc 2 #include <stdio.h> #include

Similar documents
1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() 2 double *a[ ]; double 1 malloc() dou

mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( )

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l

: CR (0x0d) LF (0x0a) line separator CR Mac LF UNIX CR+LF MS-DOS WINDOWS Japan Advanced Institute of Science and Technology

I J

Original : Hello World! (0x0xbfab85e0) Copy : Hello World! (0x0x804a050) fgets mstrcpy malloc mstrcpy (main ) mstrcpy malloc free fgets stream 1 ( \n

lexex.dvi

目次 第 1 章序論 はじめに 2 第 2 章情報フィルタリングについて コンテンツベースフィルタリング 数量化 Ⅰ 類の概要 協調フィルタリングの概要 7 第 3 章構築システムの機能と構造 提案手法 印象のサ

1.ppt

1-4 int a; std::cin >> a; std::cout << "a = " << a << std::endl; C++( 1-4 ) stdio.h iostream iostream.h C++ include.h 1-4 scanf() std::cin >>

r07.dvi

ohp07.dvi

Microsoft PowerPoint - kougi9.ppt

double 2 std::cin, std::cout 1.2 C fopen() fclose() C++ std::fstream 1-3 #include <fstream> std::fstream fout; int a = 123; fout.open( "data.t

超初心者用

Minimum C Minimum C Minimum C BNF T okenseq W hite Any D

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

O(N) ( ) log 2 N

XMPによる並列化実装2

Microsoft Word - C.....u.K...doc

‚æ4›ñ

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

memo

r08.dvi

Microsoft PowerPoint - guidance.ppt

:30 12:00 I. I VI II. III. IV. a d V. VI

ohp08.dvi

program.dvi

新・明解C言語 実践編

char char 1 signed char unsigned char ( ; single-quote 0x27) ASCII Japan Advanced Institute of Science and Technology

:30 12:00 I. I VI II. III. IV. a d V. VI

Taro-リストⅢ(公開版).jtd

untitled

double float

untitled

新・明解C言語 ポインタ完全攻略

橡Pro PDF

Microsoft Word - Cプログラミング演習(8)

QR

卒 業 研 究 報 告.PDF

C ( ) C ( ) C C C C C 1 Fortran Character*72 name Integer age Real income 3 1 C mandata mandata ( ) name age income mandata ( ) mandat

ex14.dvi

memo

新版明解C言語 実践編

Microsoft Word - Cプログラミング演習(10)

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

memo

Cプログラミング - 第8回 構造体と再帰

untitled

Prog1_15th

comment.dvi

情報処理演習 B8クラス

joho07-1.ppt

debug ( ) 1) ( ) 2) ( ) assert, printf ( ) Japan Advanced Institute of Science and Technology

2008 ( 13 ) C LAPACK 2008 ( 13 )C LAPACK p. 1

プログラミング基礎

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

‚æ2›ñ C„¾„ê‡Ìš|

kiso2-09.key

bitvisor-ipc v12b.key

スライド 1

(K&R 2.9) ~, &,, >>, << 2. (K&R 5.7) 3. (K&R 5.9) 4. (K&R 5.10) (argc argv atoi(), atof() ) 5. (K&R 7.5) (K&R 7.6) - FILE, stdin, stdout, std

matrix util program bstat gram schmidt

ゲームエンジンの構成要素

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

main main Makefile Makefile C.5 Makefile Makefile Makefile A Mech (TA ) 1. Web ( iku

Microsoft PowerPoint - kougi2.ppt

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

Gauss

void hash1_init(int *array) int i; for (i = 0; i < HASHSIZE; i++) array[i] = EMPTY; /* i EMPTY */ void hash1_insert(int *array, int n) if (n < 0 n >=

tuat1.dvi

A/B (2010/10/08) Ver kurino/2010/soft/soft.html A/B

II 3 yacc (2) 2005 : Yacc 0 ~nakai/ipp2 1 C main main 1 NULL NULL for 2 (a) Yacc 2 (b) 2 3 y

PowerPoint Presentation

I 2 tutimura/ I 2 p.1/??

1. ファイルにアクセスするには ファイルにアクセスするには 1. ファイルを開く 2. アクセスする 3. ファイルを閉じるという手順を踏まなければなりません 1.1. ファイルを読み込む まずはファイルの内容を画面に表示させるプログラムを作りましょう 開始 FILE *fp char fname

スライド 1

PC Windows 95, Windows 98, Windows NT, Windows 2000, MS-DOS, UNIX CPU


ohp03.dvi

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:

memo


スライド 1

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

slide4.pptx

演算増幅器


スライド タイトルなし

+ +

PowerPoint Presentation

Taro-リストⅠ(公開版).jtd

C言語によるアルゴリズムとデータ構造

Microsoft PowerPoint - kougi4.ppt

Microsoft PowerPoint - lec10.ppt

Microsoft Word - Cプログラミング演習(9)

Microsoft PowerPoint pptx

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

Transcription:

1 1.1 C 2 1 double a[ ][ ]; 1 3x3 0 1 3x3 ( ) 0.240 0.143 0.339 0.191 0.341 0.477 0.412 0.003 0.921 1.2 malloc() malloc 2 #include <stdio.h> #include <string.h> #include <stdlib.h> enum LENGTH = 10 ; int main() double *a; // a = ( double* )malloc( sizeof(double) * LENGTH ); // free( a ); return 0; 1

1: 1 1 double malloc double 1 2 double 1 3 double *a[ ]; malloc() double 1 malloc() free() 4 #include <stdio.h> #include <string.h> #include <stdlib.h> enum ROWS = 3, COLS = 3 ; int main() double *a[ ROWS ]; // a[ 0 ] = ( double* )malloc( sizeof(double) * ROWS * COLS ); for( int i = 1; i < ROWS; ++i ) a[ i ] = a[ 0 ] + COLS * i; // 2

free( a[ 0 ] ); return 0; 2: 2 ( ) 5 double **a; double 1 malloc() double 1 malloc() double 1 free() double 1 free() malloc() free() 2 malloc() 2 3 3

( ) a[i] = *(a+i) : a[i+j] = *( a + i + j ) = *( (i+a) + j ) = (i+a)[j] a[i][j] = *(a[i]+j) = *(*(a+i)+j) = (*(a+i))[j] 2 2 (rows) (cols) 2 MATRIX 6 struct MATRIX double** dat; // 2 int rows; // int cols; // ; 1. rows cols MATRIX make mat( int rows, int cols ); 2. void free mat( MATRIX A ); 3. void print mat( MATRIX A ); 7 MATRIX A; A = make_mat( 2, 2 ); A.dat[0][0] = 1; A.dat[0][1] = 2; A.dat[1][0] = 3; A.dat[1][1] = 4; print_mat( A ); free_mat( A ); 4 4

3 assert 1. (A B ) (B memmove() ) void copy mat( MATRIX A, MATRIX B ); 2. (A[ r from r to ][ c from c to ] B ) ( B ) void copy submat( MATRIX A, MATRIX B, int r from, int r to, int c from, int c to ); 3. (A T B ) ( B ) void t mat( MATRIX A, MATRIX B ); 4. (A±B C ) ( C ) void plus mat( MATRIX A, MATRIX B, MATRIX C ); minus mat( MATRIX A, MATRIX B, MATRIX C ); 5. (A*B C ) ( C ) void prod mat( MATRIX A, MATRIX B, MATRIX C ); 6. N ( A 1 B ) ( B A ) void inverse mat( MATRIX A, MATRIX B ); 3: 5 main main B 4 csv csv ( comma separated value : ) 1 ( 5

) (,) 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 csv 1.0, 2.0, 3.0 4.0, 5.0, 6.0 7.0, 8.0, 9.0 6 csv void write csv( char* filename, MATRIX A ); exit(1); 7 csv void read csv( char* filename, MATRIX A ); exit(1); MATRIX A make mat() 1. fopen() 2. fgets() 1 3. strtok() 4. atof() 5. 2 4 6. fclose() strtok() strtok() strtok() 8 char buf[ 1024 ]; strcpy( buf, "1.0, 2.0, 3.0" ); char *p; char *q = buf; for(;;) p = strtok( q, "," ); if(!p ) break; q = NULL; double val = atof( p ); fprintf( stdout, "%lf ", val ); 6

8 csv csv 7

A MATRIX make_mat( int rows, int cols ); void free_mat( MATRIX A ); // LU // // src -> LU // dst = LU // void lu_decomp( double** src, double** dst, int* pivot, int rows, int cols ) // src -> dst for( int r = 0; r < rows; ++r ) for( int c = 0; c < cols; ++c ) dst[ r ][ c ] = src[ r ][ c ]; for( int r =0; r < rows; ++r ) pivot[ r ] = r; int max_loop; if( rows > cols ) max_loop = rows; else max_loop = cols; for( int loop = 0; loop < max_loop; ++loop ) // pivot double maxval = dst[ pivot[ loop ] ][ loop ]; int maxrow = loop; for( int r = loop + 1 ; r < rows; ++r ) double tmpval = dst[ pivot[ r ] ][ loop ]; if( tmpval > maxval ) maxval = tmpval; maxrow = r; int tmprow = pivot[ loop ]; pivot[ loop ] = pivot[ maxrow ]; pivot[ maxrow ] = tmprow; // L // loop for( int r = loop + 1 ; r < rows; ++r ) dst[ pivot[ r ] ][ loop ] /= dst[ pivot[ loop ] ][ loop ]; // for( int r = loop + 1; r < rows; ++r ) for( int c = loop + 1; c < cols; ++c ) dst[ pivot[ r ] ][ c ] -= dst[ pivot[ r ] ][ loop ] * dst[ pivot[ loop ] ][ c ]; 8

// // Ax = y // // A[ N ][ N ] : N ( ) // y[ N ] : ( N ) // x[ N ] : ( N ) // void linear_equation( MATRIX A, double* x, double* y ) MATRIX LU; int N; int *pivot; double *z; if( A.cols!= A.rows ) fprintf( stderr, "linear_equation : \n" ); exit( 1 ); N = A.rows; LU = make_mat( N, N ); pivot = ( int* )malloc( sizeof( int ) * N ); z = ( double* )malloc( sizeof( double ) * N ); // A -> LU lu_decomp( A.dat, LU.dat, pivot, N, N ); // Ax = LUx = y Ux = z // Lz = y // Ux = z for( int row = 0; row < N; ++row) z[ row ] = y[ pivot[ row ] ] ; // y pivot for( int col = 0; col < row; ++col ) z[ row ] -= LU.dat[ pivot[ row ] ][ col ] * z[ col ]; for( int row = N-1; row >= 0; --row) x[ row ] = z[ row ]; for( int col = row +1; col < N; ++col ) x[ row ] -= LU.dat[ pivot[ row ] ][ col ] * x[ col ]; x[ row ] /= LU.dat[ pivot[ row ] ][ row ]; free_mat( LU ); free( pivot ); free( z ); 9

B main int main() int rows = 3; int cols = 2; // // // MATRIX A; A = make_mat( rows, cols ); //------------------------------------------------------- // :.dat[ ][ ] = A.dat[0][0] = 1; A.dat[0][1] = 2; A.dat[1][0] = 1; A.dat[1][1] = -3; A.dat[2][0] = -1; A.dat[2][1] = 2; //------------------------------------------------------- // printf( " A\n" ); print_mat( A ); //------------------------------------------------------- // B A printf( "\n \n" ); MATRIX B; B = make_mat( rows, cols ); copy_mat( A, B ); print_mat( B ); free_mat( B ); // B //------------------------------------------------------- // A 1,2,..,rows-1 1,2,...,cols-1 B printf( "\n \n" ); B = make_mat( rows-1, cols-1 ); copy_submat( A, B, 1, rows-1, 1, cols-1 ); print_mat( B ); free_mat( B ); //------------------------------------------------------- 10

// printf( "\n \n" ); B = make_mat( cols, rows ); // t_mat( A, B ); print_mat( B ); free_mat( B ); //------------------------------------------------------- // printf( "\n \n" ); MATRIX D; B = make_mat( rows, cols ); D = make_mat( rows, cols ); B.dat[0][0] = 2; B.dat[0][1] = 0; B.dat[1][0] = -1; B.dat[1][1] = 2; B.dat[2][0] = 0; B.dat[2][1] = 1; printf( "\na\n" ); print_mat( A ); printf( "\nb\n" ); print_mat( B ); plus_mat( A, B, D ); // D = A+B printf( "\na+b\n" ); print_mat( D ); minus_mat( A, B, D ); // D = A-B printf( "\na-b\n" ); print_mat( D ); printf( "\n \n" ); MATRIX C,E; C = make_mat( cols, rows ); // E = make_mat( rows, rows ); // C.dat[0][0] = -1; C.dat[0][1] = 0; C.dat[0][2] = 2; C.dat[1][0] = -1; 11

C.dat[1][1] = 2; C.dat[1][2] = 0; printf( "\na\n" ); print_mat( A ); printf( "\nc\n" ); print_mat( C ); prod_mat( A, C, E ); // E = A*C printf( "\na*c\n" ); print_mat( E ); free_mat( A ); free_mat( B ); free_mat( C ); free_mat( D ); free_mat( E ); //------------------------------------------------------- // printf( "\n \n" ); cols = 3; rows = 3; A = make_mat( rows, cols ); B = make_mat( rows, cols ); A.dat[0][0] = 1; A.dat[0][1] = 2; A.dat[0][2] = 1; A.dat[1][0] = 2; A.dat[1][1] = 3; A.dat[1][2] = 1; A.dat[2][0] = 1; A.dat[2][1] = 2; A.dat[2][2] = 0; inverse_mat( A, B ); printf( "\na\n" ); print_mat( A ); printf( "\na \n" ); print_mat( B ); printf( "\na * (A )\n" ); 12

C = make_mat( rows, cols ); prod_mat( A, B, C ); print_mat( C ); free_mat( A ); free_mat( B ); free_mat( C ); return 0; A 1.000 2.000 1.000-3.000-1.000 2.000 1.000 2.000 1.000-3.000-1.000 2.000-3.000 2.000 1.000 1.000-1.000 2.000-3.000 2.000 A 1.000 2.000 1.000-3.000-1.000 2.000 B 2.000 0.000-1.000 2.000 0.000 1.000 A+B 3.000 2.000 0.000-1.000-1.000 3.000 A-B -1.000 2.000 2.000-5.000 13

-1.000 1.000 A 1.000 2.000 1.000-3.000-1.000 2.000 C -1.000 0.000 2.000-1.000 2.000 0.000 A*C -3.000 4.000 2.000 2.000-6.000 2.000-1.000 4.000-2.000 A 1.000 2.000 1.000 2.000 3.000 1.000 1.000 2.000 0.000 A -2.000 2.000-1.000 1.000-1.000 1.000 1.000-0.000-1.000 A * (A ) 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000 14