2010年1月17日 星期日

2009年7月16日 星期四

文字定位控制練習

image_thumb[1]

Public Class Form1
    Dim i
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim s = ""
        Dim a = "明天會更好"

        For i = 1 To 5
            '左下至右上()
            s = vbNewLine & Space(i * 3) & Mid(a, i, 1) & s
        Next
        For i = 1 To 5
            '左上至右下()
            s = s & vbNewLine & Space(i * 3) & Mid(a, i, 1)
        Next
        For i = 1 To 5
            '右上至左下
            s = s & vbNewLine & Space((6 - i) * 3) & Mid(a, i, 1)
        Next
        For i = 1 To 5
            '右下至左上
            s = vbNewLine & Space((6 - i) * 3) & Mid(a, i, 1) & s
        Next

        MsgBox(s)
    End Sub
End Class

2009年7月6日 星期一

系統工程從複雜問題的總體入手

系統工程的目的是解決總體優化問題,從複雜問題的總體入手,認為總體大於各部分之和,各部分雖較劣但總體可以優化。有的問題,如電話網路,不能只研究個別電話的質量問題,必須從總體網路入手,這種思路是和笛卡兒方法論相左的。

ref: http://zh.wikipedia.org/w/index.php?title=%E7%B3%BB%E7%BB%9F%E5%B7%A5%E7%A8%8B&variant=zh-tw

研究問題的方法分四個步驟

笛卡兒在方法論中指出,研究問題的方法分四個步驟:

  1. 永遠不接受任何我自己不清楚的真理,就是說要盡量避免魯莽和偏見,只能是根據自己的判斷非常清楚和確定,沒有任何值得懷疑的地方的真理。就是說只要沒有經過自己切身體會的問題,不管有什麼權威的結論,都可以懷疑。這就是著名的「懷疑一切」理論。例如亞里士多德曾下結論說,女人比男人少兩顆牙齒。但事實並非如此。
  2. 可以將要研究的複雜問題,盡量分解為多個比較簡單的小問題,一個一個地分開解決。
  3. 將這些小問題從簡單到複雜排列,先從容易解決的問題著手。
  4. 將所有問題解決後,再綜合起來檢驗,看是否完全,是否將問題徹底解決了

Ref : http://zh.wikipedia.org/w/index.php?title=%E6%96%B9%E6%B3%95%E8%AB%96&variant=zh-tw

2009年6月25日 星期四

97技藝競賽第8題 -- VB2008版

Public Class Form1
    Dim r1Str = ""
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test8.txt")
        Dim recArray() = Split(fileContents, vbNewLine)
        For k = 0 To recArray.Length - 1
            proc_one_rec(recArray, k)
        Next
        'MsgBox(r1Str)
        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result8.txt", r1Str, False)
        End
    End Sub
    Sub proc_one_rec(ByVal recArray, ByVal k)
        Dim s = recArray(k)
        Dim n = Math.Ceiling(s.length ^ 0.5)
        Dim a(n + 1, n + 1) As String
        For i = 0 To n + 1
            For j = 0 To n + 1
                If i = 0 Or i = n + 1 Or j = 0 Or j = n + 1 Then
                    a(i, j) = "X"
                Else
                    a(i, j) = "#"
                End If
            Next
        Next
        Dim sindex = 1
        Dim x = 1
        Dim y = 1
        Dim dx = 1
        Dim dy = 0
        Dim dirN = 0
        Dim prex = x
        Dim prey = y
        While sindex <= s.length
            '非空位處理,退回原位置,轉向,前進至下一位置
            If a(x, y) <> "#" Then
                x = prex
                y = prey
                dirN = dirN + 1
                dirN = dirN Mod 4
                If dirN = 0 Then
                    dx = 1
                    dy = 0
                End If
                If dirN = 1 Then
                    dx = 0
                    dy = 1
                End If
                If dirN = 2 Then
                    dx = -1
                    dy = 0
                End If
                If dirN = 3 Then
                    dx = 0
                    dy = -1
                End If
                x = x + dx
                y = y + dy
            End If
            a(x, y) = Mid(s, sindex, 1)
            '保留上次位置
            prex = x
            prey = y
            '取得下次位置,下一個字元
            x = x + dx
            y = y + dy
            sindex = sindex + 1
        End While
        '一次結果
        Dim rStr = ""
        For y = 1 To n
            For x = 1 To n
                rStr = rStr + a(x, y)
            Next
            rStr = rStr & vbNewLine
        Next
        rStr = Replace(rStr, "#", " ")
        r1Str = r1Str & rStr & vbNewLine
    End Sub
End Class