SlideShare a Scribd company logo
1 of 8
Download to read offline
degree 출력하는 프로그램




    조 장 : 20113272김남희
작성자 조 원 : 20083519 조경상,      20083430   강승우,
     20113293서상현,   20083472 변세현
Ⅰ. 프로젝트의 목적


방향 그래프에 대해 공부하고, 원리를 바탕으로 adjacent matrix가 주어졌을
때 indegree/outdegree 를 출력하고 source/sink를 구별하는 프로그램을 만
든다.


Ⅱ . 프로젝트 일정


2012. 5. 14 - 조원별 업무 분담 결정


2012. 5. 21 - 알고리즘에 대해 토론하고 코딩 시작




Ⅱ. 조원 업무 분담

사전 조사 팀 – 서상현, 변세현
프로그래밍 팀 – 조경상, 강승우
보고서 작성 - 김남희

Ⅲ. 연구 과정
2012. 5. 14 - 과제를 파악하고 조원별 업무 분담 결정.
- 과제에 대한 간단한 토론, 자료조사 및 알고리즘 구상
2012. 5. 21 알고리즘을 바탕으로 코딩 시작
- 이번 과제에 사용되는 원리 이해, 원리를 바탕으로 한 알고리즘 구현 및
  코딩 시작


-완성된 프로그램 소스
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
char ch;
char indegree;
char outdegree;
}adjacent;
adjacent matrix[101]; //각 점마다의 구조체 배열 선언, 최대 점의 개수는
100개로 제한
//마지막 101구조체는 정렬시 임시 저장소로 쓰임
void insert(char *s1, int *count);
void sort(int *count); //구조체 정렬 함수
void swap(int i, int min); //구조체 정렬시 스왑해주는 함수
int main(void){
int n, count = 0;//count변수는 문자 갯수에 대한 구조체의 카운트
char *str;
char *p;
int i;
printf("입력 받을 점의 갯수를 입력하시오.n");
scanf("%d", &n);
str = (char *) malloc(sizeof(char)*n); //문자열을 저장할 공간을 동적으로
할당
fflush(stdin); //버퍼에 엔터값을 지워준다.
printf("경로를 입력하시오.(단, 각 경로의 구분은 공백과 ,만 허용)n");
gets(str);
p = strtok(str, ", "); //토큰 함수로 문자를 걸러내서
if(p) insert(p, &count); //구조체에 전달
while(p!=NULL)
{
p =strtok(NULL, ", ");
if(p) insert(p, &count);
}
if(n>100 || count>n) //처음 입력이 구조체 배열선언을 초과하거나 문자 입
력을 예정 입력 갯수 초과시 프로그램 종료
{
printf("입력 범위가 초과하였으므로 프로그램을 종료합니다.n");
exit(1);
}
sort(&count);
for(i=0; i<count; i++)//결과를 출력한다.
{
printf("%c %d %d", matrix[i].ch, matrix[i].indegree, matrix[i].outdegree);
if(matrix[i].indegree == 0)
printf(" sourcen");
else if(matrix[i].outdegree == 0)
printf(" sinkn");
else
printf("n");
}
return 0;
}
void insert(char *s1, int *count)
{
int k=0;
if(strlen(s1)!=2 || *s1==*(s1+1)) //입력이 올바르지 않으면 종료
{
printf("입력이 올바르지 않으므로 프로그램을 종료합니다.n");
exit(1);
}
if(*count == 0) //입력이 올바를시 첫번째 구조체 정의
{
matrix[0].ch = s1[0];
matrix[0].indegree = 0;
matrix[0].outdegree = 1;
matrix[1].ch = s1[1];
matrix[1].indegree = 1;
matrix[1].outdegree = 0;
*count = *count+2;
}
else
{
for(k=0; k<(*count); k++) //첫번째 항에 대한 문자를 구조체에 입력,
outdegree증가
{
if(matrix[k].ch == s1[0])
{
matrix[k].outdegree++;
break;
}
if(matrix[k].ch != s1[0] && k==(*count)-1)
{
matrix[*count].ch = s1[0];
matrix[*count].outdegree++;
(*count)++;
break;
}
}
for(k=0; k<(*count); k++) //두번째 항에 대한 문자를 구조체에 입력,
indegree증가
{
if(matrix[k].ch == s1[1])
{
matrix[k].indegree++;
break;
}
if(matrix[k].ch != s1[1] && k==(*count)-1)
{
matrix[*count].ch = s1[1];
matrix[*count].indegree++;
(*count)++;
break;
}
}
}
}
void sort(int *count)
{
int i, j, min;
for(i=0; i<*count; i++)
{
min = i;
for(j=i+1; j<*count; j++)
{
if(matrix[j].ch < matrix[min].ch)
min = j;
swap(i, min);
}
}
}
void swap(int i, int min)
{
matrix[101] = matrix[i];
matrix[i] = matrix[min];
matrix[min] = matrix[101];
}
Ⅳ. 결과 분석 및 느낀 점

이번 과제는 이전의 과제들과 비교했을 때 조금은 수월하게 할 수 있
었다고 생각된다. 과제가 비교적 쉬운 관계로 코딩에 치중하여 함께
고민하고 토론하는 시간은 상대적으로 짧아져 아쉬움이 남는다.
하지만 그에 반해 원리나 사전 조사에 더 많은 시간동안 공부할 수
있었다. 이 팀원들로 3번째 과제를 수행하고 있어서 서로에 대해 알고
있는 점이 많아 부족한 면을 서로 보완해 가면서 역할분담이 잘 이루
어 졌다.

More Related Content

Viewers also liked

슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀
슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀
슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀Youngsil Kim
 
What does it take to win the Kaggle/Yandex competition
What does it take to win the Kaggle/Yandex competitionWhat does it take to win the Kaggle/Yandex competition
What does it take to win the Kaggle/Yandex competitionKenji LEFEVRE
 
대학생활의설계(01 mar2011)
대학생활의설계(01 mar2011)대학생활의설계(01 mar2011)
대학생활의설계(01 mar2011)Myunggoon Choi
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림우림 류
 
로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내
로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내
로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내EthanJeon
 
좋은 회사를 선택하는 지혜(예비 개발자 대상)
좋은 회사를 선택하는 지혜(예비 개발자 대상)좋은 회사를 선택하는 지혜(예비 개발자 대상)
좋은 회사를 선택하는 지혜(예비 개발자 대상)수보 김
 
성지현 0712539 chris luebkeman
성지현 0712539 chris luebkeman성지현 0712539 chris luebkeman
성지현 0712539 chris luebkemanJi_hyun
 
신용카드 전략 Best Output
신용카드 전략 Best Output신용카드 전략 Best Output
신용카드 전략 Best Outputnceo
 
Go2030 Community Meeting
Go2030 Community MeetingGo2030 Community Meeting
Go2030 Community MeetingBNIM
 
Course 6-Unit 7: Simple past. review
Course 6-Unit 7: Simple past. reviewCourse 6-Unit 7: Simple past. review
Course 6-Unit 7: Simple past. reviewMartin Caicedo
 
Congregation Beth Israel, SD Retreat, 8/14
Congregation Beth Israel, SD Retreat, 8/14Congregation Beth Israel, SD Retreat, 8/14
Congregation Beth Israel, SD Retreat, 8/14Lisa Colton
 
Persons important in my live
Persons important in my livePersons important in my live
Persons important in my livemarcetsalazar
 
May 2015 flow chart 익히기
May 2015 flow chart 익히기May 2015 flow chart 익히기
May 2015 flow chart 익히기Edward Hwang
 
러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계
러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계
러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계Mad Scientists
 
Compegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_Preso
Compegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_PresoCompegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_Preso
Compegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_PresoCOMPEGENCE
 
중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용
중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용
중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용S.K. Cha of ACS in Korea
 

Viewers also liked (20)

슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀
슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀
슈퍼벤처Y 네번째 도전자 > 카이스트 CCE팀
 
What does it take to win the Kaggle/Yandex competition
What does it take to win the Kaggle/Yandex competitionWhat does it take to win the Kaggle/Yandex competition
What does it take to win the Kaggle/Yandex competition
 
대학생활의설계(01 mar2011)
대학생활의설계(01 mar2011)대학생활의설계(01 mar2011)
대학생활의설계(01 mar2011)
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림
 
로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내
로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내
로봇자동화 전문회사 코팩시스템 회사소개 및 채용안내
 
좋은 회사를 선택하는 지혜(예비 개발자 대상)
좋은 회사를 선택하는 지혜(예비 개발자 대상)좋은 회사를 선택하는 지혜(예비 개발자 대상)
좋은 회사를 선택하는 지혜(예비 개발자 대상)
 
성지현 0712539 chris luebkeman
성지현 0712539 chris luebkeman성지현 0712539 chris luebkeman
성지현 0712539 chris luebkeman
 
신용카드 전략 Best Output
신용카드 전략 Best Output신용카드 전략 Best Output
신용카드 전략 Best Output
 
Go2030 Community Meeting
Go2030 Community MeetingGo2030 Community Meeting
Go2030 Community Meeting
 
할머니네 텃밭 아동용 자료집
할머니네 텃밭 아동용 자료집할머니네 텃밭 아동용 자료집
할머니네 텃밭 아동용 자료집
 
Course 6-Unit 7: Simple past. review
Course 6-Unit 7: Simple past. reviewCourse 6-Unit 7: Simple past. review
Course 6-Unit 7: Simple past. review
 
Congregation Beth Israel, SD Retreat, 8/14
Congregation Beth Israel, SD Retreat, 8/14Congregation Beth Israel, SD Retreat, 8/14
Congregation Beth Israel, SD Retreat, 8/14
 
Persons important in my live
Persons important in my livePersons important in my live
Persons important in my live
 
May 2015 flow chart 익히기
May 2015 flow chart 익히기May 2015 flow chart 익히기
May 2015 flow chart 익히기
 
SWT Tech Sharing: Node.js + Redis
SWT Tech Sharing: Node.js + RedisSWT Tech Sharing: Node.js + Redis
SWT Tech Sharing: Node.js + Redis
 
러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계
러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계
러셀과 데카르트 탈 구조주의와 컴퓨터공학의 관계
 
Sprint Point - prezentare Adrian Pica
Sprint Point - prezentare Adrian PicaSprint Point - prezentare Adrian Pica
Sprint Point - prezentare Adrian Pica
 
Compegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_Preso
Compegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_PresoCompegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_Preso
Compegence: Nagaraj Kulkarni - Hadoop and No SQL_TDWI_2011Jul23_Preso
 
중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용
중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용
중소 제조기업 보급용 한국형 스마트공장 플랫폼 구축 및 시범적용
 
Daring Greatly Study Notes 1
Daring Greatly Study Notes 1Daring Greatly Study Notes 1
Daring Greatly Study Notes 1
 

Similar to 이산치5번

2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01seonhyung
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6KoChungWook
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfkd19h
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfjinwookhong
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7mil23
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05seonhyung
 
이산수학 C1 프로젝트 6
이산수학 C1 프로젝트 6이산수학 C1 프로젝트 6
이산수학 C1 프로젝트 6pkok15
 
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
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1kim HYUNG JIN
 
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여Kwangsung Ha
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpKimjeongmoo
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 

Similar to 이산치5번 (20)

2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7
 
2012 Ds A1 05
2012 Ds A1 052012 Ds A1 05
2012 Ds A1 05
 
자구2번
자구2번자구2번
자구2번
 
이산수학 C1 프로젝트 6
이산수학 C1 프로젝트 6이산수학 C1 프로젝트 6
이산수학 C1 프로젝트 6
 
자료구조05
자료구조05자료구조05
자료구조05
 
자료구조05
자료구조05자료구조05
자료구조05
 
이산수학06
이산수학06이산수학06
이산수학06
 
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
 
객체지향 정리. Part1
객체지향 정리. Part1객체지향 정리. Part1
객체지향 정리. Part1
 
DM_02
DM_02DM_02
DM_02
 
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
3콤비네이션
3콤비네이션3콤비네이션
3콤비네이션
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 

More from kangseungwoo

More from kangseungwoo (7)

자구6번
자구6번자구6번
자구6번
 
자구5번
자구5번자구5번
자구5번
 
자구4번
자구4번자구4번
자구4번
 
자구3번
자구3번자구3번
자구3번
 
이산치4번
이산치4번이산치4번
이산치4번
 
이산치2번
이산치2번이산치2번
이산치2번
 
이산치1번
이산치1번이산치1번
이산치1번
 

이산치5번

  • 1. degree 출력하는 프로그램 조 장 : 20113272김남희 작성자 조 원 : 20083519 조경상, 20083430 강승우, 20113293서상현, 20083472 변세현
  • 2. Ⅰ. 프로젝트의 목적 방향 그래프에 대해 공부하고, 원리를 바탕으로 adjacent matrix가 주어졌을 때 indegree/outdegree 를 출력하고 source/sink를 구별하는 프로그램을 만 든다. Ⅱ . 프로젝트 일정 2012. 5. 14 - 조원별 업무 분담 결정 2012. 5. 21 - 알고리즘에 대해 토론하고 코딩 시작 Ⅱ. 조원 업무 분담 사전 조사 팀 – 서상현, 변세현 프로그래밍 팀 – 조경상, 강승우 보고서 작성 - 김남희 Ⅲ. 연구 과정 2012. 5. 14 - 과제를 파악하고 조원별 업무 분담 결정. - 과제에 대한 간단한 토론, 자료조사 및 알고리즘 구상
  • 3. 2012. 5. 21 알고리즘을 바탕으로 코딩 시작 - 이번 과제에 사용되는 원리 이해, 원리를 바탕으로 한 알고리즘 구현 및 코딩 시작 -완성된 프로그램 소스 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct{ char ch; char indegree; char outdegree; }adjacent; adjacent matrix[101]; //각 점마다의 구조체 배열 선언, 최대 점의 개수는 100개로 제한 //마지막 101구조체는 정렬시 임시 저장소로 쓰임 void insert(char *s1, int *count); void sort(int *count); //구조체 정렬 함수 void swap(int i, int min); //구조체 정렬시 스왑해주는 함수 int main(void){ int n, count = 0;//count변수는 문자 갯수에 대한 구조체의 카운트 char *str; char *p; int i; printf("입력 받을 점의 갯수를 입력하시오.n"); scanf("%d", &n);
  • 4. str = (char *) malloc(sizeof(char)*n); //문자열을 저장할 공간을 동적으로 할당 fflush(stdin); //버퍼에 엔터값을 지워준다. printf("경로를 입력하시오.(단, 각 경로의 구분은 공백과 ,만 허용)n"); gets(str); p = strtok(str, ", "); //토큰 함수로 문자를 걸러내서 if(p) insert(p, &count); //구조체에 전달 while(p!=NULL) { p =strtok(NULL, ", "); if(p) insert(p, &count); } if(n>100 || count>n) //처음 입력이 구조체 배열선언을 초과하거나 문자 입 력을 예정 입력 갯수 초과시 프로그램 종료 { printf("입력 범위가 초과하였으므로 프로그램을 종료합니다.n"); exit(1); } sort(&count); for(i=0; i<count; i++)//결과를 출력한다. { printf("%c %d %d", matrix[i].ch, matrix[i].indegree, matrix[i].outdegree); if(matrix[i].indegree == 0) printf(" sourcen"); else if(matrix[i].outdegree == 0) printf(" sinkn"); else
  • 5. printf("n"); } return 0; } void insert(char *s1, int *count) { int k=0; if(strlen(s1)!=2 || *s1==*(s1+1)) //입력이 올바르지 않으면 종료 { printf("입력이 올바르지 않으므로 프로그램을 종료합니다.n"); exit(1); } if(*count == 0) //입력이 올바를시 첫번째 구조체 정의 { matrix[0].ch = s1[0]; matrix[0].indegree = 0; matrix[0].outdegree = 1; matrix[1].ch = s1[1]; matrix[1].indegree = 1; matrix[1].outdegree = 0; *count = *count+2; } else { for(k=0; k<(*count); k++) //첫번째 항에 대한 문자를 구조체에 입력, outdegree증가 { if(matrix[k].ch == s1[0])
  • 6. { matrix[k].outdegree++; break; } if(matrix[k].ch != s1[0] && k==(*count)-1) { matrix[*count].ch = s1[0]; matrix[*count].outdegree++; (*count)++; break; } } for(k=0; k<(*count); k++) //두번째 항에 대한 문자를 구조체에 입력, indegree증가 { if(matrix[k].ch == s1[1]) { matrix[k].indegree++; break; } if(matrix[k].ch != s1[1] && k==(*count)-1) { matrix[*count].ch = s1[1]; matrix[*count].indegree++; (*count)++; break; } } }
  • 7. } void sort(int *count) { int i, j, min; for(i=0; i<*count; i++) { min = i; for(j=i+1; j<*count; j++) { if(matrix[j].ch < matrix[min].ch) min = j; swap(i, min); } } } void swap(int i, int min) { matrix[101] = matrix[i]; matrix[i] = matrix[min]; matrix[min] = matrix[101]; }
  • 8. Ⅳ. 결과 분석 및 느낀 점 이번 과제는 이전의 과제들과 비교했을 때 조금은 수월하게 할 수 있 었다고 생각된다. 과제가 비교적 쉬운 관계로 코딩에 치중하여 함께 고민하고 토론하는 시간은 상대적으로 짧아져 아쉬움이 남는다. 하지만 그에 반해 원리나 사전 조사에 더 많은 시간동안 공부할 수 있었다. 이 팀원들로 3번째 과제를 수행하고 있어서 서로에 대해 알고 있는 점이 많아 부족한 면을 서로 보완해 가면서 역할분담이 잘 이루 어 졌다.