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

1) a gdzie kod? dalas tylko plik z konfiguracja
2) uzyj codeblocks'a http://fasadin.4programmers.n[...]2/blog-post.html?view=sidebar albo https://www.google.com/search[...];sourceid=chrome&ie=UTF-8
3) popraw temat. Pomoc nic nie mowi o czym temat jest

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, botów: 0