AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Wieder mal Kombinationen

Ein Thema von BlackViper73 · begonnen am 21. Mär 2013 · letzter Beitrag vom 21. Mär 2013
Antwort Antwort
BlackViper73

Registriert seit: 5. Mai 2004
Ort: Mühlhausen
5 Beiträge
 
Delphi 6 Enterprise
 
#1

Wieder mal Kombinationen

  Alt 21. Mär 2013, 09:41
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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 10:03
Es sind 5*5*5*5*5*5*5*5 = 5 ^ 8 = 390625 mögliche Kombinationen.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 10:13
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;
  Mit Zitat antworten Zitat
BlackViper73

Registriert seit: 5. Mai 2004
Ort: Mühlhausen
5 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 10:24
Ich danke euch beiden
Es sind 5*5*5*5*5*5*5*5 = 5 ^ 8 = 390625 mögliche Kombinationen.
Stimmt, das genau war mein Denkfehler, also kann ich das ganze mit 8 Schleifen und einem kleinen Array für die Werte lösen.

VG Jarno
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 10:25
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...

Geändert von jfheins (21. Mär 2013 um 10:54 Uhr)
  Mit Zitat antworten Zitat
mentaltec

Registriert seit: 28. Sep 2012
60 Beiträge
 
#6

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 10:31
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;

Geändert von mentaltec (21. Mär 2013 um 11:38 Uhr)
  Mit Zitat antworten Zitat
BlackViper73

Registriert seit: 5. Mai 2004
Ort: Mühlhausen
5 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 10:41
Hat das einen besonderen Grund dass su das mit Strings machst und nicht mit Bitmustern? Zumal man 32 bits ja auch gerade noch bequem in einen Cardinal reinbekommt...
Wie du richtig feststellst, handelt es sich um ein normales 32Bit Binärsystem. Also hintergrund dazu:
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

VG Jarno
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 10:56
Du kannst es auch hexadezimal in die Logdatei schrieben, dann brauchst du für jeden Sensor nur eine Ziffer
  Mit Zitat antworten Zitat
BlackViper73

Registriert seit: 5. Mai 2004
Ort: Mühlhausen
5 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 11:37
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
  Mit Zitat antworten Zitat
BlackViper73

Registriert seit: 5. Mai 2004
Ort: Mühlhausen
5 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Wieder mal Kombinationen

  Alt 21. Mär 2013, 16:33
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

Aber vielen Dank für den Denkanstoss

VG Jarno
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 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