Informatika2-2012/Hazi04

A MathWikiből
(Változatok közti eltérés)
a (Segítség a teszteléshez)
1. sor: 1. sor:
=== 4. házi feladat: Sudoku megoldását segítő kis program ===
+
== 4. házi feladat: Sudoku megoldását segítő kis program ==
  
 
A [http://hu.wikipedia.org/wiki/Sz%C3%BAdoku Sudoku] egy számkitöltögetős játék, amit általában 9x9-es táblán játszanak.
 
A [http://hu.wikipedia.org/wiki/Sz%C3%BAdoku Sudoku] egy számkitöltögetős játék, amit általában 9x9-es táblán játszanak.
12. sor: 12. sor:
  
 
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.
 
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 =====
 +
<c>
 +
#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;
 +
}
 +
 +
/* 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;
 +
}
 +
</c>
  
  

A lap 2012. március 2., 23:22-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;
}
 
/* 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