Witam wszystkich, jestem początkującym programistą i borykam się z pewnym problemem, a mianowicie:
Mam napisac program który, oblicza miejsce zerowe funkcji wykorzystując jej pochodną. Wygląda to tak, że w jednej funkcji deklaruję jak wyglądać ma moja funkcja, a w drugiej funkcji deklaruję jej pochodną. Udało mi się napisac program, który działa wg narzuconego z góry schematu (myslę że poprawnie), ale jest pewien problem. Prowadzący zajęcia powiedział, że mam zastosować wskaźniki. Zasadę działania wskaźników mniej więcej rozumiem, jest to bardzo przejrzyście opisane np. tutaj:
http://www.p-programowanie.pl/cpp/przekazywanie-argumentow-do-funkcji-c/
W powyższym artykule pokazano jak przekazać wartości za pomocą wskaźników z ciała programu głównego do jednej funkcji i z powrotem. W moim zadaniu wartość przekazywana ma być do jednej funkcji (funkcja warunek), ale wewnątrz niej wykorzystywane są dwie pozostałe funkcje (o nazwach funkcja i pochodna). Nie wiem jak to zrobić.. Prowadzący chce, aby prototyp funkcji wyglądał następująco:
float warunek (float x0, float eps, float f1, float f2)
Nie wiem tylko czy to f1 i f2 ma być wskaźnikami czy nie. Poniżej program bez wskaźników:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
float funkcja (float x);
float pochodna (float x);
float warunek (float x0, float eps);
float x0, eps, f1, f2, x;
using namespace std;
int main()
{
cout<<"Podaj przyblizenie poczatkowe x0: ";
cin>>x0;
cout<<"Okresl dokladnosc wyznaczenia miejsca zerowego: ";
cin>>eps;
warunek(x0,eps);
getch();
return 0;
}
float funkcja (float x)
{
f1 = 5*x*x + 10*x - 1; //deklaracja funkcji f(x)
return f1;
}
float pochodna (float x)
{
f2 = 10*x + 10; //deklaracja pochodonej f'(x)
return f2;
}
float warunek (float x0, float eps)
{
float y0, y1, x1;
float n;
n=1;
y0=funkcja(x0);
y1=pochodna(x0);
if (y1==0)
{
cout<<"\nPochodna funkcji jest rowna 0\n";
}
else
{
x1=x0-(y0/y1);
if (fabs(x1-x0)<eps)
{
cout<<"\nMiejsce zerowe wynosi: "<<x1<<endl;
}
else
{
do
{
x0=x1;
y0=funkcja(x0);
y1=pochodna(x0);
x1=x0-(y0/y1);
n++;
if (n>10000)
{
cout<<"\nBrak miejsc zerowych.\n";
return 0;
}
}
while (fabs(x1-x0)>=eps);
cout<<"\nMiejsce zerowe wynosi: "<<x1<<endl;
}
}
}
Jak ktoś ma pomysł jak to zmienic, to bardzo prosze o pomoc. Pozdrawiam ;))