Programm analysieren
-
Hallo Leute!
Und zwar hab ich folgendes Problem:
Ich habe einen Algorithmus in Pseudoprogrammiersprache und muss diesen analysieren! Sprich, d.h. was er berechnet und warum er dies tut und warum er irgendwas ausgibt usw.
Nur dadurch ich so etwas noch nie gemacht habe, weiß ich jetzt nicht, wie ich da am Besten anfangen soll. Bzw. angefangen hab ich so, dass ich dass ganze mal in c++ abgetipselt hab und gschaut hab, was das Programm für einen Output liefert, wenn ich irgendeinen Input geb. Soviel so gut!
Doch nun weiß ich nicht weiter, wie ich das Ganze am Besten analysieren soll! Da ich im Endeffekt noch immer nicht genau sagen kann, was das Ganze soll.
Irgendjemand einen Lösungsvorschlag, wie man am Besten irgendwelche Algorithmen analysiert?
-
Ohne Code werden wir dir da nicth viel helfen können...
Am Besten du beginnst einfach bei einfachen Dingen (Zwischenschritten), kannst sie ja auf ggf kommentieren, damit du nicht vergisst was die machen...
Und einfach nach der Reihe durchgehen.Soviel so gut!
"Soweit"?
-
ok! ich geb jetzt mal, einen Ausschnitt des Algos, den ich in c++ geschrieben hab, hier an:
void Algorithm (int v1, int v2, int v3, int v4) { int v[20]; v[1] = v1; v[2] = v2; v[3] = v3; v[4] = v4; v[5] = v[3] - v[1]; v[6] = v[4] - v[2]; v[7] = v[1]; v[8] = v[2]; v[9] = 0; v[10] = 1; v[11] = 1; if (v[5] < 0) { v[5] = -v[5]; v[10] = -1; } if (v[6] < 0) { v[6] = -v[6]; v[11] = -1; } if (v[6] <= v[5]) { v[12] = 2 * v[5]; v[13] = 2 * v[6]; while (true) { cout << "(" << v[7] << "," << v[8] << ")"; if (v[7] == v[3]) break; v[7] = v[7] + v[10]; v[9] = v[9] + v[13]; if (v[9] > v[5]) { v[8] = v[8] + v[11]; v[9] = v[9] - v[12]; } } }die else Verzweigung schaut ungefähr gleich aus ...
Soweit: Ich weiß (bzw. vermute), dass v1, v2 und v3, v4: xy - Koordinaten sind.
Die darauffolgenden Initialisierungen v5, v6, v7, v8 geben glaub ich die Differenz dieser beiden Punktkoordinaten an!? v9 - v13 ... da häng ich schon a bissal.
Weiter im Kontext: Die nächsten zwei if - Schleifen, schaun einfach nach, ob es eine neg. Koordinate ist. Bei der dritten if, kann ich ma schon wieder nix vorstellen, warum die da is.
Die Ausgabe liefert zwei Koordinaten, die sich an die langsam an die Eingabe anpassen. Aber was das genau soll, kapier ich nicht. genauso wenig, wie die restlichen zuweisungen.Meine Frage ist jetzt, wie ich das ganze am Besten angeh, um den Algo zu analysieren und zu verstehen :-)??
Bin über jede Hilfe dankbar ...p.s. hab den algo 1 zu 1 vom pseudo umgeschrieben; deshalb auch die verwirrenden Namensgebungen und die unsaubere Programmierung ...
-
life_drake schrieb:
...
Doch nun weiß ich nicht weiter, wie ich das Ganze am Besten analysieren soll!..Hmmm, ich kenne Dich jetzt nicht und weiß deswegen nicht, wieviel Du schon weißt, deswegen fange ich mal ganz vo vorne an:
- Gehe das Programm Schritt für Schritt durch und schau Dir an, wie es die Werte seiner Variablen an; das kann man auch mit Bleistift und Zettel.
- Welche Parameter nimmt das Programm entgegen (Input) und was gibt es zurück (Output) ?
- Was hat der Output mit dem Input zu tun ?
- Wo kannst Du mathematische Formeln/Algorithmen erkennen ? Bisweilen hilft es, die in "mathematische Form" zu bringen ... da erkennt man bisweilen Dinge wieder.
- ...Insgesamt ist so ein "Disassembling" nicht trivial - wenn es etwas länger dauert und zwischendurch verwirrend ist, braucht Dich das nicht zu frustrieren; ist kein Zeichen von Inkompetenz...
EDIT: Jetzt ist gerade Dein "neuestes" Post reingekommen - da ist einiges von gerade Gesagten überflüssig geworden.
Mein erster Tipp zum aktuellen Programm: Strukturieren !
Schmeiß mal den v[]-Vektor raus - braucht's nicht; Du kannst ebensogut mit v1-v4 rechnen und für die anderen würde ich auch erstmal "Namen" vergeben- hilft beim Wiederfinden.Gruß,
Simon2.
-
life_drake schrieb:
p.s. hab den algo 1 zu 1 vom pseudo umgeschrieben; deshalb auch die verwirrenden Namensgebungen und die unsaubere Programmierung ...
kannst ja mal den kompletten pseudocode hier posten...
-
@Simon2: danke für deine ausführliche antwort ... bezüglich Namen vergeben: das is ja nicht so einfach, da ich deren Funktion nicht genau kenn. Und eben wenn ich mit Stift und Zettel arbeit, is das mit den Namen ja eh net so schlimm.
@net: wollt ja eh zuerst den pseudo text postn, doch das dauert irgendwie ewig lang bis ich den abgetipselt hab. das mit der namensgebung ist absicht; das ist Bestandteil der Übung, die umzubenennen. bzw. das Programm "schöner" zu programmieren.
Mein Hauptproblem is nach wie vor, wie man einen Algorithmus richtig analysiert um dessen Funktion zu erkennen. Denn das Problem wird ja nicht nur bei dieser Übung auftauchen, sondern wahrscheinlich auch später bei den komplexeren Dingen.
-
Spoiler: (http://rot13.de)
qre nytbevguzhf orxbzzg qvr k haq l xbbeqvangra iba mjrv Chaxgra haq tvog qvr xbbeqvangra qre chaxgr nhf zvg qrara zna qrera ireovaqhatfyvavr anpu oerfraunz mrvpuarg
-
@D1BAKEL: danke danke! so ausführlich wollt ichs ja gar net haben!

nein echt danke; wiki liefert da echt eine schöne ausführliche Erklärung!
kennt man solche Algorithmen einfach?ABER: Um auf mein eigentliches Problem zurück zu kommen (weil ich will ja lernen auch was dabei
):
Kann mir irgendjemand eine schrittweise Anleitung geben, wie man Algorithmen analysiert?
-
Dafür gibts Anleitungen?

Wenn ich ein komplizierteres Stück Code vor mir hab, geh ich einfach in der Reihenfolge des Codeflusses durch. Notfalls noch einen konkreten Wert für Variablen vorgestellt und dann passts.