przesunięcie cykliczne o jedno w prawo - tablica

0

Potrzebuję małej pomocy.
Jeśli pierwsza liczba tabeli w danym wierszu jest większa od średniej to przesuń cały wiersz o jeden w prawy.
Udało mi się zamienić ostatnią z pierwszą liczbą. Próbuję dopisać tu for, ale jak je dopiszę to drukuje mi się cały czas tablica w konsoli i to jeszcze źle.

         if (tab[x][0] > srednia)
         {
             /*temp = tab[x][K-1];
             for (x=K-1; x>0; x--)
             tab[x][0] = tab[x-1][0];
             tab[x][0] = temp; */

             temp = tab[x][K-1];
             tab[x][K-1] = tab[x][0];
             tab[x][0] = temp;
         }
1

Masz w standardzie std::rotate.

#include <algorithm>
#include <iostream>
#include <iterator>
 
int main() {
    int v[] = {1, 2, 3, 4};
    std::rotate(std::rbegin(v), std::rbegin(v)+1, std::rend(v));
    std::copy(std::begin(v), std::end(v), std::ostream_iterator<int>(std::cout, " "));
}
0
temp = tab[x][y];
tab[x][y] = tab[x][y-1];
tab[x][y-1] = temp;

??? potrzebuję zrobić to za pomocą for, muszę przenieść każdy indeks tablicy o jedną w prawo — bifed85954 dziś, 19:38

i w czym problem? podałem jak na tacy, trzeba tylko sobie wdrożyć.
Zalecam jakąś dobrą książkę sobie kupić lub pożyczyć i się zacząć uczyć.

#include <iostream>
#include <iomanip>      //setw

using namespace std;

int main()
{
    static constexpr int average = 10, n = 5;
    bool checking[ n ] = {false};
    
    int tab[n][n] = { { 20, 4, 7, 9, 5 },
        { 3, 4, 7, 9, 5 },
        { 31, 4, 7, 9, 5 },
        { 9, 4, 7, 9, 5 },
        { 18, 4, 7, 9, 5 }
    };

    for(int i = 0; i < n; ++i)
    {
        for(int j = 0; j < n; ++j)
        {
            cout<<setw(4)<<std::setfill(' ')<<right<<tab[i][j]<<" ";
            if(tab[i][0]>average)checking[i]+=true;
        }
        cout << "\n";
    }
    cout << "\n";

    for (int i = 0; i < n; ++i)
    {
        for(int j = 0; j < n; ++j)
        {
            if(checking[i]==true)
            {
                int tmp = tab[i][j];
                tab[i][j] = tab[i][n - 1];
                tab[i][n - 1] = tmp;
            }
            cout<<setw(4)<<std::setfill(' ')<<right<<tab[i][j]<<" ";
        }
        cout << '\n';
    }
    return 0;
}

1
int tb[] = {1, 2, 3, 4};
int size=sizeof(tb)/sizeof(*tb);
for(int i=0,k=1;i<size;++i,(++k)%=size) swap(i[tb],k[tb]);  // wersja 1

for(int i=0,k=size-1;i<size;k=i++) swap(i[tb],k[tb]);  // wersja 2

0

W tym if (tab[x][0] > srednia) napisałem tak:

            for (x=W-1; x>0; x--)
            {
                tab[x] = tab[x-1];
            }
            tab[x][0] = temp;

Lecz wyrzuca mi błąd podczas kompilacji.
39|error: invalid conversion from 'int*' to 'int' [-fpermissive]|
42|error: invalid array assignment|

Nie mam pojęcia co robię źle.
Zrobiłem przesunięcie na zupełnie nowym projekcie i wszystko fajnie działa.

#include <ctime>
#include <iomanip>

using namespace std;

int main()
{
    const int N = 9;
    int tab[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, temp;

    //wyswietla tablice
    for (int x=0; x<N; x++)
        cout << setw(5) << tab[x];
    
    //przesuniecie o 1 w prawo
    temp = tab[N-1];
    for (int x=N-1; x>0; x--){
        tab[x] = tab[x-1];}
    tab[0] = temp;

    cout << endl;
    
    //wyswietla tablice po przesunieciu
    for (int x=0; x<N; x++)
        cout << setw(5) << tab[x];

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1