Snažím se pochopit pointery a na netu jsem našel tenhle kód:
Sice mi to funguje, má to počítat jakýsi integral, takže když zadám 3 čísla, vyhodí to výsledek, ale nechápu, jak to funguje.
Může mi to někdo vysvětlit?
double simpson(double x){
return 3*x*x-2*x+0.2;}
double funkce(double(*f)(double), double a, double b, int N){
double X=0,h=(b-a)/(double)N;
for(int i=1;i<=N;i++)
X+=h*(f(a+(i-1)*h)+4*f(a-h/2.0+i*h)+f(a+i*h))/6.0;
return X;}
int main(){
using namespace std;
cout << "Vypocet: ";
double a,b,n,integral;
cout << "Zadej a: ";
cin >> a;
cout << "Zadej b: ";
cin >> b;
cout << "Zadej n: ";
cin >> n;
integral = funkce(simpson,a,b,n);
return 0;}
Fórum › C / C++
Kód - kdo poradí
Funkce
double funkce(double(*f)(double), double a, double b, int N)
bere jako první parametr ukazatel na funkci, která má jeden parametr typu double a vrací double. Proměnná, která reprezentuje ten první parametr, se jmenuje f. Tu funkci je možné z funkce "funkce" normálně volat jako f(1.2345). Ten výsledek dostaneš tak že si ho vypíšeš čili:
cout << "Vysledek je: " << integral << endl;
A výraz který si napsal znamená to že do proměnné h se přiřadí hodnota výrazu, double je před N proto, aby se použilo reálné dělení místo celočíselného.
proste mas funkci simpson, ktera prijima x a vrati prislusne y..
pak mas funkci funkce, ktera prijima ukazatel na funkci, kterou ma integrovat, interval integrace (a,b), a kolik kroku pri te integraci udelat (N)...
vypocte si pak delku kroku a postupne po tech jednotlivejch krocich pricita obsahy ploch... akorat nepoznam, ktera numericka metoda integrace to presne je... (ale kdyz by sis to nasel na netu tak ji nejspis najdes) .. ja sem treba delal na vejsce v matlabu runge-kutta..
no a po zintegrovani se vrati vysledek jako hodnota z te funkce ..
pak uz jen vypsat jak se tu zminovalo
to se predava parametrem..
zavolas simpson(3) tak uvnitr funkce simpson je vlastne x = 3
akorat tam je to zaonaceny tim ze simpson spoustis pomoci f(3) a f odkazuje na simpson
Ahojte mám tady taky jeden kod, ve kterém mám pracovat s ukazateli, a nějak to sice pracuje jenže i ne zrovna podle zadání...
#include <stdio.h>
int main()
{
char str1[] = "Ahoj";
char *t1 = str1;
while(*t1!='\0') {
//printf("%c" , *t1);
t1++;
}
printf("Delka retezce je %i.\n", t1-str1);
char str2[] = "Abcde";
char *t2 = str2;
while(*t2!='\0') {
//printf("%c" , *t2);
t2++;
}
printf("Delka retezce je %i.\n", t2-str2);
printf("Slovo %c je delsi nez slovo %c. \n", *t1-str1, *t2-str2);
return 0;
}
int porovnej(char t1, char t2)
{
if (t1 == t2)
return 0;
else if (t1 > t2)
return 1;
else
return -1;
}
Nu a tu je zadání:
Napište v jazyku C funkci int porovnej(char *t1, char *t2), která porovná předané textové řetězce a vrátí -1, pokud je první řetězec menší než druhý, 0, pokud jsou řetězce shodné, nebo 1, pokud je druhý řetězec menší než první. Při práci s textovými řetězci používejte výhradně ukazatele, operátor dereference a pointerovou aritmetiku.
Porovnávání řetězců by mělo být lexikografické, tj. obdobné uspořádání slov ve slovníku. Budou tedy porovnávány jednotlivé odpovídající si dvojice znaků (i-tý znak prvního řetězce s i-tým znakem druhého řetězce) počínaje prvními znaky obou řetězců, první rozdílná dvojice znaků pak určí výsledek porovnání obou řetězců. Tento způsob porovnání textových řetězců plně odpovídá funkci strcmp.
To KroYc : napovidaj.. pomoci dereference...
proste neco jako while ( (*t1 == *t2) && (*t1 != '\0' )); a po skonceni uz jen otestovat jestli je vysledek u obou \0 nebo nejakej rozdil
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Kdo poradí srovnatelný smartphone — založil shockwave
Kdo mi poradí jakej Linux si mám stáhnout? — založil Dowo
Kód, který edituje/píše kód, který se hned dá spustit — založil Kartik
Mysql - pořadí — založil pawlik
Moderátoři diskuze