AW: Schleifen wiederholen
In jedem Fall solltest du die Variation der Zustände von der Berechnung trennen.
Falls die Variationen tatsächlich so diskret sind, sind das ja Kombinationen. Dafür gibt es auch für Delphi einige Beispiele: https://www.delphipraxis.net/194333-...inationen.html Dein erstes Problem wäre dann: => Wie viele Möglichkeiten gibt es, 5 Stützstellen auf 7 Positionen zu verteilen Das zweite Problem: => Gegeben eine Anordnung von Stützstellen, berechne die Lasten Software Entwicklung ist die systematische Zerlegung von Problemen in kleinere Teile, solange bis man sie lösen kann :wink: |
AW: Schleifen wiederholen
Zitat:
Die Belastung ist nicht gleichmäßig verteilt. Die Berechnung soll nach diesem Prinzip(http://www.kulle.at/Statik/Unterlage...k/Statik64.pdf) erfolgen. |
AW: Schleifen wiederholen
Zitat:
|
AW: Schleifen wiederholen
Zitat:
Zitat:
|
AW: Schleifen wiederholen
Zitat:
Das ist schon klar, aber wenn der Computer das alles macht und es nur unwesentlich länger dauert ist es mir egal. |
AW: Schleifen wiederholen
Hallo, ich habe die Bewertungsfunktion nicht angeschaut.
Wenn du zum Beispiel zehn feste Punkte hast, an vier Punkten was reinhängen willst und aufgrund der fest vorgegebenen Punkte lediglich an allen (10 tief 4) möglichen Kombinationen sowie an einer besten Lösung interessiert bist, dann könntest du es so tun.
Delphi-Quellcode:
type TBewertungstyp = integer;
TBrett = record wo : array[0..9] of byte; // hier speichern wir, wo wir was tun: 0=nix tun, 1=was tun anz, pos : integer; // In function bewerte gehen wir brett zum beispiel von links=0 nach rechts=9 durch. pos: da befinden wir uns gerade. anz: so oft haben wir was getan (d.h. wo[i]=1 gesetzt) end; TRes = record br : TBrett; bew : TBewertungstyp; end; function meingebewertungsfunktion( brett : TBrett) : TRes; var hres : TBewertungstyp; begin Result.br := brett; Result.bew := ...; // hier musst du deine Bewertung abhängig von brett.wo einsetzen end; // hier werden alle (n tief k) Kombinationen aufgezählt und bewertet: function bewerte( brett : TBrett ; n, k : integer ) : TRes; var b0, b1 : TRes; begin inc(brett.pos); if ( k-brett.anz > n-brett.pos ) then Result.bew := 0 // Abbruch, da wir noch k-brett.anz Mal was tun müssten, aber nur noch n-brett.pos Postionen frei sind else if brett.anz = k then // k Postionen sind besetzt => auswerten: Result := meingebewertungsfunktion( brett ) // hier werden alle (n tief k) Kombinationen ausgewertet else begin // Fall 1 - an brett.pos nix tun: b0 := bewerte( brett, n, k ); // Fall 2 - an brett.pos was tun: brett.wo[brett.pos] := 1; inc(brett.anz); b1 := bewerte( brett, n, k ); // hier wählst du die bessere variante aus if b0.bew > b1.bew then Result := b0 else Result := b1; end; end; Aufruf:
Delphi-Quellcode:
function loesung_str( loesung : TRes ):string;
var hs : string; begin hs := loesung.bew.ToString + ' : '; for var i := 0 to length( loesung.br.wo )-1 do hs := hs + loesung.br.wo[i].ToString; Result := hs; end; function loesung( n, k : integer ) : TRes; var meinbrett : TBrett; begin // Brett "initialisieren": fillchar(meinbrett.wo[0], n, 0 ); meinbrett.pos := -1; meinbrett.anz := 0; // beste Kombination suchen: Result := bewerte( meinbrett, n, k ); end; procedure TForm29.Button1Click(Sender: TObject); var best : TRes; begin best := loesung( 10, 4 ); showmessage( loesung_str( best ) ); end; |
AW: Schleifen wiederholen
Zumal du differenzieren solltest: Gleichmäßige Belastung der Lager oder des Balken? Bzw. minimalste Belastung der einzelnen Komponenten.
Beispiel Annahme: Der Balken wird von oben gleichmäßig belastet. _****_ > Lager sind gleich stark belastet, der Balken jedoch hat in der Mitte die stärkste Belastung **__** > Lager sind gleich stark belastet, der Balken jedoch hat außen die stärkste Belastung *_**_* > Der Balken hat eine Gleichmäßige Belastung und die Lager auch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz