Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 1+1=0 definieren? (https://www.delphipraxis.net/113438-1-1%3D0-definieren.html)

grenzgaenger 8. Mai 2008 13:25

Re: 1+1=0 definieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
SCIP ? hier wäre ja der quellcode mit bei. könntest eigentlich anpassen...

ansonsten, würd ich dir raten, 'n paar vektoren zu definieren und diese dann entsprechend zu lösen. für das lösen, kannst dir ja 'n paar matrix operationen selbst zusammenschrauben ... :-)

als datenstruktur würd ich dir zu 'n array of integer oder 'n array of array of integer raten ... :-)

für dies kannst dann ein paar proceduren implementieren wie add(VonVektor[1], NachVektor[2]), etc.

die ergebnisse und die matrixen kannst dann jederzeit ausgeben :-)

<HTH> GG

BTW: die werte kannst du entweder direkt im code deklarieren oder bei der initialisierung aus deiner datei einlesen :-)

Hier noch 'n kleines Codebeispiel:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TVektor = array of Integer;
  TMatrix = array of TVektor;

procedure AddVektor(VAR Vektor, ZielVektor: tVektor);
var
  i: integer;
begin
  for i := low(Vektor) to high(ZielVektor) do
   ZielVektor[i] := ZielVektor[i] + Vektor[i];
end;
 

var
  V1, V2: TVektor;  
  i: integer;
begin
  setlength(V1, 3);
  Setlength(V2, 3);

  V1[0] := 1; V2[0] := 2;
  V1[1] := 2; V2[1] := -1;
  V1[2] := 1; V2[2] := 1;

  writeln('Ausgangslage');
  write('Vektor 1: '); for i in v1 do write(i: 3, ' '); writeln;
  write('Vektor 2: '); for i in v2 do write(i: 3, ' '); writeln;

  AddVektor(V1, V2);

  writeln(#10'nach Mutation');
  write('Vektor 1: '); for i in v1 do write(i: 3, ' '); writeln;
  write('Vektor 2: '); for i in v2 do write(i: 3, ' '); writeln;

  readln;
end.
sehe grad, dass hier noch 'n paar nette funktionen für arrays/vektoren vorhanden sind, so sollt es schneller gehen :-)

Ari 8. Mai 2008 14:45

Re: 1+1=0 definieren?
 
Hm da ich Delphi 7 verwende funktionieren die ganzen write, writeln und readln befehle bei mir nicht. Auf Memo1.Lines.Add umgemünzt krieg ich auch noch Fehlermeldungen..: operator not applicable to this operand type.

Aber wieso sind das jetzt zwei Vektoren? Quasi ein Vektor eine Unbekannte? Ohje :(

grenzgaenger 8. Mai 2008 14:55

Re: 1+1=0 definieren?
 
Das Beispiel sollte auch auf D7 laufen:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TVektor = array of Integer;
  TMatrix = array of TVektor;

procedure AddVektor(VAR Vektor, ZielVektor: tVektor);
var
  i: integer;
begin
  for i := low(Vektor) to high(ZielVektor) do
   ZielVektor[i] := ZielVektor[i] + Vektor[i];
end;


var
  V1, V2: TVektor;  
  i: integer;
begin
  setlength(V1, 3);
  Setlength(V2, 3);

  V1[0] := 1; V2[0] := 2;
  V1[1] := 2; V2[1] := -1;
  V1[2] := 1; V2[2] := 1;

  writeln('Ausgangslage');
  write('Vektor 1: '); for i := 0 to high(v1) do write(v1[i]: 3, ' '); writeln;
  write('Vektor 2: '); for i := 0 to high(v2) do write(v2[i]: 3, ' '); writeln;

  AddVektor(V1, V2);

  writeln(#10'nach Mutation');
  write('Vektor 1: '); for i := 0 to high(v1) do write(v1[i]: 3, ' '); writeln;
  write('Vektor 2: '); for i := 0 to high(v2) do write(v2[i]: 3, ' '); writeln;

  readln;
end.
das ist 'n beispiel für die addition V1 + V2 --> V2

mit V1 = {1; 2; 1} und V2 = {2; -1; 1}

das ganze kannst auch gern in TMatrix aufnehmen und dann über die vektoren addressieren oder 'ne neue funktion machen, welche die matrix komplett durläuft und die vektoren addiert (mit ausschluss des quellvektors).

in der kleinen komponentensammlung sind aber schon die matrix und vektoroperationen definiert. damit sollt es leichter gehen.

himitsu 8. Mai 2008 14:55

Re: 1+1=0 definieren?
 
Zitat:

Zitat von Ari
Hm da ich Delphi 7 verwende funktionieren die ganzen write, writeln und readln befehle bei mir nicht.

häää?

Diese sind Befehle stammen noch aus den guten alten Pascalzeiten und jede Delphiversion beherscht sie.
schau mal in deine OH.
Und die Befehle versecken sich in der Unit System, welche immer eingebunden ist ... also gehen sie auch immer.

grenzgaenger 8. Mai 2008 15:03

Re: 1+1=0 definieren?
 
es lag wohl an der FOR schleife, da hatte ich die syntaxerweiterung aus D2005 oder D2006 verwand... von daher konnte es in D7 nicht funktionieren. im zweiten betrag hab ich es auf die standardschleife umgestellt :-)

Ari 8. Mai 2008 15:06

Re: 1+1=0 definieren?
 
Dass die von Turbo Pascal kommen hätte ich mir gedacht..
Delphi-Quellcode:
writeln('Ausgangslage');
Popup: Project raised exception class EInOutError with message 'I/O error 105'. Process stopped.
Mit ner Memo hatte ich kein entsprechendes Problem bei anderen Programmen - wobei für dieses Programm nach wie vor die Datei mit meinen Memo-Zuweisungen nichtmal erstellt wird.. :?:

Ari 8. Mai 2008 15:11

Re: 1+1=0 definieren?
 
Zu der neuen Version: wird v[u] durch 3 dividiert oder soll das in der Ausgabe erscheinen? Wenn ich das mit Memo mache muss ich das ja erst in nen string umwandeln
sorry, mein übliches Brett vorm Kopf ist sehr fest genagelt ^^

RipperFox 8. Mai 2008 15:28

Re: 1+1=0 definieren?
 
Edit: war zu knapp..

{$APPTYPE CONSOLE} , dann klappts auch mit writeln..

Erklärung: Wohin soll denn writeln() seinen Output schreiben (die nette DOS-Box / Commandline is ja nich offen..)?

grenzgaenger 8. Mai 2008 15:30

Re: 1+1=0 definieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
das hab ich auch noch nie gesehen, dass der standard write befehl 'n IO error erzeugt ... :gruebel: :gruebel: :gruebel:

hab das ganze mal 'ne formularanwendung gepackt ... sollte nun fuktionieren.

wenn du einen vektor mit 'n skalar multiplizieren möchtest, musst dir 'ne kleine procedure/funktion schreiben... statt V1 * V2 --> x machste dann V1 * Skalar --> x

das sollte aber die unit bereits können ...

<HTH>

Ari 8. Mai 2008 15:44

Re: 1+1=0 definieren?
 
das Beispiel hab ich mir runtergeladen, dankeschön!!

Jedes Mal wenn ich auf den V1+V2 Button drücke wird also V1 dazu addiert..kann ich damit auch bestimmte Unbekannte eliminieren? wie kann ich das jetzt für 730 Unbekannte und 320 Gleichungen machen und dazu noch Modul 2 einbauen?
Die generelle Lösung des Problems erhalte ich ja mit SCIP (also Simplex-Verfahren, falls es das ist). Nur wie das Gleichungssystem nach dem Eliminationsverfahren aussieht, brauche ich noch :gruebel: Da das so viele Gleichungen sind wird wohl ein Memo, Liste oder so notwendig sein, oder?

zu {$APPTYPE CONSOLE}: bei mir steht da Unit und wie ich program neu öffne weiß ich auch nicht - meine Hilfedatei läuft unter Vista nicht :pale:

edit: das vorherige gepostete Beispiel hab ich jetzt mit der memo hinbekommen, wobei ich ":3" noch nicht ganz verstehe, hab das einfach als String eingebunden..
edit2: noch ne Frage: was bedeutet das high(v1)?
Vielleicht kann man da irgendwie ne Schleife und ein Modul einbauen um das dann mit mehreren Gleichungen zu machen..?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz