basted123 Temat założony przez niniejszego użytkownika |
Poziom 5, Lekcja 43 - Wskaźniki » 2019-06-26 19:14:09 Cześć udało mi się napisać PD lecz nie wiem czy o to do końca chodziło. Od dłuższego czasu uczę się C++, wcześniej C, lecz wskaźniki to dla mnie trochę pięta achillesowa Oto mój kod: #include <iostream>
using namespace std;
void sortuj( int * begin, int * end ) { int size = end - begin; for( int i = 0; i < size; ++i ) { for( int j = 0; j < size - 1; j++ ) { if( begin[ j ] < begin[ j + 1 ] ) swap( begin[ j ], begin[ j + 1 ] ); } } }
void wypisz( int * begin, int size ) { while( size > 0 ) { cout << * begin << ' '; begin++; size--; } }
int main() { int tab[ 10 ] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 }; sortuj( tab, tab + 10 ); wypisz( tab, 10 ); cout << '\n'; int tab2[ 16 ] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1, - 100 }; sortuj( tab2, tab2 + 15 ); wypisz( tab2, 15 ); }
*Edit A i jeszcze taki mały mankament, funkcja sortuje od największej do najmniejszej, a w podanym wyniku od najmniejszej do największej, ale to już jest mały szczegół. |
|
pekfos |
» 2019-06-26 20:29:49 Do końca na pewno nie o to chodziło, w końcu było napisane postaraj się uniknąć przechodzenia na wskaźnik na początek i ilość elementów.
|
Twoje rozwiązanie też jest poprawne, ale jak masz problemy ze wskaźnikami, to każda okazja jest dobra żeby ten problem rozwiązywać. |
|
basted123 Temat założony przez niniejszego użytkownika |
Dobrze? » 2019-06-27 16:39:38 O taką funkcje sortującą chodziło ? void sortuj( int * begin, int * end ) { int size = end - begin; for( int i = 0; i < size; ++i ) { for( int * p = begin; p != end - 1; p++ ) { if( * p < *( p + 1 ) ) swap( * p, *( p + 1 ) ); } } }
|
|
wojcioo |
» 2019-07-26 23:22:51 Funkcja nie przechodzi testu z liczbą -100 w tablicy... Bardzo proszę wskazówki :) #include <iostream> #include <ctime> #include <cmath> #include <cstring> #include <time.h> #include <windows.h> using namespace std;
void sortuj( int * begin, int * end ) { int n = * end - * begin; int zm; for( int i = 0; i < n; i++ ) { for( int * j = begin; j < end; j++ ) { if( *( j + 1 ) <* j ) { zm = * j; * j = *( j + 1 ); *( j + 1 ) = zm; } } } }
void wypisz( int * begin, int size ) { while( size > 0 ) { std::cout << * begin << ' '; ++begin; --size; } } int main() { int tab[ 10 ] = { 0, 9, 1, 3, 8, 2, 6, 7, 5, 4 }; sortuj( tab, tab + 10 ); wypisz( tab, 10 ); std::cout << '\n'; int tab2[ 16 ] = { 9, 7, 8, 6, 5, 4, 4, 0, 9, 6, 7, 1, 6, 3, 1, - 100 }; sortuj( tab2, tab2 + 15 ); wypisz( tab2, 15 ); return 0; }
|
|
pekfos |
» 2019-07-27 00:31:28 Za dużo liczb sortujesz. |
|
wojcioo |
» 2019-07-27 00:48:02 Niestety nie rozumiem podpowiedzi, kombinowałem z warunkami pętli i instrukcji if na różne sposoby, działa jak należy jak usunę minusa, próbowałem funkcją swap i efekt ten sam, zgłupiałem :) |
|
pekfos |
» 2019-07-27 01:02:25 działa jak należy jak usunę minusa |
Nie działa jak należy. Co najwyżej nie możesz zaobserwować, że działa błędnie. -100 jest poza zakresem, który masz posortować. |
|
nanoant20 |
» 2019-07-27 09:55:29 @wojcioo w funkcji void sortuj int n = * end - * begin;
int n = end - begin; w int main() zobacz jak robisz z tab[ 10 ] i to samo zrób z tab2[ 16 ] |
|
« 1 » 2 |