[프로그래밍] haskell로 구현한 계산기
- 최초 등록일
- 2005.06.23
- 최종 저작일
- 2005.06
- 6페이지/ 한컴오피스
- 가격 3,000원
소개글
functional programming 언어인
haskell이 설치된 환경에서 실행하면 된다
haskell에서 window GUI를 사용할 수 있는
SOEGraphics 를 이용하여 윈도우 창을 띄운다
functional programming 언어인
haskell의 소스를 구하기란 쉽지 않다
haskell의 recursive 한 function들을 사용하여
윈도우용으로 계산기를 구현하였고
눌려진 효과를 내기 위한 방법도 제공한다
목차
1. 주제의 선정 이유
2. 프로그램의 구현
3. 주제를 구현하기 위해 수행한 작업
4. 자신의 프로그래밍 능력에 대한 평가
5. Haskell과 FP에 대한 평가
6. 계산기 소스 코드
본문내용
2. 프로그램의 구현
가. 프로그램의 구성
But data type을 새롭게 만들어서 숫자버튼과 연산자 버튼들에 대한 정보 (버튼의 위치, 크기, 버튼이 가진 값)를 저장하고 있다. Exp data type도 만들었는데 이것은 숫자버튼과 연산자 버튼의 입력에 따라 결과 값들을 저장하고, 마지막으로 입력한 연산자를 저장하기 위해 사용된다. main함수는 윈도우 핸들을 하나 얻어서 버튼과 결과출력 창(led)을 그리고 loop 함수를 불러 계산기 프로그램을 시작하게 된다. loop문은 Window 핸들과 Exp data type을 파라미터로 받아서 키 입력에 따른 Exp의 변화로서 값을 led란에 출력하고 버튼의 변화도 그려준다. doing 함수는 한 개의 버튼이 입력되었을 때 어떤 버튼인지 알고 수행을 하는 함수인데 연산자 버튼이 눌러지면 Exp의 값에 따른 연산을 하고 그 값을 led란에 그린다. drawOperand와 drawResult는 버튼의 입력에 따라 입력되는 값 또는 결과 값을 led란에 그려주는 함수이다. calculate 함수는 Exp data type의 값을 계산하여 업데이트 된 결과를 새로운 Exp data type에 저장한다. strToDouble, overPointToDouble, underPointToDouble 함수는 모두 Exp에 저장된 스트링 값을 Double로 바꿔주기 위한 것이다. butPress 함수는 버튼들 중에서 어느 버튼이 눌러졌는지 검사해서 알려준다. drawPushCheck 함수와 drawPush 함수는 버튼을 그리는 함수인데 RGB값을 다르게 받음으로써 버튼이 눌러진 효과 눌러지지 않은 효과를 표현할 수 있다. getFont, rgb, ledList, charList, butList에는 프로그램에 필요한 값들을 저장해 놓았다.
<소스 일부분>
6. 계산기 소스 코드
import SOEGraphics
import GraphicsText
import Win32Process
-- 버튼의 정보를 가지는 But data type
-- 입력되는 수와 연산자를 기억하는 Exp data type
data But = But Char Coordinate Side Side
data Exp = Exp String String (Double->Double->Double)
type Coordinate = (Int, Int)
type Side = Int
-- 윈도우 핸들을 생성시켜서 프로그램을 수행한다
main
= runGraphics $
do w <- openWindow "Simple Calculator Ver 0.1" (270,350)
drawInWindow w $ withRGB (RGB 212 208 200)
$ polygon [(0,0),(270,0),(270,350),(0,350)]
drawInWindow w $ withRGB (RGB 98 98 98) $ polygon ledList
drawInWindow w $ polyline ledList
sequence_ [drawPushCheck butList y w rgb1 rgb2 | y <- charList]
loop w (Exp [] [] (+))
closeWindow w
참고 자료
없음