Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  TM - Plant Simulation
  Werte in Tabelle mittels Methode

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Werte in Tabelle mittels Methode (6448 mal gelesen)
Kvothe
Mitglied



Sehen Sie sich das Profil von Kvothe an!   Senden Sie eine Private Message an Kvothe  Schreiben Sie einen Gästebucheintrag für Kvothe

Beiträge: 24
Registriert: 16.04.2013

erstellt am: 26. Apr. 2013 17:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Kvothe an!   Senden Sie eine Private Message an Kvothe  Schreiben Sie einen Gästebucheintrag für Kvothe

Beiträge: 24
Registriert: 16.04.2013

erstellt am: 27. Apr. 2013 12:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Damit hat es soweit erstmal geklappt:
is
y:integer;
do
from y:=1; until y=100 loop
Tabelle[1,y]:=z_gleich(integer,real,real);
y:=y+1;
end;
end;

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bon Simul
Mitglied
Simulant


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 27. Apr. 2013 23:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kvothe 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Kvothe an!   Senden Sie eine Private Message an Kvothe  Schreiben Sie einen Gästebucheintrag für Kvothe

Beiträge: 24
Registriert: 16.04.2013

erstellt am: 28. Apr. 2013 20:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 28. Apr. 2013 21:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kvothe 10 Unities + Antwort hilfreich

So sollte es gehen:

Code:

is
  i:integer;
do
  for i:=1 to tabelle.yDim loop
    tabelle[1,i].kopiereBereichNach({1,1}..{1,*},tabelle1,1,tabelle1.yDim+1);
  next;
end;


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Kvothe
Mitglied



Sehen Sie sich das Profil von Kvothe an!   Senden Sie eine Private Message an Kvothe  Schreiben Sie einen Gästebucheintrag für Kvothe

Beiträge: 24
Registriert: 16.04.2013

erstellt am: 29. Apr. 2013 20:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 29. Apr. 2013 21:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kvothe 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Kvothe an!   Senden Sie eine Private Message an Kvothe  Schreiben Sie einen Gästebucheintrag für Kvothe

Beiträge: 24
Registriert: 16.04.2013

erstellt am: 29. Apr. 2013 22:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 30. Apr. 2013 09:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kvothe 10 Unities + Antwort hilfreich

Wenn Sie die YDim der Untertabellen in eine Variable speichern wollen, dann muss das so aussehen:
Code:

for i:=1 to Tabelle.yDim loop
  zahl(integer):=Tabelle[1,i].yDim;
next;


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Kvothe
Mitglied



Sehen Sie sich das Profil von Kvothe an!   Senden Sie eine Private Message an Kvothe  Schreiben Sie einen Gästebucheintrag für Kvothe

Beiträge: 24
Registriert: 16.04.2013

erstellt am: 01. Mai. 2013 12:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Bon Simul an!   Senden Sie eine Private Message an Bon Simul  Schreiben Sie einen Gästebucheintrag für Bon Simul

Beiträge: 1250
Registriert: 08.08.2011

Plant Simulation 10.1, 11 ff Professional

erstellt am: 01. Mai. 2013 21:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Kvothe 10 Unities + Antwort hilfreich

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz