SlideShare a Scribd company logo
1 of 8
Download to read offline
20093475 박덕제
             C1                        20093526 정준용
                                       20113283 김종진
             3일                         7시간




     행렬표현을 입력받아서 관계찾기
     행렬을 입력받아 관계행렬이 reflexive, symmetric,
     irreflexive관계일 경우 Yes/No를 출력하는 알고리즘의
     프로그램 소스를 작성한다.



 http://sungkyul.edu/~choiym/class/Fundamental_Mathematics
 _for_Multimedia/pdf/media_lecture4.pdf -관계에 대한 총 정리
 http://blog.naver.com/PostView.nhn?blogId=jaykang10&logNo
 =120155415325 -반사, 비반사, 대칭관계의 정의와 예
 http://ko.wikipedia.org/wiki/%EB%B0%98%EC%82%AC%EA%B
 4%80%EA%B3%84 -위키 백과사전
 http://serafis.tistory.com/157 -동적할당으로 2차배열 선언




프로젝트를 받고 자료조사와 프로그램 코드 작성으로 역할분담을
하려고 하였으나 조 인원이 3명밖에 되지 않아서 이번 프로젝트
는 자료조사와 프로그램 코드 작성을 다 같이 진행하기로 했습니
다.
첫 회의 때에는 우선 프로젝트를 수행하기에 꼭 알아야 될
reflexive, symmetric, irreflexive에 대해 먼저 알아보기로 하였습
니다. 회의를 잠시 멈추고 정보를 찾아 reflexive는


symmetric은




                  - 1 -
irreflexive는



이라는 것을 알 수 있었습니다.
(출처 :
http://sungkyul.edu/~choiym/class/Fundamental_Mathematics_f
or_Multimedia/pdf/media_lecture4.pdf)
 자료들을 조사하는 데 시간이 꽤 걸려서 관계에 대한 프로그램
작성은 다음 회의 때까지 생각해 오기로 했습니다.



 프로젝트를 해결하기 위해 필요한 자료들의 정보가 부족하다는
것을 알고 reflexive와 symmetric, irreflexive에 대한 정보를 찾으
려 하였습니다. 그러나 이 정보들을 알려면 사전정보(relation 등)
들이 더 필요해 정보를 모으는데 오랜 시간이 걸리게 되었습니다.




 첫 회의 때 조사했던 reflexive, symmetric, irreflexive를 yes/no
방식으로 출력하는 프로그램을 관계행렬로 표현된 순서쌍의 값을
비교하는 방식으로 작성해보았습니다.


#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, i, j, k=0;
int mat[5][5];

printf("행렬A의 행을 입력하시오 : ");
scanf("%d", &a);
printf("행렬A의 열을 입력하시오 : ");
scanf("%d", &b);

for(i=1; i<=a; i++)
{
for(j=1; j<=b; j++)
{
printf("%d행의 %d열의 값을 입력하시오 : ", i, j);
scanf("%d", &mat[i-1][j-1]);




                   - 2 -
}
}

for(i=1; i<=a; i++)
{
for(j=1; j<=b; j++)
{
if(mat[i-1][j-1] != mat[j-1][i-1])
{
k=1;
}
}
}

if(k==1)
{
printf("symmetric : non");
}
else
{
printf("symmetric : yesn");
}

if((a==2 && b>=2) || (a>=2 && b==2))
{
if((mat[0][0]==mat[1][1]) && (mat[0][0]==0))
{
printf("irreflexive : yesn");
}
else
{
printf("irreflexive : non");
}
if((mat[0][0]==mat[1][1]) && (mat[0][0]==1))
{
printf("reflexive : yesn");
}
else
{
printf("reflexive : non");
}
}

else if((a<=3 && b>=3) || (a>=3 && b<=3))
{
if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&&




                  - 3 -
(mat[0][0]==0))
{
printf("irreflexive : yesn");
}
else
{
printf("irreflexive : non");
}
if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&&
(mat[0][0]==1))
{
printf("reflexive : yesn");
}
else
{
printf("reflexive : non");
}
}
else if((a<=4 && b>=4) || (a>=4 && b<=4))
{
if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&&
(mat[2][2]==mat[3][3])&&(mat[0][0]==0))
{
printf("irreflexive : yesn");
}
else
{
printf("irreflexive : non");
}
if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&&
(mat[2][2]==mat[3][3])&&(mat[0][0]==1))
{
printf("reflexive : yesn");
}
else
{
printf("reflexive : non");
}
}
else
{
if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&&
(mat[2][2]==mat[3][3])&&(mat[3] [3]==mat[4][4])&&
(mat[0][0]==0))
{
printf("irreflexive : yesn");




              - 4 -
}
else
{
printf("irreflexive : non");
}
if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&&
(mat[2][2]==mat[3][3])&&(mat[3] [3]==mat[4][4])&&
(mat[0][0]==1))
{
printf("reflexive : yesn");
}
else
{
printf("reflexive : non");
}
}
return 0;
}

 symmetric은 mat[i][j]와 mat[j][i]를 비교해 값이 같으면 yes,
다르면      no를    출력하는        방식으로          작성하였고,   reflexive와
irreflexive는 행렬의 대각선 순서쌍을 입력해 그 값이 0이면
irreflexive에 yes를 1이면 reflexive에 yes를 출력하는 방식으로
작성하였습니다. 하지만 회의를 통해 이 방법은 출력은 가능하나
if문을 이용하여 조건을 일일이 지정해주는 방식이라 혹 행렬의
크기를 크게 줄 경우 다시 추가적으로 구성하여야 하기에 불편함
이 있다는 의견에 코드를 다른 방향으로 수정하기로 결정하였습니
다. 그 방법에 대해 찾던 중 행과 열의 값을 입력받아 배열의 크
기로 사용하는 방법을 택하기로 하였습니다.
참고 url : http://serafis.tistory.com/157




                  - 5 -
여러 사람이 회의를 하여 한 사람이 하는 것보다 많은 아이디어
                        가 나온다는 것을 다시 한 번 더 알게 되었습니다. 처음에 작성한
                        초안을 가지고 여러번의 수정을 거쳐 보다 나은 프로그램을 만들
                        어 낼 수 있는 것을 보며 조별활동의 이점을 알게되었습니다.


#include <stdio.h>
#include <stdlib.h>
#define YES 1
#define NO 0


int main(void)
{
int a, b, c, result;
int X=0, Y=0;
int **mat=NULL;
int reflexive(int **mat, int X);
int symmetric(int **mat, int X, int Y);
int irreflexive(int **mat, int X);


reset:
printf("행의 값을 입력하세요 (2~5) ", X);
scanf("%d", &X);
printf("열의 값을 입력하세요 (2~5) ", Y);
scanf("%d", &Y);


if(X>5 || X<2 || Y<2 || Y>5)
{
printf("잘못입력하였습니다n");
goto reset;
}
mat=(int**)malloc(sizeof(int*)*X);
for(a=0; a<X; a++)
{
mat[a]=(int*)malloc(sizeof(int)*Y);
}
for(b=0; b<X; b++)
{
for(c=0; c<Y; c++)




                                          - 6 -
{
printf("%d행 %d열을 입력하세요 ", b+1, c+1);
scanf("%d", &mat[b][c]);
}
}
result=reflexive(mat, X);
printf("reflexive : %sn", result ? "YES":"NO");
result=symmetric(mat, X, Y);
printf("symmetric : %sn", result ? "YES":"NO");
result=irreflexive(mat, X);
printf("irreflexive : %sn", result ? "YES":"NO");
for(a=0; a<X; a++)
free(mat[a]);
free(mat);
}
int reflexive(int **mat,int X)
{
int i;
for(i=0; i<X; i++)
{
if(mat[i][i]==0)
return 0;
}
return 1;
}
int symmetric(int **mat, int X, int Y)
{
int i,j;
for(i=0; i<X; i++)
{
for(j=i; j<Y; j++)
{
if(mat[i][j] != mat[j][i])
return 0;
}
return 1;
}
}




                                         - 7 -
int irreflexive(int **mat,int X)
{
int i;
for(i=0; i<X; i++)
{
if(mat[i][i]==1)
return 0;
}
return 1;
}


    결과로써 이러한 프로그램 소스를 작성하였습니다. 행과 열의 값을 입력받아 그 크기
의 배열을 생성한 뒤 입력받아 관계를 구하는 방식입니다. reflexive, symmetric,
irreflexive를 구하는 방법은 크게 바꾸지는 않고 1차 프로그램 소스를 사용하였습니다.




 프로그램 코드를 작성하는 데 있어 수행할 수 있는 방법이 다양하다는 점을 느끼게 되
었습니다. 초안, 1차 수정, 2차 수정을 거치며 최종결과물이 나오는 것을 보며 회의를
통한 코드 분석이 유용하다는 것을 알게 되었습니다. 더 좋은 프로그램이 있겠지만 많
이 개선했다는 점에서 만족합니다.




                                   - 8 -

More Related Content

What's hot

[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성Lee Sang-Ho
 
타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.KeySeokju Hong
 
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성Lee Sang-Ho
 
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로진현 조
 
Pure Function and Honest Design
Pure Function and Honest DesignPure Function and Honest Design
Pure Function and Honest DesignHyungho Ko
 
An introduction to recursion
An introduction to recursionAn introduction to recursion
An introduction to recursionskku_npc
 
Project#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 HwpProject#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 HwpKimjeongmoo
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01seonhyung
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서KimChangHoen
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수SeungHyun Lee
 
Chapter 16 structured probabilistic models for deep learning - 2
Chapter 16 structured probabilistic models for deep learning - 2Chapter 16 structured probabilistic models for deep learning - 2
Chapter 16 structured probabilistic models for deep learning - 2KyeongUkJang
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1kim HYUNG JIN
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형Kimjeongmoo
 
자료구조 01 최종 보고서
자료구조 01 최종 보고서자료구조 01 최종 보고서
자료구조 01 최종 보고서pkok15
 

What's hot (19)

[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C++ 프로그래밍 과제물 작성
 
타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key타임리프 폼과 어노테이션.Key
타임리프 폼과 어노테이션.Key
 
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
 
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
 
Pure Function and Honest Design
Pure Function and Honest DesignPure Function and Honest Design
Pure Function and Honest Design
 
An introduction to recursion
An introduction to recursionAn introduction to recursion
An introduction to recursion
 
Project#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 HwpProject#1 지식 기반 시스템 Hwp
Project#1 지식 기반 시스템 Hwp
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01
 
자료구조05
자료구조05자료구조05
자료구조05
 
자료구조05
자료구조05자료구조05
자료구조05
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
 
Chapter 16 structured probabilistic models for deep learning - 2
Chapter 16 structured probabilistic models for deep learning - 2Chapter 16 structured probabilistic models for deep learning - 2
Chapter 16 structured probabilistic models for deep learning - 2
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 
이산치5번
이산치5번이산치5번
이산치5번
 
Project#1파스칼 삼각형
Project#1파스칼 삼각형Project#1파스칼 삼각형
Project#1파스칼 삼각형
 
튜터링 #9 20120409
튜터링 #9 20120409튜터링 #9 20120409
튜터링 #9 20120409
 
(닷넷, C#기초교육)C#선택적인수, 명명된 인수
(닷넷, C#기초교육)C#선택적인수, 명명된 인수(닷넷, C#기초교육)C#선택적인수, 명명된 인수
(닷넷, C#기초교육)C#선택적인수, 명명된 인수
 
자료구조 01 최종 보고서
자료구조 01 최종 보고서자료구조 01 최종 보고서
자료구조 01 최종 보고서
 

Viewers also liked (15)

이산수학05
이산수학05이산수학05
이산수학05
 
자료구조01
자료구조01자료구조01
자료구조01
 
이산수학04
이산수학04이산수학04
이산수학04
 
Heart disease
Heart diseaseHeart disease
Heart disease
 
Radios
RadiosRadios
Radios
 
Wood
WoodWood
Wood
 
자료구조01
자료구조01자료구조01
자료구조01
 
Análisis de radios de Janeth Crespo
Análisis de radios  de Janeth CrespoAnálisis de radios  de Janeth Crespo
Análisis de radios de Janeth Crespo
 
이산수학07
이산수학07이산수학07
이산수학07
 
자료구조03
자료구조03자료구조03
자료구조03
 
자료구조06
자료구조06자료구조06
자료구조06
 
이산수학06
이산수학06이산수학06
이산수학06
 
Análisis de radios
Análisis de radiosAnálisis de radios
Análisis de radios
 
A flowering tree
A flowering treeA flowering tree
A flowering tree
 
자료구조02
자료구조02자료구조02
자료구조02
 

Similar to 이산수학02

이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2KoChungWook
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)pchmago
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdfjinwookhong
 
이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2pkok15
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdfkd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차Han Sung Kim
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpKimjeongmoo
 
프로젝트 보고서
프로젝트 보고서프로젝트 보고서
프로젝트 보고서hyungoh kim
 
2012 Dm C2 05
2012 Dm C2 052012 Dm C2 05
2012 Dm C2 05seonhyung
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6KoChungWook
 

Similar to 이산수학02 (20)

이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf
 
이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
자구2번
자구2번자구2번
자구2번
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort Hwp
 
자료구조01
자료구조01자료구조01
자료구조01
 
프로젝트 보고서
프로젝트 보고서프로젝트 보고서
프로젝트 보고서
 
3콤비네이션
3콤비네이션3콤비네이션
3콤비네이션
 
2012 Dm C2 05
2012 Dm C2 052012 Dm C2 05
2012 Dm C2 05
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6
 
7장매크로
7장매크로7장매크로
7장매크로
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 

이산수학02

  • 1. 20093475 박덕제 C1 20093526 정준용 20113283 김종진 3일 7시간 행렬표현을 입력받아서 관계찾기 행렬을 입력받아 관계행렬이 reflexive, symmetric, irreflexive관계일 경우 Yes/No를 출력하는 알고리즘의 프로그램 소스를 작성한다. http://sungkyul.edu/~choiym/class/Fundamental_Mathematics _for_Multimedia/pdf/media_lecture4.pdf -관계에 대한 총 정리 http://blog.naver.com/PostView.nhn?blogId=jaykang10&logNo =120155415325 -반사, 비반사, 대칭관계의 정의와 예 http://ko.wikipedia.org/wiki/%EB%B0%98%EC%82%AC%EA%B 4%80%EA%B3%84 -위키 백과사전 http://serafis.tistory.com/157 -동적할당으로 2차배열 선언 프로젝트를 받고 자료조사와 프로그램 코드 작성으로 역할분담을 하려고 하였으나 조 인원이 3명밖에 되지 않아서 이번 프로젝트 는 자료조사와 프로그램 코드 작성을 다 같이 진행하기로 했습니 다. 첫 회의 때에는 우선 프로젝트를 수행하기에 꼭 알아야 될 reflexive, symmetric, irreflexive에 대해 먼저 알아보기로 하였습 니다. 회의를 잠시 멈추고 정보를 찾아 reflexive는 symmetric은 - 1 -
  • 2. irreflexive는 이라는 것을 알 수 있었습니다. (출처 : http://sungkyul.edu/~choiym/class/Fundamental_Mathematics_f or_Multimedia/pdf/media_lecture4.pdf) 자료들을 조사하는 데 시간이 꽤 걸려서 관계에 대한 프로그램 작성은 다음 회의 때까지 생각해 오기로 했습니다. 프로젝트를 해결하기 위해 필요한 자료들의 정보가 부족하다는 것을 알고 reflexive와 symmetric, irreflexive에 대한 정보를 찾으 려 하였습니다. 그러나 이 정보들을 알려면 사전정보(relation 등) 들이 더 필요해 정보를 모으는데 오랜 시간이 걸리게 되었습니다. 첫 회의 때 조사했던 reflexive, symmetric, irreflexive를 yes/no 방식으로 출력하는 프로그램을 관계행렬로 표현된 순서쌍의 값을 비교하는 방식으로 작성해보았습니다. #include <stdio.h> #include <stdlib.h> int main() { int a, b, i, j, k=0; int mat[5][5]; printf("행렬A의 행을 입력하시오 : "); scanf("%d", &a); printf("행렬A의 열을 입력하시오 : "); scanf("%d", &b); for(i=1; i<=a; i++) { for(j=1; j<=b; j++) { printf("%d행의 %d열의 값을 입력하시오 : ", i, j); scanf("%d", &mat[i-1][j-1]); - 2 -
  • 3. } } for(i=1; i<=a; i++) { for(j=1; j<=b; j++) { if(mat[i-1][j-1] != mat[j-1][i-1]) { k=1; } } } if(k==1) { printf("symmetric : non"); } else { printf("symmetric : yesn"); } if((a==2 && b>=2) || (a>=2 && b==2)) { if((mat[0][0]==mat[1][1]) && (mat[0][0]==0)) { printf("irreflexive : yesn"); } else { printf("irreflexive : non"); } if((mat[0][0]==mat[1][1]) && (mat[0][0]==1)) { printf("reflexive : yesn"); } else { printf("reflexive : non"); } } else if((a<=3 && b>=3) || (a>=3 && b<=3)) { if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&& - 3 -
  • 4. (mat[0][0]==0)) { printf("irreflexive : yesn"); } else { printf("irreflexive : non"); } if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&& (mat[0][0]==1)) { printf("reflexive : yesn"); } else { printf("reflexive : non"); } } else if((a<=4 && b>=4) || (a>=4 && b<=4)) { if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&& (mat[2][2]==mat[3][3])&&(mat[0][0]==0)) { printf("irreflexive : yesn"); } else { printf("irreflexive : non"); } if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&& (mat[2][2]==mat[3][3])&&(mat[0][0]==1)) { printf("reflexive : yesn"); } else { printf("reflexive : non"); } } else { if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&& (mat[2][2]==mat[3][3])&&(mat[3] [3]==mat[4][4])&& (mat[0][0]==0)) { printf("irreflexive : yesn"); - 4 -
  • 5. } else { printf("irreflexive : non"); } if((mat[0][0]==mat[1][1])&&(mat[1][1]==mat[2][2])&& (mat[2][2]==mat[3][3])&&(mat[3] [3]==mat[4][4])&& (mat[0][0]==1)) { printf("reflexive : yesn"); } else { printf("reflexive : non"); } } return 0; } symmetric은 mat[i][j]와 mat[j][i]를 비교해 값이 같으면 yes, 다르면 no를 출력하는 방식으로 작성하였고, reflexive와 irreflexive는 행렬의 대각선 순서쌍을 입력해 그 값이 0이면 irreflexive에 yes를 1이면 reflexive에 yes를 출력하는 방식으로 작성하였습니다. 하지만 회의를 통해 이 방법은 출력은 가능하나 if문을 이용하여 조건을 일일이 지정해주는 방식이라 혹 행렬의 크기를 크게 줄 경우 다시 추가적으로 구성하여야 하기에 불편함 이 있다는 의견에 코드를 다른 방향으로 수정하기로 결정하였습니 다. 그 방법에 대해 찾던 중 행과 열의 값을 입력받아 배열의 크 기로 사용하는 방법을 택하기로 하였습니다. 참고 url : http://serafis.tistory.com/157 - 5 -
  • 6. 여러 사람이 회의를 하여 한 사람이 하는 것보다 많은 아이디어 가 나온다는 것을 다시 한 번 더 알게 되었습니다. 처음에 작성한 초안을 가지고 여러번의 수정을 거쳐 보다 나은 프로그램을 만들 어 낼 수 있는 것을 보며 조별활동의 이점을 알게되었습니다. #include <stdio.h> #include <stdlib.h> #define YES 1 #define NO 0 int main(void) { int a, b, c, result; int X=0, Y=0; int **mat=NULL; int reflexive(int **mat, int X); int symmetric(int **mat, int X, int Y); int irreflexive(int **mat, int X); reset: printf("행의 값을 입력하세요 (2~5) ", X); scanf("%d", &X); printf("열의 값을 입력하세요 (2~5) ", Y); scanf("%d", &Y); if(X>5 || X<2 || Y<2 || Y>5) { printf("잘못입력하였습니다n"); goto reset; } mat=(int**)malloc(sizeof(int*)*X); for(a=0; a<X; a++) { mat[a]=(int*)malloc(sizeof(int)*Y); } for(b=0; b<X; b++) { for(c=0; c<Y; c++) - 6 -
  • 7. { printf("%d행 %d열을 입력하세요 ", b+1, c+1); scanf("%d", &mat[b][c]); } } result=reflexive(mat, X); printf("reflexive : %sn", result ? "YES":"NO"); result=symmetric(mat, X, Y); printf("symmetric : %sn", result ? "YES":"NO"); result=irreflexive(mat, X); printf("irreflexive : %sn", result ? "YES":"NO"); for(a=0; a<X; a++) free(mat[a]); free(mat); } int reflexive(int **mat,int X) { int i; for(i=0; i<X; i++) { if(mat[i][i]==0) return 0; } return 1; } int symmetric(int **mat, int X, int Y) { int i,j; for(i=0; i<X; i++) { for(j=i; j<Y; j++) { if(mat[i][j] != mat[j][i]) return 0; } return 1; } } - 7 -
  • 8. int irreflexive(int **mat,int X) { int i; for(i=0; i<X; i++) { if(mat[i][i]==1) return 0; } return 1; } 결과로써 이러한 프로그램 소스를 작성하였습니다. 행과 열의 값을 입력받아 그 크기 의 배열을 생성한 뒤 입력받아 관계를 구하는 방식입니다. reflexive, symmetric, irreflexive를 구하는 방법은 크게 바꾸지는 않고 1차 프로그램 소스를 사용하였습니다. 프로그램 코드를 작성하는 데 있어 수행할 수 있는 방법이 다양하다는 점을 느끼게 되 었습니다. 초안, 1차 수정, 2차 수정을 거치며 최종결과물이 나오는 것을 보며 회의를 통한 코드 분석이 유용하다는 것을 알게 되었습니다. 더 좋은 프로그램이 있겠지만 많 이 개선했다는 점에서 만족합니다. - 8 -