Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Visual Basic

Frage Entwicklung Visual Studio

Mitglied: libertes

libertes (Level 1) - Jetzt verbinden

21.02.2010 um 13:58 Uhr, 3535 Aufrufe, 20 Kommentare

Hey ,bin hier neu auf der Plattform,deshalb sorry wenn ich mich noch nicht so gut auskenne.
Mein Propblem sieht so aus;

For i = 1000 to 9999
If i mod 17 = 0 then
Ergebnis = Ergebnis +1
End If
Next
MsgBox "Ergebnis"

Eigentlich sollte mir die Msgbox alle Zahlen zwischen 1000 und 9999 auflisten die durch 17 teilbar sind.
Leider funktioniert dies nicht,

Kann mir jemand sagen was an der syntax falsch ist ?

Gruß
libertes
Mitglied: StefanKittel
21.02.2010 um 14:05 Uhr
Zitat von libertes:
MsgBox "Ergebnis"
Hallo,
ohne " -> MsgBox Ergebnis
Stefan
Bitte warten ..
Mitglied: libertes
21.02.2010 um 14:16 Uhr
Dim Ergebnis As String
For i = 1000 To 9999
If mod 17 to 0 then
Ergebnis = Ergebnis + 1
End If

Next
MsgBox(Ergebnis)

Hallo Stefan,
funktioniert noch immer nicht.
Das ist der komplette Text,wobei er Ergebnis automatisch in klammer setzt.

libertes
Bitte warten ..
Mitglied: StefanKittel
21.02.2010 um 14:23 Uhr
Zitat von libertes:
Dim Ergebnis As String
Ergebnis sollte ja nun auch kein String sein. Ich bin nun nicht der vba fraggle, aber versuch mal long.

Stefan
Bitte warten ..
Mitglied: libertes
21.02.2010 um 14:31 Uhr
Danke Stefan werde es versuchen
Gruß
libertes
Bitte warten ..
Mitglied: hpbruns
21.02.2010 um 14:54 Uhr
Hmmm, kurze Frage.
Was wilst Du denn ausgeben? Einen Zähler, der die Anzahl der gefundenen Treffer ausgibt, oder aber die Zahl, die durch 17 teilbar ist?
Und unter welcher Umgebung (VB6, VBA, .Net)?

Das was Du da machst führt eher zu nix.

Gruß

HaPe
Bitte warten ..
Mitglied: libertes
21.02.2010 um 15:15 Uhr
Hey,
Einen Zähler, der die Anzahl der gefundenen Treffer ausgibt

Und zwar in VB.Net
Gruß
libertes
Bitte warten ..
Mitglied: 76109
21.02.2010 um 15:22 Uhr
Hallo libertes!

Funktioniert besser, wenn Du
1. Einen Zähler als Integer definierst (String = Text, Integer = Zahl)
2. Auch was zum Teilen nimmst (Nothing Mod 17)

01.
Dim Ergebnis As Integer 
02.
 
03.
For i = 1000 To 9999 
04.
    If i Mod 17 = 0 Then Ergebnis = Ergebnis + 1 
05.
Next 
06.
 
07.
MsgBox Ergebnis
Gruß Dieter
Bitte warten ..
Mitglied: hpbruns
21.02.2010 um 15:22 Uhr
Dan n versuche es mal so:

Dim i As Integer
Dim iCounter As Integer

'Anzahl der Treffer (erst mal auf 0 setzten)
iCounter = 0

For i = 1000 To 9999
If i Mod 17 = 0 Then
iCounter = iCounter + 1
End If
Next

'Nach durchlauf der Schleife das Ergebnis ausgeben (Anzahl der Treffer)
MsgBox("Es gibt : " & iCounter & " Treffer")

Gruß

HaPe
Bitte warten ..
Mitglied: HeinrichXII
21.02.2010 um 16:17 Uhr
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Ergebnis As Integer = 0
For i = 1000 To 9999
If i / 17 = Int(i / 17) Then
Ergebnis = Ergebnis + 1
End If
Next
MsgBox(Ergebnis)
End Sub

Mit freundlichen Grüßen
Heinrich
Bitte warten ..
Mitglied: Biber
21.02.2010 um 23:06 Uhr
[OT]
Ja, ich weiß, ob nun Dualcore oder Quadcore, das macht preislich kaum einen Unterschied... und die Rechner sind ja wirklich sauschnell heutzutage....
Und natürlich kann man/frau einen armen wehrlosen Skriptschnipsel zur Prüfung von 8999 Zahlen auf Teilbarkeit durch 17 auch 8999mal durch eine Schleife jagen...

Aber im Ernst - würdet ihr ohne Computer den gleichen Algorithmus anwenden?
01.
Dim Anzahl As Integer 
02.
Dim Von as Integer 
03.
Dim Bis as Integer 
04.
Dim Modwert as Integer 
05.
Dim First As Integer 
06.
Dim Last As Integer 
07.
Von = 1000 
08.
Bis = 9999 
09.
Modwert =17 
10.
 
11.
First = int(Von / modwert)  
12.
Last = int (Bis /modwert) 
13.
 
14.
If (int(Von / modwert) <> Von / modwert) Then First = First+1 
15.
Anzahl= Last -First +1 
16.
 
17.
MsgBox  ("Es gibt : " &Last & "-" &First &" +1 = " & Anzahl & " Treffer.")
So oder so ähnlich hätte ein Nicht-Quadcore-Besitzer diesen Algorithmus wohl eher formuliert...

Grüße
Biber
[Edit] Etwas leserlicher formuliert. [/Edit]
[/OT]
Bitte warten ..
Mitglied: StefanKittel
22.02.2010 um 00:03 Uhr
Zitat von Biber:
So oder so ähnlich hätte ein Nicht-Quadcore-Besitzer diesen Algorithmus wohl eher formuliert...

Hallo,
es war schon immer viel schlauer Hirn statt Rechenleistung zu verwenden.
Respekt! Auf diese ganz einfache Idee bin ich ja nun auch nicht gekommen.

Stefan
Bitte warten ..
Mitglied: HeinrichXII
22.02.2010 um 19:21 Uhr
Dieser "einfache" Programmcode verbraucht schonmal 6 Variablen während der "rechenaufwändige" mit einer auskommt. Nicht nur das man damit bei "Nicht-Quadcore-Rechnern" und größeren Programmen dieser Art den heutzutage wertvolleren Arbeitsspeicher zumüllt, sondern auch die Übersichtlichkeit geht hier flöten. Wer bei solch trivialen For-Schleifen im Jahre 2010 an die Rechenleistung denkt, der ist vor einigen Jahren mal irgendwo stehen geblieben. Selbst ein halbwegs guter Pentium 2 würde diesen Quellcode in unter ner Sekunde durchrattern.
@ Biber: Ich willt nicht deinen Programmcode schlecht machen, im Gegenteil - mehrere Lösungen für ein Ziel sind immer besser als nur eine, aber die Lösung mit der Performanceverschwendung der anderen Codes zu begründen ist für mich Schwachsinn.

Mit freundlichen Grüßen Heinrich
Bitte warten ..
Mitglied: Biber
22.02.2010 um 19:52 Uhr
Ach HeinrichXII,

da machen wir gar nicht viel Heckmeck drumrum... da mach ich mal ein liebloses Copy&Paste:

01.
' Quicktest ....Anzahl durch 17 teilbare Zahlen Von:1000 Bis:10Mio-1 
02.
Wscript.echo vblf & " Runde 1 ...10 Mio " & vbcrlf 
03.
wscript.echo "For every number - Loop start " & time 
04.
Ergebnis=0 
05.
For i = 1000 To 9999999 
06.
If i / 17 = Int(i / 17) Then 
07.
Ergebnis = Ergebnis + 1 
08.
End If 
09.
Next 
10.
wscript.echo "Ergebnis: " & Ergebnis 
11.
wscript.echo "For every number - Loop end   "& time 
12.
'------ 
13.
wscript.echo "--------------------------------------" 
14.
wscript.echo "mit 6 variablen          start" & time 
15.
Von = 1000 
16.
Bis = 9999999 
17.
Modwert =17 
18.
 
19.
First = int(Von / modwert)  
20.
Last = int (Bis /modwert) 
21.
 
22.
If (int(Von / modwert) <> Von / modwert) Then First = First+1 
23.
Anzahl= Last -First +1 
24.
 
25.
 
26.
Wscript.echo  (vblf &  "Es gibt : " &Last & "-" &First &" +1 = " & Anzahl & " Treffer." & vblf) 
27.
wscript.echo "mit 6 variablen            end" & time 
28.
 
29.
Wscript.echo vblf & " Runde 2 ...50 Mio " & vbcrlf 
30.
 
31.
' Quicktest ....Anzahl durch 17 teilbare Zahlen Von:1000 Bis:50Mio-1 
32.
wscript.echo "For every number - Loop start " & time 
33.
Ergebnis=0 
34.
For i = 1000 To 49999999 
35.
If i / 17 = Int(i / 17) Then 
36.
Ergebnis = Ergebnis + 1 
37.
End If 
38.
Next 
39.
wscript.echo "Ergebnis: " & Ergebnis 
40.
wscript.echo "For every number - Loop end   "& time 
41.
'------ 
42.
wscript.echo "--------------------------------------" 
43.
wscript.echo "mit 6 variablen          start" & time 
44.
Von = 1000 
45.
Bis = 49999999 
46.
Modwert =17 
47.
 
48.
First = int(Von / modwert)  
49.
Last = int (Bis /modwert) 
50.
 
51.
If (int(Von / modwert) <> Von / modwert) Then First = First+1 
52.
Anzahl= Last -First +1 
53.
 
54.
 
55.
Wscript.echo  (vblf &  "Es gibt : " &Last & "-" &First &" +1 = " & Anzahl & " Treffer." & vblf) 
56.
wscript.echo "mit 6 variablen            end" & time
...und lass das als VBS.Version laufen.... und der Lüfter jault...
01.
>e:\schnipsel\Quicktestmod17.vbs 
02.
 
03.
 Runde 1 ...10 Mio 
04.
 
05.
For every number - Loop start 19:49:08 
06.
Ergebnis: 588177 
07.
For every number - Loop end   19:49:24 
08.
-------------------------------------- 
09.
mit 6 variablen          start19:49:24 
10.
 
11.
Es gibt : 588235-59 +1 = 588177 Treffer. 
12.
 
13.
mit 6 variablen            end19:49:24 
14.
 
15.
 Runde 2 ...50 Mio 
16.
 
17.
For every number - Loop start 19:49:24 
18.
Ergebnis: 2941118 
19.
For every number - Loop end   19:50:43 
20.
-------------------------------------- 
21.
mit 6 variablen          start19:50:43 
22.
 
23.
Es gibt : 2941176-59 +1 = 2941118 Treffer. 
24.
 
25.
mit 6 variablen            end19:50:43 
26.
 
27.
(=19:50:44  D:\temp=)
Ich denke, die anderthalb Minuten deines Algorithmus in Runde 2 sind erkennbar.
Und von den 6 Variablen, die ich habe, sind 5 nur wegen der Lesbarkeit drin....

Grüße
Biber

Nachtrag: Ergebnisse der Runde drei (von 1000 bis 100Mio-1:
01.
 Runde 3 ...100 Mio 
02.
 
03.
For every number - Loop start 20:03:18 
04.
Ergebnis: 5882294 
05.
For every number - Loop end   20:05:49 
06.
-------------------------------------- 
07.
mit 6 variablen          start20:05:49 
08.
 
09.
Es gibt : 5882352-59 +1 = 5882294 Treffer. 
10.
 
11.
mit 6 variablen            end20:05:49

[Edit]
Selbst ein halbwegs guter Pentium 2 würde diesen Quellcode in unter ner Sekunde durchrattern.
Na ja, dann hab' ich mir wohl so'n Billig-Import andrehen lassen ...
[/Edit]
Bitte warten ..
Mitglied: HeinrichXII
22.02.2010 um 20:19 Uhr
Hallo,

danke für deinen Post. Ich muss zugeben der war ziemlich aufschlussreich. Es ist ja schön, dass du das alles mal so simulierst und ich traue auch deinen Testergebnissen, nur war die Frage hier nicht nach 10, 50 oder 100 Millionen, sondern nach rund 9000 Zahlen und das schafft dann auch ein Pentium II.

Mit freundlichen Grüßen Heinrich
Bitte warten ..
Mitglied: StefanKittel
22.02.2010 um 20:30 Uhr
Zitat von HeinrichXII:
Wer bei solch trivialen For-Schleifen im Jahre 2010 an die Rechenleistung denkt, der ist vor einigen Jahren mal irgendwo stehen geblieben.
Hallo,
aber wer im kleine schludert....
Oder wie willst Du erklären warum Windows 7 auf einem Core i5 gegenüber Windows 98 auf einem P2 nicht ein bischen schneller ist.
Stefan

PS: zeigt das Bild Dein Büro?
Bitte warten ..
Mitglied: Biber
22.02.2010 um 20:31 Uhr
Moin HeinrichXII,

na ja, ich bin davon ausgegangen, dass libertes' Skizze ja auch nur eine zarte Andeutung sein sollte...für die paar durch 17 teilbaren Zahlen zwischen 1000 und 9999 braucht er ja wohl kaum ein Programm schreiben. Bestenfalls einen Bierdeckel.

Und selbst wenn er dieses Programmschnipselchen nur in diesem daumengroßen Zahlenbereich von bis 10000(-1) verwendet - nach 1000x Starten ist er bei 10Mio.

Also sooooooooo verwegen und realitätsfern finde ich den Quicktest nicht.

Aber ich geb dir natürlich Recht... eine For-Schleife 10000x durcheiern.... das braucht auf den heutigen Rechnern (und gestrigen bis runter auf PentiumII)- natürlich nur einen Lidschlag.

Grüße
Biber
Bitte warten ..
Mitglied: HeinrichXII
22.02.2010 um 20:49 Uhr
Aloha,

@ Biber: die Worte "verwegen" und "realitärsfern" stammen aus deinem Munde . Wie gesagt ich fand den Test sehr aufschlussreich (und das mein ich wirklich nicht ironisch)
@ Stefan: Das is aber auch ein hinkender Vergleich - Windows 7 und 98 sind sowohl im Funktionsumfang, Sicherheit, Rechteverwaltung, Grafik und verwendete Treiber nicht Ansatzweise zu vergleichen. Sicher magst du Recht haben das es von der Geschwindigkeit keinen Unterscheid gibt, von der Bedienbarkeit her aber einen riesigen.

Mit freundlichen Grüßen Heinrich

Edit: Nein zeigt es nicht, aber was nicht ist kann ja noch werden .
Bitte warten ..
Mitglied: 76109
22.02.2010 um 21:13 Uhr
Hallo zusammen!

@Biber
Dein PC ist ganz schön langsam

Hier mein Test ohne Startverzögerung:
01.
Start = time:  Ergebnis=0 
02.
 
03.
For i = 1000 To 9999999 
04.
    If i Mod 17 = 0 Then Ergebnis = Ergebnis + 1 
05.
Next 
06.
 
07.
wscript.echo "Start: " & Start & "  Stop: "& time & vbTab & Ergebnis 
08.
 
09.
Start = time:  Ergebnis=0 
10.
For i = 1000 To 49999999 
11.
    If i Mod 17 = 0 Then Ergebnis = Ergebnis + 1 
12.
Next 
13.
 
14.
wscript.echo "Start: " & Start & "  Stop: "& time & vbTab & Ergebnis 
15.
 
16.
Start = time:  Ergebnis=0 
17.
 
18.
For i = 1000 To 99999999 
19.
    If i Mod 17 = 0 Then Ergebnis = Ergebnis + 1 
20.
Next 
21.
 
22.
wscript.echo "Start: " & Start & "  Stop: "& time & vbTab & Ergebnis
Und meine Zeiten:
01.
 Runde 1 ...10 Mio 
02.
 
03.
For every number - Loop start 20:41:00 
04.
Ergebnis: 588177 
05.
For every number - Loop stop  20:41:02 
06.
 
07.
-------------------------------------- 
08.
 
09.
 Runde 2 ...50 Mio 
10.
 
11.
For every number - Loop start 20:41:30 
12.
Ergebnis: 2941118 
13.
For every number - Loop stop  20:41:43 
14.
 
15.
-------------------------------------- 
16.
 
17.
 Runde 3 ...100 Mio 
18.
 
19.
For every number - Loop start 21:00:07 
20.
Ergebnis: 5882294 
21.
For every number - Loop stop  21:00:33
Ansonsten hast Du natürlich recht, dass es von keinem guten Programmierstil zeugt, derartige Codes zu schreiben.

Gruß Dieter
Bitte warten ..
Mitglied: Biber
22.02.2010 um 21:27 Uhr
Moin didi1954,

Dein PC ist ganz schön langsam
jahaa, und dein PC ganz schön schnell.
Du müsstest diesen Proof-of-Concept-Test wahrscheinlich eher im Bereich von 100Mio, 500Mio und 1Mrd machen...

Ich habe mich ja nur zu diesem Konter hinreißen lassen, weil ich sofort bei HeinrichXIIs Kommentar "aber die Lösung mit der Performanceverschwendung der anderen Codes zu begründen ist für mich Schwachsinn." unter der Decke geklebt habe... da kann ich dann auch stur sein...*g

Na ja, mein heissblütiges norddeutsches Temperament halt.
Aber eine Doktorarbeit sollte es auch nicht werden...

Andererseits sind für mich hier im Forumsbereich schon die Algorithmen und die Lösungsstrategien ein wichtigerer Punkt als diese Das-ist-mein-Laden-Argumentation, dass alles einfach immer mit einem neueren Boliden doppelt so schnell gehen wird.
Und wenn zwei jeweils 5zeilige Schnipsel in der Performance um den Faktor 1000 abweichen, dann ist es für mich schon ein Kriterium.

So, nun aber gut mit diesem kleinen Exkurs.

Grüße
Biber
Bitte warten ..
Mitglied: hpbruns
23.02.2010 um 10:13 Uhr
Moin Moin an alle

Sehr interressant das alles. Am Anfang schreibt libertes: "Ich brauch mal Hilfe. Ich bin neu hier und habe ein kleines Problem.... "
Wenn man sich dann den Code ansieht, würd ich mal sagen, dass sich das "neu" nicht nur auf das Forum bezieht.

Mit den ersten Lösungsvorschlägen ist dem Kollegen dann erst mal geholfen. Es funktioniert, wie es sollte.
Ob es da Verbesserungen gibt, war nicht die eigentliche Frage.

Der Rest der Diskussion gleitet dann ab in den Bereich "Algorithmen" und ist HIER eigentlich fehl am Platz.

Wie dem auch sei, Biber hat insofern Recht, das es seit einiger Zeit aus der Mode gekommen ist, effizienten Code zu schreiben.
In Zeiten von QuadCore und gigabyte großem Arbeitspeicher macht man sich keinen Gedanken mehr um "schlanken" und effizienten Code.

Vielleicht sollte man den Thread dann auch in einen anderen Forumsbereich verschieben und da weitermachen

@libertes: Hat es denn wenigstens geholfen?

Gruß

HaPe

@HeinrichXII: Für eine komplette Büroausstattung fehlt aber noch die Kaffeemaschine
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Visual Studio
gelöst Remotedienst prüfen mit Visual Basic (1)

Frage von flyingmichael zum Thema Visual Studio ...

Visual Studio
Mit Visual Basic auf Shopware 5 API zugreifen (9)

Frage von SmogKiel zum Thema Visual Studio ...

Visual Studio
gelöst Pastebin auslesen mit Visual Basic? (2)

Frage von UltraZz zum Thema Visual Studio ...

Basic
gelöst Mit Visual Basic Batch Datei öffnen (26)

Frage von Flodsche zum Thema Basic ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...