源码运动
㈠ 软件和硬件的区别
硬件和软件的区别:
一、软件是一种逻辑的产品,与硬件产品有本质的区别
硬件是看得见、摸得着的物理部件或设备。在研制硬件产品时,人的创造性活动表现在把原材料转变成有形的物理产品。
而软件产品是以程序和文档的形式存在,通过在计算机上运行来体现他的作用。
在研制软件产品的过程中,人们的生产活动表现在要创造性地抽象出问题的求解模型,然后根据求解模型写出程序,最后经过调试、运行程序得到求解问题的结果。整个生产、开发过程是在无形化方式下完成的,其能见度极差,这给软件开发、生产过程的管理带来了极大的困难。
二、软件产品质量的体现方式与硬件产品不同
质量体现方式不同表现在两个方面。硬件产品设计定型后可以批量生产,产品质量通过质量检测体系可以得到保障。但是生产、加工过程一旦失误。
硬件产品可能就会因为质量问题而报废。而软件产品不能用传统意义上的制造进行生产,就目前软件开发技术而言,软件生产还是“定制”的,只能针对特定问题进行设计或实现。但是软件爱你产品一旦实现后,其生产过程只是复制而已,而复制生产出来的软件质量是相同的。
设计出来的软件即使出现质量问题,产品也不会报废,通过修改、测试,还可以将“报废”的软件“修复”,投入正常运行。可见软件的质量保证机制比硬件具有更大的灵活性。
三、软件产品的成本构成与硬件产品不同
硬件产品的成本构成中有形的物质占了相当大的比重。就硬件产品生存周期而言,成本构成中设计、生产环节占绝大部分,而售后服务只占少部分。
软件生产主要靠脑力劳动。软件产品的成本构成中人力资源占了相当大的比重。软件产品的生产成本主要在开发和研制。研制成功后,产品生产就简单了,通过复制就能批量生产。
四、软件产品的失败曲线与硬件产品不同
硬件产品存在老化和折旧问题。当一个硬件部件磨损时可以用一个新部件去替换他。硬件会因为主要部件的磨损而最终被淘汰。
对于软件而言,不存在折旧和磨损问题,如果需要的话可以永远使用下去。但是软件故障的排除要比硬件故障的排除复杂得多。软件故障主要是因为软件设计或编码的错误所致,必须重新设计和编码才能解决问题。
软件在其开发初始阶段在很高的失败率,这主要是由于需求分析不切合实际或设计错误等引起的。当开发过程中的错误被纠正后,其失败率便下降到一定水平并保持相对稳定,直到该软件被废弃不用。在软件进行大的改动时,也会导致失败率急剧上升。
五、大多数软件仍然是定制产生的
硬件产品一旦设计定型,其生产技术、加工工艺和流程管理也就确定下来,这样便于实现硬件产品的标准化、系列化成批生产。
由于硬件产品具有标准的框架和接口,不论哪个厂家的产品,用户买来都可以集成、组装和替换使用。
尽管软件产品复用是软件界孜孜不倦追求的目标,在某些局部范围内几家领军软件企业也建立了一些软件组件复用的技术标准。
例如,OMG的CORBA,mICROSOFT的COM,sun的J2EE等,但是目前还做不到大范围使用软件替代品。大多数软件任然是为特定任务或用户定制的。
(1)源码运动扩展阅读:
硬件:
计算机的硬件是计算机系统中各种设备的总称。计算机的硬件应包括5个基本部分,即运算器、控制器、存储器、输入设备、输出设备,上述各基本部件的功能各异。运算器应能进行加、减、乘、除等基本运算。存储器不仅能存放数据,而且也能存放指令,计算机应能区分是数据还是指令。
控制器应能自动执行指令。操作人员可以通过输人、输出设备与主机进行通信。计算机内部采用二进制来表示指令和数据。操作人员将编好的程序和原始数据送人主存储器中,然后启动计算机工作,计算机应在不需干预的情况下启动完成逐条取出指令和执行指令的任务。
软件:
电脑的外观、主机内的元件都是看得见的东西,一般称它们为电脑的“硬件”,那么电脑的“软件”是什么呢?即使打开主机,也看不到软件在哪里。既看不见也摸不到,听起来好像很抽象,但是,如果没有软件,就像植物人一样,空有躯体却无法行动。
当你启动电脑时,电脑会执行开机程序,并且启动系统”,然后你会启动“Word”程序,并且打开“文件”来编辑文件,或是使用“Excel”来制作报表,和使用“IE”来上网等等,以上所提到的操作系统、打开的程序和文件,都属于电脑的“软件”。
软件包括:
1、应用软件:应用程序包,面向问题的程序设计语言等
2、系统软件:操作系统,语言编译解释系统服务性程序
硬件与软件的关系:
硬件和软件是一个完整的计算机系统互相依存的两大部分,它们的关系主要体现在以下几个方面。
1、硬件和软件互相依存
硬件是软件赖以工作的物质基础,软件的正常工作是硬件发挥作用的唯一途径。计算机系统必须要配备完善的软件系统才能正常工作,且充分发挥其硬件的各种功能。
2、硬件和软件无严格界线
随着计算机技术的发展,在许多情况下,计算机的某些功能既可以由硬件实现,也可以由软件来实现。因此,硬件与软件在一定意义上说没有绝对严格的界面。
3、硬件和软件协同发展
计算机软件随硬件技术的迅速发展而发展,而软件的不断发展与完善又促进硬件的更新,两者密切地交织发展,缺一不可。
参考资料:
软件-网络
硬件-网络
㈡ 求用C语言模拟简单台球运动的源代码,不需要图形化界面
这源代码应该有个桌面类(Table),球类(Sphere),游戏类等等。我用C++
#pragma once (Table.h)
#endif // _MSC_VER > 1000
#include "Base.h"
#define MESH_D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
class CTable:public CBase
{
public:
DWORD Render();
CTable(LPDIRECT3DDEVICE8 pD3DDevice,LPSTR pFilename);
virtual ~CTable();
LPD3DXMESH GetMeshTablePointer();
private:
void TransformTable();
LPDIRECT3DDEVICE8 m_pD3DDevice;
DWORD m_dwNumMaterials;
LPD3DXMESH m_pMeshTable;
D3DMATERIAL8 *m_pMeshTableMaterials;
LPDIRECT3DTEXTURE8 *m_pMeshTableTextures;
};#endif
#include "Table.h" (Table.cpp)
CTable::CTable(LPDIRECT3DDEVICE8 pD3DDevice,LPSTR pFilename)
{
LPD3DXBUFFER pMaterialsBuffer=NULL;
LPD3DXMESH pMeshTable=NULL;
m_pD3DDevice=pD3DDevice;
if(FAILED(D3DXLoadMeshFromX(pFilename,D3DXMESH_MANAGED,m_pD3DDevice,NULL,
&pMaterialsBuffer,&m_dwNumMaterials,&pMeshTable)))
{
m_pMeshTable=NULL;
m_pMeshTableMaterials=NULL;
m_pMeshTableTextures=NULL;
LogError("<li>Table Mesh '%s' failed to load",pFilename);
return;
}
D3DXMATERIAL *matMaterials=(D3DXMATERIAL*)pMaterialsBuffer->GetBufferPointer();
//Create two arrays. One to hold the materials and one to hold the textures
m_pMeshTableMaterials=new D3DMATERIAL8[m_dwNumMaterials];
m_pMeshTableTextures=new LPDIRECT3DTEXTURE8[m_dwNumMaterials];
for(DWORD i=0;i<m_dwNumMaterials;i++)
{
//Copy the material
m_pMeshTableMaterials[i]=matMaterials[i].MatD3D;
//Set the ambient color for the material(D3DX does not do this)
m_pMeshTableMaterials[i].Ambient=m_pMeshTableMaterials[i].Diffuse;
D3DCOLORVALUE rgbaSpecular={0.0f,0.0f,0.0f,0.0f};
m_pMeshTableMaterials[i].Specular=rgbaSpecular;
m_pMeshTableMaterials[i].Power=50.0f;
//Create the texture
char buffer[255];
sprintf(buffer,"textures/%s",matMaterials[i].pTextureFilename);
if(FAILED(D3DXCreateTextureFromFile(m_pD3DDevice,
buffer, &m_pMeshTableTextures[i])))
{
m_pMeshTableTextures[i]=NULL;
}
}
//finished with the material buffer,so release it
SafeRelease(pMaterialsBuffer);
//Make sure that the normals are setup for mesh
pMeshTable->CloneMeshFVF(D3DXMESH_MANAGED,MESH_D3DFVF_CUSTOMVERTEX,m_pD3DDevice,&m_pMeshTable);
SafeRelease(pMeshTable);
// D3DXComputeNormals(m_pMesh);
LogInfo("<li>Mesh '%s' loaded OK",pFilename);
}
CTable::~CTable()
{
SafeDelete(m_pMeshTableMaterials);
if(m_pMeshTableTextures != NULL)
{
for(DWORD i=0;i<m_dwNumMaterials;i++)
{
if(m_pMeshTableTextures[i])
SafeRelease(m_pMeshTableTextures[i]);
}
}
SafeDelete(m_pMeshTableTextures);
SafeRelease(m_pMeshTable);
LogInfo("<li>Table Mesh destroyed OK");
}
DWORD CTable::Render()
{
TransformTable();
if(m_pMeshTable!=NULL)
{
for(DWORD i=0;i<m_dwNumMaterials;i++)
{
m_pD3DDevice->SetMaterial(&m_pMeshTableMaterials[i]);
m_pD3DDevice->SetTexture(0,m_pMeshTableTextures[i]);
m_pMeshTable->DrawSubset(i);
}
return m_pMeshTable->GetNumFaces();
}
else
return 0;
}
LPD3DXMESH CTable::GetMeshTablePointer()
{
return m_pMeshTable;
}
void CTable::TransformTable()
{
D3DXMATRIX matWorld;
D3DXMatrixTranslation(&matWorld,0,0,0);
m_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld);
}
(Sphere.h)
#if !defined (AFX_SPHERE_H__FC705F3B_568E_4973_B608_B8F7700D9ECE__INCLUDED_)
#define AFX_SPHERE_H__FC705F3B_568E_4973_B608_B8F7700D9ECE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Base.h"
#define SPHERE_D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
class CSphere:public CBase
{
private:
struct SPHERE_CUSTOMVERTEX
{
float x,y,z; //Position of vertex in 3D space
float nx,ny,nz; //Lighting Normal
float tu,tv; //Texture coordinates
};
struct SPHERE_STATE
{
D3DXVECTOR3 sVector; //Position of Centigram in 3D space
D3DXVECTOR3 vVector; //Direction of Velocity in 3D space
float v; //Speed of Sphere
};
SPHERE_STATE *m_pSphereState;
D3DXVECTOR3 m_vecSavePosition; //Save sphere position for collision bar
D3DXVECTOR3 m_vecSavePosition2; //Save sphere position for collision sphere
public:
BOOL SetMaterial(D3DCOLORVALUE rgbaDiffuse,D3DCOLORVALUE rgbaAmbient,
D3DCOLORVALUE rgbaSpecular,D3DCOLORVALUE rgbaEmissive,float rPower);
BOOL SetTexture(const char* szTextureFilePath);
DWORD Render();
CSphere(LPDIRECT3DDEVICE8 pD3DDevice,int iRings=20,int iSegments=20);
void MoveSphere();
void MoveSphereForUser(float x,float z);
virtual ~CSphere();
inline void SetSpherePosition(float x,float y,float z)
{
m_pSphereState->sVector.x=x;
m_pSphereState->sVector.y=y;
m_pSphereState->sVector.z=z;
};
inline void GetSpherePosition(D3DXVECTOR3 &vecSpherePos)
{
vecSpherePos=m_pSphereState->sVector;
};
inline void GetSavedSpherePosition(D3DXVECTOR3 &vecSavedSpherePos)
{
vecSavedSpherePos=m_vecSavePosition;
};
inline void GetSavedSpherePosition2(D3DXVECTOR3 &vecSavedSpherePos)
{
vecSavedSpherePos=m_vecSavePosition2;
};
inline void SaveSpherePosition()
{
m_vecSavePosition=m_pSphereState->sVector;
};
inline void SaveSpherePosition2()
{
m_vecSavePosition2=m_pSphereState->sVector;
};
inline void ContradictoryZv()
{
m_pSphereState->vVector.z=-m_pSphereState->vVector.z;
};
inline void ContradictoryXv()
{
m_pSphereState->vVector.x=-m_pSphereState->vVector.x;
};
void MirrorVAoubtAxis(D3DXVECTOR3 &n);
inline void ReceSphereVelocity(float percent)
{
m_pSphereState->v=m_pSphereState->v*percent;
};
inline float CheckSphereEnergy()
{
return m_pSphereState->v;
};
inline void SetSphereVelocityDir(const D3DXVECTOR3 &vDir)
{
m_pSphereState->vVector=vDir;
};
inline void SetSphereVelocity(const float &velocity)
{
m_pSphereState->v=velocity;
};
inline void GetSphereVelocityDir(D3DXVECTOR3 &vDir)
{
vDir=m_pSphereState->vVector;
};
inline float GetSphereVelocity()
{
return m_pSphereState->v;
};
inline void SetSphereStateToFalse()
{
m_bSphereInUse=FALSE;
};
inline void SetSphereStateToTrue()
{
m_bSphereInUse=TRUE;
};
inline BOOL GetSphereState()
{
return m_bSphereInUse;
};
void SetSphereVelocityAt_Y_NegativeAxis();
inline float GetSpherePosAt_Y_Axis()
{
return m_pSphereState->sVector.y;
};
private:
BOOL CreateIndexBuffer();
BOOL UpdateVertices();
BOOL CreateVertexBuffer();
void TransformSphere();
void TransformSphereForUser();
void UpdateSpherePosition();
void FrictionReseVelocity();
LPDIRECT3DDEVICE8 m_pD3DDevice;
LPDIRECT3DVERTEXBUFFER8 m_pVertexBuffer;
LPDIRECT3DTEXTURE8 m_pTexture;
D3DMATERIAL8 m_matMaterial;
LPDIRECT3DINDEXBUFFER8 m_pIndexBuffer;
int m_iRings;
int m_iSegments;
float m_fTotalDis;
D3DXVECTOR3 m_vecSphereRotationAxis;
BOOL m_bSphereInUse;
DWORD m_dwNumOfVertices;
DWORD m_dwNumOfIndices;
DWORD m_dwNumOfPolygons;
};#endif