 |  | | | | | | | | |  |  | | | | | Fortgeschrittener Benutzer
Status: Offline Beiträge: 102 Registriert seit: 01.09.2004 Ort: Zürich Alter: 23 | vb.net - gerade Zahlen zählen -
28.11.2006, 21:35
hi all,
bin ein newbie in sachen programmierung. ich versuche mich gerade im visual studio 2005. habe eine aufgabe bekommen, zahlen zu addieren. d.h wenn ich z.b. 5 ins eingabe feld schreibe, rechnet das programm 1+2+3+4+5 und gibt mir 15 als resultat aus.
jetzt kommts, der zweite schritt ist, dass nur gerade zahlen gezählt werden. d.h. wenn ich 8 eintippe -> 2+4+6+8, wenn ich 5 eintippe -> 2+4
kann mir da jemand weiterhelfen? dürfte wür erfahrene programmerier wohl kaum schwierig sein
thx
code schnipsel... Code: Dim i, Zwischensumme As Integer
For i = 1 To Me.txtEingabe.Text
Zwischensumme = Zwischensumme + i
Me.txtSumme.Text = Zwischensumme.ToString
Next
| | | | | Links zum gleichem Thema: | | | | | | | Erfahrener Benutzer
Status: Offline Beiträge: 434 Registriert seit: 24.11.2005 Ort: Brüttelen, Röschtigraben Alter: 22 | 
28.11.2006, 22:19
Ich hab zwar weder Ahnung von coden, noch von VB, aber du kannst ja ne Funktion bauen, die schaut, ob die Zahlen durch 2 teilbar sind ohne Rest. Wenn ja, dann gerade, wenn nicht, dann ungerade. Documentation is like sex: when it is good, it is very, very good; and when it is bad, it is better than nothing.
Certis: VMware VCP | | | | | | | | Moderator
Status: Offline Beiträge: 2,563 Registriert seit: 07.11.2003 Ort: The Sprawl Alter: 32 | 
28.11.2006, 22:46
Der Befehl Mod gibt dir den Rest einer Division zurück. Somit kannst Du immer wenn die Bedingung (x mod 2 = 0) wahr ist, x zu deiner Zwischensumme addieren.
Hier ein Beispiel in Delphi (Pascal)
<blockquote><pre><font face="verdana,arial,helvetica"size="1"class="sf">C ode</font><hr><font face="verdana,arial,helvetica"size="1"class="sf">f unction TForm1.SumMod(value: integer): string;
var dummy: integer;
begin
dummy:= 0;
while value > 0 do
begin
if(value mod 2 = 0) then
dummy:= dummy + value;
dec(value);
end;
result:= intToStr(dummy);
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if(key = 13) then
begin
key:= 0;
Edit2.Text:= SumMod(StrToInt(Edit1.Text));
end;
end;
<hr></font></pre></blockquote>
grz zer00
Geändert von zer00 (04.12.2006 um 12:17 Uhr).
| | | | | | | | Erfahrener Benutzer
Status: Offline Beiträge: 296 Registriert seit: 02.11.2004 Ort: GR Alter: 27 | 
28.11.2006, 22:51
Hier mal die Mod funktion..in VB
Try
Me.Cursor = Cursors.WaitCursor
Dim i As Integer
Dim sErgebnis As String = "Ganzzahliger Teiler:1"
For i = 2 To intZahl
If intZahl Mod i = 0 Then
sErgebnis = sErgebnis + ", " + i.ToString
End If
Next
Me.Cursor = Cursors.Default
Return sErgebnis
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try Never touch a running system | | | | | | | | Moderator
Status: Offline Beiträge: 2,563 Registriert seit: 07.11.2003 Ort: The Sprawl Alter: 32 | 
28.11.2006, 22:56
Hier noch die EXE.
grz zer00 | | | | | | | | Moderator
Status: Offline Beiträge: 683 Registriert seit: 15.01.2005 Ort: Oberbuchsiten Alter: 36 | 
28.11.2006, 23:33
Manchmal muss man auch ein Problem analysieren können, bevor man anfängt Lösungen zu suchen!
Als Mathematiker sage ich hier nur: Gerade Summe bis zum Summanden n
x = (n+2) * n / 4
Bei Eingabe von z.B. 8 liefert diese Formel automatisch 20
Edit:
@zer00: dein zip ist eigentlich ein rar und mit meiner Formel mache ich das sogar in Excel! Dieses Posting wurde aus 100% rezyklierten Elektronen hergestellt
und kann für die Umwelt absolut unschädlich gelöscht werden.
Geändert von remix (28.11.2006 um 23:38 Uhr).
| | | | | | | | Erfahrener Benutzer
Status: Offline Beiträge: 318 Registriert seit: 04.06.2006 Ort: zu Hause | 
29.11.2006, 08:07
Wir sind alle stolz auf dich und auf dein mathematisches Können. Gratuliere. [/ironie]
bye, pantheros "There is no such thing as a best solution, be it a tool, a language, or an operating system. There can only be systems that are more appropriate in a particular set of circumstances." | | | | | | | | Moderator
Status: Offline Beiträge: 2,563 Registriert seit: 07.11.2003 Ort: The Sprawl Alter: 32 | 
29.11.2006, 12:13
Zitat: Original geschrieben von remix
Edit:
@zer00: dein zip ist eigentlich ein rar und mit meiner Formel mache ich das sogar in Excel! | Huch, ja da hast Du recht.
Ich werde das noch ändern.
grz zer00 | | | | | | | | Moderator
Status: Offline Beiträge: 683 Registriert seit: 15.01.2005 Ort: Oberbuchsiten Alter: 36 | 
29.11.2006, 15:06
Der Vollständigkeit halber noch die komplette Lösung der Aufgabe auch für ungerade n in einer expliziten Formel:
x = (n+2) * n / 4 - (n mod 2) * (2n + 1) / 4
Der zweite Term wird automatisch nur bei ungeradem n subtrahiert und korrigiert somit die Summe.
[schwelg]
Ich liebe es einfach, mal wieder meine "alten" Mathestudien hervorzukramen.
[/schwelg] Dieses Posting wurde aus 100% rezyklierten Elektronen hergestellt
und kann für die Umwelt absolut unschädlich gelöscht werden. | | | | | Links zum gleichem Thema: | | | | | | | Fortgeschrittener Benutzer
Status: Offline Beiträge: 199 Registriert seit: 30.12.2003 Ort: Laupen Alter: 21 | 
29.11.2006, 17:28
@remix:
Einfach Genial, gibst noch mehr von denen? | | | | | | | | Fortgeschrittener Benutzer
Status: Offline Beiträge: 102 Registriert seit: 01.09.2004 Ort: Zürich Alter: 23 | 
30.11.2006, 13:56
wow.... da sind ja jede menge antworten hinzugekommen. werde mich heute abend gleich mal versuchen, das ding hinzukriegen....
@remix: also in mathe bin ich nicht so der hammer, aber die Formel is genial ;-)
@all: DANKE!
greez | | | | | | | | Moderator
Status: Offline Beiträge: 683 Registriert seit: 15.01.2005 Ort: Oberbuchsiten Alter: 36 | 
30.11.2006, 15:57
@Garfield:
Wenn Du tatsächlich die Lösung alternativ auch mit meiner Formel darstellen willst, kannnst Du noch mehr brillieren, indem Du erklärst, dass das eine abgewandelte Form der Gauss'schen Lösung sei. Die Anekdote dazu
Der kleine Gauss kriegt in der Primarschule die Aufgabe alle Zahlen von 1 bis 100 zusammenzuzählen. Der Lehrer denkt sich, dass er so eine lange Zeit Ruhe habe. Nach nicht mal einer Minute präsentiert der Kleine bereits zur Verblüffung des Lehrers die Lösung! Was hat er gemacht? Er hat einfach alle Zahlen von 1 bis 100 (symbolisch) aufgeschrieben und darunter nochmals, diesmal allerdings von 100 bis 1 rückwärts. Zählt man zwei übereinanderliegende Zahlenpaare zusammen, erhält man immer 101. Das ganze wiederholt sich 100 mal, also ergibt das 10100. Jetzt hat man aber die Summe von beiden Zahlenreihen also dividiert man nochmals durch 2 und erhält als Lösung 5050. Kurz ausgeschrieben:
die Summe der ersten n natürlichen Zahlen ist n * (n + 1) / 2
Dies war der Geschichte nach die Geburtsstunde des berühmten Mathematikers Carl Friedrich Gauss. Dieses Posting wurde aus 100% rezyklierten Elektronen hergestellt
und kann für die Umwelt absolut unschädlich gelöscht werden.
Geändert von remix (30.11.2006 um 16:00 Uhr).
| | | | | | | | Fortgeschrittener Benutzer
Status: Offline Beiträge: 102 Registriert seit: 01.09.2004 Ort: Zürich Alter: 23 | 
04.12.2006, 11:44
die kürzeste vb.net Variante, die ich hingekriegt habe lautet... Code: Dim i, Zwischensumme As Integer
For i = 2 To Me.txtEingabe.Text
If Me.txtEingabe.Text Mod 2 = 1 Then
Me.lblError.Text = "Fehler: Nur gerade Zahlen sind erlaubt!"
ElseIf i Mod 2 = 0 Then
Zwischensumme = Zwischensumme + i.ToString
End If
Next
Me.txtSumme.Text = Zwischensumme.ToString
somit ist nur die Eingabe gerader Zahlen erlaubt, andernfalls folgt wird eine Fehlermeldung ausgegeben.
@remix: wie gesagt ich bin ein newbie in programmieren, werde mich aber mal in meiner Freizeit dazu bemühen, deine Fromel in skript einzubauen  | | | | | | | | Erfahrener Benutzer
Status: Offline Beiträge: 318 Registriert seit: 04.06.2006 Ort: zu Hause | 
04.12.2006, 13:07
Wieso überprüfst du bei jedem Schleifendurchgang ob es sich um eine Geradezahl handelt in der Inputbox?
bye, pantheros "There is no such thing as a best solution, be it a tool, a language, or an operating system. There can only be systems that are more appropriate in a particular set of circumstances." | | | | | | | | Fortgeschrittener Benutzer
Status: Offline Beiträge: 102 Registriert seit: 01.09.2004 Ort: Zürich Alter: 23 | 
13.12.2006, 21:10
@pantheros: weil ich wie schon erwähnt... neu in diesem Gebiet bin
hier wird nicht jedesmal geprüft ob es eine gerade Zahl ist... Code: Dim Teilresultat As Integer
If CInt(Me.txtEingabe1.Text) Mod 2 = 1 Then
Zwischensumme = CInt(Me.txtEingabe1.Text) + 1
End If
For i = Zwischensumme To CInt(Me.txtEingabe2.Text) Step 2
Teilresultat = Teilresultat + i
Next
Me.txtSumme.Text = Teilresultat.ToString
| | | < | | | |