PDA

Visualizza la versione completa : [C] Gioco del Sudoku


francesco87
22-11-2007, 19:16
:ciauz: sto cercando di fare un programma che faccia questo:
Scrivere un programma che controlli se una matrice `e una
soluzione ammissibile per il gioco del Sudoku, Il gioco `e il seguente:
1. viene data una matrice 9x9, riempita con numeri da 1 a 9.
2. la matrice `e suddivisa in 9 sottomatrici quadrate 3x3.
2
3. occorre verificare che sia rispettato il seguente vincolo: ogni riga, colonna e
ogni sottomatrice 3x3 deve contenere TUTTI e SOLI i numeri da 1 a 9.
Input: Il metodo main legger`a 81 interi (compresi tra 1 e 9) da tastiera e li
inserir`a nella matrice. L’inserimento viene e ettuato scorrendo la matrice riga per
riga (dalla 0 alla 8) ed ogni riga `e scandita colonna per colonna (dalla 0 alla 8).
Quindi saranno riempite nell’ordine le caselle (0,0) (0,1) (0,2) . . . (0,8), poi (1,0) (1,1)
. . . (1,8), e cos`ı via. Verr`a poi richiamata la funzione da implementare che prender`a
in input tale matrice e restituir`a 1 se la matrice rispetta i vincoli, 0 altrimenti.
Suggerimento: non dovete inserire ogni volta tutti gli interi, se ad esempio scrivete i
vostri 81 valori in un file:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
potete reindirizzate tale file come input per il vostro programma. Se, dopo la compi-
lazione, generate il programma sudoku.out ed il vostro file di dati si chiama dati.txt,
scrivendo:
./sudoku.out < dati.txt
il file dati.txt viene dato in input al vostro programma (come se inseriste gli 81
elementi da tastiera). Ovviamente sudoku.out e dati.txt devono trovarsi nella stessa
directory. Questa cosa funziona sotto Linux, non so se potete fare qualcosa del genere
con DevC++.
Output: La funzione restituir`a 1 se la matrice rispetta i vincoli, 0 altrimenti.
Nel metodo main verr`a stampato tale valore.

Purtroppo il programma che ho fatto non mi stampa ne 0 ne 1. (Inoltre conoscete un metodo più rapido, con dev c++, di inserire 81 numeri?). Qualcuno può dirmi l'errore?
ecco il programma:

#include <stdio.h>
#include <stdlib.h>

int funzione(int b[9][9]);
int main()
{
int n, r, c;
int b[9][9];

for(r = 0; r < 9; r++){
for(c = 0; c < 9; c++){
scanf("%d", n);
b[r][c] = n;
}}
int funzione(int b);
}
int funzione (int b[9][9])
{
int d, e, f, g, h, r, c;
for(r = 0; r < 9; r++){
for(c = 0; c < 9; c++){
if(b[r][c] == b[r + 1][c])
d++;
}}

for(c = 0; c < 9; c++){
for(r = 0; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 0; c < 3; c++){
for(r = 0; r < 3; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 4; c < 6; c++){
for(r = 0; r < 3; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 7; c < 9; c++){
for(r = 0; r < 3; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 0; c < 3; c++){
for(r = 4; r < 6; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 4; c < 6; c++){
for(r = 4; r < 6; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 7; c < 9; c++){
for(r = 4; r < 6; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 0; c < 3; c++){
for(r = 7; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 4; c < 6; c++){
for(r = 7; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

for (c = 7; c < 9; c++){
for(r = 7; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}

if(d == 0)
printf("1");
else
printf("0");
}

ntd
24-11-2007, 00:23
Non ho controllato tutto il programma, ma ci sono canne già dalle prime linee. Ti modifico fino al main() (che è una funzione, non un metodo), in modo che almeno ti richiami la funzione "funzione" (originale con i nomi, neee):



#include <stdio.h>
#include <stdlib.h>

int funzione(int **b);

int main()
{
int n, r, c;
int b[9][9];

for(r = 0; r < 9; r++){
for(c = 0; c < 9; c++){
scanf("%d", &n);
b[r][c] = n;
}
}

funzione(b);
}

int funzione (int **b)
...

newentry
15-04-2008, 18:11
vorrei sapere se è la stessa cosa dire matrice o Array ?

i linguaggi di programmazione sono uguali ? ActionScript e il [C] ?

mondobimbi
15-04-2008, 18:24
array in italiano è vettore.
matrice in inglese è matrix
ciao

oregon
15-04-2008, 18:30
Ma cosa c'entra collegarsi ad un thread del 2007 ?

E facendo delle domande slegate tra loro ?

Una lettura al regolamento .... no?

Loading