Skocz do zawartości
Szynka

Zadanie Ze Wskaźnikiem / C

Rekomendowane odpowiedzi

Zdefiniować wskaźnik funkcji double f(double). Zainicjować wskaźnik adresem standardowej funkcji log. Za pomocą wskaźnika wyznaczyć wartości funkcji log w N losowych punktach x, należących do przedziału [-20.0, 20.0], gdzie N - stała. Wyprowadzić wartości x, f(x) na ekran.

 

double loga(N, double (*f)(double)); double fun(); int main() { loga(N, fun); } double loga(N, double (*f)(double) ) { return x; cout << x << endl; } double fun(double x) { x=rand()%40-20; log(x); }
cos mi nie łyka :>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

skorod N ma byc stale to moze lepiej uzyc define N costam i wywalic to N z parametrow funkcji.....

 

funkcja loga ma chyba blad bo najpierw zwraca wartosc a potem wyswietla wartosc x . Poza tym co to jest to x nigdzie nie jest zdefiniowany...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no tak nie napisałem tego N ... ale czemu nie łyka mi nawet definicji wskaźnika ?

double (*f)(double));
jak zdefiniuje wskaźnik do funkcji to potem moge używać jej jak normlanej funkcji ? double f(){ } ???

#include<conio.h>#include<iostream.h>#include<stdlib.h>#include<math.h>#define N 4int x;double loga(double (*f)(double)); double fun(); int main() { loga(fun); } double loga(double (*f)(double) ) { for(int i=0; i<N; i++)	{ 	x=rand()%40-20; 	cout << log(x)<< endl;	}}double fun() { return x; }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no tak nie napisałem tego N ... ale czemu nie łyka mi nawet definicji wskaźnika ?

double (*f)(double));
Masz 3 nawiasy zamykajace i 2 naw. otwierające, syntax error.

jak zdefiniuje wskaźnik do funkcji to potem moge używać jej jak normlanej funkcji ? double f(){ } ???

#include<conio.h>#include<iostream.h>#include<stdlib.h>#include<math.h>#define N 4int x;double loga(double (*f)(double)); double fun(); int main() { loga(fun); } double loga(double (*f)(double) ) { for(int i=0; i<N; i++)	{ 	x=rand()%40-20; 	cout << log(x)<< endl;	}}double fun() { return x; }

Jeżeli masz np. funkcję która nic nie zwraca i nic nie bierze void func() {}, to możesz sobie zdefiniować do niej wskaźnik f i następnie go zainicjować w sposób

void (*f)();f = func;
albo to samo w jednym wierszu

void (*f)() = func;
a wywołanie funkcji poprzez wskaźnik wygląda po prostu tak:

(*f)();

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#include<stdio.h>#include<stdlib.h>#include<math.h>#define N 5 //ustalenie wartosci stalej Nint los;double x;double (*wsk)(double); //wskaznik na funkcje double f(double)//wsk=log; //inicjacja funkcji losujacychdouble (*a)();double W();int main(){wsk=log;a=W;	(*a)();   fflush(stdin);getchar();}double W(){for(int i=0;i<N;i++)	{	x=rand()%40-20;	  if(x<0)		{			while(x<=0)			{			x=rand()%40-20;			}			printf("x= %lf, f(x)= %lf\n\n", x,wsk(x));		}	else		{		printf("x= %lf, f(x)= %lf\n\n", x,wsk(x)); //wsk(x) -> wywolanie funkcji standardowej log za pomoca wskaznika		}	}}

czy o to chodzi ?? program działa jak ma działać .. ale czy jest pod wzgledem merytorcznym ok ??

w zadaniu jest napisane

losowych punktach x, należących do przedziału [-20.0, 20.0],

rozumiem, że to podpucha bo nie istnieje nic takiego jak log(-x) ...

x=rand()%40-20;
czy ograniczyć

x=rand()%20;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

czy o to chodzi ?? program działa jak ma działać .. ale czy jest pod wzgledem merytorcznym ok ??

w zadaniu jest napisane

losowych punktach x, należących do przedziału [-20.0, 20.0],

rozumiem, że to podpucha bo nie istnieje nic takiego jak log(-x) ...

Dla twej inforamcji podam że np istnieje Ln(-1), Ln(-2) itd (Ln = logarytm naturalny), wystarczy przejśc do liczb urojonych.

x=rand()%40-20;
czy ograniczyć

x=rand()%20;
Jak chcesz mieć liczby z przedziału [-20.0,20.0] to coś takiego:

x=rand()%41-20;
a jak z przedziału [0,20.0]:

x=rand()%21;
choć wtedy możesz wdepnąc w punkt 0 (choć sznasa na to wynosi 0 :D) i zapewne nie policzysz log(0).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...