losowanie bez powtórzeń w dwóch wymiarach

0

mam program, który ma za zadanie wpisać liczby do kwadratu, tak aby nie powtarzały się.

#include <iostream>
#include <cstdlib>
#include <conio.h>

using namespace std;

int main()
{
    int temp, blad, roz_K, kwadrat;

    cout << "Podaj wielkosc boku kwadratu.\n";
    cin  >> roz_K;

    int tab[roz_K][roz_K];

    kwadrat = roz_K * roz_K;
    for(int i = 0; i < roz_K; i++)
        for(int j = 0; j < roz_K; j++)
            {
                do
                {
                    blad = 0;
                    temp = rand() % kwadrat + 1;
                    for(int k = 0; k < i; k++)
                        for(int l = 0; l < j; l++)
                            if(tab[k][l] == temp)
                                blad = 1;

                }   while(blad);

            tab[i][j] = temp;
            }

    system("cls");   
    for(int k = 0; k < roz_K; k++)
    {
        for(int l = 0; l < roz_K; l++)
            cout << tab[k][l] << " ";

        cout << endl;
    }

    getch();
    return 0;
}

Niestety coś jest nie tak. Program powtarza liczby ale tylko wtedy gdy identyczna liczba leży w innym rzędzie.

0
#include <iostream>
#include <cstdlib>

using namespace std;

bool value_exist(int** tab, size_t size,  int val) {
    for(size_t i = 0; i < size; ++i)
        for(size_t o = 0; o < size; ++o)
            if(tab[i][o] == val) return true;
    return false;
}

int main() {
    int temp, blad, roz_K, kwadrat;

    cout << "Podaj wielkosc boku kwadratu.\n";
    cin  >> roz_K;

    // int tab[roz_K][roz_K]; <-- tak się nie da (wg standardu)
    int** tab = new int*[roz_K];
    for(int i = 0; i < roz_K; ++i) tab[i] = new int[roz_K];

    kwadrat = roz_K * roz_K;
    for(int i = 0; i < roz_K; i++)
        for(int j = 0; j < roz_K; j++) {
            do {
                temp = rand() % kwadrat + 1;                
            } while(value_exist(tab, roz_K, temp));         
            tab[i][j] = temp;
        }

    system("cls");  
    for(int k = 0; k < roz_K; k++) {
        for(int l = 0; l < roz_K; l++)
            cout << tab[k][l] << " ";

        cout << endl;
    }

    for(int i = 0; i < roz_K; ++i) delete [] tab[i];
    delete [] tab;

    cin.sync();
    cin.get();
    return 0;
}

Powinno działać, ale ręki nie dam urwać bo pisane z głowy bez sprawdzenia.

0

Dzięki wielkie działa : ]

ale za każdym razem wypisuje ten sam wynik ; /

ok już wiem ... : ]
brakowało srand(time(NULL)); ; ]

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