Polynom erzeugen, Koeffizienten einlesen und danach ausgeben;



  • Tag zusammen.
    Meine Aufgabe ist ja im Titel schon vorhanden.
    Erst mal mein bisheriger Code dazu:

    # include<stdio.h>
    # include<stdlib.h>
    
    struct polynom {
    unsigned grad;
    double *koeff;
    };
    
    void erzeugepoly(struct polynom p) {
    int i;
    printf("Geben Sie den Grad des Polynoms ein: ");
    scanf("%i", &p.grad);
    p.koeff=malloc((p.grad+1)*sizeof(double));
    }
    
    void koeffeingabe(struct polynom p) {
    int i;
    for (i=0; i<=p.grad; i++) {
    	printf("Geben Sie den %iten Koeffizienten ein: " , i);
    	scanf("%lf", &p.koeff[i]);
    	}
    
    }
    
    void polyausgabe(struct polynom p) {
    int i;
    for (i=p.grad; i>0; i--) {
    	printf("% +lf^%i" , p.koeff[i] , i);
    	}
    printf("% +lf" , p.koeff[0]);
    }
    
    int main () {
    struct polynom p1;
    struct polynom p2;
    
    erzeugepoly(p1);
    koeffeingabe(p1);
    polyausgabe(p1);
    erzeugepoly(p2);
    koeffeingabe(p2);
    polyausgabe(p2);
    
    return 0;
    
    }
    

    Nach der Eingabe des ersten Polynoms stürzt das Programm immer ab. Compiliert wird jedoch ohne Probleme.
    Ich persönlich hatte als erstes den Gedanken, dass bei meinen Funktionen die Rückgabewerte nicht so in Ordnung sind...
    Oder muss ich in erzeugepoly schon die Koeffizienten mit einlesen?
    Habe grad keine Idee wo es hängt...
    Kann mir jemand sagen wo der Fehler liegt? Wäre echt super 🙂



  • In void erzeugepoly(struct polynom p) das int i weg. Ist überflüssig.
    Lass dir mal in polyausgabe die Werte für i in der for-Schleife anzeigen.


  • Mod

    Guck dir mal die Bedeutung von call by reference und call by value an.



  • m0pf schrieb:

    Nach der Eingabe des ersten Polynoms stürzt das Programm immer ab. Compiliert wird jedoch ohne Probleme.
    Ich persönlich hatte als erstes den Gedanken, dass bei meinen Funktionen die Rückgabewerte nicht so in Ordnung sind...
    Oder muss ich in erzeugepoly schon die Koeffizienten mit einlesen?
    Habe grad keine Idee wo es hängt...
    Kann mir jemand sagen wo der Fehler liegt? Wäre echt super 🙂

    Du kannst nicht p1 aus einem call by value holen. Da wird nur eine momentane Kopie von p1 reingereicht. Geht nur, wenn Du eine Referenz auf p1 reinreichst und das Argument von erzeugepoly auf einen Pointer auf Struct umstellst.
    Und wie ich das weiter so sehe, solltest Du das Kapitel malloc&Co noch mal ganz intensiv durcharbeiten.

    Als erster Denkanstoß sollte das mal reichen ... 🙂



  • Wenn du das als Parameter übergebene Argument ändern willst, musst du es als Zeiger übergeben und dann innerhalb der Funktion auch so verwenden:

    void erzeugepoly(struct polynom *p) {
    int i;
    printf("Geben Sie den Grad des Polynoms ein: ");
    scanf("%i", &p->grad);
    p->koeff=malloc((p->grad+1)*sizeof(double));
    }
    
    void koeffeingabe(struct polynom *p) {
    int i;
    for (i=0; i<=p->grad; i++) {
        printf("Geben Sie den %iten Koeffizienten ein: " , i);
        scanf("%lf", &p->koeff[i]);
        }
    
    }
    
    void polyausgabe(struct polynom p) {
    int i;
    for (i=p.grad; i>0; i--) {
        printf("%f^%i" , p.koeff[i] , i);
        }
    printf("%f" , p.koeff[0]);
    }
    
    int main () {
    struct polynom p1;
    struct polynom p2;
    
    erzeugepoly(&p1);
    koeffeingabe(&p1);
    polyausgabe(p1);
    erzeugepoly(&p2);
    koeffeingabe(&p2);
    polyausgabe(p2);
    
    return 0;
    
    }
    

Anmelden zum Antworten