C-Hilfe



  • also wirklich...weiss dembezüglich garnicht weiter...wie muss es denn korrekt aussehen?



  • Du weisst dass wenn Du #define x_achse 26 machst jedes Vorkommen des Wortes "x_achse" durch die Zahl "26" ersetzt wird bevor der wirkliche Compiler das Programm bekommt? Sowas nennt man Präprozessor... In der Zeile steht also wenn der Präprozessor durch ist und der Compiler anfängt folgendes:

    void array_leeren(int koordinaten_array[][22], int 76){
    

    Was definitiv wenig Sinn macht. Nunja, wie löst man das Dilemma wenn man zwei "Dings" hat die sich beissen weil Sie den gleichen Namen haben? Benenne ein beliebiges "Dings" in "Bums" um 😃



  • und wie löse ich das problem? ich versuche es schon die ganze zeit...BITTE



  • Tses... Wenn zwei "Dings" sich beissen, benenne ein "Dings" in ein "Bums" um.

    Analogie: Wenn zwei "x_achse" sich beissen, benenne eins davon in "x_achse2" um.

    Wobei ich mich frage wieso Du "x_achse" noch an die Funktion array_leeren übergibst wenn "x_achse" doch sowieso bekannt ist und programmweit den Wert "76" hat? Ich glaube Du solltest den Parameter "int x_achse" für array_leeren ganz weglassen 🙂



  • kann dir keinen meter folgen...ich weiss das du es um einiges besser kannst als ich....bitte habe auch verständnis dafür...ich WILL lernen...aber nicht verspottet werden.
    ich habe doch nur einmal x_achse als define und kein anderes mal definiert...wie sollen die sich dann beissen?
    wenn du sdo gütig wärst und es mir zeigen könntest bitte..wo der fehler wirklihc ist...und wie ich ihn ausmerzen kann? BITTE...muss es nachher per email abgeben...DANKEEEE



  • ursprünglich wollte ich den array in die MAIN setzen...da ich dann merkte das dann nur noch fehler resultieren...habe ich mir gesagt das es GOLBAL einfacher ist...und deswegen den weg gewählt...habe NUN...

    das hier gemacht:

    void array_leeren(void)
    


  • Klar Array global geht auch... Aber nochmal zum Verständnis, wo sich x_achsen beissen

    #define x_achse 76
    
    void array_leeren(int koordinaten_array[][y_achse], int x_achse){
    

    In der ersten Zeile definierst Du "x_achse ist 76". In der zweiten Zeile erzeugst Du einen Parameter vom Typ int, dessen Name "76" ist (da ja zuvor definiert wurde dass "x_achse ist 76"). Da der Name einer Variablen in C mit einem Buchstaben oder Unterstrich beginnen muss -> Fehlermeldung.



  • ach also hääte ich einfach nur den
    den letzeren teil umbennen sollen? also: in x_achse...VERSTEHE...danke

    void array_leeren(int koordinaten_array[][y_achse], int x_achse){
    


  • dank diesem forum bin ich FAST fertig....habe nur Glaube ein letztes problem:

    ich bekomme das koordintankreuz nach der eingabeaufforderung ausgegeben...jedoch werden die Funktionen nicht gesetzt....wie mache ich das....????

    zeige mal meinen code:

    void eingabe_berechnung(void){                                                  /*Hier wird die Eingabe+Berechnung vorgenommen*/
    
         double a,b,c,d =0;
         double koeff_zahl[4];                                                      /*1 Dimm Array deklariert*/
    
         int funk=0,funk1=0,funk2=0;
         int x=0;
    
         printf("Koeffizienten fuer x^3 eingeben: ");                               /*Eingabeaufforderung der Koeffizienten*/
         scanf("%lf", &koeff_zahl[0]); 
         printf("Koeffizienten fuer x^2 eingeben: ");
         scanf("%lf", &koeff_zahl[1]); 
         printf("Koeffizienten fuer x^1 eingeben: ");
         scanf("%lf", &koeff_zahl[2]); 
         printf("Koeffizienten fuer x^0 eingeben: ");
         scanf("%lf", &koeff_zahl[3]); 
    
         a=koeff_zahl[3]; 
         b=koeff_zahl[2]; 
         c=koeff_zahl[1]; 
         d=koeff_zahl[0];
    
         for (x;x<y_achse;x++){                                                     /*Hier ist die Berechnung von den Formeln*/
             funk=(a*x*x*x+b*x*x+c*x+d)+0.5;                                        /*f(x)*/
             funk1=((3*a)*(x*x)+(2*b)*(x)+c)+0.5;                                   /*f(x)'*/
             funk2=((6*a)*x+(2*b))+0.5;                                             /*f(x)''*/
    
             if ((funk >= 0) && (funk<x_achse)){                                    /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk][x]='*';
             }
             if ((funk >= 0) && (funk1<x_achse)){                                   /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk1][x]='+';
             }
             if ((funk >= 0) && (funk2<x_achse)){                                   /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk2][x]='#';
             }
         }
    }
    


  • Wenn du das Array mit den eingetragenen Funktionen ausgegeben haben willst, dann nach der Berechnung:

    array_leeren();
    array_ausgeben();//->leeres Koordinatensystem
    eingabe_berechnung();
    array_ausgeben();//->Koordinatensystem mit Funktionsgraphen
    

    PS1: Das Array koeff kannst du übrigens ganz weglassen:

    double a,b,c,d;
    printf("Koeffizienten fuer x^3 eingeben: ");                               /*Eingabeaufforderung der Koeffizienten*/
    scanf("%lf", &a); 
    printf("Koeffizienten fuer x^2 eingeben: ");
    scanf("%lf", &b); 
    printf("Koeffizienten fuer x^1 eingeben: ");
    scanf("%lf", &c); 
    printf("Koeffizienten fuer x^0 eingeben: ");
    scanf("%lf", &d);
    

    PS2: Wenn ihr zwei verschiedene Personen seid, warum sehen sich dann eure Code-Fragmente so ähnlich?



  • also muss ich eine eigene funktion dafür schreiben oder wie sehe ich das?

    oder einfach meinen CODE abändern oder wie meinst du das?

    double a,b,c,d;
    printf("Koeffizienten fuer x^3 eingeben: ");                               /*Eingabeaufforderung der Koeffizienten*/
    scanf("%lf", &a);
    printf("Koeffizienten fuer x^2 eingeben: ");
    scanf("%lf", &b);
    printf("Koeffizienten fuer x^1 eingeben: ");
    scanf("%lf", &c);
    printf("Koeffizienten fuer x^0 eingeben: ");
    scanf("%lf", &d);
    

    Ps...... wir haben uns gegenseiig geholfen....zudem ist doch sicher so das unter 100 schülern mehrere stark ähnliche teile vorkommen können, denn es gibt denke ich mal auf dem lvl nicht so viele wege....!er ist fertig warum SITZE ich noch hier?
    DANKE



  • corvettev1 schrieb:

    also muss ich eine eigene funktion dafür schreiben oder wie sehe ich das?

    Kannst du machen - ich dachte aber du hättest schon eine Funktion zum Ausgeben.

    oder einfach meinen CODE abändern oder wie meinst du das?

    vermutlich 😉



  • corvettev1 schrieb:

    er ist fertig warum SITZE ich noch hier?

    Weil du nicht im geringsten verstehst, was du da tust.

    Übrigens hast du noch ein Problem mit deinen if-Anweisungen. Bei der Prüfung der unteren Grenze für funk1 und funk2 prüfst du den Wert von funk.
    Außerdem glaube ich, dass du mindestens einmal x und y vertauschst. Üblicherweise ist x der erste Index. Bei dir ist es andersrum. Wenn du das zweimal vertausch hast - also bei der Ausgabe auch - hebt sich das natürlich wieder auf.

    Liegen die Werte überhaupt in einem Bereich, der angezeigt werden kann?



  • das problem dabei ist....würde ja gerne es machen das ich das 1 DIM array weglasse....nur muss diese funktion in ein struct bauen...was mir nicht gelingt...habe mir angesehen...was in einem andere tread darüber steht aber auf mein Programm bezogen ist es denke ich anders.

    void eingabe_berechnung (void){                                                  /*Hier wird die Eingabe+Berechnung vorgenommen*/
    
         double a,b,c,d =0;
         double koeff_zahl[4];                                                      /*1 Dimm Array deklariert*/
    
         int funk=0,funk1=0,funk2=0;
         int x=0;
    
         printf("Koeffizienten fuer x^3 eingeben: ");                               /*Eingabeaufforderung der Koeffizienten*/
         scanf("%lf", koeff_zahl[0]); 
         printf("Koeffizienten fuer x^2 eingeben: ");
         scanf("%lf", &koeff_zahl[1]); 
         printf("Koeffizienten fuer x^1 eingeben: ");
         scanf("%lf", &koeff_zahl[2]); 
         printf("Koeffizienten fuer x^0 eingeben: ");
         scanf("%lf", &koeff_zahl[3]); 
    
         a=koeff_zahl[3]; 
         b=koeff_zahl[2]; 
         c=koeff_zahl[1]; 
         d=koeff_zahl[0];
    
         for (x;x<y_achse;x++){                                                     /*Hier ist die Berechnung von den Formeln*/
             funk=(a*x*x*x+b*x*x+c*x+d)+0.5;                                        /*f(x)*/
             funk1=((3*a)*(x*x)+(2*b)*(x)+c)+0.5;                                   /*f(x)'*/
             funk2=((6*a)*x+(2*b))+0.5;                                             /*f(x)''*/
    
             if ((funk >= 0) && (funk<x_achse)){                                    /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk][x]='*';
             }
             if ((funk >= 0) && (funk1<x_achse)){                                   /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk1][x]='+';
             }
             if ((funk >= 0) && (funk2<x_achse)){                                   /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk2][x]='#';
             }
         }
    }
    

    typdef struct{
    double koeff[4];
    }POLYNOM

    deswegen wollte ich den 1 DIM beibehalten....



  • Was denn nun? Struct oder Array?

    Wenn du wirklich ein Struct verwenden willst, kannst du das lokale Array und auch die Variablen weglassen und direkt damit rechnen:

    POLYNOM pol;
    /*Eingabeaufforderung der Koeffizienten*/
    for(int i=0;i<4;++i)
    {
      printf("Koeffizienten fuer x^%d eingeben: ");
      scanf("%lf", &(pol.koeff[i])); 
    }
    
    //...
    //Berechnung:
    func = pol.koeff[3]*x*x*x + pol.koeff[2]*x*x + pol.koeff[1]*x + pol.koeff[0];
    

    Und dann könntest du deine Riesen-Funktionen sogar noch weiter zerlegen und diese POLYNOM-Struktur jeweils als Parameter zwischen Eingabe und Berechnung durchreichen.



  • wie müsste es denn aussehen wenn ich das gesamte programm behalten wollte...und es in ein trsuct packen wollte:????



  • Ich habe mir mal erlaubt, meine version darzustellen....von meinen struct...so wie ich es verstanden habe...Laut compiler falsch....wie müsste es denn richtig sein....meine structvorschläge sind in comments....komme leider nicht darauf! 😞
    zudem hängt sich das programm nun von alleine nach der ersten eingabe der ersten zahl einfach auf..und wird beendet! wie löse ich das OHNE meinen Code schwerwiegend verändern muss.
    danke

    int main(void){ 				                                                /*HauptProgramm*/   
    //int koordinaten_array[x_achse][y_achse];
    
    array_leeren();
    //POLYNOM x;
    //eingabe_berechnung(&x);
    eingabe_berechnung();                                                           
    zeichnung_y_achse();
    zeichnung_x_achse();              
    wait();
    
    return 0;                                                                       /*Zum Beenden Programms einfach ENTER*/
    }
    
    /*typedef struct{
    double koeff_zahl[4];
    } POLYNOM;*/
    
    void eingabe_berechnung (void)/*(POLYNOM *x)*/{                                 /*Hier wird die Eingabe+Berechnung vorgenommen*/
    
         double a,b,c,d =0;
         double koeff_zahl[4];                                                      /*1 Dimm Array deklariert*/
    
         int funk=0,funk1=0,funk2=0;
         int x=0;
    
         printf("Koeffizienten fuer x^3 eingeben: ");                               /*Eingabeaufforderung der Koeffizienten*/
         scanf("%lf", koeff_zahl[0]); 
         printf("Koeffizienten fuer x^2 eingeben: ");
         scanf("%lf", &koeff_zahl[1]); 
         printf("Koeffizienten fuer x^1 eingeben: ");
         scanf("%lf", &koeff_zahl[2]); 
         printf("Koeffizienten fuer x^0 eingeben: ");
         scanf("%lf", &koeff_zahl[3]); 
    
         a=koeff_zahl[3]; 
         b=koeff_zahl[2]; 
         c=koeff_zahl[1]; 
         d=koeff_zahl[0];
    
         for (x;x<y_achse;x++){                                                     /*Hier ist die Berechnung von den Formeln*/
             funk=(a*x*x*x+b*x*x+c*x+d)+0.5;                                        /*f(x)*/
             funk1=((3*a)*(x*x)+(2*b)*(x)+c)+0.5;                                   /*f(x)'*/
             funk2=((6*a)*x+(2*b))+0.5;                                             /*f(x)''*/
    
             if ((funk >= 0) && (funk<x_achse)){                                    /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk][x]='*';
             }
             if ((funk >= 0) && (funk1<x_achse)){                                   /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk1][x]='+';
             }
             if ((funk >= 0) && (funk2<x_achse)){                                   /*Zeichnen der Arrayergenisse ins Koordinatensystem*/
                koordinaten_array[funk2][x]='#';
             }
         }
    }
    


  • hallo kann mir KEINER helfen?? warum schreibt denn keiner bei mir was rein?



  • hey ich komme nach 100 maligem versuch auch nicht weiter....bitte gibt mal nen tipp....DANKE



  • Was für einen Fehler meldet denn der Compiler?
    (eventuell hilft es ja schon, wenn du die main()-Funktion etwas später [nach der struct und den verwendeten Funktionen] deklarierst)

    Ansonsten: Wenn du schon eine struct hast, nutze sie auch (sprich: dann brauchst du keine extra Variablen für deine Koeffizienten - siehe meine letzten Code-Schnipselchen).


Anmelden zum Antworten