[C++] String na double (funkcja matematyczna)
Ostatnio zmodyfikowano 2015-12-29 01:18
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ę: double funkcja_calkujaca( double x ) { double * liczba = new double; * liczba = x * x + 3; x = * liczba; return x; delete liczba; }
wiem że można to zapisać w krótszej postaci jak np. 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: * liczba = string::atof( funckja.c_str() );
jednak wywala błędy, co poradzicie? |
|
carlosmay |
» 2015-12-29 00:18:56 double * liczba = new double;
return x; delete liczba;
jednak wywala błędy, co poradzicie? |
Jakie błędy? |
|
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>>'
|
|
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ć. |
|
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ń. |
|
carlosmay |
» 2015-12-29 00:51:18 Wynik calkowania: 0 coś źle jest przypisane. |
|
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: #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? |
|
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. |
|
« 1 » 2 |