Gauss Verfahren



  • Hallo zusammen!

    Wie die Überschrift es schon verraten haben mag, hat mein Beitrag etwas mit dem Gauss Verfahren zu tun.

    Dazu habe ich ein Programm geschrieben (siehe Code unten).
    Mein Programm liest aus der Datei "task.txt" die einzelnen Werte aus.

    Nun stelle ich mir die Frage, wie ich Brüche, Zahlen mit Kommastellen und später imaginären Zahlen verarbeiten kann?

    Habt ihr für mich einpaar Anregungen?

    #include <stdio.h>
    
    int FileRead(int arraytmp[100][100]) {
    
    	FILE *file;
    
    	int c=0, index=0, index2=0;
    
    	file=fopen("task.txt","r");
    
    	if (file !=NULL) {
    
    		while( (c=fgetc(file)) !=EOF) {
    
    			putchar(c);
    
    			arraytmp[index2][index]=c;
    
    			++index;
    
    			if(index==1001) {
    
    				++index2;
    
    				index=0;
    
    			}
    
    		}
    
    	}
    
    	else {
    
    		printf("file cannot open\n");
    
    	}
    
    }
    
    int SortArray(int arraytmp[100][100],int array[100][100]) {
    
        /* zum Sortieren des Array */
    
    }
    
    int main()  {
    
    	double array[100][100];
    	int arraytmp[100][100];
    
    	FileRead(arraytmp);
    
    	SortArray(arraytmp,array);
    
    	return 0;
    
    }
    

    Vielen Dank !

    Mit freundlichen Grüßen

    Billy the Kid


  • Mod

    billy the kid schrieb:

    Nun stelle ich mir die Frage, wie ich Brüche, Zahlen mit Kommastellen und später imaginären Zahlen verarbeien kann?

    C++ oder andere Sprachen lernen, die es sehr einfach machen, den gleichen Code auf unterschiedliche Datentypen los zu lassen 🙂

    Die harte Tour in C (verschiedene Vorschläge):
    a) Für jede Variante eine Spezialisierung schreiben. Sooo viele verschiedene Arten von Objekten kann man nicht in eine Matrix schreiben
    b) Mit Makros den Typ variabel gestalten. Das funktioniert zumindest noch mit eingebauten Datentypen wie komplexen Zahlen oder Fließkommazahlen. Aber mit Brüchen (für die du einen eigenen Datentyp bräuchtest) geht das nicht mehr oder nur mit großen Verrenkungen, denn dann müssen schließlich auch die Rechenoperationen variabel gestaltet werden, da die eingebauten Operatoren nicht mehr ausreichen.
    c) So ähnlich wie b, aber nicht mit Makros, sondern mit void-Zeigern und Funktionszeigern, um Typunabhängigkeit zu erreichen. So wie bei qsort aus der Standardbibliothek. Das macht es etwas angenehmer und flexibler bezüglich selbstgeschriebenen Datentypen als Makros. Nachteil: Kann die Laufzeit erhöhen.



  • Danke für die Antwort SeppJ

    In wie fern ist das mit den unterschiedlichen Datentypen in C++ gemeint?

    Eine "Idee" wäre von mir, das ein ein weiteres Array "hintenran zu setzen"

    int array[index][index2][Zahl]
    

    Mit dem Index "Zahl" nutze ich, um den Nenner, den Zähler und das Bruch Zeichen auszulesen und entsprechend zu verarbeiten (auch später mit imaginären Zahlen (-> +-j).

    Eure Meinung bitte zu diesem Vorhaben bzw eventuelle Verbesserungen.



  • billy the kid schrieb:

    Eine "Idee" wäre von mir, das ein ein weiteres Array "hintenran zu setzen"

    int array[index][index2][Zahl]
    

    Mit dem Index "Zahl" nutze ich, um den Nenner, den Zähler und das Bruch Zeichen auszulesen und entsprechend zu verarbeiten (auch später mit imaginären Zahlen (-> +-j).

    Bruchzeichen? Nee, wenn Du an der Stelle noch Zeichen interpretierst, biste echt zu spät.
    Brüche komplexe Zahlen? Naja, wenn Du meinst. Aber nimm dafür struct.
    Für die Generizität nimm C++.



  • Weder dein Problem, noch dein Programm hat etwas mit dem Gauss-Verfahren zu tun.

    Das Programm liest Zeichen statt Zahlen und das auch noch falsch.

    .



  • Es waren Brüche ohne imaginären Anteil gemeint (z.B. 1/27) und imaginäre Zahlen (2+j).

    @Dirk8 Wie soll ich später j (Imaginäre Zahl -> Elektrotechnik etc.) einlesen?
    Hast du eine Lösung bzw. ein C / C++ Ansatz dafür?

    P.S. Es geht zwar von meiner Seite um das Gauss Verfahrn, aber ich gebe dir Recht: Das Problem liegt (aus meiner Sicht) bei dem Einlesen bzw Verarbeitung der Datei.



  • Du hast ja noch keine geeignete Datenstruktur für dein Vorhaben.

    Fehlt dir also eine struct/union um die Daten aufzunehmen.
    Den Datentyp complex gibt es seit C99 im Standard.

    Den kannst du auch für reale Zahlen missbrauchen.
    Und wenn es dir der Name nicht stört auch für deine Brüche. Zähler = Realteil, Nenner=Imaginärteil.
    C++ bietet dir aber mehr Möglichkeiten.

    Wenn man weiß, wie die Daten abgelegt werden sollen, kann man die auch speichern und lesen.

    Aber fang doch erstmal mit dem richtigen Lesen von realen Zahlen an.
    Danach kannst du dir was für den Rest überlegen. Dann kennst du schon einige Fallen.
    Und ob i oder j sollte egal sein. Muss das j in die Datei. steht das vor oder hinter der Zahl.

    Schau dich doch mal bei GNU Octave / MATLAB oder Mathematica um, wie die solche Daten ablegen.



  • Danke für den Hinweis


Log in to reply