float und Array



  • Hallo Leute es ist ein Anfängerfehler der mich aber doch ärgert. Die Zahlen die ich in den if Funktionen eingefügt habe sind nur Testplatzhalter. Es werden dorthin Funktionen kommen. Mein Problem liegt darin, ich brauche das Array E[5][5] als float. Doch tausche ich int durch float aus, so bekomme ich eine Nullmatrix. Was muss ich verändern, dass zwar die Zellen immer noch 11, 12, 13,... durchnumeriert werden, aber in den einzelnen Zellen auch float Zahlen auftauchen dürfen. Und worin besteht genau der Fehler?

    Vielen Dank für Eure Antworten

    Gruß redXtream

    #include <iostream>
    using namespace std;
    int main()
    {

    int S;
    int D;
    float i;
    float j;
    int E[5][5]={0};
    float a;
    // i entspricht 2S+1
    // j entspricht S*(S+1)
    cout << "Geben Sie den Spin ein";
    // Hier wird der Spin eingegeben
    cin >> S;
    cout << "Geben Sie die Nullfeldaufspaltung ein";
    // Hier wird die Nullfeldaufspaltung eingegeben
    cin >> D;
    // Hier müssten nun die Rechnungen beginnen
    i = (2S)+1;
    j = S
    (S+1)0.33;
    // Berechnung der Multipliztät i (2S+1) und j=S
    (S+1)*0.33

    for(int q = 1;q < 6;q++) // linke Basis
    {
    for(int p = 1; p < 6; p++) //rechte Basis, wendet man Operator Sz an so kommt p heraus
    {
    if(q==p) //Fall 1, hier muss der Operator Sz ansetzen
    E[q][p]=2;
    else if(q+2==p) // Fall 2, hier setzt der Sx Operator an
    E[q][p]=3;
    else if (q-2 == p) // Fall 3, hier setzt der Sy Operator an
    E[q][p]=3;
    else // Ansonsten bleibt nur die Null
    E[q][p]=0;
    printf("%d",E[q][p]);

    }
    printf("\n");
    }

    system("PAUSE");
    return 0;
    }



  • das spricht nix dagegen float zu nehmen,
    vielleicht hast du bloß bei der ausgabe das falsche formatierungszeichen für printf benutzt

    array-indizes beginnen mit 0 und enden bei anzahlelemente - 1.
    hastu 5 array elemente, so ist das letzte elment bei index 4.



  • Bitte, ist es so schwer Code-Tags zu benutzen? 😞

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int S;
    	int D;
    	float i;
    	float j;
    	int E[5][5]= {0};
    	float a;
    	// i entspricht 2S+1
    	// j entspricht S*(S+1)
    	cout << "Geben Sie den Spin ein";
    	// Hier wird der Spin eingegeben
    	cin >> S;
    	cout << "Geben Sie die Nullfeldaufspaltung ein";
    	// Hier wird die Nullfeldaufspaltung eingegeben
    	cin >> D;
    	// Hier müssten nun die Rechnungen beginnen
    	i = (2*S)+1;
    	j = S*(S+1)*0.33;
    	// Berechnung der Multipliztät i (2S+1) und j=S*(S+1)*0.33
    
    	for(int q = 1; q < 6; q++) // linke Basis
            {
                    for(int p = 1; p < 6; p++) //rechte Basis, wendet man Operator Sz an so kommt p heraus
                    {
                            if(q==p) //Fall 1, hier muss der Operator Sz ansetzen
                                    E[q][p]=2;
                            else if(q+2==p) // Fall 2, hier setzt der Sx Operator an
                                    E[q][p]=3;
                            else if (q-2 == p) // Fall 3, hier setzt der Sy Operator an
                                    E[q][p]=3;
                            else // Ansonsten bleibt nur die Null
                                    E[q][p]=0;
    
                            printf("%d",E[q][p]);
                    }
                    printf("\n");
            }
    
    	system("PAUSE");
    }
    


  • Vielen Dank für Eure Beiträge aber das nutzt mich noch nichts.

    [code][/code]#include <iostream>
    using namespace std;
    
    int main()
    {
        int S;
        int D;
        float i;
        float j;
        float E[5][5]= {0};
        float a;
        // i entspricht 2S+1
        // j entspricht S*(S+1)
        cout << "Geben Sie den Spin ein";
        // Hier wird der Spin eingegeben
        cin >> S;
        cout << "Geben Sie die Nullfeldaufspaltung ein";
        // Hier wird die Nullfeldaufspaltung eingegeben
        cin >> D;
        // Hier müssten nun die Rechnungen beginnen
        i = (2*S)+1;
        j = S*(S+1)*0.33;
        // Berechnung der Multipliztät i (2S+1) und j=S*(S+1)*0.33
    
        for(int q = 1; q < 6; q++) // linke Basis
            {
                    for(int p = 1; p < 6; p++) //rechte Basis, wendet man Operator Sz an so kommt p heraus
                    {
                            if(q==p) //Fall 1, hier muss der Operator Sz ansetzen
                                    E[q][p]=2;
                            else if(q+2==p) // Fall 2, hier setzt der Sx Operator an
                                    E[q][p]=3;
                            else if (q-2 == p) // Fall 3, hier setzt der Sy Operator an
                                    E[q][p]=3;
                            else // Ansonsten bleibt nur die Null
                                    E[q][p]=0;
    
                            printf("%d",E[q][p]);
                    }
                    printf("\n");
            }
    
        system("PAUSE");
    

    }[/code]
    In Zeile 10 habe ich jetzt int E[5][5] zu float E[5][5] geändert. Nun spuckt er mir eine Nullmatrix heraus. Warum?



  • Hallo,

    redXtream schrieb:

    Nun spuckt er mir eine Nullmatrix heraus. Warum?

    Weil die Tabelle hier:

    http://en.cppreference.com/w/c/io/fprintf

    besagt, dass man float nicht mit %d ausgibt, sondern mit.. 😉 ?

    MfG,

    Probe-Nutzer



  • Liest du die Antworten auch?

    bbbbb schrieb:

    das spricht nix dagegen float zu nehmen,
    vielleicht hast du bloß bei der ausgabe das falsche formatierungszeichen für printf benutzt

    array-indizes beginnen mit 0 und enden bei anzahlelemente - 1.
    hastu 5 array elemente, so ist das letzte elment bei index 4.



  • Tja, printf hat den Nachteil, das der Formatspecifier zum Variablentyp passen muss.
    Aber du benutzt doch C++. Warum nimmst du nicht cout. Das gibt das richtige Format abhängig vom Variablentyp aus.


  • Mod

    Den eigentlichen Fehler hat bbbbb aber auch schon genannt. Das mit den Arrayindizes ist viel schlimmer als das printf. Bei mir zum Beispiel läuft das Programm dadurch in eine Endlosschleife.



  • Oh vielen Dank. Ihr hattet alle Recht.
    Das ich den Wert Deiner Antwort (@ bbbbb) nicht erkannt habe tut mir leid. Anfängerfehler.
    Hauptsache es funktioniert jetzt und ich kann weiter an meinem Programm arbeiten.

    Nochmals vielen lieben Dank!



  • Eine Sache hätte ich noch. Wie kann ich in diesem Array, Zeilenabstand einstellen, also es ein wenig formatieren?

    Vielen Dank für eventuelle Antworten.

    Grüße redXtream



  • Zeilenabstand bekommst du nur mit Leerzeilen hin. Also Ausgabe von '\n'.
    Beim Zeichenabstand kannst du Leerzeichen einfügen. Da musst du dir mal die Beschreibung von printf genauer ansehen (die width- und precision-Angaben).


Anmelden zum Antworten