Autor Beitrag
Kaputnik120
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 16.08.05 09:36 
Hi,
ich habe folgendes Problem:
Ich habe ein array of integer, mit namen exp.
Das Array ist nach Größe sortiert, also stehen die größten Werte vorne.
Dazu gibt es ein zweites Array, dessen Werte sich auf die des exp-Arrays beziehen.
Dieses Array heißt Zaehler.
Allerdings will ich, das alle Werte, die zwischen den einzelnen Werten liegen ergänzt werden:
Beispiel:
exp[12,5,3,1,0] soll zu exp[12,11,10,9,8,7,6,5,4,3,2,1,0]
Zaehler[6 ,7,2,3,5] soll zu Zaehler[6 ,0 , 0,0,0,0,0,7,0,2,0,3,5]
werden.
Ich brauche das um die fehlenden Exponenten für eine Polynomdivison zu ergänzen, also zb.
für f(x)=6X^12 + 7x^5 + 2x^3 + 3x^1 + 5x^0, sodass daraus
f(x)=6X^12 + 0X^11 + 0X^10 + 0X^9 + 0X^8 + 0X^7 + 0X^6 +
7X^5 + 0X^4 + 2^X^3 + 0X^2 + 3X^1 + 5X^0
wird.
Wäre sehr dankbar für jede Idee, ich hab zwar schon einiges Probiert, aber nichts funktioniert. :(


Danke für jede Antwort
Gruß Uli
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 16.08.05 11:47 
Moin!

Zeig doch mal Code, oder haste nix?

Ansatz: Du brauchst doch nur den Grad des Polynoms (hier: 12), dann kannste ein 2-dimensionales Integer-Array bereits entsprechend vorbelegen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  Werte: Array of Array[0..1of Integer;
  i,Grad: Integer;

begin
  Grad := GetPolynomGrad();
  SetLength(Werte,Grad+1);
  for i := 0 to High(Werte) do begin
    Werte[i,0] := High(Werte) -i;
    Werte[i,1] := 0;
  end;
  // hier ist jetzt in dem Array z.B. folgendes drin:
  // Werte[0,0]: 12, Werte[0,1]: 0
  // Werte[1,0]: 11, Werte[1,1]: 0
  // etc. pp...
  // es folgt dann noch die Ermittlung der anderen Exponenten: dein Werk! :)
end;


cu
Narses
Kaputnik120 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 16.08.05 12:28 
Gute Idee,
aber des Programm ist fast fertig und deshalb kann ich jetzt nicht alles umschreibe, ich bräuchte eine Lösung für die genau beschriebenen Gegebenheiten.

Trotzdem danke für die Antwort.
Gruß Uli
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 16.08.05 13:05 
Moin!

user profile iconKaputnik120 hat folgendes geschrieben:
Gute Idee,
aber des Programm ist fast fertig und deshalb kann ich jetzt nicht alles umschreibe, ich bräuchte eine Lösung für die genau beschriebenen Gegebenheiten.

Ähm, wer hindert dich denn, die beiden Ansätze zu kombinieren? :wink:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Grad := exp[0];
SetLength(Werte,Grad+1);  
for i := 0 to High(Werte) do begin  
  Werte[i,0] := High(Werte) -i;  
  Werte[i,1] := 0;  
end
// jetzt trägst du zaehler[] an den richtigen Stellen in Werte[?,1] ein 
// und mußt nur noch Werte[] wieder in exp[] und zaehler[] zerlegen, fertig.

cu
Narses
Kaputnik120 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 16.08.05 15:04 
Hi,
ich glaub ich nehm deine Lösung, aber vorher muss ich mir noch en paar Sachen über mehrdimensionale Arrays durchlesen.

Vielen Dank für deine Antwort, hat mir sehr geholfen.

Gruß Uli Buschbaum
Kaputnik120 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 19.08.05 09:21 
Hi,
ich hab das jetzt mal mit vier eindimensionalen Arrays gemacht:
kann mir jemand sagen wo der Fehler liegt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.fehlende_Einfuegen;
var i,p:Integer;
begin
for i:=1 to Exponent_Sortiert[1]+1 do
  begin
  Exponent_unsortiert[i]:=(Exponent_Sortiert[1]+1)-i;//zb [12,11,10,9,...,0]
  Zaehler_unsortiert[i]:=Zaehler_sortiert[i];//Werte in anderes Array kopieren
  Zaehler_sortiert[i]:=0;//Array mit Nullen füllen
  end;

for i:=1 to Exponent_Sortiert[1]+1 do
  for p:=1 to Glieder do
  begin
    if Exponent_sortiert[p]=Exponent_unsortiert[i] then//für den richtigen exponenten
      begin                                            //den richtigen Zaehler finden   
      Zaehler_sortiert[i]:=Zaehler_unsortiert[p];
      end
    else Zaehler_sortiert[i]:=0;     //wenn es der falsche ist, also einer
  end;                               //der hinzugefügt wurde, ist der Wert
                                     //0
for i:=1 to  Exponent_Sortiert[1]+1 do                
  begin
  Exponent_Sortiert[i]:=Exponent_unsortiert[i];//Die Exponenten wieder in ihr 
  end;                                        //richtiges Array kopieren   
end;


sorry für den unübersichtlichen Code, aber ich glaube das Problem lässt sich nich so leicht einfach darstellen.

Vielen Dank schonma für jede Antwort
Gruß Uli
zemy
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 207

Win XP Prof.
D7
BeitragVerfasst: Fr 19.08.05 09:50 
Mal was aus dem Ärmel schütteln...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure hallo;
Var
i,m:integer;
begin
// exp : [12,5,3,1,0]
// exp_n: [12,11,10,9,8,7,6,5,4,3,2,1,0]
// zaehler: [6 ,7,2,3,5]
// zaehler_n: [6 ,0 , 0,0,0,0,0,7,0,2,0,3,5]

  m:=0// index dür das exp-array
  setlength(zaehler_n,exp[0]+1); // alle 0
  setlength(exp_n,exp[0]+1); // alle 0

  for i:=exp[0downto 0 do
    begin
      exp_n[i]:=i; // 12,11,10,9,...
      if i=exp[m] then // aktuller Exponent = nächster, der an der Reihe ist
        begin
          zaehler_n[i]:=zaehler[m]; // Zähler zuweisen
          inc(m); // nächstes Element //nächstes Element
          if m = length(exp) then break; // wenn Index>Arraylänge -> breche ab
        end
    end;
end;

Habs jetzt nicht getestet, müsste aber funzen... aber achtung: exp_n und zaehler_n sind dynamische Arrays ;)

_________________
LifeIsToShortToThinkAboutTheShortness
Kaputnik120 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 19.08.05 11:13 
Hi,
danke für den Tipp, ich hab folgendes draus gemacht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.fehlende_Einfuegen;
var i,p:Integer;
begin
p:=1;
for i:=1 to Exponent_Sortiert[1]+1 do
  begin
  Exponent_unsortiert[i]:=(Exponent_Sortiert[1]+1)-i;
  Zaehler_unsortiert[i]:=Zaehler_sortiert[i];
  Zaehler_sortiert[i]:=0;
  if Exponent_sortiert[p]=Exponent_unsortiert[i] then
    begin
    Zaehler_sortiert[i]:=Zaehler_unsortiert[p];
    inc(p);
    end;
  end;


THX

Gruß Uli
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 19.08.05 11:16 
Jetzt nur noch korrekt formatieren und dann ist's perfekt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.fehlende_Einfuegen;  
var
  i, p: Integer;  
begin  
  p := 1;  
  
  for i := 1 to Exponent_Sortiert[1] + 1 do  
  begin  
    Exponent_unsortiert[i] := (Exponent_Sortiert[1] + 1) - i;  
    Zaehler_unsortiert[i]  := Zaehler_sortiert[i];  
    Zaehler_sortiert[i]    := 0;  
    
    if Exponent_sortiert[p] = Exponent_unsortiert[i] then  
    begin  
      Zaehler_sortiert[i] := Zaehler_unsortiert[p];  
      inc(p);  
    end;  
  end;
end;

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)