Berechnen von Schnittmengen .. [gelöst]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1636
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Berechnen von Schnittmengen .. [gelöst]

Beitrag von corpsman »

Hallo Zusammen, ich brauche tatsächlich mal die Schnittmenge von 2 Sets, dazu habe ich mir das folgende gebastelt:

Code: Alles auswählen


Type
  MySet = Set Of char;

Function PlotSet(Const aSet: MySet): String;
Var
  i: Char;
Begin
  result := '';
  For i := #0 To #255 Do Begin
    If i In aSet Then Begin
      If result <> '' Then Begin
        result := result + ', ';
      End;
      result := result + i;
    End;
  End;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Var
  a, b: MySet;
Begin
  a := ['a', 'b', 'c'];
  b := ['b', 'c', 'd'];
  Memo1.Clear;
  memo1.Append('A = [' + PlotSet(a) + ']');
  memo1.Append('B = [' + PlotSet(b) + ']');
  memo1.Append('A union B = [' + PlotSet(a + b) + ']');
  memo1.Append('A sub B = [' + PlotSet(a - b) + ']');
  memo1.Append('B sub A = [' + PlotSet(b - a) + ']');
  memo1.Append('A intersect B = [' + PlotSet((a + b) - (a - b) - (b - a)) + ']');
End;        
Das funktioniert auch, die Frage ist gibt es in FPC eine Abkürzende Schreibweise für die Schnittmenge ?

Code: Alles auswählen

A = [a, b, c]
B = [b, c, d]
A union B = [a, b, c, d]
A sub B = [a]
B sub A = [d]
A intersect B = [b, c]
Zuletzt geändert von corpsman am So 13. Jul 2025, 10:42, insgesamt 1-mal geändert.
--
Just try it


Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1636
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Berechnen von Schnittmengen .. [gelöst]

Beitrag von corpsman »

danke theo, ich wusste doch, dass das einfacher gehen muss, ka warum ich das nicht ergoogeln konnte :oops:
--
Just try it

Benutzeravatar
theo
Beiträge: 10947
Registriert: Mo 11. Sep 2006, 19:01

Re: Berechnen von Schnittmengen .. [gelöst]

Beitrag von theo »

corpsman hat geschrieben: So 13. Jul 2025, 10:42 danke theo, ich wusste doch, dass das einfacher gehen muss, ka warum ich das nicht ergoogeln konnte :oops:
Komisch, ich habe einfach nach "Schnittmenge Freepascal" gegoogelt.
Diesen Set-Operator hatte ich auch nicht auf dem Schirm.

Benutzeravatar
theo
Beiträge: 10947
Registriert: Mo 11. Sep 2006, 19:01

Re: Berechnen von Schnittmengen .. [gelöst]

Beitrag von theo »

Übrigens, ich fand's gerade lustig, deine PlotSet Funktion etwas anders zu programmieren.
Ist nicht wichtig, aber hier trotzdem.

Code: Alles auswählen

function PlotSet(const aSet: MySet): string;
var
  c: char;
  num, i: integer;
begin
  num := 0;
  i := 1;
  for c in aSet do Inc(num);
  Result := StringOfChar(',', num * 2 - 1);
  for c in aSet do
  begin
    Result[i] := c;
    Inc(i, 2);
  end;
end;   

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1636
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Berechnen von Schnittmengen .. [gelöst]

Beitrag von corpsman »

*g*

Übrigens falls du dich fragst warum ich das gebraucht habe:
RGB_Jumper war mein Wochenende Projekt. Jedes Feld des Games hat eine Menge von Elementen, und ich habe eine Andere Menge Elemente gehabt, bei derer Schnittmenge ich die Pixeldaten der Map löschen wollte
.

siehe urgb_level.pas

Code: Alles auswählen

 If (fLevelData[i, j] * [faChangeToR, faChangeToG, faChangeToB, faStart]) <> [] Then Begin
Nicht nur dass ein witziges neues Game dabei raus gekommen ist, ich hab auch wieder was über meine Lieblingsprogrammiersprache gelernt ;)
--
Just try it

Antworten