Dlaczego nie przypisuje wartości do tablicy

0

Witam,
Mam taką prostą pentle

  for ( int s=0; s<3; s++ )
            {
            for ( int d=0; d<3; d++ )
                {
                tablica.push_back(tablica2[s][d]);
                }
            }

jak sprawdzam czy s i d się zmienia to jest ok, Natomiast jak sprawdzam "tablica" to przypisuje mi tylko 3 liczby i tak 3 razy. wydawało by się, że powinno przypisywać ich 9 ??
Z tablicy dwuwymiarowej chce przypisywać po 9 liczb do jednowymiarowej....
Jak poprawnie zapisać taki kod, już brak mi pomysłów....

2

Daj cały kod bo to nie jest forum dla jasnowidzów.
Stawiam na to, że tablica2 jest wypełniona powtarzającymi się wartościami.

0
MarekR22 napisał(a):

Daj cały kod bo to nie jest forum dla jasnowidzów.
Stawiam na to, że tablica2 jest wypełniona takimi samymi wartościami.

bool MKw( vector < vector <int> > tablica2 )
{
int l1,l2;
vector <int> tablica;
for ( int x=0; x<9; x++ )
    {
        if ( x<3 )
        l1=0;
        if ( x>2 && x<6 )
        l1=3;
        if ( x>5 )
        l1=6;
        if ( x==0 || x==3 || x==6 )
        l2=0;
        if ( x==1 || x==4 || x==7 )
        l2=3;
        if ( x==2 || x==5 || x==8 )
        l2=6;
        for ( int s=l1; s<l1+3; s++ )
            {
            for ( int d=l2; d<l2+3; d++ )
                {
                tablica.push_back(tablica2[s][d]);
                }
            }
       tablica.clear();
    }
return true;
}

czyli jak mam tablice dwuwymiarową

123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678

to w jednowymiarowej dostaję
123123123 a powinno być 123234345
456456456 a powinno być 456567678
itd.

1

Natomiast jak sprawdzam "tablica" to przypisuje mi tylko 3 liczby i tak 3 razy. wydawało by się, że powinno przypisywać ich 9 ??

Z opisu nie wynika, czym stan zastany różni się od stanu zamierzonego — trzy liczby po trzy razy to dziewięć liczb.

Z tablicy dwuwymiarowej chce przypisywać po 9 liczb do jednowymiarowej....

Jeśli masz dostęp do C++20, to może być coś dla Ciebie: https://en.cppreference.com/w/cpp/ranges/join_view

2

Pamiętaj o znacznikach kodu:

marek8383 napisał(a):
bool MKw( vector < vector <int> > tablica2 )
{
int l1,l2;
vector <int> tablica;
for ( int x=0; x<9; x++ )
    {
        if ( x<3 )
        l1=0;
        if ( x>2 && x<6 )
        l1=3;
        if ( x>5 )
        l1=6;
        if ( x==0 || x==3 || x==6 )
        l2=0;
        if ( x==1 || x==4 || x==7 )
        l2=3;
        if ( x==2 || x==5 || x==8 )
        l2=6;
        for ( int s=l1; s<l1+3; s++ )
            {
            for ( int d=l2; d<l2+3; d++ )
                {
                tablica.push_back(tablica2[s][d]);
                }
            }
       tablica.clear();
    }
return true;
}
0

Daj prawdziwy kod, bo ten NIC NIE ROBI!
Zwraca tylko true.
Na dodatek kompilator ostrzega: https://godbolt.org/z/d7YedYPsq

I jeszcze przecież pisałem wyraźnie:

MarekR22 napisał(a):

Stawiam na to, że tablica2 jest wypełniona powtarzającymi się wartościami.

Jak ten kod ma to wyjaśnić?

0
MarekR22 napisał(a):

Daj prawdziwy kod, bo ten NIC NIE ROBI!
Zwraca tylko true.
Na dodatek kompilator ostrzega: https://godbolt.org/z/d7YedYPsq

I jeszcze przecież pisałem wyraźnie:

MarekR22 napisał(a):

Stawiam na to, że tablica2 jest wypełniona powtarzającymi się wartościami.

Jak ten kod ma to wyjaśnić?

Dzięki,
Wyszedłem się przewietrzyć i już sobie poradziłem.... Dzieki Tobie przeleciałem resztę kodu i miałem czeski błąd.... tak długo męczyłem, że niezauważyłem...

Jak ktoś potrzebuje to takie przypisywanie działa :)

0

co za kaskada "akademickich, nieużytecznych, bezcelowych, bezsensownych, zbytecznych yfów"

#include <iostream>
#include <vector>
#include <random>
#include <iomanip>

using namespace std;

void InBox(int boxStartRow, int boxStartCol, vector<vector<int>> &vec)
{
    for (int row = 0; row < 3; row++) {
        for (int col = 0; col < 3; col++) {
            cout << vec[row+boxStartRow][col+boxStartCol]<< ' ';
            }
        cout << '\n';
    }
}

int main()
{
    constexpr int first=1, last=9, N=9;
    std::random_device rd;
    std::default_random_engine engine(rd());
    std::uniform_int_distribution<int> dist(first,last);
    vector<vector<int>>vec;
    vec.reserve(N);
    for(uint16_t m{0}; m<N; ++m) {
        vector<int> tmp;
        for(uint16_t n{0}; n<N; ++n) {
            int value = dist(engine);
            tmp.push_back(value);
        }
        vec.push_back(tmp);
        tmp.clear();
    }
    cout << '\n';
    for (uint16_t m{0}; m<vec.size(); ++m) {
        for (uint16_t n{0}; n<vec[m].size(); ++n)
        {
            cout<<setw(4)<<std::setfill(' ')<<right<<vec[m][n]<<" ";
        }
        cout<<"\n\n";
    }

    cout << '\n';
    for (uint16_t m = 0; m < vec.size(); m+=3) {
        for (uint16_t n = 0; n < vec.size(); n+=3) {
            InBox(m,n,vec);cout<<"\n";
        }
        cout<<"\n";
    }
    return 0;
}


1
        if ( x<3 )
        l1=0;
        if ( x>2 && x<6 )
        l1=3;
        if ( x>5 )
        l1=6;

jest równoznaczne z: l1=3*(x/3);

        if ( x==0 || x==3 || x==6 )
        l2=0;
        if ( x==1 || x==4 || x==7 )
        l2=3;
        if ( x==2 || x==5 || x==8 )
        l2=6;

jest równoznaczne z: l2=3*(x%3);

0
void row(int Y,const vector<vector<int>> &sudoku)
{
    for(int x=0;x<9;++x) cout<<(","+!x)<<suboku[Y][x];
}
void col(int X,const vector<vector<int>> &sudoku)
{
    for(int y=0;y<9;++y) cout<<(","+!y)<<suboku[y][X];
}
void box(int B,const vector<vector<int>> &sudoku)
{
    for(int Y=3*(B/3),X=3*(B%3),y=0;y<3;++y) for(int x=0;x<3;++x) cout<<(","+!y)<<suboku[Y+y][X+x];
}
void diag(int D,const vector<vector<int>> &sudoku)
{
    for(int y=0;y<9;++y) cout<<(","+!y)<<suboku[y][D?9-1-x:x];
}

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