Kód - kdo poradí – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kód - kdo poradí – C / C++ – Fórum – Programujte.comKód - kdo poradí – C / C++ – Fórum – Programujte.com

 

jeden0
Duch
18. 12. 2009   #1
-
0
-

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

Nahlásit jako SPAM
IP: 90.183.36.–
KIIV
~ Moderátor
+43
God of flame
18. 12. 2009   #2
-
0
-

proste mas funkci, ktere predas ukazatel na funkci, a ta ji pote pomoci toho ukazatele zavola..

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondra.holub
~ Anonymní uživatel
255 příspěvků
18. 12. 2009   #3
-
0
-

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

Nahlásit jako SPAM
IP: 194.138.12.–
jeden0
Duch
19. 12. 2009   #4
-
0
-

No jo, ale nechápu, jak to teda nakonec bude, jakože integral = funkce(simpson,a,b,n); vypíše výsledek, ale ten dostanu jak?

Nahlásit jako SPAM
IP: 90.183.36.–
jeden0
Duch
19. 12. 2009   #5
-
0
-

A co znamená tohle? proč je tam double? h=(b-a)/(double)N

Nahlásit jako SPAM
IP: 90.183.36.–
Matrix17
~ Anonymní uživatel
300 příspěvků
19. 12. 2009   #6
-
0
-

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.

Nahlásit jako SPAM
IP: 78.156.128.–
KIIV
~ Moderátor
+43
God of flame
19. 12. 2009   #7
-
0
-

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

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
jeden0
Duch
19. 12. 2009   #8
-
0
-

Je to simpsonův integrál-

Ještě nechápu to malé x, které je definované jen nahoře v té funkci a pak nikde, to se vezme odkud?

Nahlásit jako SPAM
IP: 90.183.36.–
KIIV
~ Moderátor
+43
God of flame
19. 12. 2009   #9
-
0
-

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

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KroYc0
Newbie
23. 12. 2009   #10
-
0
-

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

Nahlásit jako SPAM
IP: 88.146.188.–
KroYc0
Newbie
23. 12. 2009   #11
-
0
-

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.

Nahlásit jako SPAM
IP: 88.146.188.–
KIIV
~ Moderátor
+43
God of flame
23. 12. 2009   #12
-
0
-

To KroYc : porovnat adresy kde jsou ty retezce moc nepomuze..
musis pekne cyklem

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KroYc0
Newbie
23. 12. 2009   #13
-
0
-

To KIIV : a to zajistím jak? něco jako porovnání adres,

Nahlásit jako SPAM
IP: 88.146.188.–
KIIV
~ Moderátor
+43
God of flame
23. 12. 2009   #14
-
0
-

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

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 100 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý