2007年9月29日 星期六

[轉貼]VISUAL C++與C++ Builder差異


C++builder與visual c++、c#以及c語言有什麼區別
C++ Builder
C++ Builder是由Borland公司 繼Delphi之後又推出的一款高性能可視化集成開發工具。C++ Builder具有快速的可視化開發環境:只要簡單地把控件(Component)拖到窗體(Form)上,定義一下它的屬性,設置一下它的外觀,就可以快速地建立應用程序界面;C++ Builder內置了100多個完全封裝了Windows公用特性且具有完全可擴展性(包括全面支持ActiveX控件)的可重用控件;C++ Builder具有一個專業C++開發環境所能提供的全部功能:快速、高效、靈活的編譯器優化,逐步連接,CPU透視,命令行工具等。它實現了可視化的編程環境和功能強大的編程語言(C++)的完美結合。

C++ Builder優化的32位原碼(Native Code)編譯器建立在Borland公司久經考驗的編譯技術基礎之上,提供了高度安全性、可靠性、快速性的編譯優化方法,完全編譯出原始機器碼而非中間碼,軟件執行速度大大提高。在編譯和連接過程中,C++ Builder自動忽略未被修改的原代碼和沒有使用的函數,從而大大提高了編譯和連接速度。C++ Builder的CPU透視工具包括五個獨立的小面板,可以對正在運行程序從內部進行深層次的瞭解。另外C++ Builder還提供了一個專業開發環境所必需的命令行工具,以幫助建立C++程序或者準備編譯和連接的程序進行更精細的控制。

C++ Builder可以編譯所有符合ANSI/ISO標準的原代碼,支持最新ANSI C++/C語言特徵:模板(Templates)、例外(Exceptions)、運行類型信息(Runtime Type Information)、Namespaces等,另外它還可以使用標準C++庫且支持標準模板庫(STL),以前的所有C++/C原代碼可以不經過修改,直接移植到C++ Builder環境下來。C++ Builder完全支持32位長文件名、多線程程序設計,且允許程序員直接調用任何Win95和NT API函數。

C++ Builder的集成開發環境(IDE)提供了可視化窗體設計器、對像觀察器、控件板、工程管理器、集成編輯器和調試器等一系列可視化快速應用程序開發(RAD)工具,讓程序員可以很輕鬆地建立和管理自己的程序和資源。
____________________________________________________________________
Visual C++
Visual C++是一個功能強大的可視化軟件開發工具。自1993年Microsoft公司推出Visual C++1.0後,隨著其新版本的不斷問世,Visual C++已成為專業程序員進行軟件開發的首選工具。

雖然微軟公司推出了Visual C++.NET(Visual C++7.0),但它的應用的很大的局限性,只適用於Windows 2000,Windows XP和Windows NT4.0。所以實際中,更多的是以Visual C++6.0為平台。

Visual C++6.0不僅是一個C++編譯器,而且是一個基於Windows操作系統的可視化集成開發環境(integrated development environment,IDE)。Visual C++6.0由許多組件組成,包括編輯器、調試器以及程序嚮導AppWizard、類嚮導Class Wizard等開發工具。 這些組件通過一個名為Developer Studio的組件集成為和諧的開發環境。

Visual C++它大概可以分成三個主要的部分:

1. Developer Studio,這是一個集成開發環境,我們日常工作的99%都是在它上面完成的,再加上它的標題赫然寫著「Microsoft Visual C++」,所以很多人理所當然的認為,那就是Visual C++了。其實不然,雖然Developer Studio提供了一個很好的編輯器和很多Wizard,但實際上它沒有任何編譯和鏈接程序的功能,真正完成這些工作的幕後英雄後面會介紹。我們也知道,Developer Studio並不是專門用於VC的,它也同樣用於VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio當成Visual C++, 它充其量只是Visual C++的一個殼子而已。這一點請切記!

2. MFC。從理論上來講,MFC也不是專用於Visual C++,Borland C++,C++Builder和Symantec C++同樣可以處理MFC。同時,用Visual C++編寫代碼也並不意味著一定要用MFC,只要願意,用Visual C++來編寫SDK程序,或者使用STL,ATL,一樣沒有限制。不過,Visual C++本來就是為MFC打造的,Visual C++中的許多特徵和語言擴展也是為MFC而設計的,所以用Visual C++而不用MFC就等於拋棄了Visual C++中很大的一部分功能。但是,Visual C++也不等於MFC。

3. Platform SDK。這才是Visual C++和整個Visual Studio的精華和靈魂,雖然我們很少能直接接觸到它。大致說來,Platform SDK是以Microsoft C/C++編譯器為核心(不是Visual C++,看清楚了),配合MASM,輔以其他一些工具和文檔資料。上面說到Developer Studio沒有編譯程序的功能,那麼這項工作是由誰來完成的呢?是CL,是NMAKE,和其他許許多多命令行程序,這些我們看不到的程序才是構成Visual Studio的基石。

____________________________________________________________________
c#
C#(讀做 "C sharp",中文譯音「夏普」)是微軟公司在去年六月發佈的一種新的編程語言,並定於在微軟職業開發者論壇(PDC)上登台亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程.但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對像模型)是直接集成的,而且它是微軟公司.NET windows網絡框架的主角.

____________________________________________________________________
c語言
C語言是目前世界上流行、使用非常廣泛的高級程序設計語言。

C語言對操作系統和系統使用程序以及需要對硬件進行操作的場合,用C語言明顯優於其它高級語言,許多大型應用軟件都是用C語言編寫的。

C語言具有繪圖能力強,可移植性,並具備很強的數據處理能力,因此適於編寫系統軟件,三維,二維圖形和動畫它是數值計算的高級語言。

常用的編譯軟件有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,TurboC等等......


C語言的發展歷史

C語言的發展頗為有趣。它的原型ALGOL 60語言。(也成為A語言)

1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。

1967年,劍橋大學的Matin Richards 對CPL語言進行了簡化,於是產生了BCPL語言。

1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,並為它起了一個有趣的名字「B語言」。意思是將CPL語言煮干,提煉出它的精華。並且他用B語言寫了第一個UNIX操作系統。

而在1973年,B語言也給人「煮」了一下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎上最終設計出了一種新的語言,他取了BGPL的第二個字母作為這種語言的名字,這就是C語言。

為了使UNIX操作系統推廣,1977年Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。

1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,從而使C語言成為目前世界上流行最廣泛的高級程序設計語言。

1988年,隨著微型計算機的日益普及, 出現了許多C語言版本。由於沒有統一的標準,使得這些C語言之間出現了一些不一致的地方。為了改變這種情況,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準, 成為現行的C語言標準 3.C語言的主要特點 。C語言發展迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的功能。許多著名的系統軟件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。用C語言加上一些彙編語言子程序, 就更能顯示C語言的優勢了,象PC- DOS 、WORDSTAR等就是用這種方法編寫的。

C語言的特點

1. 簡潔緊湊、靈活方便

C語言一共只有32個關鍵字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以像彙編語言一樣對位、字節和地址進行操作, 而這三者是計算機最基本的工作單元。

2. 運算符豐富

C的運算符包含的範圍很廣泛,共有種34個運算符。C語言把括號、賦值、強制類型轉換等都作為運算符處理。從而使C的運算類型極其豐富表達式類型多樣化,靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。

3. 數據結構豐富

C的數據類型有:整型、實型、字符型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種複雜的數據類型的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能, 支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

4. C是結構式語言

結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控制程序流向,從而使程序完全結構化。

5. C語法限制不太嚴格、程序設計自由度大

一般的高級語言語法檢查比較嚴,能夠檢查出幾乎所有的語法錯誤。而C語言允許程序編寫者有較大的自由度。

6. C語言允許直接訪問物理地址,可以直接對硬件進行操作

因此既具有高級語言的功能,又具有低級語言的許多功能,能夠象彙編語言一樣對位、字節和地址進行操作,而這三者是計算機最基本的工作單元,可以用來寫系統軟件。

7. C語言程序生成代碼質量高,程序執行效率高

一般只比彙編程序生成的目標代碼效率低10へ20%。

8. C語言適用範圍大,可移植性好

C語言有一個突出的優點就是適合於多種操作系統, 如DOS、UNIX,也適用於多種機型。

當然,C語言也有自身的不足,比如:C語言的語法限制不太嚴格,對變量的類型約束不嚴格,影響程序的安全性,對數族下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。

總之,C語言既有高級語言的特點,又具有彙編語言的特點;既是一個成功的系統設計語言,有時一個使用的程序設計語言;既能用來編寫不依賴計算機硬件的應用程序,又能用來編寫各種系統程序;是一種受歡迎、應用廣泛的程序設計語言。
參考資料:http://baike.baidu.com/view/100377.html,http://baike.baidu.com/view/6590.html.http://baike.baidu.com/view/1219.htm
 

 
C++ Builder和Visual C++那個好學一點?
 
Turbo C++3.0,Visual C++6.0,Turbo C2.0分別是Borland,Microsoft,和***公司的產品
TC2.0基於DOS系統(界面),TC3.0和VC6.0是基於Windows系統(界面)
TC2.0不能是用鼠標(F10切換菜單欄與編輯區),TC3.0可以直接使用鼠標
就對C語言的編譯調試而言,什麼編譯器都是無所謂好與不好的,只用自己習慣的就對了
不同的編譯器在一些語法細節上會有些不同,也就是說,在一種編譯器上可以編譯運行的程序可能在另一種編譯器上就會報錯的哦
補充一下,還有C++ Builder和DEV C++編譯器
 
C++builder 6 比 vc++6 上手快,拖拖拉拉的就能作出一些窗體小程序
但畢竟都是表面的東西。
真正深入的話還是得學好c++這門語言,而不是哪個具體的IDE。

Visual C++, C++Builder, C++有什麼區別?
 
C++是一種語言
Visual C++是Ms的C++編譯器
C++ Builder是Borland出的C++編譯器
C++ Builder編寫界面比較容易 ,因為它有VCl
VC只能用SDK慢慢寫了
VC++穩定,實力強大(但不如C++BUILDER強)但開發軟件慢,效率差,而且超級難學,沒有很好的數學和英語你就別想了。C++ BUILDER實力強過VC++,容易學。
而且編程不用那麼麻煩,而且包括底層和桌面應用程序什麼都能開發,
但其實C++BUILDER和DELPHI更接近,而不是接近VC++因為VCL是用DELPHI的,
屬於控件C++開發平台。
缺點是查錯不好,幫助系統不好,向下不兼容(不知道新版更正沒有)
 
Visual C++是微軟的集成開發環境
C++ Builder是Borland公司的集成開發環境


Visual C++與c++ builder的差異?
 
●1.先說下兩者的背景和如何選擇:

C++,正宗的貝爾實驗室的C語言基礎上擴展了高級類而來,完全可以看做是C語言的升級版本,雖然由 Builder公司出品,但實際上 Builder公司只不過做了一個IDE而已,雖然和VC「那強大的功能」比起來有限簡陋,但實際上是把更大的空間留給了開發者,可以更自由的發揮,在物理層硬件開發領域,還是彙編和C的天下(注意這裡的C指的是C、C++,和VC沒什麼事,原因見下文),所以如果你是正規攻讀計算機技術,走正宗的C語言開發路線,那當然是選C++。

VC,VC全稱可視化C語言,是正宗C語言的另一個升級版本嗎?答案是否定的!VC只不過引用了傳統C語言的語法,而核心的構假和思想完全是MS的Windows,從所謂的控件、窗體、模塊、API、DLL、Active、IEO、WMPO等等,有哪一個是從C裡面擴展而來的?這些東西完全就是Windows系統的一部分!不妨再看MS的整個Visual系列產品,VB、VJ、VF,難道說真的都是Basic、Java、Foxpro的升級版嗎?當然不是!這些語言完全都是披了一個外皮,而裡面的核心和VC如出一轍!你見過開發Java的人用VJ的嗎?這也就是為什麼VB裡的API可以直接COPY在VC裡用;因為他們的核心構造本來就是同一個----windows!這也就是為什麼VC開發的東西只能在Windows裡運行,脫離了win,VC開發的東西就是一堆廢碼。而這一切說到最後,當然還是歸功於windows的壟斷了。。。當然這也正是MS的高明之處,開個玩笑MS也在貫徹「一次開發,處處可用」的政策^_^,對MS瞭解多了,你就會發現,MS的軟件就是在互相調用,Windows裡的DLL可以在VC\VB裡調用,Office也可以在VC\VB裡調用,IE可以,wmp也可以,只要是MS利用壟斷的產品,你都可以直接在VC裡調用,而不用你寫一行代碼。。。這也就是為什麼VC的功能那麼強大,直接調用系統組件,和系統共用一個API,,能不強大嗎,這也正是為什麼windows平台的殺毒軟件都是VC寫的。所以說,如果你想通過速成,短期內加入到windows平台軟件的開發大潮,那選VC絕對是個首選!

PS:微軟的這種做法,不知忽悠了多少入門者,直到現在都有很多人搞不清VC\VB到底是一個軟件還是一個語言,搞不清楚C++\VC\VC++倒底是什麼關係,這就是微軟玩的把戲。


●2.VC在遊戲設計上的優勢:

VC在遊戲開發上,除了上文提到的「天然」對系統的良好支持外,最大的優勢當然就是:

1、DirectX技術,目前兩大3D API之一,又加上windows系統的天然支持,想不用都不行。。。

2、海量的DLL庫支持,人家微軟把90%的代碼都幫你寫好了,你直接寫上10%的代碼來調用就行了,開發速度快,那個公司的老闆都願意。。
 
不是一個公司的產品,Visual Studio是微軟的C++ Builder是Borland的,兩者的區別主要在於微軟的Visual Studio越來越向網絡化和開發平台化發展,比如Visual Studio 2005就已經把VB,C#,J#,ASP之類的開發平台完全統一了,正在開發中的代號為Orcas的下一代Visual Studio的平台化更加明顯,而C++ Builder則是僅僅趨向於網絡化
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

[轉貼]CreateObject 函數或 ActiveXObject 函數可能會在 InfoPath 2003 中產生指令碼錯誤

 

[轉貼]CreateObject 函數或 ActiveXObject 函數可能會在 InfoPath 2003 中產生指令碼錯誤

文章編號 : 832512
上次校閱 : 2006年2月16日
版次 : 2.0

徵狀

您可以使用 Microsoft VBScript CreateObject 函數或 Microsoft JScript ActiveXObject 函數來建立 ActiveX 元件的執行個體。如果您在呼叫 Microsoft Office InfoPath 2003 表單的函數的指令碼模組中建立 ActiveX 元件的執行個體,可能會收到下列其中一個錯誤訊息:
自動化伺服程式無法產生物件
ActiveX 元件無法產生物件

回此頁最上方

發生的原因

InfoPath 2003 表單一定會在 Internet 安全性區域的內容中執行。Internet 安全性區域會定義表單中的指令碼可以執行的動作以及表單中的指令碼不能執行的動作。一般而言,發生這個錯誤是因為如果 ActiveX 元件未標示為安全的不受信任指令碼安全的不受信任初始化,表單執行的 Internet 安全性區域便不允許建立 ActiveX 元件。這表示控制項的作者沒有證明如果有惡意指令碼或惡意資料時,元件不會損壞您的系統。

如需有關安全性區域如何影響表單對您電腦上的資源所具有的存取層級的詳細資訊,請按一下 [說明] 功能表上的 [Microsoft Office InfoPath 2003 說明],在 [輔助中心] 窗格的 [搜尋] 方塊中輸入關於安全性區域,然後按一下 [開始搜尋] 以檢視主題。
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
216434 (http://support.microsoft.com/kb/216434/) INFO: How Internet Explorer Determines If ActiveX Controls Are Safe

回此頁最上方

解決方案

如果要解決您的 InfoPath 2003 表單中的這個問題,請使用下列其中一種方法:
讓表單成為完全信任的 URN 表單。
在 Microsoft Internet Explorer 的信任網站清單中加入主控 InfoPath 2003 表單的伺服器的 URL。
數位簽署表單範本。(適用於 InfoPath 2003 SP1)

讓表單成為完全信任的 URN 表單

完全信任的 URN 表單必須使用自訂安裝指令碼或 Microsoft System Installer 套件安裝在您的電腦上。這樣即使 ActiveX 元件未標示為安全的不受信任指令碼安全的不受信任初始化,亦允許建立 ActiveX 元件。

您可以將標準表單手動轉換成 URN 表單。然而,手動轉換的工作很冗長,而且容易出錯。您也可以使用 InfoPath 2003 Software Development Kit (SDK) 隨附的命令列表單登錄工具 - RegForm.exe 工具,將標準表單轉換成 URN 表單。RegForm.exe 工具會對表單定義檔案及 XML 範本檔案進行必要的變更。然後 Regform.exe 工具會將檔案重新封裝成 .xsn 檔案,再建立自訂安裝程式來安裝修改後的表單範本。

如需有關如何下載 InfoPath 2003 SDK 的詳細資訊,請造訪下列 Microsoft 網站:
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=351f0616-93aa-4fe8-9238-d702f1bfbab4 (http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=351f0616-93aa-4fe8-9238-d702f1bfbab4)
InfoPath 2003 SDK 的預設安裝位置為 C:\Program Files\Microsoft Office 2003 Developer Resources\Microsoft Office InfoPath 2003 SDK\Tools。

如果要查看命令列選項,請在 [命令] 視窗中輸入下面的命令列:
regform /?
請注意命令列中 /U 參數和 /T 參數的使用。/U 參數會指定用於表單範本的 URN。/T 參數會指定表單範本是完全信任的。如此會將表單定義 (.xsf) 檔案中的 requireFullTrust 屬性設定為「是」。

下面的命令列會在和您正在轉換的範本相同的資料夾中產生 .js 檔案和 .bak 檔案:
regform /U urn:MyForm:MyCompany /T Yes C:\MyForms\MyTrustedForm.xsn
.bak 檔案是進行 URN 變更之前的原始表單範本檔案的複本。.js 檔案是可以用於安裝 URN 表單的指令碼檔案。

如果要執行 .js 指令碼,請在命令列輸入下列程式碼,然後按 ENTER:
Cscript <full path of your .js file>
如需關於 URN 表單或 RegForm.exe 工具的詳細資訊,請參閱 InfoPath 2003 SDK 說明文件中的「使用表單登錄工具」主題。

在 Microsoft Internet Explorer 的信任網站清單中加入主控 InfoPath 2003 表單的伺服器的 URL

當您加入主控 InfoPath 2003 表單的伺服器的 URL 作為信任的網站時,會在執行程式碼時收到下面的訊息:
這個畫面上某個 ActiveX 控制項與其他部份相互作用時可能會不安全。要允許相互作用?
如果您按一下 [是],程式碼便會執行。如果您按一下 [否],可能會收到<徵狀>一節中所提及的錯誤訊息,而程式碼將不會執行。

如果要新增網站作為信任的網站,請執行下列步驟:
1. 啟動 Internet Explorer。
2. [工具] 功能表上,按一下 [網際網路選項]
3. [網際網路選項] 對話方塊中,按一下 [安全性] 索引標籤。
4. [安全性] 索引標籤上,按一下 [信任的網站]
5. 按一下 [網站]
6. [將此網站加到該區域] 文字方塊中,加入主控 InfoPath 2003 表單的伺服器的 URL。

例如,如果主控 InfoPath 2003 表單的伺服器的名稱為 MyServer,您必須加入文字方塊中的 URL 則為 http://MyServer
7. 按一下 [新增]

這會將新輸入的網站加入 [網站] 清單方塊中。
8. 按兩次 [確定]

如此便會確認變更,然後關閉對話方塊。

數位簽署表單範本

此適用於 InfoPath 2003 Service Pack 1。如果您使用信任的憑證簽署表單範本,可以將表單範本的安全性層級設定為「完全信任」。「完全信任」表示表單可以存取使用者電腦或不同網域中的檔案和設定。此外,您可以使用電子郵件程式將表單範本和更新後的表單範本傳送給他人,以部署及更新表單範本。

如果要使用信任的憑證數位簽署表單,請執行下列步驟:
1. 在「設計」模式中,按一下 [工具] 功能表中的 [表單選項]
2. [表單選項] 對話方塊中,按一下 [安全性] 索引標籤。
3. [表單簽署] 下,按一下以選取 [簽署此表單] 核取方塊。
4. 按一下 [選取憑證]
5. [選取憑證] 對話方塊中,按一下您要用於數位簽署表單的憑證。
注意 如果憑證在使用者的電腦上不受信任,Microsoft Office InfoPath 2003 會顯示安全性訊息,並要求使用者要先啟用對憑證發行者的信任,才能開啟表單。

回此頁最上方

参考

如需有關如何取得 Microsoft Office 最新版 Service Pack 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
870924 (http://support.microsoft.com/kb/870924/) 如何取得 Office 2003 的最新 Service Pack

回此頁最上方


這篇文章中的資訊適用於:
Microsoft Office InfoPath 2003
Microsoft Office InfoPath 2003, Service Pack 1 (SP1)

回此頁最上方

關鍵字: 
kbdownload kbprb kbautomation kbnofix KB832512

回此頁最上方

Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
 

2007年9月27日 星期四

[轉貼]Temporarily change the running object snap mode

[轉貼]Temporarily change the running object snap mode
 
Option Explicit
Public intSnapSetting As Integer
Public SettingChanged As Boolean

Sub Change_Snaps()
     'Sets running Object Snap modes to whatever you choose,
     'then back to the original setting.
     '-----------------From the HELP file--------------------------------------
     'Bitcodes for Object Snap Modes:
     '   0 NONe
     '   1 ENDpoint
     '   2 MIDpoint
     '   4 CENter
     '   8 NODe
     '   16 QUAdrant
     '   32 INTersection
     '   64 INSertion
     '   128 PERpendicular
     '   256 TANgent
     '   512 NEArest
     '   1024 QUIck
     '   2048 APParent Intersection
     '   4096 EXTension
     '   8192 PARallel
     '
     'To specify more than one object snap, enter the sum of their values.
     'To find out the current bitcode combination you have, simply enter OSMODE
     'and the number will be inside < >
     '-------------------------------------------------------------------------
    
    If SettingChanged = False Then
        intSnapSetting = ThisDrawing.GetVariable("OSMODE")
        SettingChanged = True
    End If
    
    If ThisDrawing.GetVariable("OSMODE") = 4 Then
         'Returns object snap mode to previous state and resets the boolean value
        ThisDrawing.SetVariable "OSMODE", intSnapSetting
        SettingChanged = False
        AutoCAD.Application.ActiveDocument.Utility.Prompt vbCrLf & "Snaps Restored"
    Else
        ThisDrawing.SetVariable "OSMODE", 4 'Sets the Object Snap mode to CENter
        AutoCAD.Application.ActiveDocument.Utility.Prompt vbCrLf & "Snap set to Center"
    End If
End Sub 

AutoCAD

Temporarily change the running object snap mode

Ease of Use

Intermediate

Version tested with

2004, 2005 

Submitted by:

malik641

Description:

Stores the Object Snaps you have running at Run-Time and resets the Object Snap mode to specific settings. Once the code is run again, the original settings are restored. 

Discussion:

At my job, I design pools. And when I dimension the pool I like to use the Center object snap and everything else off. I usually have a lot more snaps running than just Center, so it becomes tedious to keep checking on/off the same check boxes everytime I dimension a pool. So I made this code as sort of a "switch" for when I dimension pools, specifically. But you can set it to whatever you prefer, just follow the code. 

Code:

instructions for use

Visual LISP 與 ActiveX/VBA 的比較

 
Visual LISP 與 ActiveX/VBA 的比較   
Visual LISP 與 ActiveX/VBA 的比較
 

下表比較了 Visual LISP 函數與相似的 ActiveX®、VBA 及 Visual Basic 6 函數和運算子。 ActiveX Automation 對等值由「AutoCAD.Application」指示,並將 Visual Basic 6 對等值列示為函數或運算子。

Visual LISP 與 ActiveX/VBA 的比較

AutoLISP 函數

ActiveX、VBA 或 Visual Basic 6 對等值

+ (加)

+ (加運算子)

- (減)

- (減運算子)

* (乘)

* (乘運算子)

/ (除)

/ (除運算子)

= (等於)

= (等於比較運算子)

/= (不等於)

<> (不等於比較運算子)

< (小於)

< (小於比較運算子)

<= (小於或等於)

<= (小於或等於比較運算子)

/= (不等於)

<> (不等於比較運算子)

> (大於)

> (大於比較運算子)

>= (大於或

等於)

>= (大於或等於比較運算子)

~ (按位元否)

Not 運算子

1+ (增量)

使用 + (加運算子)

1- (減量)

使用 - (減運算子)

abs

Abs 函數

acad_colordlg

未提供

acad_helpdlg

搜尋線上說明索引中的 HELP

acad_strlsort

搜尋線上說明索引中的 SORT

action_tile

使用對話方塊編輯器

add_list

使用對話方塊編輯器

ads

AutoCAD.Application.ListADS 方法

alert

MsgBox 函數

and

And 運算子

angle

AutoCAD.Application.ActiveDocument.Utility.

AngleFromXAxis 方法

angtof

AutoCAD.Application.ActiveDocument.Utility.GetInteger 方法

angtos

AutoCAD.Application.ActiveDocument.Utility.

AngleToString 方法

append

使用陣列操控函數

apply

未提供

arx

AutoCAD.Application.ListARX 方法

arxload

AutoCAD.Application.LoadARX 方法

arxunload

AutoCAD.Application.UnloadARX 方法

ascii

Asc 函數

assoc

未提供

atan

Atn 函數

atof

CDbl 函數

atoi

CInt 函數

atom

搜尋線上說明索引中的 IS

atoms-family

未提供

autoarxload

未提供

autoload

未提供

Boole

使用邏輯運算子

boundp

搜尋線上說明索引中的 IS

car/cdr

使用陣列操控函數

chr

Chr 函數

client_data_tile

使用對話方塊編輯器

close

AutoCAD.Application.Documents.Close 方法

command

AutoCAD.ActiveDocument.SendCommand 方法

cond

Select Case 陳述式

cons

使用陣列操控函數或 AutoCAD.Application.collection.Add<entityname> 方法

cos

Cos 函數

cvunit

使用轉換函數

defun

關鍵字函數和 End 函數

dictadd

AutoCAD.Application.ActiveDocument.Dictionaries.Add 方法

dictnext

AutoCAD.Application.ActiveDocument.Dictionaries.Item 方法

dictremove

AutoCAD.Application.ActiveDocument.Dictionaries.

Dictionary.Delete 方法

dictrename

AutoCAD.Application.ActiveDocument.Dictionaries.

Dictionary.Rename 方法

dictsearch

AutoCAD.Application.ActiveDocument.Dictionaries.

Dictionary.GetName 和 GetObject 方法

dimx_tile 和 dimy_tile

使用對話方塊編輯器

距離

AutoCAD.Application.Utility.GetDistance 用於交談式方法。

distof

未提供

done_dialog

使用對話方塊編輯器

end_image

使用對話方塊編輯器

end_list

使用對話方塊編輯器

entdel

AutoCAD.Application.ActiveDocument.collection_object.

Delete 方法

entget

AutoCAD.Application.ActiveDocument.collection_object.

property 性質

entlast

AutoCAD.Application.ActiveDocument.Modelspace.

Item(count-1)

entmake

AutoCAD.Application.ActiveDocument.Modelspace.

Add<entityname> 方法

entmakex

AutoCAD.Application.ActiveDocument.Modelspace.

Add<entityname> 方法

entmod

使用物件的任何讀寫性質

entnext

AutoCAD.Application.ActiveDocument.collection.Item 方法

entsel

AutoCAD.Application.ActiveDocument.SelectionSets 物件/方法/性質

entupd

AutoCAD.Application.ActiveDocument.Modelspace.物件.

Update 方法

eq

未提供

equal

Eqv 運算子

*error*

Error 物件/方法/性質

eval

未提供

exit

AutoCAD.Application.Quit 方法

exp

Exp 函數

expand

未提供

expt

^ (指數運算子)

fill_image

使用對話方塊編輯器

findfile

Dir 函數

fix

Fix、Int、Cint 函數

float

CDbl 函數

foreach

For Each...Next 陳述式

gc

AutoCAD.Application.ActiveDocument.PurgeAll

gcd

未提供

get_attr

使用對話方塊編輯器

get_tile

使用對話方塊編輯器

getangle

AutoCAD.Application.ActiveDocument.Utility.GetAngle 方法

getcfg

AutoCAD.Application.Preferences.property 性質

getcname

未提供

getcorner

AutoCAD.Application.ActiveDocument.Utility.GetCorner 方法

getdist

AutoCAD.Application.ActiveDocument.Utility.GetDistance 方法

getenv

AutoCAD.Application.Preferences.property 性質

getfiled

使用檔案對話方塊

getint

AutoCAD.Application.ActiveDocument.Utility.GetInteger 方法

getkword

AutoCAD.Application.ActiveDocument.Utility.GetKeyword 方法

getorient

AutoCAD.Application.ActiveDocument.Utility.

GetOrientation 方法

getpoint

AutoCAD.Application.ActiveDocument.Utility.GetPoint 方法

getreal

AutoCAD.Application.ActiveDocument.Utility.GetReal 方法

getstring

AutoCAD.Application.ActiveDocument.Utility.GetString 方法

getvar

AutoCAD.Application.GetVariable 方法

graphscr

AppActivate AutoCAD.Application.Caption

grclear

Obsolete 函數

grdraw

未提供

grread

未提供

grtext

AutoCAD.Application.ActiveDocument.Utility.Prompt

grvecs

未提供

handent

AutoCAD.Application.ActiveDocument.ModelSpace.object.

Handle 性質

help

搜尋線上說明索引中的 HELP

if

If… Then… Else 陳述式

initget

AutoCAD.Application.ActiveDocument.Utility.

InitializeUserInput

inters

AutoCAD.Application.ActiveDocument.Modelspace.物件.

IntersectWith

itoa

Str 函數

lambda

未提供

last

arrayname(UBound(arrayname))

長度

UBound 函數

list

ReDim 陳述式

listp

IsArray 函數

load_dialog

使用對話方塊編輯器

load

AutoLISP 不會經由 Automation 受到支援

log

Log 函數

logand

And 函數

logior

Or 函數

lsh

Imp 函數

mapcar

未提供

max

Max 函數

mem

未提供

member

Use 集合

menucmd

AutoCAD.Application.MenuBar 物件

menugroup

AutoCAD.Application.MenuGroup 物件

min

Min 函數

minusp

使用 < 0 語法

mode_tile

使用對話方塊編輯器

namedobjdict

AutoCAD.Application.ActiveDocument.Dictionaries 集合

nentsel

AutoCAD.Application.ActiveDocument.SelectionSets.

SelectionSet.SelectAtPoint 方法

nentselp

AutoCAD.Application.ActiveDocument.SelectionSets.

SelectionSet.SelectAtPoint 方法

new_dialog

使用對話方塊編輯器

not

使用邏輯運算子

nth

使用 object(n) 語法

null

IsNull 函數

numberp

TypeName 函數

open

Open 函數

or

使用邏輯運算子

osnap

未提供 (您可以使用 SetVariable 方法來控制系統變數 OSMODE。)

環形

AutoCAD.Application.ActiveDocument.Utility.PolarPoint 方法

prin1

AutoCAD.Application.ActiveDocument.Utility.Prompt

princ

AutoCAD.Application.ActiveDocument.Utility.Prompt

print

AutoCAD.Application.ActiveDocument.Utility.Prompt

progn

未提供

prompt

AutoCAD.Application.ActiveDocument.Utility.Prompt

quit

AutoCAD.Application.Quit 方法

quote

未提供

read

未提供

read-char

Input 函數

read-line

Line Input 函數

redraw

AutoCAD.Application.ActiveDocument.Modelspace.物件.

Update 方法

regapp

AutoCAD.Application.ActiveDocument.

RegisteredApplications.Add 方法

rem

Mod 函數

repeat

For… Each, While,

reverse

未提供

rtos

AutoCAD.Application.ActiveDocument.Utility.RealToString 方法

set

Set 函數

set_tile

使用對話方塊編輯器

setcfg

AutoCAD.Application.Preferences.property 性質

setfunhelp

未提供

setq

Set 函數

setvar

AutoCAD.Application.SetVariable 方法

sin

Sin 函數

setview

AutoCAD.Application.ActiveDocument.Viewports.Viewport.

SetView 方法

slide_image

使用對話方塊編輯器

snvalid

未提供

sqrt

Sqr 函數

ssadd

AutoCAD.Application.ActiveDocument.SelectionSets.Add 方法

ssdel

AutoCAD.Application.ActiveDocument.SelectionSets.

SelectionSet.Delete 方法

ssget

AutoCAD.Application.ActiveDocument.SelectionSets.

SelectionSet.SelectOnScreen 方法

ssgetfirst

未提供

sslength

AutoCAD.Application.ActiveDocument.SelectionSets.

SelectionSet.Count 方法

ssmemb

比較物件的 ID 和 SelectionSet 成員

ssname

AutoCAD.Application.ActiveDocument.SelectionSets.

SelectionSet.Name 性質

ssnamex

未提供

sssetfirst

AutoCAD.Application.ActiveDocument.PickfirstSelectionSet

startapp

Shell 函數

start_dialog

使用對話方塊編輯器

start_image

使用對話方塊編輯器

start_list

使用對話方塊編輯器

strcase

StrConv 函數

strcat

& 運算子

strlen

Len 函數

subst

未提供

substr

Mid 函數

數位板

未提供

tblnext

AutoCAD.Application.ActiveDocument.collection_object.

Item 方法

tblobjname

AutoCAD.Application.ActiveDocument.collection_object.

Name 方法

tblsearch

AutoCAD.Application.ActiveDocument.collection_object.

Name 方法

term_dialog

使用對話方塊編輯器

terpri

未提供

textbox

AutoCAD.Application.ActiveDocument.space.object.

GetBoundingBox 方法

textpage

未提供

textscr

未提供

trace

未提供

trans

AutoCAD.Application.ActiveDocument.Utility.

TranslateCoordinates 方法

type

TypeName 函數

unload_dialog

使用對話方塊編輯器

untrace

未提供

vector_image

使用對話方塊編輯器

ver

AutoCAD.Application.Version 性質

vports

AutoCAD.Application.ActiveDocument.Viewports 集合

wcmatch

Like 運算子

while

While… Wend

write-char

Print 函數

write-line

Print 函數

xdroom

未提供

xdsize

未提供

zerop

使用 = 0 語法

    

2007年9月22日 星期六

[轉貼]C語言基礎入門

http://www.study-area.org/coobila/tutorial_409.html
[轉貼]C語言基礎入門
瘋鷲 發表
 
C語言基本架構介紹.以及基本觀念簡介.
 
/* My First C program */
#include
 
void main(void)
{
int i;
i = 1;
printf("Hi! C!\n");
printf("This is my %dst C program!",i);
}
 
上面是一個很基本的C語言範例..我們現在就以這個範例來說明C語言的架構..
 
/* ........ */
((C程式的註解))
凡是介於 /* 以及 */ 之間的文字..C語言的編譯器皆不會執行而略過..
這是讓程式的可閱讀性提高..不儘自己在看程式時不會忘記某些東西是做什麼的..
也讓其他人在閱讀你的程式時更容易閱讀(瞭解)..
 
#include
((C語言的包含檔))
一般的C語言程式中都會加上這一行..在部份的C語言編譯器如果你沒有加上這一行..
它並不會出任何錯誤..但較嚴謹的C語言編譯器則可能過不了關了..
事實上一個完整的C語言程式..應該要有這一行才對..
至於為什麼..就以後再替各為說明了....
 
void main(void)
{
........
}
((C語言的主體))
而main()是C語言程式的開頭..程式的內容是存於main()之後的{}中..
所有的C語言程式都是由main開始執行..是說即使將來C程式大到很複雜..
main()可能不是擺在程式的最開頭..但C語言編譯器仍會找到main()來開始執行..
由於C語言是自由格式..所以也可以寫成這樣 void main(void) { }
 
而void的意思本義是"無"或"沒有"的意思..所以在main之前..
是作為..沒有回傳值的意思..也就是當程式執行時..不會傳回訊息給DOS..
而main()之中的void則是表示不會由作業系統把命令參數傳入main()之中..
 
所以void main(void)是最簡單的C語言格式..表示main將不能由作業系統接收命令參數..
也不會將訊息傳回作業系統..如果將格式寫為 int main() ..則將會有回傳值給作業系統..
 
((敘述式))
我們在撰寫C語言程式就是要在此撰寫..我們稱這些為敘述..
比如 Printf("Hi! C!");
又比如 int i;
這些敘述是得寫在main()之後的{ }之內..
常見的敘述式有 : 宣告..算式..變數..設定..函式呼叫..迴圈..流程控制......
這些東西將會在後面一一介紹..而在寫完一行敘述式之後..
我們必需加上 ; 這個符號以作結尾..若不加上 ; 則編譯器則無法正確邊譯程式..
 
((變數))
在資料處理的過程中我們通常會需要一個空間來存放這個資料..
通常資料存放在記憶空間裡..為了方便存取資料..記憶空間每一個儲存單元都有編號碼..
我們稱這種號碼為記憶位址..不過記憶位址是一個一個單調的邊號..
並且數目往往非常龐大..不容易記憶..也不好稱呼..
所以我們使用了所謂的變數這種東西來代表記憶位址..變數是存放資料的地方..
也是電腦內部的一個記憶位址..只不過我們稱作變數..而非使用編號罷了..
 
((變數名))
C的變數名稱規定必需由英文字母..數字..或_購成..
第一個字元不可為數字..也不能與C語言内定的文字相同..比如 int..printf
而在使用變數前..需要先定義變數的型別(type)..否則將無法使用..
 
((定義))
又可稱宣告..宣告的基本類型有下列五種...
型別 記憶體 範圍
char (字元) 8 bit 0~255或-128~127
int (整數) 16 bit -32768~32767或0~65535
float (浮點數) 32 bit 3.4E-38~3.4E+38
double (倍精數) 64 bit 1.7E-308~1.7E+308
void (無回傳值) 0 bit 無
其他尚有許多種..將會在未來陸陸續續介紹..
最後更新日期: 4/24/2003 3:48:44 PM
 

[轉貼]c++語言程序設計超級簡單瞭解

[轉貼]c++語言程序設計超級簡單瞭解
Woody | 2005-12-24 | From
千里之行,始於足下。
 
這是非常非常非常表面的介紹,是為一點都不知道的朋友寫著玩的。也許你看過之後什麼都沒有
收穫到,一直罵作者是個sb.那麼我請您原諒耽誤了您的時間,先表示抱歉了。呵呵
 
一。結構程序設計方法,要點。.三種基本控制結構。順序,循環,選擇
選擇結構,兩種。if switch
if形式1.if� 2. if else 3. if else if else if
switch(多分支選擇,Woody註釋)
switch
{case 常量表達式1 :語句1
case 常量表達式n :語句n
default:語句n+1
}
循環,while(沒有什麼解釋的,先判斷,後執行,Woody註釋)
例子,求1到100整數和
#include� (套入函數,Woody註釋)
 void main()���� (下面主體,Woody註釋)
 {��������
  int i, sum = 0;�� (定義i,賦予數值1,總和開始為0,Woody註釋)
  i = 1;
  while(i <= 100) (循環下面部分,當i<100,判斷條件,Woody註釋)
  {
   sum += i;� (加,一直加,Woody註釋)
   i++;
  }���� (循環結束,Woody註釋)
  cout<<"sum = "< }
do-while 循環(先執行,後判斷)
例子,還舉上面那個,就是求1到100整數和
#include
 void main()
 {
  int i, sum=0;�� (定義賦值。Woody註釋)
  i = 1;
  do������ (下面是循環,Woody註釋)
  {
   sum += i;
   i++;
  }while(i<=100);� (條件,如果條件滿足就循環,Woody註釋)
  cout<<"sum = "< }
for循環,
例子,還是上面那個,求1到100整數和
#include
 void main()
 {
  for(sum = 0, i = 1; i <= 100; i++)sum += i;
  cout<<"sum = "< }
(就是1-2-3-2-3-2-3(1指的是表達式),如果2不滿足,結束。Woody註釋)
 
二,語言基礎:
看例子比較方便瞭解,
//simple.cpp是一個簡單的C++程序 (標準註釋方法,不執行,我沒有用這種註釋,Woody註釋)
#include (一個文件頭,Woody註釋)
void main(void)� (函數,Woody註釋)
{������ (main函數體開始標記,Woody註釋)
int i;���� (聲明一個變量,Woody註釋)
cout<<"jinzhou sb!";��� (輸出,後面的東西,Woody註釋)
cout<<"請輸入一個整數:\n"; (\n是換行的意思,<<輸出符號,Woody註釋)
cin>>i;������� (輸入,後面的東西。Woody註釋)
cout<<"輸入的整數是:";�
cout (Visual C++6編譯連接運行後,就是屏幕上出現「jinzhou sb!請輸入一個整數」
然後你隨便輸入一個,回車,得到「輸入的整數是:」,就是你輸入的那個,大
概明白是這麼個格式就行了。注意一點的就是,函數定義返回類型為void,不用返回
,如果定義為int,則不同。如下。Woody註釋。)
int main()
{
 …
 return 0;
}
(還有就是c++區分大小寫,一般命令小寫多,常量大寫多。變量混用多。Woody註釋)
數據類型略過。大多類似的。
變量使用舉一個簡單的例子。
#include
int main (void)�
{
int workDays = 5;�� (定義一個整型變量,初始化為5,Woody註釋)
float workHours, payRate, weeklyPay;� (實型變量三個,Woody註釋)
workHours = 7.5; payRate = 38.55;� (賦值,Woody註釋)
weeklyPay = workDays * workHours * payRate; (乘法運算,Woody註釋)
cout << "Weekly Pay = " << weeklyPay << '\n'; (輸出換行,Woody註釋)
}
 
就是計算工資呢。
例子,打印給定半徑的圓的面積和周長(有常量定義的實例程序)
void main()
{
 const double PI = 3.1415926535898;� (定義圓周率常量PI,Woody註釋)
 double radius;� (定義圓半徑變量,Woody註釋)
 double area;� (定義圓面積變量,Woody註釋)
 double circumference;� (定義圓周長變量,Woody註釋,)
 cout << "輸入半徑 : ";� (輸出,屏幕顯示,Woody註釋)
 cin >> radius;��� (輸入,Woody註釋)
 area = PI*radius*radius; (面積公式,Woody註釋)
 circumference = 2.0*PI*radius;� (周長共識,Woody註釋)
 cout << "面積 " << radius << " is "
 << area << " \n";
 cout << "周長是 " << circumference� (輸出到屏幕,Woody註釋)
<< ";
}
(注意定義常量的形式為 const 類型 名字 = 值。)
 

三,運算符和表達式
要注意的是:
+ + 自加(前綴) ++valuel + 10 // 得出16,valuel變為6
+ + 自加(後綴) valuel++ + 10 // 得出15,valuel變為6
- - 自減(前綴) --valuel + 10 // 得出14,valuel變為4
- - 自減(後綴) valuel-- + 10 // 得出15,valuel變為4
(其實質就是用'++'代替了"+1"(後綴)和"1+"(前綴)、'-'代替了"-1"。Woody註釋)
 
!� 邏輯非� !(5 = = 5) // 得出 0�� (0是假,1是真,Woody註釋)
&&� 邏輯與� 5 < 6 && 6 < 6 // 得出 0
||� 邏輯或� 5 < 6 || 6 < 5 // 得出 1
~� 取反 ~'\011' // 得出 '\366'
&� 逐位與 '\011' & '\027' // 得出'\001'
|� 逐位或 '\011' | '\027' // 得出'\037'
^� 逐位異或 '\011' ^ '\027' // 得出'\036'
<< 逐位左移 '\011' << 2 // 得出'\044'
>> 逐位右移 '\011' >> 2 // 得出'\002'
實例 10進制值 二進制值
x� 011�� 0 0 0 0 1 0 0 1
y� 027�� 0 0 0 1 0 1 1 1
~x� 366�� 1 1 1 1 0 1 1 0
x & y 001�� 0 0 0 0 0 0 0 1
x | y 037�� 0 0 0 1 1 1 1 1
x ^ y 036�� 0 0 0 1 1 1 1 0
x << 2 044� 0 0 1 0 0 1 0 0
x >> 2 002� 0 0 0 0 0 0 1 0
運算例子,
#include
void main( )
{
 int a,b, m=3,n=4;
 a=7*2+-3%5-4/3;//-3%5=-3,4/3=1
 b=m++ - --n;
 cout<}
結果10 0 4 3
例子
#include
void main( )
{
 char x='m',y='n';
 int n;
 n=x cout < n=x==y-1;
 cout< n=('y'!='Y')+(5<3)+(y-x==1);
 cout <}
結果 1 1 2
 
四,流程控制語句。
if語句;if-else語句;switch語句;while語句;do-while語句;for語句;break語句;continue語句
(都是簡單英語,沒有什麼解釋的,哈哈,Woody註釋)
五,函數。
這個解釋多多網上。
舉例子;求長方形面積。
#include� (C++庫函數說明,Woody註釋)
int area(int length, int width);� ( area函數說明,定義長寬,Woody註釋)
void main()�� (主函數,程序從該函數開始執行,Woody註釋)
{
 int this_length, this_width;� (定義長寬,Woody註釋)
 cout << "輸入長度: "; (cout和cin,就是函數,輸出後面字符串。Woody註釋)
 cin >> this_length;� (輸入,Woody註釋)
 cout << "輸入寬度: ";� (輸出那句話到屏幕,Woody註釋)
 cin >> this_width;
 cout << "\n";���� (回車,Woody註釋)
 cout << "面積 " << this_length << "x" << this_width;
 cout << " 長方形面積是 " << area(this_length, this_width); (調用area函數,Woody註釋)
}
int area(int length, int width) (area函數定義,Woody註釋)
{
 int number;
 number = length * width;
 return number;
}
例子,比較大小的。
#include
int max(int a,int b) (調用這個函數,Woody註釋)
{
 if(a>b)return a; (如果則怎麼怎麼的,Woody註釋)
 else return b;
}����� (以上是定義max函數的,Woody註釋)
void main()
{
 int max(int a,int b);
 int x,y,z;
 cout<<"輸入兩個數"< cin>>x>>y;
 z=max(x,y);������ (z為比較結果,Woody註釋)
 cout<<"最大的數="<}
例子
 
#include
void Foo (int num)
{
 num = 0;
 cout << "num = " << num << '\n';
}
int main (void)
{
 int x = 10;
 Foo(x);
 cout << "x = " << x << '\n';
 return 0;
}
(這個更簡單,不多說,主要是明白num是一個形參變量num,x是實參變量,實參調用時
送到形參,但是因為內存單元不同,即使num賦值0,並不影響x的值,道理大概理解了
就好,Woody註釋)
(不多解釋了,相關詳細內容,要找資料好好揣摩,這裡只是簡單說一下,Woody註釋)
 
六,數組與字符串。
#include
void main(void)
{
 int marks[4] = ; (這個就是數組,就是這個格式,Woody註釋)
 cout<<"第二個元素是:"<}
(這就是定義數組了,找第二個元素的。92。Woody註釋)
例子,求字符串的長度 (這個是字符串的,Woody註釋。)
#define MAXLEN 80
#include
void main(void)
{
 char str[MAXLEN + 1];� (最長加1,因為是從0計算的,Woody註釋)
 int l;����� (定義長度,這個符號可不是1啊,Woody註釋)
 printf("Input a string:"); (輸出,告訴你開始輸入,Woody註釋)
 scanf("%s",str);��� (檢查你輸入的,如果空,Woody註釋)
 l = 0;������ (長度0,Woody註釋)
 while(str[l] != '\0') (非空,Woody註釋)
 l ++;������ (加加,數出來,Woody註釋)
 printf("The length of this string is %d\n",l); (輸出結果回車,Woody註釋)
}
 
七,指針與引用
指針就是在內存中的地址,它可能是變量的地址,也可能是函數的入口地址。
引用為變量提供了一個別名,變量通過引用訪問與通過變量名訪問是完全等價的。
引用提供了與指針相同的能力,但比指針更為直觀,更易於理解。
int d =1;
int* const p =&d
(有const表示不可修改,p是一個常量指針,它指向一個整型變量。就是d,p本
身不能修改,但它所指向的內容卻可以修改:*p =2;這個不大好說,請查閱相
嚴謹詳細資料。關Woody註釋。)
例如:
#include
#define SIZE 10�
void main()
{
 int array[SIZE]; (聲明整數數組,Woody註釋)
 int *p=array;�� (定義一個整型指針p,給他數組首地址,Woody註釋)
 int i ;���� (定義變量i,Woody註釋)
 for(i=0;i  array=i;
 for(i=0;i  cout<<*p++< p=&array[8];�� (給他array[8]的地址,Woody註釋)
 cout<<"array[8]="<<*p< cout<<"array[8]="<}�
(兩個值是一樣的,因為從0開始,所以都是對數組第9個元素的訪問。Woody註釋)
例子:折半查找函數
int BinSearch (char *item, char *table[],�� (就是在table中查找是否含有item的元素)
int n, int (*Compare)(const char*, const char*))� Compare是一個比較函數指針,Woody註釋)
{
 int bot = 0;�� (底部0,Woody註釋)
 int top = n - 1;� (頂部n-1,Woody註釋)
 int mid, cmp;� (定義比較變量,比較,Woody註釋)
while (bot <= top) (比較當然需要循環,循環條件,意思就是不空,Woody註釋)
 {����� (以下循環內容)
mid = (bot + top) / 2;� (mid等於,全部除以2,就是一半,Woody註釋)
if ((cmp = Compare(item,table[mid])) == 0) (如果恰好相等,Woody註釋)
 return mid;� ( 就是它,Woody註釋)
 else if (cmp < 0) (不相等,Woody註釋)
    top = mid - 1; ( 查找數組的下半部,Woody註釋)
   else
    bot = mid + 1;� ( 查找數組的上半部,Woody註釋)
 }
return -1; (上面循環之後,返回-1,沒有找到,因為n就是0了。Woody註釋)
}
 
例如。
char *cities[] = {"Beijing", "Shanghai", "Tianjin", "Zhongqing"};
cout << BinSearch("Tianjin ", cities, 4, strcmp) << '\n'
輸出結果2
(就是,給出一個數組,找找「Tianjin」在四個中的位置,2就是在第三個位置。)
 
八。結構 鏈表
結構(struct)數據類型,它能夠識別一組相關的數據。
鏈表也是表示線性數據最有用的方法之一,用鏈表保存線性數據,可以克服數組的問題
舉例
#include
#include
struct Person_Info {� (個人信息表,下面是相關內容。Woody註釋)
 char name[10];
 int age;
 long ssn;
};
void main (void)
{
 Person_Info* p1;�� (給個指針,Woody註釋)
 p1 = new Person_Info;� (申請內存,Woody註釋)
 p1->age = 27; ( 給age成員賦值,Woody註釋)
 strcpy(p1->name,"jinzhou"); (給name成員賦值 ,Woody註釋)
 cout << "Name: " << p1->name << endl; ( 打印name成員,Woody註釋)
 cout << "Age: " << p1->age << endl; (打印age成員,Woody註釋)
 delete p1;�������� (釋放申請的內存,Woody註釋)
}
簡單例子學生結構的實例
struct stu
  {
   int num;
   int score;
   stu *next;
  }
(明白這個意思就行了,Woody註釋)
 
九,編譯預處理
C++提供的編譯預處理功能主要有以下三種:(一) 宏定義(二) 文件包含(三) 條件編譯
宏定義例子;
#include , (一定要有,或者出錯,Woody註釋)
#define CUBE_THREE 3*3* (用簡單宏定義定義了一個符號常量"CUBE_THREE")
void main()
{
 int a;����� (定義變量,Woody註釋)
 a=CUBE_THREE;�� (賦予值,就是a=3*3*3,Woody註釋)
 cout<<"a is"<}
(這個意思主要是說可以把常用的東西定義為宏。這個不帶參數,帶參數的略。Woody註釋)
文件包含類的略。
例子:條件編譯命令的一個例子
#include
#define TIME
void main()
{
 #ifdef TIME������ (如果TIME被定義過,輸出下面句話。Woody註釋)
  cout<<"Now begin to work"< #else������� (如果沒有定義,輸出下面的,Woody註釋)
  cout<<"You can have a rest"< 

2007年9月21日 星期五

轉貼:未來數學家的挑戰【二、計算量】 => 計算量 = O(n)

 
 

 

二、計算量

計算量,顧名思意,是指解決某問題所需要計算的時間,但因每個複雜問題的計算往往都要經過許多不同的運算,除加減乘除四則外,還要包含比較,取數據,存數 據等等,若仔細計算起來,十分困難,一般都只繪出一兩個主要的量,加以統計,以上節中售貨員旅行問題為例,其主要的工作是對每一個排法加起總路徑之長,因 對 n 城而言,有 (n-1)! 的排法,我們就定其計算量為 O(n!),即在 n! 之層次(order 即 O 縮寫之來源)之內。

舉二個例子,我們若要求 n 個數的和或平均值,則其計算量為 O(n)。 但若我們要把 n 個數字依次排列,則其計算量會因做法的不同而有相當的差別,一個直接了當的方法是,先求出最大的(比 (n-1) 次),再從不是最大的中間求次大的(比 (n-2) 次),再求第三大的(比 (n-3) 次),……如此一共比了

\begin{displaymath} (n-1)+(n-2)+\cdots+1\\ =\frac{n(n-1)}{2}\\ \end{displaymath}

次就可以完成此工作。因此我們以 O(n2),即在 n2 之層次來表此方法的計算量。 另外一種快排法,先把 n 個數分成若干小塊,每塊排好之後再合起來, 則可以證明此種方法之計算量為 $O(n{\log_2{n}})$ 1 ,因排數字與排名字,電話號碼相同,這種排法很有實用價值, 例如某大城有一百萬戶,則 n2=1012,而 $n{\log_2n}$ 只有 2 x 107,其差別三個月與一分鐘之比。

一般計算量的層次多以下表來區分,

\begin{eqnarray*} &&O(\log n)<o(n)<o(n\log_2n)<o(n^2)\\ &&<o(n^k)<o(2^n)<o(k^n)<o(n!) \end{eqnarray*}

在上表中,k 為某一大於 2 的正整數,它們中間都有一道鴻溝,有基本層之不同,在計算機理論上,若某人能發現一個新的方法,降低一個層次的計算量,那麼他的新方法有資格稱之為一個突破,可以不朽矣。表1 有一個對上項各量之比較,是以計算機每秒作一百萬次 (106) 計算為原則。

n $\log n$ n $n\log n$ n2 n3 2n 3n n!
10 10-6 10-5 10-5 10-4 10-3 10-3 0.059 0.45
20 10-6 10-5 10-5 10-4 10-2 1(秒) 58(分) 1年
50 10-5 10-4 10-4 0.0025 0.125 36年 2 x 1010 1057
1000 10-5 10-3 10-3 1 16小時 10333 極大 極大
106 10-5 1 6 1月 105 極大 極大 極大
109 10-5 16小時 6天 3年 3 x 109 極大 極大 極大

表一:以計算機每秒做一百萬次時完成各層次計算量所約需的時間(若無單位,均以秒為單位)

在這個表中,特別注意 n32n 中之差異,一般稱 2n 為計算量呈指數上升,而 n3nk 之計算量呈 n 的方次上升 2 , 對目前及未來的計算機而言,一個呈方次上升的計算量應可以應付,但對一個呈指數上升的計算量在 n 相當大時則毫無希望。 因此計算機學家所集中精力的方向在如何將一個呈指數上升的計算量問題,簡化成一個方次上升的計算量問題。 我們定義凡對一個問題中最重要的參數 n 而言,若能找到一個方法可以以方次上升的計算量完成, 我們稱此問題為一 P-問題(P 為英文多項式 Polynomial 之第一字母),包含所有此類問題之集合以 P 表示之。

 

2007年9月18日 星期二

[轉貼]Autodesk的C++筆試題,看你能答出多少

[轉貼]Autodesk的C++筆試題,看你能答出多少
 
太多了,詳細請參考www.findgs.com
一、技術題
 
1. 在類的普通成員函數中調用虛函數,情況是怎麼樣的?(對像、引用、指針)
 
2. 關於成員變量初始化順序,幾個有依賴關係的成員變量要初始化,讓寫出構造函數。
 
3. 寫一個雙鏈表。
 
4. 寫個is-a和has-a。
 
5. struct vs. class.
 
6. 稱8個小球的問題
 
7. stl 裡面vector的實現(內部空間的申請與分配)
 
8. struct /class的區別
 
9. 為什麼要用struct //成員的默認屬性不同,用struct的話,主要是作為數據的集合。
 
10. 怎樣使一個class不能被實例化 //1,構造函數私有化,2,抽像類
 
11. 私有繼承和public繼承的區別。 //is-a has-a
 
12. void *p的問題 //不能++
 
13. 引用和指針的區別與聯繫。引用是否可以更改
 
14. windows編程基礎,線程與進程的區別
 
15. com+是否熟悉
 
16. 簡述一下hash算法
 
17. 一個32位的數據,怎樣找到最左邊的一個1?// n位的2進制數據怎樣找罪左邊的1,如果是在最左位,這個數是負數,否則的話,左移一位,看是否變成負數,這是O(n)的算法,O(n/2)的算法:二分方式查找
 
18. 一個4*4的格子,填入1~15 然後給個目標狀態,怎樣去搜索。
 
19. 給你100萬個數據,數據的值在0~65535之間 用最快的速度排序
 
20. 如果我們的一個軟件產品,用戶回復說:運行速度很慢,你怎麼處理?
 
21. 八皇后問題,詳述解法
 
22. kmp快速匹配算法 ---不算輕鬆的搞定
 
23. 無向圖中兩點間最短路問題 ---偉大的迪傑克斯拉算法
 
24. 空間中任意給兩個向量,求角平分線
 
25. 什麼是平衡樹
26. 哈夫曼編碼問題
 
27. 有向圖求環
 
28. .給n個點,求凸包問題
 
29. 四則運算(給一個前綴表達式,然後求解;給一個中綴表達式)
 
30. STL中container有哪些?
 
31. map中的數據存儲方式是什麼?
 
32. map和hashmap有什麼區別?
 
33. hashmap是標準庫中的嗎?
 
34. vector中的erase方法跟algorithm的remove有什麼區別?
 
35. object是什麼?
 
36. C++中如何阻止一個類被實例化?
 
37. 一般在什麼時候構造函數被聲明成private呢?//比如要阻止編譯器生成默認的copy constructor
 
38. 什麼時候編譯器會生成默認的copy constructor呢?
 
39. 如果你已經寫了一個構造函數,編譯器還會生成copy constructor嗎?
 
40. 為什麼說如果一個類作為基類,則它的析構函數要聲明成virtual的?
 
41. inline的函數和#define有什麼區別?什麼時候會真的被inline,什麼時候不會呢?
 
42. 如果把一個類的成員函數寫在類的聲明中是什麼意思?
 
43. public繼承和private繼承有什麼架構上的區別?//public是is-a的關係,private是has-a的關係
 
44. 在多繼承的時候,如果一個類繼承同時繼承自class A和class B,而class A和B中都有一個函數叫foo(),如何明確的在子類中指出override哪個父類的foo()?
 
45. 虛擬繼承的語法是什麼?
 
46. 部分模版特例化和全部模版特例化有什麼區別?
 
47. 編一個函數,使一個單項鏈表轉置。
 
48. 拆解一個整數,比如4,可以拆解成4=3+1;4=2+2;4=2+1+1;4=1+1+1+1
 
49. 不用庫函數,實現strcpy或者memcpy等函數
 
50. 內聯函數的作用和缺點
 
51. 指針和引用的區別
 
52. 友元的意義
 
53. 虛函數的意義
 
54. Overload, Overwrite, Override 各自的特點和意義
 
55. 頭文件中的ifndef/define/endif 幹什麼用?//防止該頭文件被重複引用。
 
56. 2#i nclude <filename.h> 和#i nclude 「filename.h」 有什麼區別?
 
57. 在C++ 程序中調用被C 編譯器編譯後的函數,為什麼要加extern 「C」?//C++語言支持函數重載,C 語言不支持函數重載。函數被C++編譯後在庫中的名字與C 語言的不同。C++提供了C 連接交換指定符號extern「C」來解決名字匹配問題
58. 一個類有基類、內部有一個其他類的成員對象,構造函數的執行順序是怎樣的?//先執行基類的(如果基類當中有虛基類,要先執行虛基類的,其他基類則按照聲明派生類時的順序依次執行),再執行成員對象的,最後執行自己的。
 
59. 請描述一個你熟悉的設計模式
 
60. 在UML 中,聚合(aggregation)和組合(composition)有什麼區別?
 
61. C#和C++除了語法上的差別以外,有什麼不同的地方?
 
(1) c#有垃圾自動回收機制,程序員不用擔心對象的回收。(2)c#嚴禁使用指針,只能處理對象。如果希望使用指針,則僅可在unsafe 程序塊中能使用指針。(3)c#只能單繼承。(4)必須通過類名訪問靜態成員。不能像C++中那樣,通過對像訪問靜態成員。(5)在子類中覆蓋父類的虛函數時必須用關鍵字override,覆蓋父類的方法要用關鍵字new
 
62. New delete與malloc free 的區別
 
63. #define DOUBLE(x) x+x,i = 5*DOUBLE(10);i是多少?正確的聲明是什麼?
 
64. 有哪幾種情況只能用intialization list 而不能用assignment?
 
當類中含有const、reference 成員變量;基類的構造函數都需要參數;類中含有其他類的成員對象,而該類的構造函數都需要參數。
 
65. C++是不是類型安全的?//不是。兩個不同類型的指針之間可以強制轉換。C#是類型安全的。
 
66. main 函數執行以前,還會執行什麼代碼?//全局對象的構造函數會在main 函數之前執行。
 
67. 描述內存分配方式以及它們的區別。//(1)從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static 變量。(2) 在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集。(3) 從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc 或new 申請任意多少的內存,程序員自己負責在何時用free 或delete 釋放內存。動態內存的生存期由我們決定,使用非常靈活,但問題也最多。
 
68. 比較一下C++中static_cast 和 dynamic_cast 的區別。
 
69. 當一個類A 中沒有生命任何成員變量與成員函數,這時sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什麼沒有讓它為零。
 
70. 已知兩個鏈表head1 和head2各自有序,請把它們合併成一個鏈表依然有序,要求用遞歸方法進行。
 
太多了,詳細請參考www.findgs.com