C 처음 배우는 중인데 숙제를 어찌 해야 하는지 막막해서 글 남겨봅니다
안녕하세요. 과제가 있는데 뭐 부터 해야하는지 전혀 감이 안옵니다.
완전 초보라 ㅠㅠ 대충이라도 뭐뭐 부터 해야하는지 설명좀 해주시면 고맙겠네요
- Aim
The aim of the assignment is to make you practice the use of pointers, command line argu-
ments, and dynamic memory allocation.
- General description
Your program, will accept an English description of a system of linear equations as command
line arguments. Practically, assuming that solve is the name of the executable file, this English description will be stored in a le test and the program will be run with the command
solve $(cat test)
The English description of the system of linear equations is to be translated into a formal representation and solved. The assignment does not require to build a parser: simple pattern matching can do the job.
- Detailed description
Each equation will be described by a sentence that will be generated by the following context-free grammar. The nonterminal symbols of the grammar are:
SENTENCE
EXPRESSION1
EXPRESSION
PRODUCT1
PRODUCTS
PRODUCT
CONSTANTS
CONSTANT
VARIABLE
The start symbol is SENTENCE.
The production rules are:
SENTENCE --> EXPRESSION1 is equal to EXPRESSION.
SENTENCE --> EXPRESSION1 equals EXPRESSION.
EXPRESSION1 --> EXPRESSION1 plus EXPRESSION
EXPRESSION1 --> The result of adding PRODUCTS and PRODUCT
EXPRESSION1 --> The sum of PRODUCTS and PRODUCT
EXPRESSION1 --> PRODUCT1
EXPRESSION --> EXPRESSION plus EXPRESSION
EXPRESSION --> the result of adding PRODUCTS and PRODUCT
EXPRESSION --> the sum of PRODUCTS and PRODUCT
EXPRESSION --> PRODUCT
PRODUCTS --> PRODUCTS, PRODUCT
PRODUCTS --> PRODUCT
PRODUCT1 --> The result of multiplying CONSTANT by CONSTANT
PRODUCT1 --> The result of multiplying VARIABLE by CONSTANT
PRODUCT1 --> The result of multiplying CONSTANT by VARIABLE
PRODUCT1 --> The product of CONSTANTS and CONSTANT
PRODUCT1 --> The product of VARIABLE, CONSTANTS and CONSTANT
PRODUCT1 --> The product of VARIABLE and CONSTANT
PRODUCT1 --> The product of CONSTANTS, VARIABLE, CONSTANTS and CONSTANT
PRODUCT1 --> The product of CONSTANTS, VARIABLE and CONSTANT
PRODUCT1 --> The product of CONSTANTS and VARIABLE
PRODUCT --> the result of multiplying CONSTANT by CONSTANT
PRODUCT --> the result of multiplying VARIABLE by CONSTANT
PRODUCT --> the result of multiplying CONSTANT by VARIABLE
PRODUCT --> the product of CONSTANTS and CONSTANT
PRODUCT --> the product of VARIABLE, CONSTANTS and CONSTANT
PRODUCT --> the product of VARIABLE and CONSTANT
PRODUCT --> the product of CONSTANTS, VARIABLE, CONSTANTS and CONSTANT
PRODUCT --> the product of CONSTANTS, VARIABLE and CONSTANT
PRODUCT --> the product of CONSTANTS and VARIABLE
PRODUCT --> CONSTANT times CONSTANT
PRODUCT --> VARIABLE times CONSTANT
PRODUCT --> CONSTANT times VARIABLE
PRODUCT --> CONSTANT
PRODUCT --> VARIABLE
CONSTANTS --> CONSTANTS, CONSTANT
CONSTANTS --> CONSTANT
plus the production rules of the form
CONSTANT --> C_constant_of_type_int_or_float
VARIABLE --> C_variable
Hence the terminal symbols of the grammar are all lowercase words in the production rules, which includes C constants and variables.
An English equation is a sentence generated by the grammar, namely, any sequence of terminals that can be obtained from the grammar, starting with SENTENCE (the start symbol), applying the production rules, until nothing but terminals are obtained.
The following are examples of three les, say test1, test2 and test3 respectively, that contain
English equations:
The result of multiplying 2 by x plus y times 3 plus 5 times z is equal to 10.
The product of x and 3 plus the product of 7 and y plus z times 4 is equal to 3.
The product of 2 and y plus the result of multiplying z by 2 plus x equals 3.
The sum of 6.5 times u, 5 and -2. plus the product of 3.5 and x is equal to
the result of adding x, 4.5 times y and -10.
The sum of x and y plus the result of adding z and 8.5 equals 2 times x plus
-3 times y plus the result of multiplying 5 by u plus -7..
The result of adding 2, 2 times u and the product of -3 and u plus 8.5 times y
is equal to the sum of y and the product of -5.5 and u.
The sum of 17, the product of 2., u, 1.2 and 3. and the result of
multiplying -2 by 3 plus 7 times y is equal to the result of
adding the product of y, 6 and 1.5 and .2 times 4 plus y plus
u times 2.5 plus -1 times x plus the product of 6 and z plus
the result of multiplying -1.5 by u.
The result of multiplying 2 by x plus y times 3 plus 5 times z is equal to 1.
The product of x and 2 plus the product of 3 and y plus z times 5 is equal to 1.
The product of 2 and y plus the result of multiplying z by 2 plus x equals 3.
No assumption should be made on the number of English equations provided as input, nor on the length of an English equation, nor on the length of a variable.
The number of variables is assumed to be equal to the number of equations.
Your program should:
output the variables in the equations in lexicographic order;
output a formal representation of the English equations;
output whether or not there is a solution, and in case there is one, output it.
- Sample output
$ solve $(cat test1)
The variables are:
x y z
The equations are:
2.00 x + 3.00 y + 5.00 z = 10.00
3.00 x + 7.00 y + 4.00 z = 3.00
1.00 x + 2.00 y + 2.00 z = 3.00
The system of equations has a solution:
x = 3.00
y = -2.00
z = 2.00
$ solve $(cat test2)
The variables are:
u x y z
The equations are:
6.50 u + 2.50 x + -4.50 y + 0.00 z = -13.00
-5.00 u + -1.00 x + 4.00 y + 1.00 z = -15.50
4.50 u + 0.00 x + 7.50 y + 0.00 z = -2.00
6.20 u + 1.00 x + -3.00 y + -6.00 z = -10.20
The system of equations has a solution:
u = 7.00
x = -31.44
y = -4.47
z = 5.93
$ solve $(cat test3)
The variables are:
x y z
The equations are:
2.00 x + 3.00 y + 5.00 z = 1.00
2.00 x + 3.00 y + 5.00 z = 1.00
1.00 x + 2.00 y + 2.00 z = 3.00
The system of equations does not have a solution.
긴글 읽어주셔서 감사합니다
우와....
처음에는 그냥 단순 숙제 요청인줄 알았는데,
제가 이해하는 내용의 이 문제가
input 영어 문장
output 수식 표현과 해 구현
다음으로 맞다면, C 초보분들에게 이런 숙제를 내주는 교수의 기대치가 굉장하군요.
대단합니다.
아마도 해를 구하는건 배우셨거나 힌트를 주었을것 같고,
파싱 부분이 고민이시라면 문제라면 c string tokenizer 단어로 검색해서 접근해 보세요.
시간이 문제지 그리 어렵지는 않습니다.
답변 감사드립니다
열심히 공부해서 풀어야죠^^;
좀더 찾아보고 시작해야겠어요^^
답 보다 문제가 더 어려운건 나만 그런가요? ^.^
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
기대치...
저도 학부시절,,,학생들에게 기대치가 너무도 높은 교수님 밑에서 공부했었는데,,,
매주 그교수님 과제에 모든시간을 쏟아부었던 기억이 나네요...
항상 그 교수님의 과제와 시험문제는 어려웠지만,
결과적으로 지나고보니, 그 분 덕에 참으로 많은걸 배울수 있었네요...
음...
parser 를 구현하면서, 고작 pointer, command-line args, dynamic alloc 을 보는게 목적이라니... ;;
굉장히 겸손한(?) 교수님이신듯.. ;;
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
"The assignment does not
"The assignment does not require to build a parser: simple pattern matching can do the job"
분명히 간단한 숙제는 아니지만,
일단 simple pattern matching으로 하라고 했으니,
목적에 잘 부합할듯 하네요..
assumption을 점차로 줄이면서 최종단계에서는 parser구현이 숙제가 될 수도 있겠네요..
훌륭한 assignemnt 같습니다.. ^^
---
초보대상의 숙제라면 대강 이런식으로 할듯합니다.
command arg로부터 입력을 받음 == argv[1] The, argv[2] = result ...
argv 로부터 SENTENCE를 identify (newline character또는 .으로?? )
(SENTENCE개수로부터 변수의개수 알아내고, matrix생성)
각 SENTENCE 에 대해서 is equal to 또는 equals를 검색해서,
EXPRESSION1 과 EXPRESSION을 identify,
EXPRESSION1에대해서 더 작은단위의 token을 차례로 identify해서 terminal까지 진행,
terminals로부터 수식생성(matrix 값 채워넣기..)
수식으로부터 해 계산, (inv matrix계산) (이부분도 별도 solution이 주어져있을듯..)
영어와 설명이 어렵지만.
영어와 설명(표현) 방법이 조금 어려운 것 같지만...
C언어 배우기전에 PL 과목을 선이수하셨으면 설명을 이해하는데 문제는 없을 것 같습니다. 영어빼고.
컴파일러 수업을 듣거나, lex & yacc 를 써본 적이 있다면 그 쪽문제일거라고 생각하기 쉬우나, 꼭 그렇지는 않습니다.
드래곤북 1판을 보시면 1/3 넘게 다향식계산기를 가지고 scanner, tokenizer 를 설명하고 있습니다.
그러나, 이 문제는 자료구조 수업에서는 나오는 다항식 계산기(polynomial caclurator) 를 구현하는게 맞을 것 같습니다.
lex & yacc 를 쓰면 좀 오버스펙인거 같습니다.
교수님께 물어보시고 lex & yacc 를 써도 무방하다고 하셔도 직접 구현해볼 것을 권장합니다.
몇몇 자료구조책에서는 다향식 계산기를 단계적으로 개선하는 내용을 담은 책들도 있으니 참고하시면 될 것 같습니다.
( 보통은 개선사항은 연습문제로 많이 되어 있습니다. 혹은 과제나... ^^ )
드래곤북 1판을 구하셔서 읽어보심도 권장합니다. 단, 번역이 깔끔하지 못합니다. ^^;
p.s
다항식 계산기 과제를 동생들에게 10시간 넘게 설명해준 적이 있는데요. 잘 이해를 못하더군요.
몇학기후에도 이 과제를 못푼다면 다른 진로를 생각해봄도 좋을 듯 싶습니다.
초기 잦은 야근과 스트레스는 본인 역량문제가 많은 비중을 차지합니다.
어느학교
어느학교 숙제인가요?; 간단한 패턴매칭이라고 해도 결과적으로 hand-craft RD 파서를 짜게 될 것 같아요.
아, 그리고 몇학년이세요?;
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
하긴...
그러고보면 4학년정도 컴파일러 1학기 첫번째 과제로 내도 될 것 같네요.
2학년 1 ~ 2학기정도면 손쓴(hand-craft)파서 구현정도는 하지 않을까요?
토픽에는 좀
토픽에는 좀 벗어납니다만..
* output whether or not there is a solution, and in case there is one, output it.
이걸보면 해가 있는경우 출력해라는 말인것 같은데...
그런데 다시한번 이문장만 자세히본다면...
"유일해만이 존재하는경우 출력하고 아니면 말라." 라는 뜻이 맞습니까...?
물론, 주어진 문제에서는 복수해를 가지지 않을수도 있습니다만,
댓글 달기