Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] String na double (funkcja matematyczna)

Ostatnio zmodyfikowano 2015-12-29 01:18
Autor Wiadomość
Deivid
Temat założony przez niniejszego użytkownika
[C++] String na double (funkcja matematyczna)
» 2015-12-29 00:14:15
Witajcie skończyłem właśnie pisać programik o całkowaniu numerycznym kilkoma metodami. Jednak mam ambicję go urozmaicić. Posiadam w nim taką pewną funkcję:
C/C++
double funkcja_calkujaca( double x )
{
    //string funkcja = "x*x+3";
    double * liczba = new double;
    //*liczba = -x*x - x + 10; //dla funkcji f(x) = -x^2 -x + 10
    * liczba = x * x + 3; // dla funkcji f(x) = x^2 + 3
    x = * liczba;
    return x;
    delete liczba;
} //Koniec funkcji calkujacej
wiem że można to zapisać w krótszej postaci jak np.
C/C++
double funkcja_calkujaca( double x )
{
    return x * x + 3;
}
Ale ja sobie napisałem tak bo tak mi się podoba i już :)
Teraz taka kwestia chciałbym tą funkcję x^2+3 zapisać z klawiatury do programu, aby nie była ona na stałe wpisana. Jak to zrobić?
Znalazłem coś takiego:
C/C++
* liczba = string::atof( funckja.c_str() );
jednak wywala błędy, co poradzicie?
P-142499
carlosmay
» 2015-12-29 00:18:56
C/C++
double * liczba = new double; // alokacja pamieci
// ..... wylicznie x
return x; // wyjscie z funkcji returnem z wartoscia
delete liczba; // nigdy nie zwalnia pamieci

jednak wywala błędy, co poradzicie?
 Jakie błędy?
P-142500
Deivid
Temat założony przez niniejszego użytkownika
» 2015-12-29 00:27:36
Czyli jeśli już chce koniecznie na wskaźniku muszę go usunąć przed return ?
Zwykła funkcja zwraca wartość: 80.28
błędy:

1>f:\downloads\megasync\programy c++\metoda całkowania numerycznego\metoda całkowania numerycznego\funckje.cpp(45): error C2039: 'atof': is not a member of 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>'
P-142502
carlosmay
» 2015-12-29 00:35:22
* liczba = atof( funckja.c_str() );
 
Czyli jeśli już chce koniecznie na wskaźniku muszę go usunąć przed return ?
 Niestety tak. Funkcja wykonuje się do słowa kluczowego return , dalej nigdy.
W tym przypadku zwolnienie pamięci przed return jest możliwe.
Po przypisaniu wartości spod wskaźnika do zmiennej 'x' można go zwolnić.
P-142503
Deivid
Temat założony przez niniejszego użytkownika
» 2015-12-29 00:40:54
Poprawiłem literówkę. Sprawa ma się tak:
f(x) = x*x+3
Dla wpisanej w programie:

Calkowanie numeryczne.

Podaj z jakiej metody skorzystac:
1.Prostokatow
2.Trapezow
3.Monte Carlo I
4.Monte Carlo II
5.Simpsona
Wybor: 1

Wybrales metode Prostokatow:
Wprowadz wartosc poczatkowa przedzialu: 3
Wprowadz wartosc koncowa przedzialu: 6
Wprowadz ilosc figur:5
Krok calkowania (wysokosc figury): 0.6
Wynik calkowania: 80.28
Press any key to continue . . .
poprzez:
*liczba = atof(funkcja.c_str());

Krok calkowania (wysokosc figury): 0.6
Wynik calkowania: 0
Press any key to continue . . .
Wkleiłem już krótszą wersję

Edit. Mogę przesłać kod programu, ale 430 linijek raczej Wam się nie będzie chciało czytać :) Wyczytałem że atof działa tylko dla liczb, nie odczytuje znaków dla działań.
P-142504
carlosmay
» 2015-12-29 00:51:18
Wynik calkowania: 0
 coś źle jest przypisane.
P-142505
Deivid
Temat założony przez niniejszego użytkownika
» 2015-12-29 00:56:24
Stworzyłem na szybko taki program, wykorzystując to co powyżej pisaliśmy:
C/C++
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

int main()
{
    double x = 3;
    double wynik1 = x * x + 3;
    string funkcja =( "x*x+3" );
    double wynik2 = atof( funkcja.c_str() );
    cout << "Wynik1: " << wynik1 << endl;
    cout << "Wynik2: " << wynik2 << endl;
    return 0;
}
Wynik jego działania:

Wynik1: 12
Wynik2: 0

Więc na pewno coś jest źle :)
Jeśli pod:
( "x*x+3" );
 wstawię np "333" to w wyniku2 pojawi mi się owa liczba. Tak więc to "atof" tutaj nie pasuje. Tylko co innego?
P-142506
carlosmay
» 2015-12-29 01:02:59
Wyczytałem że atof działa tylko dla liczb, nie odczytuje znaków dla działań.
 Funkcja przekształca tylko liczby zapisane jako łańcuch znaków na zmienną liczbową.
Podanie znaków innych powoduje, że funkcja zwraca wartość 0.
P-142508
« 1 » 2
  Strona 1 z 2 Następna strona