Numerická integrácia, jazyk C – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Numerická integrácia, jazyk C – C / C++ – Fórum – Programujte.comNumerická integrácia, jazyk C – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
corpsu0
Duch
28. 3. 2013   #1
-
0
-

Zdravím!

Pracujem na programe, ktorý vypočíta určitý integrál pomocou obdĺžnikovej metódy so vzťažným bodov v strede základne a obdĺžnikovej metódy so vzťažným bodom v pravom hornom rohu. Zatiaľ som robil len skúšobnú verziu s napevno zadanými hodnotami, no program sa mi nespustí. Chyba bude najskôr v cykle v hlavnej funkcii main. Vedel by ma prosím niekto opraviť? Vďaka

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

/*Deklaracie funkcii numerickej integracie*/
double rightpoint_rule (double from, double to, double n, double (*func)());
double midpoint_rule (double from, double to, double n, double (*func)());

/*Deklaracie matematickych funkcii*/
double f1(double x);
double f2(double x);
double f3(double x);

typedef double (*pfunc)(double, double, double, double (*)());
typedef double (*rfunc)(double);
/*Hlavna funkcia main*/
int main()
{
	int i,j;
	double ic;
	pfunc f[] = { rightpoint_rule, midpoint_rule };
	const char *names[] = { "Rightpoint", "Midpoint"};
	rfunc rf[] = { f1, f2, f3, f3 };
	int ivals[] = { 
       1, 50,
       1, 100,
       1, 5000,
       1, 6000
     };
	int approx[] = { 100, 1000, 5000000, 6000000 };
	 for(j=0; j < (sizeof(rf) / sizeof(rfunc)); j++) 
     {
       for(i=0; i < 3 ; i++)
       {
         ic = (*f[i])(ivals[2*j], ivals[2*j], approx[j], rf[j]);
         printf("%10s num: %lf \n", names[i], ic);
       } 
       printf("\n");
     }
	return 0;
}

/*Definicie funkcii numerickej integracie*/
double rightpoint_rule (double from, double to, double n, double (*func)())
{
   double h = (to-from)/n;
   double sum = 0.0, x;
   for(x=from; x <= (to-h); x += h)
     sum += func(x+h);
   return h*sum;
}

double midpoint_rule (double from, double to, double n, double (*func)())
{
   double h = (to-from)/n;
   double sum = 0.0, x;
   for(x=from; x <= (to-h);  x += h)
     sum += func((x+h)/2.0);
   return h*sum;
}
/*Definicie matematickych funkcii*/
double f1(double x)
{
	return x*x/3.0;
}
double f2(double x)
{
	return x;
}

double f3(double x)
{
	return 2.0*x;
}
Nahlásit jako SPAM
IP: 217.12.62.–
Reklama
Reklama
vitamin+8
Grafoman
28. 3. 2013   #2
-
0
-

Skus si to skompilovat pomocou c++ kompilatoru, vypise ti mnozstvo chyb a warningov ktore ti pomozu:

error: cannot initialize a parameter of type 'double (*)()' with an lvalue of type 'rfunc' (aka 'double (*)(double)')
         ic = (*f[i])(ivals[2*j], ivals[2*j], approx[j], rf[j]);
                                                         ^~~~~
untitled.cpp:52:18: error: too many arguments to function call, expected 0, have 1
     sum += func(x+h);
            ~~~~ ^~~
untitled.cpp:61:18: error: too many arguments to function call, expected 0, have 1
     sum += func((x+h)/2.0);
            ~~~~ ^~~~~~~~~
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
corpsu0
Duch
28. 3. 2013   #3
-
0
-

vďaka, jedna z chýb bola ivals[2*j+1], pred tým som tam mal ivals[2*j]

Nahlásit jako SPAM
IP: 217.12.62.–
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, 261 hostů

Podobná vlákna

QT Jambi integracia Eclipse — založil Reshi

Integrácia platieb na web — založil Dominik

Jazyk C — založil Peter

Jazyk d — založil marc_ramin

Na co je Java jazyk? — založil Tonda

Moderátoři diskuze

 

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