Klarar du gamla högskoletentor i VB? Hej Private Sub Uppgift1(SourceFile As String, DestFile As String) Hej Andreas Hillqvist hej! Hej Option Explicit 'FormulärkodTesta dig...
Jag håller själv på och försöker lösa frågorna, skicka gärna lösningarna så att "vi" alla kan få ta del av dem.
Nedan följer några frågor från en tenta.
Fråga1. (20p)
Skriv ett program (inga delprocedurer behövs) som läser in data från en sekventiell fil (Text1.txt). Varje rad i filen innehåller 2 st ord (enbart bokstäver) åtskijlda genom ett mellanslag. Kasta om ordningsföljden på tecken i varje rad och se till att första tecknet efter mellanslaget efter omkastning blir en stor bokstav och skriv deatta till en ny fil (Text2.txt)
Ett litet exempel på hur filerna skulle kunna se ut:
text1.txt
och julen
varar väl
till påska
text2.txt
neluj Hco
läv Rarav
askåp Llit
Uppgift 2 (50p)
Följande deklarationer och kod är given:
Option Explicit 'Modulkod
Public Const MAX As Integer = 100
Public Type PersonTyp
namn As String
adress As String
alder As Integer
End Type
Public Type FlightType
passagerare (1 To MAX) As PersonTyp
antalPassagerare As Integer 'aktuellt antal passagerare
End Type
Option Explicit 'Formulärkod
Dim flygning As FlightTyp
1. Skriv en subrutin "yngst" som returnerar namn på den yngste passageraren med adress Malmö. Avnänd lämpliga parametrar (15p)
2. Skriv en subrutin "kopiera" som till en array av PersoTyp lägger all information om personer med adress Eslöv. Användlämpliga parametrar (20p)
3. Skriv en function "lundaBor" som returnerar genomsnittliga åldern på passagerare med adress Lund. Använd lämpliga paramatrar (15p)Sv: Testa dig...
Så här löste jag delprov 1
Option Explicit
'E:\Text1.txt
'konståkerska skridsko
'cykel pedal
'universum andromeda
Private Sub Command1_Click()
Dim SplitArr() As String, ReversArr(5) As String
Dim FileNum As Long, incr As Long, i As Long
Dim tmpStr As String
FileNum = FreeFile
Open "E:\Text1.txt" For Input As #FileNum
Do Until EOF(FileNum)
Line Input #FileNum, tmpStr
tmpStr = StrReverse(tmpStr)
SplitArr = Split(tmpStr)
ReversArr(incr) = SplitArr(0) & " "
incr = incr + 1
'Det skiljer alltid 32 mellan UCase LCase
Mid$(SplitArr(1), 1) = Chr$(Asc(Left$(SplitArr(1), 1)) - 32)
ReversArr(incr) = SplitArr(1)
incr = incr + 1
Loop
Close #FileNum
'*******************
FileNum = FreeFile
Open "E:\Text2.txt" For Output As #FileNum
For i = 0 To UBound(ReversArr) Step 2
tmpStr = ReversArr(i) & ReversArr(i + 1)
Print #FileNum, tmpStr
Next 'i
Close #FileNum
End Sub
mvh
SvenSv: Testa dig...
Dim intPos As Integer
Dim DestNo As Integer
Dim strLine As String
Dim SourceNo As Integer
SourceNo = FreeFile()
Open SourceFile For Input As #SourceNo
DestNo = FreeFile()
Open DestFile For Output As #DestNo
Do Until EOF(SourceNo)
Line Input #SourceNo, strLine
strLine = StrReverse(strLine)
intPos = InStr(1, strLine, " ", vbBinaryCompare)
If intPos Then
intPos = intPos + 1
Mid$(strLine, intPos, 1) = UCase$(Mid$(strLine, intPos, 1))
End If
Print #DestNo, strLine
Loop
Close #DestNo
Close #SourceNo
End SubSv: Testa dig...
Den var vacker. Förstår inte riktigt vad vbBinaryCompare
gör här (på riktigt). Fö. tycker jag att det är onödigt att deklarera som
Integer i ett 32 bits system
Men Än en gång . Den Var Vacker !
mvh
SvenSv: Testa dig...
Man har hela 4 timmar på sig på dessa tentor..
men som nybörjare (som jag själv) så kan det bli knegigt ändå.
Tack alla som försökt sig på uppgifterna..
Mvh
DraganSv: Testa dig...
Jag snodde ihop mitt första ex på 25 minuter fritt
ur minnet. Utvecklingen går framåt Andreas lösning
skulle jag aldrig komma på.
Skall med stor frennesi angripa prov 2.
mvh
SvenSv: Testa dig...
Dim flygning As FlightType
'1. Skriv en subrutin "yngst" som returnerar namn på den yngste passageraren med adress Malmö. Avnänd lämpliga parametrar (15p)
Private Sub yngst(Svar As String)
Dim I As Long
Dim Age As Long
For I = 1 To 100
With flygning.passagerare(I)
If .adress = "Malmö" Then
If Age Then
If .alder < Age Then
Age = .alder
Svar = .namn
End If
Else
Age = .alder
Svar = .namn
End If
End If
End With
Next
End Sub
'2. Skriv en subrutin "kopiera" som till en array av PersoTyp lägger all information om personer med adress Eslöv. Använd lämpliga parametrar (20p)
Private Sub kopiera(Personer() As PersonTyp)
Dim I As Long
Dim Count As Long
For I = 1 To 100
With flygning.passagerare(I)
If .adress = "Eslöv" Then
Count = Count + 1
ReDim Preserve Personer(1 To Count)
Personer(Count) = flygning.passagerare(I)
End If
End With
Next
End Sub
'3. Skriv en function "lundaBor" som returnerar genomsnittliga åldern på passagerare med adress Lund. Använd lämpliga paramatrar (15p)
Private Function LundaBor() As Double
Dim I As Long
Dim Count As Long
Dim Sum As Long
For I = 1 To 100
With flygning.passagerare(I)
If .adress = "Lund" Then
Count = Count + 1
Sum = Sum + .alder
End If
End With
Next
If Count Then
LundaBor = Sum / Count
End If
End Function