星期五, 10月 20, 2006

藍色小舖回答文章整理

最近好忙好累.只好整理了一下最近在藍色小舖論壇上回答的一些問題(2006/07-2006/10) ,要不然會長草



  • 問題:如何寫用遞迴求最大公因數
    熊的回答:
    求最大公因數(沒記錯是正數才能算.若有不對.請糾正)
    public int GreatestCommonDivisor(int a, int b)
    {
    if (a <= 0 b <= 0) //原程式手誤.寫成and
    throw new ArgumentException("參數不可為零");
    return (a % b == 0 ? b : GreatestCommonDivisor(b, a % b));
    }
    若對於"?"這種運算元有問題.可以參考我blog的說明
    http://huwk.blogspot.com/2006/09/int_14.html
  • 問題:動態傳入參數
    我想將 process 函式改寫成可以接收更多的 x 參數,
    例如: process(10);
    or process(10, 11, 12, 13);
    而不要額外增加多一個 process 函式,
    請問應如何修改語法?
    熊的回答:
    public static void UseVariableParameters(params int[] list)
    {
    for ( int i = 0 ; i < list.Length ; i++ )
    {
    MessageBox.Show(list[i]);
    }
    }
    public static void DemonstrateVariableParameters()
    {
    UseVariableParameters(1,2,3,4,5);
    }
  • 問題:資料表資料太多時的搜尋問題
    想請教各位一下 如果我的網站裡的資料表中的資料數目過多時
    對資料表的某筆資料搜尋 會造成速度減慢嗎? 如果會?那能否有方法改善
    因為最近學資料結構 了解循序搜尋跟二元搜尋
    但不曉得MS SQL在搜尋的情況是什麼樣子的?
    我是用ASP.NET來寫網站~如果預設的搜尋方式是循序的
    那能否改成二元的方式呢?
    有方法嗎?請問高手們,如果我說錯哪裡,請不要留面子
    謝謝各位
    熊的回答:
    參考看看吧
    http://yes.nctu.edu.tw/SQL/Articles/SQL和資料庫簡介(全文版)%20.pdf#search=%22SQL%20%E8%AA%9E%E6%B3%95%20%E6%95%88%E7%8E%87%22
    基本上,你的"資料庫"應是經過設計的.例如經過正規化!
    然後建立必要的pk與index..而若你使用查詢時,供可能使用這些有pk index的欄位
    例如你有一個table有三個欄位
    代碼 <--可以設定成pk
    姓名
    生日
    則你查詢時供量讓代碼出現在你的where條件中的第一個 例如 where 代碼 >= 10
    若你查要用生日當查詢.那你可以在生日加一個index!
    建議你還是先瞭解一下資料庫的運作方式!

  • 問題:變更資料庫的Instance Name
    請問sql 2000 和 sql 2005,於安裝完成後,若想變更Instance Name分別要如何變更?
    熊的回答:
    http://support.microsoft.com/kb/260414/en-us?ln=en-us&sd=gn&fr=0
    5. Q: Can I rename an instance of SQL Server 2000 after I have already installed it on the computer?
    A: Yes. You can change the name of an instance as long as the server is not clustered. For more information, visit the following Microsoft Developer Network (MSDN) Web site:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/instsql/in_afterinstall_5r8f.asp

  • 問題:日期相減算到小時??
    熊的回答:
    使用timespan即可!
    http://huwk.blogspot.com/2006/09/timespan.html

  • 問題.請問out和ref的不同?
    從MSDN的說明看起來...
    out和ref似乎只是"用法"上有點不同?
    實際上都是以傳址 (By Reference) 方式傳遞引數...
    除此之外還有什麼不同嗎?
    如果說要把C#的程式改成VB.NET...
    遇到out改成ByRef就解決了嗎?
    請高手指導~感謝~
    熊的回答:
    我額外補充說明囉!!..請看程式註解..
    C# CODE
    private void button1_Click(object sender, EventArgs e)
    {
    int iout;
    int iref;
    //使用out時,傳入值不重要!
    Test1(out iout);
    //使用ref時,需先初始化值!
    iref = 10;
    Test2(ref iref);
    }
    public void Test1(out int i)
    {
    //不管傳入值是什麼,一率都不會使用,所以必需明確先初始化
    i = 10;
    i = i + 1;
    }
    public void Test2(ref int i)
    {
    //可以直接使用
    i = i + 1;
    }
    VB.NET CODE
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim num1 As Integer
    Me.Test1(num1)
    Dim num2 As Integer = 10
    Me.Test2(num2)
    End Sub
    Public Sub Test1(<Out> ByRef i As Integer)
    i = 10
    i = (i + 1)
    End Sub
    Public Sub Test2(ByRef i As Integer)
    i = (i + 1)
    End Sub

  • 問題:讀檔再判斷的問題?
    有一毎列長度為50 bytes的txt檔,其中毎列的第4~8 bytes是學號,我想判斷該檔案中的學號有無重覆,如果有則傳回一固定值.可以請大家指點嗎?謝謝!
    熊的回答:
    private static void CheckHB(System.Collections.Hashtable hb, string s)
    {
    if (hb.ContainsKey(s))
    {
    //用true代表存在
    hb[s] = true;
    }
    else
    {
    //不存在
    hb.Add(s, false);
    }
    }
    private void button1_Click(object sender, EventArgs e)
    {
    System.Collections.Hashtable hb = new System.Collections.Hashtable();
    string s = "";
    //這一段改用迴圈改成你讀文字檔中的學號即可
    s = "1234";
    CheckHB(hb, s);
    s = "1234";
    CheckHB(hb, s);
    s = "0000";
    CheckHB(hb, s);
    if (hb.ContainsValue(true))
    MessageBox.Show("Y");
    else
    MessageBox.Show("N");
    }

0 個意見: