| koot Temat założony przez niniejszego użytkownika | Przesunięcie elementów tablicy w lewo i w prawo  » 2017-11-01 00:15:00 Cześć! Mam do napisania program, który ma przesunąć nieparzyste elementy tablicy na lewą stronę, a parzyste na prawą. Próbowałem czegoś takiego:
 
 int tab [8]={1,2,3,4,5,6,7,8};
 for(int i=0;i <=7; i++)
 {
 if (tab[i]%2==0) swap(tab[i], tab[i+1]);
 }
 
 Ale nie działa to poprawnie i w sumie nie wiem, dlaczego. Pewnie jest to banalne do napisania, ale jestem początkujący i mnie to przerasta. Ktoś pomoże?
 | 
|  | 
| Kinexity | » 2017-11-01 00:40:17 Utwórz nową tablicę i wkładaj elementy nieparzyste od przodu, a parzyste od tyłu. | 
|  | 
| YooSy | » 2017-11-01 00:41:18 | 
|  | 
| koot Temat założony przez niniejszego użytkownika | » 2017-11-01 07:57:23 Nie mogę utworzyć nowej tablicy. Jednym z wymogów zadania jest to, by modyfikować tę już istniejącą. | 
|  | 
| Monika90 | » 2017-11-01 09:22:09 #include <iostream>#include <algorithm>
 #include <iterator>
 
 int main()
 {
 int tab[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
 std::partition( std::begin( tab ), std::end( tab ),[]( auto x ) { return x % 2; } );
 for( const auto & x: tab )
 std::cout << x << ' ';
 
 }
 
Albo std::stable_partition  jeżeli względna kolejność elementów (nie)parzystych ma być zachowana. | 
|  | 
| koot Temat założony przez niniejszego użytkownika | » 2017-11-01 11:27:58 @Monika90 W ogóle nie rozumiem tego kodu. Chyba yba jest za skomplikowany dla mnie. Powinienem to zrobić jakimś prostym przesunięciem, tylko nie wiem jak.. | 
|  | 
| YooSy | » 2017-11-01 13:01:28 void partition( int * first, int * last ){
 while( * first % 2 && first != last ) ++first;
 
 if( first == last ) return;
 
 for( int * i = first + 1; i != last + 1; ++i ) {
 if( * i % 2 ) {
 std::swap( * i, * first );
 ++first;
 }
 }
 }
 
 int tab[ 8 ] = { 1, 2, 3, 4, 5, 6, 7, 8 };
 partition( tab, tab + 7 );
 
Tak mniej więcej działa std::partition .std::partitionstd::stable_partition | 
|  | 
| koot Temat założony przez niniejszego użytkownika | » 2017-11-01 14:55:26 @YooSy Działa niemal idealnie :) | 
|  | 
| « 1 »  2 |