2021년 9월 8일 수요일

Algorithm. Euclid/Factorial

 

Algorithm. Euclid/Factorial

[Visual Studio과 C#으로 구현]
Algorithm Euclid/Factorial // Week02

20210908_20615034



Euclid Algorithm = 유클리드 알고리즘 = 유클리드 호제법
(= 최대공약수 알고리즘/재귀함수이기도 함)

- 최대공약수 = 2개이상의 자연구의 공약수들 중에서 가장 큰 수
- 가장 오래 된 알고리즘
- 유클리드 방법 : 큰 수에서 작은 수를 뺀 수와 작은 수와의 최대공약수와 같다.


- 나눗셈도 같은데, 빼기보다 빠르므로 > 나눗셈 사용

Euclid_프로그램

C# 언어 택.
WPF 어플리케이션 택.

빈 프로그램 생성
WPF 윈도우용 프로그램 사용(기본사항 설명생략)



Euclid_디자인


=> 도구상자> TextBlock> 속성> Text작성> 엔터

글자기입 : Label 및 TextBlock 으로 가능.
But, WPF 내에서는 TextBlock이 더 용이함. ㅊㅊ
속성> 이름말고 Text에 기입될 말 작성.> 엔터(기입)

=> 도구상자> TextBox > 이름변경/작성

=> 도구상자> Button> 속성> Content(내용) 작성> 엔터
해당 도구는 더블클릭시 코드작성창으로 넘어감을 확인가능



Euclid_코드



=> Button 더블클릭> 이벤트 생성(함수틀 제작됨)

코드 : 버튼이 클릭되면, TextBox 2개의 값을 모두 가져와 계산해서 
아래 TextBlock에 기입되어라.

(TextBox에서 가져 올 값이 숫자일 경우, 문자열로 받기 때문에 정수로 바꾸는 것 필수)

유클리드 함수 제작
=> 유클리드 밑에 빨간줄> 마우스 커서 올림> 단추클릭> 메서드생성 (메서드 = 함수)
> 아직 구현되지 않은 에러 표기 삭제> 유클리드 함수코딩 

유클리드 알고리즘
(콘솔 창에서는 유클리드 알고리즘만 써줘도 됨)

=> 값계산이 완료되었음> 표기필요> TextBlock 표기코딩(함수 내에 하는 것 X)



Euclid_실행화면








ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Recursive = 재귀
Recursive Algorithm = 재귀함수 
(= 함수 안에 함수를 다시 불러오는 것)

재귀함수를 더 공부해보기 위해서 Factorial을 공부하자!
Factorial은 재귀적 알고리즘과 반복문 알고리즘으로 코딩가능!


반복문과 재귀 중 더 빠른 건 반복문!
Be, 재귀는 자기자신을 계속 호출하기 때문에 더 오래걸림.
근데 작은 숫자들은 비슷함.

>> 이를 보다 잘 알기 위해서 아래코딩에서는 각 디버깅 시간을 잰다.
여기서는 Ticks 단위로 알 수 있다.(1Tick = 100ns)(10000으로 나누면 ms)
(Elapsed, ElapsedMilliseconds, ElapsedTicks(제일 짧음) 세 가지 존재)


Factorial_디자인


=> TextBlock> Text 기입> 엔터
=> TextBox> Text 없앰(보여지는 글자 삭제)> 엔터
=>  TextBox> 레이아웃> HorizontalContentAligment 설정(박스 내 표기글자 설정)> 클릭
(HorizontalAligment는 TextBox자체 위치변경)
=>Button> Content 내용변경> 엔터
=> ListBox(줄이 여러개 표기될 경우)

=> 약 8번 줄> 메인 윈도우 Title 수정
(현 프로젝트는 팩토리얼로 수정)



Factorial_코드



=> Button 더블클릭> 이벤트 생성
코딩 : TextBox의 숫자를 정수로 받아옴> 함수생성(값이 크므로 long 사용)
=> 함수 빨간줄> 마우스 커서 올림> 단추클릭> 메서드(함수) 생성


< 재귀함수 >
long 함수일 경우, 뒤에 int 생성되면 long으로 수정.
알고리즘 코드참고

< 반복문함수 >
long 함수일 경우, 뒤에 int 생성되면 long으로 수정. (?)
괄호 내 문장 하나면 없어도 된다. 괄호 삭제.
알고리즘 코드참고

=> ListBox.Items.add();> rfact/fact 값 출력


< 시간 측정 >
=> 시간을 잴거면> 함수를 사이에 두고 var watch ~~;와 watch.Stop(); 기입필요
(함수가 작업되는 동안 걸리는 시간 측정가능)
(수행시간 Ticks 단위 리턴)
=> 잰 시간> 화면 표기




var 두 번 쓰면 오류남. 
ex) 위 함수 시간을 잴 때, 한 번 써줬다면
다음은 선언 없이 바로 watch부터 쓰는 것.



Factorial_실행화면











댓글 없음:

댓글 쓰기