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

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

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

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

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

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

I J

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

1.ppt

O(N) ( ) log 2 N

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)* (

lexex.dvi

r07.dvi

ohp07.dvi

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 >>

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) * *

Microsoft PowerPoint - kougi9.ppt

超初心者用

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

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

memo

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

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

r08.dvi

program.dvi

ohp08.dvi

‚æ4›ñ

/* 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

Microsoft PowerPoint - guidance.ppt

ex14.dvi

橡Pro PDF

卒 業 研 究 報 告.PDF

新版明解C言語 実践編

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

新・明解C言語 実践編

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

memo

XMPによる並列化実装2

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

untitled

double float

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

untitled

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

joho07-1.ppt

QR

Prog1_15th

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

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

matrix util program bstat gram schmidt

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

スライド 1

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

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 >=

(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

PowerPoint Presentation

untitled

情報処理演習 B8クラス

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

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

comment.dvi

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

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

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

memo

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

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

Microsoft PowerPoint - kougi2.ppt

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

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


PowerPoint Presentation

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

tuat1.dvi


memo

Microsoft PowerPoint pptx

スライド 1

[ 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:

kiso2-09.key

ohp03.dvi

joho09.ppt

1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1

スライド 1

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

slide4.pptx

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

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

I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b

演算増幅器

+ +

Microsoft PowerPoint - kougi4.ppt


問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

P06.ppt

tuat2.dvi

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() 2 double *a[ ]; double 1 malloc() double 1 malloc() free() 3 #include <stdio.h> #include <string.h> #include <stdlib.h> #define ROWS 3 #define 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; // free( a[ 0 ] ); 1

return 0; 2 3 1.3 4 double **a; double 1 malloc() double 1 malloc() a[i] double 1 free() double 1 free() malloc() free() 2 3 2 2 (rows) (cols) 2 MATRIX 5 struct MATRIX { double** dat; // 2 int rows; // int cols; // ; make mat() 6 MATRIX A; A = make_mat( 10, 10 ); A.dat[0][0] = 1; 2

3 exit(1); 1. (rows) (cols) MATRIX make mat( int rows, int cols ); 2. void free mat( MATRIX A ); 3. void print mat( MATRIX A ); 4. (A B ) (B memmove() ) void copy mat( MATRIX A, MATRIX B ); 5. (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 ); 6. (A T B ) ( B ) void t mat( MATRIX A, MATRIX B ); 7. (A±B C ) ( C ) void plus mat( MATRIX A, MATRIX B, MATRIX C ); minus mat( MATRIX A, MATRIX B, MATRIX C ); 8. (A*B C ) ( C ) void prod mat( MATRIX A, MATRIX B, MATRIX C ); 9. N ( A 1 B ) ( B A ) void inverse mat( MATRIX A, MATRIX B ); 1: 4 main main B 3

4 csv csv ( comma separated value : ) 1 ( ) (,) 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 5 csv void write csv( char* filename, MATRIX A ); exit(1); 6 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() 7 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; 4

double val = atof( p ); fprintf( stdout, "%lf ", val ); 7 csv csv 5

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 ]; 6

// // 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 ); 7

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 ); 8

// 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; 9

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" ); 10

C = make_mat( rows, cols ); prod_mat( A, B, C ); print_mat( C ); free_mat( A ); free_mat( B ); free_mat( C ); return 0; C 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 11

-1.000 2.000 2.000-5.000-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 12