Logisches Problem/Programmfehler

  • C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Logisches Problem/Programmfehler

    hi
    leibe community
    ich hab ne hausaufgabe
    eine teil aufgabe davon das folgende für eine beliebige anzahl von reihen zu erzeugen.

    für r=3:
    **0
    *000
    00000
    *000
    **0

    dafür hab ich jetzt was geschrieben:

    C-Quellcode

    1. #include <cstdlib>
    2. #include <iostream>
    3. using namespace std;
    4. int main(int argc, char *argv[])
    5. {
    6. int r,s,a,c;
    7. cout << "Bitte geben Sie eine Zahl ein:";
    8. cin >> r;
    9. s=r;
    10. while(s != 0)
    11. {
    12. s--;
    13. a=0;
    14. c=0;
    15. while (c!=s)
    16. {
    17. c++;
    18. cout << "*";
    19. }
    20. while(a != r-s)
    21. {
    22. a++;
    23. cout << "0";
    24. }
    25. c=0;
    26. while(c!=a-1)
    27. {
    28. c++;
    29. cout << "0";
    30. }
    31. cout << "\n";
    32. }
    33. while(s != r)
    34. {
    35. s++;
    36. a=0;
    37. c=0;
    38. while (c !=s)
    39. {
    40. c++;
    41. cout << "*";
    42. }
    43. while(a != r-s)
    44. {
    45. a++;
    46. cout << "0";
    47. }
    48. c=0;
    49. while(c!=a-1)
    50. {
    51. c++;
    52. cout << "0";
    53. }
    54. cout << "\n";
    55. }
    56. system("PAUSE");
    57. return EXIT_SUCCESS;
    58. }
    Alles anzeigen


    wenn ich diesen code kompiliere und ausführe
    dann erzeugt er bei mir eine endlose kette von 0000000...
    :confused::confused::confused:

    ich weiß aber nicht wo genau der fehler im code ist...
    oder ist mein kompiler kacke?
    wäre nett wenn ihr mir meinen fehler zeigen könnt

    mfg xparet0209
    [SIZE="4"][FONT="Comic Sans MS"]Ich knalle keine Menschen ab, sonder treffe die Hitbox eines Polygonmodells.[/FONT][/SIZE]

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von xparet0209 ()

  • 1. Der Kompilier ist so gut wie niemals Schuld oder Fehlerhaft. Selbst wenn man sich noch so sicher ist. Das man einen Fehler findet dürfte nur in äußersten Spezialfällen passieren, und bei solchen einfachen Beispielen die hier auftauchen ist es ausgeschlossen.

    2. Wärst du in der Lage den Debugger zu nutzen könntest du den Fehler selber finden.

    Nachdem die Ausgabe beim Wert r=3 eigentlich abgeschlossen ist, hört diese nicht auf aus dem Grund weil an dem Punkt r=3 und s=2 ist. Das führt dazu das er nochmal in die while(s != r) hineinspringt obwohl er eigentlich fertig sein sollte. Jetzt wird s auf 3 erhöht. Das führt dazu das while(a != r-s) nicht ausgeführt wird weil a = 0 ist und 3-3 auch 0. Also wird a nicht um 1 erhöht ist somit 0. Was in der entscheidenden while(c!=a-1) dazu führt das es zu einer endlosschleife mutiert. Denn hier haben wir nun 0 != -1 er springt nun in die Schleife hinein in der nur noch c erhöht wird und hier kann er nicht mehr raus, weil c immer größer wird wärend a-1 immer = -1 bleibt.
    Soviel dazu.
    Ich glaub die Lösung dafür lass ich dich selber finden :)
  • ah danke ^^
    ich hab den fehler gefunden
    es muss statt while(s != r)
    while(s != r-1)
    heißen

    vielen dank
    allerdings tut sich bei mir eine neue frage auf
    wie hätte ich das problem mit nem debugger lösen können?
    [SIZE="4"][FONT="Comic Sans MS"]Ich knalle keine Menschen ab, sonder treffe die Hitbox eines Polygonmodells.[/FONT][/SIZE]
  • Naja wie der Name schon sagt ist der Dugger zum Debuggen gut, also zur Fehlersuche. Ich weiss jetzt nicht welche IDE du benutzt, aber die meisten ähneln sich da sehr.
    Den Debug prozess startet man in der Regel in dem man irgendwo auf Debug klickt in der IDE.
    Das alleine hilft dir meistens aber kaum. Weil das Programm dann wie gehabt abläuft. Und hier kommen jetzt die Breakpoints ins Spiel. Im Sourcecode setzt man einen oder mehrere Breakpoints, meistens mit klicken an den linken äußersten Rand oder mit der rechten maustaste in der Zeile.
    Die Breakpoints setzt man dann meistens an der Stelle an der man einen Fehler vermutet, hat man überhaupt keine Idee wo er sein könnte dann einfach am Anfang.
    So jetzt nochmal auf Debug und das Programm läuft los. Stösst es an einen Breakpoint wird es angehalten und du gelangst in die IDE zurück wo ein Marker an der Stelle des Breakpoints ist. Jetzt kannst du mit so standardbefehlen wie stepover oder stepinto schrittweise dein Programm ausführen lassen. Gleichzeitig kann man sich in vielen IDEs die aktuellen Variablenwerte und vieles mehr anzeigen lassen. So kommt man in gut 80% der Fälle recht schnell auf den Fehler. Bzw man weiss wieso er jetzt in die if Abfrage nicht reinspringt etc etc.
    Und so z.b. war ich auch in der Lage zu sehen das er eigentlich eine korrekte Ausgabe zu Beginn macht danach aber dann nur noch Nullen in schneller abfolge kommen. ;)
  • Wenn du erntshafte Projekte angehen willst, solltest du ihn erwägung ziehen dir ein besseren Compiler/IDE zuzulegen wie z.B. Visual Studio. Damit hast du viel mehr Möglichkeiten und ausserdem viel mehr Librarys inklusive.
  • cool
    ich hatte heute wieder info in der schule und wir haben mit c# angefangen^^
    dazu haben wir auch visual studios c# 2005 express edition genutzt
    die ist ja freeware
    mein lehrer hat aber die 08 version benutzt
    wisst ihr was dabei der vorteil ist?
    [SIZE="4"][FONT="Comic Sans MS"]Ich knalle keine Menschen ab, sonder treffe die Hitbox eines Polygonmodells.[/FONT][/SIZE]