xrtwo Temat założony przez niniejszego użytkownika |
Funkcja sort nie sortuje wektora. » 2011-03-30 13:44:51 for( int i = 0; i < n; i++ ) { cout << "Wektor nr " << i << ": " << wektor[ i ] << '\n'; }
sort( wektor.begin(), wektor.end() ); cout << '\n';
for( int j = 0; j < n; j++ ) { cout << "Wektor nr " << j << ": " << wektor[ j ] << '\n'; }
W pierwszej petli wypisuje: a w drugiej: Czyli 5.4 gdzies znika w przestrzen... Nie rozumiem o co chodzi. |
|
McAffey |
» 2011-03-30 14:26:13 Musisz mieć coś źle w części kodu którą się z nami nie podzieliłeś. Ja zrobiłem po prostu (nic nie zmieniając w tym co ty wrzuciłeś) : #include <iostream> #include <conio.h> #include <vector> #include <algorithm> using namespace std;
int main() { int n = 6; std::vector < double > wektor; wektor.push_back( 1.4 ); wektor.push_back( 1.4 ); wektor.push_back( 4.5 ); wektor.push_back( 4.9 ); wektor.push_back( 5.4 ); wektor.push_back( 5.1 ); for( int i = 0; i < n; i++ ) { cout << "Wektor nr " << i << ": " << wektor[ i ] << '\n'; } sort( wektor.begin(), wektor.end() ); cout << '\n'; for( int j = 0; j < n; j++ ) { cout << "Wektor nr " << j << ": " << wektor[ j ] << '\n'; } getch(); }
I poprawnie wypisuje. W pierwszej pętli : Wektor nr 0: 1.4 Wektor nr 1: 1.4 Wektor nr 2: 4.5 Wektor nr 3: 4.9 Wektor nr 4: 5.4 Wektor nr 5: 5.1 W drugiej pętli : Wektor nr 0: 1.4 Wektor nr 1: 1.4 Wektor nr 2: 4.5 Wektor nr 3: 4.9 Wektor nr 4: 5.1 Wektor nr 5: 5.4 |
|
xrtwo Temat założony przez niniejszego użytkownika |
» 2011-03-30 14:38:41 . |
|
McAffey |
» 2011-03-30 14:45:37 Podrzuć też od razu ten test.data . |
|
xrtwo Temat założony przez niniejszego użytkownika |
» 2011-03-30 14:47:11 5.1, 3.5, 1.4, 0.2, honda 4.9, 3.0, 1.4, 0.2, honda 6.4, 3.2, 4.5, 1.5, mazda 6.9, 3.1, 4.9, 1.5, mazda 6.2, 3.4, 5.4, 2.3, nissan 5.9, 3.0, 5.1, 1.8, nissan
|
|
McAffey |
» 2011-03-30 15:03:30 (tak dla ścisłości logi programu i tego typu rzeczy wstawiaj w tagi log /log) Masz w tym wektorze jeszcze jedną wartość. Jak zrobisz w pierwszej pętli i < n + 1 i w drugiej pętli j < n + 1 to już się poprawnie sortuje : Wektor nr 0: 5.1 Wektor nr 1: 4.9 Wektor nr 2: 6.4 Wektor nr 3: 6.9 Wektor nr 4: 6.2 Wektor nr 5: 5.9
Wektor nr 0: 4.9 Wektor nr 1: 5.1 Wektor nr 2: 5.9 Wektor nr 3: 6.2 Wektor nr 4: 6.4 Wektor nr 5: 6.9 edit: Poprawnie tzn wliczając też tą niechcianą wartość. |
|
xrtwo Temat założony przez niniejszego użytkownika |
» 2011-03-30 15:08:44 Nie zgadza się. Wektor nr 0: 1.4 Wektor nr 1: 1.4 Wektor nr 2: 4.5 Wektor nr 3: 4.9 Wektor nr 4: 5.4 Wektor nr 5: 5.1 Wektor nr 6: 5.1
Wektor nr 0: 1.4 Wektor nr 1: 1.4 Wektor nr 2: 4.5 Wektor nr 3: 4.9 Wektor nr 4: 5.1 Wektor nr 5: 5.1 Wektor nr 6: 5.4
Po dodaniu 1 do n w obu petlach. Co to znaczy że mam dodatkową wartośc w wektorze? do wektora jest wpisywana cała kolumna czyli 6 liczb. wektor 0 -5 |
|
McAffey |
» 2011-03-30 15:14:18 Nie wiem na co ty patrzysz (masz inne wartości niż ja), ja patrzę na to co jest pod cout << "TEST" << '\n'; . Dla rozwiania niepewności kod mam : #include <iostream> #include <fstream> #include <vector> #include <string> #include <cmath> #include <algorithm> #include <conio.h>
using namespace std;
double arytmetyczna( vector < double >& x ) { vector < double > tmp( x ); int n = tmp.size() - 1; double suma = 0; for( int j = 0; j < n; j++ ) { suma += tmp[ j ]; } return suma / n; }
double harmoniczna( vector < double >& x ) { vector < double > tmp( x ); int n = tmp.size() - 1; double suma = 0; for( int i = 0; i < n; i++ ) { tmp[ i ] = 1.0 *( 1 / tmp[ i ] ); suma = suma + tmp[ i ]; } return n / suma; }
double geometryczna( vector < double >& x ) { vector < double > tmp( x ); int n = tmp.size() - 1; double iloczyn = 1; for( int i = 0; i < n; i++ ) { iloczyn *= tmp[ i ]; } return pow( iloczyn,( 1./ n ) ); }
double mediana( vector < double >& x ) { vector < double > tmp( x ); int n = tmp.size() - 1; sort( tmp.begin(), tmp.end() ); if( n % 2 ) return tmp[( n + 1 ) / 2 - 1 ]; else return 0.5 *( tmp[ n / 2 - 1 ] + tmp[ n / 2 ] ); }
double dominanta( vector < double >& x ) { vector < double > tmp( x ); int n = tmp.size() - 1; sort( tmp.begin(), tmp.end() ); double maxc = 0; double maxw = tmp[ 0 ] - 1; int c; double w; for( int i = 0; i < n - maxc; i++ ) { w = tmp[ i ]; if( w != maxw ) { c = 1; for( int j = i + 1; j < n; j++ ) if( w == tmp[ j ] ) c++; if( c > maxc ) { maxc = c; maxw = w; } } } return maxw; }
double centralne( vector < double >& x, int s ) { vector < double > tmp( x ); int n = tmp.size() - 1; sort( tmp.begin(), tmp.end() ); double suma = 0; for( int i = 0; i < n; i++ ) suma += pow(( tmp[ i ] - arytmetyczna( tmp ) ), s ); return( suma / n ); }
double odchylenie( vector < double >& x ) { vector < double > tmp( x ); int n = tmp.size() - 1; sort( tmp.begin(), tmp.end() ); double suma = 0; for( int i = 0; i < n; i++ ) suma += pow(( tmp[ i ] - arytmetyczna( tmp ) ), 2 ); return sqrt( suma / n ); }
int main() { cout.precision( 4 ); double liczba1, liczba2, liczba3, liczba4; ifstream plik; vector < double > wektor; plik.open( "test.data", ios::in ); if( plik.is_open() == false ) { cerr << "Nie mozna otworzyc pliku." << endl; return 1; } cout << "Plik otwarty." << endl; while( plik.good() ) { char znak; plik >> liczba1 >> znak; plik >> liczba2 >> znak; plik >> liczba3 >> znak; plik >> liczba4 >> znak; string linia; getline( plik, linia ); wektor.push_back( liczba1 ); } int n = wektor.size() - 1; cout << "Srednia arytmetyczna: " << arytmetyczna( wektor ) << '\n'; cout << "Srednia harmoniczna: " << harmoniczna( wektor ) << '\n'; cout << "Srednia geometryczna: " << geometryczna( wektor ) << '\n'; cout << "Mediana: " << mediana( wektor ) << '\n'; cout << "Dominanta: " << dominanta( wektor ) << '\n'; cout << "Moment k=1: " << centralne( wektor, 1 ) << '\n'; cout << "Moment k=2: " << centralne( wektor, 2 ) << '\n'; cout << "Moment k=3: " << centralne( wektor, 3 ) << '\n'; cout << "Odchylenie: " << odchylenie( wektor ) << '\n' << '\n' << '\n'; cout << "TEST" << '\n'; for( int i = 0; i < n + 1; i++ ) { cout << "Wektor nr " << i << ": " << wektor[ i ] << '\n'; } sort( wektor.begin(), wektor.end() ); cout << '\n'; for( int j = 0; j < n + 1; j++ ) { cout << "Wektor nr " << j << ": " << wektor[ j ] << '\n'; } plik.close(); getch(); return 0; } W pliku test.data mam wartości : 5.1, 3.5, 1.4, 0.2, honda 4.9, 3.0, 1.4, 0.2, honda 6.4, 3.2, 4.5, 1.5, mazda 6.9, 3.1, 4.9, 1.5, mazda 6.2, 3.4, 5.4, 2.3, nissan 5.9, 3.0, 5.1, 1.8, nissan I to daje rezultat Plik otwarty. Srednia arytmetyczna: 5.9 Srednia harmoniczna: 5.796 Srednia geometryczna: 5.848 Mediana: 5.9 Dominanta: 4.9 Moment k=1: 0 Moment k=2: 0.356 Moment k=3: -0.0504 Odchylenie: 0.5967
TEST Wektor nr 0: 5.1 Wektor nr 1: 4.9 Wektor nr 2: 6.4 Wektor nr 3: 6.9 Wektor nr 4: 6.2 Wektor nr 5: 5.9
Wektor nr 0: 4.9 Wektor nr 1: 5.1 Wektor nr 2: 5.9 Wektor nr 3: 6.2 Wektor nr 4: 6.4 Wektor nr 5: 6.9 A ja patrzę tylko na część zatytułowaną TEST. |
|
« 1 » 2 |