Visual Studio Hilfe bei Erläuterung des Quellcodes

Chef24

Semiprofi
Thread Starter
Mitglied seit
01.01.2012
Beiträge
1.250
Hay liebe Community :wink:

Wir sollen in Informatik eine Dokumentation über ein Programm schreiben. Dabei kommt es vor allem auf das Verständnis des Quellcodes und den daraus resultierenden Funktionen an.
Ich hoffe ihr könnt mir da bei einigen Ecken helfen, an die ich anstoße :)

Das Programm stell die Schwingungen eines Pendels dar. Unter anderem auch anhand eines 3D Körpers.
In dem Code wird der Körper (Quader) konstruiert. Ich verstehe die Anordnung allerdings nicht bzw wie die Koordinaten aus dem Code zu verstehen sind :confused:

Ich freue mich über jede Hilfe :)

 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Puh, da bin ich auch erstmal ein wenig überfragt (visual basic ist leider nicht meine Sprache).
Denke das wichtigste was du aus dieser Aufgabe lernen sollst ist allerdings weniger, wie man Code dokumentiert, sondern dass man beim Programmieren IMMER sinnvolle Variabelnamen einsetzen soll >_> :d

Stellt dieses Programm aber auch richtig was dar - das Pendel usw? Also ist es ausführbar?
Wenn ja, dann würde ich erstmal so vorgehen die vorgesetzen Variablen t, b und h manuell zu variieren und zu schauen wie sich das dargestellte Modell verändert. Dann sollte deren Funktion klar sein und auch leichter ableitbar wie diese Koordinatenmatrix da genau funktioniert.

EDIT: Momeeent. Diese drei arrays ("dim") sind einfach nur Punkte im Raum die wohl dargestellt werden..
Darum der verwirrende Hinweis "+3 sind die Punkte des koordinatensystems".
Jeweils x(zahl), y(zahl), z(zahl) bilden einen punkt -> 10 Punkte insgesamt.
Sieben der Punkte bilden offenbar das pendel. Dann ist h wahrscheinlich dessen Länge.
Hoffe das hilft dir etwas weiter...

Aber Hmpf.. kein gescheiter Mensch stellt eine Pendelsimulation so dar o_O
Bzw. generell... im 3D Raum sollte man Vektoren benutzen und nicht absolute Werte - sonst kann selbst ein gut räumlich denkender Mensch nicht so richtig die Positionen begreifen, geschweige denn später damit arbeiten.
Ihr habt nen gemeinen Professor, glaube ich :d
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort DragonTear :)
Ja, das Programm lässt sich auch ausführen und stellt dann mit Hilfe der eingegebenen Auslenkung den pendelnden Körper dar.

Wie darf ich mir das vorstellen, "Punkte im Raum"?
Ich verstehe das so, dass die Zahlen in den Klammern, also beispielsweise x(7 + 3) die Koordinaten sind mit denen in dem Programm sage, wo dieser Punkt ist.
Aber ich habe doch keinen Punkt von dem aus ich anfange eben diese Koordinaten abzuzählen? :confused:
Vllt hilft ja die Grafik weiter.
Ja wirklich toll ist das nicht, da hast du recht :d

 
Ich verstehe das so, dass die Zahlen in den Klammern, also beispielsweise x(7 + 3) die Koordinaten sind mit denen in dem Programm sage, wo dieser Punkt ist.
Das ist nicht ganz richtig.
Visual Basic hat da offenbar eine sehr kurze aber dafür nicht sehr leserliche Art Arrays zu initialisieren: https://msdn.microsoft.com/de-de/library/wak0wfyt.aspx
Also mit der Dim Zeile werden nur drei Arrays mit jeweils 10 Feldern generiert. Dabei sind sie erstmal leer.
Erst in den folgenden Zeilen wo z.B. steht: x(1) = t, wird das Feld an der Stelle 1 im Array, auf den Wert von t gesetzt.
Irgendwo später im Programm werden diese Arrays dann wohl ausgelesen und an den entsprechenden Stellen, ein Punkt gezeichnet.

Aber das ganze ist echt bescheuert "hartgecodet" wie man so sagt, denn z.B. lässt es das System so wie es grad ist, wohl nicht zu, einfach weitere Punkte hinzu zu fügen, ohne dass man auch im Darstellngspart was ändert.
Kannst es aber mal versuchen. Solche Aufgaben löst man definitiv am besten durch Learning-By-Doing.
Das gilt generell für Softwareentwicklung.

Aber ich habe doch keinen Punkt von dem aus ich anfange eben diese Koordinaten abzuzählen? :confused:
Also der Punkt wo es anfängt ist der an x = 0, y = 0, z = 0.
Das ist in der Darstellung dort wo sich die drei schwarzen Linien mit den Achsen-Namen (x,y,z) sich treffen.
 
Zuletzt bearbeitet:
Was du sagst hilft mir auf jeden Fall schon weiter :)
Ich kann den Körper durch ändern der Buchstaben b h t komplett neu dimensionieren. der Punkt x = 0, y = 0, z = 0 ist ja praktisch mein Ursprung, von dem aus ich dem Programm durch die Buchstaben sage wie weit es wohin gehen soll.
Was ich allerdings noch nicht so ganz verstehe, sind die Zahlen in den Klammern, bei x(1) beispielsweise. Das x ist meine Koordinatenachse. Aber wofür genau ist die 1?
 
Ah ok, doch das hilft schon weiter was du sagst. B, t, h sind einfach nur "Platzhalter" für Zahlen. Der Punkt x = 0, y = 0, z = 0 ist praktisch die Mitte des Fensters und von diesem Punkt aus sage ich dem Programm mit b t h wie weit es in welche Richtung gehen soll.
Das funktioniert auch super. So kann ich den Körper komplett neu dimensionieren. :)
Nur das mit den Zahlen in den Klammern x(1) beispielsweise, verstehe ich noch nicht ganz. Das x ist die Achse auf der ich mich befinde. Aber was genau sagt mir diese 1?
Die Zeile
Code:
Dim x(7+3),y(7+3),z(7+3)
erzeugt Dir 3 Arrays mit den Namen x, y und z. In jedes dieser 3 Arrays ist Platz für 10 Werte.
Mit
Code:
x(1) = t
wird dem zweiten Element im Array x der Wert t, also die 3 zugewiesen. In Visual Basic wird das erste Element eines Arrays mit der Position 0 angesprochen und in Folge dessen das letzte Element eines Arrays mit der ArrayGröße-1 (hier also 9).

Bildlich dargestellt. Vor x(1) = t sah dein x Array so aus, weil x(0) bereits mit dem Wert 0 gefüllt war
{0,x,x,x,x,x,x,x,x,x}
Nach der Zuweisung x(1) = t == 3 sieht dein x Array so aus
{0,3,x,x,x,x,x,x,x,x}
Die nächsten Zeilen bis zur For-Schleife befüllen die Arrays x, y, z mit Werten.

In der For-Schleife wird mi z(i), i = 1 bis 7 dann auf den jeweiligen Arrayelementen Operationen durchgeführt.
Code:
for i = 0 To 7
z(i) = z(i) - h
Bei z steht an 0ter Position der Wert 0
Konkret wird beim ersten Schleifendurchlauf die 0te Position mit einem berechneten Wert überschrieben.
z(0) = 0 - 12, also ist z(0) = -12
z Array vor dem Schleifendurchlauf
{0,....}
Nach dem ersten Schleifendurchlauf sieht dein z Array wie folgt aus
{-12,....}

- - - Updated - - -

Danke für die schnelle Antwort DragonTear :)
Ja, das Programm lässt sich auch ausführen und stellt dann mit Hilfe der eingegebenen Auslenkung den pendelnden Körper dar.

Wie darf ich mir das vorstellen, "Punkte im Raum"?
Ich verstehe das so, dass die Zahlen in den Klammern, also beispielsweise x(7 + 3) die Koordinaten sind mit denen in dem Programm sage, wo dieser Punkt ist.
Aber ich habe doch keinen Punkt von dem aus ich anfange eben diese Koordinaten abzuzählen? :confused:
Ein Punkt in der Ebene wird im Koordinatensystem durch 2 Werte beschrieben, ein x und ein y Wert. Ein Punkt im Raum wird im Koordinatensystem in diesem Fall durch 3 Werte beschrieben, also einen x, y und einen z Wert

In deinem Fall könnte ein möglicher Punkt im Raum beispielsweise durch das 0te Elemente des x, y und z arrays beschrieben werden, also x(0), y(0) und z(0) die jeweils den Wert 0 haben: Punkt P(x,y,z) = (x(0),y(0),z(0)) = (0,0,0)

- - - Updated - - -

Eigentlich nicht schwer, nur halt grausam zu lesender Code. :d
 
Zuletzt bearbeitet von einem Moderator:
Amtrax hat es ja vorweg genommen. Die Eins ist der sogenannte Index, also die Stelle im Array auf die zugegriffen wird (schreibend oder lesend).
Aber was mich grad wundert: Euch wird solch ein Batzen vorgesetzt, ohne dass man euch die Syntax eines Arrays beigebracht hat? o_O

Naja, gn8!
 
@amtrax: Danke für die super Antwort :)
Der Groschen will allerdings noch nicht ganz fallen.
Ich erzeuge mir also 3 Arrays x,y,z mit jeweils Platz für 10 Werte. Mit
x(2) = t
y(2) = b
y(3) = b
z(4) = h
x(5) = t

dem Wert in der Klammer weise ich dem n ten wert des jeweiligen Arrays eine Zahl zu (b,h,t).
Aber wieso weise im beispielsweise im Array x den 2. 3. 5. und 6 Wert zu? Die Reihenfolge erschließt sich mir nicht so ganz.

Auf die for Schleife kommen wir besser gleich nochmal zurück das wird sonst zu viel ^^

@Dragontear: Ja toll ist was anderes da hast du Recht :wut:

Edit: Wenn jemand Lust und Zeit hätte, könnte man das vllt auch über ts oder Ähnliches klären. Das würde sicherlich viel Tipperei sparen :)
 
Zuletzt bearbeitet:
dem Wert in der Klammer weise ich dem n ten wert des jeweiligen Arrays eine Zahl zu (b,h,t).
Aber wieso weise im beispielsweise im Array x den 2. 3. 5. und 6 Wert zu? Die Reihenfolge erschließt sich mir nicht so ganz.
Das hat keinen echten Grund - das ist so gemacht um euch zu verwirren...
In welcher Reihenfolge man die Werte zuweist ist egal!

Ich würde das ganze mal schwind strukturieren.
Schreib jweils die Arrayzuweisungen mit dem selben Index untereinander. Also mach Blöcke wo Punkt 1 initialisiert wird. Dann wo Punkt 2 initialisiert wird, usw.
Dann sollte alles offensichtlich sein.
 
Leider kann ich die Werte in der Klammern nicht ändern, dann verändert sich auch die komplette Form :(
 
Nein, du sollst nicht die Werte in den Klammern ändern, sondern die Anordnung der Yeilen.
Dass dass da steht:

x(1) =...
y(1) =...
z(1) =...

x(2) =...
y(2) =...
z(2) =...

Usw. Dann sollte es keine Herausforderung mehr sein, dir vorzustellen wie das Ganze aufgebaut ist.
 
Ah alles klar jetzt hab ich es verstanden. Auch den Aufbau. Die Nummerierung der Punkte ergibt schon Sinn, allerdings nicht in der Reihenfolge wie wir sie haben :shake:
Ich werde deinen Tipp mal wahrnehmen und das umschreiben, kann man ja so niemandem zumuten.
Jetzt nochmal zu der For Schleife, die das Ganze zum laufen bringt.
Die 0 ist ein im Array enthaltener Wert und dementsprechend und eine Koordinate des Quaders. For i = 0 to 7 heißt somit dass die Schleife meine Punkte 0 bis 7 aus dem Array anspricht?
Wieso aber mache ich das ganze nur für das z? Die anderen Werte müsste ich doch genauso auslesen lassen :stupid:
 
dein screenshot vom quellcode zeigt nur wie 3 arrays befüllt werden. nicht mehr und nicht weniger. in der for-schleife werden die elemente des y als auch des z arrays verändert. reine spekulation, da ich nicht wirklich fit in basic bin, dass das dezimal array mit 0.0 für jedes element initialisiert wird.
 
Die 0 ist ein im Array enthaltener Wert und dementsprechend und eine Koordinate des Quaders. For i = 0 to 7 heißt somit dass die Schleife meine Punkte 0 bis 7 aus dem Array anspricht?
Exakt - es spricht deine Punkte an.
Alle z-werte werden um h verringert.
Alle y-Werte werden um die Hälffte von B reduziert.

Wieso aber mache ich das ganze nur für das z? Die anderen Werte müsste ich doch genauso auslesen lassen :stupid:
Es scheint so als ob diese Schleife für die isometrische Ansicht sorgt!
Deswegen wird auch das x nicht angetastet weil dieses 1 zu 1 dargestellt werden muss.
Wieder etwas weswegen ein Programmierer der sowas in einem echten Projekt macht, gefeuert werden würde.


Btw. in welcher Klasse bist du?
Das ist schon eine recht anspruchsvolle Aufgabe.
 
Zuletzt bearbeitet:
Ah alles klar jetzt hab ich es verstanden. Auch den Aufbau. Die Nummerierung der Punkte ergibt schon Sinn, allerdings nicht in der Reihenfolge wie wir sie haben :shake:

Die Reihenfolge ist (fast) egal bzw. in diesem Fall ist sie egal. Ob du:
Code:
x(1) = 0
x(2) = 3

oder 

x(2) = 3
x(1) = 0
schreibst ist egal. Erst wenn die Werte voneinander abhängen wird die Reihenfolge wichtig:

Code:
for i = 1 to 10
  x(i) = i
Next

x(5) = 3

Ist NICHT identisch zu:

Code:
x(5) = 3

for i = 0 to 5
  x(i) = i
Next
 
Zuletzt bearbeitet:
@amtrax: Der Code geht natürlich noch weiter, es ist nur nicht ganz so leicht die nötigen Sachen auf einen Screenshot zu bekommen ^^

Hoffentlich hilft das hier etwas weiter.

@DragonTear: In einer Klasse bin ich in dem Sinne nicht mehr wirklich ;)

@ Tzk: Richt egal ist die Reihenfolge in meinem Fall. Es ging nur darum, dass es kein großer Mehraufwand gewesen wäre sie direkt in einer verständlichen Reihenfolge anzuordnen ^^

 
Hay Leute, ich brauche noch einmal eure Hilfe :)
Die Dokumentation ist fast fertig, nur ein Bereich ist leider noch sehr Lückenhaft :confused:

Die Pendelbewegung wird unter anderem ja auch in einem Diagramm dargestellt (Balken und Linien).
Ich habe allerdings noch Probleme bei der Beschreibung. Die vielen +-1 sind doch etwas verwirrend. Ich hoffe jemand von euch kann da etwas Klarheit schaffen.

Hier ist der Quellcode für die Diagramme



Die Werte für die Berechnungen kommen aus der Form1

 
Zuletzt bearbeitet:
Gibts da jetzt auch noch eine konkrete Frage? Kommentare gibts ja schon in dem Code, was manche Zeilen berechnen.
 
Wie sich die Diagramme an sich ergeben bekomme ich wohl noch hin. Ich verstehe allerdings nicht wie das mit der Berechnung der Werte in Form1 geschieht.
Ich schreibe eine Schleife für n kleiner 100. Dann gehts aber schon los, warum phiW(n) = phi
Und die Zeile darunter mit n = n +1. Wieso ändere ich den Wert für n? :-/
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh