Informatika2-2012/Hazi04

A MathWikiből
(Változatok közti eltérés)
(A kód amit ki kell egészíteni)
 
65. sor: 65. sor:
 
}
 
}
  
/* kell még néhány függvény... */
+
void ures_tabla() {
 +
    /* ezt is meg kell írni... */
 +
}
 +
 
 +
/* és kell még néhány függvény... */
  
 
int main() {
 
int main() {
87. sor: 91. sor:
 
}
 
}
 
</c>
 
</c>
 
  
 
===== Segítség a teszteléshez =====
 
===== Segítség a teszteléshez =====

A lap jelenlegi, 2012. március 2., 23:23-kori változata

4. házi feladat: Sudoku megoldását segítő kis program

A Sudoku egy számkitöltögetős játék, amit általában 9x9-es táblán játszanak.

A feladat, hogy egészítsd ki a lenti C kódot (legalább) hat függvénnyel, melyek a következő feladatokat végzik el:

  • kitölti a táblát 0 értékekkel (void ures_tabla() , ez már meg is van hívva a main()-ben)
  • eldönti hogy egy adott sorban szerepelhet-e egy adott érték (vagyis hogy nincs még ott olyan)
  • eldönti hogy egy adott oszlopban szerepelhet-e egy adott érték (vagyis hogy nincs még ott olyan)
  • egy pozícióhoz (sor, oszlop) meghatározza annak a 3x3-as kis négyzetnek a határait, amibe az tartozik. (itt mivel több értéket kellene egyszerre visszaadni, használj mutatót paraméterként!)
  • eldönti hogy egy adott pozíción szerepelhet-e egy adott érték a pozícióhoz tartozó 3x3-as négyzetben levő számokat tekintve (vagyis hogy nincs még ott olyan) (használd az előző függvényt)
  • eldönti hogy egy adott pozícióban(sor és oszlop) szerepelhet-e egy adott érték (int lehet_e_itt(int ertek, int sor, int oszlop) , ez használja az előzőeket)

Nem kötelező, de a main() függvényt kiegészítheted azzal, hogy érvénytelen bemenet (1-nél kisebb vagy 9-nél nagyobb értékek) esetén 'H' betűt írjon ki.


A kód amit ki kell egészíteni
#include <stdio.h>
 
int tabla[9][9];
 
/*
A tábla: 
5 3 0 0 7 0 0 0 0
6 0 0 1 9 5 0 0 0
0 9 8 0 0 0 0 6 0
8 0 0 0 6 0 0 0 3
4 0 0 8 0 3 0 0 1
7 0 0 0 2 0 0 0 6
0 6 0 0 0 0 2 8 0
0 0 0 4 1 9 0 0 5
0 0 0 0 8 0 0 7 9
*/
void tabla_kitolt() {
    tabla[0][0] = 5;
    tabla[0][1] = 3;
    tabla[0][4] = 7;
    tabla[1][0] = 6;
    tabla[1][3] = 1;
    tabla[1][4] = 9;
    tabla[1][5] = 5;
    tabla[2][1] = 9;
    tabla[2][2] = 8;
    tabla[2][7] = 6;
    tabla[3][0] = 8;
    tabla[3][4] = 6;
    tabla[3][8] = 3;
    tabla[4][0] = 4;
    tabla[4][3] = 8;
    tabla[4][5] = 3;
    tabla[4][8] = 1;
    tabla[5][0] = 7;
    tabla[5][4] = 2;
    tabla[5][8] = 6;
    tabla[6][1] = 6;
    tabla[6][6] = 2;
    tabla[6][7] = 8;
    tabla[7][3] = 4;
    tabla[7][4] = 1;
    tabla[7][5] = 9;
    tabla[7][8] = 5;
    tabla[8][4] = 8;
    tabla[8][7] = 7;
    tabla[8][8] = 9;
}
 
void ures_tabla() {
    /* ezt is meg kell írni... */
}
 
/* és kell még néhány függvény... */
 
int main() {
    ures_tabla();
    tabla_kitolt();
    int ertek = 0;
    int sor, oszlop;
    printf("Sudoku segito program.\nSzokozokkel elvalasztva ird be a kerdeses erteket, a sort es az oszlopot(mindegyik ertek 1 - 9 kozotti lehet)! Ha szerepelhet az adott helyen az ertek akkor 'I'-t, ha nem akkor 'N'-et irok ki.\nHa a kapott keresendo ertek 0 akkor kilepek.\n");
    do {
        scanf("%d %d %d", &ertek, &sor, &oszlop);
        if (ertek > 0 && ertek < 10) {
            if ( /* lehet_e_itt(...) függvény hívása */) {
                printf("I\n");
            } else {
                printf("N\n");
            }
        }
    }
    while (ertek > 0);
    return 0;
}
Segítség a teszteléshez

Néhány bemenet és elvárt kimenet pár:

 1 1 1 -> I
 1 2 9 -> N
 7 1 1 -> N
 7 2 2 -> I
Személyes eszközök