Search Results for '프로젝트'

3 POSTS

  1. 2007/10/07 단순화된 공학 계산기 - Design (구현) - 구현중 (10)
  2. 2007/10/07 단순화된 공학 계산기 - Design (설계) (2)
  3. 2007/10/07 단순화 된 공학 계산기 (2)

2007. 10. 6 - 첫번째 설계를 토대로 작성하였다. 아래 나오는 그림중 calculate()함수를 구현하였고 이 함수는 숫자와 '.' 로만 이루어진 피연산자(실수) 그리고 사칙연산('+','-','*','/') 및 괄호['(',')'] 등만 포함하는 수식의 값을 구해주는 함수이다.

- in processor


void parser(char *);

void calculate(char *);



calculate가 계산해야하는 수식은 다음과 같이 간단하게 syntax 를 정의할 수 있다.

 expr = expr + term
       | expr - term
       | term

 term = term * factor
       | term / factor
       | factor

 factor = digit
       | (expr)


그리고 이 syntax는 다음과 같이 같단하게 구현될 수 있다
 

more..

위에서 보는바와 같이 caculrator() 구현을 위해 다음과 같은 함수가 추가되었다

int isExpression(const char *);
void getNextToken(void);
double expr(void);
double term(void);
double factor(void);

다음은 간단한 실행화면이다.

사용자 삽입 이미지





사용자 삽입 이미지

 




사용자 삽입 이미지







 이렇게 하여 프로젝트 스펙의 1번 기본적인 사칙연산 수행은 구현되었다. 풀코드는 후배들이 과제중이므로 나중에 공개하겠다.


프로젝트 메인으로

이올린에 북마크하기(0) 이올린에 추천하기(0)
 

Introduction


 우선 이 간단한 공학용 계산기를 우리가 흔히 사용하는 공학용 계산기라고 생각해보면 접근이 편할지 모르겠다. 그렇게 생각해보면 일단 필요한 것이 눈에 보이는 키패드(입력), 디스플레이(출력)이고 눈에 보이지 않는 내부 처리 모듈이다.  


입력

출력

처리

input()

output()

processor()


 처리 모듈은 입력과 출력을 제어하고 공학용 계산기가 정확한 동작을 할 수 있도록 메모리나 전자회로를 이용한다. 이 프로젝트를 완성하는 것은 곧 processor() 함수를 구현 하는 것이고 스펙이 원하는 결과를 얻기 위한 메모리 구성, 전자회로 구현이 주가 될 것이다.


Main


   Processor


 우선 이 프로그램은 입력-처리-출력의 절차를 따른다. 따라서 메인프로그램은 다음과 같은 함수를 차례로 호출한다. 그리고 processor()에서는 input()으로부터 얻은 입력수식을 일단 파싱한다. 파싱한 결과를 가지고 여러 전자회로를 이용하여 수식을 처리한다.


- in program


void input(void);

void processor(void);

void output(void);


- in processor


void parser(char *);

void calculate(char *);




   Memory


 우선 입출력 간의 써야할 입출력 버퍼가 필요하다. 이는 단순 문자열 이므로 다음과 같이 간단하게 선언할 수 있다.

char inputBuff[buff_length + 1];
char outputBuff[buff_length + 1];


 다음은 단일변수 및 배열변수를 저장하기 위한 메모리 구성을 해야 한다. 변수의 이름과 값만 가지는 간단한 구조이다. 그리고 이 변수를 쉽게 사용할 수 있게 여러 가지 함수가 필요하다.


struct variable{
   char name[variable_length +1];
   char* value;
   int number;
   double* values;
};

void newVariable(struct variable);

void setVariable(struct variable);

struct variable getVariable(char *);

int isVariable(char *);

void parseVariable(struct variable *);


 그리고 수학함수를 처리하기 위한 메모리 구성을 해야 한다. 이 역시 마찬가지로 함수 값을 쉽게 얻어올 수 있게 여러 가지 함수가 필요하다.


struct function{
   char name[function_length + 1];
   char* argument;
   int number;   
   double* arguments;
   double reternValue;
};

void isFunction(char *);

void parseFuntion(struct function *);


   Circuit


스펙에 나온 배열변수의 연산함수 처리를 위하여 다음과 같은 함수가 필요하다.


double add(struct variable)

double  mul(struct variable)

double  avg(struct variable)

double  std(struct variable)


스펙에 나온 저장과 불러오기 처리를 위하여 다음과 같은 함수가 필요하다.


void save()

void load()



프로젝트 메인으로

이올린에 북마크하기(0) 이올린에 추천하기(0)

단순화 된 공학 계산기

Posted 2007/10/07 16:47
Abstract


 작년 10월 교내 소프트웨어 공모전을 마지막으로 버젓한 프로그램을 만들어 보질 않았다. 올해 3월 군입대 전까지 내 인생의 공백기였고 그저 나태함과 풍요로움을 느끼고 살았을 뿐이다. 이제 슬슬 군대에서도 공부할 수 있는 시간이 늘어가고 환경이 갖춰짐에 비교적 가벼운 주제로 프로그래밍 공부를 시작할 생각이다.


Introduction


 3년전 그러니까 2004년 2학기 프로그래밍 2 및 실습 시간에 했던 프로젝트이다. 한학기동안 열심히 공부해서 자신감도 충만한 상태였고 1학기때 부진함을 메꿀수 있는 기회였다. 그러나 금새 열정은 이미 술자리로 가있었고 3일정도 구현해서 제출한 기억이다. 올해에도 같은 교수님이 같은 숙제를 후배들에게 내주셨다.

      Specification

more..



 c로 구현할 것이며 설계-구현-재설계-재구현 의 사이클을 두번이상 겪을 생각이다. 주로 이렇게 당직을 서는 동안 해내갈 것이다. 아무래도 근무시간에는 전날 저녁에 읽은 책을 바탕으로 글을 쓰는게 눈치도 안보이고 낫다. 요 몇주간은 디자인 패턴을 생각하고 있다.


Main


     Design

     2007. 10. 6 - 첫번째 설계

     Implementation

   2007. 10. 7 - calcurator() 구현


     Excute


Result


이올린에 북마크하기(0) 이올린에 추천하기(0)