Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Array-Werte einsetzen
Kaputnik120 - Di 16.08.05 09:36
Titel: Array-Werte einsetzen
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 - 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:
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..1] of 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; end; |
cu
Narses
Kaputnik120 - 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 - Di 16.08.05 13:05
Moin!
Kaputnik120 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:
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; |
cu
Narses
Kaputnik120 - 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 - 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:
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; Zaehler_unsortiert[i]:=Zaehler_sortiert[i]; Zaehler_sortiert[i]:=0; 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 begin Zaehler_sortiert[i]:=Zaehler_unsortiert[p]; end else Zaehler_sortiert[i]:=0; end; for i:=1 to Exponent_Sortiert[1]+1 do begin Exponent_Sortiert[i]:=Exponent_unsortiert[i]; end; 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 - Fr 19.08.05 09:50
Mal was aus dem Ärmel schütteln...
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
m:=0; setlength(zaehler_n,exp[0]+1); setlength(exp_n,exp[0]+1); for i:=exp[0] downto 0 do begin exp_n[i]:=i; if i=exp[m] then begin zaehler_n[i]:=zaehler[m]; inc(m); if m = length(exp) then break; end end; end; |
Habs jetzt nicht getestet, müsste aber funzen... aber achtung: exp_n und zaehler_n sind dynamische Arrays ;)
Kaputnik120 - Fr 19.08.05 11:13
Hi,
danke für den Tipp, ich hab folgendes draus gemacht:
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 - Fr 19.08.05 11:16
Jetzt nur noch korrekt formatieren und dann ist's perfekt:
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; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!