hallo leute,
folgendes problem:
ich scheibe ein komplexes mathematik programm um würde EVENTUEL eine procedure brauchen, die ich aus dem internet downgeloaded habe. das problem ist, dass meine typen die ich in diese procedure reinladen will nicht genau den typen entsprechen, die dafür vorgesehen sind...
die frage lautet also: wie wandle ich das um???
ich verstehe nämlich den code null und nüsse, da ich kein programmier-chef bin.
und zwar mein typ heisst
pauls_matrix = array of array;
die dimensionen werden zur laufzeit festgesetzt.
es folgt der code dieser downgeloadeten unit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Vector = ARRAY[1..4] of EXTENDED; Array16 = ARRAY[1..16] of EXTENDED; Array15by2 = ARRAY[1..15,1..2] of EXTENDED; Str250 = STRING[250]; Str64 = STRING[64];
Intarray = ARRAY[1..6] of INTEGER;
MatrixDataPtr = ^MatrixData; MatrixData = RECORD Index : INTEGER; Number : EXTENDED; Next,Last : MatrixDataPtr; END; MatrixPtr = RECORD NumRows,NumCols : INTEGER; DPtr : MatrixDataPtr; Head,Tail : MatrixDataPtr; END; Matrix = ^MatrixPtr; |
der letzte typ "Matrix" soll aus meiner obengenannten "pauls_matrix" entstehen.
dazu gibt es scheinbar auch eigene proceduren in der unit:
funktioniert das? was geht hier eigentlich ab? ich verstehe die pointer an sich nicht...
ich weiss ich könnts ausprobieren, weiss aber nicht ob es prinzipiell lohnt...
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88:
|
PROCEDURE ASSIGNVAL ( VAR A : Matrix; Row,Col : INTEGER; Number : EXTENDED ); VAR Temp : EXTENDED; BEGIN Temp:= GETVAL( A,Row,Col ); A^.DPtr^.Number:= Number; END;
FUNCTION GETVAL ( VAR A : Matrix; Row,Col : INTEGER ) : EXTENDED; VAR i,j : INTEGER; BEGIN j:= (Row-1)*A^.NumCols + Col;
WHILE ( j > A^.DPtr^.Index ) and ( A^.DPtr^.Next <> NIL ) DO A^.DPtr:= A^.DPtr^.Next;
WHILE ( j < A^.DPtr^.Index ) and ( A^.DPtr^.Last <> NIL ) DO A^.DPtr:= A^.DPtr^.Last;
GETVAL:= A^.DPtr^.Number;
END; |
Moderiert von
Gausi: Delphi-Tags hinzugefügt.