Programmschreiben Visual Basic

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von ImTheOne.

    Programmschreiben Visual Basic

    Hallo ich soll ein Programm schreiben bezueglich einer Kapitallrechnung. Ich komme allerdings nicht weiter.


    Aufgabe 1
    : Erstellen Sie für die Aufgabe aus der Vorlesung „Erstellen Kapitalliste“ ein Visual Basic Programm.

    Eingabe: Anfangskapital und Zinssatz. Nutzen Sie zur Eingabe die „InputBox“.

    Ausgabe: (z.B. bei einem Anfangskapital von € 20.000 und einem Zinssatz von 5%): Periode Anlagebetrag Zinsbetrag 1 20.000 1.000 2 21.000 1.050 … … …
    Die Liste ist beendet, wenn sich das Kapital verdoppelt hat.

    Mein Ansatz:

    Rem Kapitalliste

    Sub Kapitalliste()

    Rem Vorlauf

    'deklarieren

    Dim preis As Double

    Dim menge As Integer

    Startkapital = 0

    'lesen

    Betrag = InputBox("Bitte geben Sie ein Startkapital ein")

    Rem Hauptlauf

    While preis <> -1

    'aufsummieren

    If preis > 20.000 Then menge = menge +0,05%

    'neues Kapital lesen

    Betrag = InputBox("Bitte geben Sie einen Startkapital ein")

    Wend

    Rem Nachlauf

    'Output

    MsgBox "

    End Sub
    Hallo,

    dein Code sieht nicht wie moderner VB.net Code aus. Nutzt Ihr vielleicht tatsächlich noch VB6?
    Ansonsten ist der Stil echt grausam, aber das ist ein anderes Thema.

    Zu deinem Problem: Wo liegt denn dein Problem genau? Was läuft nicht? Was sollte es tun?

    Viele Grüße,
    Manawyrm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()

    @Amantes_amentes Willkommen im Forum. :thumbup:

    Manawyrm schrieb:

    VB6?

    Amantes_amentes schrieb:

    Nutzen Sie zur Eingabe die „InputBox“.
    Ja.
    Damit wurden Dir hier viele Hilfemöglichkeiten verbaut. Sag das Deinem Lehrer / Prof.
    Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Amantes_amentes schrieb:

    Alternative
    Die Frage ist hier, was Dein Lehrer meint, wenn Du dort was anderes lernst als hier,
    heißt im Klartext (ohne Deinen Lehrer beleidigen zu wollen) dort lernst Du wahrscheinlich Müll.
    Kannst Du das (VB6 vs VB.NET) bitte mal abklären?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    was Dein Lehrer meint
    Ich schickte kürzlich einen Studenten mit einer ähnlichen Frage (bzgl C) zu seinem Prof.
    Die Antwort: Wir lernen zunächst die Grundlagen ohne den Ballast der Objektorientierung.
    In späteren Semestern steigen wir dann um auf C++.

    Offenbar wird Objektorientierung bei vielen Lehrkräften mehr als Ballast denn als Erleichterung empfunden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Jo, man sollte eigentlich einen Sammelthread zum Problem inkompetenter Lehrkörper machen, der aufzeigt, wie allgemein gravierend das Problem ist.
    Das betrifft Fernstudiengänge, Schulungen, Schul-Unterricht, Vorlesungen, sogar einschlägige Ausbildungsplätze, aber auch utube-Videos und das "Lehrbuch" von Theiss auf Galileio-Computing fallen eigentlich darunter.

    (wobei, wenn man explizit C lernt, dann ist das eben eine nicht OOP-Sprache, mit durchaus ihrer Daseinsberechtigung, und ist eine gute Grundlage für später C++.
    Nur C++ lernen unter absichtlicher OOP-Ausklammerung wäre BrainFuck)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Wie wäre es wenn @Amantes_amentes nochmal genau sagt welche Sprache vorgegeben ist.

    <Offtopic>Vielleicht sollte man auch mal einen Thread auf machen mit schlechten Tutorials hier aus dem Forum</Offtopic>
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Was ich gerade noch sehe, vielleicht sollte @Amantes_amentes uns noch mal verraten was er studiert und aus welcher Vorlesung das Ganze war. Das könnte noch ein wenig mehr Licht in die Sache bringen.

    <Offtopic>
    Ich wäre ja für die Threads Lehrer, Ausbilder, Dozenten, Tutorials.
    Gut wäre es wenn sich auch ein paar Lehrer und Dozenten finden würden die ihren didaktischen Ansatz erläutern.

    @ErfinderDesRades Ohne gegenteilige Meinung wäre es ja langweilig. Wir haben halt ganz andere Ansätze und Hintergründe.
    </Offtopic>
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Die Aufgabenstellung stammt aus der gleichen Fachhochschule, an der ich auch studiere.

    Durch die Suche hier im Forum, bin ich auf einen anderen Thread mit einem ähnlichem Problem zu einer Aufgabenstellung gestoßen, die ich auch so von der FH kenne:
    Einfach Programm schreiben

    Forenmitglieder sind sich anscheinend einig, dass es VB6 ist.

    Kann jemand dennoch Hilfe leisten?

    Es soll eine ?InputBox? erscheinen. Dort soll der Benutzer einen beliebigen Anfangskapital und einen beliebigen Zinssatz eingeben.
    Als Ergebis/Ausgabe soll eine Tabelle ausgespuckt werden, wo der Zinsbetrag für das entsprechende Jahr errechnet wird.
    Die Zinserträge werden dem Anlageetrag addiert und im folgenden Jahr erneut angelegt;
    bis der ursprünglich eingegebene Anlagekapital sich verdoppelt hat.

    Z.B.: Anlagekapital 20.000 (EUR)
    Zinssatz: 5%

    Jahr Anlagekapital Zinsertrag
    1 20000 1000
    2 21000 1050
    3 21500 .....
    . ....... .....
    n >=40000


    Danke!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ledted“ ()

    @ledted

    VB.NET-Quellcode

    1. Public Sub berechneZinsenBisZurVerdoppelung(ByVal Startkapital As Double, ByVal Zinssatz As Double)
    2. Dim _Startkapital As Double = Startkapital
    3. Dim _Kapital As Double = Startkapital
    4. Dim _Zinsen As Double
    5. Dim _Zinssatz As Double = Zinssatz
    6. Dim Zinsjahr As Integer = 1
    7. Do While (_Kapital <= _Startkapital * 2)
    8. 'Zinsen Berechnen
    9. _Zinsen = _Kapital * (_Zinssatz / 100)
    10. 'Zinsen auf Kapital Rechnen
    11. _Kapital = _Kapital + _Zinsen
    12. Console.WriteLine(String.Format("{0} | {1}", Zinsjahr, _Kapital))
    13. Zinsjahr += 1
    14. Loop
    15. MessageBox.Show(String.Format("Das Kapital muss {0} Jahre verzinst werden um sich zu verdoppeln", Zinsjahr))
    16. End Sub


    Für den Rest sollte es dir als Student ja nicht schwer fallen ein wenig eigenleistung zu erbringen ;)

    ledted schrieb:

    bis der ursprünglich eingegebene Anlagekapital sich verdoppelt hat.
    Bei den derzeitigen Zinssätzen dauert das ziemlich lange ;)

    Ernst gemeint: Mach eine Abfrage auf negative Zinssätze rein, sonst läuft das Programm in eine Endlosschleife.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Quellcode

    1. Dim Startkapital_ As Double
    2. Dim Kapital_ As Double
    3. Dim Zinsen_ As Double
    4. Dim Zinssatz_ As Double
    5. Dim Zinsjahr As Integer
    6. Private Sub Command_Berechne_Click() 'Button-Klick
    7. On Error GoTo ProcError 'Fehlerbehandlung
    8. If IsNumeric(Text_Kapital.Text) Then
    9. If IsNumeric(Text_Zinsen.Text) Then
    10. If CDbl(Text_Kapital.Text) < 0 Or CDbl(Text_Zinsen.Text) < 0 Then
    11. message = MsgBox("Zinsen oder Anlagekapital ist negativ", vbCritical, "Zinsen oder" _
    12. & "Anlagekapital ist negativ") 'Ausgabe,
    13. 'wenn das Anlagekapital keine Zahl ist
    14. Else
    15. Call berechneZinsenBisZurVerdoppelung(CDbl(Text_Kapital.Text), CDbl(Text_Zinsen)) 'Zinsberechnung aufrufen
    16. End If
    17. Else
    18. message = MsgBox("Der Zinswert ist keine Zahl", vbCritical, "Zinswert falsch") 'Ausgabe, wenn der Zinswert
    19. 'keine Zahl ist
    20. ' Text in MessageBox, Art --> Rotes Ausrufezeichen, Überschrift
    21. End If
    22. Else
    23. message = MsgBox("Das Anlagekapital ist keine Zahl", vbCritical, "Anlagekapital falsch") 'Ausgabe, wenn das
    24. 'Anlagekapital keine Zahl ist
    25. ' Text in MessageBox, Art --> Rotes Ausrufezeichen, Überschrift
    26. End If
    27. ProcExit:
    28. Exit Sub
    29. ProcError:
    30. message = MsgBox(Err.Description, vbCritical, Err.Number) 'Sonstigen Fehler ausgeben
    31. Resume ProcExit
    32. End Sub
    33. Private Sub berechneZinsenBisZurVerdoppelung(ByVal Startkapital As Double, ByVal Zinssatz As Double)
    34. On Error GoTo ProcError 'Fehlerbehandlung
    35. 'Werte belegen:
    36. Startkapital_ = Startkapital
    37. Kapital_ = Startkapital
    38. Zinssatz_ = Zinssatz
    39. Zinsjahr = 1
    40. 'Textboxüberschrift setzen:
    41. Text_Ausgabe.Text = "Jahr Anlagekapital Zinsertrag" & vbCrLf 'vbCrLf --> Zeilenumbruch
    42. 'Eigentliche Berechnung:
    43. Do While (Kapital_ <= Startkapital_ * 2)
    44. Zinsen_ = Kapital_ * (Zinssatz_ / 100) 'Zinsen berechnen
    45. Kapital_ = Kapital_ + Zinsen_ 'Zinsen auf Kapital rechnen
    46. 'Zusammenbasteln der Ausgabe:
    47. Text_Ausgabe.Text = Text_Ausgabe.Text & Zinsjahr & " " & Kapital_ & " " & (Kapital_ - Startkapital) & vbCrLf
    48. ' Vorheriger Text == "Anfügen", Zinsjahr, Kapital, Zinsertrag, Zeilenumbruch
    49. Zinsjahr = Zinsjahr + 1 'Zinsjahr um 1 erhöhen
    50. Loop
    51. message = MsgBox("Das Kapital muss " & Zinsjahr - 1 & " Jahre verzinst werden, um sich zu verdoppeln", vbInformation, _
    52. "Anlagekapital falsch") 'Ausgabe Zinsjahre
    53. ' Text in MessageBox, Art --> Ausrufezeichen, Überschrift
    54. ProcExit:
    55. Exit Sub
    56. ProcError:
    57. message = MsgBox(Err.Description, vbCritical, Err.Number) 'Sonstigen Fehler ausgeben
    58. Resume ProcExit
    59. End Sub
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ImTheOne“ () aus folgendem Grund: Zinsen / Anlagekapital auf < 0 prüfen

    Riesen Dank erstmal für Eure Antworten :thumbup:
    Ihr meint das aber glaube ich viel zu gut. Die Aufgabe stammt aus dem 1. Semester eines BWL-Studiums. :D

    Ich habe mal die VB Befehlsreferenzen angehängt, mit denen wir die Aufgabe lösen sollen. (So viel ist das alles nicht, oder? :P )

    Ferner habe ich ein Ergebnisbeispiel angehängt, wie das ganze nachher aussehen soll - weil ein Vorposter eine MsgBox vorgeschlagen hat, die uns als Ergebnis mitteilt, wie viele Jahre es braucht, bis das Kapital sich verdoppelt hat; das ist nicht das Ziel.
    Sondern eher eine Tabelle, aus der man bis zur Verdopplung des Kapitals die entsprechenden Jahre mit den dazugehörigen Zinserträge sehen kann.

    Mein ungefährer Ansatz ist wie folgt (natürlich fehlerhaft und funktioniert auch so nicht), ich weiß aber von Kommilitonen, dass das ungefähr die "erwünschte" Lösung in dem Kurs ist:

    Visual Basic-Quellcode

    1. Sub Kapitalliste()
    2. Rem Vorlauf
    3. Dim Kapital As Double
    4. Dim zinssatz As Double
    5. Dim Jahr As Integer
    6. Dim zinsbetrag As Double
    7. Dim endkapital As Double
    8. 'Eingeben'
    9. Kapital = InputBox("Anfangskapital bitte eingeben:")
    10. zinssatz = InputBox("Zinssatz bitte eingeben:")
    11. 'Berechnung'
    12. endkapital = Kapital * 2
    13. 'überschriften ausgeben'
    14. Range("a1") = "Jahr"
    15. Range("b1") = "Kapital"
    16. Range("c1") = "Zinsbetrag"
    17. Rem Hauptlauf'
    18. 'Berechnen'
    19. While Kapital <= endkapital
    20. zinsbetrag = Kapital * zinssatz / 100
    21. 'Ausgabe'
    22. Worksheets("Blatt1").Cells(I, a) = Jahr
    23. Worksheets("Blatt1").Cells(I, b) = Kapital
    24. Worksheets("Blatt1").Cells(I, c) = zinsbetrag
    25. Worksheets("Blatt1").Rows(1).HorizontalAlignment = xlCenter
    26. Range("b2:b100").NumberFormat = "0.00 €"
    27. Range("c2:c100").NumberFormat = "0.00 €"
    28. 'jahr erhöhen'
    29. Jahr = Jahr + 1
    30. 'kapital erhöhen
    31. Kapital = Kapital + zinsbetrag
    32. 'i erhöhen
    33. I = I + 1
    34. Wend
    35. Rem Nachlauf
    36. 'Ausgabe'
    37. End Sub


    Das mag der totale Müll sein, aber bitte beachtet nochmal - BWL, 1. Semester. :S :D
    Bilder
    • vb ref 1.png

      430,42 kB, 1.722×1.056, 150 mal angesehen
    • vb ref 2.png

      321,98 kB, 1.734×1.028, 145 mal angesehen
    • vb ref 3.png

      283,3 kB, 1.730×902, 124 mal angesehen
    • Ergebnisbeispiel.png

      24,7 kB, 498×230, 119 mal angesehen
    Ich bin jetzt verwirrt...ich dachte wir helfen @Amantes_amentes, warum bedankt sich @ledted für die lösung? Soll das ein doppelaccount sein?
    Bzw @ledted: Der code den du uns da servierst ist weder VB6 noch VB.NET sondern VBA
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    ledted schrieb:

    das ist VBA
    Vielleicht lässt du uns das nächste Mal nicht erst in eine Sackgasse laufen.
    Excel-VBA ist zwar syntaktisch eng verwandt mit VB6, aber es steckt das Excel-Objektmodell dahinter.

    ledted schrieb:

    Das mag der totale Müll sein
    Ist zumindest nicht besonders elegant, aber praktikabel.

    ledted schrieb:

    Worksheets("Blatt1").Cells(I, a)
    Wird so wohl nicht funktionieren.
    Wenn du "Option Explicit" codiert hättest, hätte das die IDE schon angemeckert.
    Verwende für .Cells eine numerische Adressierung .Cells(I, 1)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    @ImTheOne Hör bitte auf hier so crap Code zu verteilen :D

    Ähm?????? :D


    Riesen Dank erstmal für Eure Antworten

    Ihr meint das aber glaube ich viel zu gut. Die Aufgabe stammt aus dem 1. Semester eines BWL-Studiums.

    Ich habe mal die VB Befehlsreferenzen angehängt, mit denen wir die Aufgabe lösen sollen. (So viel ist das alles nicht, oder? )

    Ferner habe ich ein Ergebnisbeispiel angehängt, wie das ganze nachher
    aussehen soll - weil ein Vorposter eine MsgBox vorgeschlagen hat, die
    uns als Ergebnis mitteilt, wie viele Jahre es braucht, bis das Kapital
    sich verdoppelt hat; das ist nicht das Ziel.

    Sondern eher eine Tabelle, aus der man bis zur Verdopplung des Kapitals
    die entsprechenden Jahre mit den dazugehörigen Zinserträge sehen kann.

    Mein ungefährer Ansatz ist wie folgt (natürlich fehlerhaft und
    funktioniert auch so nicht), ich weiß aber von Kommilitonen, dass das
    ungefähr die "erwünschte" Lösung in dem Kurs ist:


    Hat ja Keiner gesagt, dass die Ausgabe in Excel erfolgen soll, sonst hätten alle gleich gewusst, dass VBA und nicht VB6 gemeint ist...