百家号-计算机语言学什么、怎么学7
从计算机语言学什么、怎么学开始,在1.《计算机语言的标准格式比较》、2.《多种计算机语言的标准格式与标准IO比较》、3.《数学规则遵守、计算机算法分析、三个基本结构及多语言描述实现》、4.《实数计算、阅读程序、理解算法、从一种语言代码转另一种代码》、5.《实数域除法计算遇到分母接近于0的检测控制问题》、6.《实数域负数开平方规则的特殊限制与判定-程序格式模版-语言无关性》等6讲中,想贯彻这样一个想法:计算机语言的语言和平台无关性思想、方法、技术、操作等一般性概念与方法。有了渔不怕没有鱼。
因为平台检测-重复抄袭!?不得不使用不同的名称。其实是连续的整体的怎么学的1-6讲。所以浏览者、阅读者需要连续浏览1-6讲。这是第7讲。
在这一讲,俺们遇到一个问题。
是继续沿着计算机语言的方向朝着多功能、多函数、多类、多文件走。还是沿着简单的数学问题自然语言描述的方向朝着代数、函数、方程、微积分、变分法、矩阵、集合论、概率统计、人工智能、……还是沿着实际应用物理、化学、生物、工程技术、科学研究、前沿科技、市场需求、高薪就业、事务处理、大数据、云计算、……
尤其是米国对软件行业-几乎是全行业全方位的脱钩、禁止、制裁、……。必将引发基础软件(鸿蒙系统)、中间件、通用件(编译工具)、……,各种CAD的自主化开发发展。计算机技术与软件工程技术等行业就业普遍会好过预期。
鉴于本人只是个业余爱好者。尤其喜欢计算机辅助工作。仅仅一台电脑便可游戏人生。
因此想分开说。一说数学进阶,二说物理到工程技术应用,三说程序软件进阶。可平台监测,没法在一篇文章里说-抄袭、旧闻、……影响声誉!那就分开说,是一个连续剧。其实,由于表达方式的串行模式。也只能先按下计算机语言进阶不表,说说数学进阶。
实数域的一元方程、一元变量x的多项式问题
实数域四则混合运算除法分母为0问题、或接近于0问题、负数不能开平方-像一元二次方程的情况。都可以用一个模版来表达-算法分析与语言表述的问题。计算的检测、控制、提示、测试-变量声明-顺序、分支、循环三种基本结构实现了。
也就是说,用同样的程序结构模式,只要换上一元二次方程的数学规则,就可以了。
实数计算遇到的问题—从一种语言转换成另一种语言,没有什么困难了-不需要新的知识与技术。
那么?数学方面加大难度可以描述吗?
那下面就来看一看:
1.学什么
…………
2.怎么学-7
参考本号的《计算机语言自学过程提纲》。也可以顺便浏览一下其他的文章。因为本号是按照连续讲述的方式进行的。缺少了就可能造成某个知识或技术环节的遗漏。
2.2从实际问题开始
2.2-1从数学基础开始
可以编辑、编译、调试、运行、测试了。
问题:从一元二次方程求解扩展延伸到一元多项式-非线性方程。
二次与三次方程求解通式非线性方程求解的数值法之一
前面有了实数计算的MATLAB实现、Fortran实现、C实现、C++实现。现在接着比较一下C#实现
看看如何用C#语言实现
通过阅读C、C++程序获得计算机算法流程,用算法流程重新写C#语言代码。
C++:的一个模版,在此基础上扩充
#include"iostream.h"需要头文件-定义了标准IO函数-供调用
intmain(intargc,char*argv[])
{
floata1,b1,Subtrac;需要变量声明
……
return0;
}
添加进处理一元二次方程的语言描述即可。
一元二次方程的数学求解规则是:数学家推导的求根公式可以直接利用
一元二次方程的求解通式由于负数的开平方问题,需要判断b2-4ac=0的问题。也就是:两个不相等的实根或两个相等的实根;
下面就是算法分析:先求出q=b2-4ac的值,进行判断。再按照两种计算式分别进行计算。
x1=(-b+开平方q)/2a与x2=(-b-开平方q)/2a
对了,还得确认输入的a不是0;
由于要用开平方计算,就得调用头文件math提供的函数sqrt()。
C++语言V6平台人机交互模式由上面的模版扩充-添加专用代码,参见《实数域负数开平方规则的特殊限制与判定-程序格式模版-语言无关性》。再转换成C#语言描述应该问题不大。单从表面上看,C#是完全的面向对象方法的语言,与面向过程的语言差异较大。其实,差别较大—主要在关于面向对象的语言描述事务处理问题。在数值计算这种过程特征明显的数学计算中,差别倒不大-都只用到计算机语言低层的词汇、语句、结构(主结构与三个基本结构)。在面向对象方法的语言里,只是计算过程被包裹在一个类中的函数里。这里用了主方法-主函数可能更专业一点。
C#:程序模版
usingSystem.IO;//键盘/显示器-标准IO方法被引入
namespaceCons_arithmetic
{
classProgram
{
需要变量声明-范围-类中
staticvoidMain(string[]args)
{
floata1,b1,Division1;需要变量声明-范围-函数中
Console.Write("请输入1个实数:\n");
a1=float.Parse(Console.ReadLine());
Console.Write("请输入1个实数:\n");
b1=float.Parse(Console.ReadLine());
Division1=a1+b1-a1/b1+a1*b1;
Console.Write("用户两实数四则混合运算结果:"+Division1+"\n");
}
}
}
实数域一元二次方程求解。C语言、C++语言与C#语言在此问题的描述差别不大。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.IO;
usingSystem.Data;
namespaceRealArithmetic
{
classProgram
{
staticvoidMain(string[]args)
{
inti,j,k,N,num=0;
stringChansI;
Console.WriteLine("输入测试次数");
N=int.Parse(Console.ReadLine());
for(i=0;iN;i++)
{
float[]abc=newfloat[3];
doubleRqsqrt,x1,x2;stringChansABC,ChansQ,ChTrigonomX1,ChTrigonomX2;
stringWname;
//键盘输入数据--并进行计算
Console.Write("请输入3个实数,依次是a,b,c,每输入1个回车一次。a不能为0:\n");
for(j=0;j3;j++)
{
abc[j]=float.Parse(Console.ReadLine());
}
//数据处理
if(abc[0]==0)
{
Console.WriteLine("你输入的一元二次方程的二次项系数为0,请重新输入");
else
{
Rqsqrt=abc[1]*abc[1]-4*abc[0]*abc[2];
if(Rqsqrt0)
{
Console.WriteLine("你的一元二次方程没有实数解");
}
else
{
x1=(-abc[1]+Math.Sqrt(Rqsqrt))/2*abc[0];
x2=(-abc[1]-Math.Sqrt(Rqsqrt))/2*abc[0];
ChansABC=string.Format("{00:F4}",abc);
ChansQ=string.Format("{00:F4}",Rqsqrt);
ChTrigonomX1=string.Format("{00:F4}",x1);
ChTrigonomX2=string.Format("{00:F4}",x2);
//键盘输入数据的处理结果
Console.WriteLine("计算机语言处理完毕,请检查结果:");
Console.WriteLine(ChTrigonomX1,"一个实根\r\n");
Console.WriteLine(ChTrigonomX2,"另一个实根\r\n");
Console.Write("请输入计划保存的文件,如F:\\outdata.txt\n");
Wname=Console.ReadLine();
FileStreamfs=newFileStream(Wname,FileMode.Create);
StreamWritersw=newStreamWriter(fs);
sw.Write("计算机处理完毕:\r\n");
sw.Write("根号内的计算结果");
sw.WriteLine(ChansQ,"\r\n");
sw.Write("你的一元二次方程的根,X1=");
sw.WriteLine(ChTrigonomX1,"\r\n");
sw.Write("你的一元二次方程的根,X2=");
sw.WriteLine(ChTrigonomX2,"\r\n");
//清空缓冲区
sw.Flush();
sw.Close();
fs.Close();
Console.WriteLine("计算机语言处理完毕,数据已经保存为:");
Console.WriteLine(Wname);
}
}
num=i+1;
ChansI=num.ToString();
Console.WriteLine("计算机语言处理次数为:");
Console.WriteLine(ChansI);
}
Console.WriteLine("计算机语言处理完毕,请检查数据。");
Console.WriteLine("检查后,请回车结束");
Console.ReadKey();
}}}
C#语言VDS平台人机交互模式ax3+bx2+cx+d=0
或
anxn+bn-1xn-1+……+x+a=0
还有标准的求解公式吗?若没有,那怎么办呢?
非线性方程求解的数学知识有些特殊的高次方程可以通过和差化积来求解-转化成已有方法或求解公式来解决。绝大多数还真的没有求解公式。数学专家们也不行。那计算机怎么做呢?这就是计算机的数值计算-数学家们想出了一个近似的、逐步逼近精确解的办法。总比没有解强多了。
还记得高次方程求解的几何法吗?用描点法在坐标系中画出高次方程的函数曲线,确定高方程的根。计算机也有同样的办法-计算机图形生成技术。也就是数据的可视化技术。
这得用VC#更方便。当然,VB、VC++、MATLAB也行。那C、Fortran、Java、Python、R、等等呢。也行。但就是要得到一个含有坐标的画布,还是编译器提供的好方便。而且,图形生成问题使用点阵像素概念与方法。需要许多图形生成函数、变换函数、等。当然,已经有C、Fortran、Java、Python、R、等的图形包可以用了。可还是觉得VB、VC++、VC#、MATLAB方便。