zwracanie przez funkcję kilku wartości
Ostatnio zmodyfikowano 2015-11-20 16:51
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? |
|
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. |
|
Filippo9669 Temat założony przez niniejszego użytkownika |
» 2015-11-20 12:39:26 ten kod jest ok? 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; 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; } |
|
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<> | std::vector < int > ve; wczytanie( ve ); int maksimum = najwiekszy( ve );
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 ]; }
|
|
carlosmay |
» 2015-11-20 13:22:12 nie. int tmp1; int * tab1 = new int[ tmp1 ];
tmp1 = i;
for( int i = 0; i <= sizeof( tab ); i++ ) { if( tab[ i ] > najw ) najw = tab[ i ]; else najw; }
edit: do rozwiązania z 'std::vector' musisz dodać dwa pliki nagłówkowe #include <vector> #include <algorithm>
|
|
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. |
|
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. |
|
1 « 2 » |