![]() |
Wieder mal Kombinationen
Guten morgen, jetzt habe ich schon hin und her im Forum gesucht, aber so richtig lässt sich keine der Lösungen hier mit meinen Fall vergleichen, oder ich seh den Wald vor lauter Bäumen nicht.:)
Also es geht darum, ich habe 8 Variablen vom typ String welche wiederum genau 5 Werte annehmen können. Diese sind: 0000 1000 0100 1010 0101 Was ich nun benötige sind sämtliche Kombinationen aus diesen Werten. Rein theoretisch wären das ja 8^5 also 32768 Möglichkeiten, soweit richtig? Am Ende sollten also 32768 32stellige Strings herauskommen. Kann mir einer von euch auf die Sprünge helfen? VG Jarno |
AW: Wieder mal Kombinationen
Es sind 5*5*5*5*5*5*5*5 = 5 ^ 8 = 390625 mögliche Kombinationen.
|
AW: Wieder mal Kombinationen
Na, ganz einfach: 8 Variablen und jede kann 5 Werte annehmen. Dann nimm ein Array mit 8 Elementen. Jedes Element kann einen der 5 Werte annehmen. Anfangen tust Du mit (0,0,0,0,0,0,0,0). Dann (1,0,0,0,0,0,0,0)... nach (4,0,0,0,0,0,0,0) wird es interessant: (0,1,0,0,0,0,0,0)
So kann man das in Delphi machen.
Delphi-Quellcode:
Type TDigitArray = Array [0..7] Of Byte;
Function AddOne(Var Digits : TDigitArray) : Boolean; Var i : Integer; Begin for i := 0 to 7 do if Digits[i] = 4 then Digits[i] = 0 else begin inc (Digits[i]); Result := True; exit; end; Result := False; end; Procedure ShowData (Digits :TDigitArray); Const Values : Array [0..4] Of String = ('0000', '1000', '0100', '1010', '0101'); Var i : Integer; Begin For i:=0 to 7 do Write(Values[Digits[i]], ' '); Writeln; End; Procedure CountThemAll; Var a : TDigitArray; Begin FillChar(a, SizeOf(a), 0); Repeat ShowData(a); Until Not AddOne(a); End; |
AW: Wieder mal Kombinationen
Ich danke euch beiden :thumb:
Zitat:
VG Jarno |
AW: Wieder mal Kombinationen
Hat das einen besonderen Grund dass du das mit Strings machst und nicht mit Bitmustern? Zumal man 32 bits ja auch gerade noch bequem in einen Cardinal reinbekommt...
|
AW: Wieder mal Kombinationen
ungefähr so
Code:
var
ziffer : Array[0..8] of char o.ä. = ('0','0','0','0','0','0','0','0','0'); // bei char #30..#34 kannste gleich writln(leftstr(Ziffer[0])) glaub ich proc incThis(stelle : Int); begin inc(ziffer[stelle]); if (Ziffer[stelle] = '5') then begin //uebertrag incThis(succ(stelle)); Ziffer[stelle]:='0'; end; end; begin while ziffer[8] = '0' do // Ziffer[8] stellt hier das Carry-bit dar incThis(0); // inc lowest digit end; |
AW: Wieder mal Kombinationen
Zitat:
Ich mache ein Programm in welchem 8 Sensoren abgefragt werden. Je nach Wert kann ich 5 verschiedene Ereignisse haben. Als gesamtes Ereignis brauche ich also dann das Ergebnis aller 8 Sensoren mit den einzelnen Werten. Anhand dieses Gesamtwertes werden dann Relais an einer Platine geschaltet. Letztendlich Rechne ich schon diesen 32Bit Binärwert in einen Dezimalwert um, um ihn letztendlich schneller zu finden. Als String brauche ich den Wert nur, um ihn in eine Log Datei zu schreiben. Der Binärwert der Messung 01000101010110000000000000000000 ist halt leichter zu Lesen (wenn man weis welche Stelle, welcher Sensor ist) als die Zahl 6818 :wink: VG Jarno |
AW: Wieder mal Kombinationen
Du kannst es auch hexadezimal in die Logdatei schrieben, dann brauchst du für jeden Sensor nur eine Ziffer :wink:
|
AW: Wieder mal Kombinationen
Ich werde es eh wahrscheinich anders machen müssen :?
Das ganze ist für alle Möglichen Kombinationen viel zu unübersichtlich. Also werde ich es wohl doch pro Sensor speichern müssen. Da muss ich aber erstmal ein wenig grübeln, ob das so überhaupt praktikabel ist :| VG Jarno |
AW: Wieder mal Kombinationen
So kleines Update. Ich habe nun alles dahingehend geändert, dass die Ergebnisse der Sensoren einzeln gespeichert werden. Den benötigten 32Bit Wert setze ich dann zur Laufzeit zusammen.
Vorher hätte man eigentlich 390625 Sachen konfigurieren müssen und die Datei in der alles gespeichert wurde lag letztendlich bei 30mb. Tja jetzt konfiguriert man 40 Ereignisse und die Konfig ist gerade mal knapp 6kb gross :-D Aber vielen Dank für den Denkanstoss :thumb: VG Jarno |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz