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

瀏覽方式: 標題列表 簡短摘要
var curMonthDays = new Date(year,month,0).getDate();

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

這個範例程式,會顯示進度字串到textbox內,textbox會自動捲動到最下方,會顯示進度條(0~100),可讓使用者中斷程序。
VB部分的程式碼我是用網路上C#toVB轉換器轉的,所以不知道有無錯誤,請網友費心試試看囉~

程式元件畫面:
NET背景執行

//C#

//---------設計畫面時的設定---------
this.button1.Text = "開始";
this.button2.Text = "停止";
this.textBox1.Multiline = true; //多行
this.textBox1.ScrollBars = ScrollBars.Vertical; //顯示垂直捲軸
this.backgroundWorker1.WorkerReportsProgress = true; //回報進度
this.backgroundWorker1.WorkerSupportsCancellation = true; //允許中斷
this.timer1.Interval = 1000;
//--------------------------------

string msg; //存放回報訊息
DateTime TimerTick; //計時器時間

private void button1_Click(object sender, EventArgs e)
{
    this.TimerTick = DateTime.Parse("2000/1/1 00:00:00"); //初始時間點
    this.timer1.Start(); //啟動計時器
    this.progressBar1.Visible = true; //顯示進度條
    this.backgroundWorker1.RunWorkerAsync(); //呼叫背景程式
}

private void button2_Click(object sender, EventArgs e)
{
    this.backgroundWorker1.CancelAsync(); //中斷背景程式
}

private void todo(BackgroundWorker worker, DoWorkEventArgs e)
{
    for (int i = 1; i <= 100; i++ )
    {
        if (worker.CancellationPending) //如果被中斷...
        {
            e.Cancel = true;
            break;
        }
        System.Threading.Thread.Sleep(300); //延遲300毫秒
        this.msg = "第 " + i + " 圈 ... \r\n"; //設定訊息
        worker.ReportProgress(i); //回報進度
    }
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    if (backgroundWorker1.CancellationPending) //如果被中斷...
        e.Cancel = true;

    BackgroundWorker worker = (BackgroundWorker)sender;
    this.todo(worker, e); //欲背景執行的function
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    this.textBox1.Text += msg;
    this.textBox1.SelectionStart = this.textBox1.Text.Length;
    this.textBox1.ScrollToCaret();
    this.textBox1.Refresh();
    this.progressBar1.Value = e.ProgressPercentage;
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if ((e.Error != null))
        MessageBox.Show(e.Error.Message);
    else if (e.Cancelled)
        MessageBox.Show("使用者中斷程式");
    else
        MessageBox.Show("完成");

    this.progressBar1.Visible = false; //隱藏進度條
    this.timer1.Stop(); //停止計時器
}

private void timer1_Tick(object sender, EventArgs e)
{
    this.TimerTick = this.TimerTick.AddSeconds(1); //計時器 每秒+1
    this.label1.Text = this.TimerTick.ToString("HH:mm:ss"); //設定顯示格式
}
'VB

'---------設計畫面時的設定---------
Me.button1.Text = "開始"
Me.button2.Text = "停止"
Me.textBox1.Multiline = True '多行
Me.textBox1.ScrollBars = ScrollBars.Vertical '顯示垂直捲軸
Me.backgroundWorker1.WorkerReportsProgress = True '回報進度
Me.backgroundWorker1.WorkerSupportsCancellation = True '允許中斷
Me.timer1.Interval = 1000
'--------------------------------

Private msg As String '存放回報訊息
Private TimerTick As DateTime '計時器時間

Private Sub button1_Click(sender As Object, e As EventArgs)
    Me.TimerTick = DateTime.Parse("2000/1/1 00:00:00") '初始時間點
    Me.timer1.Start() '啟動計時器
    Me.progressBar1.Visible = True '顯示進度條
    Me.backgroundWorker1.RunWorkerAsync() '呼叫背景程式
End Sub

Private Sub button2_Click(sender As Object, e As EventArgs)
    Me.backgroundWorker1.CancelAsync() '中斷背景程式
End Sub

Private Sub todo(worker As BackgroundWorker, e As DoWorkEventArgs)
    For i As Integer = 1 To 100
        If worker.CancellationPending Then '如果被中斷...
            e.Cancel = True
            Exit For
        End If
        System.Threading.Thread.Sleep(300) '延遲300毫秒
        Me.msg = "第 " & i & " 圈 ... " & vbCr & vbLf '設定訊息
        worker.ReportProgress(i) '回報進度
    Next
End Sub

Private Sub backgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs)
    If backgroundWorker1.CancellationPending Then '如果被中斷...
        e.Cancel = True
    End If

    Dim worker As BackgroundWorker = DirectCast(sender, BackgroundWorker)
    Me.todo(worker, e) '欲背景執行的function
End Sub

Private Sub backgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
    Me.textBox1.Text += msg
    Me.textBox1.SelectionStart = Me.textBox1.Text.Length
    Me.textBox1.ScrollToCaret()
    Me.textBox1.Refresh()
    Me.progressBar1.Value = e.ProgressPercentage
End Sub

Private Sub backgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
    If (e.Error IsNot Nothing) Then
        MessageBox.Show(e.Error.Message)
    ElseIf e.Cancelled Then
        MessageBox.Show("使用者中斷程式")
    Else
        MessageBox.Show("完成")
    End If

    Me.progressBar1.Visible = False '隱藏進度條
    Me.timer1.Stop() '停止計時器
End Sub

Private Sub timer1_Tick(sender As Object, e As EventArgs)
    Me.TimerTick = Me.TimerTick.AddSeconds(1) '計時器 每秒+1
    Me.label1.Text = Me.TimerTick.ToString("HH:mm:ss") '設定顯示格式
End Sub

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

//C#

//開啟檔案
OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
OpenFileDialog1.CheckFileExists = true;
OpenFileDialog1.Filter = "txt files (*.txt)|*.txt";
OpenFileDialog1.Multiselect = false;
OpenFileDialog1.ShowDialog();
TextBox.Text = OpenFileDialog1.FileName;

//開啟資料夾
FolderBrowserDialog FolderBrowserDialog1= new FolderBrowserDialog();
FolderBrowserDialog1.ShowDialog();
TextBox.Text = FolderBrowserDialog1.SelectedPath;
'VB

'開啟檔案
Dim OpenFileDialog1 As OpenFileDialog = New OpenFileDialog
OpenFileDialog1.CheckFileExists = True
OpenFileDialog1.Filter = "txt files (*.txt)|*.txt"
OpenFileDialog1.Multiselect = False
OpenFileDialog1.ShowDialog()
TextBox.Text = OpenFileDialog1.FileName

'開啟資料夾
Dim FolderBrowserDialog1 As FolderBrowserDialog = New FolderBrowserDialog
FolderBrowserDialog1.ShowDialog()
TextBox.Text = FolderBrowserDialog1.SelectedPath

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

C#
//檢查檔案是否存在
if (!File.Exists(FilePath))
{
    MessageBox.Show("找不到檔案");
    return;
}

StreamReader objReader = new StreamReader(FilePath);
string sLine = "";
ArrayList arrText = new ArrayList();

do
{
    sLine = objReader.ReadLine();
    if (sLine != null)
    {
        arrText.Add(sLine);
    }
} while (sLine != null);
objReader.Close();

//把讀取檔案的結果放到ListBox,您也可以另做運用。
ListBox.Items.AddRange(arrText);
VB
'檢查檔案是否存在
If Not FileIO.FileSystem.FileExists(FilePath) Then
    MsgBox("找不到檔案")
    Return
End If

Dim objReader As New StreamReader(FilePath)
Dim sLine As String = ""
Dim arrText As New ArrayList()

Do
    sLine = objReader.ReadLine()
    If Not sLine Is Nothing Then
        arrText.Add(sLine)
    End If
Loop Until sLine Is Nothing
objReader.Close()

'把讀取檔案的結果放到ListBox,您也可以另做運用。
ListBox.Items.AddRange(arrText)

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

C#
int 這個月的天數 = DateTime.DaysInMonth(年,月);

VB
Dim 這個月的天數 As Integer = DateTime.DaysInMonth(年,月)

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

C#
//檔案是否存在
bool result = System.IO.File.Exists(檔案路徑);

//資料夾是否存在
bool result = System.IO.Directory.Exists(資料夾路徑);

//建立資料夾
System.IO.Directory.CreateDirectory(資料夾路徑);

//檢查是否為合法路徑
public bool isValidPath(string path)
{
    bool result = true;
    string err = "";
    try
    {
        System.IO.FileInfo info = new System.IO.FileInfo(path);
    }
    catch (Exception ex)
    {
        result = false;
        err = "err:" + ex.Message;
    }
    Console.WriteLine("{0} {1} {2}", result, path, err);
    return result;
}

//取得資料夾資訊
DirectoryInfo dir = new DirectoryInfo(資料夾路徑);

//搜尋資料夾1
DirectoryInfo[] dirList = dir.GetDirectories(搜尋字串, SearchOption);
//搜尋資料夾2
string[] dirList = Directory.GetDirectories(資料夾路徑, 搜尋字串, SearchOption);

//搜尋檔案1
FileInfo[] fileList = dir.GetFiles(搜尋字串, SearchOption);
//搜尋檔案2
string[] fileList = Directory.GetFiles(資料夾路徑, 搜尋字串, SearchOption);

//巡覽DirectoryInfo
foreach (DirectoryInfo _event in dirList)
{
    //...
}

//巡覽FileInfo
foreach (FileInfo _event in fileList)
{
    //...
}

//取得目前使用者桌面路徑
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string filePath =desktopPath +@"\FolderTest\";
//檢查資料夾是否存在
if (!Directory.Exists(filePath))
{
    //不存在則建立
    Directory.CreateDirectory(filePath);
}
//檢查檔案是否存在
if (!File.Exists(filePath))
{
    //不存在則拷貝
    File.Copy(來源路徑含檔名, 目的路徑含檔名, true);
}
VB
'檔案是否存在
FileIO.FileSystem.FileExists(檔案路徑)

'資料夾是否存在
FileIO.FileSystem.DirectoryExists(資料夾路徑)

'建立資料夾
FileIO.FileSystem.CreateDirectory(資料夾路徑)

'檢查是否為合法路徑
Public Function isValidPath(ByVal path As String) As Boolean
    Dim result As Boolean = True
    Dim err As String = ""
    Try
        Dim info As New System.IO.FileInfo(path)
    Catch ex As Exception
        result = False
        err = "err:" & ex.Message
    End Try
    Console.WriteLine("{0} {1} {2}", result, path, err)
    Return result
End Function

'取得資料夾資訊
Dim dir As New DirectoryInfo(資料夾路徑)

'搜尋資料夾1
Dim dirList As DirectoryInfo() = dir.GetDirectories(搜尋字串, SearchOption)
'搜尋資料夾2
Dim dirList As String() = Directory.GetDirectories(資料夾路徑, 搜尋字串, SearchOption)

'搜尋檔案1
Dim fileList As FileInfo() = dir.GetFiles(搜尋字串, SearchOption)
'搜尋檔案2
Dim fileList As String() = Directory.GetFiles(資料夾路徑, 搜尋字串, SearchOption)

'巡覽DirectoryInfo
For Each _event As DirectoryInfo In dirList
	'...
Next

'巡覽FileInfo
For Each _event As FileInfo In fileList
	'...
Next

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

C#
textbox1.SelectionStart = textbox1.Text.Length; 
textbox1.ScrollToCaret(); 
textbox1.Refresh();
VB
textbox1.SelectionStart = textbox1.Text.Length
textbox1.ScrollToCaret()
textbox1.Refresh()

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

C#
[DllImport("mpr.dll", EntryPoint = "WNetAddConnectionA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern long WNetAddConnection(string lpszNetPath, string lpszPassword, string lpszLocalName);

[DllImport("mpr.dll", EntryPoint = "WNetCancelConnectionA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern long WNetCancelConnection(string lpszName, long bForce);

//無密碼可傳空字串
public long AddConnection(string 路徑, string 登入密碼, string 磁碟機代號)
{
    try
    {
        return WNetAddConnection(路徑, 登入密碼, 磁碟機代號);
    }
    catch (Exception ex)
    {
        DebugMsg(ex.Message.ToString());
        return 0;
    }
}

//Force: 0 如有檔案開啟中則傳回ERROR_OPEN_FILES, 1 強制關閉
//ERROR_OPEN_FILES: There are open files, and the fForce parameter is FALSE.
public long CancelConnection(string 磁碟機代號, int Force)
{
    try
    {
        return WNetCancelConnection(磁碟機代號, Force);
    }
    catch (Exception ex)
    {
        DebugMsg(ex.Message.ToString());
        return 0;
    }
}
VB
Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" _
(ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName _
As String) As Long

Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" _
(ByVal lpszName As String, ByVal bForce As Long) As Long

Function AddConnection(ByVal 路徑 As String, ByVal 登入密碼 As String, ByVal 磁碟機代號 As String) As Long
    Try
        Return WNetAddConnection(路徑, 登入密碼, 磁碟機代號)
    Catch ex As Exception
        DebugMsg(ex.Message.ToString())
    End Try
End Function

Function CancelConnection(ByVal 磁碟機代號 As String, ByVal Force As Integer) As Long
    Try
        Return WNetCancelConnection(磁碟機代號, Force)
    Catch ex As Exception
        DebugMsg(ex.Message.ToString())
    End Try
End Function

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

C#
//宣告: 型別[] 變數名稱 = { 陣列內容1, 陣列內容2, 陣列內容3, 陣列內容4 ... };
string[] LocalNameList = { "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V" };

//巡覽1 foreach
foreach (string _event in LocalNameList)
{
    textbox1.text = _event;
}

//巡覽2 for
for (i = 0; i < LocalNameList.Length; i++)
{
    textbox1.text = LocalNameList[i];
}

//排序   使用Array.Sort ( , )    
//範例: 
//依檔名排序 = _event.Name;
//or 
//依檔案最後修改的日期時間 = _event.LastWriteTime.ToString()
private FileInfo[] SortFiles(FileInfo[] files)
{
    int array_length = files.Length;
    string[] sort_key = new string[array_length];

    foreach (FileInfo _event in files)
    {
        sort_key[0] = _event.Name; //依檔名
        //sort_key[0] = _event.LastWriteTime.ToString(); //依檔案最後修改的日期時間
    }

    Array.Sort(sort_key, files); //由小到大排序
    Array.Reverse(files); //反轉 由大到小排序

    return files;
}

//陣列Function的宣告
//類型 型別[] 名稱(參數...) 
private FileInfo[] SortFiles(FileInfo[] files)
{
    return files;
}
VB
'宣告: Dim 變數名稱() As 型別 = { 陣列內容1, 陣列內容2, 陣列內容3, 陣列內容4 ... }
Dim LocalNameList() As String = {"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V"}

'巡覽1 For Each
For Each _event As String In LocalNameList
    textbox1.text = _event 
Next

'巡覽2 For
For i = 0 To LocalNameList.Length - 1
    textbox1.text = LocalNameList(i)
Next

'排序   使用Array.Sort ( , )    
'範例: 
'依檔名排序 = _event.Name;
'or 
'依檔案最後修改的日期時間 = _event.LastWriteTime.ToString()
Private Function SortFiles(ByVal files As FileInfo()) As FileInfo()
    Dim array_length As Integer = files.GetUpperBound(0)
    Dim sort_key(array_length) As String

    For Each dir As FileInfo In files
        sort_key(0) = dir.Name '依檔名
        'sort_key(0) = dir.LastWriteTime.ToString '依檔案最後修改的日期時間
    Next

    Array.Sort(sort_key, files) '由小到大排序
    Array.Reverse(files) '反轉 由大到小排序

    Return files
End Function

'陣列Function的宣告
'類型 Function 名稱(參數...) As 型別() 
Private Function SortFiles(ByVal files As FileInfo()) As FileInfo()
    Return files
End Function

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

原本就有在網拍賣舊手機~(8310)
沒想到有人來提議以手機換手機~
因為我8310已經沒在用了,所以就隨便換吧~反正只要能當備用機就好~
8310也不值多少錢了,只是擁有我太多回憶...拋不掉的回憶(其時留著甜美的回憶也未嘗不是好事)
結果就換了一支6260回來,因為對方全機包膜,所以完全沒刮傷,原廠電池也沒用過,對方直接買台製的使用。
換回家後,我就把它的包膜都撕掉了,因為我喜歡直接觸摸手機殼質感的感覺,沒想到它的質感還不錯,是霧面的,全黑的,一支很man的手機。
我的8310超粉嫩,都是女生的機殼說~~

6260像是早期的智慧型手機,是有作業系統的,剛開始覺得很不習慣~
沒想到功能跟我的Sony C510差不多(當然照像功能沒得比)
古董6260還有支援MMC記憶卡,放了幾個好玩的遊戲進去,都可以正常執行,速度也蠻順的~
內建Realplayer,可以聽音樂/看影片~
還有中英辭典、電子書、Word、PowerPoint的軟體...

而且我的習慣就是拿到2手手機一定要factory default(原廠出廠初始化設定),
但是這支手機內建的 設定>手機設定>一般設定>原廠設定,並沒有辦法完全出始化,
所以我就上網找了初始化的代碼:*#7370#,
開機後~輸入這個代碼,就會問你是否要初始化,按下確定,就會徹底把手機初始化。
記得記憶卡要拔起來,因為內含原廠贈送的軟體:電子書、3D撞球遊戲、射飛鏢遊戲,沒拔起來會被格式化。
其他記憶卡內的主題被我刪除了,實在好醜~~

※國外網站還有提供一招初始化的方式,可能是用於手機徹底當機無法開機使用:
同時按以下三個鈕:*、3、call(綠色撥號鍵) 不要放開,並且按電源鍵開機,就會執行初始化。

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

【Excel 小數點後位數指定 及 小數位數為0不顯示】

使用:ROUND(儲存格,欲顯示幾位小數位數)

數值為7.5時,會顯示7.5;數值為10.0時,會顯示10;數值為16.6666時,會顯示16.7。





【Excel 限制輸入儲存格區域】
http://pignet.wordpress.com/2009/11/14/excel-2/


1.選取要可以輸入的儲存格區域。
2.右鍵→儲存格格式→選擇『保護』頁籤,取消「鎖定」,按下確定。
3.功能表『工具』→保護→保護工作表,取消「選取鎖定的儲存格」。
4.「要保護工作表的密碼」可以設定密碼,就不會被解開保護了。

這樣,就只剩下剛剛我們選擇的儲存格區域可以輸入資料,
其他的都不行。

加上使用:資料→驗證→設定,
使用資料驗證,
限制輸入的值內容。

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

免費圖片空間imageshack今年改版
使用者需要登入才能觀看該空間的圖片
若是大型論壇/討論區,可申請免登入貼圖
但是其他空間使用者就需要登入了
很麻煩,分享圖片還要其他人先登入imageshack才可觀看圖片
其實有一個很簡單的方法可以破解:
將原本圖片網址:http://img789.imageshack.us/imgxx/xxxx.jpg
改為:http://a.imageshack.us/imgxx/xxxx.jpg
即可正常顯示圖片

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

最近很無聊
一直玩FB遊戲
但是好友名單沒半個人
索性自己申請FB分身帳號來當好友

剛開始,申請第1、2個分身,都沒有問題(aaa01@mail.com, aaa02@mail.com)
但是申請到第3、4個,就被鎖住了~(aaa03@mail.com, aaa04@mail.com)
且連帶第2個成功的分身也被鎖住...(aaa02@mail.com)
並不是鎖帳號那種鎖住,而是出現了「手機認證」這種鳥東西

當下就非常不爽啦!
馬上去國外找跳板申請帳號
成功申請了第5、6個帳號(aaa05@mail.com, aaa06@mail.com)
也順利開心的玩了2天

其實3個分身對我來說錯錯有餘了~
但我就很想實驗
又跑去找跳板申請了第7個帳號(aaa07@mail.com)
沒想到剛用完,登入FB卻出現「手機認證」
心裡想說慘了><
試了先前能夠正常登入的帳號(aaa01@mail.com, aaa05@mail.com, aaa06@mail.com)
也都出現「手機認證」...

所以這個教訓就是...申請帳號不要都連號阿~><~
剛剛又去申請了第8個分身,這次特地為它取了一個非常正常~不連號的email了...囧


技術上的交流~

我做以上動作都沒有執行清除瀏覽器cookie的動作...連續申請帳號時也沒有...(一定被大師們笑我是笨蛋吧><)
應該是每次申請帳號都要清除cookie,而且登入不同帳號前也要清除cookie

FB有鎖拋棄式郵件地址,因為拋棄式郵件地址都有固定的規則,所以蠻好判斷出來的,如果是同一個拋棄式郵件準則產生出來的郵件地址,只能申請一次帳號,FB在註冊時就會提示。

剛剛申請完第8個分身,也順便跟FB把之前用掉的email都要回來了...我不喜歡有空頭email卡在FB上面
感覺真是累阿~><~

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

請參考微軟官網:
http://msdn.microsoft.com/zh-tw/library/dayb112d.aspx

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

table
{
position:relative; 
margin-left:auto; 
margin-right:auto; 
width:auto;
}
很簡單吧~^^~
position 跟 width 的值請自行替換,
margin 左跟右用 auto 是為了讓它置中,
想要不對稱的話,把 width 拿掉再調左右就好。

其它請利用 w3c.org 的資源。
http://w3c.org/

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

使用Button的Command,CommandArgument來實現。

.aspx
實作3個Button Object,
OnCommand呼叫同一個Function,
CommandArgument設定參數,此處設定Object名稱。

<asp:Button ID="Button1" runat="server" Text="Button1" 
CommandArgument="Calendar1" OnCommand="ButtonCommand" />

<asp:Button ID="Button2" runat="server" Text="Button2" 
CommandArgument="Calendar2" OnCommand="ButtonCommand" />

<asp:Button ID="Button3" runat="server" Text="Button3" 
CommandArgument="Calendar3" OnCommand="ButtonCommand" />


.vb
使用FindControl取得Object。
按各別按鈕會顯示/隱藏指定的日曆元件。

Public Sub ButtonCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
    Dim c As Calendar = FindControl(e.CommandArgument)
    c.Visible = Not c.Visible
End Sub

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

1. 一般頁面
Dim tb as TextBox = FindControl("TextBox1")

2. 有MasterPage的頁面
Dim tb as TextBox = Master.FindControl("Content").FindControl("TextBox1")

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

一、下列是以C、Java及Javascript三種語言撰寫存取陣列(array)的程式片斷,
請問此程式片斷執行後,會產生什麼結果?如果結果錯誤,錯誤訊息為何?
各用什麼方法可避免錯誤。請寫出完整的程式來說明你的方法。(25分)
C: int a[] = {0, 1, 2, 3}; for (i=0; i<=sizeof(a); i++) printf(“%d”, a[i]);
Java: int[] a = {0, 1, 2, 3}; for (i=0; i<=a.length; i++) System.out.println(a[i]);
Javascript: var a = [0, 1, 2, 3]; for(i=0; i<=a.length; i++) document.write(a[i]);

【答】
C語言:
for迴圈應該只能跑0~3(陣列a共4個元素個數),
原程式中sizeof(a)=16,for迴圈會跑0~16,這樣是不對的,已經超過陣列a的長度了,
會讀出錯誤的數值(記憶體位置內存的資料未知)。

解釋:
sizeof(a)是取出陣列a所有元素的總byte數,不是陣列a有幾個元素個數。
應該使用sizeof(a)/sizeof(a[0])取得陣列a的元素個數。

正確寫法如下:
int a[] = {0, 1, 2, 3}; for (i=0; i< sizeof(a)/sizeof(a[0]); i++) printf(“%d”, a[i]);


Java: 
for迴圈應該只能跑0~3(陣列a共4個元素個數),
原程式for迴圈是跑0~4,超過陣列a的元素個數,會讀出錯誤的數值(記憶體位置內存的資料未知)。

解釋:
a.length會傳回陣列a元素個數,此例元素個數為4,所以迴圈會跑0~4,
陣列index是從0開始,4的位置已超出原本陣列a的長度。

正確寫法如下:
int[] a = {0, 1, 2, 3}; for (i=0; i< a.length; i++) System.out.println(a[i]);


Javascript:
for迴圈應該只能跑0~3(陣列a共4個元素個數),
原程式for迴圈是跑0~4,超過陣列a的元素個數,會顯示沒有定義(undefined)。

解釋:
a.length會傳回陣列a元素個數,此例元素個數為4,所以迴圈會跑0~4,
陣列index是從0開始,4的位置已超出原本陣列a的長度。

正確寫法如下:
var a = [0, 1, 2, 3]; for(i=0; i< a.length; i++) document.write(a[i]);


三、下面是一個使用Scheme functional language寫成之程式。回答下列問題:(25分)
(define unknown
(lambda (L)
(cond
((null? L) L)
((null? (cdr L)) L)
((eqv? (car L) (car (cdr L))) (unknown (cdr L)))
(else (cons (car L) (unknown (cdr L)))))))
1.請說明Functional Language 之主要優缺點。
2.請說明上述程式之功能。
3.請說明 (unknown ‘(3 3 2 2 2 4 4 3 4 2 2 1 0)) 之執行結果為何?

【答】
1.Functional Language 優點:程式碼簡潔直覺。缺點:前置式運算式寫法,不易閱讀。

2.解析:
(define unknown .........宣告函式, 名稱為 unknown
    (lambda (L) .........宣告函式參數, 名稱為 L
    (cond .........if-else敘述開始
    ((null? L) L) .........if L是null, 則傳回L
    ((null? (cdr L)) L) .........else if L的第一個元素之後是null, 則傳回L
    ((eqv? (car L) (car (cdr L))) (unknown (cdr L))) 
    .........else if L的第一個元素 == L的第二個元素, 則遞迴呼叫unknown函式(參數為L去掉第一個元素)
    (else (cons (car L) (unknown (cdr L))))))) 
    .........else 將L的第一個元素 跟 遞迴呼叫unknown函式(參數為L去掉第一個元素)傳回的值合併
此程式將把L串列內容連續重複出現的數字去除

3.結果:3 2 4 3 4 2 1 0

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

一、下列的C語言程式中,findMinMax函式接受一個一維陣列,
並將陣列中的最大值以及最小值利用傳址呼叫(call by address)的方式回傳。
請將程式碼中的空格編號及答案寫於申論試卷上。(每一個空格5分,共20分)
void findMinMax(int *array, int size, int *min, int *max){
	*min = array[0]; *max = array[0];
	for(int i = 1; i < size; i++){
		if(array[i] > *max) __1__ = array[i];
		else if(array[i] < *min) __2__ ; }}
void main() {
	int min, max; min = 0; max = 100;
	int a[] = {8, 9, 16, 0, 33, 45, 7, 22};
	findMinMax(a, __3__ , &min, __4__ );
	printf("min = %d\n", min);
	printf("max = %d\n", max); }

【答】
1.*max
2.*min = array[i]
3.sizeof(a)/sizeof(a[0])
4.&max


二、請回答下列C語言程式問題:
1.定義函式int foo(int x) { x *= 2; return x;}。請問int x = 6; 
printf(“%d\n”, foo(x) + foo(x)); 輸出為何?(5分)
2.請問下列程式的輸出為何?(5分)
void sp(int value) {
	if(value / 10) {
		printf("%d\n", value % 10); sp(value / 10);
	}else { printf("%d\n", value); }
}
void main() {sp(728); }
3.請問若是要在瀏覽器的標題列上秀出「Hello world」的文字,
下列HTML文件中的空白處應填入何種程式碼?(5分)
<HTML><head> </head> <body></body>。
4.請問若是要使用C語言標準函式庫的atoi()函式,需要引入那個標頭檔(header file)?(5分)

【答】
1. 輸出為:24

2. 輸出為:
8
2
7

3.<title>Hello world</title>

4.stdlib.h


三、請用C語言,設計一個函式int gcd(int x, int y)。gcd函式會回傳整數x及y的「最大公因數」,
請用遞迴(recursive)的方式來完成gcd函式。(15分)

【答】
int gcd(int x, int y) {
    if(y == 0)
        return x;
    else
        return gcd(y, x%y);
}

四、請用C語言設計一個函式int isPerfect(int x)。
當isPerfect回傳1時,代表x為「完美數」,若回傳0,代表x不是完美數。
若x是一個完美數,則x的所有小於x本身的正因數加總,會等於x。
舉例而言,令x=6,則所有小於x的正因數有1,2及3。因為1+2+3=6,所以6是完美數。(15分)

【答】
依提意得知,函式isPerfect(int x)將計算出x所有的因數的和(sum),
並且,如果和(sum)與x相等則return 1,否則return 0。
可得以下函式:
int isPerfect(int x) {
    int sum = 0;
    for (int i=1; i < x; i++) { //從1,2,3,...,x-1
        if(x % i == 0) //x除以i,如果餘數為0,則i即為x的因數
            sum = sum + i; //將因數相加
    }
    if(x == sum) //如果x的因素和等於x,則x為完美數
        return 1;
    else
        return 0;
}


五、名詞解釋:
1.請解釋並舉例說明Java語言中extends關鍵字的作用。(10分)
2.請解釋Java語言中覆寫(override)以及超載(overload)的差別。(10分)
3.請寫出XML中DTD的英文全名。(5分)
4.下圖是一個超連結,當你點選它時,瀏覽器會「開啟新的視窗」,
並連結到http://www.abc.efg/網址,請將此超連結的HTML語法寫出來。(5分)
這是超連結

【答】
1.extends擴充:
將已存在的類別沿用到新類別,不需要重複撰寫相同的函式,精簡程式碼。
已存在的類別以被很多程式碼使用,但又需新增相似的功能時,可以新建一個類別,將原類別extends進來,
在新類別內擴充原類別沒有的功能函式。

2.
覆寫(override):
extends類別時,如果原有類別的函式功能不敷使用,可將該函式override,重新定義該函式的程式敘述。
需要注意的事項,override函式時,只可擴大父類別函式的權限,不能縮小父類別函式的權限。

超載(overload):
同一個函式名稱,可依照輸入參數型態的不同、數量的不同,呼叫對應的函式敘述。
可應用在類似功能函式的設計。

3.DTD: Document Type Definition

4.<a href="http://www.abc.efg/" target="_blank">這是超連結</a>

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

一、用C語言撰寫一個函式int most_significant_set_bit(int num),它能將一個32-bit整數的最高有效位(The most significant bit)為1的位置計算出並回傳出來,如果全為0,則回傳-1。例如數值444以二進位表示為00000000 00000000 00000001 10111100,所以它回傳出最高有效位為1的位置為8,也就是說bit 8。(25分)

#include "stdio.h"
#include "stdlib.h"
#include "math.h"

int most_significant_set_bit(int num) {
    for(int i=31; i>=0; i--) {
        if(num / pow(2.0, i) >= 1) {
            return i;
    }
    return -1;
}
int main(void) {
    int num = 444;
    printf(" %d 的最高有效位為1的位置為: %d \n", num, most_significant_set_bit(num));
    return 0;
}
不知道這樣答題會不會被判0分~~因為寫太少@@~~
應該不會禁止使用math.h函式庫吧~~
這是很簡單的邏輯問題~~
因為是32位元(n=32)系統,所以就使用2的n-i次方除以num(i=1,2,3...,32),(不管餘數)找到商為1的就是最高位元。
pow是math.h內含的函式,pow(x,y)代表:x的y次方。

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