아이폰의 홈버튼이 잘 안 눌릴 때 참고하시라.
http://www.zdnet.co.kr/tv/tv_view.asp?artice_id=20121025102835&type=xml
이 중 몇은 꼭 아이폰의 홈버튼이 아니더라도 적용해 볼 가치가 있다.
건물 에너지, IT와 여러 가지 글들
아이폰의 홈버튼이 잘 안 눌릴 때 참고하시라.
http://www.zdnet.co.kr/tv/tv_view.asp?artice_id=20121025102835&type=xml
이 중 몇은 꼭 아이폰의 홈버튼이 아니더라도 적용해 볼 가치가 있다.
을 반복법으로 풀어라.
먼저, 주어진 식을 형식으로 변형시킨다.
즉, 으로 변형시킨다. 따라서 가 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Option Explicit '허용오차(allowable error) Private Const EPS As Double = 0.00001 'epsilon의 약자. 매우 작은 값 그러나 0은 아니다. 'which stands for epsilon, mean very small but nonzero Sub SolveEquation() Dim x0 As Double Dim x1 As Double ' ' '1) 초기값 x0를 적당히 정한다. x0 = Range("A3") '2) x1 = G(x0)를 계산한다. x1 = G(x0) ' Do Until (Abs(x1 - x0) < EPS) '수렴할 때까지 계산해라. x0 = x1 '//새로 계산한 값(x1)을 이전 값(x0)으로 대체한다. x1 = G(x0) '//다시 새로운 값(x1)을 계산한다. Loop ' ' Range("C3") = x1 End Sub |
풀어야 할 방정식은 다음과 같다.
1 2 3 4 |
Function G(x As Double) As Double ' 계산할 방정식 f(x) = 0 를 x = g(x) 형식으로 변환시킨 것 G = Exp(x) - 5 * Sin(x) + 2.36 * x End Function |
벡터 계산을 위한 구조체 선언
1 2 3 4 5 6 7 |
Option Explicit Type Vector3D '3차원 벡터를 위한 자료 구조 X As Double Y As Double Z As Double End Type |
내적 계산하기
1 2 3 |
Function DotProduct(v1 As Vector3D, v2 As Vector3D) As Double DotProduct = v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z End Function |
벡터의 합
1 2 3 4 5 6 7 8 9 |
Function VectorAddition(v1 As Vector3D, v2 As Vector3D) As Vector3D Dim c As Vector3D ' c.X = v1.X + v2.X c.Y = v1.Y + v2.Y c.Z = v1.Z + v2.Z ' VectorAddition = c End Function |
외적
1 2 3 4 5 6 7 8 9 |
Function CrossProduct(v1 As Vector3D, v2 As Vector3D) As Vector3D Dim c As Vector3D ' c.X = v1.Y * v2.Z - v1.Z * v2.Y c.Y = v1.Z * v2.X - v1.X * v2.Z c.Z = v1.X * v2.Y - v1.Y * v2.X ' CrossProduct = c End Function |
벡터의 크기
1 2 3 |
Function Norm(v1 As Vector3D) As Double Norm = Sqr(v1.X * v1.X + v1.Y * v1.Y + v1.Z * v1.Z) End Function |
벡터의 차를 위한 함수
1 2 3 4 5 6 7 8 9 |
Function MinusVector(v1 As Vector3D) As Vector3D Dim r As Vector3D ' r.X = -v1.X r.Y = -v1.Y r.Z = -v1.Z ' MinusVector = r End Function |
벡터의 비교
1 2 3 4 5 6 7 |
Function Equals(v1 As Vector3D, v2 As Vector3D) As Boolean If (v1.X = v2.X And v1.Y = v2.Y And v1.Z = v2.Z) Then Equals = True Else Equals = False End If End Function |
출처 : http://www.mytechguide.org/8578/backup-complete-facebook-profile/
1. 자신의 계정으로 페이스북에 로그인한다.
2. 다음과 같이 “계정설정” 메뉴를 선택한다.
3. 계정설정 메뉴 맨밑에 “내 Facebook 사본을 다운로드하기”를 누른다.
4. 페이스북의 자료를 압축하기 시작한다.
5. 압축이 끝나면 페이스북 등록 이메일로 ‘다운로드가 가능합니다’하는 메시지와 다운로드 링크가 전달되며, 다음과 같이 내려받을 수 있는 화면이 뜬다.
6. 링크된 자료를 자신의 컴에 저장하면 된다. (끝!)
모든 프로그래밍 언어에는 자신들만의 데이터 형식을 갖고 있다.
다음은 엑셀의 도움말에 있는 내용이다.
데이터 형식 | 저장 용량 | 범위 |
---|---|---|
Byte | 1바이트 | 0부터 255까지 |
Boolean | 2바이트 | True 또는 False |
Integer | 2바이트 | -32,768부터 32,767까지 |
Long (긴 정수) | 4바이트 | -2,147,483,648부터 2,147,483,647까지 |
Single (단정도 부동 소수점) | 4바이트 | -3.402823E38부터 -1.401298E-45까지(음수값). 1.401298E-45부터 3.402823E38까지(양수값) |
Double (배정도 부동 소수점) | 8바이트 | -1.79769313486232E308부터 -4.94065645841247E-324까지(음수값). 4.94065645841247E-324부터 1.79769313486232E308까지(양수값) |
Currency (정수 값 잘림) | 8바이트 | -922,337,203,685,477.5808부터 922,337,203,685,477.5807까지 |
Decimal | 14바이트 | +/-79,228,162,514,264,337,593,543,950,335(소수점 이하 없음); +/-7.9228162514264337593543950335(숫자의 오른쪽으로부터 28번째); +/-0.0000000000000000000000000001(0이 아닌 최소 숫자) |
Date | 8바이트 | 100년 1월 1일부터 9999년 10월 31까지 |
Object | 4바이트 | 모든 개체 참조 |
String (가변 길이) | 10바이트 +문자열 길이 | 0부터 약 20억까지 |
String (고정 길이) | 문자열 길이 | 1부터 약 65,400까지 |
Variant (숫자) | 16바이트 | Double형 범위 내의 모든 숫자 |
Variant (문자) | 22바이트 + 문자열 길이 | 변수 길이 String과 같은 범위 |
사용자 정의 형식 (Type 사용) | 요소가 사용하는 숫자 | 해당 데이터 형식의 범위값과 각 요소의 범위값이 같음 |
메모 모든 데이터 형식의 배열은 20바이트 + 각 차원당 4바이트 + 데이터 자체가 차지하는 바이트 만큼의 메모리를 차지하며, 각 항목의 수에 항목의 크기를 곱하면 데이터가 차지하는 메모리의 용량을 구할 수 있습니다. 예를 들면 2바이트를 차지하는 4개의 Integer 데이터 요소로 된 1차원 배열은 8바이트를 차지합니다. 데이터의 8바이트와 오버헤드 24바이트를 더하면 배열에 필요한 메모리 양은 32바이트가 됩니다.
Variant는 배열 자체보다 12바이트를 더 차지하는 배열을 가지고 있습니다.
메모 StrConv 함수는 문자열 데이터를 다른 형식의 문자열 데이터로 변환할 때 사용된다.
도움말 끝
<개인 생각>
개인적으로 실수는 Double을, 엑셀의 셀을 참조하기 위한 행, 열 관련 변수는 Long으로 하는 것이 좋다.
이 함수들을 호출하는 서브 프로시저는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Sub CalculateStastic() ' Dim myScore() As Double '동적 배열 선언. 크기가 결정되어 있지 않음. Dim i As Long Dim 평균 As Double Dim 분산 As Double Dim 표준편차 As Double ' '입력 i = 1 Do While Cells(i, 2) <> "" ReDim Preserve myScore(1 To i) '동적 배열의 크기 재설정(ReDim). 이전에 할당된 값을 보존(Preserve). 'Preserve를 하지 않으면, 크기가 재설정되면서 기존의 값은 모두 초기화 ^^; myScore(i) = Cells(i, 2) i = i + 1 Loop ' '계산 평균 = GetMean(myScore) 분산 = GetVariance(myScore) 표준편차 = GetStandardError(myScore) ' '출력 Cells(1, 4) = 평균 Cells(2, 4) = 분산 Cells(3, 4) = 표준편차 End Sub |
위 코드에는 불필요한 중복이 있다. 어떻게 할 것인가?
반복 횟수만큼 실행문을 반복할 때 사용한다.
Option Explicit
Function GetMean(Score() As Double) As Double
Dim L As Long
Dim U As Long
Dim i As Long
Dim sum As Double
‘
L = LBound(Score, 1)
U = UBound(Score, 1)
‘
sum = 0
For i = L To U
sum = sum + Score(i)
Next i
‘
GetMean = sum / (U – L + 1)
End Function
이상은 평균을 구하는 함수이다. 다음은 분산(Variance)를 구하는 함수이다.
Function GetVariance(Score() As Double) As Double
Dim L As Long
Dim U As Long
Dim i As Long
Dim sum As Double
Dim avg As Double
‘
L = LBound(Score, 1)
U = UBound(Score, 1)
‘
avg = GetMean(Score)
‘
sum = 0
For i = L To U
sum = sum + (Score(i) – avg) ^ 2
Next i
‘
GetVariance = sum / (U – L + 1)
End Function
다음은 표준편차를 구하는 함수이다.
Function GetStandardError(Score() As Double) As Double
Dim L As Long
Dim U As Long
Dim i As Long
Dim sum As Double
Dim avg As Double
‘
L = LBound(Score, 1)
U = UBound(Score, 1)
‘
avg = GetMean(Score)
‘
sum = 0
For i = L To U
sum = sum + (Score(i) * Score(i))
Next i
‘
GetStandardError = (sum / (U – L + 1)) – (avg * avg)
End Function
위에는 오류 코드(버그)가 숨겨 있다. 잘 찾아보아 보세요.
프로그래밍의 가장 기본 중의 하나가 If문에 의한 실행의 분기일 것이다.
단순한 분기에서부터 다중 분기까지 가능하다.
성적 점수에 따라 평점(A, B, C, D, F 등으로 표시되는 것. 학점하고 구분)을 반환하는 함수를 작성하라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Public Function GetGrade1(ByVal AverageScore As Single) As String If AverageScore >= 95 Then GetGrade1 = "A+" ElseIf AverageScore >= 90 And AverageScore < 95 Then GetGrade1 = "A0" ElseIf AverageScore >= 85 And AverageScore < 90 Then GetGrade1 = "B+" ElseIf AverageScore >= 80 And AverageScore < 85 Then GetGrade1 = "B0" ElseIf AverageScore >= 75 And AverageScore < 80 Then GetGrade1 = "C+" ElseIf AverageScore >= 70 And AverageScore < 75 Then GetGrade1 = "C0" Else GetGrade1 = "F" End If End Function |
조건이 굉장히 복잡하게 보이지만, 계산 논리를 한번에 알아볼 수 있다. 이렇게 다중 분기하는 경우 다음과 같이 Select문을 생각해 볼 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Public Function GetGrade2(ByVal AverageScore As Double) As String Select Case AverageScore Case 95 To 100 GetGrade2 = "A+" Case 90 To 94 GetGrade2 = "A0" Case 85 To 89 GetGrade2 = "B+" Case 80 To 84 GetGrade2 = "B0" Case 75 To 79 GetGrade2 = "C+" Case 70 To 74 GetGrade2 = "C0" Case Else GetGrade2 = "F" End Select End Function |
이 함수는 심각한 문제를 안고 있다. 즉, 85.5와 같은 점수에 대해서는 “F”를 줄 수 있기 때문이다. Case
간에 비어있는 범위가 생길 수 있다는 점에서 유의해야 한다.
처음 If문을 간결하게 다시 작성하면 다음과 같이 할 수 있다. 여기서 중요하게 볼 것은 처음 조건문은 그 다음 조건문의 필터 역할을 한다는 것이다. 예를들어 85.5점은 처음 조건문부터해서 두번째 조건문까지 만족하지 않는다. 그러나, 세번째 조건문에서는 통과하여 평점을 받게 된다. 즉, 세번째 조건문에 ’90보다 작다’는 필터가 두번째의 조건문을 통해서 만들어진 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Function GetGrade3(ByVal 점수 As Double) As String Dim grade As String = "" If 점수 >= 95 Then grade = "A+" ElseIf 점수 >= 90 Then grade = "A" ElseIf 점수 >= 85 Then grade = "B+" ElseIf 점수 >= 80 Then grade = "B" ElseIf 점수 >= 75 Then grade = "C+" ElseIf 점수 >= 70 Then grade = "C" ElseIf 점수 >= 65 Then grade = "D+" ElseIf 점수 >= 60 Then grade = "D" Else grade = "F" End If GetGrade3 = grade End Function |
주의사항 : 제대로 된 필터 기능을 사용하고자 한다면, 점수가 고득점부터 저득점으로 내려오든, 저득점에서 고득점으로 올라가든, 일정한 순서로 조건문을 배열해야 한다는 점이다.
정령 Select문으로는 해결할 수 없는가?
이것을 Select문으로 바꾸면 다음과 같이 될 것이다.
Is
라는 키워드를 사용하면 다음과 같이 작성할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Function GetGrade4(ByVal 점수 As Double) As String Dim grade As String = "" Select Case 점수 Case Is >= 95 grade = "A+" Case Is >= 90 grade = "A" Case Is >= 85 grade = "B+" Case Is >= 80 grade = "B" Case Is >= 75 grade = "C+" Case Is >= 70 grade = "C" Case Is >= 65 grade = "D+" Case Is >= 60 grade = "D" Case Else grade = "F" End Select GetGrade4 = grade End Function |
이 방법도 Case 점수가 일정한 순서로 배치되어 가능하다는 점을 유의해야 한다.
1) Range 이해
2) Cells
WebDAV에 관한 글들
이 웹페이지는 윈도우와 맥에서 WebDAV를 이용할 수 있도록 어떻게 설정해야 하는지를 설명하고 있음.
2. WebDAV 설정하기
맥에서 어떻게 설정하는지를 설명하고 있음.
윈도우와 아이폰/아이패드의 앱인 한컴오피스뷰어를 연결하는 과정을 설명하고 있음.
You must be logged in to post a comment.