Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

tablica jednowymiarowa - problem z zamianą miejscami sąsiednich elementów w parach

Ostatnio zmodyfikowano 2019-01-08 00:06
Autor Wiadomość
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.

C/C++
#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;
}
P-173455
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)
P-173456
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.
P-173457
pekfos
» 2019-01-08 00:04:13
Powinno być 4,5,3,6
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.
P-173458
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.
P-173459
« 1 »
  Strona 1 z 1