diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31d4995 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.d +*.o +a.out + diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..98c2a8a --- /dev/null +++ b/README.txt @@ -0,0 +1,46 @@ +sp01 + +とくに工夫をせず、main関数のみ + + +sp02 + +マクロを使用した。 + + +sp03 + +関数を使用した。ただし、配列はグローバル変数。 + + +sp04 + +関数を使用した。配列はmain関数のなかでローカル変数として定義。 +これにより、名前の衝突が起きにくくなる。 +また、関数の引数としてデータを渡せるので、関数の利便性が向上した。 + + +zenbu_izon/ + +sp04について、各関数をファイルに分けた。 +ヘッダファイル hd.h は、すべてのファイルがinclude している。 +そのため、SIZEの値を変更して(たとえば 10→11)ビルドすると +すべてのファイルをコンパイルする必要がある。 + + +less_izon/ + +zenbu_izon/ を改良し、関数呼び出し時に配列サイズを +引数で渡すようにした。 +これにより、ヘッダファイル hd.h に依存しているソースコードは +main.c と input.c のみとなった。 +そのため、SIZEの値を変更して(たとえば 10→11)ビルドすると +main.c と input.c のみがコンパイルされる。 + + + + + + + + diff --git a/less_izon/Makefile b/less_izon/Makefile new file mode 100644 index 0000000..ef1f7cc --- /dev/null +++ b/less_izon/Makefile @@ -0,0 +1,21 @@ +CC = gcc +CFLAGS = -Wall -MMD +SRCS = $(wildcard *.c) +OBJS = $(SRCS:.c=.o) +DEPS = $(OBJS:.o=.d) +TARGET = a.out + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CC) $(CFLAGS) -o $@ $^ + +-include $(DEPS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(DEPS) $(TARGET) + + diff --git a/less_izon/hd.h b/less_izon/hd.h new file mode 100644 index 0000000..abe03bf --- /dev/null +++ b/less_izon/hd.h @@ -0,0 +1,5 @@ +//------------------------------------------------------- +//◎hd.h +#define SIZE 10 + + diff --git a/less_izon/input.c b/less_izon/input.c new file mode 100644 index 0000000..c7d563a --- /dev/null +++ b/less_izon/input.c @@ -0,0 +1,11 @@ +//------------------------------------------------------- +//◎input.c +#include "hd.h" +static int const in_data[SIZE] = {2, 3, 6, 8, 4, 10, 5, 7, 9, 1}; +int input(int data[], int size) { + int i; + for( i = 0; i < size; i += 1) { + data[i] = in_data[i]; + } + return 0; +} // end of input diff --git a/less_izon/main.c b/less_izon/main.c new file mode 100644 index 0000000..ba4bbb2 --- /dev/null +++ b/less_izon/main.c @@ -0,0 +1,15 @@ +//------------------------------------------------------- +//◎main.c +#include "hd.h" +extern int input(int data[], int size); +extern void sort(int data[], int size); +extern int output(int data[], int size); + +int main() { + + int data[SIZE]; + input( data, SIZE ); + sort( data, SIZE ); + output( data, SIZE ); + return 0; +} // end main diff --git a/less_izon/output.c b/less_izon/output.c new file mode 100644 index 0000000..509467c --- /dev/null +++ b/less_izon/output.c @@ -0,0 +1,11 @@ +//------------------------------------------------------- +//◎output.c +#include +int output(int data[], int size) { + int i; + for( i = 0; i < size; i += 1) printf("%d ", data[i]); + printf("\n"); + return 0; +} // end of output + + diff --git a/less_izon/sort.c b/less_izon/sort.c new file mode 100644 index 0000000..14720e5 --- /dev/null +++ b/less_izon/sort.c @@ -0,0 +1,16 @@ +//------------------------------------------------------- +//◎sort.c + +void sort(int data[], int size) { + int x; + int i, j; + for( i = 0; i < size; i += 1) { + x = data[i]; + j = i; + while((data[j-1] > x) && (j > 0)) { + data[j] = data[j-1]; + j = j-1; + } + data[j]=x; + } +} // end of sort diff --git a/sp01.c b/sp01.c new file mode 100644 index 0000000..ad42f66 --- /dev/null +++ b/sp01.c @@ -0,0 +1,29 @@ +#include +static int const in_data[10] = {2, 3, 6, 8, 4, 10, 5, 7, 9, 1}; +int main() { + int data[10]; + int x; + int i, j; + + for( i = 0; i < 10; i +=1) { + data[i] = in_data[i]; + } + + for( i = 0; i < 10; i += 1) { + x = data[i]; + j = i; + while((data[j-1] > x) && (j > 0)) { + data[j] = data[j-1]; + j = j-1; + } + data[j]=x; + } + + for( i = 0; i < 10; i += 1) { + printf("%d ", data[i]); + } + printf("\n"); + return 0; +} // end main + + diff --git a/sp02.c b/sp02.c new file mode 100644 index 0000000..fb917a7 --- /dev/null +++ b/sp02.c @@ -0,0 +1,29 @@ +#include +#define SIZE 10 +static int const in_data[SIZE] = {2, 3, 6, 8, 4, 10, 5, 7, 9, 1}; +int main() { + int data[SIZE]; + int x; + int i, j; + + for( i = 0; i < SIZE; i += 1) { + data[i] = in_data[i]; + } + + for( i = 0; i < SIZE; i += 1) { + x = data[i]; + j = i; + while((data[j-1] > x) && (j > 0)) { + data[j] = data[j-1]; + j = j-1; + } + data[j]=x; + } + + for( i = 0; i < SIZE; i += 1) { + printf("%d ", data[i]); + } + printf("\n"); + return 0; +} // end main + diff --git a/sp03.c b/sp03.c new file mode 100644 index 0000000..e4c69c7 --- /dev/null +++ b/sp03.c @@ -0,0 +1,38 @@ +#include +#define SIZE 10 +int data[SIZE]; // モジュール(関数)で共有するデータ +static int const in_data[SIZE] = {2, 3, 6, 8, 4, 10, 5, 7, 9, 1}; +int input() { + int i; + for( i = 0; i < SIZE; i += 1) { + data[i] = in_data[i]; + } + return 0; +} // end of input +void sort() { + int x; + int i, j; + for( i = 0; i < SIZE; i += 1) { + x = data[i]; + j = i; + while((data[j-1] > x) && (j > 0)) { + data[j] = data[j-1]; + j = j-1; + } + data[j]=x; + } +} // end of sort +int output() { + int i; + for( i = 0; i < SIZE; i += 1) printf("%d ", data[i]); + printf("\n"); + return 0; +} // end of output + +int main() { + input(); + sort(); + output(); + return 0; +} // end main + diff --git a/sp04.c b/sp04.c new file mode 100644 index 0000000..ae485aa --- /dev/null +++ b/sp04.c @@ -0,0 +1,39 @@ +#include +#define SIZE 10 +// データをグローバル変数ではなく、main関数内で定義 +static int const in_data[SIZE] = {2, 3, 6, 8, 4, 10, 5, 7, 9, 1}; +int input(int data[]) { + int i; + for( i = 0; i < SIZE; i += 1) { + data[i] = in_data[i]; + } + return 0; +} // end of input +void sort(int data[]) { + int x; + int i, j; + for( i = 0; i < SIZE; i += 1) { + x = data[i]; + j = i; + while((data[j-1] > x) && (j > 0)) { + data[j] = data[j-1]; + j = j-1; + } + data[j]=x; + } +} // end of sort +int output(int data[]) { + int i; + for( i = 0; i < SIZE; i += 1) printf("%d ", data[i]); + printf("\n"); + return 0; +} // end of output + +int main() { + int data[SIZE]; + input( data ); + sort( data ); + output( data ); + return 0; +} // end main + diff --git a/zenbu_izon/Makefile b/zenbu_izon/Makefile new file mode 100644 index 0000000..ef1f7cc --- /dev/null +++ b/zenbu_izon/Makefile @@ -0,0 +1,21 @@ +CC = gcc +CFLAGS = -Wall -MMD +SRCS = $(wildcard *.c) +OBJS = $(SRCS:.c=.o) +DEPS = $(OBJS:.o=.d) +TARGET = a.out + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CC) $(CFLAGS) -o $@ $^ + +-include $(DEPS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) $(DEPS) $(TARGET) + + diff --git a/zenbu_izon/hd.h b/zenbu_izon/hd.h new file mode 100644 index 0000000..7dfab9d --- /dev/null +++ b/zenbu_izon/hd.h @@ -0,0 +1,5 @@ +//------------------------------------------------------- +//◎hd.h +#define SIZE 12 + + diff --git a/zenbu_izon/input.c b/zenbu_izon/input.c new file mode 100644 index 0000000..1de85f2 --- /dev/null +++ b/zenbu_izon/input.c @@ -0,0 +1,12 @@ +//------------------------------------------------------- +//◎input.c +#include "hd.h" +static int const in_data[SIZE] = {2, 3, 6, 8, 4, 10, 5, 7, 9, 1}; +int input(int data[]) { + int i; + for( i = 0; i < SIZE; i += 1) { + data[i] = in_data[i]; + } + return 0; +} // end of input + diff --git a/zenbu_izon/main.c b/zenbu_izon/main.c new file mode 100644 index 0000000..9117dd7 --- /dev/null +++ b/zenbu_izon/main.c @@ -0,0 +1,17 @@ +//------------------------------------------------------- +//◎main.c +#include "hd.h" +extern int input(int data[]); +extern void sort(int data[]); +extern int output(int data[]); + +int main() { + + int data[SIZE]; + input( data ); + sort( data ); + output( data ); + return 0; +} // end main + + diff --git a/zenbu_izon/output.c b/zenbu_izon/output.c new file mode 100644 index 0000000..0de7101 --- /dev/null +++ b/zenbu_izon/output.c @@ -0,0 +1,12 @@ +//------------------------------------------------------- +//◎output.c +#include +#include "hd.h" +int output(int data[]) { + int i; + for( i = 0; i < SIZE; i += 1) printf("%d ", data[i]); + printf("\n"); + return 0; +} // end of output + + diff --git a/zenbu_izon/sort.c b/zenbu_izon/sort.c new file mode 100644 index 0000000..3594cef --- /dev/null +++ b/zenbu_izon/sort.c @@ -0,0 +1,17 @@ +//------------------------------------------------------- +//◎sort.c +#include "hd.h" +void sort(int data[]) { + int x; + int i, j; + for( i = 0; i < SIZE; i += 1) { + x = data[i]; + j = i; + while((data[j-1] > x) && (j > 0)) { + data[j] = data[j-1]; + j = j-1; + } + data[j]=x; + } +} // end of sort +