Pseudocode - Welche Form



  • Hallo Zusammen,

    ich hatte heute ein Erlebnis welches diese Frage hervorgebracht hat.

    Ein Kollege fragte mich, ob ich nichtmal meine Programme vorher in Pseudocode schreiben könne. Also schrieb ich das Programm in Pseudocode, als Beispiel:

    cin >> Eingabe
    
    if(Eingabe == Vergleichswert)
    {cout << "Eingabe ist gleich"}
    else
    {FunktionBeiUngleichheit(Eingabe);}
    

    Also sprich, ich habe keine Statements gesetzt, keine Variablen sondern einfach irgendwelche sinnigen Wörter die kurz und Knapp beschreiben was passieren soll.

    Mein Kollege hingegen meinte dann zu mir, das sei einfach kein Pseudocode, denn dieser wird in reiner Textform geschrieben, Beispiel:

    Eingabe einlesen.
    Eingabe mit Vergleichswert vergleichen.
    
    Bei Gleichheit:
    Ausgabe => Ist gleich
    
    Bei Ungleichheit:
    Rufe Funktion FunktionBeiUngleichheit() mit Eingabe als Übergabeparameter auf.
    

    Im Netz bin ich noch auf weitere Versionen von Pseudocode gestoßen...

    Was ist denn nun richtiger Pseudocode welche Form ihn zu schreiben sollte man sich aneignen? Ich habe es bisher immer so gemacht wie im obigen Beispiel, das ging bisher auch immer gut. Trotzdem frage ich mich das jetzt natürlich.

    Vielleicht weiß ja jemand eine Antwort, bis dahin,

    Liebe Grüße.



  • dein kollege hat leider keine ahnung.

    pseudocode ist formfrei. darfst den schreiben, wie du magst. da gibt es keine verbote, insbesondere nicht ein verbot, formal zu schreiben.



  • JulianB schrieb:

    welche Form ihn zu schreiben sollte man sich aneignen?

    ich würde an deiner stelle den code auch einrücken. dafür aber semikolons und blockklammern weglassen.

    manchmal muß man nicht sinnvollen pseudocode schreiben, der hilfreich ist, die programmidee zu planen und zu erfassen, sondern muß nur von c++ weggehen. zum beispiel, wenn der professor angst vor c++ hat. im zweifelsfall immer an eine pascaloide syntax anlehnen. und niemals niemals mit == vergleichen. daran erkennt der leser, daß c oder c++ drinsteckt und bekommt angst. und wenn du zuweisungen mit := machst, freut er sich.

    schau mal den pseudocode auf den ganzen seiten um http://en.wikipedia.org/wiki/Graph_traversal an.



  • ich persönlich finde diese form am besten:

    Algorithm name_des_algos
      Input: A was_ist_a
      Output: was_kommt_raus
    
      variable <-- neuer_wert
      for each item in the list blahblah do
        if the item > irgendwas then
          irgendwas <-- the item
      return irgendwas
    

    ^^ die pseudo-keywords fett, variablen usw. kursiv, der rest in normaler schrift
    🙂



  • JulianB schrieb:

    Ein Kollege fragte mich, ob ich nichtmal meine Programme vorher in Pseudocode schreiben könne. Also schrieb ich das Programm in Pseudocode, als Beispiel...

    Wie schon von volkard geschrieben, gibt es keine festen Regeln hierbei.

    Meine Meinung dazu:
    Pseudocode würde ich Sprachneutral schreiben, und gleichzeitig nicht Romane verfassen. Angaben wie cin usw. legen schon auf eine Plattform/Sprache fest, ich sehe den Sinn von Pseudocode eher in einer allgemeinen Logikbeschreibung.

    Meine Variante wäre wohl eine Mischung aus beiden* (Aber wie gesagt ist dies nur meine Meinung und es gibt keine Notationen):

    Eingabe einlesen
    
    Wenn(Eingabewert gleich Vergleichswert)
      Ausgabe: "Ist gleich"
    Sonst
      Funktion FunktionBeiUngleichheit, mit Eingabe als Übergabeparameter aufrufen
    

    * Deine ist mir zu Sprachbezogen, die deines Kollegen zu ausführlich
    cu André



  • asc schrieb:

    Meine Meinung dazu:
    Pseudocode würde ich Sprachneutral schreiben,

    außer vielleicht, wenn schreiber und leser in einer gemeinsamen programmiersprache profis sind? vielleicht ist dann

    cout<<"sind gleich"
    

    einfacher zu lesen als

    Ausgabe: sind gleich
    

    für obigen fall ist pseudocede eh blödsinn. ich nehme ihn gelegentlich bei komplexeren sachen zum planen. und dann sind meine pseudocodezeilen schon anfangs fette brocken, die zu beschreiben einen ganzen satz incl. relativsatz benötigen. und das sieht dann gar nicht nach c++ aus, sondern eher wie der pseudocode auf http://en.wikipedia.org/wiki/Best-first_search . den hacke ich dann ein wenig klein, bis er eher aussieht wie der von http://www.c-plusplus.net/forum/viewtopic-var-t-is-231186.html . und dann fällt das "übersetzen" nach c++ auch gar nicht mehr schwer.



  • Hallo an Alle,

    erstmal vielen Dank an euch, das ging ja rasend schnell. Gut ich habe jetzt einen kleinen Überblick bekommen, es scheint tatsächlich so, das jeder seine eigene Form findet.
    Mir allerdings gefällt von allen hier die von asc am besten:

    Eingabe einlesen
    
    Wenn(Eingabewert gleich Vergleichswert)
      Ausgabe: "Ist gleich"
    Sonst
      Funktion FunktionBeiUngleichheit, mit Eingabe als Übergabeparameter aufrufen
    

    Sie ist gut zu verstehen, besitzt eine gute lesbarkeit und sollte selbst für "nicht-Programmierer" zu verstehen sein.
    Die reine Textform mag ich persönlich auch nicht und ich gebe gerne zu das meine Version wohl zu Sprachbezogen ist.

    Man lernt ja nie aus, vielen Dank nochmals an euch

    LG

    Edit:

    @Volkard: Der obige Fall ist ja nur ein kleines Beispiel, es geht schon um größere Projekte die in Pseudocode geschrieben werden sollen.



  • beispiel von mir, wo pseudocode als kommentar noch lebt

    void vorneEinfuegen(double neuerWert){
            //neuen Knoten erzeugen und Adresse merken in lokaler
            //Variable namens nk
            Knoten* nk;
            nk=new Knoten;
            //den Wert in das Daternfeld vom neuen Knoten schreiben
            nk->daten=neuerWert;
            //Adresse vom ersten Element in das Next-Feld vom neuen
            //Knoten schreiben
            nk->next=anfang;
            //Listenanfang setzen auf die Adresse des neuen Knotens
            anfang=nk;
        }
    


  • Um Code "simpel" abzubilden gibt es viele Techniken. PAPs, Struktogramme, Nassi-Shneiderman-Diagramme und an meiner Uni waren alle Codebeispiele in einem sehr mathenahen Pseudocode (ich hab keine Ahnung ob das eine Art Standard ist. Hab mal einen Screenshot gemacht; vllt erkennt es ja jemand: http://img399.imageshack.us/img399/9022/algonr0.png )
    Für mich sieht übrigens Pascal aus wie Pseudocode. 😃

    Abgesehen davon finde ich generell Pseudocode sinnlos.



  • this->that schrieb:

    PAPs, Struktogramme, Nassi-Shneiderman-Diagramme

    hans rosenberger müßte da einen punkt abziehen, denke ich.

    und an meiner Uni waren alle Codebeispiele in einem sehr mathenahen Pseudocode

    und das vielleicht ist der grund für deine äußerung

    Abgesehen davon finde ich generell Pseudocode sinnlos.

    der prof benutzt pseudocode anscheinend, um zwanzigzeiler in dreizeiler zu verwandeln. naja, mir würde das spaß machen, aber nur aus freude am extremen.



  • volkard schrieb:

    beispiel von mir, wo pseudocode als kommentar noch lebt

    void vorneEinfuegen(double neuerWert){
            //neuen Knoten erzeugen und Adresse merken in lokaler
            //Variable namens nk
            Knoten* nk;
            nk=new Knoten;
            //den Wert in das Daternfeld vom neuen Knoten schreiben
            nk->daten=neuerWert;
            //Adresse vom ersten Element in das Next-Feld vom neuen
            //Knoten schreiben
            nk->next=anfang;
            //Listenanfang setzen auf die Adresse des neuen Knotens
            anfang=nk;
        }
    

    hehe, du kommentierst bestimmt auch sowas:

    // setze a auf 0
    a = 0;
    

    🙂



  • ~fricky schrieb:

    hehe, du kommentierst bestimmt auch sowas:

    // setze a auf 0
    a = 0;
    

    🙂

    volkards code war das Endresultat mit dem Pseudo Code als Kommentar.

    Insofern: ja, man würde bei dieser Variante auch ein a=0; kommentieren (da es ja keine Kommentare sind sondern die Anweisungen als Pseudo Code).

    Für mich persönlich nehme ich auch eher volkards variante - es sei denn jemand anderer soll den code lesen, dann wirds eine mischung aus pascal und python - ähnlich dem was du auf der 1. seite geschrieben hast, nur mit := als zuweisung statt <- und öfters auch deutsch statt englisch...



  • volkard schrieb:

    hans rosenberger müßte da einen punkt abziehen, denke ich.

    Hans wer?



  • volkard schrieb:

    beispiel von mir, wo pseudocode als kommentar noch lebt

    du bist also auch so ein frickler, der in seinem code deutsche bezeichner verwendet. da läufts mir kalt den rücken runter.
    was ist mit "next", ist dir da das doitsche wort nicht eingefallen? 🙂



  • volkard schrieb:

    der prof benutzt pseudocode anscheinend, um zwanzigzeiler in dreizeiler zu verwandeln. naja, mir würde das spaß machen, aber nur aus freude am extremen.

    Für nen Dreizeiler beweist sich auch die Korrektheit etwas angenehmner. Außerdem werden durch diese Formulierung viele Implementierungsdetails offen gelassen, das heißt man sieht sehr klar den Algorithmus und kann sich danach überlegen welche schicken Datenstrukturen da nun das Maximum an Effizienz für die einzelnen Schritte rausholen. Mir gefällt der Pseudo-Code von dem Kruskal. 🙂



  • kulturwächter schrieb:

    du bist also auch so ein frickler, der in seinem code deutsche bezeichner verwendet.

    ich glaub, ich mache in code, der zur wiederverwendung ansteht, ausschließlich englische bezeichner.
    code allerdings, der ausschließlich für das aktuelle projekt da ist, der wird gerne deutsch.
    die projektübergreifende liste hat eher sowas wie void push(T const& t){top=new Node(top,t)} stehen. mal überlegen, ob ich T const&& t schreiben sollte. hab immernoch keinen modernen compiler drauf.



  • kulturwächter schrieb:

    du bist also auch so ein frickler, der in seinem code deutsche bezeichner verwendet. da läufts mir kalt den rücken runter.

    Es gibt sogar Firmen wo die Vorgabe lautet, das man deutsche Bezeichner verwendet. Sei es, weil die Software nur im deutschen Sprachraum verwendet wird, sei es weil die krampfhafte Suche der englischen Fachbegriffe unnötig Zeit dauern würde, oder dazu führen würde das man englische Programmierer mit Lachkrämpfen einliefern müsste...



  • Mein eigener Pseudocode dient in der Regel nur, um mir selbst klar zu machen wie ich ein Problem loesen will. Und er ist daher ist je nach Laune, Komplexitaet des Problems und mein Verstaendnis des selben irgendwo zwischen Mathematisch formuliert (wie beim Kruskal) oder schaut fast schon aus wie Python. Wobei ich beliebig zwischen C++ - Objektnotation ( foo.get_something()) und normaler Funktionsnotation rumspring (get_something_from_foo()), hin & wieder auch Bezeichner verwend die nur ich kenn oder sachen einfach komplett auslass weil sie fuer mich klar sind.

    Aktuelles Beispiel:

    relevant_subtypes = all_subtypes_of_segment()
    
    for each pos in segment:
       current_subtype = pos.get_subtype()
       for each sequence:
          if sequence.get_subtype() == relevant_subtype:
              ... possible mismatch type 1
          else if sequence.get_subtype() in relevant_subtypes
              // ignore
          else
              ... possible mismatch type 2
    

    Wenn ich Pseudocode verwende, um jemand einen Algorithmus zu erklaeren, kommt es ganz auf den Gespraechspartner an, was ich verwende. Ich bevorzuge mathematisch genaue und kurze Notationen. Meiner Erfahrung nach sind die aber sehr ungeeignet, um Leuten "was Neues" beizubringen, weil die meisten Leute Probleme mit solchen Notationen haben und dann gleichzeitig die Notation & den Inhalt verstehen muessen. Da wird dann ein mathematischer Dreizeiler zum mentalen Vierzigzeiler. Nicht umsonst wird der Prof. bei der Kurskal-Folie laenger als 2 Minuten verweilt sein 😉



  • Es gibt keinen Pseudocode, sondern nur Pseudocoder, wie man hier mal wieder sieht.



  • this->that schrieb:

    Abgesehen davon finde ich generell Pseudocode sinnlos.

    manchmal kommt man aber eben nicht drumrum. Es gibt Vorlesungen, bei denen ohne Pseudocode nicht mitkommen könntest. Da denke ich z.b. an KI Vorlesungen oder Hardware verifikation, wenn du über BDD travesieren muss oder Bild/Urbildberechnung mittels (K)BBDs machen musst, denn wenn du erstmal richtigen Code [1] schreiben müsstest, würde man 300 Folien statt 10 pro Vorlesung durchgehen.

    Ich musste schon mit BDDs Bibliotheken arbeiten, das macht es keinen Spaß mehr, wenn man sich davor den Algorithmus nicht in Pseudocode aufgeschrieben hat, denn ohne würde man nichts machen können.

    [1] zumal, welche Sprache ist "die Richtige"? C, C++, Java, haskell, ...


Anmelden zum Antworten