leti67 Temat założony przez niniejszego użytkownika |
tablica jednowymiarowa - problem z zamianą miejscami sąsiednich elementów w parach » 2019-01-07 23:47:19 Witam. Jestem mocno początkująca więc z góry przepraszam za błędy i być moze kiepsko czytelny kod. Do rzeczy... b) Tablicę wydrukować, przesunąć cyklicznie o 1 miejsce w lewo, i wydrukować ponownie. c) Następnie w tablicy tej zamienić miejscami sąsiednie elementy w kolejnych parach 0-1, 1-2, ... itd, jeśli pierwszy element z tej pary jest większy od drugiego. Wskazówka: w obu powyższych krokach należy zastosować zmienną pomocniczą jako tymczasowy schowek. d) Wydrukować tablicę po tej zmianie. Większość juz zrobiłam i działa. Mam problem z podpunktem c. Gdy wpisuje liczby rosnąco np 1,2,3,4 wszystko dziala jak nalezy ale jesli wpisze malejąco np 6,5,4,3 lub jakis inny dziwny ciag to zle wykonuje to dzialanie. Prosze o pomoc. #include <iostream>
using namespace std;
int main() { const int N { 4 }; int arr[ N ]; int minNumber; int maxNumber; int totalNumber { }; cout << "Wpisz " << N << " liczb calkowitych"; for( int i = 0; i < N; i++ ) { cin >> arr[ i ]; if( i == 0 ) { minNumber = arr[ i ]; maxNumber = arr[ i ]; } maxNumber = arr[ i ] > maxNumber ? arr[ i ]: maxNumber; minNumber = arr[ i ] < minNumber ? arr[ i ]: minNumber; totalNumber += arr[ i ]; } cout << "Najnizsza podana wartosc to: " << minNumber << "\nNajwyzsza podana wartosc to: " << maxNumber << "\n"; cout << "Roznica miedzy kolejnymi wartosciami tablicy a srednia wartoscia: "; double average = static_cast < double >( totalNumber ) / N; for( int i: arr ) { cout << static_cast < double >( i ) - average << ", "; } int temp { }; cout << "\nTablica: "; for( int i: arr ) { cout << i << ", "; } for( int i = 0; i < N; i++ ) { if( i == 0 ) { temp = arr[ 0 ]; arr[ i ] = arr[ i + 1 ]; } else if( i == N - 1 ) { arr[ i ] = temp; } else { arr[ i ] = arr[ i + 1 ]; } } cout << "\nTablica przesunieta o 1 miejsce w lewo: "; for( int i: arr ) { cout << i << ", "; } for( int i = 0; i < N - 1; i++ ) { if( arr[ i ] > arr[ i + 1 ] ) { temp = arr[ i ]; arr[ i ] = arr[ i + 1 ]; arr[ i + 1 ] = temp; } } cout << "\nTablica po jednorazowym sortowaniu: "; for( int i: arr ) { cout << i << ", "; } return 0; }
|
|
pekfos |
» 2019-01-07 23:52:32 Gdy wpisuje liczby rosnąco np 1,2,3,4 wszystko dziala jak nalezy ale jesli wpisze malejąco np 6,5,4,3 lub jakis inny dziwny ciag to zle wykonuje to dzialanie. |
Co to znaczy źle? Mi to wygląda dobrze. Dla 6, 5, 4, 3 faktyczny ciąg dla tej operacji to 5, 4, 3, 6, który parami porządkujesz rosnąco: (5, 4), 3, 6 4, (5, 3), 6 4, 3, (5, 6) |
|
leti67 Temat założony przez niniejszego użytkownika |
» 2019-01-07 23:55:49 Tak. Masz racje...jakos inaczej na to patrzylam i liczby w ogole mi sie nie pokrywaly. Dziekuje za wyjasnienie. |
|
pekfos |
» 2019-01-08 00:04:13 Jeśli tak ma być, to rozważaj rozłączne pary: czyli elementy 0-1, 2-3, 4-5, itd. W aktualnym kodzie masz przesunięcie o 1, więc 0-1, 1-2, 2-3, itd, więc jeśli pierwszy element jest największy, to zostanie przepchnięty na koniec sekwencji. |
|
leti67 Temat założony przez niniejszego użytkownika |
» 2019-01-08 00:06:41 Powinno być tak jak mowisz. Nie zauwazylam wczesniej w zadaniu ze mam rozwazac pary 0-1;1-2. Wiec kod kompiluje sie dobrze. Przepraszam - moj blad. I jeszcze raz dziekuje. |
|
« 1 » |