Wurzelproblem



  • Hallo alle zusammen,

    ich soll ein Programm schreiben und zum lösen für das Gesamtproblem möchte ich die Funktion sqrt() verwenden.
    Diese ist mir aber ein Rätsel..

    Hier ist mein Problem:

    int Anzahl= 25;
    int Wurzel = sqrt(Anzahl);
    int Wurzeltest = Wurzel%1;
    

    Hier kommt diese Fehlermeldung:
    /home/student/workspace/Beispiel/Debug/../src/Beispiel.c:18: undefined reference to `sqrt'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [Beispiel] Fehler 1

    Wenn ich aber anstatt eine Variable direkt eine Zahl in sqrt() reinschreibe, funktioniert alles einwandfrei..

    int Wurzel = sqrt(25);
    int Wurzeltest = Wurzel%1;
    

    Zu meiner Aufgabenstellung:
    Ich soll als Teilaufgabe überprüfen, ob man aus einem vorgefertigten String ein quadratisches Labyrinth bauen kann.
    Deshalb muss aus der Gesamtanzahl der Zeichen die Wurzel den Rest 0 haben.
    Sodass ich z.B. 25 Zeichen habe, die Wurzel daraus wäre 5 und somit kann ich 5 Reihen mit jeweils 5 Zeichen als Labyrinth aufbauen.

    Kann mir wer vllt. sagen, wie ich das mit der Wurzel hinbekomme?
    Ich muss unter Eclipse C programmieren.

    Gruß StudentohnePlan



  • Der Rest der Wurzel muss ungleich 0 sein, sorry.


  • Mod

    Du musst die Mathebibliothek mitlinken.

    Dass es mit der Konstante 25 klappt, mit einer Variablen aber nicht, das kommt davon, dass dein Compiler so schlau ist, sqrt(25) direkt zur Compilezeit zu berechnen. Da braucht es dann die Wurzelfunktion aus der Mathebibliothek nicht.

    P.S.: Was soll denn int Wurzeltest = Wurzel%1; deiner Meinung nach machen?



  • Ich habe math.h eingebunden:
    #include <math.h>

    Ja das war nicht ganz durchdacht, int Wurzeltest = Wurzel%1; soll überprüfen, ob der j wirklich quadratisch ist.
    Das heißt ich will das Wurzel%1=0 ist, aber dafür muss Wurzel vom Typ double sein sonst wirds immer 0.
    Jetzt hab ich fmod() gefunden, was den Modulo auf Double Datentypen anwenden kann.
    Nur leider spielt sqrt() nicht mit.


  • Mod

    StudentohnePlan schrieb:

    Ich habe math.h eingebunden:
    #include <math.h>

    Das ist der Header in dem steht, wie die Funktionen in der Mathebibliothek aussehen. Das braucht der Compiler, um zu prüfen, ob die Aufrufe alle korrekt sind. Es ist nicht die Mathebibliothek selbst (also nicht der Code der Funktionen). Das Programm wird nämlich erst vom Linker zusammengesetzt, wenn der Compiler längst fertig ist. Der braucht dann tatsächlich den Maschinencode für die Mathebibliothek, damit er die Funktionen einsetzen kann.

    Ich weiß nicht, wie es genau in Eclipse geht, aber es gibt bestimmt irgendwelche Linkeroptionen. Da bindest du die Mathebibliothek ein (die heißt einfach "m"). Am Ende sollte im Linkeraufruf dann die Option "-lm" stehen (das "-l" fügt deine IDE wahrscheinlich automatisch ein). Vielleicht gibt's auch schon eine fertige Klickibuntianklickoption für die Mathebibliothek, weil man sie so häufig braucht.

    Allgemein solltest du dich mal kundig machen, wie der Übersetzungsvorgang läuft, wozu Header da sind und wie das mit Bibliotheken geht. Das wirst du noch häufig brauchen.

    Jetzt hab ich fmod() gefunden, was den Modulo auf Double Datentypen anwenden kann.

    Schon besser. Dir ist klar, dass das Ergebnis von dem, was du vorher hattest, immer 0 ist?



  • Jap das ist mir klar geworden, habs bemerkt als ich auf absenden geklickt hab..

    Ok, danke schonmal.
    Ich werd mal schaun wie ich den Linkeraufruf tätigen kann.


Log in to reply