Pseudocode schreiben

inter_face

Cadet 1st Year
Registriert
Apr. 2019
Beiträge
12
Hallo allerseits,

über die Ausgabe der Zahlen von 1 - 100 mit den Bedingungen:
  1. Pro Zeile nur eine Zahl ausgeben
  2. Ist die Zahl durch 3 teilbar ist, dann Ausgabe des Wortes "kilo"
  3. Ist die Zahl durch 5 teilbar ist, dann Ausgabe des Wortes "byte"
  4. Ist die Zahl durch 3 und 5 teilbar ist, dann Ausgabe des Wortes "kilobyte"
Mein Versuch:
Code:
Gib die Zahlen von 1 bis 100 aus

Gib pro Zeile nur eine Zahl aus:

   int Zahl = x;

   Wenn x teilbar durch 3, dann das Wort kilo ausgeben, sonst x;

   Wenn x teilbar durch 5, dann das Wort byte ausgeben, sonst x;

   Wenn x teilbar durch 3 und 5, dann das Wort kilobyte ausgeben, sonst x;

Mir gefällt das noch nicht so ganz, hat jemand Verbesserungsvorschläge?
Es geht erstmal nur um eine grobe Darstellung des Ablaufs, ohne auf die expliziten Elemente einer Programmiersprache einzugehen, obwohl ich bereits "int Zahl = x;" benutzt habe!

Danke
 
Zuletzt bearbeitet:
Code:
func FunktionsName (eingabeParameter) {
  for (int Zahl = 1 ... 100) {
    switch (Zahl) {
      case Zahl % 3 == 0 : print ("kilo")
      case Zahl % 5 == 0 : print ("byte")
      case Zahl % 3 == 0 && Zahl % 5 == 0 : print ("kilobyte")
    }
    print ("\n")
  }
}

Der Leser muss in jedem Fall etwas Ahnung von Programmierung haben. Ohne Schleifen und Conditionals geht's nicht.
Es heißt ja schließlich auch PseudoCODE, weil dort eben Strukturen aus der Programmierung genutzt werden: https://de.wikipedia.org/wiki/Pseudocode
Wenn man diese Strukturen weglässt, dann kommt dabei sowas raus wie dein Beispiel "Code" da oben. Der lässt viel zu viel Interpretationsspielraum.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: BeBur und inter_face
Auch im Pseudocode wirst du eine Syntax mit Schlüsselwörtern brauchen. Je nach Zielgruppe musst du diese näher an der Mathematik, der (deutschen) Sprache oder einer Programmiersprache (Beispiel von @benneque ) gestalten.

Wenn es um die Darstellung geht, wirf mal einen Blick auf die Bildchen von Latex: https://en.wikibooks.org/wiki/LaTeX/Algorithms Du setzt zwar kein Latex ein aber vielleicht hilft die Darstellung bei deinem eigenen Pseudocode.
 
benneque schrieb:
weil dort eben Strukturen aus der Programmierung genutzt werden
genutzt werden können
Und zwar je nach Zielgruppe.

Entgegen der Meinung von @benneque sollte man gerade für Pseudocode keine spezifischen Programmierkenntnisse haben müssen. Auch muss man keine syntaktischen Zeichen oder Schlüsselwörter verwenden oder den Code mit einer Klasse/Funktion darstellen (es sei denn es ist relevant). Für Pseudocode gibt es kein richtig oder falsch, weil es keinen Compiler/Standard gibt.

Das einzige was wichtig ist, ist, dass deine Zielgruppe den programmatischen Ablauf auf Ebene deiner Intention versteht.

Ich habe mal eine mögliche Verbesserung eingebaut, die mMn Sinn macht.

Code:
Für die sortierten Zahlen x von 1 bis 100:

   Wenn x teilbar durch 3, dann das Wort kilo ausgeben, sonst x;

   Wenn x teilbar durch 5, dann das Wort byte ausgeben, sonst x;

   Wenn x teilbar durch 3 und 5, dann das Wort kilobyte ausgeben, sonst x;

   neue Zeile ausgeben
 
  • Gefällt mir
Reaktionen: inter_face und paccoderpster
Pseudocode ist eine Möglichkeit, die Programmquelltexte mit eigenen Worten zu beschreiben. Im Grunde kannst du das so machen wie du willst bzw. wie du es verstehst. Das ist reine Interpretation, da gibt es kein Richtig und Falsch.

So würde ich es beschreiben:

Code:
Ablauf: Zahlenausgabe 1 von 100

zahl x = 1

Schleife bis x größer 100: {
    WENN x Restlos durch 3 => ausgabe "kilo"
    WENN x Restlos durch 5 => ausgabe "byte"
    WENN NICHT(x Restlos durch 3 ODER x Restlos durch 5) => ausgabe x
    x inkrementieren
    ausgabe Zeilenumbruch
}
 
  • Gefällt mir
Reaktionen: inter_face, dracki und new Account()
Alternativ könntest du das ganze natürlich auch grafisch darstellen. Mit einer Art Ablaufdiagramm / Zustandsautomat.

Achtung: ASCII Art Incoming :D
Code:
START -> Zahl = 1
          |
          | <--- Zahl um 1 erhöhen -<--|
          v                            |
         Zahl == 100                   |
            - ja --> ENDE              |
            - nein                     |
               |                       |
               v                       A
         durch 3 und 5 teilbar?        |
            - ja ----------> print ----|
            - nein                     |
               |                       |
               v                       A
         durch 3 teilbar?              |
            - ja ----------> print ----|
            - nein                     |
               |                       |
               v                       A
         durch 5 teilbar?              |
            - ja ----------> print ----|
            - nein -------->-----------|
 
inter_face schrieb:
Mein Versuch:
Code:
Gib die Zahlen von 1 bis 100 aus

Gib pro Zeile nur eine Zahl aus:

   int Zahl = x;

   Wenn x teilbar durch 3, dann das Wort kilo ausgeben, sonst x;

   Wenn x teilbar durch 5, dann das Wort byte ausgeben, sonst x;

   Wenn x teilbar durch 3 und 5, dann das Wort kilobyte ausgeben, sonst x;
Die Darstellungsform wurde ja bereits mehrfach besprochen, Pseudocode kann alles mögliche sein, meinetwegen auch Striche im Sand. Was mir auffällt ist, dass du einige Redundanzen mit dir rumschleppst, welche dir auch das Ergebnis verfälschen können.
So deine vielen "sonst x"-Statements. Zum einen ist das immer die gleiche Aktion, also warum mehrfach coden (Redundanz). Außerdem gibst du somit direkt "x" aus, wenn die Zahl durch 3 teilbar ist, checkst aber DANACH erst auf Teilbarkeit durch 5. Selbiges mit dem letzten "wenn": Wenn das erfüllt ist waren die ersten beiden auch erfüllt, deine Ausgabe wäre also im Falle einer Zahl, die durch 3 und 5 teilbar ist: "kilobytekilobyte" bei einer Zahl die nur durch 5 teilbar ist wäre die Ausgabe dann "xbytex" (zweimal "x" durch die "else"-Konditionen des ersten und letzten "if")

Diese Probleme hat @paccoderpster in seinem Code umgangen.
 
  • Gefällt mir
Reaktionen: inter_face und paccoderpster
@ChiliSchaf Ich finde seine Darstellung trotzdem nicht falsch. Sie ist sehr abstrakt und beschreibt eher mehr den Ablauf, wie es ein Mensch mithilfe seiner Intuition tun würde. Ich habe aber den Ablauf des Codes so beschrieben, als müsste ich es einer stumpfen Maschine erklären. Der Mensch erkennt, dass mit jeder Zeiel x um 1 erhöht werden muss, eine Maschine kann das nicht. Erinnert mich ein wenig an:

Bring Milch mit. Wenn sie Eier haben, bring 6 mit. Also kaufe ich 6 Packungen Milch, weil sie hatten Eier.
 
  • Gefällt mir
Reaktionen: ChiliSchaf
ChiliSchaf schrieb:
Die Darstellungsform wurde ja bereits mehrfach besprochen, Pseudocode kann alles mögliche sein, meinetwegen auch Striche im Sand. Was mir auffällt ist, dass du einige Redundanzen mit dir rumschleppst, welche dir auch das Ergebnis verfälschen können.
So deine vielen "sonst x"-Statements. Zum einen ist das immer die gleiche Aktion, also warum mehrfach coden (Redundanz). Außerdem gibst du somit direkt "x" aus, wenn die Zahl durch 3 teilbar ist, checkst aber DANACH erst auf Teilbarkeit durch 5. Selbiges mit dem letzten "wenn": Wenn das erfüllt ist waren die ersten beiden auch erfüllt, deine Ausgabe wäre also im Falle einer Zahl, die durch 3 und 5 teilbar ist: "kilobytekilobyte" bei einer Zahl die nur durch 5 teilbar ist wäre die Ausgabe dann "xbytex" (zweimal "x" durch die "else"-Konditionen des ersten und letzten "if")

Diese Probleme hat @paccoderpster in seinem Code umgangen.
Hast recht, danke für den Hinweis! Ich weiss, ich bin NOCH kein Ass :) im Programmieren oder Codes schreiben, aber dein Hinweis haut hin.
 
inter_face schrieb:
über die Ausgabe der Zahlen von 1 - 100 mit den Bedingungen:
Pro Zeile nur eine Zahl ausgeben
  1. Ist die Zahl durch 3 teilbar ist, dann Ausgabe des Wortes "kilo"
  2. Ist die Zahl durch 5 teilbar ist, dann Ausgabe des Wortes "byte"
  3. Ist die Zahl durch 3 und 5 teilbar ist, dann Ausgabe des Wortes "kilobyte"

Das ist natürlich "FizzBuzz" und die Referenzimplementation in der RockStar-Programmierungssprache sieht so aus:
Code:
Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart

Give back your heart

Desire is a lovestruck ladykiller
My world is nothing
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top

If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top

If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top

Whisper my world
Du musst nur "Fizz" und "Buzz" durch "Kilo" und "Byte" ersetzen. "Pseudo" genug?

Neben der "idiomatischen" Rockstar-Schreibweise gibt es auch noch eine Fortran-ähnliche Version: https://github.com/RockstarLang/rockstar/blob/master/examples/fizzbuzz_minimalist.rock
 
Zuletzt bearbeitet:
Zurück
Oben