[C++] Pierwiastki funkcji kwadratowej

magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: magda87 »

Mam jeszcze jedna prośbę. Muszę napisać jeszcze jeden program. Tutaj jest treść zadania:

Napisz program znajdujący pierwiastki trójmianu kwadratowego \(\displaystyle{ ax^2+bx+c=0}\), dla zadanych parametrów \(\displaystyle{ a, b, c}\). Wykorzystać dwie funkcje: sprawdzającą, czy jest pierwiastek, wyliczająca pierwiastki. Jako argumenty dla funkcji należy podać współczynniki równania.

Będę wdzięczna za jakiekolwiek wskazówki
Ostatnio zmieniony 20 mar 2013, o 22:54 przez Afish, łącznie zmieniany 2 razy.
Powód: Całe wyrażenia matematyczne umieszczaj w tagach [latex] [/latex].
szw1710

[C++] Pierwiastki funkcji kwadratowej

Post autor: szw1710 »

Silnik do tego wszystkiego jest trywialny. Może coś w Pascalu (to umiem nieco :))

Kod: Zaznacz cały

delta:=b*b-4*a*c;
if delta<0 then writeln('Brak pierwiastków rzeczywistych')
else
  if delta=0 then writeln(-b/(2*a),' pierwiastek podwójny')
  else writeln((-b-sqrt(delta))/(2*a),(-b+sqrt(delta))/(2*a),' dwa pierwiastki rzeczywiste');
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++] Pierwiastki funkcji kwadratowej

Post autor: Althorion »

Na którym etapie się zacinasz? Czy wiesz kiedy trójmian kwadratowy ma pierwiastki? Wiesz jak ten warunek zapisać w C++? Umiesz deklarować funkcje?
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: magda87 »

mam coś takiego ale to nie do końca działa:(

Kod: Zaznacz cały

#include <iostream> 
#include <cstdlib> 
#include <math.h> 

using namespace std; 
float czy_trojmian ( float a, float b, float c, float x)
{
	if ( a * pow (x,2) + b * x + c ==  0)
	return 1;
	else 
	return 0;
}
float czy_miejsca_zerowe ( float delta, float x, float x1, float x2)
{
	if ( delta > 0)
	return 1;
	else 
	return 0;
}
int main () 
{ 
float a,b,c; 
float delta; 
float x, x1, x2; 

cout << " Podaj a :"; 
cin >> a; 
cout << " Podaj b : "; 
cin >> b; 
cout << "Podaj c : "; 
cin >> c; 

if (a==0) 
cout << " To nie jest trójmian kwadratowy "; 
else 
{ 
delta == b*b - 4*a*c; 
if (delta>0) 
{ 
x1==(-b- sqrt(delta))/(2*a); 
x2==(-b+sqrt(delta))/(2*a); 
cout << "Trójmian ma dwa miejsca zerowe:" << endl 
<< " x1 = " << x1 << endl 
<< " x2 = " << x2 << endl; 
} 
else 
if (delta==0) 
{ 
x==(-b)/(2*a); 
cout << "Trójmian jedno miejsce zerowe:" << endl 
<< " x0 = " << x << endl; 

} 
else
cout << " Trójmian nie ma miejsc zerowych! "; 
} 
 
return 0; 
} 
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++] Pierwiastki funkcji kwadratowej

Post autor: Althorion »

No to po kolei:
1. Formatowanie. Na wszystkich bogów, wstawiaj odstępy.
2. Co miała testować funkcja czy_trojmian? Bo na razie sprawdza, czy dla danego x ma on miejsce zerowe.
3. Po co funkcja czy_miejsca_zerowe dostaje cztery argumenty, skoro korzysta tylko z jednego?
4. Dlaczego dwie powyższe funkcje są typu zmiennoprzecinkowego, a nie logicznego?
5. Dlaczego je napisałaś, a nie wykorzystujesz?
6. Po co Ci biblioteka cstdlib?
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: magda87 »

Nie wiem o co dokładnie chodzi, czyli ten program jest żle??
Zmieniłam w nim parę rzeczy:

Kod: Zaznacz cały

#include <iostream> 
#include <math.h> 

using namespace std; 

int czy_trojmian ( int a, int b, float c, int x, int x1, int x2)

{
if ( a * pow (x,2) + b * x + c ==  0)
return 1;

else 
return 0;
}

int czy_miejsca_zerowe ( int delta, int x, int x1, int x2)
{
if ( delta > 0)
return 1;

else 
return 0;
}

int main () 

{ 
int a,b,c; 
int delta; 
int x, x1, x2; 

cout << " Podaj a :"; 
cin >> a; 
cout << " Podaj b : "; 
cin >> b; 
cout << "Podaj c : "; 
cin >> c; 

if (a==0) 
cout << " To nie jest trójmian kwadratowy "; 

else 
{ 
delta = b*b - 4*a*c; 

if (delta>0)
 
{ 
x1=(-b- sqrt(delta))/(2*a); 
x2=(-b+sqrt(delta))/(2*a); 
cout << "Trojmian ma dwa miejsca zerowe:" << endl 
<< " x1 = " << x1 << endl 
<< " x2 = " << x2 << endl; 
} 

else 
if (delta==0) 

{ 
x=(-b)/(2*a); 
cout << "Trojmian jedno miejsce zerowe:" << endl 
<< " x0 = " << x << endl; 

} 

else
cout << " Trojmian nie ma miejsc zerowych! "; 
} 

return 0; 
}
wszystko działa. Tylko nie wiem o co chodzi z ta funkcją jak mam ją wykorzystać??
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: Ser Cubus »

Kod: Zaznacz cały

int czy_trojmian ( int a, int b, float c, int x, int x1, int x2)
{
if ( a * pow (x,2) + b * x + c ==  0)
return 1;

else 
return 0;
}
tutaj nie używasz zmiennych x, x1 ani x2

poza tym deklarujesz funkcje, których nie używasz, zamiast pisać w programie

Kod: Zaznacz cały

delta = b*b - 4*a*c;
zrób sobie funkcję, np:

Kod: Zaznacz cały

int oblicz_delte(int a, int b, int c)
{
     int delta;
     delta = b*b - 4ac;
     return delta;
}
coś takiego lepiej się czyta
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: magda87 »

w tym właśnie chodziło o to, aby korzystać z funkcji, mnie nie było na zajęciach kiedy grupa ćwiczyła zaisywanie i korzystanie z funkcji. Szukałam cos niecoś w necie ale z niezbyt dobrym skutkiem. Mam z tym mały problem .
Czyli tutaj powinno być tylko tyle:

Kod: Zaznacz cały

int czy_trojmian ( int a, int b, int c)
{
if ( a * pow (x,2) + b * x + c ==  0)
return 1;

else 
return 0;
}
Dobrze zrozumiałam?
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: Ser Cubus »

nie do końca wiem co ma robić ta funkcja, poza tym komputer nie podniesie Ci x do kwadratu, tam nawet nie zadeklarowałaś tej zmiennej

zrób sobie funkcję liczącą delte i liczącą miejsca zerowe, tak chyba najłatwiej
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: magda87 »

czy to ma wyglądać w ten sposób:

Kod: Zaznacz cały

int oblicz_delte(int a, int b, int c)
{
     int delta;
     delta == b*b - 4*a*c;
     return delta;
}
int oblicz_miejsca_zerowe ( int a, int b, int delta)
{
	int x, x1, x2;
	x== -b/2*a;
	x1== (-b - sqrt(delta))/2*a;
	x2== (-b + sqrt(delta))/2*a;
	return x, x1, x2;
	
}
narazie zbudowałam sobie funkcje
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: witekkq »

Przypisujesz wartość do zmiennej czyli pojedynczy znak równości, dalej to samo.

Kod: Zaznacz cały

delta = b*b - 4*a*c;
Co jeśli delta jest ujemna?

Co jeśli a jest równe zero?
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: magda87 »

to musze też w zapisie funkcji ująć czy dopiero w programie?

napisałam cos takiego ale chyba jest w tym cos nie tak, bo nie liczy dobrze:

Kod: Zaznacz cały

#include <iostream>
#include <math.h>

using namespace std;

int oblicz_delte(int a, int b, int c)
{
     int delta;

     delta = b*b - 4*a*c;

     return delta;
}
int oblicz_miejsca_zerowe ( int a, int b, int delta)
{
	int x, x1, x2;

	x= -b/2*a;
	x1= (-b - sqrt(delta))/2*a;
	x2=(-b + sqrt(delta))/2*a;

	return x, x1, x2;
	
}

int main() 
{
	int a,b,c;

   cout<<"podaj a:"<< endl;
   cin>>a;
   cout<<"podaj b:"<< endl;
   cin>>b;
   cout<<"podaj c:"<< endl;
   cin>>c;

   int delta = oblicz_delte (a,b,c);
   {
              int miejsca_zerowe =  oblicz_miejsca_zerowe (a,b,delta);
   	int x, x1, x2;
	if(delta<0)
	{
	cout<<" brak miejsc zerowych"<<endl;
		
		}
	
	if(delta=0)
	{
	cout<<" jest jedno miejsce zerowe:"<<x1<<endl;
	
		
		}
	else
	{
		cout<< "Sa dwa miejsca zerowe:"<<x1<<endl<<x2<<endl;
		}
		}
   	
	return 0;
}
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: witekkq »

Zastanów się nad tymi znakami = a == jest duża różnica, w instrukcji if(cos==cos2) masz porównanie
a wartosc=4*5 chcesz przypisać.

takie coś nie zadziała tak jak Ci się wydaje...

Kod: Zaznacz cały

 return x, x1, x2;
ta klamra to od czego miała być?

Kod: Zaznacz cały

 int delta = oblicz_delte (a,b,c);
   [b]{[/b]
przypisujesz to co zwraca Twoja funkcja do jednej zmiennej, a później korzystasz z zupełnie innych? jak to miało działać w zamyśle?

Kod: Zaznacz cały

int miejsca_zerowe =  oblicz_miejsca_zerowe (a,b,delta);
      int x, x1, x2;

Na szybko przerobione:

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int oblicz_delte(int a, int b, int c)
{
     int delta;
     delta = b*b - 4*a*c;
     return delta;
}
void oblicz_miejsca_zerowe ( int a, int b, int delta)
{
   double x, x1, x2;
   x= -b/2*a;
   x1= (-b - sqrt(delta))/2*a;
   x2=(-b + sqrt(delta))/2*a;
   if(delta<0)
		 cout<<" brak rozwiazan rzeczywistych"<<endl;
   if(delta==0)
		 cout<<" jest jedno miejsce zerowe:"<<x1<<endl;  //napewno jedno?
   else
         cout<< "Sa dwa miejsca zerowe:"<<x1<<endl<<x2<<endl;
}

int main()
{
   int a,b,c;

   cout<<"podaj a:"<< endl;
   cin>>a;
   cout<<"podaj b:"<< endl;
   cin>>b;
   cout<<"podaj c:"<< endl;
   cin>>c;

   oblicz_miejsca_zerowe(a,b,oblicz_delte (a,b,c));
  

  system("pause");
   return 0;
}
magda87
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 1 sty 2013, o 17:48
Płeć: Kobieta
Lokalizacja: pomorze
Podziękował: 6 razy

[C++] Pierwiastki funkcji kwadratowej

Post autor: magda87 »

tak jeśli delta jest zerowa to jest tylko jedno miejsce zerowe,

dziękuję za pomoc .-- 21 mar 2013, o 00:18 --konieczne było dadanie biblioteki

Kod: Zaznacz cały

math.h
, bez niej kompilator nie chciał uruchomić programu.
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++] Pierwiastki funkcji kwadratowej

Post autor: Althorion »

Słusznie, funkcja sqrt z niej pochodzi.

Poza tym, możesz chcieć rozważyć zmianę współczynników trójmianu z całkowitych na zmiennoprzecinkowe.
ODPOWIEDZ