Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- program do generowania tablicy 9x9
- wypełnionej kwadratami 3x3
- w której żadna z cyfr 1-9 nie będzie sie powtarzała
- pionowo, poziomo, ani w kwadracie 3x3
- */
- //includy
- #include <stdio.h> // standardowa biblioteka
- #include <cstdlib> // srand, rand do losowania
- #include <time.h> // daje wartosci z ktorych mozna losowac
- int detekcja_pola(int x, int y);
- // funkcja glowna
- int main()
- {
- // deklaracja zmiennych
- int tablica[9][9]; // tworzy tablice 9x9
- int rzad, kolumna, k; // zmienne do petli for
- int licznik = 0; // licznik wykrzaczen programu
- int kwadrat = 0; // detekcja w ktorym kwadracie znajduje sie liczba
- int x; // bufor między wylosowaniem, a wstawieniem liczby do tablicy
- int wartosci_kwadratu[9][9]; // liczby z poszczegolnych kwadratow
- bool stop; // sprawdza czy liczba wylosowala sie poprawnie
- int ilosc_prob = 0; // ile prob potrzeba bylo
- //zerowanie
- for (rzad = 0; rzad < 9; rzad++) { // jechanie po rzedach
- for (kolumna = 0; kolumna < 9; kolumna++) // jechanie po kolumnach
- tablica[rzad][kolumna] = 0; // ustawia wartosc na 0
- }
- // zainicjowanie losowania
- srand(time(NULL));
- for (rzad = 0; rzad < 9; rzad++) {
- for (kolumna = 0; kolumna < 9; kolumna++) {
- do {
- stop = true; // domyslna wartosc to true
- x = rand() % 9 + 1; // wylosuj liczbe i wrzuc do zmiennej x
- // sprawdzaj od drugiej kolumny
- for (k = 0; k < kolumna; k++) { // jedz po poprzednich kolumnach
- if (x == tablica[rzad][k]) // jezeli gdzies sie powtorzy poziomo
- stop = false; // szukaj na nowo
- }
- if (stop) { // jezeli nie przerwalo w poprzednim statemencie
- for (k = 0; k < rzad; k++) // to teraz jedz po rzedach
- if (x == tablica[k][kolumna]) // jezeli gdzies sie powtorzy pionowo
- stop = false; // szukaj na nowo
- }
- if (stop) { // jezeli nie przerwalo w poprzednim statemencie
- kwadrat = detekcja_pola(rzad, kolumna); // sprawdz w ktorym kwadracie aktualnie jestesmy
- wartosci_kwadratu[kwadrat][(kolumna % 3 + rzad * 3) % 9] = x; // i wpisz do tablicy wartosci_kwadratu
- for (k = 0; k < (kolumna % 3 + rzad * 3) % 9; k++) // jedz po kolumnach wartosci_kwadratu
- if (x == wartosci_kwadratu[kwadrat][k]) // jezeli gdzies sie powtorzy
- stop = false; // szukaj dalej
- }
- licznik++; // zwieksz licznik obrotu petli
- if (licznik > 1000) { // jezeli naliczy 1000
- licznik = 0; // zresetuj wszystko bo program sie zawiesił
- rzad = 0; // resetowanie wierszy
- kolumna = 0; // resetowanie kolumn
- break; // resetowanie wyszukiwania całej tablicy
- }
- } while (!stop); // szukaj dopoki nie wypelnisz elementu
- tablica[rzad][kolumna] = x; // jezeli nic nie przerwalo to to zapisz
- } // powtorz dla kazdego elementu w wierszu
- } // powtorz dla kazdego wiersza
- // wypisanie tablicy
- for (rzad = 0; rzad < 9; rzad++) { // jedz po rzedach
- for (kolumna = 0; kolumna < 9; kolumna++) // jedz po kolumnach
- printf("%d ", tablica[rzad][kolumna]); // wypisz kazdy element tablicy
- printf("\n"); // idz do kolejnego wiersza
- }
- return 0; // koniec programu
- }
- int detekcja_pola(int x, int y) { // sprawdzenie ktory to kwadrat 3x3 metodą ,,na chama"
- int kwadrat=0;
- if ((x >= 0 && x <= 2) && (y >= 0 && y <= 2)) {
- kwadrat = 0;
- }
- if ((x >= 3 && x <= 5) && (y >= 0 && y <= 2)) {
- kwadrat = 3;
- }
- if ((x >= 6 && x <= 8) && (y >= 0 && y <= 2)) {
- kwadrat = 6;
- }
- if ((x >= 0 && x <= 2) && (y >= 3 && y <= 5)) {
- kwadrat = 1;
- }
- if ((x >= 3 && x <= 5) && (y >= 3 && y <= 5)) {
- kwadrat = 4;
- }
- if ((x >= 6 && x <= 8) && (y >= 3 && y <= 5)) {
- kwadrat = 7;
- }
- if ((x >= 0 && x <= 2) && (y >= 6 && y <= 8)) {
- kwadrat = 2;
- }
- if ((x >= 3 && x <= 5) && (y >= 6 && y <= 8)) {
- kwadrat = 5;
- }
- if ((x >= 6 && x <= 8) && (y >= 6 && y <= 8)) {
- kwadrat = 8;
- }
- return kwadrat;
- }
Advertisement
Add Comment
Please, Sign In to add comment