Przekazywanie parametrów przez wskaźnik.

0

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 ;))

0

Z pozdrowieniami dla _13th_Dragon ;-)
Twoje krytykanctwo było nie na miejscu...

 
#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 (*wskaznik1)(float t), float (*wskaznik2)(float t));
float *x0, eps, x;
float a, b;

using namespace std;
int main()

{
	cout<<"Podaj przyblizenie poczatkowe x0: ";
	cin>>a;
	cout<<"Okresl dokladnosc wyznaczenia miejsca zerowego: ";
	cin>>b;
	warunek(&a, b, funkcja, pochodna);
	
	getch();
	return 0;
}

float funkcja (float x)
{		
	return 5*x*x + 10*x - 1;     //deklaracja funkcji f(x)
}

float pochodna (float x)
{
	return 10*x + 10;		    //deklaracja pochodonej f'(x)
}


float warunek (float *x0, float eps, float (*wskaznik1)(float t), float (*wskaznik2)(float t))
{
	float y0, y1, x1;
	float n;
	n=1;
	
	y0=wskaznik1(*x0);
	y1=wskaznik2(*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=wskaznik1(*x0);
				y1=wskaznik2(*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;
		}

	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1