[C] pierwiastkowanie

lovenprajs
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 12 lis 2012, o 18:10
Płeć: Mężczyzna
Lokalizacja: Kraków

[C] pierwiastkowanie

Post autor: lovenprajs »

Witam, mam mały problem. Piszę właśnie kalkulator obliczający m.in deltę i pierwiastki funkcji kwadratowej i napotkałem się na taki problem.
Fragment kodu:

Kod: Zaznacz cały

delta = (b*b)-4*a*c ;
printf("Delta tej funkcji kwadratowej wynosi %f
", delta) ;
pierwiastek = sqrt(delta) ;
printf("Pierwiastek z delty tej funkcji kwadratowej wynosi %f", pierwiastek) ;
Oczywiście wszystkie zmienne są zadeklarowane, chodzi o to że jak chcę skompilować i uruchomić program wyskakuje, że "sqrt was not declared in this scope", a jak może być zadeklarowane skoro jest to funkcja pierwiastkowania w C. Kombinuje kombinuje i nie mogę nic wymyślić, czemu to tak nie działa Byłbym wdzięczny za jakiekolwiek wskazówki, pozdrawiam
PabloRal
Użytkownik
Użytkownik
Posty: 34
Rejestracja: 30 wrz 2012, o 13:52
Płeć: Mężczyzna
Lokalizacja: Legnica
Podziękował: 1 raz
Pomógł: 4 razy

[C] pierwiastkowanie

Post autor: PabloRal »

Z tego co wiem, musisz dodać bibliotekę math.h To znaczy dodaj tam gdzie deklarujesz biblioteki:

Kod: Zaznacz cały

#include <math.h>
lovenprajs
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 12 lis 2012, o 18:10
Płeć: Mężczyzna
Lokalizacja: Kraków

[C] pierwiastkowanie

Post autor: lovenprajs »

oczywiście że działa, niezły głąb ze mnie Bardzo dziękuję przyjacielu -- 11 sty 2013, o 20:06 --A jednak jeszcze większy głąb ze mnie (przepraszam za double-posta) bo po zadeklarowaniu program się uruchamiał więc przyjąłem że wszystko jest okej, jednak pierwiastka nadal mi nie wyciąga. Nie ważne jaka liczba, zawsze pierwiastek jest równy 0. Czy wie ktoś może o co chodzi? Poniżej wklejam fragment kodu:

Kod: Zaznacz cały

#include<stdio.h>
#include<math.h>

int wybor;
float a, b, c, delta, pierwiastek, x, x1, x2;

int main(void)
{
printf("Wybierz opcje:
1-Funkcja kwadratowa
2-Dzialania z dwoma operandami
") ;
scanf("%d", &wybor) ;

if(wybor==1)

printf("Podaj a: ") ;
scanf("%f", &a) ;
printf("Podaj b: ") ;
scanf("%f", &b) ;
printf("Podaj c: ") ;
scanf("%f", &c) ;

x=-b/(2*a) ;
pierwiastek = sqrt(delta) ;
delta = (b*b)-4*a*c ;
printf("Delta tej funkcji kwadratowej wynosi %f
", delta) ;

	if (delta < 0) printf ("Rownanie kwadratowe nie posiada pierwiastkow
") ;

	if (delta=0) {
	
		printf("Pierwiastek z delty tej funkcji kwadratowej wynosi %f
", pierwiastek) ;
		printf("Jedyny pierwiastek tej funkcji kwadratowej wynosi %f
", x) ;
				}
	if (delta>0) {
	
		x1=(-b-pierwiastek)/(2*a) ;
		x2=(-b+pierwiastek)/(2*a) ;
		printf("Pierwszy pierwiastek x1 tej funkcji kwadratowej wynosi %f

", x1 ) ;
		printf("Drugi pierwiastek x2 tej funkcji kwadratowej wynosi %f

", x2) ;
			}
PabloRal
Użytkownik
Użytkownik
Posty: 34
Rejestracja: 30 wrz 2012, o 13:52
Płeć: Mężczyzna
Lokalizacja: Legnica
Podziękował: 1 raz
Pomógł: 4 razy

[C] pierwiastkowanie

Post autor: PabloRal »

U mnie po drobnej poprawce działa ;D
Na przykład dla danych 2, 3, 1 ;D

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>

int wybor;
float a, b, c, delta, pierwiastek, x, x1, x2;

int main(void)
{
        printf("Wybierz opcje:
1-Funkcja kwadratowa
2-Dzialania z dwoma operandami
") ;
        scanf("%d", &wybor);
        if(wybor==1)
        printf("Podaj a: ");
        scanf("%f", &a);
        printf("Podaj b: ");
        scanf("%f", &b);
        printf("Podaj c: ");
        scanf("%f", &c);

        x =-b/(2*a);
        delta = (b*b)-4*a*c;
        pierwiastek = sqrt(delta);
        printf("Delta tej funkcji kwadratowej wynosi %f
", delta);

        if(delta < 0) printf ("Rownanie kwadratowe nie posiada pierwiastkow
");

        else if(delta == 0) {

                printf("Pierwiastek z delty tej funkcji kwadratowej wynosi %f
", pierwiastek);
                printf("Jedyny pierwiastek tej funkcji kwadratowej wynosi %f
", x);
        }
        else if(delta > 1) {

                x1=(-b-pierwiastek)/(2*a);
                x2=(-b+pierwiastek)/(2*a);
                printf("Pierwszy pierwiastek x1 tej funkcji kwadratowej wynosi %f

", x1 );
                printf("Drugi pierwiastek x2 tej funkcji kwadratowej wynosi %f

", x2);
        }
        return 0;
}
PS: Nie stawiaj spacji przed średnikiem - brzydko to wygląda ;D
Ostatnio zmieniony 12 sty 2013, o 11:43 przez PabloRal, łącznie zmieniany 1 raz.
lovenprajs
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 12 lis 2012, o 18:10
Płeć: Mężczyzna
Lokalizacja: Kraków

[C] pierwiastkowanie

Post autor: lovenprajs »

no wlasnie kurcze, a mi nie działa, zawse pierwiastek z delty = 0 :/ musze skorzystać z innego kompilatora chyba
royas
Użytkownik
Użytkownik
Posty: 363
Rejestracja: 24 sie 2012, o 09:27
Płeć: Mężczyzna
Lokalizacja: Cieszyn
Pomógł: 80 razy

[C] pierwiastkowanie

Post autor: royas »

Może najpierw oblicz delte a potem ją pierwiastkuj?
damik1318
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 25 lut 2013, o 16:44
Płeć: Mężczyzna
Lokalizacja: Rzeszów
Podziękował: 8 razy

[C] pierwiastkowanie

Post autor: damik1318 »

Jeszcze coś ode mnie bo jest math.h i jest jeszcze cmath nie wiem czym się różnią ale jest .
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] pierwiastkowanie

Post autor: Althorion »

W języku C++ zmieniło się nazewnictwo w bibliotece standardowej. Pliki nagłówkowe pochodzące z C zmieniły swą nazwę tak, że „ucięto” im rozszerzenie .h i dołączono przedrostek c. To jest w sumie to samo, tylko w innych językach. Czasem cmath jest po prostu opakowaniem na math.h (tak robi chyba Microsoft Visual Studio), czasem rozwiązuje się to bardziej finezyjnie (np. omijając problem z niejednoznacznością pow(int, int)).

Jeśli piszesz w C, używaj tego pierwszego. W C++ tego drugiego. Tyle.
ODPOWIEDZ