/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Bedre kode...
Fra : Per Juul Larsen


Dato : 26-06-10 20:43

hej..
Jeg har den del opperationer i mit program som dette:
***********

For JJ = 1 To 3000
Antal = 0

For J = 0 To AntalTal - 1

For JJJ = 1 To 17 Step 2
If Val(Tal(J)) = Val(Mid(Plade(JJ, 1), JJJ, 2))
Then Antal = Antal + 1
If Antal = 5 Then
Pladenummer(JJ, 1, 0) = JJ
Pladenummer(JJ, 1, 1) = J
If Val(Enere) > 0 Then

If Val(Alle) = Val(Enere) Then GoTo To1
If Val(Alle) < Val(Enere) Then
Alle = Alle + 1
End If
End If
If Val(Enere) > -1 Then
Rækker(J) = Rækker(J) & ": " & JJ +
12000 & ":01 "
Række1 = Række1 + 1
End If
Antal = 0
End If
Next JJJ
Next J

***************

Kan koden gøres hurtigere

mvh pjl





 
 
cykelsmeden (01-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 01-07-10 14:43

Den 26-06-2010 21:42, Per Juul Larsen skrev:
>
> For JJ = 1 To 3000
> Antal = 0
>
> For J = 0 To AntalTal - 1
>
> For JJJ = 1 To 17 Step 2
> If Val(Tal(J)) = Val(Mid(Plade(JJ, 1), JJJ, 2))
> Then Antal = Antal + 1
> If Antal = 5 Then
> Pladenummer(JJ, 1, 0) = JJ
> Pladenummer(JJ, 1, 1) = J
> If Val(Enere) > 0 Then
>
> If Val(Alle) = Val(Enere) Then GoTo To1
> If Val(Alle) < Val(Enere) Then
> Alle = Alle + 1
> End If
> End If
> If Val(Enere) > -1 Then
> Rækker(J) = Rækker(J) & ": " & JJ +
> 12000 & ":01 "
> Række1 = Række1 + 1
> End If
> Antal = 0
> End If
> Next JJJ
> Next J
nu er det en menneskealder siden, og jeg orker ikke dechiffrere
funktionen, men det slår mig at du flere steder beregner en værdi
(funktionen) "udefor samme løkke"
Jeg mener du henter megen tid ved at sætte en værdi for tallet i hver
tæller og anvende denne.

eks.
> For JJ = 1 To 3000
jjval= val(mid(plade(jj,1)))
> Antal = 0
>
> For J = 0 To AntalTal - 1
jval = val(tal(j))
>
> For JJJ = 1 To 17 Step 2

> If jval = Val(jjval), JJJ, 2))
herved beregner du kun funktionen 3000 gange i stedet for 3000*antaltal*17

håber jeg fik udtrykt mig forståeligt??

finn

Per Juul Larsen (02-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 02-07-10 20:18

Den 01-07-2010 15:43, cykelsmeden skrev:
> Den 26-06-2010 21:42, Per Juul Larsen skrev:
>>
>> For JJ = 1 To 3000
>> Antal = 0
>>
>> For J = 0 To AntalTal - 1
>>
>> For JJJ = 1 To 17 Step 2
>> If Val(Tal(J)) = Val(Mid(Plade(JJ, 1), JJJ, 2))
>> Then Antal = Antal + 1
>> If Antal = 5 Then
>> Pladenummer(JJ, 1, 0) = JJ
>> Pladenummer(JJ, 1, 1) = J
>> If Val(Enere) > 0 Then
>>
>> If Val(Alle) = Val(Enere) Then GoTo To1
>> If Val(Alle) < Val(Enere) Then
>> Alle = Alle + 1
>> End If
>> End If
>> If Val(Enere) > -1 Then
>> Rækker(J) = Rækker(J) & ": " & JJ +
>> 12000 & ":01 "
>> Række1 = Række1 + 1
>> End If
>> Antal = 0
>> End If
>> Next JJJ
>> Next J
> nu er det en menneskealder siden, og jeg orker ikke dechiffrere
> funktionen, men det slår mig at du flere steder beregner en værdi
> (funktionen) "udefor samme løkke"
> Jeg mener du henter megen tid ved at sætte en værdi for tallet i hver
> tæller og anvende denne.
>
> eks.
> > For JJ = 1 To 3000
> jjval= val(mid(plade(jj,1)))
> > Antal = 0
> >
> > For J = 0 To AntalTal - 1
> jval = val(tal(j))
> >
> > For JJJ = 1 To 17 Step 2
>
> > If jval = Val(jjval), JJJ, 2))
> herved beregner du kun funktionen 3000 gange i stedet for 3000*antaltal*17
>
> håber jeg fik udtrykt mig forståeligt??
>
> finn
tak for din tid..

jeg vil undersøge det og håber på at vinde tid..

mvh pjl

cykelsmeden (02-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 02-07-10 23:29

Den 02-07-2010 21:18, Per Juul Larsen skrev:
> det slår mig at du flere steder beregner en værdi
> (funktionen) "udefor samme løkke"
kom lige i tanke om vb i word2003

hvis vi er enige om at følgende kode laver det samme (kun demokode)
Sub maaler()
Dim tid As Double
tid = Timer

For e = 1 To 300
For f = 1 To 300
z = Val(Str(e)) + Val(Str(f))
y = Val(Str(e)) * 5
Next
Next
tid = (Timer - tid) * 1000
Selection.InsertAfter (Str(Int(tid)))

Selection.InsertAfter (Chr(13))

tid = Timer
For e = 1 To 300
x = Val(Str(e))
For f = 1 To 300
z = x + Val(Str(f))
y = x * 5
Next
Next
tid = (Timer - tid) * 1000
Selection.InsertAfter (Str(Int(tid)))

End Sub

så vil du erfare at første kode tager ~500 sek, men anden kode kun tager
~200, altså mere end en halvering ved kun at beregne funktionerne når
variablerne ændres, og istedet sætte dem som simple variabler.


finn

Per Juul Larsen (03-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 03-07-10 07:07

Den 03-07-2010 00:29, cykelsmeden skrev:
> Den 02-07-2010 21:18, Per Juul Larsen skrev:
>> det slår mig at du flere steder beregner en værdi
>> (funktionen) "udefor samme løkke"
> kom lige i tanke om vb i word2003
>
> hvis vi er enige om at følgende kode laver det samme (kun demokode)
> Sub maaler()
> Dim tid As Double
> tid = Timer
>
> For e = 1 To 300
> For f = 1 To 300
> z = Val(Str(e)) + Val(Str(f))
> y = Val(Str(e)) * 5
> Next
> Next
> tid = (Timer - tid) * 1000
> Selection.InsertAfter (Str(Int(tid)))
>
> Selection.InsertAfter (Chr(13))
>
> tid = Timer
> For e = 1 To 300
> x = Val(Str(e))
> For f = 1 To 300
> z = x + Val(Str(f))
> y = x * 5
> Next
> Next
> tid = (Timer - tid) * 1000
> Selection.InsertAfter (Str(Int(tid)))
>
> End Sub
>
> så vil du erfare at første kode tager ~500 sek, men anden kode kun tager
> ~200, altså mere end en halvering ved kun at beregne funktionerne når
> variablerne ændres, og istedet sætte dem som simple variabler.
>
>
> finn
tak for tippet..
Jeg vil nu undersøget koden og håber på at få hentet noget tid hjem.
Programmet er ret gammelt og med tiden glemmer man ideen når koden
genses igen..
Du har givet mig gode tip som jeg kan arbejde med her i fodboldtiden..!
mvh pjl

cykelsmeden (03-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 03-07-10 08:44

Den 03-07-2010 08:07, Per Juul Larsen skrev:
> Programmet er ret gammelt og med tiden glemmer man ideen når koden
> genses igen..
> Du har givet mig gode tip som jeg kan arbejde med her i fodboldtiden..!
> mvh pjl

enere bliver heller ikke ændret i løkken, så den er også kandidat for en
variabel - "enerval", der hvor den ændres:

If Val(Alle) = enerval Then GoTo To1
If Val(Alle) < enerval Then
Alle = Alle + 1

End If
og alle må jo være en værdi (alle = alle+1) hvorfor så val(alle)? giver
den ikke en syntaksfejl?
finn

- men man bliver jo nysgerrig, så fortæl om resultatet!

finn

Per Juul Larsen (03-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 03-07-10 09:34

Den 03-07-2010 09:44, cykelsmeden skrev:
> Den 03-07-2010 08:07, Per Juul Larsen skrev:
>> Programmet er ret gammelt og med tiden glemmer man ideen når koden
>> genses igen..
>> Du har givet mig gode tip som jeg kan arbejde med her i fodboldtiden..!
>> mvh pjl
>
> enere bliver heller ikke ændret i løkken, så den er også kandidat for en
> variabel - "enerval", der hvor den ændres:
>
> If Val(Alle) = enerval Then GoTo To1
> If Val(Alle) < enerval Then
> Alle = Alle + 1
>
> End If
> og alle må jo være en værdi (alle = alle+1) hvorfor så val(alle)? giver
> den ikke en syntaksfejl?
> finn
>
> - men man bliver jo nysgerrig, så fortæl om resultatet!
>
> finn
Tak for din interesse.
Jeg melder mig igen når og hvis jeg får kodet noget bedre iflg. dine
anvisninger.
Jeg var klar over at min kode er håbløs og meldte mig derfor her i
forum.. Det bekræfter min antagelse.. desværre er det mange år side at
jeg sad og nørklede det sammen, så jeg skal igennem det hele igen.
(hukommelsen er svækket af mine nu 67 !)
I virkeligheden indeholder koden samme rutine 9 gange med forskellige
betingelse, og det tager ca. 17 sec at gennemføre en test af talfilen
(12000) linier.

Koden i VB indeholder den samme funktion som et program fra 1988 der er
et dosprogram.. forskellen en ca. 1 sec mod mine 17 sec. !!!
Desværre er sourcekoden til det gamle dos program gået tabt, så jeg har
noget at leve op til !

Overvejer også AWK som er godt til filformatering...

hilsen pjl


cykelsmeden (03-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 03-07-10 10:33

Den 03-07-2010 10:34, Per Juul Larsen skrev:
> (hukommelsen er svækket af mine nu 67 !)
og her sidder man og tror manputter guldkorn ind i hovedet på en knægt!
og så diskuterer man med en jævnaldrende :>)


finn

Per Juul Larsen (03-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 03-07-10 11:43

Den 03-07-2010 11:32, cykelsmeden skrev:
> Den 03-07-2010 10:34, Per Juul Larsen skrev:
>> (hukommelsen er svækket af mine nu 67 !)
> og her sidder man og tror manputter guldkorn ind i hovedet på en knægt!
> og så diskuterer man med en jævnaldrende :>)
>
>
> finn
...netop det spændende ved internettet.. anonymiteten kan gi sjove
overraskelser......

jeg melder tilbage hvis resultatet blir positiv.....
hilsen per

Per Juul Larsen (14-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 14-07-10 20:15

Den 03-07-2010 09:44, cykelsmeden skrev:
> Den 03-07-2010 08:07, Per Juul Larsen skrev:
>> Programmet er ret gammelt og med tiden glemmer man ideen når koden
>> genses igen..
>> Du har givet mig gode tip som jeg kan arbejde med her i fodboldtiden..!
>> mvh pjl
>
> enere bliver heller ikke ændret i løkken, så den er også kandidat for en
> variabel - "enerval", der hvor den ændres:
>
> If Val(Alle) = enerval Then GoTo To1
> If Val(Alle) < enerval Then
> Alle = Alle + 1
>
> End If
> og alle må jo være en værdi (alle = alle+1) hvorfor så val(alle)? giver
> den ikke en syntaksfejl?
> finn
>
> - men man bliver jo nysgerrig, så fortæl om resultatet!
>
> finn

Jeg har arbejdet med koden efter dine anvisninger.. flere parametre er
væk og resultatet ser nu sådan ud..

DoEvents


For JJ = 1 To 12000
antal = 0
For J = 0 To AntalTal - 1
talj = Val(Tal(J))

If Check2.Value = vbChecked Then GoTo Enere

For JJJ = 1 To 17 Step 2


If talj = Val(Mid(Plade(JJ, 1), JJJ, 2)) Then antal = antal + 1

If antal = 5 Then
loops = loops + 1
GoTo Start
rkmeden = rkmeden + 1
antal = 0
End If
Next JJJ
Next J


Enere:
antal = 0
Next JJ

tiden er reduceret kraftigt.. nu ca. 6-8 sec. (oprindelig tog et
gennemløb ca. 40sec.)

Kan der gøres mere her nu ?
Koden chekker en række tal i en fil (12000 linier)
filen ser sådan ud :
*....
1028 56 7483
1 3040 67 86
1529 4357 87
218 37 6472
3 203845 75
*....

tallen checkes op mod tilfældige tal Val(Tal(J))..

Det gamle program er kodet i Clipper, men desværre har jeg mistet
sourcekoden efter så mange år... 1984.
Med Clipper gøres det samme forløb på ca 1 sec. (svært irriterende)...
Noget andet er at "rnd" funktionen i VB er langsom når det drejer sig om
unique tal. For at sikre tal der ikke går igen kører talgeneratoren i et
loop.. sådan her...

For JJ = 1 To AntalTal
Om:
TTal = Int((90 * Rnd) + 1)

For J = 1 To 90
If TTal = rktal(J) Then GoTo Om
Next J

rktal(JJ) = TTal
Tal(JJ - 1) = TTal
Next JJ

mvh pjl

cykelsmeden (14-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 14-07-10 23:11

Den 14-07-2010 21:15, Per Juul Larsen skrev:
Umiddelbart har jeg ikke bedre forslag, men som tidligere nævnt, er jeg
IKKE talmand :)


> For at sikre tal der ikke går igen kører talgeneratoren i et loop..
> sådan her...
>
> For JJ = 1 To AntalTal
> Om:
> TTal = Int((90 * Rnd) + 1)
>
> For J = 1 To 90
> If TTal = rktal(J) Then GoTo Om
> Next J
>
> rktal(JJ) = TTal
> Tal(JJ - 1) = TTal
> Next JJ

synes jeg ser meget kompleks ud. Jeg husker at forskellige sprog har
variationer hvordan rnd() virker, men burde den ikke kunne strikkes bedre?

som jeg forstår har du et antaltal som du henter 90 ad gangen og skal så
pille et tilfældigt tal ud ??
hvis så burde det være simplere!

finn

cykelsmeden (15-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 15-07-10 00:39

Den 15-07-2010 00:11, cykelsmeden skrev:
> Den 14-07-2010 21:15, Per Juul Larsen skrev:
> Umiddelbart har jeg ikke bedre forslag, men som tidligere nævnt, er jeg
> IKKE talmand :)
>
>
>> For at sikre tal der ikke går igen kører talgeneratoren i et loop..
>> sådan her...
>>
>> For JJ = 1 To AntalTal
>> Om:
>> TTal = Int((90 * Rnd) + 1)
>>
>> For J = 1 To 90
>> If TTal = rktal(J) Then GoTo Om
>> Next J
>>
>> rktal(JJ) = TTal
>> Tal(JJ - 1) = TTal
>> Next JJ
>
> synes jeg ser meget kompleks ud. Jeg husker at forskellige sprog har
> variationer hvordan rnd() virker, men burde den ikke kunne strikkes bedre?
>
> som jeg forstår har du et antaltal som du henter 90 ad gangen og skal så
> pille et tilfældigt tal ud ??
> hvis så burde det være simplere!
>
> finn
hvis jeg har forstået opgaven, ville min vej være at huske en matrise.
opslag er formodentligt markant hurtigere end rnd(), så vælg kun rnd()
for tal som ikke har været udtrukket, ala:
;lav et 2dim skema
dim tal 90,1
;sæt kol1 = 0-90 og kol2 false
for j = 0 to 90
tal (J,0)= j
tal (j,1)= 0
next
;find tal
for jj = 1 to antaltal
;find tilfældigt
n= int((90 * rnd) +1)
; har vi haft det spild ikke rnd
if tal (n,1) = 1
then
next
;ellers brug det
else
rktal(jj) = n
;og husk det er brugt
tal(j,1) = 1
next

her findes rnd() og int() max de 90 gange pr iteration og ikke 90*rnd()

finn

Per Juul Larsen (15-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 15-07-10 23:00

Den 15-07-2010 01:39, cykelsmeden skrev:
> Den 15-07-2010 00:11, cykelsmeden skrev:
>> Den 14-07-2010 21:15, Per Juul Larsen skrev:
>> Umiddelbart har jeg ikke bedre forslag, men som tidligere nævnt, er jeg
>> IKKE talmand :)
>>
>>
>>> For at sikre tal der ikke går igen kører talgeneratoren i et loop..
>>> sådan her...
>>>
>>> For JJ = 1 To AntalTal
>>> Om:
>>> TTal = Int((90 * Rnd) + 1)
>>>
>>> For J = 1 To 90
>>> If TTal = rktal(J) Then GoTo Om
>>> Next J
>>>
>>> rktal(JJ) = TTal
>>> Tal(JJ - 1) = TTal
>>> Next JJ
>>
>> synes jeg ser meget kompleks ud. Jeg husker at forskellige sprog har
>> variationer hvordan rnd() virker, men burde den ikke kunne strikkes
>> bedre?
>>
>> som jeg forstår har du et antaltal som du henter 90 ad gangen og skal så
>> pille et tilfældigt tal ud ??
>> hvis så burde det være simplere!
>>
>> finn
> hvis jeg har forstået opgaven, ville min vej være at huske en matrise.
> opslag er formodentligt markant hurtigere end rnd(), så vælg kun rnd()
> for tal som ikke har været udtrukket, ala:
> ;lav et 2dim skema
> dim tal 90,1
> ;sæt kol1 = 0-90 og kol2 false
> for j = 0 to 90
> tal (J,0)= j
> tal (j,1)= 0
> next
> ;find tal
> for jj = 1 to antaltal
> ;find tilfældigt
> n= int((90 * rnd) +1)
> ; har vi haft det spild ikke rnd
> if tal (n,1) = 1
> then
> next
> ;ellers brug det
> else
> rktal(jj) = n
> ;og husk det er brugt
> tal(j,1) = 1
> next
>
> her findes rnd() og int() max de 90 gange pr iteration og ikke 90*rnd()
>
> finn
...du koder..!
" if tal (n,1) = 1
> then
> next"

next ... mener du next til n= int((90 * rnd) +1)?
her bruger jeg "Then GoTo Om"..

fandt iøvrigt en funktion på nettet efter dit princip og den finder
dubletter hurtigere..
Din kode ligner VB med lidt variationer. Meningen er dog begribelig, så
jeg er kommet langt nu.

hilsen pjl



cykelsmeden (16-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 16-07-10 14:42

Den 16-07-2010 00:00, Per Juul Larsen skrev:
> her bruger jeg "Then GoTo Om"..
ok, goto er en instruktion jeg KUN bruger hvis jeg ikke kan andet - det
sker sjældent


> fandt iøvrigt en funktion på nettet efter dit princip og den finder
> dubletter hurtigere..
herligt
> Din kode ligner VB med lidt variationer. Meningen er dog begribelig, så
> jeg er kommet langt nu.
med forbehold for klummer, vil den virke i de fleste basic
Men klummer kan sagtens opstå når det er 10+ år siden sidst, og jeg har
programmeret i de fleste sprog fra Cobol, via Comal, msBasic, vbBasic
dBase, xx-pascal, delphi til en kort berøring med perl
- savner det faktisk lidt!
iøvrigt havde jeg på et tidspunkt et projekt i Clipper - har glemt alt
om det, men var det ikke forbundet med dBase på en eller anden vis?
finn


Per Juul Larsen (16-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 16-07-10 15:41

Den 16-07-2010 15:42, cykelsmeden skrev:
> Den 16-07-2010 00:00, Per Juul Larsen skrev:
>> her bruger jeg "Then GoTo Om"..
> ok, goto er en instruktion jeg KUN bruger hvis jeg ikke kan andet - det
> sker sjældent
>
>
>> fandt iøvrigt en funktion på nettet efter dit princip og den finder
>> dubletter hurtigere..
> herligt
>> Din kode ligner VB med lidt variationer. Meningen er dog begribelig, så
>> jeg er kommet langt nu.
> med forbehold for klummer, vil den virke i de fleste basic
> Men klummer kan sagtens opstå når det er 10+ år siden sidst, og jeg har
> programmeret i de fleste sprog fra Cobol, via Comal, msBasic, vbBasic
> dBase, xx-pascal, delphi til en kort berøring med perl
> - savner det faktisk lidt!
> iøvrigt havde jeg på et tidspunkt et projekt i Clipper - har glemt alt
> om det, men var det ikke forbundet med dBase på en eller anden vis?
> finn
>

jo du har ret...
Clipper var den første dBase compiler..
Jeg fik formateret mange textfiler med det program... inden for
Elektronik var det styklister sammen med tegneprogrammet Orcad.
Der eksisterer en Windows version af Clipper men den blev overhalet og
forsvandt..
i dag syntes det meningsløst at skrive et helt program i hånden uden GUI
men det gik... programmer var hvad angår hastig , windows baserede langt
overlegne.

hilsen pjl


cykelsmeden (01-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 01-07-10 16:29

Den 26-06-2010 21:42, Per Juul Larsen skrev:
> hej..
> Jeg har den del opperationer i mit program som dette:
> ***********
>
> For JJ = 1 To 3000
> Antal = 0
>
> For J = 0 To AntalTal - 1
>
> For JJJ = 1 To 17 Step 2
> If Val(Tal(J)) = Val(Mid(Plade(JJ, 1), JJJ, 2))
> Then Antal = Antal + 1
> If Antal = 5 Then
> Pladenummer(JJ, 1, 0) = JJ
> Pladenummer(JJ, 1, 1) = J
> If Val(Enere) > 0 Then
>
> If Val(Alle) = Val(Enere) Then GoTo To1
> If Val(Alle) < Val(Enere) Then
> Alle = Alle + 1
> End If
> End If
> If Val(Enere) > -1 Then
> Rækker(J) = Rækker(J) & ": " & JJ +
> 12000 & ":01 "
> Række1 = Række1 + 1
> End If
> Antal = 0
> End If
> Next JJJ
> Next J
>
> ***************
>
> Kan koden gøres hurtigere

nu har jeg som nævnt ikke hverken vb eller delphi installeret, men med
forbehold for kvajning, vil jeg mene der er tid hentet i følgende:
For JJ = 1 To 3000
Antal = 0

nn1 = val(enere)

For J = 0 To AntalTal - 1
talj= val(tal(j))

For JJJ = 1 To 17 Step 2
If talj = Val(Mid(Plade(JJ, 1), JJJ, 2)) Then
Antal = Antal + 1


If Antal = 5 Then
Pladenummer(JJ, 1, 0) = JJ
Pladenummer(JJ, 1, 1) = J
If nn1 > 0 Then

If nn2 = nn1) Then GoTo To1
If nn2 < nn1) Then
Alle = Alle + 1
nn2=val(alle))
End If
End If
If nn1) > -1 Then
Rækker(J) = Rækker(J) & ": " & JJ +
12000 & ":01 "
Række1 = Række1 + 1
End If
Antal = 0
End If
Next JJJ
Next J


- jeg mener også der må kunne reduceres i mid-funktionen, ved at trække
jjfunktionen ud af løkken.

din goto to 1 har ikke indflydelse på performance, men er ikke en køn
exit

Per Juul Larsen (06-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 06-07-10 19:11

Den 01-07-2010 17:28, cykelsmeden skrev:
> Den 26-06-2010 21:42, Per Juul Larsen skrev:
>> hej..
>> Jeg har den del opperationer i mit program som dette:
>> ***********
>>
>> For JJ = 1 To 3000
>> Antal = 0
>>
>> For J = 0 To AntalTal - 1
>>
>> For JJJ = 1 To 17 Step 2
>> If Val(Tal(J)) = Val(Mid(Plade(JJ, 1), JJJ, 2))
>> Then Antal = Antal + 1
>> If Antal = 5 Then
>> Pladenummer(JJ, 1, 0) = JJ
>> Pladenummer(JJ, 1, 1) = J
>> If Val(Enere) > 0 Then
>>
>> If Val(Alle) = Val(Enere) Then GoTo To1
>> If Val(Alle) < Val(Enere) Then
>> Alle = Alle + 1
>> End If
>> End If
>> If Val(Enere) > -1 Then
>> Rækker(J) = Rækker(J) & ": " & JJ +
>> 12000 & ":01 "
>> Række1 = Række1 + 1
>> End If
>> Antal = 0
>> End If
>> Next JJJ
>> Next J
>>
>> ***************
>>
>> Kan koden gøres hurtigere
>
> nu har jeg som nævnt ikke hverken vb eller delphi installeret, men med
> forbehold for kvajning, vil jeg mene der er tid hentet i følgende:
> For JJ = 1 To 3000
> Antal = 0
>
> nn1 = val(enere)
>
> For J = 0 To AntalTal - 1
> talj= val(tal(j))
>
> For JJJ = 1 To 17 Step 2
> If talj = Val(Mid(Plade(JJ, 1), JJJ, 2)) Then Antal = Antal + 1
>
>
> If Antal = 5 Then
> Pladenummer(JJ, 1, 0) = JJ
> Pladenummer(JJ, 1, 1) = J
> If nn1 > 0 Then
>
> If nn2 = nn1) Then GoTo To1
> If nn2 < nn1) Then
> Alle = Alle + 1
> nn2=val(alle))
> End If
> End If
> If nn1) > -1 Then
> Rækker(J) = Rækker(J) & ": " & JJ + 12000 & ":01 "
> Række1 = Række1 + 1
> End If
> Antal = 0
> End If
> Next JJJ
> Next J
>
>
> - jeg mener også der må kunne reduceres i mid-funktionen, ved at trække
> jjfunktionen ud af løkken.
>
> din goto to 1 har ikke indflydelse på performance, men er ikke en køn
> exit
Har testet koden og den fungerer fint.. min tid var 48 sec., din kode
ca. 25 sec... så du har ret i at tiden halveres.
Tak for hjælpen..den minder om at det ikke er ligegyldigt hvordan man
koder...!
Du har foreslået andre tiltag...dem har jeg dog ikke testet endnu.. så
det er din oprindelige kode som fungerer fint i første test!!
mvh per

cykelsmeden (13-07-2010)
Kommentar
Fra : cykelsmeden


Dato : 13-07-10 12:38

Den 06-07-2010 20:11, Per Juul Larsen skrev:
> det ikke er ligegyldigt hvordan man koder...!

Har aldrig glemt min første kode (maskinsprog til 6502) som fandt alle
primtallene mellem 1 og 100.
Det tog dapsen ~3 timer.
En lille snak med en matematiker (~16 år)og tiden blev reduceret til ~10
min

dapsen blev iøvrigt programmeret med en 8bit dipswitch og et ringetryk

finn

Per Juul Larsen (13-07-2010)
Kommentar
Fra : Per Juul Larsen


Dato : 13-07-10 21:32

Den 13-07-2010 13:38, cykelsmeden skrev:
> Den 06-07-2010 20:11, Per Juul Larsen skrev:
>> det ikke er ligegyldigt hvordan man koder...!
>
> Har aldrig glemt min første kode (maskinsprog til 6502) som fandt alle
> primtallene mellem 1 og 100.
> Det tog dapsen ~3 timer.
> En lille snak med en matematiker (~16 år)og tiden blev reduceret til ~10
> min
>
> dapsen blev iøvrigt programmeret med en 8bit dipswitch og et ringetryk
>
> finn
...
den husker jeg udmærket men først senere ændrede jeg opfattelse af
"microcomputerne"... på mit første microprocessor kursus, skulle vi
evaluere undervisningen... min holdning var at den slags "værktøj"
aldrig blev populært.. uden interface var det håbløst!.. og se så hvad
styresystemerne gjorde med tiden..!..
mvh pjl

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409070
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste