Autor |
Beitrag |
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 01.09.11 21:56
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 22:01
Achso, ok bin echt gerade etwas zu verwirrd mit den Gedanken. Aber das mit der Schleife, also da soll ich das mit der Methode lassen und den code einfach so einfügen, oder? Wenn es so ist habe ich das so geregelt. Aber wieso doch nicht lieber Method? Das habe ich noch nicht verstanden
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) {
Methode(); }
static void Methode() {
Console.WriteLine("Hallo, geben sie bitte ihr aktuelles \"Vermögen\" ein!"); double geld = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?"); Console.WriteLine("D= draufzahlen, A=Abziehen!"); string text = Console.ReadLine(); if (text == "D" || text == "d") { Console.WriteLine("Wie viel wollen sie drauf zahlen?"); double draufzahlen = Convert.ToDouble(Console.ReadLine()); geld = geld + draufzahlen; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else if (text == "A" || text == "a") { Console.WriteLine("Wie viel wollen sie abheben?"); double abheben = Convert.ToDouble(Console.ReadLine()); geld = geld - abheben; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else { Console.WriteLine("Bitt nur zwischen 'A'oder 'a' und 'D'oder'd' auswählen"); Console.ReadLine(); } Console.WriteLine("Nochmal? Dan drücker 'N' oder'n'"); Console.WriteLine("Oder lieber raus ins Freie? ;) Dann einfach exit eingeben"); string wiederholen = Console.ReadLine(); do { Console.Clear();
Console.WriteLine("Hallo, geben sie bitte ihr aktuelles \"Vermögen\" ein!"); double monex = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?"); Console.WriteLine("D= draufzahlen, A=Abziehen!"); string tex = Console.ReadLine(); if (text == "D" || text == "d") { Console.WriteLine("Wie viel wollen sie drauf zahlen?"); double draufzahlen = Convert.ToDouble(Console.ReadLine()); geld = geld + draufzahlen; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else if (text == "A" || text == "a") { Console.WriteLine("Wie viel wollen sie abheben?"); double abheben = Convert.ToDouble(Console.ReadLine()); geld = geld - abheben; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else { Console.WriteLine("Bitt nur zwischen 'A'oder 'a' und 'D'oder'd' auswählen"); Console.ReadLine(); } Console.WriteLine("Nochmal? Dan drücker 'N' oder'n'"); Console.WriteLine("Oder lieber raus ins Freie? ;) Dann einfach exit eingeben"); string wiederhole = Console.ReadLine(); Console.ReadLine(); } while (wiederholen == "N" || wiederholen == "n"); } }
} |
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 01.09.11 22:05
storestore hat folgendes geschrieben : | Achso, ok bin echt gerade etwas zu verwirrd mit den Gedanken. |
Dann hilft die Sache mit dem Blatt Papier besonders. Das ist kein Witz, es ist erstaunlich, wie gut man sich konzentrieren kann, wenn man sich mal vor ein blankes Blatt Papier setzt und die eigenen Gedanken in Worte fasst.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 22:06
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 22:23
Ok, ich habe es versucht. Alles in einer variable zu machen wäre schlauer! Wieso? Weil er es dann automatisch weiderholen muss! Aber als erstes muss er die Anweisung ohne Bedingung ausführen also eine do- while Schleife: Hier ist mal der neue code: Ich hoffe mal jetzt ist alles ok!?!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string wiederholen; do {
Console.WriteLine("Hallo, geben sie bitte ihr aktuelles \"Vermögen\" ein!"); double geld = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Wollen sie was drauf zahlen oder abziehen?"); Console.WriteLine("D= draufzahlen, A=Abziehen!"); string text = Console.ReadLine(); if (text == "D" || text == "d") { Console.WriteLine("Wie viel wollen sie drauf zahlen?"); double draufzahlen = Convert.ToDouble(Console.ReadLine()); geld = geld + draufzahlen; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else if (text == "A" || text == "a") { Console.WriteLine("Wie viel wollen sie abheben?"); double abheben = Convert.ToDouble(Console.ReadLine()); geld = geld - abheben; Console.WriteLine("Ihr aktuelles Guthaben= " + geld + " Euro"); Console.ReadLine(); } else { Console.WriteLine("Bitt nur zwischen 'A'oder 'a' und 'D'oder'd' auswählen"); Console.ReadLine(); } Console.WriteLine("Nochmal? Dan drücker 'N' oder'n'"); Console.WriteLine("Oder lieber raus ins Freie? ;) Dann einfach exit eingeben"); wiederholen = Console.ReadLine(); Console.Clear();
} while ( wiederholen == "N" || wiederholen == "n"); } }
} |
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 01.09.11 22:46
storestore hat folgendes geschrieben : | Ich hoffe mal jetzt ist alles ok!?! |
Die Schleife sieht jetzt ganz gut aus.
Aber ist es beabsichtigt, dass man nach der Ausgabe des neuen Vermögens erst einmal die Eingabetaste drücken muss, bevor der weitere Text kommt? Wenn man das nicht weiß, kommt man an der Stelle vielleicht nicht weiter.
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 01.09.11 23:11
Achso, ok das schreibe ich dann rein. Nur ich habe ein neues Problem aber das ist ein neues Thema das ich dann hoffentlicl bald posten werde
Danke ne 
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 02.09.11 10:00
Hallo storestore,
ist es denn beabsichtigt, daß der Anwender nach jedem Schleifendurchgang immer wieder neu sein Vermögen eingeben soll?
Anstatt eine große Methode zu schreiben, solltest du versuchen, zuerst deine einzelnen Aufgaben heraus zu arbeiten (OK, das geht jetzt schon in Richtung Software Engeneering, aber früh übt sich  )
Ein gute Methodik ist die Top-Down Arbeitsweise.
Du definierst deine einzelnen Methoden erst einmal nur über die Namen und Parameter, ohne die Methodenrümpfe auszuprogrammieren und schreibst dann deine Hauptmethode, welche dann die anderen Methoden in gewünschter Weise aufruft.
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Fr 02.09.11 11:04
Hi, ja das mit dem Vermögen jedesmal eingeben kann nervig sein. Aber was wenn jemand sagt ich will mal vrsuchen was passiert wenn ich 300€ von 3000€ Abhebe. Aber man kan ja den User fragen. Wenn er will wird das vermögen eben wieder angezeigt. Jetzt mal eine Frage: Sollte man Methoden im algemeinen versuchen wegzulassen? Oder kan ich gelassen drauf los arbeiten mit Methoden?
mfg storestore
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 02.09.11 11:21
Zitat: | Sollte man Methoden im algemeinen versuchen wegzulassen? |
Nein eher im Gegenteil. Die Best Practises besagen eher das eine Methode nie länger sein soll als das was du auf dem Bildschirm mit einem Blick überschauen kannst und das eine Methode genau 1 Sache machen soll und nicht mehrere. Beides sollten man nicht völlig dogmatisch betrachten aber im Auge behalten. Eine gute Prüfregel für mich ist immer wenn ich Probleme habe der Methode einen sprechenden Namen zu geben der auch wirklich besagt was diese Methode tut. In diesem Fall macht sie wahrscheinlich zu viel und man sollte die Struktur überdenken. Wo wir übrigens wieder am Ausgangspunkt dieses Threads wären. Wenn jemand versucht seine Methode Main zu nennen ist irgendwas faul  Im gesagten kannst du das Wort Methode auch durch Klasse ersetzen. Gilt dort ähnlich.
Zitat: | Oder kann ich gelassen drauf los arbeiten mit Methoden? |
Ist genauso schlimm. In diesem Thread wurde dir bereits empfohlen vielleicht mal erst ein Blatt zur Hand zu nehmen um deine Gedanken zu ordnen bevor du loslegst. Dem kann ich nur uneingeschränkt zustimmen und hier wiederholen.
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Sa 03.09.11 12:51
Hi,
ok das mit dem Blatt werde ich dan in Zukunft weiter so machen (weiter so verwenden).
Naja nur das Problem mit ist das manche mir empfehlen es mit Methoden zu machen und manche meinen ich sollte es lieber ohne Methoden machen wegen der rekursierung. Abe rdie rekursierung tritt doch immer ein wenn ich eine Methode aufrufe, oder. Es gibt zwar sehr viele besipiele im "www" aber das Problem ist das ist etwas höheres Mathe. Das hatte man leider noch nicht in der 7.klasse(komm bald in dich 8. nur noch eine Woche  ) Habe ich das so richtig verstanden
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Mo 05.09.11 08:30
Das siehst du falsch.
Du hast erst eine Rekursion wenn die Methode sich selbst aufruft. Im Idealfall hast du eine Methode die sich nicht selbst aufruft und die Wiederholung von außen kommt.
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Mo 05.09.11 12:59
Achso, sprich sowas:
C#-Quelltext 1: 2: 3: 4:
| public void Methode() { Methode() } |
oder mfg storestore
Moderiert von Th69: Beitragsformatierung überarbeitet.
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Mo 05.09.11 13:05
Genau das ist eine reine Rekursion.
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Mo 05.09.11 19:31
Ahh, ok danke
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
pdelvo
      
Beiträge: 55
Erhaltene Danke: 11
|
Verfasst: Do 08.09.11 14:36
Rekursion als "böse" Abzustempeln ist aber auch falsch. Es gibt durchaus Einsatzgebiete in denen sie nützlich ist. Ein Beispiel wäre das rekursive durchsuchen eines Verzeichnisses. Das lässt sich zwar auch iterativ lösen(mir ist nichts bekannt was nur rekursiv funktioniert), aber das ist bei weitem aufwendiger und nicht so selbsterklärend wie die rekursive Variante. Bei Rekursion muss man aber aufpassen. Und zwar kann es dabei zu einem StackOverflow kommen. Das passiert wenn zuviiele verschachtelte Methodenaufrufe gemacht werden. Damit das Programm weiß, wo es wieder zurückspringen muss nach dem Ausführen einer Methode, wird die Rücksprungaddresse auf den Stack(Stapel9 gelegt. Dabei wird beim Aufrufen einer Methode ein Entrag hinzugefügt, und beim verlassen wird er wieder entfernt. bei der Rekursion kann es vorkommen, dass so oft wieder die Methode aufgerufen wird, dass der Stack überläuft(er ist begrenzt). Und dann fliegt einem das Programm um die Ohren (StackoverflowException). Das passiert bei der iteration nicht. Bei meinem Beispiel mit der Verzeichnissuche würde er für einen untergeordneten ordner diesen wieder rekursiv durchsuchen. Da aber die maximale Pfadlänge auf 255 zeichen begrenzt ist,und jeder Ordner mindestens einen namen von einem Zeichen haben kann kommt man auf eine maximale Ordneranzahl von 255 ineinander geschachtelten Ordnern(die Pfadseperatoren muss man da noch von abziehen). Auf jedenfall ist man mit 255 rekursionen noch lange nicht im bereich eines Stackoverflows. Daher sollte man sich immer überlegen, ob sowas überhaupt auftreten kann.
Bei deinem Programm ist die iterative version aber eindeutig die sinnvollerste. Es ist übersichtlicher. Aber auf Biegen und brechen versuchen rekursion zu vermeiden finde ich falsch. "premature optimization is the root of all evil"
Für diesen Beitrag haben gedankt: storestore
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 08.09.11 14:59
Naja, aber eine Rekursion muss am Anfang noch nicht sein finde ich. Man kann auch versuchen die Probleme in mehreren Methoden und klassen und nicht nur in einer Methode, die sich selbst wieder aufruft (Rekursiert) aufzuteilen
Mfg storestore
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Do 08.09.11 15:15
storestore hat folgendes geschrieben : | Naja, aber eine Rekursion muss am Anfang noch nicht sein finde ich. |
Am Anfang von was?
Wenn du damit den Einstieg in die Programmierung meinst, gebe ich dir teilweise recht. Bevor man das erste "Hello World" geschrieben hat muss man nicht die Tiefen der Rekursion verstanden haben.
Ich für meinen Teil bin durch meinen Informatiklehrer in der zehnten(?) Klasse auf Rekursion gestoßen worden:
"Löse dieses Problem einmal mit und einmal ohne Rekursion. Buch zum Thema steht in der Bibliothek".
So oder so ähnlich ging das damals ab.
Wenn ich so schaue, wie lange du hier schon im Forum bist, dann denke ich, kannst du dich ruhig auch mal an Rekursion trauen. Bevor du aber irgendetwas mit Rekursion programmierst, musst du erst einmal verstehen, was das ist, wie man es anwendet, welche Spielregeln gelten, etc... sprich: lernen 
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
storestore 
      
Beiträge: 397
Erhaltene Danke: 7
WIN 7
C#
|
Verfasst: Do 08.09.11 16:58
Hi,
ja ich meinte am anfang vom c# Lernen.
Das mit der Rekursion verstehe habe ich noch vor. Aber erstmal möchte ich gerne mein "Anfänger Buch" zu ende bringen und vlt. dann mit der Rekursion weiter arbeiten.
War das das einzige was dein Lehrer gesagt hat? War ja echt krass! Welche Schule warst du den?, gab es auf die Aufgaben Noten? und wenn ja welche hast du bekommen? *Befragung ende*
mfg storestore
_________________ Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
|
|
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Do 08.09.11 18:30
Hallo.
Ich habe jetzt nicht alle Beiträge gelesen, aber nur mal so neben bei: wieso schreibst du immer
C#-Quelltext 1:
| else if (text == "A" || text == "a") |
Das geht doch auch leichter z.B.
C#-Quelltext 1:
| else if (text.ToLower() == "a") |
oder du benutzt Console.ReadKey:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| ConsoleKeyInfo key = new ConsoleKeyInfo(); key = Console.ReadKey(); if (key.Key == ConsoleKey.A) |
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|