Programmieren nach Flussdiagramm, Ansätze?



  • Ein Flussdiagramm ist ein Pseudocode und damit gültig für alle Programmiersprachen. Er kann das Programmieren stark vereinfachen und schult das abstrakte Denken für das, was ein Programm machen soll. Wenn Du nur eine Note für einen Test brauchst ist hier jede Hilfe eigentlich überfrlüssig. Du sollst ja etwas lernen!



  • Danke danke, dass weiß ich jetzt mittlerweile auch schon. Und ich machs nochmal deutlich, ich will von euch keine Lösung! Ich finde das ich halt andere Ansichten habe als bei einigen von euch. Liegt vllt an der unterschiedlichen Zielstellung.

    Wenn ich dann frage, was verkehrt ist, andem was ich programmiert habe, dann würd ich solche Antworten wie ... guck doch nochmal da und da nach, guck mal in deinen Materialien nach dem und dem Stichwort nach... , aber was ich nicht toll finde, dass einige von euch denken, der möchte nur ne Lösung, also erst mal rumpöbeln und Sachen verdrehen, 2. nur noch um heißen Brei drumherum reden....

    Das ist nicht Ok. Ich hab geschrieben das die Programme bis zum Tag der Prüfungen laufen müssen. was nicht heißen soll dass Ihr mir nen fertiges Programm servieren sollt, war nie meine Absicht. Ich sitze nach meinem Studium noch Abends bis in die Nacht hinein wegen so ein Programm, und bei Problemen googelt man, guckt in den Materialien und wenn alles nichts nützt landet man halt hier, seien die Problerme/Fehler für euch auch noch sooo simple.

    MFG



  • Dann sag doch bitte mal, wo jetzt noch dein Problem ist..
    Ein Flussdiagramm ist ja die (auch für nicht-Programmierer) verständliche Form eines Programmes. Und sollte keine grossen Probleme bereiten das in einer Programmiersprache umzusetzen, da es ziemlich genau das aussagt, was im Code steht. (if,else,loops usw.) Einfach in grafischer Form.



  • kein Problem, ich war nur verunsichert, Probleme beziehen sich jetzt eher auf das Programm



  • mein problem is recht simple, nur versteh ich es nicht so ganz, und zwar:

    Int zahl
    

    Warnung: Die nicht initialisierte lokale Variable "zahl" wurde verwendet.

    D.h ich muss Zahl einen Wert zuweisen wie zB Zahl=1;

    geht aber nicht, da Zahl eingegeben werden soll.

    cin <<zahl;
    


  • SuperTalent schrieb:

    Warnung: Die nicht initialisierte lokale Variable "zahl" wurde verwendet.

    Das Problem ist (unter anderem), das du die Variable zahl bereits in deinem Code benutzt bevor ihr ein Wert zugewiesen wurde. Hier nochmal der Anfang deines Codes:

    #include <iostream> 
    #include <math.h> // verwende besser <cmath>
    using namespace std; 
    int main(void) 
    { 
    int rahmenzahl=0, wdhlg=0, zahl, zaehler, j; 
        cout << "A U S G A B E   V O N   A S C I I  -  Z E I C H E N\n\n"; 
    while(wdhlg==j) 
    { 
    while(rahmenzahl<9) // Endlosschleife: Schau dir bitte mal genau den Schleifenrumpf an
    { 
        rahmenzahl=1; 
        rahmenzahl+=1; 
    }        
                while(33>zahl)(zahl<126); //Hier verwendest du bereits die Variable 'zahl',
                                          // aber ihr wurde noch kein Wert zugewiesen und es müsste while(zahl >= 33 && zahl <= 126) heißen
                { 
                    cout << "Geben Sie bitte eine  ganze Zahl fuer einen ASCII-Wert ein.!\n"
                         << "Die von Ihnen eingegebene ganze Zahl muss zwischen 33\n und 126 liegen, wobei die Werte 33 und 126 selbst auch\n"
                         << "zulässig sind\n\n"; 
                    cin >> zahl; 
                }
    /* ... */
    

    Bitte schau dir meine Kommentare dazu an :).



  • Ja danke, die Endlosschleife mach ich später 🙂

    zu dem Thema Zahl:

    cout << "\n\nGeben Sie bitte eine ganze Zahl fuer einen ASCII-Wert ein.!\nDie von Ihnen eingegebene ganze Zahl muss zwischen 33\nund 126 liegen, wobei die Werte 33 und 126 selbst auch\nzulässig sind\n\n";
    				cin >> zahl;
    				while(zahl>33 && zahl<126)
    

    bzw

    cout << "\n\nGeben Sie bitte eine ganze Zahl fuer einen ASCII-Wert ein.!\nDie von Ihnen eingegebene ganze Zahl muss zwischen 33\nund 126 liegen, wobei die Werte 33 und 126 selbst auch\nzulässig sind\n\n";
    				cin >> zahl;
    				while(zahl>33 && zahl<126)
    				{cout << "\n\nGeben Sie bitte eine ganze Zahl fuer einen ASCII-Wert ein.!\nDie von Ihnen eingegebene ganze Zahl muss zwischen 33\nund 126 liegen, wobei die Werte 33 und 126 selbst auch\nzulässig sind\n\n";
    					cin >> zahl;
    				}
    

    Also theorethisch muss das ja danach kommen, ist aber so wie hier nicht umsetzbar..



  • Entweder du machst es mit deinem zweiten Code-Vorschlag (sollte einwandfrei funktionieren) oder du versuchst folgenden Pseudo-Code Ablauf umzuseten:

    WHILE zahl < 33 OR zahl > 126 
      PROMPT FOR NUMBER
      READ zahl
      IF zahl < 33 OR zahl > 126
        PROMPT WRONG INPUT
    END WHILE
    

    Was mir beim Ansehen deines Quelltextes sofort aufgefallen ist, ist dass dir grundlegendes Verständniss für die Programmierung fehlt. Du kannst den Ablauf deines Quellcodes nicht vor dem geistigen Auge verfolgen, verstehst nicht wie bestimmte Zustände deines Programmes in andere übergehen oder wie du Kontrollstrukturen einsetzen musst um ein erwünschtes Ergebnis zu erhalten.

    Wenn dieses Programm Teil eines Testates ist, dass du zur Zulassung für eine Klausur benötigst, dann sehe ich kein Land für die Klausur. Spar dir den Versuch, solltest du einen Bachelor Studiengang belegen. Ich wage zu behaupten, dass du viel zu oft Hausübungen von Kommilitonen abgeschrieben / kopiert hast und dadurch fehlen dir nun die nötigen Grundlagen dieses einfache Flussdiagramm umzusetzen.

    Grüße,
    Daniel



  • ip, ich gebe dir absolut recht und meiner Meinung nach trifft dieser Satz von dir genau ins Schwarze:

    ip schrieb:

    Du kannst den Ablauf deines Quellcodes nicht vor dem geistigen Auge verfolgen, verstehst nicht wie bestimmte Zustände deines Programmes in andere übergehen oder wie du Kontrollstrukturen einsetzen musst um ein erwünschtes Ergebnis zu erhalten.

    SuperTalent, ich glaube es wäre am besten wenn du deine Unterlagen nochmal von Anfang an und in aller Ruhe durchgehst, damit du besser verstehen kannst, wie du einen Code schreibst der genau das macht was du willst.

    P.S.: Eine Kleinigkeit:
    ip, bei deinem Pseudo-Code sind wohl die Relationalen Operatoren vertauscht, denn eigentlich müssten die Bedingungen der while -Schleife und if -Anweisung so lauten:

    WHILE zahl >= 33 OR zahl <= 126 
    [...]
    IF zahl >= 33 OR zahl <= 126
    

    da die einzugebene Zahl zwischen 33 und 126 liegen soll (33 und 126 mit eingeschlossen) :).



  • Mizar schrieb:

    da die einzugebene Zahl zwischen 33 und 126 liegen soll (33 und 126 mit eingeschlossen) :).

    Ung genau deshalb muss die Schleife (und damit die Eingabe) wiederholt werden, wenn der gelesene Wert außerhalb der Grenzen liegt 🙂



  • Ist mir egal, ich weiß das es alles allein meine Arbeit ist, sonst würd ich mir die Mühe nicht machen hier Dinge zu hinterfragen. und es nervt einfach nur, das man sich hier rechtfertigen muss.

    Für dich siehts so aus als ob ich abschreibe etc. , dem kann ich ja beruhigt widersprechen. 😃

    Liegt einfach nur daran, dass ich mir lediglich die Kapitel durchgelesen habe und geguckt habe welche Grundform c++ haben sollte. Den rest hab ich mir durch selber programmieren, rumprobieren, beigebracht. Wenn man das mal so nennen darf. So begreif ich das alles viel besser. Und die Strategie ist für mich die Sinnvollste! Wenn ich Fussball spielen erlernen will, guck ich auch nicht nach wie es geht, man probiert es einfach 😛

    Mittlerweile läuft das Programm ohne die Wiederholung (j/n) und ohne die While Schleife (Zahl>33 && Zahl<126)

    Das krieg ich heut aber auch noch irgendwie hin.



  • ip schrieb:

    Mizar schrieb:

    da die einzugebene Zahl zwischen 33 und 126 liegen soll (33 und 126 mit eingeschlossen) :).

    Ung genau deshalb muss die Schleife (und damit die Eingabe) wiederholt werden, wenn der gelesene Wert außerhalb der Grenzen liegt 🙂

    *Hand-gegen-Stirn-schlag* Ja ok, jetzt hab auch ich es geschnallt :D.



  • genauso siehts aus 😃



  • cout << "\n\nGeben Sie bitte eine ganze Zahl fuer einen ASCII-Wert ein.!\nDie von Ihnen eingegebene ganze Zahl muss zwischen 33\nund 126 liegen, wobei die Werte 33 und 126 selbst auch\nzulässig sind\n\n"; 
                    cin >> zahl; 
                    while(zahl>33 && zahl<126) 
                    {cout << "\n\nGeben Sie bitte eine ganze Zahl fuer einen ASCII-Wert ein.!\nDie von Ihnen eingegebene ganze Zahl muss zwischen 33\nund 126 liegen, wobei die Werte 33 und 126 selbst auch\nzulässig sind\n\n"; 
                        cin >> zahl; 
                    }
    

    ip schrieb:

    Entweder du machst es mit deinem zweiten Code-Vorschlag (sollte einwandfrei funktionieren) oder du versuchst folgenden Pseudo-Code Ablauf umzuseten:

    Also jaa
    klar stimmt, ..naja fast, eins haste vergessen, das "do" ... sicherlich nur versehentlich 😃 😃 😃 😃

    do
    				{
    				cout << "\n\nGeben Sie bitte eine ganze Zahl fuer einen ASCII-Wert ein.!\nDie von Ihnen eingegebene ganze Zahl muss zwischen 33\nund 126 liegen, wobei die Werte 33 und 126 selbst auch\nzulässig sind\n\n";
    				cin >> zahl;
    				cout << "\n";
    				}
    				while(33>zahl && zahl<126);
    

    hab ich ja meen Prob selber gelöst..jetzt nur noch die Wdhlg j/n abfrage und dann is fertig



  • die Lösung für die Wdhlg j/n :

    char wdhlg=' ';
    .
    .
    do
    {
    .
    .
       cout << "\n\nWenn Sie die Eingabe...
       ein 'n'\n\n";
       cin >> wdhlg;
    }
    
    while(wdhlg=='j');
    

    und nochmal zu diesem hier:

    do
             {
    	cout << "\n\nGeben Sie bitte...";
    	cin >> zahl;
    	cout << "\n";
    	}
    while(33>zahl && zahl<126);
    

    33>zahl -> bei Eingabe weniger als 33 muss ich erneut eine Eingabe machen

    zahl<126 -> bei Eingabe mehr als 126 nimmt er das so hin, nur ich sehe da keinen Fehler, woran kann denn das liegen?



  • SuperTalent schrieb:

    33>zahl -> bei Eingabe weniger als 33 muss ich erneut eine Eingabe machen

    zahl<126 -> bei Eingabe mehr als 126 nimmt er das so hin, nur ich sehe da keinen Fehler, woran kann denn das liegen?

    Das mit dem <,> solltest du dir nochmal ansehen;)

    a<b
    das liest sich so:
    a ist kleiner als b ODER b ist größer als a

    a>b
    das liest sich so:
    a ist größer als b ODER b ist kleiner als a

    33>zahl bedeutet also dass zahl kleiner als 33 sein soll
    und
    zahl<126 bedeutet?

    .... dass die zahl kleiner als 126 sein soll.

    Das Problem dabei ist dass wenn die Zahl kleiner als 33 ist, dann ist sie auch automatisch kleiner als 126 😉

    (das hab ich aber schonmal gepostet)



  • Ok danke, werds mir morgen angucken

    MFG & nachtii



  • Dir fehlt es einfach an Programmiererfahrung. Hierzu muss man wissen, welche Kontrollstrukturen (if, if else, for, while, switch, goto) es gibt und wie man diese einsetzt. Das muss man lernen und üben. Die logischen Details sind Aufgabe des Programmentwicklers (macht die Vorgaben, z.B. mit einem Flussdiagramm) oder des Programmierers (macht den lauffähigen Code). Da musste noch jeder Programmierer durch, egal in welcher Programmiersprache. Ein kleiner Tipp: füge Deinem Programm Kontrollausgaben (cout oder Protokolldatei) hinzu oder nutze "debug", dann siehst Du, was während des Programmlaufes geschieht



  • while(33>zahl || zahl>126);
    

    <close>



  • edit sorry...verlesen


Anmelden zum Antworten