2549608436 发表于 2017-8-4 22:54:51

881966 发表于 2017-8-10 18:42:36

不管什么语言,最终都要转换成机器码:victory:

oldsheepf 发表于 2017-8-16 11:05:16

80年代初,我读研究生时就有同学做中文BASIC的课题,现在想来那个老师的眼光不行。:lol:lol

liaopinjia 发表于 2017-8-19 00:08:30

学习了,很早以前开始编程的时候有过这想法,可真正有几年编程经验后,发现编程的难点不在于英语,而在于编程的逻辑和思路。而且,英文的词组,看起来更简洁,看不懂的用中文注释即可。

heguowan 发表于 2017-8-21 20:52:53

旭日天天升 发表于 2017-7-23 15:57
全中文的编程软件,本来就有的。

能上传一下吗:handshake

无敌吴刚 发表于 2017-8-22 09:08:57

本帖最后由 无敌吴刚 于 2017-8-22 09:16 编辑

岑蓉络阳 发表于 2017-8-1 20:40
从头看到尾,没有发现计算方法专业的朋友。打个比方,计算一个N个未知量的线性方程组或者一个常系数微分方 ...

何以见得不能用中文编程呢?况且你楼上所说的“中文在计算机中的应用无形中还比西文增加了计算机的运算量,因为西文充其量就是ASCII码中的字符,中文需要面对最少2000个汉字。只不过使用者并没有感觉出来而已。从讲究效率来讲是很不合算的。”,你所说的是VB这种解释语言的工作方式吧??其它那些流行的编译语言,哪一个需要用这种方式来工作的?不都是充当于一个翻译器,直接一次性将语言翻译成机器码的程序文件吗?中文与英文有何区别?顶多在编译程序那个时候,花多一点儿运算量而已(这个工作只有一次,以现在的机器的性能,当食生菜啊),生成EXE文件后,不都是一样的么?

如果想,就连关键字其实都可以用中文来代替的!只不过流行的编译工具大多数是外国人开发的,就用了英文而已,至于其它变量,函数命,结构定义什么的,现在都可以用中文(以前Ansi的时候,就比较麻烦,因为有一部分汉字的字码与英文字符的字码有重叠,这个解析起来有可能会有错误,现在则不再会了)。

最后让摘取部分我写的中英结合的不论不类的A*寻路算法,可以看到里面有很多中文,也有英文,编译成程序,一点问题都没有!也不见得会慢,因为最终运行的都是机器码。




procedure TAXMap.光标转换到地图坐标(X, Y: Integer; var MapX, MapY: Integer);
begin
MapX:=X div F显示比例;
MapY:=Y div F显示比例;
end;

function TAXMap.初始化开始寻路(): Boolean;
var
X, Y: Integer;
begin
for X:=0 to MapWidth-1 do
begin
for Y:=0 to MapHeight-1 do
begin
   MapData.TR:=0;
end;
end;
调试_1:=0;
开启节点记录列表大小:=0;
SetLength(开启节点记录列表, 开启节点记录列表大小);
MapData.父节点X:=F路径计算开始点X;
MapData.父节点Y:=F路径计算开始点Y;
MapData.父节点方向:=3;
寻路_开启节点记录列表最大历吏记录:=0;
已寻路:=False;
if (F路径计算开始点X=F路径计算结束点X) and (F路径计算开始点Y=F路径计算结束点Y) then
begin
已寻路:=True;
Result:=False;
end
else
begin
Result:=True;
end;
end;

function TAXMap.坐标非法(X, Y: Integer): Boolean;
begin
Result:=True;
if X<0 then
Exit;
if Y<0 then
Exit;
if X>=MapWidth then
Exit;
if Y>=MapHeight then
Exit;
Result:=False;
end;

procedure TAXMap.添加到开启列表(X, Y: Integer);
begin
开启节点记录列表大小:=开启节点记录列表大小+1;
if 寻路_开启节点记录列表最大历吏记录<开启节点记录列表大小 then
begin
寻路_开启节点记录列表最大历吏记录:=开启节点记录列表大小;
end;
SetLength(开启节点记录列表, 开启节点记录列表大小);
开启节点记录列表[开启节点记录列表大小-1].X:=X;
开启节点记录列表[开启节点记录列表大小-1].Y:=Y;
end;

procedure TAXMap.从开启列表中删除(T: Integer);
var
N: Integer;
begin

for N:=T to 开启节点记录列表大小-2 do    //事实证明这样子很多余,既然是无序数组,何需移动数据?直接将最后元素换到当前位置即可
begin
开启节点记录列表:=开启节点记录列表;
end;

开启节点记录列表大小:=开启节点记录列表大小-1;
// 开启节点记录列表:=开启节点记录列表[开启节点记录列表大小];   //这样应该会快多了吧
SetLength(开启节点记录列表, 开启节点记录列表大小);
end;

function TAXMap.开启列表中寻找最小(var X, Y, T: Integer): Boolean;
var
n: Integer;
MinF: Integer;
begin
if 开启节点记录列表大小<=0 then
begin
Result:=False;
Exit;
end;
Result:=True;
MinF:=MapData[开启节点记录列表.X, 开启节点记录列表.Y].F;
X:=开启节点记录列表.X;
Y:=开启节点记录列表.Y;
T:=0;
for n:=1 to 开启节点记录列表大小-1 do
begin
if MapData[开启节点记录列表.X, 开启节点记录列表.Y].F<MinF then
begin
   MinF:=MapData[开启节点记录列表.X, 开启节点记录列表.Y].F;
   X:=开启节点记录列表.X;
   Y:=开启节点记录列表.Y;
   T:=n;
end;
end;
end;

procedure TAXMap.开始寻路1;
var
X, Y, T, X1, Y1: Integer;
N, G: Integer;
label
L完成寻路;
begin
if 初始化开始寻路()=False then
Exit;
//开启第一个节点
MapData.TR:=1;   //标记开启
MapData.G:=0;    //起点到此点损耗 0
MapData.H:=估算到终点距离(F路径计算开始点X, F路径计算开始点Y);   //此点到终点损耗评估
MapData.F:=MapData.G+MapData.H;
//添加第一个记录
开启节点记录列表大小:=1;
SetLength(开启节点记录列表, 开启节点记录列表大小);
开启节点记录列表.X:=F路径计算开始点X;
开启节点记录列表.Y:=F路径计算开始点Y;
//开始寻路
while 开启列表中寻找最小(X, Y, T) do
begin
for N:=0 to 7 do    //开启周围7个方向的格子
begin
   调试_1:=调试_1+1;
   X1:=X+DirToDianX;
   Y1:=Y+DirToDianY;
   if 坐标非法(X1, Y1) then      //该格子超出地图边界
    Continue;
   if 寻路_终点可以是个障碍物 then   //非正常寻路,即终点是一个障碍点,但这个障碍点的周围是一个可到达的通路的,用这个,直接比较X1 Y1,速度慢少少
   begin
    if X1=F路径计算结束点X then       //直接与终点比较
   if Y1=F路径计算结束点Y then
   begin
      if N in then
       MapData.G:=MapData.G+寻路_斜线耗损距离
      else
       MapData.G:=MapData.G+寻路_直线耗损距离;
      MapData.H:=估算到终点距离(X1, Y1);
      MapData.F:=MapData.G+MapData.H;
      MapData.父节点X:=X;
      MapData.父节点Y:=Y;
      MapData.父节点方向:=求反方向;
      已寻路:=True;
      goto L完成寻路;
   end;
   end;
   case MapData.TR of
    0:       //未被标记的节点
   begin
      if MapData.Open=False then   //障碍物
      begin
       MapData.TR:=2;//直接设该格子为关闭的节点 不被访问
       Continue;
      end;
      if N in then
       MapData.G:=MapData.G+寻路_斜线耗损距离
      else
       MapData.G:=MapData.G+寻路_直线耗损距离;
      MapData.H:=估算到终点距离(X1, Y1);
      MapData.F:=MapData.G+MapData.H;
      MapData.父节点X:=X;
      MapData.父节点Y:=Y;
      MapData.父节点方向:=求反方向;
      MapData.TR:=1;      //开启节点
      添加到开启列表(X1, Y1);
      if 寻路_终点可以是个障碍物=False then   //正常的寻路,即终点为一个可到达的点,就可以用这个来判断,这样速度快少少 否则 则用上面比较X1 Y1后直接判断
      begin
       if MapData.H=0 then   //到终点估算距离为0,即到达终点
       begin
      已寻路:=True;
      goto L完成寻路;
       end;
      end;
   end;
    1:         //已标记为开启节点的格子
   begin
      if N in then                //重新计算G值(开始点到此节点的损耗距离)
       G:=MapData.G+寻路_斜线耗损距离
      else
       G:=MapData.G+寻路_直线耗损距离;
      //H:=估算到终点距离(X1, Y1);   不需要重新计算H值
      //F:=G+H;                        不需要重新计算
      if G<MapData.G then       //而是根据G判断 简化
      begin
       MapData.G:=G;            //重新获得更小的G值
       MapData.F:=MapData.G+MapData.H;      //重新计算更小的F值
       MapData.父节点X:=X;
       MapData.父节点Y:=Y;
       MapData.父节点方向:=求反方向;
      end;
   end;
    2:       //该格子为已关闭节点
   begin
      Continue;
   end;
   end;
end;
MapData.TR:=2;//已完成周边格子开启 关闭该节点
从开启列表中删除(T);//从开启列表中删除
end;

L完成寻路:


end;

旭日天天升 发表于 2017-8-22 09:27:31

heguowan 发表于 2017-8-21 20:52
能上传一下吗

链接:http://pan.baidu.com/s/1gfhAjcR 密码:e8f9

w6955 发表于 2017-8-22 10:42:10

不管什么语言,关键在其后的编译程序,你非要如此做便可以 设定个变量名字叫武二郎等于100个炊饼也无不妨。编译后即为 A=100 。

涧边草 发表于 2017-8-22 10:58:34

不论什么语言编程,就看是不是CPU能识别的规定的机器码,编译器就是个关键。我要是再年轻三十岁,非恶补专业知识,来研究这个用汉语编程的编译器。现在是多么好的创新时代,看后生吧,能早日诞生这种编译器。

OODLL 发表于 2017-8-22 11:51:37

可以用中文做,反正最后都会被编译成机器码,和编程语言没关系,是编译器的事情了
现在用中文写MCU的好像没有但是写Windows程序的有呢:lol

heguowan 发表于 2017-8-22 11:54:19

旭日天天升 发表于 2017-8-22 09:27
链接:http://pan.baidu.com/s/1gfhAjcR 密码:e8f9

谢谢,已下载:handshake

zhxzhx 发表于 2017-8-22 12:54:33

无敌吴刚 发表于 2017-8-22 09:08
何以见得不能用中文编程呢?况且你楼上所说的“中文在计算机中的应用无形中还比西文增加了计算机的运算 ...

哎,不要说了,叫这个劲的都是不会编程的,甚至都是没看过编程的。另外,VB也不是你说的那样要每次去查的,各种解释语言也是先处理为中间代码,然后对中间代码进行解释,这个时候除了字符串,其他都已经重新编码了,VB编译出来的可以是直接的机器码,而且VB的连接器就是VC的,VB可以连接VC的目标代码。

zhxzhx 发表于 2017-8-22 13:22:28

本帖最后由 zhxzhx 于 2017-8-22 13:31 编辑

OODLL 发表于 2017-8-22 11:51
可以用中文做,反正最后都会被编译成机器码,和编程语言没关系,是编译器的事情了
现在用中文写MCU的好像 ...

有,单片机的叫习51,计算机的是易语言,叫尘土还是叫飞扬我忘了,安卓的叫A4E,苹果手机的叫蓝鸟。
实际上有很多,不下23十种,一般人不知道而已。
还有一个奇葩的用全角符号的,堆栈不叫堆栈叫数摞。
其实易语言用的还是很多的,功能很强大,代码效率接近VC,很多外挂,病毒都是易写的,导致很多杀毒软件见到易的月运行库就误报。

无敌吴刚 发表于 2017-8-22 14:26:38

zhxzhx 发表于 2017-8-22 12:54
哎,不要说了,叫这个劲的都是不会编程的,甚至都是没看过编程的。另外,VB也不是你说的那样要每次去查的 ...

嗯嗯!学习了!VB的指令应该就像虚拟机那样。是另一种指令,也不是直接执行当初输入那些文本,也是经过编译过的。

baofu 发表于 2017-8-22 15:09:24

先弄清楚如下问题,再说中文编程吧?
1.硬件抽象层。
2.驱动程序的作用是什么?弄清楚驱动程序加载和运行的过程。
3.什么是操作系统(OS)?OS加载和工作要什么条件?
4.什么是内核程序和用户程序?
5.什么是机器资源?程序加载和运行对资源的要求?
   如果上述问题不了解,又能编程的,肯定都是只能写用户级应用程序的,这一级当然可以用中文编程----因为几乎一切资源(包括字库)都能用了。
   从电脑上电,运行到一切就绪,少则几十秒,多则几分钟,这期间机器里面也是有程序运行的,这些程序咋运行的,等弄清楚了,再看这个问题,你就会笑而不言了。
   
页: 1 2 3 4 5 6 [7] 8
查看完整版本: 突发奇想 用汉语编写计算机语言