Witam, mam problem ze skompilowaniem kodu w Visual C++. W głównym kodzie mam wywołać funkcję, aby obliczenia przeszły pomyślnie, jednakże nie mam bladego pojęcia jak to zrobić. Jeśli ktoś potrafiłby mi pomóc, byłabym wdzięczna.
Pozdrawiam
Wątek przeniesiony 2019-01-14 14:52 z C/C++ przez somekind.
Witam, mam problem ze skompilowaniem kodu w Visual C++. W głównym kodzie mam wywołać funkcję, aby obliczenia przeszły pomyślnie, jednakże nie mam bladego pojęcia jak to zrobić. Jeśli ktoś potrafiłby mi pomóc, byłabym wdzięczna.
Pozdrawiam
W Visual Studio w lewym, górnym rogu, menu zdaje się File poszukaj opcji New Project. Kliknij ją, będziesz miała do wyboru różne typy projektów, ale do twoich potrzeb wystarczy Console Application. Visual wygeneruje ci projekt + main.cpp. Skompiluj go, jeśli zadziała to od tego momentu możesz dodawać swój kod, oraz dodatkowe pliki źródłowe/nagłówkowe do tego projektu.
Dołączyłam plik jest w zalaczniku, wkleję go tutaj:
Dzięki z góry i pozdrawiam.
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
using namespace std;
const double EPS0 = 0.0000000001; // dokładność porównania z zerem
const double EPSX = 0.0000000001; // dokładność wyznaczenia pierwiastka
double ug,x0;
double F(double x)
{
return sqrt(exp(11.73913)*(exp(-x / 0.0253) + x / 0.0253 - 1) + exp(-11.73913)*(exp(x / 0.0253) - x / 0.0253 - 1));
}
double qs(double F(double x), double x)
{
return pow(3.03, -10)*0.0253*F(x);
}
double f(double x, double qs(double F, double x))
{
cout << "podaj ug = " << ug << endl;
cin >> ug;
return ug + 0.96 + qs(F(x), x) / pow(9.57, -7) - x;
}
double fp(double x)
{
double a, b, c;
a = pow(7.97555, -6);
b = 125383.2092;
c = 39.5256917;
return 19.76284585*pow(3.03, -10)*(0.0253 / pow(9.57, -7)) / F(x);
}
//-----------------------------------------------------
// Program główny
//-----------------------------------------------------
int main(int argc, char *argv[])
{
double x0, x1, f0, f1, x;
double F(double x0);
double qs(double F(double x0), double x0);
int i;
cout << setprecision(8) // 8 cyfr po przecinku
<< fixed; // format stałoprzecinkowy
cout << "Obliczanie pierwiastka funkcji - metoda Newtona\n"
"Podaj punkt startowy x0 = ";
cin >> x0;
cout << "\n-----------------------------------------------\n\n"
"WYNIK:\n\n";
x1 = x0 - 1; f0 = f(x0,qs(F(x0),x0)); i = 64;
while (i && (fabs(x1 - x0) > EPSX) && (fabs(f0) > EPS0))
{
f1 = fp(x0);
if (fabs(f1) < EPS0)
{
cout << "Zly punkt startowy\n";
i = 0;
break;
}
x1 = x0;
x0 = x0 - f0 / f1;
f0 = f( x0, qs(double(*F)(double x0), double x0));
if (!(--i)) cout << "Przekroczony limit obiegow\n";
}
if (i) cout << "x0 = " << setw(15) << x0 << endl;
cout << "\n-------------------------------------------\n\n";
system("pause");
return 0;
}
wychodzące błędy
Severity Code Description Project File Line Suppression State
Error C2664 'double qs(double (__cdecl *)(double),double)': cannot convert argument 1 from 'double' to 'double (__cdecl *)(double)' 65
Severity Code Description Project File Line Suppression State
Error C2660 'f': function does not take 1 arguments ConsoleApplication14 65
Severity Code Description Project File Line Suppression State
Error C2440 '<function-style-cast>': cannot convert from 'double (double)' to 'double' 78
Severity Code Description Project File Line Suppression State
Error C2062 type 'double' unexpected 78
masz bledy bo piszesz wszystko w jednej linii (brak normalnego formatowania)
double F(double x)
{
return sqrt(exp(11.73913)(exp(-x / 0.0253) + x / 0.0253 - 1) + exp(-11.73913)(exp(x / 0.0253) - x / 0.0253 - 1));
}
teraz rozbije to na cos normalniejszego (wszystko zostawiam tak samo jak jest w tej linijce bys zobaczyla blad, jedynie dodaje pomocnicze zmienne czy formatuje kod)
double F(double x)
{
auto first = exp(11.73913)(exp(-x / 0.0253); // jak widzisz tutaj pomiedzy expami nie ma zadnego znaku
auto second = x / 0.0253 - 1;
auto third = exp(-11.73913)(exp(x / 0.0253) - x / 0.0253 - 1)); // tutaj to samo
return sqrt(first + second ) + third;
}
return 19.76284585pow(3.03, -10)(0.0253 / pow(9.57, -7)) / F(x);
co oznacza 19.76284585pow
?
x1 = x0 - 1; f0 = f(x0,qs(F(x0),x0)); i = 64;
tu masz kolejny blad, rozbij sobie sama i go znajdz
ostatni jest tutaj
f0 = f( x0, qs(double(*F)(double x0), double x0));
popraw
a sama znajdziesz bledy i unikniesz je w przyszlosci
Tak rozumiem, chodzi mi właśnie o tą funkcję
f(x0,qs(F(x0),x0). wiem ze jest źle napisany. Jak piszę f(x0), wtedy pisze że funkcja nie pobiera jednego argumentu. I nie wiem jak to rozpisać.
bo masz poplatane z pomieszaniem ;)
tak samo funkcja double qs(double F(double x), double x)
jako co ona ma miec argument?
zastosuj sie do rad ktore dalem Ci w poprzednim poscie. Zobaczysz, ze bedzie lepiej. Wtedy jak nie bedzie dzialac (kompilowac sie) przyjdz tutaj
Dzięki może mi się uda
W danej funkcji są dwie zmienne qs i x. Argument x m również funkcja F. Biorąc pod uwagę że qs zależy od F to również zależy od x. W funkcji F zmienną jest tylko x więc tak jakby funkcja qs miała tą samą zmienną co F czyli argument x. Jest to trochę skomplikowane. Przed int main() kod mi się kompiluje prawidłowo, jednakże chcąc się odwołać do tego kodu w głównym kodzie wychodzą mi błędy. I nie mam pojęcia jak to zrobić.
Trolcia napisał(a):
W danej funkcji są dwie zmienne qs i x. Argument x m również funkcja F. Biorąc pod uwagę że qs zależy od F to również zależy od x. W funkcji F zmienną jest tylko x więc tak jakby funkcja qs miała tą samą zmienną co F czyli argument x. Jest to trochę skomplikowane. Przed int main() kod mi się kompiluje prawidłowo, jednakże chcąc się odwołać do tego kodu w głównym kodzie wychodzą mi błędy. I nie mam pojęcia jak to zrobić.
Także znalazłam błąd w funkcji qs. Posiada tylko jeden argument (F).