源碼運動
㈠ 軟體和硬體的區別
硬體和軟體的區別:
一、軟體是一種邏輯的產品,與硬體產品有本質的區別
硬體是看得見、摸得著的物理部件或設備。在研製硬體產品時,人的創造性活動表現在把原材料轉變成有形的物理產品。
而軟體產品是以程序和文檔的形式存在,通過在計算機上運行來體現他的作用。
在研製軟體產品的過程中,人們的生產活動表現在要創造性地抽象出問題的求解模型,然後根據求解模型寫出程序,最後經過調試、運行程序得到求解問題的結果。整個生產、開發過程是在無形化方式下完成的,其能見度極差,這給軟體開發、生產過程的管理帶來了極大的困難。
二、軟體產品質量的體現方式與硬體產品不同
質量體現方式不同表現在兩個方面。硬體產品設計定型後可以批量生產,產品質量通過質量檢測體系可以得到保障。但是生產、加工過程一旦失誤。
硬體產品可能就會因為質量問題而報廢。而軟體產品不能用傳統意義上的製造進行生產,就目前軟體開發技術而言,軟體生產還是「定製」的,只能針對特定問題進行設計或實現。但是軟體愛你產品一旦實現後,其生產過程只是復制而已,而復制生產出來的軟體質量是相同的。
設計出來的軟體即使出現質量問題,產品也不會報廢,通過修改、測試,還可以將「報廢」的軟體「修復」,投入正常運行。可見軟體的質量保證機制比硬體具有更大的靈活性。
三、軟體產品的成本構成與硬體產品不同
硬體產品的成本構成中有形的物質佔了相當大的比重。就硬體產品生存周期而言,成本構成中設計、生產環節占絕大部分,而售後服務只佔少部分。
軟體生產主要靠腦力勞動。軟體產品的成本構成中人力資源佔了相當大的比重。軟體產品的生產成本主要在開發和研製。研製成功後,產品生產就簡單了,通過復制就能批量生產。
四、軟體產品的失敗曲線與硬體產品不同
硬體產品存在老化和折舊問題。當一個硬體部件磨損時可以用一個新部件去替換他。硬體會因為主要部件的磨損而最終被淘汰。
對於軟體而言,不存在折舊和磨損問題,如果需要的話可以永遠使用下去。但是軟體故障的排除要比硬體故障的排除復雜得多。軟體故障主要是因為軟體設計或編碼的錯誤所致,必須重新設計和編碼才能解決問題。
軟體在其開發初始階段在很高的失敗率,這主要是由於需求分析不切合實際或設計錯誤等引起的。當開發過程中的錯誤被糾正後,其失敗率便下降到一定水平並保持相對穩定,直到該軟體被廢棄不用。在軟體進行大的改動時,也會導致失敗率急劇上升。
五、大多數軟體仍然是定製產生的
硬體產品一旦設計定型,其生產技術、加工工藝和流程管理也就確定下來,這樣便於實現硬體產品的標准化、系列化成批生產。
由於硬體產品具有標準的框架和介面,不論哪個廠家的產品,用戶買來都可以集成、組裝和替換使用。
盡管軟體產品復用是軟體界孜孜不倦追求的目標,在某些局部范圍內幾家領軍軟體企業也建立了一些軟體組件復用的技術標准。
例如,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