目前分類:電腦玩咖 (95)

瀏覽方式: 標題列表 簡短摘要
何謂 Functional programming language?請舉一個例子說明其語言的特性。

【解】 函數式語言藉著函數來表達。因此輸入將作為函數的參數而輸出則為函數的值,主要的程式語言有 Lisp。LISP 語言是以解譯器(Interpreter)來處理其程式。基本的資料結構是S-運算式(S-expression)。其中 S-expression 又可區分為串列(list)與原子(atom)。LISP 採垃圾收集法(Garbage collection)管理記憶體。運算式(expression)的表示法採劍橋波蘭式(Cambridge-polish form),即前置式加上括號。

伊 發表在 痞客邦 留言(0) 人氣()

維基百科也有資訊

完整的敘述
 

  • 括號()特別多。

  • 每一個完整的敘述(statement),都要用括號()括起來。

  • 括號()內的第一項,一定是函數名稱或運算子。

  • (let* ((x 3) (y 5))(* x y)),這是一句完整的敘述。

  • 前一條式子可看成:


(let* (
(x 3)
(y 5)
)
(* x y)
)

註解
 

  • 分號;為註解符號。



運算式
 

  • 運算式為前序(prefix)運算式。

  • 運算式(* 3 5)相當於3*5。

  • 3*5是中序(infix)運算式。

  • 若你不習慣前序表示式,你可以將運算子視為函數。

  • * 視為函數,3、5視為參數。

  • 在中序運算式3*5, 運算子*與運算元3、5中間不會有空白(space);但前序運算式(* 3 5),*與3中間一定有空白。



前序運算式
 

  • (* 3 5)相當於3*5;(* 6 7) 相當於6*7。

  • ((- (* 3 5) (+ 6 7)) ((- (* 3 5) (+ 6 7)) 相當於3*5-6*7。



區域變數
 

  • 使用 let* ()來宣告與使用區域變數。

  • 語法:(let* (variables) expressions)

  • 以(let* ((x 3) (y 5))(* x y))為例子,左式設定 x=3、y=5,而後執行x*y的運算。

  • 離開let* ()的括號外,原設定的區域變數就變成沒有宣告。



函數定義、宣告與使用
 

  • 語法:(define (name param-list) expressions)




  • 使用define來定義函數。

  • name表示函數名稱。

  • param-list表示輸入函數的參數列。




  • 參數型態:參數不用設定參數型態,幾乎所有script語言都是如此。

  • 回傳值:函數內的最後一個敘述為回傳值。

  • (define (Multiply X Y) (* X Y) ),左式設定一個乘法函數

  • (Multiply 3 5) 得到15。

  • 猜猜看 (Multiply (Multiply 3 5) 2) 會得到多少?



串列
 

  • 語法:‘(a b c)

  • 使用撇號 ‘ 來定義串列,撇號是指apostrophe。

  • 例如:‘(1 6 8) ,撇號指示在括號內的是串列,不是單值。

  • 串列(list)相當於陣列,儲存多個單值。

  • (let* (x 5) x),在Script-Fu訊息視窗,鍵入左式得到5。

  • (let* (x ‘(1 6 8)) x) ,在Script-Fu 訊息視窗,鍵入左式得到(1 6 8)。

  • (let* (x ‘(“Gimp” 1.2 “v”)) ,串列的原素可以混合各種資料型態。



串接
 

  • 使用cons來連結串列產生新的串列

  • (cons “Gimp” (1 6 8) )

  • 上式的輸出結果:(“Gimp” 1 6 8)



抓取串列內元素
 

  • (car ‘(“Gimp” 2 3 4))

  • car抓取串列內第一個元素

  • 上式的輸出結果:”Gimp”



  • (cdr ‘(“Gimp” 2 3 4))

  • cdr抓取串列內除第一個元素外的其餘元素。

  • 上式的輸出結果:(2 3 4)



  • (car (cdr ‘(“Gimp” 2 3 4)))

  • car(cdr())抓取第二個元素

  • 上式的輸出結果:2





完整的敘述
每一個完整的敘述(statement),都要用括號()括起來。
括號()內的第一項,一定是函數名稱或運算子。
(類似C語言行末要用分號;結尾的意思)



註解 ;(分號)
分號後接的文字都視為註解。



變數宣告

1.使用define宣告的話會變成全域變數
(define variable value)

2.使用let宣告
(let ((var1 val1) (var2 val2) ...))



函數
1. (define (func arg1 arg2 ...) ...)
2. (define func (lambda (arg1 arg2 ...) ...))



條件判斷

1.(if test then-expr else-expr)
如果test為真,則執行then-expr這個表達式,要不然就執行else-expr這個表達式。

2.(cond (test1 expr1...)
(test2 expr2...)
...
(else expr))
如果test1為真,則執行expr1。test2為真,執行expr2。要是都不符合的話,就執行expr。



Scheme 的 hello, world 程式
(write "hello, world")



null? test
test為list型態
如果test是null,則傳回true,否則傳回false。
http://www.math.grinnell.edu/~stone/scheme-web/null-ques.html

EX:
> (null? '())
#t
> (null? '(3))
#f
> (null? (cons 1 2))
#f
> (null? (cdr '(3)))
#t
> (null? (cdr (cons 3 '())))
#t



eqv? obj1 obj2
判斷兩object是否相同。
http://people.csail.mit.edu/jaffer/r5rs_8.html

伊 發表在 痞客邦 留言(0) 人氣()

Scheme 是什麼?

Scheme 是一種小巧、強大、優雅的程式設計語言。

Scheme 是 LISP 的一種方言,它繼承了 LISP 的優點。這裏對 Scheme 的描述大部分也適合其他 LISP 方言。

Scheme 不但設計非常簡潔乾淨,而且非常強大。
說它小巧是因為它只有7種最基本的語法結構,甚至連迴圈語句都沒有。
它的核心語法用幾頁紙就可以全部敍述完畢。 Scheme 的 report 只有 50 多頁,還沒有某些語言手冊的索引長。

Scheme 可以實現幾乎所有我們所知道的程式設計方法:函數式,強制式,消息傳遞式,邏輯式,...
在 Scheme 裏,所有的過程都可以被當作資料操作,而且它可以把通常隱藏在幕後工作的 continuation 作為物件來操作。

Scheme 可以實現優秀的軟體工程。
用 Scheme 編程可以擺脫普通語言的“計畫—實現”的設計流程,而使用自底向上的設計方法。也就是說,你不需要在設計程式之前做好所有的計畫。Scheme 語言隨著問題改變,語言和問題都向著對方生長,最後達到一個完美的結合點。

Scheme 是非常優雅的,它具有數學的美感。
Scheme 從一開始就被設計為一種通用的程式語言。它不是為了解決某個特殊的小問題的設計,不是功能堆砌在功能之上,最後搞的不可理解的語言。

Scheme 是穩定的。
Scheme 注重的是“品質”,而不是工業上的利用價值,所以 20 年來 Scheme 基本上沒有變化。你不用擔心有一天收到這樣煩人的消息:“我們鼓勵大家使用 'Scheme2004' 的語法。” Scheme 的語法就像象棋的規則,一旦知道這個規則,剩下需要做的就是考慮怎樣取得勝利。

Scheme 特別適合描述演算法。
用 Scheme 編程式,你可以專注於設計演算法本身,而不是為語言本身的事情而煩惱,比如語法,記憶體洩漏之類。所以用這種語言教學,學生可以學會“解決現實世界的問題” 而不是困惑於 “電腦自己的問題”。學生會很快的理解到“計算” 的實質內涵,深刻體會到計算科學是什麼。

Scheme 被很多大學用於各個領域的電腦教學,甚至一些中學和小學也開始利用 Scheme 來講授計算科學。

使用 Scheme 作為教學工具的一個明顯的特徵就是,Scheme 語言本身從來不會成為學習的重點。使用 Scheme 作為工具的課程從來不會專門講授 Scheme,因為沒有這個必要。學生在初次接觸電腦的幾天裏就能熟悉 Scheme,學習怎樣用它來計算。之後,大家就開始到處找問題來計算,不再考慮語言的問題了。Scheme 的理念是程式語言不是拿來“學”的,而是拿來“用”的。

Scheme 在教育界被如此廣泛的使用的結果就是,新一代的優秀的計算學家,很多人的“母語”是 Scheme。

Scheme 的社會是非常開放和自由的。所以你不用奇怪,最好的書都有免費的版本 :)

Structure and Interpretation of Computer Programs
昵稱 "The Wizard Book" 或者 "The Purple Book"。
Scheme 的鼻祖 Gerald Jay Sussman 和電腦教育專家 Hal Abelson 合寫的,20 年來影響整個電腦科學教育的著作,著名的 MIT 課程 6.001 的課本。這是 MIT 的電子工程和電腦科學專業本科生的必修課,其他與計算相關專業也鼓勵參加。每年上這門課的 MIT 學生超過 500 名。全世界有超過 100 所大學採用這個教材。這裏有一個不完全列表。
它著重講述的不是 Scheme 語言本身,也不是資料結構和演算法。在簡短的介紹 Scheme 的簡單語法之後,課本馬上開始講述深入的計算概念:函數式程式設計,高階函數,資料抽象,流,資料制導,消息傳遞,邏輯程式設計,解釋器設計,編譯器設計,寄存器機器模擬 ...
這本書讓學生從一個語言設計者和實現者的高度來看待問題,而不只是作為一個普通語言的用戶。讀了這些內容,學生可以真正體會到“計算科學”的實質內涵,而不是被一些細節束縛,只見樹木不見森林。



Scheme 解釋器和編譯器

Scheme 的實現很多,幾乎所有解釋器和編譯器都是自由軟體,除了 Chez。

你可以隨便選擇 MzScheme, guile, bigloo, chez, chicken, gambit, kawa, SISC, GNU/MIT scheme, petite, plt, pscheme, scheme48, SCM, scsh, stk, STklos, ELK, Gauche, sxm, umbscheme, ...

每一種解釋器都有強項,可以根據自己的需要選擇。其中,Guile 和ELK 適合做嵌入式解釋器;bigloo, GambitC 和 Chicken 可以把 Scheme 編譯成機器代碼,速度快;DrScheme/MzScheme 介面最友好, Kawa 和 SISC 支持 Scheme 到 Java 的轉換,位元組碼編譯;Scheme 48 非常簡潔可靠;Scsh 在 Scheme 48 基礎上做了很多跟作業系統接合的介面,可以作為通用的的腳本語言;Stk 和 STklos 自帶面向物件系統和 gtk 圖形介面;Gauche 具有方便的 regexp, 網路,圖形介面,UTF-8 支援,可以作為很方便的腳本語言,進行系統管理等操作;Chez 是Cadance Research systems 出品的商業 Scheme 解釋器;Petite 是Chez 的免費版本,比 Chez 少了一個編譯器。

伊 發表在 痞客邦 留言(0) 人氣()

以前在寫C語言的時候,常常使用到傳值呼叫/傳址呼叫,用的很理所當然~
但是當我看了JAVA的教學文章後,突然發現,怎麼沒有傳值呼叫/傳址呼叫呢?
雖然不常用,但是,想用卻沒得用~可是會很困擾呢!

JAVA已經預設了參數的傳遞方式:
1. int , char , double ..等基本資料型態:都是傳值方式。
2. String:傳值,不論是否使用 new 關鍵字建立物件,都是使用傳值方式,因為字串物件並不能更改字串內容。
3. Array:傳址,物件是用傳址方式。


那VB.NET跟C#.NET的傳值/傳址呢?

VB.NET有 ByVal(傳值) 跟 ByRef(傳址),可以讓使用者自定參數是傳值、還是傳址,也算是蠻方便的。

C#中如果沒有指定 ref(傳址) 的話,預設為傳值。C# ref(傳址) 寫法如下:
public void CallRef(ref int a, ref int b) {
...
}
CallRef(ref a, ref b);


但遇到傳遞物件呢?(尚未找到相關資料。)
我自己的習慣寫法如下,可以正常傳遞物件,但不知道是否為正規寫法(畢竟寫C#時我都是亂掰亂寫的):
public void CallObject(object obj) {
...
}
CallObject(obj);

伊 發表在 痞客邦 留言(1) 人氣()

還記得第一次使用VB.NET寫陣列時,發生了一件令我百思不解的問題,就是當我將某一變數指定某一物件後,使用該變數更改內容,原本物件的內容也會被一併更改...

【使用陣列來舉例】

提一下陣列的宣告:
1. int[] arr; 沒指定大小,沒指定初值。
2. int[] arr = new int[10]; 指定大小,沒指定初值。
3. int[] arr = {1,2,3,4,5}; 指定大小,指定初值。

int[] arr;
在這個宣告中,arr表示一個可以參考至一維陣列物件的名稱,但是目前還沒有指定它參考至任何的物件,在Java中,=運算子用於基本資料型態時,是將值複製給變數,但當它用於物件時,則是將物件指定給參考名稱來參考,您也可以將同一個物件指定給兩個參考名稱,當物件的值藉由其中一個參考名稱變更時,另一個參考名稱所參考到的值也會更動,使用下面的程式來作示範:

public class AdvancedArray { 
    public static void main(String[] args) { 
        int[] arr1 = {1, 2, 3, 4, 5}; 
        int[] tmp1; 
        int[] tmp2; 
 
        tmp1 = arr1; 
        tmp2 = arr1; 
 
        tmp1[2] = 9; //只修改tmp1[2]的值
 
        for(int i = 0; i < tmp1.length; i++) 
            System.out.print("tmp1=" + tmp1[i] + " "); 
        System.out.println(); 
 
        for(int i = 0; i < tmp2.length; i++) 
            System.out.print("tmp2=" + tmp2[i] + " "); 
        System.out.println();
    } 
 }

執行結果:
tmp1=1 2 9 4 5
tmp2=1 2 9 4 5

在這個範例中,藉由tmp1名稱改變了索引2的元素值,所以tmp2所參考到的索引2的元素值也會改變,事實上在這個程式中,有三個參考名稱參考至同一個陣列物件,也就是arr1、tmp1與tmp2,所以arr1索引2的值在程式執行後所參考到的值也改變了。

Q: 那當我們要複製陣列怎麼辦呢??
A: 可以使用for迴圈巡覽複製。
for(int i = 0; i < arr1.length; i++) 
    arr2[i] = arr1[i];

在Java可使用 System類別 所提供的 靜態方法arraycopy()
語法如下:
System.arraycopy(來源, 起始索引, 目的, 起始索引, 複製長度);
System.arraycopy(arr1, 0, arr2, 0, arr1.length);

在JDK 6中,Arrays類別 新增了copyOf()方法:
int[] arr1 = {1, 2, 3, 4, 5}; 
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
Arrays的copyOf()方法傳回的陣列是新的陣列物件,所以您改變傳回陣列中的元素值,也不會影響原來的陣列。
copyOf()的第二個引數指定要建立的新陣列長度,如果新陣列的長度超過原陣列的長度,則保留陣列預設值,例如:
int[] arr1 = {1, 2, 3, 4, 5}; 
int[] arr2 = Arrays.copyOf(arr1, 10);
則arr2的內容會是{1, 2, 3, 4, 5, 0, 0, 0, 0, 0}

伊 發表在 痞客邦 留言(0) 人氣()

IE有效,其他瀏覽器未知。

IE 8.0.76 上執行的結果
教學-divcss.gif

文字與圖片對齊方式

文字與圖片對齊方式

文字與圖片對齊方式

文字與圖片對齊方式

文字與圖片對齊方式

文字與圖片對齊方式

文字與圖片對齊方式

文字與圖片對齊方式

文字與圖片對齊方式



<div>文字與圖片對齊方式<span style="vertical-align:middle;"><img src="#"></span></div>
<div>文字與圖片對齊方式<span style="vertical-align:baseline"><img src="#"></span></div>
<div>文字與圖片對齊方式<img src="#"></div>
<div>文字與圖片對齊方式<span style="vertical-align:bottom"><img src="#"></span></div>
<div>文字與圖片對齊方式<span style="vertical-align:sub"><img src="#"></span></div>
<div>文字與圖片對齊方式<span style="vertical-align:super"><img src="#"></span></div>
<div>文字與圖片對齊方式<span style="vertical-align:text-bottom"><img src="#"></span></div>
<div>文字與圖片對齊方式<span style="vertical-align:text-top"><img src="#"></span></div>
<div>文字與圖片對齊方式<span style="vertical-align:top"><img src="#"></span></div>

伊 發表在 痞客邦 留言(0) 人氣()

※只能適用於GirdView的換頁,如果是轉跳到不同url的頁面,則[上一頁]的history功能一樣失效。
實驗的結果,轉跳不同url也可成功"回上一頁"。
但如果GridView有做ajax篩選,則一樣會失敗。
目前解決辦法是,不要做ajax篩選,只有ajax換頁。

aspx File
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableHistory="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" >
        </asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" DataSourceID="SqlDataSource1">
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

vb File
Protected Sub GridView1_PageIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.PageIndexChanged
    '換頁時把頁碼加入歷史紀錄
    If ScriptManager1.IsInAsyncPostBack And Not ScriptManager1.IsNavigating Then
        Dim index As Integer = GridView1.PageIndex
        ScriptManager1.AddHistoryPoint("PageIndex", index, "第 " & index + 1 & " 頁")
    End If
End Sub
Protected Sub ScriptManager1_Navigate(ByVal sender As Object, ByVal e As System.Web.UI.HistoryEventArgs) Handles ScriptManager1.Navigate
    '按上一頁會進到歷史紀錄的功能
    Dim indexString As String = e.State("PageIndex")
    Page.Title = "第 " & indexString & " 頁"
    GridView1.PageIndex = CType(indexString, Integer)
    GridView1.DataSourceID = SqlDataSource1.ID
End Sub

伊 發表在 痞客邦 留言(0) 人氣()

1,int轉成string
用toString
或者Convert.toString()如下

例如:
int varInt = 1;
string varString = Convert.ToString(varInt);
string varString2 = varInt.ToString();

2,string轉成int
如果確定字符串中是可以轉成數字的字符,可以用int.Parse(string s),該語句返回的是轉換得到的int值;
如果不能確定字符串是否可以轉成數字,可以用int.TryParse(string s, out int result),該語句返回的是bool值,指示轉換操作是否成功,參數result是存放轉換結果的變量。

例如:
string str = string.Empty;
str = "123";
int result=int.Parse(str);

string str = string.Empty;
str = "xyz";
int result;
int.TryParse(str, out result);


ASP.NET 常用format string大全

伊 發表在 痞客邦 留言(1) 人氣()

如果你的資料庫,原本是放在SQL 2008 Express裡,後來要改放到客戶的空間,是使用SQL 2005的版本,在匯入時,會無法匯入,並且出現要先降級的訊息,可以利用以下方式,把版本改成2005版。
步驟:

進入Microsoft SQL Server Management Studio
資料庫按右鍵-->工作-->產生指令碼。
SQL_2008_to_2005_01.jpg

指令碼精靈畫面,按【下一步】。
SQL_2008_to_2005_02.jpg

選擇要轉出的資料庫,按【下一步】。
SQL_2008_to_2005_03.jpg

選擇指令碼選項的【針對伺服器版本編寫指令碼】,預設為【SQL Server 2008】,要將SQL Server 2008資料庫轉入SQL Server 2005,所以選擇【SQL Server 2005】,按【下一步】。(註:若是要轉入SQL Server 2000,針對伺服器版本編寫指令碼必須選擇SQL Server 2000。)
SQL_2008_to_2005_04.jpg

如果連資料庫內容都要轉出去,【編寫資料的指令碼】必須選擇【True】,預設為False。
SQL_2008_to_2005_05.jpg

選擇物件類型,勾選後,按【下一步】。
SQL_2008_to_2005_06.jpg

選擇資料表,按【下一步】。
SQL_2008_to_2005_07.jpg

選擇檢視表,按【下一步】。
SQL_2008_to_2005_08.jpg

輸出選項的指令碼模式,選擇【編寫指令碼至檔案】,檔案名稱預設存放路徑為我的文件夾裡,預設檔名【script.sql】,依需求修改位置,另存為選擇【Unicode文字】,按【下一步】。
SQL_2008_to_2005_09.jpg

指令碼精靈摘要,按【完成】。
SQL_2008_to_2005_10.jpg

產生指令碼進度,如下圖所示,代表成功產出,按【關閉】。
SQL_2008_to_2005_11.jpg

匯出後,會產生一個SQL檔,再拿到2005的電腦裡執行就Ok了。
SQL_2008_to_2005_12.jpg


SQL Server 2005部分:

先手動新增該資料庫,只需新增資料庫,內容不用動。
SQL_2008_to_2005_13.jpg

將SQL Server 2008上產生的指令碼【script.sql】複製到SQL Server 2005上,開啟指令碼,Microsoft SQL Server Management Studio的檔案-->開啟-->檔案。
選擇【script.sql】,按【開啟】。
按【執行】,訊息出現命令已順利完成,如下圖所示,代表指令碼執行成功。
SQL_2008_to_2005_14.jpg

查詢一下資料表/檢視表正常轉入,如下圖所示。
SQL_2008_to_2005_15.jpg

伊 發表在 痞客邦 留言(0) 人氣()

相當於html的  <td nowrap="true">

CSS的nowarp屬性  white-space: nowrap;

伊 發表在 痞客邦 留言(0) 人氣()

大家都知道 onload 事件 可以寫在<body>裡面

<body onload="javascript code">

但是如果想寫在<script>...</script>裡面呢??

<script language="javascript" type="text/javascript">
    window.onload = function() {
        // code ...
    }
</script>

伊 發表在 痞客邦 留言(0) 人氣()

原本想使用RegularExpressionValidator來驗證日期格式
可是發現有一種更簡易的方法:

使用CompareValidator驗證元件

設定
type="date"
operator="datatypecheck"
即可

伊 發表在 痞客邦 留言(0) 人氣()

在Windows7桌面按右鍵
個人化 > 桌面背景 > 圖片位置
只要是瀏覽加入過的資料夾,全部都會自動列在這個清單上!
一長串難看又難選,還有一推無效的路徑!

不希望電腦在記憶這些路徑,只要執行以下設定即可:

1. regedit 打開登錄編輯程式

2. 找到下方的位置:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\Images]

3. 刪除第一個預設值以外的其他數值

從此這邊就"不會再"紀錄選取過的資料夾清單了!


如果Windows7可以讓使用者自行刪除清單就好多了,因為畢竟還是有些常用的資料夾,
執行此操作步驟後,清單內就不會再記錄使用者選過的資料夾了,下次使用,必須在瀏覽一次。

伊 發表在 痞客邦 留言(0) 人氣()

昨天清理磁碟時,看到 壓縮舊檔案 項目,容量又特大(好幾G),一時之間沒考慮就全勾選了。
結果清理磁碟執行超久,我就去看電視打發時間。

大概半小時後,看它終於執行完畢。
然後開心的打開檔案總管,
發現怎麼一堆檔案都是藍色的檔名,
看到他們的屬性都變成壓縮,頓時發覺大事不妙。

上網搜尋了一下關於XP藍色壓縮檔的資訊
原來在清理磁碟時顯示的 壓縮舊檔案 項目 並不是什麼垃圾檔案
而是把沒用到的檔案壓縮起來
這聽起來似乎不錯
但是一但壓縮要給他還原還真麻煩
而且每次清理磁碟時會耗費大量時間
且空間沒有差很多

但是我已經執行壓縮了怎麼辦?
當然就想辦法把已經壓縮的檔案都解開囉~

dos compact 指令
DOSCompactCommand.gif
所以要解壓縮檔案,只要下 compact /u /i /s 即可。



英文版說明:
Microsoft DOS compact command

About compact :
Compact is a MS-DOS command used to compress, uncompress, and view compressed files.

Availability :
The compact.exe command is an external command and is available in the below Microsoft operating systems.

Windows 2000
Windows XP
Windows Vista
Windows 7

Syntax :
Displays or alters the compression of files on NTFS partitions.

COMPACT [/C | /U] [/S[:dir]] [/A] [/I] [/F] [/Q] [filename [...]]

/C Compresses the specified files. Directories will be marked so that files added afterward will be compressed.
/U Uncompresses the specified files. Directories will be marked so that files added afterward will not be compressed.
/S Performs the specified operation on files in the given directory and all subdirectories. Default "dir" is the current directory.
/A Displays files with the hidden or system attributes. These files are omitted by default.
/I Continues performing the specified operation even after errors have occurred. By default, COMPACT stops when an error is encountered.
/F Forces the compress operation on all specified files, even those that are already compressed. Already-compressed files are skipped by default.
/Q Reports only the most essential information.
filename Specifies a pattern, file, or directory.

Used without parameters, COMPACT displays the compression state of the current directory and any files it contains. You may use multiple filenames and wildcards. You must put spaces between multiple parameters.


Examples:

compact :
Display all the files in the current directory and their compact status.

compact file.txt :
Display the compact status of the file file.txt

compact file.txt /C :
Compacts the file.txt file.



如何關閉電腦的"壓縮舊檔案",步驟如下:

1.滑鼠點選左下角的"開始"然後點選"執行"

2.輸入"regedit"後按"確定",會跳出登錄編輯程式視窗

3.尋找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Compress old files

4.直接把Compress old files整個刪除,"壓縮舊檔案"功能便能取消!!

伊 發表在 痞客邦 留言(0) 人氣()

這是國中程度的問題,但是大學畢業的我,卻完全不會算阿...囧(今年100年經濟部事業招考題目太令人意外了,因為考的太基礎,所以都沒準備到@@)

【因數】
因數,又稱約數,是對於整數n,除m而"無餘數"的整數。
相對來說,稱n為該因數的倍數。
因數不限正負,可以用「因數|倍數」或「倍數≡0 (mod 因數)」(參見同餘)來表達。
例如,(6×7=42)7是42的因數,寫作 7|42,亦是 42≡0 (mod 7)。
亦稱“因子”。一整數被另一整數整除,後者即是前者的因數,如1,2,4都為8的因數。

舉例:
18的因數:1,2,3,6,9,18
24的因數:1,2,3,4,6,8,12,24

【公因數】
在數學中,公約數,亦稱“公因數”。如果一個數同時是幾個數的約數,稱這個數為它們的“公約數”;公約數中最大的稱為最大公約數(最大公因數)。

舉例:
18跟24的公因數:1,2,3,6
18跟24的最大公因數:6,最大公因數 數學表示法:(18,24)=6

【互質】
兩個正整數只有一個公因數1時,它們的關係叫做互質。
舉例:
4的因數:1,2,4
9的因數:1,3,9
則4和9互質,(4,9)=1。

【最大公因數的求法】
1.短除法
最大公因數短除法1.jpg
(24,36,42)=2*3=6

2.標準分解式法
最大公因數標準分解式法1.jpg

3.輾轉相除法
GCDFig1.gif
舉例:x=42,y=75 求x,y最大公因數
1. 以較大的數(75)為被除數,較小的數(42)為除數,75 / 42 = 1 餘 33
2. 前一步驟的除數為被除數,餘數為除數,42 / 33 = 1 餘 9
3. 33 / 9 = 3 餘 6
4. 9 / 6 = 1 餘 3
5. 6 / 3 = 2 餘 0,除數 3 即可為最大公因數

由以上敘述可得遞迴function:(了解原理後,寫出程式不是問題)
int gcd(int x,int y) {
    if (y == 0)  /* 餘 0,除數 x 即為最大公因數 */
        return x;
    else
        return gcd(y, x % y);  /* 前一步驟的除數為被除數,餘數為除數 */
}
#include "stdafx.h"
#include < stdio.h >
#include < cstdlib >

int gcd(int x,int y);

int _tmain(int argc, _TCHAR* argv[])
{
    int xin=42,yin=75;
    int x,y;
    if (xin < yin) {
        x=yin;
        y=xin;
    } else {
        x=xin;
        y=yin;
    }
    printf("GCD=%d \n", gcd(x,y) );
    system("pause");
	return 0;
}
int gcd(int x,int y) {
    if (y == 0)  /* 餘 0,除數 x 即為最大公因數 */
        return x;
    else
        return gcd(y, x % y);  /* 前一步驟的除數為被除數,餘數為除數 */
}
迴圈的寫法:
int gcd2(int x,int y) {
    int temp;
    while(y != 0) {	/* 餘 0,除數 x 即為最大公因數 */
        temp=x % y;
        x=y;		/* 前一步驟的除數為被除數 */
        y=temp;	    /* 餘數為除數 */
    }
    return x;
}
#include "stdafx.h"
#include < stdio.h >
#include < cstdlib >

int gcd2(int x,int y);

int _tmain(int argc, _TCHAR* argv[])
{
    int xin=42,yin=75;
    int x,y;
    if (xin < yin) {
        x=yin;
        y=xin;
    } else {
        x=xin;
        y=yin;
    }
    printf("GCD=%d \n", gcd2(x,y) );
    system("pause");
	return 0;
}
int gcd2(int x,int y) {
    int temp;
    while(y != 0) {	/* 餘 0,除數 x 即為最大公因數 */
        temp=x % y;
        x=y;		/* 前一步驟的除數為被除數 */
        y=temp;	    /* 餘數為除數 */
    }
    return x;
}

C++實做遞迴
#include < iostream > 
using namespace std; 

int gcd(int, int); 

int main() { 
    int m = 0;
    int n = 0; 

    cout << "輸入兩數:"; 
    cin >> m >> n; 

    cout << "GCD: " 
         << gcd(m, n) << endl; 

    return 0; 
} 

int gcd(int m, int n) { 
    if(n == 0) 
        return m; 
    else 
        return gcd(n, m % n); 
}

C++實做迴圈
#include < iostream > 
using namespace std; 

int gcd(int, int); 

int main() { 
    int m = 0;
    int n = 0; 

    cout << "輸入兩數:"; 
    cin >> m >> n; 

    cout << "GCD: " 
         << gcd(m, n) << endl; 

    return 0; 
} 

int gcd(int m, int n) { 
    int r = 0; 

    while(n != 0) { 
        r = m % n; 
        m = n; 
        n = r; 
    } 

    return m; 
}

伊 發表在 痞客邦 留言(0) 人氣()

計算機概論總複習

伊 發表在 痞客邦 留言(0) 人氣()

4月生病了好幾天~請了N天病假
回公司上班第一天,看到桌上一張便條紙
原來是老闆幫我添購一台新電腦

配備如下:(桌機型號HP PRO 3130 MT)
處理器   Intel® Core™ i3-550 處理器 (3.20 GHz)
快取記憶體 4 MB
作業系統  FREE DOS
記憶體   2GB*1
硬碟容量  500G
顯示晶片  Intel® Graphics Media Accelerator X4500
光碟機   DVDRW
主機板晶片 Intel® H57 Express
音效裝置  Realtek ALC888S 高音質解碼器
網路裝置  整合式 Realtek 8111DL Gigabit Ethernet

老闆幫我先裝了Win7
但是我開發環境是VS,目前工作需求要灌以下的軟體才行:
1. VS2008 + VS2008 SP1
2. .Net Framework 3.5 (SP1)
3. Windows SP3
4. MS Chart
Microsoft Chart Controls for Microsoft .NET Framework 3.5
Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008
Microsoft Chart Controls for Microsoft .NET Framework 3.5 語言套件
5. Windows Installer 4.5
6. Windows PowerShell (zh-TW)
7. MS SQL Server 2008 Express (帳戶提供→驗證模式:混合模式;指定SQL Server管理員→加入目前使用者)

Win7新的系統操作模式真的不習慣
所以就想說重灌成XP
結果灌XP的過程出現很多問題

首先,XP光碟驅動途中,出現0x0000007B的藍底白字錯誤訊息
上網搜尋了一下
發現是XP安裝光碟不支援SATA硬碟
必須在光碟驅動時先按F6安裝SATA驅動程式
所以我也執行了F6,但是XP光碟內並無適合的驅動程式
所以顯示請插入A磁碟片驅動程式,當然我是放棄了,電腦根本沒有A磁碟
另一個較差的辦法就是,把硬碟模式改為IDE
開機時進入BIOS,修改硬碟模式為IDE
之後即可正常安裝XP
但是必須犧牲SATA快速的優點

XP不支援這新電腦的硬體
HP官網下載的XP驅動程式都無法安裝,真不知道他們是放心酸的嗎?不能安裝還放上去,隨便交差了事就對了。
可以執行驅動程式安裝,但是按執行後,只出現[接受安裝]->[下一步]按下去後
就沒有後續畫面出現
裝置管理員一樣驚嘆號,沒有安裝成功

解決的辦法:
1. 先到realtek網站下載公用網卡驅動程式,放到usb隨身碟,拿到這台無法上網的電腦安裝
2. 安裝網卡後可上網,到intel網站,選擇自動偵測主機板晶片,讓他安裝~
3. 安裝完主機板晶片,換自動偵測顯示卡晶片,但是我的狀況是偵測不到,所以我下載通用g45系列驅動程式安裝
以上三步驟把主機板該有的都裝完了...
結果hp網站下載的驅動程式都派不上用場...


最後...
折騰了兩三天
還是把電腦又灌成win7了><
開始練習使用win7

結果灌成win7一樣抓不到驅動程式,還是按照上述步驟安裝驅動程式...
win7沒想像中聰明嘛~"~被騙了

伊 發表在 痞客邦 留言(1) 人氣()

生病好幾天沒上班
今天到公司,看到桌上有一張紙條~
竟然是老闆幫我買了一台新電腦>0<
我舊電腦還蠻好用的阿(雖然舊~速度慢~但我很有耐心低)
看到新電腦好HIGH阿~~
老闆真是好人~~
公司的新電腦.png

伊 發表在 痞客邦 留言(0) 人氣()

相信SQL語法的迴圈While大家都會用。
但遇到要將select過後的資料表的資料錄一筆一筆寫到新資料表時,該怎麼辦呢?

-- 宣告變數
DECLARE @變數1 VARCHAR(50) 
DECLARE @變數2 VARCHAR(50)
DECLARE @變數3 VARCHAR(50)

-- 指定變數, 視個人需要, 也可不指定初始值
SET @變數1 ='字串' 
SET @變數2 ='字串' 
SET @變數3 ='字串' 

-- 重點!! 宣告指標變數
DECLARE 指標變數 CURSOR FOR
SELECT 欄位1 ,欄位2 ,欄位3 FROM TABLE1

-- 啟用指標變數
OPEN 指標變數
-- 以指標變數為基準點, 將取出的欄位值, 設定給我們自訂的變數
FETCH NEXT FROM 指標變數 INTO @變數1,@變數2,@變數3

WHILE @@FETCH_STATUS = 0
BEGIN 
    insert into TABLE2(欄位1 ,欄位2 ,欄位3) values(@變數1,@變數2,@變數3)

    -- 指標變數往下移動, 並將取出的欄位值, 設定給我們自訂的變數
    FETCH NEXT FROM 指標變數 INTO @變數1,@變數2,@變數3
END

-- 關閉指標變數
CLOSE 指標變數
-- 釋放指標變數
DEALLOCATE 指標變數

伊 發表在 痞客邦 留言(1) 人氣()

<script language="javascript"> 
    if (top.location != location) 
        top.location.href = location.href;
</script>

可以用在..
1. 登入頁面:如果登入頁面被包在frame裡面,當timeout後,frame其他選單依然可被使用/看到,當按下任一網址,被導向登入頁面時,登入頁面就會重新設定top frame的url。
2. 補... 

伊 發表在 痞客邦 留言(0) 人氣()