blutiger Anfänger kommt nicht klar =P



  • Hi zusammen.

    Wie aus der Überschrift leicht zu erkennen, bin ich gerade erst angefangen mit C zu programmieren.

    Zu meinem Problem:
    Mein eigentliches Ziel ist es mit C die Resonanzfrequenz in einem Schwingkreis auszurechnen.
    Klappt natürlich nicht :p

    Mein erster Versuch sieht so aus:

    #include<stdio.h>
    #include<math.h>
    void main()
    {
    	int a,b,c;				//Rechenhilfen
    	int L,C;				//"echte" Variablen
    	float f;
    	L=a/1000;				// für L in mH
    	C=b/1000000;			        // für C in mykroF
    	f=c/1000;				// für f in kHz
    
    	printf("RESONANZFREQUENZ\nBitte geben Sie den Wert der Spule in mH ein:\n");
    	fflush(stdin);
    	scanf("%d",&a);
    	printf("Bitte geben Sie den Wert des Kondesators in yF ein:\n");
    	fflush(stdin);
    	scanf("%d",&b);
    	f=1/(2*M_PI*sqr(L*C));
    	printf("Die Resonanzfrequenz f ist gleich %5.1lf kHz",f);
    
    }
    

    Mein Problem ist zunächst dass ich mir nicht sicher bin welchen Datentyp ich verwenden muss und wie ich Pi und die Wurzel richtig einbinde.

    Ich habe mir schon einige Skripte und Themen in Foren durchgelesen, allerdings versteh ich meistens nur Bahnhof 😃

    Für die Wurzel habe ich mal etwas nur zum testen geschrieben:

    #include<stdio.h>
    #include<math.h>
    void main()
    {
    	double a;
    	double b;
    	fflush(stdin);
    	scanf("%f",&a);
    	b=sqrt(a);
    	printf("%d\n\n",b);
    
    }
    

    Habe schon alles mögliche Versucht, komme aber einfach nicht dahinter warum da immer 0 oder Quatsch rauskommt. 😕

    Vielleicht kann mir von euch jemand sagen was ich falsch mache?!

    Schon mal vielen Dank im Voraus 🙂

    schönen Gruß



  • printf("%d\n\n",b);
    Du willst ein double (b) ausgeben, der Platzhalter %d steht aber für einen Integer.


  • Mod

    Belli schrieb:

    printf("%d\n\n",b);
    Du willst ein double (b) ausgeben, der Platzhalter %d steht aber für einen Integer.

    Genauer für "decimal", damit kann man sich besser merken, wofür das 'd' steht. Ist aber das gleiche wie "%i" für integer.



  • Hast du schon mal daran gedacht, deine Eingaben auch zur Probe mal auszugeben.
    %f bei scanf ist für float. Für double brauchst du %lf.
    ⚠ das gilt nur für scanf.

    Bei printf ist der Formatspecifier für float und für double %f.
    (die meisten machen ja aus Unwissenheit %lf für double, aber %lf für float sieht man echt selten).

    Deine Zeilen 8-10 haben keinen Effekt, da die Variablen an der Stelle noch keinen gültigen Wert haben.
    Das Programm wird der Reihe nach abgearbeitet.
    Das L=a/1000; ist eine Zuweisung, die einmal durchgeführt wird.
    Das ist keine irgendwie geartete Definition für L.
    Wenn du a danach änderst, ändert sich nichts an L.



  • Wow super das ging ja fix 🙂

    printf("%d\n\n",b);
    Du willst ein double (b) ausgeben, der Platzhalter %d steht aber für einen Integer.

    OK das habe ich soweit verstanden. setze ich an der Stelle aber ein %f (wenn ich das richtig verstanden habe eine Gleitkommazahl)

    kommt in der Ausgabe, wenn ich zB "16", eintippe nur:

    -1.#IND00

    Was wäre das Richtige?



  • Ahhhh Dirk hats schon gelöst 😃

    Danke, das Wurzel Programm funzt schonmal 👍

    Ich versuche mal es ins eigentliche Programm umzusetzen.

    Nochmal Danke Ihr seid echt fix 👍 👍



  • Uuuuund da bin ich schon wieder 😃

    Soweit so gut. Jetzt hab ich nur noch das Problem dass ich mein Pi nicht reinbekomme.

    Ich versuche es zur Zeit mit M_PI, allerdings klappt das nicht so richtig.
    Als Fehler bekomme ich dann :
    error C2065:'M_PI': nichtdeklarierter Bezeichner
    IntelliSense: Der Bezeichner""M_PI"" ist nicht definiert.

    Klar ich könnte mir das über #define selbst basteln, aber wenn ich schon <math.h> benutze kann ich doch auch ein fertiges Pi benutzen oder?

    Ich habe schon gelesen das es da wohl Unterschiede gibt womit man programmiert.
    Ich nutze Visual Studio 2010.

    nochmal der code

    #include<stdio.h>
    #include<math.h>
    void main()
    {
    	double a,b,c;				//Rechenhilfen
    	double L,C;				//"echte" Variablen
    	double f;
    
    	printf("RESONANZFREQUENZ\nBitte geben Sie den Wert der Spule in mH ein:\n");
    	fflush(stdin);
    	scanf("%lf",&a);
    	printf("Bitte geben Sie den Wert des Kondesators in yF ein:\n");
    	fflush(stdin);
    	scanf("%lf",&b);
    	L=a/1000;				// für L in mH
    	C=b/1000000;			// für C in mykroF
    	c=1/(2*M_PI*sqrt(L*C));
    	f=c/1000;				// für f in kHz
    	printf("Die Resonanzfrequenz f ist gleich %5.1f kHz",f);
    
    }
    


  • Für VS bietet sich die MSDN als Hilfe an.
    Wenn du bei google nach "MSDN M_PI" suchst findest du die Seite http://msdn.microsoft.com/en-us/library/4hwaceh6%28v=vs.100%29.aspx
    und da steht

    msdn schrieb:

    Math Constants are not defined in Standard C/C++. To use them, you must first define _USE_MATH_DEFINES and then include cmath or math.h.

    Das sieht dann so aus:

    #define _USE_MATH_DEFINES 
    #include <math.h>
    


  • Aber wenn wir schon beim Standard sind:
    Wegen void main(): http://www.c-plusplus.net/forum/viewtopic.php?t=39346
    und
    fflush(stdin): http://www.c-plusplus.net/forum/viewtopic.php?t=39349



  • Ah OK.
    Ich dachte mit dem include <math.h> wäre es getan.

    Hab es jetzt reingeschrieben und siehe da: funktioniert perfekt 🙂

    Zu den anderen beiden Sachen kann ich nicht viel sagen.
    Das ist gerade erst meine 4. Aufgabe seit "Hallo Welt" 😃
    Denke mal dass sowas in nächster Zeit dazu kommen wird. Daher nice to know 😉

    Nochmal Danke für die super Hilfe 👍


Anmelden zum Antworten