编写一个完整的程序,要求如下: 创建正方形画布(建议600*600),以画布中心为原点画出坐标轴,按以下公式绘制函数曲线: x = wh×((1+cos(5t)+ sin2(4t))×sin(3t))/5 y = hh×((1+cos(2t)+ sin2(4t))×cos(3t))/5 其中wh、hh的取值分别为画布的半宽和半高,t的取值范围为0至2π,步长为0.01。
时间: 2024-02-20 09:02:40 浏览: 97
!= ";") {
throw "Syntax Error: ';' expected.";
}
for (string name : names) {
node->children.push_back(new TreeNode{"var", {new TreeNode{name, {}}}});
}
}
else if (token.value == "procedure下面是一个Python绘图程序,可以绘制上述函数曲线:
```python
import math
import turtle
# 设置") {
token = *it;
++it;
if (token.type != IDENTIFIER) {
throw "Syntax Error:画布大小和坐标轴
width, height = 600, 600
turtle.setup(width, height)
turtle.setworldcoordinates(- identifier expected.";
}
node->children.push_back(new TreeNode{"procedure", {new TreeNode{token.value, {}}}});
tokenwidth/2, -height/2, width/2, height/2)
turtle.penup()
turtle.goto(0, -height/ = *it;
++it;
if (token.value != ";") {
throw "Syntax Error: ';' expected.";
}
2)
turtle.pendown()
turtle.goto(0, height/2)
turtle.penup()
turtle.goto(-width/2, 0 block();
token = *it;
++it;
if (token.value != ";") {
throw "Syntax Error:)
turtle.pendown()
turtle.goto(width/2, 0)
# 定义函数
def x(t):
return width/2 ';' expected.";
}
}
token = *it;
++it;
}
node->children.push_back(statement());
return node;
}
TreeNode* parse(vector<Token> tokens) {
it = tokens.begin();
return block();
}
```
3. * ((1 + math.cos(5*t) + math.sin(2*t)**4) * math.sin(3*t))/5
def 语义分析
语义分析的主要作用是对语法树进行分析,检查语句是否 y(t):
return height/2 * ((1 + math.cos(2*t) + math.sin(2*t)**4) * math合法,并确定变量和常量的类型和值。在C++中,可以使用递归函数或者访问者.cos(3*t))/5
# 绘制函数曲线
turtle.pencolor('red')
turtle.penup()
turtle.goto(x(0), y(0))
turtle.pendown()
for t in range(0, int(2*math.pi*100), 1):
模式来实现语义分析。这里我们以递归函数为例,使用C++的递归函数来实现。
```cpp
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
vector<TreeNode*>::iterator it;
turtle.goto(x(t/100), y(t/100))
turtle.done()
```
这里使用了Python的turtle模块来绘unordered_map<string, int> constTable;
unordered_map<string, int> varTable;
unordered_map<string, int> procTable;
void图,通过设置画布大小和坐标轴来保证绘制图形的正确性。然后定义了函数x(t check(TreeNode* node) {
if (node->name == "const") {
string name = node->children[0]->name;
)和y(t)来计算函数曲线上每一个点的坐标,然后使用for循环遍历每一个 int value = stoi(node->children[1]->name);
if (constTable.find(name) != constTable.end()) {
t值,调用x(t)和y(t)计算出每一个点的坐标,然后使用turtle.goto()方法 throw "Semantic Error: duplicate definition of constant.";
}
constTable[name] = value;
}
else if (node->绘制连接所有点的曲线。最后使用turtle.done()方法保持绘图窗口不关闭。
阅读全文