Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Matrizen (Erstellen, Rechnen) (https://www.delphipraxis.net/184198-matrizen-erstellen-rechnen.html)

mariusbenz 6. Mär 2015 16:35

Matrizen (Erstellen, Rechnen)
 
Hallo, bin neu hier und weiß nicht ob das hier überhaupt das richtige Forum für meine Frage ist, deshalb entschuldige ich mich schon mal im Voraus, falls es so sein sollte.

Folgendes, ich möchte ein Programm schreiben, bei dem einige Berechnungen mit Matrizen durchgeführt werden müssen(Inverse Matrix bilden, Multiplikation zweier Matrizen).
Diese Rechnungen sollen im Hintergrund ablaufen, der Benutzer soll auch keine Matrix als Matrix eingeben, ebenso muss die Matrix am Ende nicht als solche ausgegeben werden.
Er soll z.B. in eine Edit-Komponente 4 Ziffern eingeben, die dann für die Berechnung in eine 2x2-Matrix umgewandelt werden sollen.
Bsp.: Eingabe: 1 2 3 4

Matrix A:
1 2
3 4

In eine zweite Edit-Komponente gibt er beliebig viele Ziffern ein, z.B. 10, welche dann in eine 5x2-Matrix umgewandelt werden sollen.
Bsp.: Eingabe: 1 2 3 4 5 6 7 8 9 0

Matrix B:
1 2
3 4
5 6
7 8
9 0

Die zweite Matrix soll also immer 2 Spalten haben und AnzahlZeichen/2 Zeilen.


Mat B soll dann mit Mat A multipliziert werden
Mat B * Mat A =
7 10
15 22
23 34
31 46
9 18

Diese Matrix soll dann am Ende z.B. in einer Edit-Komponente so ausgegeben werden: 7 10 15 22 23 34 31 46 9 18

Hat jemand irgendeine Idee wie man das umsetzen kann?

Bjoerk 6. Mär 2015 17:01

AW: Matrizen (Erstellen, Rechnen)
 
Ich würde zur Eingabe / Ausgabe ein StringGrid nehmen und zur Bearbeitung bieten sich Arrays an (TMatrix = array of array of double).

SMO 6. Mär 2015 17:12

AW: Matrizen (Erstellen, Rechnen)
 
1. Herausfinden, wie viele Zahlen / "Wörter" im Edit-Feld stehen. Eventuell Warnhinweis oder Autokorrektur wenn zu viele oder zu wenige Zahlen.
2. Die Zahlen in einer Schleife auslesen, von String nach Single oder Double konvertieren (StrToFloat) und in einem Array ablegen.
3. Dasselbe mit dem zweiten Edit-Feld machen.
4. Matrixmultiplikation auf den Arrays durchführen.
5. Ergebnis nach String konvertieren (FloatToStr oder Format) und in Edit-Feld schreiben.

Je nachdem, welche Delphi-Version du hast, gibt es die Unit System.Math.Vectors, die 3x3 und 4x4 Matrizen implementiert (bietet aber keine Konversion von/zu String). Kannst du dir ja mal anschauen. Ein StringGrid zur Darstellung wie von Bjoerk vorgeschlagen halte ich auch für schöner als ein Edit-Feld.

bernhard_LA 6. Mär 2015 17:33

AW: Matrizen (Erstellen, Rechnen)
 
es gibt schon zahlreiche freie Lösungen zu diesem Thema in Delphi


z.B. http://www.torry.net/pages.php?id=308

Der schöne Günther 6. Mär 2015 18:36

AW: Matrizen (Erstellen, Rechnen)
 
Da sich das nach einer Schulaufgabe anhört sind externe Libraries für ihn wahrscheinlich keine Option.

Sind es immer fest zwei Spalten oder soll Matrixmultiplikation für beliebige Matrizen gehen? Und immer interessant zu wissen: Über welche Delphi-Version sprechen wir?

Dejan Vu 6. Mär 2015 19:08

AW: Matrizen (Erstellen, Rechnen)
 
Zitat:

Zitat von mariusbenz (Beitrag 1292654)
Er soll z.B. in eine Edit-Komponente 4 Ziffern eingeben...
In eine zweite Edit-Komponente gibt er beliebig viele Ziffern ein, z.B. 10...

Woher weißt Du, welche Dimensionen deine erste Matrix haben soll, wenn z.B. 16 Zahlen eingegeben werden? 4x4 oder 2x8 oder 8x2?
Oder soll die erste Matrix immer quadratisch sein?

Namenloser 6. Mär 2015 20:46

AW: Matrizen (Erstellen, Rechnen)
 
Ich würde es einfach genau so machen, wie du es in deinem Beitrag schon intuitiv gemacht hast: Einfach ein mehrzeiliges Textfeld (TMemo), mit Leerzeichen oder Tabs zwischen den einzelnen Spalten und Zeilenumbruch zwischen den Zeilen. Genauer gesagt habe ich sowas glaube ich schon mal genau so umgesetzt, wenn ich mich recht erinnere. Sieht vielleicht weniger schick aus, ist aber in der Praxis viel bequemer als mit irgendeinem Stringgrid herumzufummeln.

Sir Rufo 6. Mär 2015 21:22

AW: Matrizen (Erstellen, Rechnen)
 
Warum sollte mit dem StringGrid da irgendwas fummelig sein?

Im Gegenteil, denn da habe ich auch schon die Dimensionen der Matrix als Information, ist doch super. Bei einem Memo müsste ich die Eingaben erst parsen, beim StringGrid nehme ich nur
Delphi-Quellcode:
StrToFloat
pro Zelle und der Drops ist gelutscht.

mariusbenz 6. Mär 2015 21:44

AW: Matrizen (Erstellen, Rechnen)
 
Danke schon mal für die vielen Antworten.

Vorweg, es handelt sich dabei nicht um eine Schulaufgabe, bin lediglich aus dem Matheunterricht darauf gekommen, dieses Programm zu entwickeln.

Zu der Frage warum die Eingabe über ein Edit Feld laufen soll ist: Die einzugebenen Zahlen stehen für ein Wort, wobei A=1,B=2,C=3,...,Z=26 bedeuten und das Wort "Hallo" kann
man ja schlecht in eine String Grid Komponente schreiben.
Die erste Matrix soll dabei die Codierungsmatrix sein, anfangs als 2x2 Matrix für ein 4-stelliges Passwort.
Die zweite Matrix stellt ein Wort dar, dass in einen Zahlencode umgewandelt wird.
Am Ende soll das Programm also quasi nen Text verschlüsseln und man kann ihn nur entschlüsseln und lesbar machen wenn man das Passwort, also die Codierungsmatrix kennt.
Ich wollte aber erst mal anfangen Zahlen zu verschlüsseln.

Zur Delphi Version kann ich nichts sagen, da ich das ganze über Lazarus mache(installiert vor 2 Jahren)

BUG 7. Mär 2015 10:55

AW: Matrizen (Erstellen, Rechnen)
 
Ah, schön zu hören :thumb:

Wo genau liegt denn konkret dein Problem? Dein Plan bis jetzt klingt doch relativ ausgereift.

mariusbenz 7. Mär 2015 17:19

AW: Matrizen (Erstellen, Rechnen)
 
Hab mir nochmal ein paar Gedanken gemacht und hab dabei festgestellt, dass ich auf zu viele Probleme stoßen werde.
Und da meine Programmierkenntnisse noch recht überschaubar sind, schiebe ich das Projekt mal lieber etwas nach hinten.
Trotzdem danke für die Antworten, ich werde irgendwann nochmal hier drauf zurückkommen.

Namenloser 7. Mär 2015 18:14

AW: Matrizen (Erstellen, Rechnen)
 
Zitat:

Zitat von Sir Rufo (Beitrag 1292663)
Warum sollte mit dem StringGrid da irgendwas fummelig sein?

Im Gegenteil, denn da habe ich auch schon die Dimensionen der Matrix als Information, ist doch super. Bei einem Memo müsste ich die Eingaben erst parsen, beim StringGrid nehme ich nur
Delphi-Quellcode:
StrToFloat
pro Zelle und der Drops ist gelutscht.

Wenn man Daten schnell eingeben will, dann geht das mit einem einfachen Texteditor immer noch bequemer als mit einem StringGrid. Da kann man nämlich einfach die Daten runterschreiben und muss nicht in irgendwelchen Zellen herumklicken. Aber ich habe die Frage wohl etwas missverstanden.

mariusbenz 11. Sep 2015 13:13

AW: Matrizen (Erstellen, Rechnen)
 
Falls es jemanden interessiert, ich habe das Programm nun fertiggestellt.

Ich habe die Zeichen einfach in ein Array einlesen lassen und damit dann weitergerechnet.
Ich habe es so erweitert, dass man nun Textdateien einlesen lassen kann, die dann in Zahlen umgewandelt werden um mit ihnen rechnen zu können und für die Ausgabe wieder umgewandelt werden. Man kann auswählen, ob das Programm die Zahlen in ihren jeweiligen UNICODE umwandelt oder in ein eigenes "Zahlensystem", welches aus Buchstaben besteht. Das Programm kann natürlich einen zuvor verschlüsselten Text auch wieder entschlüsseln, sofern man das Passwort/den PIN kennt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.

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