rottingham Temat założony przez niniejszego użytkownika |
R. 43 - prośba o sprawdzenie zadania domowego » 2019-01-28 01:47:39 Cześć! Udało mi się rozwiązać zadanie domowe z rozdziału 43. Mam ogromną prośbę o sprawdzenie czy wszystko jest wykonane poprawnie a przede wszystkim prosiłbym o jakiekolwiek uwagi dotyczące kodu. Czy na obecnym poziomie mogę to zrobić z mniejszą ilością zmiennych? void sortuj( int * begin, int * end ) { int iElementow = end - begin; int i = 0; int j = 1; int k = 0; int l; while( j < iElementow ) { if( *( begin + j ) < *( begin + i ) ) { i = 0 + j; } j++; if( j == iElementow ) { l = *( begin + i ); *( begin + i ) = *( begin + k ); *( begin + k ) = l; k++; i = k; j = k + 1; } } }
|
|
pekfos |
» 2019-01-28 08:52:45 Czy na obecnym poziomie mogę to zrobić z mniejszą ilością zmiennych? |
Wewnątrz sortuj() postaraj się uniknąć przechodzenia na wskaźnik na początek i ilość elementów. |
Co znaczy nie używaj indeksów. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-01-30 17:01:07 Czyli nie można w ogóle używać dereferencji, która jest równoważna z operatorem indeksowania? |
|
pekfos |
» 2019-01-30 18:12:56 Nie da się nic zrobić z danymi bez dereferencji. Gdy wyznaczasz ilość elementów, nie wykorzystujesz wiedzy o wskaźnikach. Używasz ich wtedy po prostu jak tablicy ze znanym rozmiarem. Zadanie nie mówi, żebyś nie używał operatora indeksowania, bo takie wymaganie można by łatwo oszukać, tak jak to zrobiłeś. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-01-30 18:23:02 Czyli muszę całkowicie przeformułować warunek pętli i ta linia kodu int iElementow = end - begin; nie ma prawa bytu w poprawnie wykonanym zadaniu? |
|
pekfos |
» 2019-01-30 18:26:46 Jedyna zmienna int jest potrzebna do zamiany liczb miejscami. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-02-06 16:07:20 Cóż... Wracam do tematu od kilku dni i nie do końca rozumiem co i z czym. Udało mi się napisać funkcję, która znajduje najniższą liczbę. Proszę tylko o jedną odpowiedź: czy idę dobry tropem? void sortuj( int * begin, int * end ) { int nLiczba = * begin; do { if( nLiczba > * end ) { nLiczba = * end; * end = * begin; if( * begin < nLiczba ) continue; else * begin = nLiczba; } end--; } while( end != begin ); cout << nLiczba << endl; cout << endl; for( int i = 0; i < 10; i++ ) cout << begin[ i ] << endl; }
int main() { int tab[ 10 ] = { - 19, - 13, 6, 4, - 10, 7, 6, 3, 4, - 17 }; sortuj( tab, tab + 10 ); }
EDIT. Usunąłem z kodu zmienną int i jako niepotrzebną. |
|
pekfos |
» 2019-02-06 17:26:09 Przekraczasz zakres tablicy, odwołując się do elementu po adresem end. Jak w sumie ma działać ten twój algorytm? Nie tracisz przypadkiem informacji przez te niepełne zamienianie elementów? Udało mi się napisać funkcję, która znajduje najniższą liczbę. |
I gdzie masz tę funkcję? |
|
« 1 » 2 3 4 |