c Funktion gibt Fehler aus



  • Hi Leute,
    Ich habe wenig Schimmer von Informatik, da es nun aber ein Modul ist werde ich in Zukunft evtl. des öfteren hier Fragen stellen. Ich hoffe mir wird geholfen 😃

    Aufgabe ist es, ein Programm zu entwickeln, was mir die position in x und y position eines Greifarms ausgibt. Dieser ist in gewisser höhe an einem Gelenk befestigt. Der Winkel alpha soll auf dem pad eingegeben werden. Später soll noch beta dazukommen und ein weiterer Arm an dem anderen befestigt sein. bla bla das alles dient nur zum groben verständnis.
    Nun muss mit sin und cos gerechnet werden. Da die Werte aber in Grad eingegeben werden, sollen sie dann umgewandelt werden um damit zu rechnen und dann später wieder umgerechnet werden. Dies soll aber der übersichtlichkeit halber in einer Funktion geschehen.
    Dazu sollten wir neben dem main.c eine header.h und eine source.irgendwas erstellen. In der main ist logischer Weise der hauptteil des Programms, in der header nur kurz die Prototyp-Formel 🙂 und in der anderen source die funktion an sich also die umrechnung von (vorerst) Degree zu Rad. Jetzt erstmal die Codes:

    header tab

    /*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */

    /*
    * File: main.c
    * Author: Neuer Benutzer
    *
    * Created on 12. Oktober 2017, 14:55
    */

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "Schultergelenk Funktionen Header.h"
    /*
    *
    /
    int main(int argc, char
    * argv) {
    double alpha, beta, alphade, betade; //Variablendefinition
    const int laenge1=600, laenge2=250, hoehe=100; //variablendef.
    main Tab

    alphade= DegInRad(alpha);

    printf("Geben Sie einen Wert fuer Alpha ein \n");
    scanf("%d", &alpha);
    printf(" Geben Sie einen Wert fuer Beta ein \n");
    scanf("%d", &beta);
    printf("Sehr Gut! Jetzt wird berechnet... \n Die Werte sind alle in Millimeter angegeben [mm]");

    //Berechnung der Koordinaten (x,y) des Armgelenks (armg)
    int posxarmg, posyarmg; //Koordinatendefinition
    posxarmg=laenge1*cos(alpha);
    printf(" Die x-Koordinate ist: %d \n", posxarmg)
    return (EXIT_SUCCESS); hier ist unexpected token "return" (trifft häufig auf, sollte aber kein richtiger fehler sein)
    }

    header tab

    /*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */

    /*
    * File: Schultergelenk Funktionen Header.h
    * Author: Neuer Benutzer
    *
    * Created on 13. Oktober 2017, 17:20
    */

    #ifndef SCHULTERGELENK_FUNKTIONEN_HEADER_H
    #define SCHULTERGELENK_FUNKTIONEN_HEADER_H

    #ifdef __cplusplus
    extern "C" {
    #endif

    //protottyping signatur
    double DegInRad(double);

    #ifdef __cplusplus
    }
    #endif

    #endif /* SCHULTERGELENK_FUNKTIONEN_HEADER_H */

    **
    source tab**

    /*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */

    #include "Schultergelenk Funktionen Header.h"
    #include <math.h>
    double DegInRad(double z);{ //die klammer ist wohl unexpected token (die hier "{" )
    const int pi=3.1415936;

    return z=(2*pi)/180;} //unable to resolve identifier z, unexpexted token "z", "(", "2" und alles andere in der zeile auch. Hier liegt wohl der hauptfehler. Nur Wo?!

    Ich habe die Fehler alle FETT geschrieben. manches sind wohl nur schönheitsfehler, der am Ende ist es wohl nicht. Ich hab alles mögliche versucht. liegt es daran, dass eine Funktion immer 2 Werte braucht oder was?! Ich habe jetzt die dritte Vorlesung durch und das ist das dritte Programm was ich schreibe, ich habe also keine Ahnung. Für einige sollte der Fehler direkt auffindbar sein. Ich hoffe mir kann einer von euch helfen. Der Debugger hilf leider nie und sagt immer nur built failed oder so und der Prof will das ganze die Woche präsentiert haben. Ich bedanke mich für eure Hilfe,

    mfg Lucas 🙂



  • selbstkommentar da ich wohl als gast geschreiben hab und mails auf antworten bekommen möchte


  • Mod

    Da fehlen an manchen Stellen Semikolons, an anderen sind welche zuviel. Jeweils kurz vor den Fehlermeldungen. Und für keine davon gilt "trifft häufig auf, sollte aber kein richtiger fehler sein". Das sind alles schwere Fehler und dass sie häufig auftreten, liegt da dran, dass du viele davon machst!



  • SeppJ schrieb:

    Da fehlen an manchen Stellen Semikolons, an anderen sind welche zuviel. Jeweils kurz vor den Fehlermeldungen. Und für keine davon gilt "trifft häufig auf, sollte aber kein richtiger fehler sein". Das sind alles schwere Fehler und dass sie häufig auftreten, liegt da dran, dass du viele davon machst!

    Da hattest du recht, hat nach kurzer Korrektur dann geklappt. Nun hab ich ein neues Problem:
    Ich versuche die x Position auszugeben mit einer weiteren Funktion. Unten bei PosX liegt wohl ein Fehler vor oder er erkennt laenge1 und alpharad nicht. alpharad ist das ergebnis der ersten funktion wie sie oben steht. laenge1 ist eine Konstante die in der Main mit const double bestimmt ist. Warum werden die Variablen nicht erkannt? Sie sollten doch eingebunden sein?? Als ich laenge2 neu definiert habe direkt in der source file hier hat er zumindest diese akzeptiert.
    Ich hab ein paar Sachen im Code verändert aber der Fehler sollte hier in der Source liegen. Und ich weiß es sind Grundlagen und das ganze ist für dich vermutlich kindergarten aber ich bin nunmal anfänger und habe gerade kein Buch zur hand, welches dies klären würde. Wär sehr nett, wenn du dir das nochmal ansehen könntest. Ein Semikolon ist es diesmal denke ich nicht. 😃
    Vielen Dank.

    */

    #include "Schultergelenk Funktionen Header.h"

    double DegInRad(double z){
    const int pi=3.1415936;
    return z=(z*pi)/180;
    }

    double PosX(double y){
    y=laenge1*cos(alpharad);
    return y;

    }



  • #include <math.h> ist jetzt auch in der source, ist irgendwie verloren gegangen.



  • So wie ich das sehe, ist alpharad ja keine Konstante?

    Du übergibst ein y und gibst eine Konstante laenge1 multipliziert mit einen cosinus von unbekannten Bogenmaß zurück.

    Du solltest statt y lieber alpharad der Funktion übergeben.



  • lubl4129 schrieb:

    const int pi=3.1415936;

    pi-Datentyp sollte hier double sein (Typ int hat keine Nachkommastellen).

    return z=(z*pi)/180;

    Funktioniert zwar, ist aber gefährlich! Wenn man versehentlich "==" anstatt "=" eintippt, dann wird immer nur entweder 1.0 oder 0.0 zurückgegeben, je nach dem, ob das Ergebnis gleich oder ungleich Null ist. "return (z*pi)/180;" würde hier genügen.



  • lemon03 schrieb:

    So wie ich das sehe, ist alpharad ja keine Konstante?

    Du übergibst ein y und gibst eine Konstante laenge1 multipliziert mit einen cosinus von unbekannten Bogenmaß zurück.

    Du solltest statt y lieber alpharad der Funktion übergeben.

    Danke für die Antworten, ich hab jetzt alles umgesetzt und so sieht nun die source datei aus.

    #include "Schultergelenk Funktionen Header.h"
    #include <math.h>
    const double laenge1=600, laenge2=250, hoehe=100; //variablendef.
    const double pi=3.1415936536;

    //Umrechnung Grad in Rad
    double DegInRad(double alpha){
    return (alpha*pi)/180;
    }

    //Funktion x-berechnung
    double PosX(double alpharad){
    return (cos(alpharad)*laenge1);
    }

    //Funktion y-berechnung
    double PosY(double alpharad){
    return (laenge1*sin(alpharad));
    }

    Die Main ist hier. Es werden die Winkel für alpha und beta eingetippt. Bsp. 90 Grad. Umrechnung in Rad müsste hier pi/2 ergeben für alpharad (betarad muss ich noch "programmieren"), aber leider kommt 0.0000 raus was ich durch das "Kontroll-printf" direkt nach der Berechnung herausgefunden habe. Nach der Umrechnung geht die main noch weiter aber das Ergebnis ist ja schon hier falsch... Wie ich das sehe sind die int und double eigentlich richtig verwendet aber der Fehler muss ja durch falsche formulierung entstehen?!

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "Schultergelenk Funktionen Header.h"
    /*
    *
    /
    int main(int argc, char
    * argv) {
    double alpha, beta, alpharad, betarad; //Variablendefinition

    printf("Geben Sie einen Wert fuer Alpha ein \n");
    scanf("%d", &alpha);
    fflush(stdin);
    printf("Geben Sie einen Wert fuer Beta ein \n");
    scanf("%d", &beta);
    fflush(stdin);
    printf("Sehr Gut! Jetzt wird berechnet... \nDie Werte sind alle in Millimeter angegeben [mm]\n");
    alpharad= DegInRad(alpha);

    //Berechnung der Koordinaten (x,y) des Armgelenks (armg)
    double posxarmg, posyarmg; //Koordinatendefinition
    posxarmg= PosX(alpharad);
    posyarmg= PosY(alpharad);
    printf("Die Koordinaten des Schultergelenks sind (x,y): (%f, %f)\n", posxarmg, posyarmg);
    return (EXIT_SUCCESS);
    }

    printf("%f \n", alpharad);

    danke für jede Hilfe



  • Achte auch unbedingt auf die Warnungen vom Compiler.
    Wenn du keine bekommst, dann aktiviere sie.

    Behandele Warnungen wie Fehler. Der Compiler hat schon seine Gründe dafür.

    Die Warnung sollte ungefähr so lauten:
    "scanf erwartet bei %d einen *int, du hast aber einen *double übergeben"

    Daher ist es auch mal gaz gut, direkt nach der Eingabe eine Ausgabe zu machen.

    Und benutze bitte die Code-Tags. COde mit de Maus markieren und auf den C-Button unter dem 😡 klicken.

    Etwas über scanf: http://www.cplusplus.com/reference/cstdio/scanf/



  • DirkB schrieb:

    Achte auch unbedingt auf die Warnungen vom Compiler.
    Wenn du keine bekommst, dann aktiviere sie.

    Behandele Warnungen wie Fehler. Der Compiler hat schon seine Gründe dafür.

    Die Warnung sollte ungefähr so lauten:
    "scanf erwartet bei %d einen *int, du hast aber einen *double übergeben"

    Daher ist es auch mal gaz gut, direkt nach der Eingabe eine Ausgabe zu machen.

    Und benutze bitte die Code-Tags. COde mit de Maus markieren und auf den C-Button unter dem 😡 klicken.

    Etwas über scanf: http://www.cplusplus.com/reference/cstdio/scanf/

    Danke für die antwort, ich werde es gleich mal versuchen. Ich nutze netbeans und ich bekomme wenn dann fehler wie unexpected token oder so aber nie konkrete fehlermeldungen wie du sie beschreibst. Im Moment wird mir kein einziger Fehler angezeigt. Muss ich mir Plugins installieren oder kannst du mir sagen wo ich diese Funktion aktivieren kann? Ich finde keine option dafür. C11 ist der Compiler oder die Compilerversion



  • NetBeans ist eine integrierte Entwicklungsumgebung.
    Der C-Compiler wird wohl der GNU-C-Compiler gcc sein (wird zumindest mitgeliefert).
    Bei dem lautet die Option für alle Warnungen -Wall .
    Wo diese bei Netbeans eingegeben wird, kann ich die nicht sagen.

    Du kannst aber mal die Google (Bilder-)Suche mit "netbeans gcc options" bemühen.

    C11 wird eher der unterstützte C-Standard sein.

    In C ist nicht sehr viel verboten, aber es ist eben auch nicht alles sinnvoll.
    Daher gibt es nicht unbedingt Fehler, sondern "nur" Warnungen. Die kommen aber nicht grundlos.


Log in to reply