Autor
|
Thema: Werte in Tabelle mittels Methode (6448 mal gelesen)
|
Kvothe Mitglied
Beiträge: 24 Registriert: 16.04.2013
|
erstellt am: 26. Apr. 2013 17:52 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte gerne, dass mir eine Methode fiktive Aufträge in eine Tabelle schreibt. Dazu habe ich derzeit eine Tabelle, eine Methode und einen Generator, der die Methode aufrufen soll. Im ersten Schritt möchte ich nun, dass jeder Auftrag eine bestimmte Anzahl von (fiktiven) Komponenten erhält und diese zeilenweise in die erste Spalte meiner Tabelle eingetragen werden. Leider weiß ich nicht, wie ich das realisieren soll. Meine Methode sieht derzeit wiefolgt aus: is y:integer; AnzahlKomponenten:integer; do for y:=1 to Tabelle.YDim loop AnzahlKomponenten:=z_gleich(integer,real,real); Tabelle[1,y]:=AnzahlKomponenten; next; end; Wie schaffe ich es, dass beim Starten der Simulation, die Aufträge mit ihrer dazugehörigen Komponentenzahl in die Tabelle geschrieben werden? Ich freue mich über jede Hilfe! Beste Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kvothe Mitglied
Beiträge: 24 Registriert: 16.04.2013
|
erstellt am: 27. Apr. 2013 12:35 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 27. Apr. 2013 23:03 <-- editieren / zitieren --> Unities abgeben: Nur für Kvothe
Sie können auch über eine Schleife Sublisten oder Subtabellen erzeugen. Dafür legen Sie in der ersten Spalte Ihrer Tabelle den Datentyp table fest und formatieren die Subtabelle entsprechend. In jeder Zeile müssten Sie dann die Subtabellen erzeugen und mit Ihrer zufälligen Anzahl von Einträgen füllen. Das könnte dann wie folgt aussehen: Code:
is y:integer; i:integer; anzahl:integer; do for y:=1 to 100 Loop --subliste erzeugen Tabelle.erzeugeSubliste(1,y); anzahl:=z_gleich(integer,real,real); for i:=1 to anzahl Loop Tabelle[1,y][1,i]:=IhrTeil; next; next; end;
[Diese Nachricht wurde von Bon Simul am 27. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kvothe Mitglied
Beiträge: 24 Registriert: 16.04.2013
|
erstellt am: 28. Apr. 2013 20:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Bon Simul, haben Sie vielen Dank. Ich verwende derzeit folgenden Code: is y:integer; i:integer; anzahl:integer; do for y:=1 to 100 Loop --subliste erzeugen Tabelle.erzeugeSubliste(1,y); anzahl:=z_gleich(1,2,5); for i:=1 to anzahl Loop Tabelle[1,y][1,i]:=y; next; next; Tabelle[1,1].kopiereBereichNach({1,1}..{1,*},Tabelle1,1,1); end; Durch Tabelle[1,y][1,i]:=y; habe ich es geschafft, dass in jeder Subtabelle die Nummer des Auftrags zeilenweise in der zufälligen Anzahl steht(was ich gerne wollte, also bspw. viermal untereinander die 1 wenn anzahl=4). Jetzt möchte ich, dass alle Subtabellen in eine Tabelle geschrieben werden. Also wenn bspw. in Tabelle[1,1] viermal die 1 untereinander steht(Auftrag 1 enthält vier Komponenten) und in Tabelle[1,2] zweimal die 2, dann möchte ich, dass die Tabelle1 wiefolgt aussieht: 1 1 1 1 2 2 ..und das für alle Aufträge(Subtabellen)untereinander. Dies habe ich beispielhaft mit "kopiereBereichNach" für den Auftrag 1 bzw. Untertabelle 1 versucht, aber es wird immer die gleiche Anzahl in Tabelle1 geschrieben. Wo könnte da der Fehler liegen? Und ist das für alle Aufträge hintereinander realisierbar? is AnzahlKomponenten:integer; y:integer; i:integer; do from y:=1; until y=100 loop AnzahlKomponenten:=z_gleich(1,2,5); if AnzahlKomponenten=1 then Tabelle[1,y][1,y]:=y; end; if AnzahlKomponenten=2 then Tabelle[1,y][1,y+1]:=y; end; if AnzahlKomponenten=3 then Tabelle[1,y][1,y+2]:=y; end; y:=y+1; end; end; Ich habe das mal so versucht (funktioniert leider auch nicht), aber hatte gehofft, dass vielleicht auch eine Schleife mit einer Formel möglich ist. Vielen Dank für Ihre erneute Unterstützung. Beste Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 28. Apr. 2013 21:29 <-- editieren / zitieren --> Unities abgeben: Nur für Kvothe
|
Kvothe Mitglied
Beiträge: 24 Registriert: 16.04.2013
|
erstellt am: 29. Apr. 2013 20:07 <-- editieren / zitieren --> Unities abgeben:
Dankeschön! Ist es irgendwie möglich, die YDim der einzelnen Untertabellen zu erfassen und den Wert für jedes i an eine Variable Zahl (Typ:integer) zu übertragen? Ich habe jeder Zeile in einer weiteren Spalte einen Wert zugewiesen und möchte gerne das Maximum in einer weiteren Spalte, wobei dies immer nur für die einzelnen Aufträge erfolgen soll. Das sollte dann bspw. so aussehen: Auftrag Wert Maximum(Gesucht) 1 2 3 1 3 3 2 1 5 2 4 5 2 5 5 Dabei dachte ich an eine Schleife für alle Zeilen und die Funktion for i:=1 to Tabelle1.yDim loop Tabelle1[3,i]:=Tabelle1.max({2,?}..{2,?}}; next; Leider weiß ich nicht, was ich für die "?" einsetzen kann, damit das klappen könnte, aber ich dachte der yDim Wert der einzelnen Untertabellen (also hier für Tabelle[1,1]=2 und Tabelle[1,2]=3) wäre schonmal eine erste Schranke. Problematisch ist ja bspw. auch, dass für i=2 die erste Zeile berücksichtigt werden muss, aber für i=3 erst ab Zeile 3 mit der Maximumsuche begonnen werden soll. Also kann ich ja weder i noch 1 für das erste "?" einsetzen!? Könnte das mit diesem Ansatz realisierbar sein oder sollte ich mir etwas anderes überlegen? Beste Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 29. Apr. 2013 21:08 <-- editieren / zitieren --> Unities abgeben: Nur für Kvothe
Die Untertabellen sprechen Sie über deren Adresse in der Tabelle an, danach können Sie Attribute und Methoden aufrufen, z.B. Code:
Tabelle[1,1].yDim --oder Tabelle[2,2][1,1] -- Zelle 1,1 der Untertabelle der Zelle 2,2
Um das Maximum der Untertabelle in die 3. Spalte der selben Tabelle zu schreiben, müssten Sie folgendes schreiben: Code:
for i:=1 to Tabelle.yDim Loop Tabelle[3,i]:=Tabelle[1,i].max({1,1}..{1,*}); next;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kvothe Mitglied
Beiträge: 24 Registriert: 16.04.2013
|
erstellt am: 29. Apr. 2013 22:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Bon Simul, das verstehe ich leider nicht richtig. 1. Ist es möglich, dass mir eine Methode die belegte Zeilenanzahl der Untertabellen angibt und den Wert übergibt? Also for i:=1 to Tabelle.yDim loop Tabelle[1,i].yDim:=zahl(integer); next; Bisher funktioniert da bei mir nur print Tabelle[1,1].yDim, aber für den obigen Fall bekomme ich eine Fehlermeldung. 2. Vielleicht gab es hier ein Missverständnis. Der jeweilige Maximalwert soll z.B. in die jeweiligen Zeilen der 3. Spalte der Tabelle1 eingetragen werden. Also Tabelle1[3,i]. Die rauszusuchenden Werte befinden sich in Tabelle1[2,i] und die Aufträge im o.g. Schema in Tabelle1[1,i]. Ich erkenne leider nicht den weiteren Zusammenhang zu ihrem Code. Oder sprechen Sie mit Tabelle[1,i].max({1,1}..{1,*}); die Untertabellen an? (Die yDim der Untertabellen benötige ich nach meiner Vorstellung ja, damit die Methode weiß, ab welcher Zeile ein Wert zu Auftrag x und zu Auftrag y gehört und in den Zeilen der Tabelle1 liegen ja meine Werte, aus denen ich für jeden Auftrag mein Maximum suche). Entschuldigen Sie bitte, wenn Ich mich missverständlich ausgedrückt haben sollte. Beste Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 30. Apr. 2013 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für Kvothe
|
Kvothe Mitglied
Beiträge: 24 Registriert: 16.04.2013
|
erstellt am: 01. Mai. 2013 12:02 <-- editieren / zitieren --> Unities abgeben:
Danke Ihnen! Gibt es eine Möglichkeit, um die Werte der Zeilen einer Spalte zu kumulieren? Ich habe dazu in der Hilfe nichts gefunden. Alternativ hatte ich folgende Idee: for i:=1 to tabelle2.yDim loop Tabelle2[7,i]:=Tabelle2[4,i]+Tabelle2[7,i-1]; next; Allerdings bekomme ich die Fehlermeldung:"Die Datentypen der Operanden sind nicht kompatibel". Ich habe sowohl Spalte 4 als auch Spalte 7 (hier sollen die kumulierten Werte gelistet werden) das Format real zugewiesen. Wo könnte das Problem liegen? Beste Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 01. Mai. 2013 21:22 <-- editieren / zitieren --> Unities abgeben: Nur für Kvothe
Wenn Sie kumulieren wollen, dann dürfen Sie nicht in der Zeile 1 beginnen (sonst lesen Sie die Kopfzeile mit aus und die hat den Datentyp string). Code:
--erste Zeile = wert aus der Zeile Tabelle2[7,1]:=Tabelle2[4,1]; --ab zweiter Ziele kumulieren for i:=2 to tabelle2.yDim loop Tabelle2[7,i]:=Tabelle2[4,i]+Tabelle2[7,i-1]; next;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|