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

Zapisanie do pliku .txt kilku wartosci powoduje koniecznosc ponownego podania parametrow

Ostatnio zmodyfikowano 2016-07-06 15:23
Autor Wiadomość
carlosmay
» 2016-07-06 11:47:49
Uzycie & nic nie dalo, czyli zle go uzywam.
Tablica = Array ?

Przykładu użycia tablicy w funkcjach + wypełnianie zmiennej w funkcji (użycie referencji):
C/C++
#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;
}

// funkcja zwraca wypełnioną tablicę
array < int, 3 > getArray()
{
    std::array < int, 3 > arr;
    for( size_t i = 0; i < 3; ++i ) {
        arr[ i ] = getData();
    }
    return arr;
}

// funkcja wypełnia przekazaną tablicę (&)
void fillArray( array < int, 2 >& arr )
{
    for( size_t i = 0; i < arr.size(); ++i ) {
        arr[ i ] = getData();
    }
}

// funkcja wypełnia zmienną (&)
void fillValue( int & value )
{
    value = getData();
}

int main()
{
    array < int, 3 > arr1 = getArray(); // skopiowanie wartości zwracanych
    for( int el: arr1 ) {
        cout << el << ' ';
    }
    cout << "\n\n";
   
    array < int, 2 > arr2;
    fillArray( arr2 ); // wypełnianie tablicy
    for( int el: arr2 ) {
        cout << el << ' ';
    }
    cout << "\n\n";
   
    int value;
    fillValue( value ); // wypełnianie zmiennej
    cout << value << '\n';
}

input:
1 2 3 4 5 6

output:

1 2 3

4 5

6
P-149718
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)) ===|
P-149721
michal11
» 2016-07-06 12:52:46
Brakuje
#include <limits>
P-149722
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.
P-149723
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()
C/C++
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 ];
P-149728
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 ?
P-149730
carlosmay
» 2016-07-06 15:23:58
Czy dobrze rozumiem ?
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.

C/C++
long double latticeConstantCalculation( int h, int k, int l ) //calculate the constant
{
    long double d = latticeSpacing();
    long double a;
    a = sqrt(( pow( h, 2 ) + pow( k, 2 ) + pow( l, 2 ) ) *( pow( d, 2 ) ) ); //proper equation
    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.
P-149731
1 « 2 »
Poprzednia strona Strona 2 z 2