Berechnung der Nullstellen einer quadratischen Gleichung



  • Hallo,
    habe folgende aufgabe bekommen:

    Gegeben sei die quadratische Gleichung der Form a ⋅x 2 +b ⋅x +c = 0 .
    Es sollen beliebige Werte a,b,c∈ℜ zugelassen sein. Entwickeln Sie einen
    Algorithmus, der für jede beliebige Wertekombination von a, b, c
    a) die Ergebniskategorie (Wie viele/welche Kategorien existieren?) sowie
    b) bei Existenz die korrekte(n) Lösung(en) für x
    ermittelt. Kategorie und eventuelle Lösungen sind anschließend auszugeben.
    Aufgrund der begrenzten Darstellungsgenauigkeit in realen Rechnern sind nicht
    nur Fälle mit genau einem Wert von Null kritisch, sondern auch Werte in
    unmittelbarer Nähe von 0. Testen Sie daher bitte den Fall Null mittels a < ε ab,
    wobei ε vom Rechner und der gewünschten Genauigkeit abhängt. Ein praktisch
    meist sinnvoller Wert ist ε = 10−7 . Die anderen Fälle (für die Variablen b und ,
    Diskriminante, etc.) implementieren sie bitte analog

    Mein Program sieht dazu wiefolgt aus:

    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    
    main()		{
    
    	float a = 0, b = 0, c = 0;
    	float q = 0, p = 0;
    	float x1 = 0, x2 = 0;
    	float Wurzel = 0;
    	printf("Geben sie die werte a, b und c für folgende allgemeine quatratische Gleichung zur Berechnung der Nullstellen an:\n\
    		   ax² + bx + c = 0\n\n"); 
    	printf("a?\n\n");
    	scanf("f.2%",&a);
    	fflush(stdin);
    	printf("b?\n\n");
    	scanf("f%",&b);
    	fflush(stdin);
    	printf("c?\n\n");
    	scanf("f%",&c);
    	if(a != 0)	{
    	p = b/a;
    	q = c/a;
    	Wurzel = ((p * p)/4)-q);
    		if(Wurzel >= 0)
    		{
    			x1 = (-(p)/2) + sqrt(((p*p)/4)-q);
    			x2 = (-(p)/2) - sqrt(((p*p)/4)-q);
    			printf("Es sind Nulstellen bei x1: f.2% und x2: f.2% vorhanden.", x1, x2);
    			getch();
    		}else{
    			printf("Es sind keine Nullstellen für die angegebenen Werte vorhanden");
    			getch();
    
    		}
    	}else
    	{
    printf("Die angegebenen Werte entsprechen keiner quadratischen Funktion da a = 0");
    getch();
    	};
    
    }
    

    Mein Problem hierbei ist, dass es für alle beliebigen Werte

    printf("Es sind keine Nullstellen für die angegebenen Werte vorhanden");
    

    angibt.
    Habe die if bedingung auch schon auf z.B 1=1 geändert und trotzdem wurde immer nur die else-ausgabe angezeigt.
    Würde mich sehr freuen wenn mich jmd auf den fehler bzw meinen Denkfehler aufmerksam machen könnte^^

    schon mal danke für alle Antworten.



  • Deine Formatangaben bei scanf sind völlig falsch, meistens falsch rum.



  • Sag mal... was hast du eigentlich für einen bösen Compiler?

    $ gcc main.c
    main.c:2:19: error: conio.h: No such file or directory
    main.c: In Funktion »main«:
    main.c:16: Warnung: störendes letztes »%« im Format
    main.c:19: Warnung: störendes letztes »%« im Format
    main.c:22: Warnung: störendes letztes »%« im Format
    main.c:26: Fehler: expected »;« before »)« token
    main.c:26: Fehler: expected statement before »)« token
    main.c:31: Warnung: » «-Kennzeichen verwendet mit Format »%u« printf
    main.c:31: Warnung: format »% u« erwartet Typ »unsigned int«, aber Argument 2 hat Typ »double«
    main.c:31: Warnung: unbekanntes Konvertierungstyp-Zeichen »v« im Format
    

    Im Ernst wird dir niemand abnehmen, dass das Ding fehlerfrei übersetzt werden kann, solange Syntax-Fehler wie die Klammerung in Zeile 26 darin stecken.



  • Es muss überall scanf ("%f", &blabla); heißen. Guckst du hier: http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

    Und Zeile 31 muss lauten:

    printf("Es sind Nulstellen bei x1: %.2f und x2: %.2f vorhanden.", x1, x2);
    


  • µngbd schrieb:

    Sag mal... was hast du eigentlich für einen bösen Compiler?

    $ gcc main.c
    main.c:2:19: error: conio.h: No such file or directory
    main.c: In Funktion »main«:
    main.c:16: Warnung: störendes letztes »%« im Format
    main.c:19: Warnung: störendes letztes »%« im Format
    main.c:22: Warnung: störendes letztes »%« im Format
    main.c:26: Fehler: expected »;« before »)« token
    main.c:26: Fehler: expected statement before »)« token
    main.c:31: Warnung: » «-Kennzeichen verwendet mit Format »%u« printf
    main.c:31: Warnung: format »% u« erwartet Typ »unsigned int«, aber Argument 2 hat Typ »double«
    main.c:31: Warnung: unbekanntes Konvertierungstyp-Zeichen »v« im Format
    

    und was hast du für einen schrägen compiler, der fehlermeldungen teils in deutsch, teils in englisch ausgibt?
    🙂



  • und was hast du für einen schrägen compiler, der fehlermeldungen teils in deutsch, teils in englisch ausgibt?
    🙂

    Wirklich schräg. Aber wie schräg bin erst ich, dass mir das gar nicht mehr auffällt?



  • Es handelt sich doch nicht etwa bei der obigen Aufgabe um Praktikum Nr. 4 (Pflicht-)Teilaufgabe 3? 😃



  • ok danke für hilfestellungen^^

    buhkeks schrieb:

    Es handelt sich doch nicht etwa bei der obigen Aufgabe um Praktikum Nr. 4 (Pflicht-)Teilaufgabe 3? 😃

    zufälligerweise ja^^


Log in to reply