myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Net, C# Programmierung, Arrays
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Net, C# Programmierung, Arrays

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio


ShadownightProgramming ist offline

Net, C# Programmierung, Arrays

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sehr geehrte Mitglieder,

Ich wende mich an dieses Forum, da ich nirgends, 2 Tage erfolglose Websuche, eine passende Lösung zu meinem Problem gefunden habe. Ich schreibe an einem, zugegeben, etwas komplexerem Programm in C# unter Bezug des Nu-Get-Paketes TAlex.MathCore.LinearAlgebra.CMatrix, wobei ich eine Komplexe matrix erstelle, um die Farbenlehre der Quantentheorie zu überprüfen, was einem Teil meines Privatprojektes zur Erforschung der manyWOrlds-Theorie (bei jedem Quantensprung entsteht eine neue Parallelwelt) darstellt. Ich komme bei folgendem Punkt nicht weiter:

C#-Code:
{
   class GFG
      {
         // rowa and cola are no of rows          
         // and columns of matrix A          
         // rowb and colb are no of rows          
         //  and columns of matrix B          
         static int cola = 3, rowa = 3;
         static int colb = 3, rowb = 3;
         // Function to computes the Kronecker          
         // Product of two matrices          
         static TAlex.MathCore.LinearAlgebra.CMatrix  Kroneckerproduct(TAlex.MathCore.LinearAlgebra.CMatrix[,] A, TAlex.MathCore.LinearAlgebra.CMatrix[,] B)
            {
               TAlex.MathCore.LinearAlgebra.CMatrix C;
               // i loops till rowa              
               for (int i = 0; i < rowa; i++)
                  {
                      // k loops till rowb                  
                      for (int k = 0; k < rowb; k++)
                         {
                             // j loops till cola                      
                             for (int j = 0; j < cola; j++)
                                {
                                    // l loops till colb                          
                                    for (int l = 0; l < colb; l++)
                                      {
                                           C = new TAlex.MathCore.LinearAlgebra.CMatrix(new double[i + l + 1, j + k + 1] =
                                                                                                                        A[i, j] * B[k, l]);
                                           //Das stand normalerweise drin                            
                                           // Each element of matrix A is                            
                                           // multiplied by whole Matrix B                              
                                           // resp and stored as Matrix C                              
                                           //C[i + l + 1, j + k + 1] = A[i, j] *                            
                                           //                          B[k, l];                            
                                           //Console.Write(C[i + l + 1,                            
                                           //               j + k + 1] + " ");                              
                                           //}                            
                 //                    }                            
                //                    //Console.WriteLine();                            
               //                }                            
              //            }                            
             //        }                            
            //    }                            
//}                        
                                  }
                             }
                        }
                    }             return C = new TAlex.MathCore.LinearAlgebra.CMatrix(new double [3,3]);                   }
            }
}

Meine Frage lautet nun: bei der Zeile:

C = new TAlex.MathCore.LinearAlgebra.CMatrix(new double[i + l + 1, j + k + 1] =
A[i, j] * B[k, l]);
innerhalb der vielen for-Schleifen spuckt er folgenden Code und Fehler-Meldung aus:

Fehlermeldung:
"Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Fehler CS0131 Die linke Seite einer Zuweisung muss eine Variable, eine Eigenschaft oder ein Indexer sein. ManyWorldsTheory M:\Dokumente\Visual Studio 2019\Projects\ManyWorldsTheory\ManyWorldsTheory\GFG.cs 42 Aktiv
"

Die Quellen der Berechnungen sind folgende:
 Kronecker Product of two matrices
und
 Farbladung von Quanten - Wikipedia

Dort wo der Kommentar in der angehängten Datei ist soll die Ausgabe sein. :)

Bitte um Lösungsvorschläge (KEINE Lösungen, sonst wird das Thema gelöscht!) :)


Dateianhang:
unknown FarbenQuantentheorie.cs (5 KB, 0 mal heruntergeladen)

Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von ShadownightProgramming am 16.02.2020 14:06.

16.02.2020 11:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.580
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was ist Deine Frage? Selbst der Thementitel oder die Kommentare im Quellcode enthalten keine.
Siehe auch  [Hinweis] Wie poste ich richtig?
16.02.2020 12:58 Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Habe es ausgebessert und die Quellen hinzugefügt :) für ein Gesamtverständis und denFehlercode angegeben / die Meldung kopiert und eingefügt. :)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ShadownightProgramming am 16.02.2020 13:16.

16.02.2020 13:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.435
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Direkte Suche bei Google mit dem Fehlercode CS0131 liefert direkt den Treffer in der Doku.

 Doku

Welche Zeile genau verursacht diesen Fehler?
Dieser Part wäre entscheident und müsste angepasst werden.
Ich vermute aber mal, die Zeile mit dem new double.
Du legst dort ein Array an, gibst aber die Indexe für Zugriffe als Dimensionen an und willst dann noch einen Wert zuweisen.
So funktionieren Arrays nicht.
Diese musst du erst mit der passenden Größe dimensionieren und erst dann kannst du Werte zuweisen.
Wenn du aber hier schon die Werte in ein Double Array packen kannst, warum dann ein neues Array erzeugen und nicht direkt die Werte mitgeben?

Ansonsten solltest du deinen Code anpassen.
Du berechnest viel zu häufig die immer gleichen Werte für deine Index Zugriffe bei deinen Arrays.
Das sind unnötige mehrfach Berechnungen für die CPU, hier die Ergebnise einmal in Variablen vorberechnen und dann die Variablen verwenden.

Ansonsten sieht ein Teil deines Codes unsinnig aus.
Das return macht so keinen Sinn.
Du kannst dir die Zuweisung von C= sparen, da mit return new ... das neue Objekt direkt geliefert wird.

T-Virus
16.02.2020 13:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Diese Zeile wird markiert!

C#-Code:
C = new TAlex.MathCore.LinearAlgebra.CMatrix(new double[i + l + 1, j + k + 1] =
                                           A[i, j] * B[k, l]);
16.02.2020 13:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Genau das ist meinem Verständinis nach und wenn man sich die Quelle No. 2 anschaut, auch der Sinn und Zweck der Funktion oder verstehe ich da was falsch?
Mfg :)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ShadownightProgramming am 16.02.2020 13:25.

16.02.2020 13:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.580
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Syntaxfehler des Compiler sind prinzipiell alle sehr gut dokumentiert.  [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Was falsch ist, ist offenbar die Zuweisung innerhalb von CMatrix.
Schreib die in ne extra Zeile und verwende dann entsprechend die Referenz.

PS: bitte unterlass die Full Quotes.
Will nicht dauernd Deine Beitrage editieren müssen.
 [Hinweis] Wie poste ich richtig?
16.02.2020 13:27 Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

wird gemacht Entschuldige ist mein erster Tag hier ...
16.02.2020 13:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.580
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

War nur ein Hinweis und eine Bitte ;-)
16.02.2020 13:32 Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn ich das return C weglasse, kommt

Fehlermeldung:
CS0161: Nicht alle Codepfade geben einen Wert zurück!

Das geht also nicht.
16.02.2020 13:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Es kommt der Fehler : Die linke Seite einer Zuweisung muss eine Variable, eine Eigenschaft oder ein Indexer sein. ManyWorldsTheory M:\...\Projects\ManyWorldsTheory\ManyWorldsTheory\GFG.cs 42 Aktiv
wenn ich die entsprechendeZeile so abändere:

C#-Code:
C = new TAlex.MathCore.LinearAlgebra.CMatrix(new TAlex.MathCore.LinearAlgebra.CMatrix(new double[i + l + 1, j + k + 1] =

                                A[i, j] * B[k, l]));

Also ist wieder die verdächtige Zeile mit dem new double verantwortlich ... Wie bekommt man aus der Matrix den "Gesamt-Kronecker-Wert" heraus?

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von ShadownightProgramming am 16.02.2020 13:47.

16.02.2020 13:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.503
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du solltest erst die Grundlagen von C# lernen, bevor du dich an spezifische Algorithmen machst, z.B. mittels des OpenBooks  Visual C# (auch hier im Forum links unter "Ressourcen" verlinkt).
Für dich also hier besonders das Kapitel  2.5 Datenfelder (Arrays) ff.
16.02.2020 14:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich kann C# nur eben verstehe ich nicht wieso er nicht die Indizies nimmt die man ihm gibt ...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ShadownightProgramming am 16.02.2020 15:56.

16.02.2020 15:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

hier die mittlerweile umgeschrieben Variante dass ich zuerst das Array initialisiere und danach die Werte zuweise:

C#-Code:
// l loops till colb
                        for (int l = 0; l < colb; l++)
                        {
                            double[,] matr;
                            matr = new double[i + l + 1, j + k + 1] = A[i, j] *
                                                      B[k, l];
                            C = new TAlex.MathCore.LinearAlgebra.CMatrix(matr);

                            return C;
                        };

Jetzt stört nur noch die

C#-Code:
matr = new double[i + l + 1, j + k + 1] = A[i, j] *
                                                      B[k, l];

Zeile mit dem Error Code:
CS0131 Die linke Seite einer Zuweisung muss eine Variable, eine Eigenschaft oder ein Indexer sein.
16.02.2020 16:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.580
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Naja, offenbar - jedenfalls sieht es nach Deinen Posts einfach auch für uns so aus - verstehst Du eben doch nicht "wie C# funktioniert", wenn Du selbst mit dem Error Code nichts anfangen kannst.
Daher entsprechend die Hinweise; muss ja nicht so sein - aber es wirkt halt so für uns "auf der anderen Seite".

C#-Code:
        public Test()
        {
            // Geht
            double[,] array = new double[1,2];
            Do(array);

            // Geht nicht
            Do(double[,] array = new double[1, 2]);
        }

Und auch in Deinem jetzt geposteten Code ist exakt der gleiche Fehler.
16.02.2020 16:45 Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.326
Herkunft: Leipzig


MrSparkle ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du hast dort zwei Zuweisungen mit =, deshalb funktioniert es nicht. Probiere mal:

C#-Code:
matr = A[i, j] * B[k, l];
16.02.2020 17:22 Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.503
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von ShadownightProgramming:
Ich kann C# ...

Sehe ich...

Zitat von ShadownightProgramming:
... nur eben verstehe ich nicht wieso er nicht die Indizies nimmt die man ihm gibt ...

Und genau das ist in meinem Link erklärt, wie man ein Array initialisiert und auf einzelne Datenfelder zugreift (sogar für mehrdimensionale Arrays)...

Aber als Hinweis: du mußt das Array natürlich vor deinen Schleifen deklarieren und initialisieren.
Und die return-Anweisung muß natürlich dann am Schluß der Methode (nach den Schleifen) stehen (daher auch "CS0161: Nicht alle Codepfade geben einen Wert zurück!").
Aber das sind Grundlagen in jeder imperativen Programmiersprache...

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 17.02.2020 10:05.

17.02.2020 09:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ShadownightProgramming
myCSharp.de-Mitglied

Dabei seit: 16.02.2020
Beiträge: 12
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von ShadownightProgramming

ShadownightProgramming ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dankesehr für eure Hilfen :) Ich hab nicht richtig mitgedacht :/ ... DANKI nochmal an alle die sich die Mühe gemacht haben :). Wollt Ihr das Endprodukt sehen und Vorschläge zur Laufzeitverbesserung geben? Da meine Berechnungen seehr lange dauern aber im Moment ist das die "schnellste" Lösung für das Testen nach Leben aller möglichen "Universen / Welten". Sehr viele If-Schleifen. Ich würde es in einem anderen Thread posten :) "Review" zum Beispliel :)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ShadownightProgramming am 17.02.2020 19:34.

17.02.2020 19:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 01.04.2020 18:50