Wątek przeniesiony 2019-01-14 14:52 z C/C++ przez somekind.

pomoc c++

0

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

1

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.

0

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
2

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

  1. nazewnictwo zmiennych
  2. formatowanie kodu

a sama znajdziesz bledy i unikniesz je w przyszlosci

0

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

0

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

0

Dzięki może mi się uda

0

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1