Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Optimera denna programkod...

Postades av 2001-08-15 13:17:00 - Pelle Johansson, i forum visual basic - allmänt, Tråden har 9 Kommentarer och lästs av 635 personer

En medlem (suzanne) undrade hur man skulle göra och nu tror jag att jag skall ge er en uppgift. Se till att koden optimeras i antalet tecken programkod när det gäller att (skala) bort alla från Malmö. Jag försökte skriva så hon skulle förstå det bättre (en uppgift från skolan).

Tänk oss följande. Bokningssystem för tåg, alla till malmö skall bort för det går bara mellan stockholm och göteborg denna dag...

<code>
Option Explicit
Private Const MAX As Integer = 100

Private Type PersonTyp
namn As String
adress As String
alder As Integer
End Type

Private Type FlightTyp
passagerare(1 To MAX) As PersonTyp
antalpassagerare As Integer
End Type

Private Sub Form_Load()

Dim enFlygning As FlightTyp

' registrerar fyra passagerare som skall flyga
enFlygning.antalpassagerare = 4

enFlygning.passagerare(1).namn = "emma"
enFlygning.passagerare(1).alder = 21
enFlygning.passagerare(1).adress = "stockholm"

enFlygning.passagerare(2).namn = "sara"
enFlygning.passagerare(2).alder = 31
enFlygning.passagerare(2).adress = "malmö"

enFlygning.passagerare(3).namn = "pelle"
enFlygning.passagerare(3).alder = 41
enFlygning.passagerare(3).adress = "göteborg"

enFlygning.passagerare(4).namn = "lasse"
enFlygning.passagerare(4).alder = 51
enFlygning.passagerare(4).adress = "malmö"


' Raderar alla som skall åka till malmö för mellanlandningen
' dit blir inställd, vilka skall då åka med i planet?

Dim a, b
With enFlygning
For a = 1 To .antalpassagerare

' tar reda på vilken passagerare som bor i malmö
If .passagerare(a).adress = "malmö" Then

' vi tar det sista objektet i listan och flyttar in det här
' istället.

' försök inte gå förbi sista objektet
If a > .antalpassagerare Then Exit For

' kan vi ta den sista posten eller är det också malmö.
' om det är det, ta näst sista osv..
b = a
Do
If .passagerare(b).adress = "malmö" Then
.antalpassagerare = .antalpassagerare - 1
Exit Do
End If
b = b + 1

' se till att vi inte loopar före första posten
If .antalpassagerare <= 0 Then Exit For

Loop

' ersätt aktuell passagerare med sista godkända i listan
.passagerare(a) = .passagerare(.antalpassagerare)

' Samtidigt minskar vi .antalpassagerare med 1
' för att inte använda det igen..
.antalpassagerare = .antalpassagerare - 1

End If
Next

' skriver nu ut resultatet efter att radera alla från malmö
For a = 1 To .antalpassagerare
Debug.Print .passagerare(a).namn
Next

' det som händer nu är att objektet 2 är raderat och ersatt
' av objektet 4. Om man tittar på hur det egentligen ser ut
' om vi låter den loopa igenom arrayen ser det ut såhär..

Debug.Print "-- array i verklighet --"

For a = 1 To 4
Debug.Print .passagerare(a).namn
Next


End With

End Sub
</code>


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 13:37:00 - Niklas Jansson

Med "tecken programkod" menar du då alltsammans (exkl. kommentar och procedurnamn osv.) eller koden som skalar bort alla från Malmö enbart ?


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 15:35:00 - Jens Kangosjärvi

Jag gjorde lite annorlunda med typen, men den kan man egentligen ta bort

Option Explicit
Private Type Flight
PassangerarInfo() As String
AntalPassangerare As Long
End Type

Private Sub Command1_Click()

Dim enFlygning As Flight
Const NAMN = 1
Const ORT = 2
Const ALDER = 3
Dim lNr As Long
Dim lCount As Long

With enFlygning
.AntalPassangerare = 3
ReDim .PassangerarInfo(1 To 3, 1 To .AntalPassangerare)
.PassangerarInfo(NAMN, 1) = "Anna"
.PassangerarInfo(ORT, 1) = "Malmö"
.PassangerarInfo(ALDER, 1) = "15"
.PassangerarInfo(NAMN, 2) = "Nisse"
.PassangerarInfo(ORT, 2) = "GBG"
.PassangerarInfo(ALDER, 2) = "30"
.PassangerarInfo(NAMN, 3) = "Kalle"
.PassangerarInfo(ORT, 3) = "Malmö"
.PassangerarInfo(ALDER, 3) = "67"

For lNr = 1 To UBound(.PassangerarInfo, 2)
' försök inte gå förbi sista objektet
If lNr > UBound(.PassangerarInfo, 2) Then Exit For

' Ifall orten är Malmö...
If LCase$(.PassangerarInfo(ORT, lNr)) = "malmö" Then
'...tar sista passageraren öv platsen...
For lCount = 1 To 3
.PassangerarInfo(lCount, lNr) = .PassangerarInfo(lCount, UBound(.PassangerarInfo, 2))
Next
'...och sista platsen raderas
ReDim Preserve .PassangerarInfo(1 To 3, 1 To UBound(.PassangerarInfo, 2) - 1)

'Kör om samma 'Plats' för att se om sisata passageraren ska till malmö
If lNr > 0 Then lNr = lNr - 1
End If

Next

'Om man behöver detta värde....
.AntalPassangerare = UBound(.PassangerarInfo, 2)

For lNr = 1 To .AntalPassangerare
Debug.Print .PassangerarInfo(NAMN, lNr) & vbTab & .PassangerarInfo(ORT, lNr)
Next

End With
End Sub


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 16:07:00 - Niklas Jansson

eller så här (flighttyp osv. är samma):

Private Sub Form_Load()

Dim enFlygning As FlightTyp
Dim UtanMalmö As FlightTyp
Dim Person As PersonTyp

With enFlygning
.antalpassagerare = 4
With .passagerare(1)
.namn = "emma"
.alder = 21
.adress = "stockholm"
End with
With .passagerare(2)
.namn = "sara"
.alder = 31
.adress = "malmö"
End with
With .passagerare(3)
.namn = "pelle"
.alder = 41
.adress = "göteborg"
End with
With .passagerare(4)
.namn = "lasse"
.alder = 51
.adress = "malmö"
End with
For Each Person In enFlygning
If UCase$(Person.adress)="MALMÖ" Then
With UtanMalmö
.AntalPassagerare=.AntalPassagerare+1
.Passagerare(.AntalPassagerare)=Person
End With
End If
Next

'Om du nödvändigtvis måste ha dem i enFlygning
enFlygning=UtanMalmö
End sub


/Niklas Jansson


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 16:21:00 - Jens Kangosjärvi

Ok, så kan man också göra, men är inte det onödigt resurskrävande :)


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 17:11:00 - Niklas Jansson

Inte så värst... en extra Flight och en extra Person.
Vill man inte slösa så mycket minne kan man ju köra med dynamiska arrayer...
Det ger ingen stor skillnad i koden, men det är svårare att förstå.

/Niklas Jansson


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 17:27:00 - Jens Kangosjärvi

Hmm, testade din grej:
For Each can only iterate over a collection object or an array


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 18:12:00 - Andreas Hillqvist

Här kommer mitt förslag:

Option Explicit
Option Compare Text

Private Const MAX As Integer = 100

Private Type PersonTyp
namn As String
adress As String
alder As Integer
End Type

Private Type FlightTyp
passagerare(1 To MAX) As PersonTyp
antalpassagerare As Integer
End Type

Private Sub Form_Load()
Dim enFlygning As FlightTyp
Dim a As Long, Offset As Long
With enFlygning
' registrerar fyra passagerare som skall flyga
.antalpassagerare = 4

.passagerare(1) = GP("emma", 21, "stockholm")
.passagerare(2) = GP("sara", 31, "malmö")
.passagerare(3) = GP("pelle", 41, "göteborg")
.passagerare(4) = GP("lasse", 51, "malmö")

' Raderar alla som skall åka till malmö för mellanlandningen
' dit blir inställd, vilka skall då åka med i planet?

For a = 1 To .antalpassagerare
If .passagerare(a).adress = "malmö" Then
Offset = Offset + 1
ElseIf Offset Then
.passagerare(a - Offset) = .passagerare(a)
End If
Next
.antalpassagerare = .antalpassagerare - Offset

' skriver nu ut resultatet efter att radera alla från malmö
For a = 1 To .antalpassagerare
Debug.Print .passagerare(a).namn
Next

' det som händer nu är att objektet 2 är raderat och ersatt
' av objektet 4. Om man tittar på hur det egentligen ser ut
' om vi låter den loopa igenom arrayen ser det ut såhär..

Debug.Print "-- array i verklighet --"

For a = 1 To 4
Debug.Print .passagerare(a).namn
Next
End With

End Sub

Private Function GP(namn As String, alder As Integer, adress As String) As PersonTyp
GP.namn = namn
GP.alder = alder
GP.adress = adress
End Function

Nu länar den ju kvar passagerare utanför Antalet passagerare.
Vill man tömma dessa, ändrar man i IF sattsen:

If .passagerare(a).adress = "malmö" Then
Offset = Offset + 1
.passagerare(a) = GP("", 0, "")
ElseIf Offset Then
.passagerare(a - Offset) = .passagerare(a)
.passagerare(a) = GP("", 0, "")
End If


Svara

Sv: Optimera denna programkod...

Postades av 2001-08-15 19:48:00 - Niklas Jansson

ok då.
For i =1 to MAX
byt ut alla Person mot .Passagerare(i)...

/Niklas Jansson


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 621
27 953
271 709
554
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies