Pomoc przy sortowaniu tablicy
Ostatnio zmodyfikowano 2010-12-19 15:57
Marys Temat założony przez niniejszego użytkownika |
Pomoc przy sortowaniu tablicy » 2010-12-12 16:30:18 Witam, proszę o pomoc w pewnym programie. Program ma zamieniać pierwszy element parzysty z pierwszym nieparzystym, drugi element parzysty z drugim nieparzystym i tak dalej. Prezentuje to co udało mi się do tej pory zrobić:
#include <iostream.h> #include <conio.h> #include <iomanip.h>
const int n_max = 15; void czyt_dane( int & n, int Tab[] ); void pisz_tab( int n, int Tab[] ); void zamiana( int n, int Tab[] );
int main() { int n, A[ n_max ]; czyt_dane( n, A ); clrscr(); cout << "Wczytany ciag elementów:\n\n"; pisz_tab( n, A ); zamiana( n, A ); cout << "\n\nZmodyfikowany ciag elementow:\n\n"; pisz_tab( n, A );; getch(); return 0; }
void czyt_dane( int & n, int Tab[] ) { int i; cout << "Podaj rozmiar tablicy: "; cin >> n; cout << "\nPodaj elementy ciagu:\n\n"; for( i = 0; i < n; i++ ) { cout << "A[" << setw( 2 ) << i << "] = "; cin >> Tab[ i ]; } }
void zamiana( int n, int Tab[] ) { int i, Tab_2[ n_max ], tym; int i_p = 0, i_np = n - 1, l_p = 0, l_np = 0; for( i = 0; i < n; i++ ) { if( Tab[ i ] % 2 == 0 ) { Tab[ i_p ] = Tab[ i ]; cout << Tab[ i_p ] << '\t' << l_p << '\n'; } else { Tab[ i_np ] = Tab[ i ]; cout << Tab[ i_np ] << '\t' << l_np << '\n'; } } i_p = 0; i_np = n - 1; if( l_p >= l_np ) for( i = 1; i <= l_p; i++ ) { } else for( i = 1; i <= l_np; i++ ) { } }
void pisz_tab( int n, int Tab[] ) { int i; for( i = 0; i < n; i++ ) { cout << "A[" << setw( 2 ) << i << "] = " << Tab[ i ] << endl; } }
Mam problem z l_p i l_np bo jak zrobię w sprawdzaniu parzystości l_p=i oraz l_np=i to zwróci mi ostatnią wartość jakie otrzymało i. Nie wiem może to było dobrze... Siedzę na tym już drugi dzień i brakuje mi pomysłów. Proszę, POMOCY![/i] |
|
malan |
» 2010-12-12 18:49:50 Wstaw kod w [cpp][/cpp], a potem pogadamy. |
|
DejaVu |
» 2010-12-13 01:56:39 Program ma zamieniać pierwszy element parzysty z pierwszym nieparzystym, drugi element parzysty z drugim nieparzystym i tak dalej. |
for( int i = 0; i < rozmiarTablicy - 1; i += 2 ) zamien( tablica[ i ], tablica[ i + 1 ] );
Jeżeli masz na myśli indeksy parzyste/nieparzyste, a nie wartości to powyższa pętla Ci to załatwia. |
|
Marys Temat założony przez niniejszego użytkownika |
» 2010-12-13 02:48:59 Hmmmm... z indeksami byłoby za prosto. W funkcji zamień trzeba coś tam dopisać. |
|
DejaVu |
» 2010-12-13 03:00:12 Wiesz... ja Ci napisałem de'facto dokładnie to co sformułowałeś w pierwszym poście. Równie dobrze mógłbym napisać tak:
#include <vector> #include <algorithm>
int main() { std::vector < int > dane; for( long i = 0; i < static_cast < long >( dane.size() ) - 1; i += 2 ) std::swap( dane[ i ], dane[ i + 1 ] ); return 0; }
i to wszystko. Dokładnie to napisałeś, że chcesz aby Twój program zrealizował. Fakt - nie sortuje to danych - zmienia tylko ich porządek, jednak jest to dokładnie to co chciałeś uzyskać. |
|
Marys Temat założony przez niniejszego użytkownika |
» 2010-12-19 15:57:17 Dobra zaktualizowałem trochę kod: zamiana( n, A ); cout << "\n\nZmodyfikowany ciag elementow:\n\n"; pisz_tab( n, A );; getch(); return 0; }
void czyt_dane( int & n, int Tab[] ) { int i; cout << "Podaj rozmiar tablicy: "; cin >> n; cout << "\nPodaj elementy ciagu:\n\n"; for( i = 0; i < n; i++ ) { cout << "A[" << setw( 2 ) << i << "] = "; cin >> Tab[ i ]; } }
void zamiana( int n, int Tab[] ) { int i, Tab_2[ n_max ], tym; int i_p = 0, i_np = n - 1, l_p = 0, l_np = 0; for( i = 0; i < n; i++ ) { if( Tab[ i ] % 2 == 0 ) { Tab_2[ i_p ] = i; i_p++; l_p++; } else { Tab_2[ i_np ] = i; i_np--; l_np++; } }
i_p = 0; i_np = n - 1; if( l_p >= l_np ) for( i = 1; i <= l_p; i++ ) { } else for( i = 1; i <= l_np; i++ ) { } }
void pisz_tab( int n, int Tab[] ) { int i; for( i = 0; i < n; i++ ) { cout << "A[" << setw( 2 ) << i << "] = " << Tab[ i ] << endl; } }
i teraz w funkcji zamiana muszę jakoś zamieniać pierwszy element parzysty z drugim nieparzysty i nie mam pomysłu :/ |
|
« 1 » |