U E D R , A S I H C RSS

새싹교실/2017/C언어가르쳐조/5월30일

Difference between r1.14 and the current

@@ -21,7 +21,7 @@
* N * N 행렬을 곱한 결과를 반환하는 '''함수''' 작성
* int** matrix_mul(int **s, int **t, int N);
* #3 : qsort 써보기
* void qsort(void* base, size_t n, size_t size, int (*comp)(void*, void*); //<stdlib.h>에 있는 표준 함수
* void qsort(void* base, size_t n, size_t size, int (*comp)(void*, void*)); //<stdlib.h>에 있는 표준 함수
* 입력 :
* line 1 : 정렬 할 수의 개수 ( 0 < N <= 1,000,000)
* line 2 ~ : 정렬 할 수 (양의 정수, < 1,000,000)
@@ -30,7 +30,65 @@
* 좋은 정렬법을 아시면 직접 짜보세요!
* '''좋은''' 정렬법!
= 실습 =
* #2 테스트 코드
{{{
#include <stdio.h>
#include <stdlib.h>
 
int** matrix_mul(int **s, int **t, int N);
 
int main(int argc, char** argv){
int A[3][3] = {
{1, 1, 2},
{1, 0, 1},
{0, 3, 0}
};
int B[3][3] = {
{2, 1, 3},
{1, 3, 2},
{1, 2, 0}
};
int *parr_A[3] = {A[0], A[1], A[2]};
int *parr_B[3] = {B[0], B[1], B[2]};
int **AB = (void*)0;
int i, j, N = 3;
 
printf("A : \n");
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ", A[i][j]);
}
printf("\n");
}

printf("B : \n");
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ", B[i][j]);
}
printf("\n");
}
AB = matrix_mul(parr_A, parr_B, N);
if(AB){
printf("A x B : \n");
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ", AB[i][j]);
}
printf("\n");
}
}
 
return 0;
}
 
 
int** matrix_mul(int **s, int **t, int N){
//여기 작성
}
 
 
}}}
* 안재형
* #1
{{{
@@ -63,6 +121,33 @@
return 0;
}
}}}
#2
{{{
int **matrix_mul(int **s, int **t, int N)
{
int **M = (int *)malloc(sizeof(int)*N);
int value;
 
for (int sentinel = 0; sentinel < N; sentinel++)
*(M + sentinel) = (int *)malloc(sizeof(int)*N);
 
for (int sentinel = 0; sentinel < N; sentinel++)
{
for (int sentinel_2 = 0; sentinel_2 < N; sentinel_2++)
{
value = 0;
for (int sentinel_3 = 0; sentinel_3 < N; sentinel_3++)
{
value += s[sentinel][sentinel_3] * t[sentinel_3][sentinel_2];
}
M[sentinel][sentinel_2] = value;
}
}
 
return M;
}
}}}


* 이민지
@@ -104,6 +189,85 @@
return 0;
}
}}}
#2
{{{
#include <stdio.h>
#include <stdlib.h>
 
int** matrix_mul(int **s, int **t, int N);
 
int main(int argc, char** argv)
{
int A[3][3] = {
{ 1, 1, 2 },
{ 1, 0, 1 },
{ 0, 3, 0 }
};
int B[3][3] = {
{ 2, 1, 3 },
{ 1, 3, 2 },
{ 1, 2, 0 }
};
int *parr_A[3] = { A[0], A[1], A[2] };
int *parr_B[3] = { B[0], B[1], B[2] };
int **AB = (void*)0;
int i, j, N = 3;
 
printf("A : \n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", A[i][j]);
}
printf("\n");
}
 
printf("B : \n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", B[i][j]);
}
printf("\n");
}
AB = matrix_mul(parr_A, parr_B, N);
if (AB) {
printf("A x B : \n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", AB[i][j]);
}
printf("\n");
}
}
 
return 0;
}
 
 
int** matrix_mul(int **s, int **t, int N)
{
int** re = (int**)malloc(sizeof(int*)*N);
int i,j,k,o;
for (i = 0; i < N; i++)
{
re[i] = (int*)malloc(sizeof(int)*N);
}
for (j = 0; j < N; j++)
{
for (k = 0; k < N; k++)
{
re[j][k] = 0;
for (o = 0; o < N; o++)
{
re[j][k] += s[j][o] * t[o][k];
}
}
}
return re;
}
}}}
= 기타 / 후기 / 방명록 =

-----------------------------------



1. 예정

  • 다음 주(6/6) : 현충일
    • 어쩔까요?
  • 다다음 주(6/13) : 시험대비 특강
  • 1학기 종료 후
    • 1안 : 여름방학때 한다.
    • 2안 : 2학기에 한다.
    • 3안 : 이대로 안녕한다.
  • 오늘은 실습날
  • #1 : 배열 뒤집기
    • 작성 후 위키에 올려주세요.
    • 입력 :
      • line 1 : 배열의 크기( 0 < N <= 1,000,000)
      • line 2 ~ N + 1 : 배열에 들어갈 값(자연수, < 1,000,000)
    • 출력 : line N + 1 ~ line 2의 값
    • tip :
      • N번보다 적게 볼 수도 있다.
      • (이 문제에서는)배열을 뒤집지 않아도 된다.
  • #2 : 정사각 행렬곱 함수 작성
    • N * N 행렬을 곱한 결과를 반환하는 함수 작성
    • int** matrix_mul(int **s, int **t, int N);
  • #3 : qsort 써보기
    • void qsort(void* base, size_t n, size_t size, int (*comp)(void*, void*)); //<stdlib.h>에 있는 표준 함수
    • 입력 :
      • line 1 : 정렬 할 수의 개수 ( 0 < N <= 1,000,000)
      • line 2 ~ : 정렬 할 수 (양의 정수, < 1,000,000)
    • 출력 : 정렬 된 N개의 수
    • tip :
      • 좋은 정렬법을 아시면 직접 짜보세요!
      • 좋은 정렬법!

2. 실습

  • #2 테스트 코드

#include <stdio.h>
#include <stdlib.h>

int** matrix_mul(int **s, int **t, int N);

int main(int argc, char** argv){
	int A[3][3] = {
		{1, 1, 2},
		{1, 0, 1},
		{0, 3, 0}
	};
	int B[3][3] = {
		{2, 1, 3},
		{1, 3, 2},
		{1, 2, 0}
	};
	int *parr_A[3] = {A[0], A[1], A[2]};
	int *parr_B[3] = {B[0], B[1], B[2]};
	int **AB = (void*)0;
	int i, j, N = 3;

	printf("A : \n");
	for(i = 0; i < N; i++){
		for(j = 0; j < N; j++){
			printf("%d ", A[i][j]);
		}
		printf("\n");
	}

	printf("B : \n");
	for(i = 0; i < N; i++){
		for(j = 0; j < N; j++){
			printf("%d ", B[i][j]);
		}
		printf("\n");
	}
	AB = matrix_mul(parr_A, parr_B, N);
	if(AB){
		printf("A x B : \n");
		for(i = 0; i < N; i++){
			for(j = 0; j < N; j++){
				printf("%d ", AB[i][j]);
			}
			printf("\n");
		}
	}

	return 0;
}


int** matrix_mul(int **s, int **t, int N){
    //여기 작성
}


  • 안재형
    • #1

#include <stdio.h>

int main(void)
{
	int *i = (int *)malloc(sizeof(int) * 1000000);
	int *count_i = (int *)malloc(sizeof(int) * 1000000);
	int input;

	scanf("%d", &input);

	for (int sentinel = 0; sentinel < input; sentinel++)
	{
		scanf("%d", &i[sentinel]);
	}
	
	for (int sentinel = 0; sentinel < input; sentinel++)
	{
		count_i[sentinel] = i[input - sentinel - 1];
	}

	for (int sentinel = 0; sentinel < input; sentinel++)
	{
		printf("%d ", count_i[sentinel]);
	}
	printf("\n");

	return 0;
}
#2
int **matrix_mul(int **s, int **t, int N)
{
	int **M = (int *)malloc(sizeof(int)*N);
	int value;

	for (int sentinel = 0; sentinel < N; sentinel++)
		*(M + sentinel) = (int *)malloc(sizeof(int)*N);
	

	for (int sentinel = 0; sentinel < N; sentinel++)
	{
		for (int sentinel_2 = 0; sentinel_2 < N; sentinel_2++)
		{
			value = 0;
			for (int sentinel_3 = 0; sentinel_3 < N; sentinel_3++)
			{
				value += s[sentinel][sentinel_3] * t[sentinel_3][sentinel_2];
			}
			M[sentinel][sentinel_2] = value;
		}
	}

	return M;
}


  • 이민지
    • #1

#include <stdio.h>

int main()
{
	int arr[10000];
	int min[10000];
	int i,j, temp;

	printf("자연수를 몇개 입력하실 건가요? : ");
	scanf_s("%d", &i);

	printf("자연수를 입력하세요. : \n");
	for (j = 0; j < i; j++)
	{
		scanf_s("%d", &arr[j]);
	}

	for (j = 0; j < i / 2; j++)
	{
		min[j] = arr[i - j - 1];
	}

	for (j = i/2; j < i; j++)
	{
		min[j] = arr[i - j - 1];
	}

	printf("배열을 뒤집으면! \n");
	for (j = 0; j < i ; j++)
	{
		printf("%d \n", min[j]);
	}

	return 0;
}

#2
#include <stdio.h>
#include <stdlib.h>

int** matrix_mul(int **s, int **t, int N);

int main(int argc, char** argv)
{
	int A[3][3] = {
		{ 1, 1, 2 },
		{ 1, 0, 1 },
		{ 0, 3, 0 }
	};
	int B[3][3] = {
		{ 2, 1, 3 },
		{ 1, 3, 2 },
		{ 1, 2, 0 }
	};
	int *parr_A[3] = { A[0], A[1], A[2] };
	int *parr_B[3] = { B[0], B[1], B[2] };
	int **AB = (void*)0;
	int i, j, N = 3;

	printf("A : \n");
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			printf("%d ", A[i][j]);
		}
		printf("\n");
	}

	printf("B : \n");
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			printf("%d ", B[i][j]);
		}
		printf("\n");
	}
	AB = matrix_mul(parr_A, parr_B, N);
	
	if (AB) {
		printf("A x B : \n");
		for (i = 0; i < N; i++) {
			for (j = 0; j < N; j++) {
				printf("%d ", AB[i][j]);
			}
			printf("\n");
		}
	}

	return 0;
}


int** matrix_mul(int **s, int **t, int N)
{
	int** re = (int**)malloc(sizeof(int*)*N);
	int i,j,k,o;
	for (i = 0; i < N; i++)
	{
		re[i] = (int*)malloc(sizeof(int)*N);
	}
	
	for (j = 0; j < N; j++)
	{
		for (k = 0; k < N; k++)
		{
			re[j][k] = 0;
			for (o = 0; o < N; o++)
			{
				re[j][k] += s[j][o] * t[o][k];
			}
		}
	}
	return re;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:05
Processing time 0.0363 sec