![]() |
Anzeige:
|
|
|||||||
| Visual Basic, Visual Basic.NET Alles zum Thema - Visual Basic und Visual Basic.NET
Fragen zu VBA bitte in das Forum Office-Anwendungen posten! |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 11.12.2004
Beiträge: 662
|
Edit2: Also gut, hab mir jetzt eine Demo von "Visual Basic 5.0 CCE" herunter geladen und folgendes dort eingeben:
Code:
Sub Befehl1_Click () E = 1: F = 1 For K = 1 To 100 F = F * K E = E + 1 / F Print E Next K End Sub Wie mach ich da denn die Schaltfläche? Bitte mir muss doch jemand helfen können? Es geht um Leben und... Leben... Gruß, Va Bene PS: Hab ich denn schon irgendetwas richtig gemach? ![]() <hr> Edit: Habe hier irgendwas programmmäßiges gefunden: http://www.madeasy.de/2/prge.htm Der Screenshot sieht ja ganz nett aus, aber wo ist das dazugehörige Programm? Scheint um Visual Basic zu gehen... wäre mal jemand so nett und verschiebts mal dort hin? Hallo, vorneweg: ich starte dieses Thema im Allgemein-Forum und nicht bei Basic oder C, weil ich von Programmierersprachen keine Ahnung habe (außer halt html). Daher auch meine bitte an einen Mod, dieses Thema in ein entsprechendes Forum zu verschieben - ich denke mal, ihr wisst grob, wo das hingehören könnte. Also, folgendes: Ich beschäftige mich in letzter Zeit aktiv mit der Zahl e für die Schule. Als "Taschenrechner" haben wir den TI92 Plus (bzw. Voyage 200). Nun möchte ich e aber selber mit viiiielen Dezimalstellen bestimmen. Dazu habe ich mir das eine Näherungsverfahren ausgesucht: Code:
1+ 1/1! + 1/2! + 1/3! + ... + 1/n! So, dann habe ich folgendes gelesen: Zitat:
Also nach dem Prinzip e = 1/1! + ... + 1/n! mit n = 50 oder n = selbstauswählbar. Damit würde man mir echt einen großen Gefallen tun! Gruß, Va Bene PS: Alternativer Titel... Die Zahl e mit einem Programm ausrechnen lassen? Hab jetzt das da oben genommen. |
|
|
|
|
|
|
|
#2 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.01.2004
Beiträge: 471
|
Willst dus nicht lieber mit C++ versuchen? Da gibts jede Menge kostenlose Compiler und für sowas ist die Sprache wohl auch geeigneter.^^
Na gut, aber da du dir schonmal die Mühe gemacht hast... Eigentlich hast du das meiste schon richtig gemacht Bloß erhälst du mit Print E nur eine Ausgabe im Debugfensterchen. Versuch mal diesen Code (aber lass die List-Box auf dem Formular): Code:
Sub Befehl1_Click () E = 1: F = 1 For K = 1 To 100 F = F * K E = E + 1 / F List1.AddItem E Next K End Sub |
|
|
|
|
|
#3 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 11.12.2004
Beiträge: 662
|
Hmm... scheint noch nicht zu funktionieren... aus List1.AddItem E habe ich mal Frame1.AddItem E gemacht, da das ja irgendwie in dem Frame ausgeben werden soll.
Somit sieht der Code für den Button so aus: Code:
Private Sub Befehl1_Click() E = 1: F = 1 For K = 1 To 100 F = F * K E = E + 1 / F Frame1.AddItem E Next K End Sub Code:
Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) End Sub Ist es eigentlich richtig, wenn ich das Projekt als "Standard EXE" mache? Danke für die Hilfe! Gruß, Va Bene |
|
|
|
|
|
#4 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.01.2004
Beiträge: 471
|
Nein, du kannst dem Frame keine List-Funktionen zuweisen.
Ein Frame ist ein absolut passives Steuerelement und stellt wirklich nur diesen optischen Rahmen dar. Zieh doch einfach die Listbox auf das Frame und nimm meinen Code... Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single) End Sub Den Abschnitt brauchst du nicht, da du vom Frame keine Ereignisse abfangen werden musst. Standard-Exe ist ok, zum Testen genügt allerdings ein Klick auf Ausführen oder F5. EDIT: Achja und nenn die Sub genauso wie deinen Button, also Command1. Kein Wunder, dass nichts passiert: Code:
Private Sub Command1_Click() E = 1: F = 1 For K = 1 To 100 F = F * K E = E + 1 / F List1.AddItem E Next K End Sub |
|
|
|
|
|
#5 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 11.12.2004
Beiträge: 662
|
Zitat:
Es ist späääät... hab daraus "lass die List-Box aus dem Formular". Also habe ich sie rausgenommen... Ah, da ist ein Edit... das hat mir alles gerettet! Danke! Danke! Funktioniert... aaaaaber... Das sieht dann so aus: ![]() Kann man das ganze noch mit ein paar mehr Stellen hinter dem Komma versehen? |
|
|
|
|
|
|
|
#6 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.01.2004
Beiträge: 471
|
*hust* Tja, ich fürchte das ist die Rechengenauigkeit von VB...
Wie wärs, wenn wir das morgen... na schön, heute mittag nochmal mit C++ versuchen? |
|
|
|
|
|
#7 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 11.12.2004
Beiträge: 662
|
Zitat:
Gerne, wenn du bereit wärest! (ich hab sogar selbstständig einen "Beenden-Button" eingebaut... einfach nur Private Sub Command2_Click() End End Sub Ist ja gar nicht sooo schwer... Von Basic hatte ich ein ganz kleines bisschen Ahnung. Es gab früher sgn. "V-Techs" (glaub ich)... sone komischen kleinen Lehr-"Apparate" für Rechtschreibung, Mathe, usw. und da war auch Basic mit drauf... aber viel konnte man damit nicht machen und es ist schon lange her... |
|
|
|
|
|
|
#8 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.01.2004
Beiträge: 471
|
*Applaus* ;P
Natürlich ist es nicht schwer und gleichzeitig doch erstaunlich, was man mit der recht einfachen Syntax in VB anstellen kann. Ich versuchs auf jeden Fall mal und quäl mich nochmal durch Datentypen und deren Nachkommastellen in C++. |
|
|
|
|
|
#9 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 11.12.2004
Beiträge: 662
|
Danke vielmals, dann kann ich ja beruhigt ins Bett gehen...
Gute Nacht und jaa... auf zu C++! |
|
|
|
|
|
#10 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.01.2004
Beiträge: 471
|
Ich hoffe, es macht dir nichts aus, wenn ich mich nochmal bezüglich der Sprache umentschieden habe.
Das ganze in PHP: Code:
$x = 1;
$accuracy = 1000; // Auf wieviele Nachkommastellen?
$e = $x + 1;
$i_fak = 2;
$potenz = $x;
for($i=3;$i<=$accuracy;$i++) {
$potenz = bcmul($potenz, $x, $accuracy+2);
$result = bcdiv($potenz, $i_fak, $accuracy+2);
$e = bcadd($e, $result, $accuracy+2);
printf("1E-%0".strlen((string)$accuracy)."d|\n", $i);
$i_fak = bcmul($i_fak, $i, $accuracy+2);
}
echo "
";
echo "".substr($e, 0, $accuracy)."";
Allerdings hab ich mal eine Begrenzung auf 1000 Nachkommastellen eingebaut, damit nicht das halbe PPF in Versuchung kommt, die erste Million Stellen übers Wochenende auf meinem PC auszurechnen. Hier gibts übrigens die Rechenkontrolle: http://antwrp.gsfc.nasa.gov/htmltest/gifcity/e.1mil |
|
|
|
|
|
|
#11 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 11.12.2004
Beiträge: 662
|
Oh, sehr gut... könntest du noch erklären, was wofür ist und welche Formel du verwendet hast? (also (1+1/n)^n oder 1 + 1/1! + 1/2! + ... + 1/n!)
|
|
|
|
|
|
#12 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.01.2004
Beiträge: 471
|
Ich versuchs mal:
Code:
<html>
<head>
<title>e auf beliebig viele Nachkommastellen</title>
<style>
body {font-family: Verdana; font-size: 11px; color: #0000ff;}
</style>
</head>
<body>
<?php
if (isset($_POST["submit"])){
// Eigentliche Berechnung auf Grundlage der Formel 1 + 1/1! + 1/2! + ... + 1/n!
$x = 1; // Potenzwert, hier 1 (e^1)
// Eingabe abfangen & 1000er-Sperre
$accuracy = (ctype_digit($_POST["accuracy"]) && $_POST["accuracy"] <= 1000) ? $_POST["accuracy"] : 10;
$e = $x + 1; // erster Abschnitt der Formel (1+ ...)
$i_fak = 2; // Fakultaet von 1 ueberspringen, da 1! = 1 und direkt zu 2!
$potenz = $x;
for($i=3;$i<=$accuracy;$i++) { // So viele Durchlaeufe wie Nachkommastellen (die jeweils letzten jedoch unnoetig, leider nicht vermeidbar)
$potenz = bcmul($potenz, $x, $accuracy+2); // Nur wichtig fuer die Berechnung anderer Potenzwerte, nicht fuer $x = 1
$result = bcdiv($potenz, $i_fak, $accuracy+2); // Aufzuaddierendes Zwischenergebnis; Abschnitt der Formel (n/n!)
$e = bcadd($e, $result, $accuracy+2); // Aktuelles e berechnen; Abschnitt der Formel ( + n/n!)
printf("1E-%0".strlen((string)$accuracy)."d|\n", $i); // Formatierte Ausgabe der aktuellen Genauigkeit (Nachkommastellen)
$i_fak = bcmul($i_fak, $i, $accuracy+2); // Berechnen der Fakultaet von $i fuer den nachesten Durchlauf
}
echo "
";
echo "e=".substr($e, 0, $accuracy)."";
}
?>
<form action=<?php echo $_SERVER["PHP_SELF"]; ?> method="post">
e auf <input style="width: 32px; border-style: solid; border-color: #0000ff; border-width: 1px;" type="text" name="accuracy" /> Nachkommastellen
<input style="border-style: solid; border-color: #0000ff; border-width: 1px;" type="submit" name="submit" value="berechnen"/> !
</form>
</body>
</html>
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|