AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Hilfe en algorithmus zu entwickeln...
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe en algorithmus zu entwickeln...

Ein Thema von Thunderbolt · begonnen am 20. Jan 2005 · letzter Beitrag vom 1. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Thunderbolt
Thunderbolt

Registriert seit: 29. Feb 2004
26 Beiträge
 
#1

Hilfe en algorithmus zu entwickeln...

  Alt 20. Jan 2005, 14:37
Aaaaaaaalso. Die Aufgabe hab ich in der Schule bekommen. Es ging eigentlich darum die Summen von allen Zahlen miteinander in einer Menge (also jeweils nur 2 Zahlen).

Das ganze hab ich so gelöst:

Delphi-Quellcode:
[code:1:06509b420c]program algorithmus;
{$APPTYPE CONSOLE}
uses SysUtils;

type
  menge = set of byte;

var
  neu, alt, zwischen :menge;
  eingabe,i,obergrenze :integer;
  eingaben: array [1..10] of integer;

procedure dazutun(wert :integer);
begin
  for i:=1 to obergrenze do
    begin
      if i in alt then zwischen:=zwischen+[i+wert];
    end;
  alt:=alt+[wert];
  zwischen:=zwischen+[wert];
end;

procedure ausgabe(ausgeben :menge);
var limit,erstes :integer;
begin
  erstes:=0; limit:=0;
  neu:=ausgeben;
  repeat
    if erstes in ausgeben then
      begin
        limit:=limit + erstes;
        neu:=neu-[erstes];
      end;
    inc(erstes);
  until neu=[];

  write('Mögliche Ergebnisse sind: ');
  for i:=0 to limit do if i in ausgeben then write(i:3,',');

end;

begin
  write('Blubb bla bla blub bla blubb blubb.');
  neu:=[]; alt:=[]; zwischen:=[]; eingabe:=0;
  write('Obergrenze: ');
  readln(obergrenze);
  repeat
    write('Wert: ');
    readln(eingabe);
    if not ((eingabe=0) or (eingabe in alt) or (eingabe>obergrenze)) then
      begin
        dazutun(eingabe);
      end
      else if eingabe>obergrenze then writeln('Obergrenze überschritten!');
  until eingabe=0;
  ausgabe(zwischen);
  readln;
end.[/code:1:06509b420c]
ich weiss... man könnte ein paar sachen weglassen...

Jetzt würde mich mal interessieren wie man dasselbe mit ALLEN Kombinationen untereinander macht. Ich hab schon rumüberlegt, weiss aber nit wie man das anstellen soll.
Wenn ich da also die Zahlenmenge [1,2,4,8,16,32] habe, müsste mir das Ding jetzt alle Zahlen von 1 bis 69 auflisten.

mfg,
ThunderbolT
Ich habe in der Vergangenheit gute Entscheidungen getroffen. Ich habe in der Zukunft gute Entscheidungen getroffen.
George W. Bush
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: Hilfe en algorithmus zu entwickeln...

  Alt 20. Jan 2005, 15:08
Zitat:
Wenn ich da also die Zahlenmenge [1,2,4,8,16,32] habe, müsste mir das Ding jetzt alle Zahlen von 1 bis 69 auflisten.
Entweder verstehe ich die Problemstellung nicht oder das Programm müsste alle Zahlen von 1 (bzw. 0) bis 63 auflisten?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Thunderbolt
Thunderbolt

Registriert seit: 29. Feb 2004
26 Beiträge
 
#3

Re: Hilfe en algorithmus zu entwickeln...

  Alt 21. Jan 2005, 14:48
ja. sorry. 63 müssts sein
Ich habe in der Vergangenheit gute Entscheidungen getroffen. Ich habe in der Zukunft gute Entscheidungen getroffen.
George W. Bush
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Hilfe en algorithmus zu entwickeln...

  Alt 21. Jan 2005, 15:00
Versteh nix

Bitte genauer erklären

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Thunderbolt
Thunderbolt

Registriert seit: 29. Feb 2004
26 Beiträge
 
#5

Re: Hilfe en algorithmus zu entwickeln...

  Alt 21. Jan 2005, 20:28
sry das hört sich jetzt etwas hart an, aber wenn du aus dem quelltext heraus nicht verstehst was das programm macht, wirst du mir kaum helfen können.

das programm soll zahlen einlesen. aus diesen zahlen soll es nun alle möglichen kombinationen generieren um zu sehen welche werte man daraus kombinieren kann. das könnte man vergleichen mit einer alten wage, wo man sich immer ein gegengewicht zusammenstellen musste aus mehreren unterschiedlichen gewichten...
Ich habe in der Vergangenheit gute Entscheidungen getroffen. Ich habe in der Zukunft gute Entscheidungen getroffen.
George W. Bush
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: Hilfe en algorithmus zu entwickeln...

  Alt 22. Jan 2005, 10:13
So ein ähnliches Programm musste ich vor einiger Zeit für KI in Prolog schreiben, da ist das gar nicht so kompliziert ;c)

So könnte man es machen:
Delphi-Quellcode:
program DPZusammenRechnen;

uses
  Windows, SysUtils;

{$R *.RES}

type ISet = set of Byte;

var
  numbers: Array Of Byte;
  results: ISet;
  i: Integer;

procedure AddArray(current: Array Of Byte; var result: ISet);
var i, j: Integer; next: Array Of Byte; sum: Byte;
begin
sum := 0; // Aktuelle Summe initialisieren (für current)
SetLength(next, High(current));
// Summieren
for i := 0 to High(current) do begin
   sum := sum + current[i];
  // Alle Zahlen in current außer current[i] in next kopieren
  for j := 0 to High(current) do begin
     if j < i then begin
       next[j] := current[j];
    end else if (j > i) then begin
       next[j - 1] := current[j];
    end;
  end;
  // Wenn next ein oder mehrere Werte enthält, das ganze von neuem
  if (Length(next) > 0) then
     AddArray(next, result);
end;
// Aktuelle Summe der Ergebnismenge hinzufügen
result := result + [sum];
end;

begin
// Array füllen
SetLength(numbers, 6);
for i := 0 to High(numbers) do begin
   numbers[i] := 1 shl i;
  WriteLn(numbers[i]);
end;

WriteLn;
AddArray(numbers, results);

// Ergebnismenge ausgeben
for i := 0 to 255 do begin
   if i in results then begin
     WriteLn(IntToStr(i));
  end;
end;

ReadLn;

end.
Ich hab' allerdings außer für das Ergebnis jetzt nur Arrays verwendet, aber vom Prinzip her geht's mit Mengen ja so ähnlich.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Hilfe en algorithmus zu entwickeln...

  Alt 22. Jan 2005, 11:33
Kombinationen ohne Duplikate.

Delphi-Quellcode:
function Kombinationen(const Values: array of Integer): Integer;

  function DoCombi(Index, Start: Integer): Integer;
  begin
    if Index <= High(Values) then
    begin
  // Ausgabe der gebildeten Summe
      WriteLn( Start + Values[Index]:5 );

  // kombinatorische Rekusionen und Berechnung der Anzahl der Summen
      Result := 1 + DoCombi(Index +1, Start + Values[Index]) +
                    DoCombi(Index +1, Start );
    end else Result := 0;
  end;

begin
  Result := DoCombi(Low(Values), 0);
end;
Mehrfach bildbare Summen werden nicht ausgefiltert.

Gruß Hagen
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: Hilfe en algorithmus zu entwickeln...

  Alt 22. Jan 2005, 15:31
@negaH:
Dein Code gibt bei mir Dinge wie die folgenden aus:
Code:
134480385
134488593
134488615
134488615
134488620
268969005
268969000
134488620
268969005
268969000
134488593
134488598
Getestet mit dem numbers-Array aus meinem Quellcode oben.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Hilfe en algorithmus zu entwickeln...

  Alt 23. Jan 2005, 17:12
mit

Delphi-Quellcode:
procedure Test;
var
  Numbers: array of Integer;
  I: Integer;
begin

  SetLength(Numbers, 6);
  for I := Low(Numbers) to High(Numbers) do
    Numbers[I] := 1 shl I;

  WriteLn( Kombinationen(Numbers):5 );
end;
wird bei mir

Code:
    1
    3
    7
   15
   31
   63
   47
   23
   55
   39
   11
   27
   59
   43
   19
   51
   35
    5
   13
   29
   61
   45
   21
   53
   37
    9
   25
   57
   41
   17
   49
   33
    2
    6
   14
   30
   62
   46
   22
   54
   38
   10
   26
   58
   42
   18
   50
   34
    4
   12
   28
   60
   44
   20
   52
   36
    8
   24
   56
   40
   16
   48
   32
   63
ausgegeben. Delphi 5.

Gruß hagen
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#10

Re: Hilfe en algorithmus zu entwickeln...

  Alt 27. Jan 2005, 10:57
Bei mir ist es, damit das mit den Mengen funktioniert, ein Array of Byte. Daher der Fehler bei mir. Mit einem Array Of Integer geht's natürlich.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:02 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