문제가 난이도가 있네요...실제로 출제되기는 어렵겠습니다. (수준이 상당하시네요.^^)
문제 풀이의 핵심은 공장코드별 합계를 구하는 거죠...
우리는 일반적으로 A일때 B일때 이런식으로 표처리를 많이 했는데...어떤 문자가 올지 모르니 IF문,Select문을 이용해서 모든 문자에 대해 조건을 처리하기는 어렵습니다. 그럼...어떻게 해결해야 할까요? 내장함수를 하나더 공부하셔야 합니다. 뭐냐하면...
문자를 아스키코드값(정수)으로 변환하는 내장함수입니다.=>Asc()
그리고, 또 하나는 문제가 최대값을 구하라는 문제이지만 정렬로 풀이 하셔야 합니다.
왜냐하면,....배열변수에 저장하고 그 값들 중에서 최대값을 구해야 하므로 최대값을 구하라고 하면 배열변수를 내림차순하고 첫번째 값을 출력하면 됩니다. 그리고 최소값은 오름차순후 첫번째 값을 출력하면 되겠죠^^ 이해가 되시는지...
문자별 아스키코드값은 자료실에 올려놓겠습니다. 참고하세요. 그럼 소스 들어갑니다.^^
Option Explicit
Sub main()
''''필수 변수 선언 Dim 인수1, 인수2, i, 버퍼 As Variant ''''핵심 변수 선언 Dim 단가, 공장코드, 매출액(1000), j, Temp, Num As Variant ''''인수 처리 인수1 = Val(Left(Command, InStr(Command, " "))) 인수2 = Val(Mid(Command, InStr(Command, " "))) ''''입력 파일 처리 Open "c:\c_it\data\abc0005.txt" For Input As #1 For i = 1 To 인수2 Line Input #1, 버퍼 If i >= 인수1 Then ''''변수 저장 단가 = Val(Mid(버퍼, 12, 3)) 공장코드 = Trim(Mid(버퍼, 18, 1)) ''''공장코드별 매출액 합계 (공장코드를 아스키코드값으로 변환하여 배열변수 위치를 정함) ''''Asc() 는 문자의 아스키코드값을 반환함. If 단가 >= 30 Then Num = Asc(공장코드) 매출액(Num) = 매출액(Num) + Val(Mid(버퍼, 26, 3)) End If End If Next i ''''매출액 배열변수 중에서 내림차순 정렬후 첫번째값을 출력하면 됨=>매출액(1) ''''정렬(매출액 내림차순) 주의:Num번째까지가 아니라 1,000번째 까지입니다. For i = 1 To 1000 For j = i To 1000 If 매출액(i) < 매출액(j) Then Temp = 매출액(i) 매출액(i) = 매출액(j) 매출액(j) = Temp End If Next j Next i Close #1 ''''출력 파일 처리 Open "c:\c_it\data\ans1.txt" For Output As #2 Print #2, 인수1, 인수2, 매출액(1) Close #2 End Sub |