Guest User

Untitled

a guest
Apr 28th, 2020
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. /*
  2. program do generowania tablicy 9x9
  3. wypełnionej kwadratami 3x3
  4. w której żadna z cyfr 1-9 nie będzie sie powtarzała
  5. pionowo, poziomo, ani w kwadracie 3x3
  6. */
  7. //includy
  8. #include <stdio.h> // standardowa biblioteka
  9. #include <cstdlib> // srand, rand do losowania
  10. #include <time.h> // daje wartosci z ktorych mozna losowac
  11.  
  12. int detekcja_pola(int x, int y);
  13.  
  14. // funkcja glowna
  15. int main()
  16. {
  17.  
  18. // deklaracja zmiennych
  19. int tablica[9][9]; // tworzy tablice 9x9
  20. int rzad, kolumna, k; // zmienne do petli for
  21. int licznik = 0; // licznik wykrzaczen programu
  22. int kwadrat = 0; // detekcja w ktorym kwadracie znajduje sie liczba
  23. int x; // bufor między wylosowaniem, a wstawieniem liczby do tablicy
  24. int wartosci_kwadratu[9][9]; // liczby z poszczegolnych kwadratow
  25. bool stop; // sprawdza czy liczba wylosowala sie poprawnie
  26. int ilosc_prob = 0; // ile prob potrzeba bylo
  27.  
  28. //zerowanie
  29. for (rzad = 0; rzad < 9; rzad++) { // jechanie po rzedach
  30. for (kolumna = 0; kolumna < 9; kolumna++) // jechanie po kolumnach
  31. tablica[rzad][kolumna] = 0; // ustawia wartosc na 0
  32. }
  33.  
  34. // zainicjowanie losowania
  35. srand(time(NULL));
  36.  
  37.  
  38. for (rzad = 0; rzad < 9; rzad++) {
  39. for (kolumna = 0; kolumna < 9; kolumna++) {
  40. do {
  41. stop = true; // domyslna wartosc to true
  42. x = rand() % 9 + 1; // wylosuj liczbe i wrzuc do zmiennej x
  43. // sprawdzaj od drugiej kolumny
  44. for (k = 0; k < kolumna; k++) { // jedz po poprzednich kolumnach
  45. if (x == tablica[rzad][k]) // jezeli gdzies sie powtorzy poziomo
  46. stop = false; // szukaj na nowo
  47. }
  48.  
  49. if (stop) { // jezeli nie przerwalo w poprzednim statemencie
  50. for (k = 0; k < rzad; k++) // to teraz jedz po rzedach
  51. if (x == tablica[k][kolumna]) // jezeli gdzies sie powtorzy pionowo
  52. stop = false; // szukaj na nowo
  53. }
  54. if (stop) { // jezeli nie przerwalo w poprzednim statemencie
  55. kwadrat = detekcja_pola(rzad, kolumna); // sprawdz w ktorym kwadracie aktualnie jestesmy
  56. wartosci_kwadratu[kwadrat][(kolumna % 3 + rzad * 3) % 9] = x; // i wpisz do tablicy wartosci_kwadratu
  57.  
  58. for (k = 0; k < (kolumna % 3 + rzad * 3) % 9; k++) // jedz po kolumnach wartosci_kwadratu
  59. if (x == wartosci_kwadratu[kwadrat][k]) // jezeli gdzies sie powtorzy
  60. stop = false; // szukaj dalej
  61. }
  62. licznik++; // zwieksz licznik obrotu petli
  63. if (licznik > 1000) { // jezeli naliczy 1000
  64. licznik = 0; // zresetuj wszystko bo program sie zawiesił
  65. rzad = 0; // resetowanie wierszy
  66. kolumna = 0; // resetowanie kolumn
  67. break; // resetowanie wyszukiwania całej tablicy
  68. }
  69. } while (!stop); // szukaj dopoki nie wypelnisz elementu
  70. tablica[rzad][kolumna] = x; // jezeli nic nie przerwalo to to zapisz
  71. } // powtorz dla kazdego elementu w wierszu
  72. } // powtorz dla kazdego wiersza
  73.  
  74. // wypisanie tablicy
  75. for (rzad = 0; rzad < 9; rzad++) { // jedz po rzedach
  76. for (kolumna = 0; kolumna < 9; kolumna++) // jedz po kolumnach
  77. printf("%d ", tablica[rzad][kolumna]); // wypisz kazdy element tablicy
  78. printf("\n"); // idz do kolejnego wiersza
  79. }
  80. return 0; // koniec programu
  81. }
  82.  
  83. int detekcja_pola(int x, int y) { // sprawdzenie ktory to kwadrat 3x3 metodą ,,na chama"
  84. int kwadrat=0;
  85. if ((x >= 0 && x <= 2) && (y >= 0 && y <= 2)) {
  86. kwadrat = 0;
  87. }
  88. if ((x >= 3 && x <= 5) && (y >= 0 && y <= 2)) {
  89. kwadrat = 3;
  90. }
  91. if ((x >= 6 && x <= 8) && (y >= 0 && y <= 2)) {
  92. kwadrat = 6;
  93. }
  94. if ((x >= 0 && x <= 2) && (y >= 3 && y <= 5)) {
  95. kwadrat = 1;
  96. }
  97. if ((x >= 3 && x <= 5) && (y >= 3 && y <= 5)) {
  98. kwadrat = 4;
  99. }
  100. if ((x >= 6 && x <= 8) && (y >= 3 && y <= 5)) {
  101. kwadrat = 7;
  102. }
  103. if ((x >= 0 && x <= 2) && (y >= 6 && y <= 8)) {
  104. kwadrat = 2;
  105. }
  106. if ((x >= 3 && x <= 5) && (y >= 6 && y <= 8)) {
  107. kwadrat = 5;
  108. }
  109. if ((x >= 6 && x <= 8) && (y >= 6 && y <= 8)) {
  110. kwadrat = 8;
  111. }
  112. return kwadrat;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment