carlosmay |
» 2016-07-06 11:47:49 Uzycie & nic nie dalo, czyli zle go uzywam. |
Przykładu użycia tablicy w funkcjach + wypełnianie zmiennej w funkcji (użycie referencji): #include <array> #include <iostream> using namespace std;
int getData() { int data; while( !( cin >> data ) ) { cout << "error input data\n"; cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } return data; }
array < int, 3 > getArray() { std::array < int, 3 > arr; for( size_t i = 0; i < 3; ++i ) { arr[ i ] = getData(); } return arr; }
void fillArray( array < int, 2 >& arr ) { for( size_t i = 0; i < arr.size(); ++i ) { arr[ i ] = getData(); } }
void fillValue( int & value ) { value = getData(); }
int main() { array < int, 3 > arr1 = getArray(); for( int el: arr1 ) { cout << el << ' '; } cout << "\n\n"; array < int, 2 > arr2; fillArray( arr2 ); for( int el: arr2 ) { cout << el << ' '; } cout << "\n\n"; int value; fillValue( value ); cout << value << '\n'; }
input: 1 2 3 4 5 6 output: 1 2 3
4 5
6
|
|
AterVulpes Temat założony przez niniejszego użytkownika |
» 2016-07-06 12:49:38 Probowalem skompilowac ten kod i nie dziala (Code::Blocks 16.01 z wlaczonym c++11 w ustawieniach kompilatora), fakepath jest moje. Ale postaram sie poznac, co powoduje wziecie samej wprowadzonej wartosci bez koniecznosci odpalania f-cji ponownie. ||=== Build: Release in 1 (compiler: GNU GCC Compiler) ===| fakepath\main.cpp||In function 'int getData()':| fakepath\main.cpp|11|error: 'numeric_limits' was not declared in this scope| fakepath\main.cpp|11|error: expected primary-expression before '>' token| fakepath\main.cpp|11|error: no matching function for call to 'max()'| fakepath\main.cpp|11|note: candidates are:| C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algobase.h|217|note: template<class _Tp> const _Tp& std::max(const _Tp&, const _Tp&)| C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algobase.h|217|note: template argument deduction/substitution failed:| fakepath\main.cpp|11|note: candidate expects 2 arguments, 0 provided| C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algobase.h|261|note: template<class _Tp, class _Compare> const _Tp& std::max(const _Tp&, const _Tp&, _Compare)| C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stl_algobase.h|261|note: template argument deduction/substitution failed:| fakepath\main.cpp|11|note: candidate expects 3 arguments, 0 provided| ||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
|
|
michal11 |
» 2016-07-06 12:52:46 Brakuje #include <limits> |
|
AterVulpes Temat założony przez niniejszego użytkownika |
» 2016-07-06 12:58:55 Fakt, teraz dziala.
Ale przyklad jest troche zbyt zaawansowany dla mnie. Zostawie go sobie na pozniej. Na razie musze sie nauczyc jak wziac wprowadzona wielkosc z funkcji i dac ja do innej funkcji tak, zeby nie uruchamiac jej przy kazdym zadaniu w/w wielkosci. |
|
carlosmay |
» 2016-07-06 13:42:02 Na razie musze sie nauczyć jak wziac wprowadzona wielkość z funkcji i dać ja do innej funkcji tak, żeby nie uruchamiać jej przy każdym zadaniu w/w wielkości. |
Wszystko jest w przykładzie. Do pobrania wartości do zmiennej val używasz getData()void doSomething( int & value ) { value += 10; }
int main() { int val; val = getData(); cout << val << '\n'; doSomething( val ); cout << val << '\n'; }
array < int, 3 > arr1; to tablica w wygodnym opakowaniu int arr1[ 3 ]; |
|
AterVulpes Temat założony przez niniejszego użytkownika |
» 2016-07-06 15:14:08 Czyli zeby pobrac wartosc z innej funkcji, powinienem stworzyc dla kazdej funkcji funkcje get(), ktora dziala, kiedy cin>> dziala i funkcje fill(), ktora ja wprowadzi na zadanie. Czy dobrze rozumiem ? |
|
carlosmay |
» 2016-07-06 15:23:58 Nie. Przykład przedstawia komunikację między funkcjami. Funkcja pobierająca raz od użytkownika wartość do zmiennej, i później działanie na tej zmiennej. Nic więcej. Musisz połapać ten mechanizm, aby pisać wygodnie i czytelnie. long double latticeConstantCalculation( int h, int k, int l ) { long double d = latticeSpacing(); long double a; a = sqrt(( pow( h, 2 ) + pow( k, 2 ) + pow( l, 2 ) ) *( pow( d, 2 ) ) ); return a; }
int main() { int h = millerIndexH(); int k = millerIndexK(); int l = millerIndexL(); long double d = latticeSpacing(); long double a = latticeConstantCalculation( h, k, l );
Użycie referencji w tym przypadku nie ma znaczenia, bo zmienne nie są modyfikowane. |
|
1 « 2 » |