Thema: Delphi Matrix 2

Einzelnen Beitrag anzeigen

Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#1

Matrix 2

  Alt 11. Mai 2003, 17:13
ich habe noch eine frage zu einem ähnlichen programm wie in dem letzten matrix tread, genauergesagt eine erweiterung zu diesem. es wird angezeigt : "die typen der tatsächlichen und formalen var-parameter müssen übereinstimmen." wenn ich nur wüsste was das bedeuten soll ^^". ich poste mal wieder den delphisource code, hoffe ihr könnt mir helfen! thx im vorraus, die kommentare müssten aufschluss geben was das programm macht.

Delphi-Quellcode:

 //*******************************************************//
// //
// Name: fDASTA202 //
// Autor: n00b on knees //
// Datum: 10.05.2003 //
// Zweck: Liest eine Zahl N in, erstellt eine Matrix //
// mit NxN Reihen, liest X und Y ein, deren //
// Zeilennummern der Matrix dann vertauscht werden.//
// //
//********************************************************//

unit fdasta202;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
    TFeld = array [1..10, 1..10] of integer;
  TForm1 = class(TForm)
    mmAus: TMemo;
    btStart: TButton;
    Label1: TLabel;
    edN: TEdit;
    X: TLabel;
    edX: TEdit;
    Label2: TLabel;
    edY: TEdit;
    btVertauschen: TButton;
    procedure ShowMatrix(var a: integer; var N: TFeld);
    procedure FillMatrix(var AFeld: TFeld; N: integer);
    procedure btStartClick(Sender: TObject);
  private
    function GetN: integer;
    function GetLine (var N: integer; var AFeld: TFeld): TFeld;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//********************************************************//
// //
// Name: GetN //
// Datum: 10.05.2003 //
// Zweck: Liest die Zahl N ein, und prüft ob sie im //
// Bereich von 2 bis 10 liegt. //
// //
//********************************************************//

function TForm1.GetN: integer;
//Variablendeklaration
var
  N: integer;
begin
  //Einlesen
  N:=StrToInt(edN.Text);
  //Wenn N im Bereich von 2 bis 10 liegt, dann
  if (N > 1) and ( N <= 10) then
    //Rückliefere N
    result:= N
  else
    result:=random(9)+2;
end;

//********************************************************//
// //
// Name: FillMatrix //
// Datum: 10.05.2003 //
// Zweck: Füllt das mehrdimensionale Array mit //
// Zufallszahlen von 0 bis 99. //
// //
//********************************************************//

procedure TForm1.FillMatrix(var AFeld: TFeld; N: integer);
//Variablendeklaration
var
  i, j: integer;
begin
  //Kopfgesteurte Schleife, wobei i die 3 Zeilen sind.
  for i:= 1 to N do
    //Kopfgesteuerte Schleife, wobei j die 6 Spalten sind.
    for j:=1 to N do
      //fügt jedem Feldelement eine Zufallszahl von 0 bis 9 zu.
      AFeld[i, j]:= random(99)+1;
end;

//********************************************************//
// //
// Name: ShowMatrix //
// Datum: 10.05.2003 //
// Zweck: Gibt das mehrdimensionale Feld aus. //
// //
//********************************************************//

procedure TForm1.ShowMatrix(var a: integer; var N: TFeld);
//Variablendeklaration
var
  i, j: integer;
begin
  //leert das Memofeld
  mmAus.Clear;
  //Beide folgenden Schleifen sind zur Formatierten Ausgabe in der Tabellenart
  for i:=1 to a-1 do
  begin
    mmAus.Lines.Add(format('%3d. Reihe: ',[i]));
    for j:=1 to a-1 do
      mmAus.Lines[i]:= mmAus.Lines[i]+format('%3d',[N[i,j]]);
  end;
end;

//********************************************************//
// //
// Name: GetLine //
// Datum: 10.05.2003 //
// Zweck: Liest X und Y ein, überrprüft ob diese im //
// richtigen Bereich liegen, und vertauscht //
// die Zeilen mit den Nummern. //
// //
//********************************************************//

function TForm1.GetLine (var N: integer; var AFeld: TFeld): TFeld;
//Variablendeklaration
var
  x, y, i: integer;
  Temp: array [1..10] of integer;
  begin
  //Einlesen der Variablen
  x:= StrToInt(edX.Text);
  y:= StrToInt(edY.Text);
  //Wenn X und Y kleiner gleich N, und größer 1 sind, dann
  if (x <= N) and (y <= N) and (x > 1) and (y > 1) then
    //Kopfegesteuerte Schleife, von 1 bis N um die Zeilen zu vertauschen
    for i:=1 to N do
    begin
      Temp[i]:= AFeld[x, i];
      AFeld[x,i]:= AFeld[y,i];
      AFeld[y,i]:= Temp[i];
    end;
  //Liefert das Feld zurück
  result:= AFeld;
end;


procedure TForm1.btStartClick(Sender: TObject);
//Variablendeklaration
var Feld: TFeld;
    N: integer;
begin
  //Ruft alle Unterprogramme auf
  N:= Getn;
  FillMatrix(N, Feld);
  ShowMatrix(N, Feld);//Hier wird der Fehler angezeigt
  Feld:= GetLine(N, Feld);
  ShowMatrix(N, Feld);
end;
end.
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat