Jak przeniesc zmienne miedzy niepowiazanymi funkcjami?
Ostatnio zmodyfikowano 2015-11-09 01:01
TandK Temat założony przez niniejszego użytkownika |
Jak przeniesc zmienne miedzy niepowiazanymi funkcjami? » 2015-11-08 10:31:17 Dzien dobry Chcialem rozwinac program o mozliwosc liczenia miejsca zerowego dla F(x) wybieranej z menu wielokrotnego wyboru. Niestety napotkalem na problem przekazania zmiennej jaka uzylem w jednej funkcji programu do innej. Wiem, ze zmienne "zyja" w obrebie jednej funkcji, nie chce tez deklarowac zmiennej globalnej o ile to mozliwe. Oto kod mojego programu - ktory oczywiscie nie dziala, z funkcji (float main) zmienna (int menu) - powinna ustawiac zmienna wbyoru do switch (int war_menu)w funkcji (int wartosc_funkcji) tak aby odwolujac sie do niej z poziomu funkcji (float funkcja_bisekcji) wiedziala ona z ktorego switch ma korzystac #include "iostream" #include "math.h" #include "cmath" #include "conio.h" #define _USE_MATH_DEFINES using namespace std;
float wartosc_funkcji( float x ) { float wartosc; int war_menu = int( float main( int_menu ) ); switch( war_menu ) { case 1: { wartosc =( exp( - 1.5 * x ) -( 0.3 * pow( x, 2 ) ) ); break; } case 2: { x =( x * 3.14 ) / 180; wartosc =(( sin( x ) * cos( x ) ) +( 5 * x ) + 1 ); break; } default: break; } return wartosc; }
float funkcja_bisekcji( float a, float b, float dokladnosc ) { float c; int k = 0; do { k = k++; c =( b + a ) / 2; if( wartosc_funkcji( c ) < 0 ) a = c; else b = c; } while( abs( wartosc_funkcji( c ) ) >( dokladnosc ) ); cout << "ilosc krokow !k! = " << k << endl; cout << "wypisany z funkcji pierwiastek = " << c << endl; return c; }
float main() { float p, q; float dokladnosc; float miejsce_zerowe; int menu; cout << "Podaj dolna granice przedzialu: "; cin >> p; cout << "Podaj gorna granice przedzialu: "; cin >> q; cout << "Podaj dokladnosc: "; cin >> dokladnosc; cout << "Jaka funkcje chcesz obliczac: " << endl; cout << "1. Funkcja exp" << endl; cout << "2. Funkcja tryg" << endl; cin >> menu; if(( wartosc_funkcji( p ) * wartosc_funkcji( q ) ) < 0 ) cout << "Miejsce zerowe funkcji x = " << funkcja_bisekcji( p, q, dokladnosc ); else cout << "Funkcja nie ma miejsca zerowego w podanym przedziale lub nie jest ciagla" << endl; system( "pause" ); return 0; }
|
|
wojownik266 |
» 2015-11-08 10:54:06 Na początek proponowałbym umiescić wszystkie pliki nagłówkowe w nawiasach ostrych np: itd. |
|
carlosmay |
» 2015-11-08 11:19:21 |
|
TandK Temat założony przez niniejszego użytkownika |
» 2015-11-08 11:53:25 liczylem na nieco bardziej rozbudowana wypowiedz, no ale forum to w koncu nie miejsce do szukania pomocy ale pokazania jakim to sie jest "super" Czasami mozna cos przeczytac tysiac razy i nie zauwazyc bledu, trzeba aby ktos go pokaza i cos wytlumaczyl. Moze kiedys jak bede nieco bardziej zaawansowany postaram sie tutaj powymadrzac na razie widze nie mam czego szukac Zmienilem podejscie do pisania tego programu - wyglada ze dziala, ale taki uklad jest dosc skomlikowany, wolalbym wybierac funkcje do obliczen z menu wyboru #include <iostream> #define _USE_MATH_DEFINES #include <math.h> #include <cmath> #include <conio.h>
using namespace::std;
float wartosc_funkcji1( float x ) { float wartosc; wartosc = exp( - 1.5 * x ) - 0.3 * pow( x, 2 ); return wartosc; }
float wartosc_funkcji2( float x ) { float wartosc; wartosc =( sin( x ) * cos( x ) ) +( 5 * x ) + 1; return wartosc; }
float wartosc_funkcji3( float x ) { float wartosc; wartosc =( M_PI - pow( x, 2 ) + sin( x ) ) /( sqrt( 25 - x ) ); return wartosc; }
float funkcja_bisekcji( float a, float b, float dokladnosc, float funkcja( float x ) ) { float c; int k = 0; do { k = k++; c =( b + a ) / 2; if( funkcja( c ) < funkcja( b ) && funkcja( c ) > 0 ) b = c; else a = c; } while( abs( funkcja( c ) ) > dokladnosc ); cout << "ilosc krokow k = " << k << endl; cout << "pierwiastek = " << c << endl; return c; }
float main() { float p, q; float dokladnosc; float miejsce_zerowe; int menu; cout << "Podaj dolna granice przedzialu (deg dla funkcji tryg): "; cin >> p; cout << "Podaj gorna granice przedzialu (deg dla funkcji tryg): "; cin >> q; cout << "Podaj dokladnosc: "; cin >> dokladnosc; cout << "Jaka funkcje chcesz obliczac: " << endl; cout << "1. Funkcja exp" << endl; cout << "2. Funkcja tryg1" << endl; cout << "3. Funkcja tryg2" << endl; cin >> menu; switch( menu ) { case 1: { if(( wartosc_funkcji1( p ) * wartosc_funkcji1( q ) ) < 0 ) cout << "Miejsce zerowe funkcji x = " << funkcja_bisekcji( p, q, dokladnosc, wartosc_funkcji1 ); else cout << "Funkcja nie ma miejsca zerowego w podanym przedziale lub nie jest ciagla" << endl; break; } case 2: { if(( wartosc_funkcji2( p ) * wartosc_funkcji2( q ) ) < 0 ) cout << "Miejsce zerowe funkcji x = " << funkcja_bisekcji( p, q, dokladnosc, wartosc_funkcji2 ); else cout << "Funkcja nie ma miejsca zerowego w podanym przedziale lub nie jest ciagla" << endl; break; } case 3: { if(( wartosc_funkcji3( p ) * wartosc_funkcji2( q ) ) < 0 ) cout << "Miejsce zerowe funkcji x = " << funkcja_bisekcji( p, q, dokladnosc, wartosc_funkcji3 ); else cout << "Funkcja nie ma miejsca zerowego w podanym przedziale lub nie jest ciagla" << endl; break; } } system( "pause" ); return 0; } |
|
FatecCpp |
» 2015-11-08 23:39:48 Ogólnie mam dwie propozycje, jak już piszesz w c++ polecam nauczyć się klas i struktur o wiele upraszczaja zabawę z językiem :) Ale jeśli nie chcesz mieć zmiennych globalnych to stwórz zmienną w obrębie danego bloku, najprościej w main i na liście argumentów funkcji ustaw referencje do tej zmiennej. Dzięki temu możesz używać tej zmiennej w każdej funkcji w której będzie argument z referencja. |
|
carlosmay |
» 2015-11-09 01:01:41 float zamień na double double ma większą precyzję. float używaj gdy nie jest wymagana precyzja obliczeń. Jak działa przekazywanie wartości do funkcji i między nimi. #include <iostream> #include <conio.h> using namespace::std;
void fun1( int b ) { cout << "fun1: b = " << b << " (przekazanie przez wartosc)" << endl; b += 5; cout << "w funkcji b = " << b << endl; }
void fun2( int & c ) { cout << "fun2: c = " << c << " (przekazanie przez referencje.)" << endl; c += 5; cout << "w funkcji c = " << c << endl; }
void fun3( int & c ) { cout << "fun3: c = " << c << " (przekaznie przez raferencje)" << endl; c += 5; cout << "w funkcji c = " << c << endl; cout << "wywolanie fun2 w fun3:" << endl; fun2( c ); }
int main() { int b = 0; int c = 0; fun1( b ); cout << "Po powrocie z funkcji b = " << b << endl; cout << endl; fun3( c ); cout << "Po powrocie do main() c = " << c << endl; _getch(); }
|
|
« 1 » |