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

zwracanie przez funkcję kilku wartości

Ostatnio zmodyfikowano 2015-11-20 16:51
Autor Wiadomość
Filippo9669
Temat założony przez niniejszego użytkownika
» 2015-11-20 12:22:45
ok, ok, prawda. jeszcze jedno, jak mogę policzyć, ile jest elementów w moim pliku?
P-140426
carlosmay
» 2015-11-20 12:35:49
Dodaj licznik do pętli wczytującej z pliku i niech liczy ile operacji wczytywania wykona do końca pliku.
P-140427
Filippo9669
Temat założony przez niniejszego użytkownika
» 2015-11-20 12:39:26
ten kod jest ok?

C/C++
int * wczytanie1()
{
    int tmp1;
    int * tab1 = new int[ tmp1 ];
    int i = 0;
   
    ifstream plik1;
    plik1.open( "liczby1.txt" );
   
   
   
    while( !plik1.eof() )
    {
        plik1 >> tab1[ i ];
        cout << tab1[ i ] << endl;
        i++;
    }
    tmp1 = i;
   
    plik1.close();
   
   
    return( tab1 );
}


int najwiekszy( int tab[] )
{
    int najw; /*zmienna do przechowywania najwiekszego elementu*/
    najw = tab[ 0 ];
    for( int i = 0; i <= sizeof( tab ); i++ )
    {
        if( tab[ i ] > najw ) najw = tab[ i ];
        else najw;
       
    }
   
   
    return najw;
}

int main()
{
    int * tab1 = wczytanie1();
    int mymax = najwiekszy( tab1 );
   
    cout << endl << endl << "najwieksza liczba to: " << mymax << endl << endl;
    system( "pause" );
    return 0;
}
P-140428
carlosmay
» 2015-11-20 13:09:37
Jeśli dane oddzielone są spacją, to policz ile masz spacji,
albo policz operacje wczytywania z pliku, bez zapisu do tablicy.
Później zrób to samo dla już ustalonej wielkości tablicy.

Najlepiej w tym przypadku uzyj std::vector<>
 
C/C++
// main()
std::vector < int > ve;
wczytanie( ve );
int maksimum = najwiekszy( ve );

// funkcje
void wczytanie( std::vector < int >& ve ) {
    ifstream plik1;
    plik1.open( "liczby1.txt" );
    int temp;
    while( !plik1.eof() )
    {
        plik1 >> temp;
        ve.push_back( temp );
    }
    plik1.close();
    size_t rozmiar = ve.size();
}

int najwiekszy( std::vector < int >& ve ) {
    sort( ve.begin(), ve.end() );
    return ve[ ve.size() - 1 ];
}
P-140431
carlosmay
» 2015-11-20 13:22:12
ten kod jest ok?
 nie.
C/C++
int tmp1;
int * tab1 = new int[ tmp1 ]; // rozmiar tablicy ma jakas przypadkowa wartosc
// tutaj wczytujesz dane z pliku
tmp1 = i; // a tutaj dopiero nadajesz wartosc zmiennej 'tmp1'???

C/C++
for( int i = 0; i <= sizeof( tab ); i++ )
{
    if( tab[ i ] > najw ) najw = tab[ i ];
    else najw; // to nic nie robi i jest calkowicie zbedne
   
}

edit:
do rozwiązania z 'std::vector' musisz dodać dwa pliki nagłówkowe
C/C++
#include <vector>
#include <algorithm>
P-140432
Filippo9669
Temat założony przez niniejszego użytkownika
» 2015-11-20 13:38:19
wielkie dzięki!
jak rozumiem, push_back przypisuje na kolejne miejsca od końca, czyli na początku na pozycję n, potem n-1, n-2, n-3...
dlaczego zwracam rozmiar wektora pomniejszony o 1? ma to wiązek z
sort( ve.begin(), ve.end() );
?

jeszcze raz stokrotne dzięki. muszę poświęcić trochę czasu na bibliotekę vector.
P-140434
carlosmay
» 2015-11-20 16:51:09
Do 'std::vector' można dobrać się jak do zwykłej tablicy i indeksowanie jest tak samo od zera,
czyli metoda '*.size()' zwraca ilość elementów to ostatni element jest '*.size() - 1'.

dlaczego zwracam rozmiar wektora pomniejszony o 1? ma to wiązek z sort( ve.begin(), ve.end() );?
 tak. Sortowanie standardowo wykonywane jest rosnąco( chyba, że dodamy predykat), więc element maks jest na końcu.
P-140447
1 « 2 »
Poprzednia strona Strona 2 z 2