two dimensional arrays!

May 1, 2011 at 11:09am


Hi,

if I have numbers in 9X9 board/grid ,
the choice is to user whether to bring the numbers from a file or enter his numbers.

Then the program should display the 9x9 board as a two dimensional board.

how to do this part?
May 1, 2011 at 12:43pm
That could be done like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
#include<fstream>

using namespace std;

int input(istream& in=cin)
{
	int x;
	in >> x;
	return x;
}

int main()
{
	int board[9][9]; //creates a 9*9 matrix or a 2d array.

	for(int i=0; i<9; i++)    //This loops on the rows.
	{
		for(int j=0; j<9; j++) //This loops on the columns
		{
			board[i][j] = input(); //you can also connect to the file
			//and place the name of your ifstream in the input after opening the file will
			//let you read from the file.
		}
	}

	for(int i=0; i<9; i++)    //This loops on the rows.
	{
		for(int j=0; j<9; j++) //This loops on the columns
		{
			cout << board[i][j]  << "  ";
		}
		cout << endl;
	}
}


Input example:
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


Output example:
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  
May 1, 2011 at 1:13pm


OK if the file have the numbers as your output example order or the user entered them in that order, I mean (9 lines each line have 9 values)

then will the two dimensional array be useless ?

May 1, 2011 at 1:33pm
The user entered 81 elements I stored them in a 2d array board[9][9] then I output first row then a new line then second row and then a new line and so on.
May 1, 2011 at 1:38pm
Look again here:
1
2
3
4
5
6
7
8
for(int i=0; i<9; i++)    //This loops on the rows.
	{
		for(int j=0; j<9; j++) //This loops on the columns
		{
			cout << board[i][j]  << "  ";
		}
		cout << endl;
	}


After the elements have been stored the two for loops in the first iteration will out put the element board[0][0] which is first then increment the j so it will output board[0][1] and so on till it reaches the end if 1st row in the 2d array then I print a new line then increment the i to output board[1][0] (1st element in the 2nd row) the increment the j to reach the end of the second row and so in
May 1, 2011 at 3:03pm

yeah but what I mean is that when I ask the user to enter 9x9 numbers (9 lines each line contains 9 numbers) from the beginning.

like this problem:
Write a C++ program that reads numbers into a 9x9 board/grid. The program should give the user the option to get the numbers from a file (and give the file name to the program) or via the key board. The input file should have the numbers stored in 9x9 grid (9 lines with 9 values on each line).

The program should check if any number entered is not suitable for the game (numbers which are allowed are integers from 1 to 9).

The program should then display the 9x9 board as a two dimensional board.

The program should check whether the 9x9 board configuration is a successful Sudoku configuration; i.e., each row, each column and each of the nine 3×3 sub-grids contains exactly one of the digits from 1 to 9. The following is an example of a successful Sudoku configuration.




Last edited on May 1, 2011 at 3:04pm
May 1, 2011 at 4:49pm
Put this code in your IDE and input this
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

Will also work and pit it in a file connect ifstream to that file and put the name of the stream in the function input then close the file at the end of the program will also work!
May 1, 2011 at 7:18pm
@Thuraya If you use infile >> number; Shouldn't matter which way you enter it in the file. Whether it is in a single line or structured like the output.
May 3, 2011 at 5:30am
Yes this is correct but before calling the finction input make sure that you have this in your code
1
2
3
4
5
6
ifstream fin;
fin.open("input.txt"); //Or any [code]name your file has.
input(fin);

//After finishing with the function call don't forget to close the file
fin.close();


Also don't forget to #include<fstream>
May 4, 2011 at 2:28pm

Thanks I've done every thing ,
,
One more lil Question,

How Can I check 2D array ?

Here e.g :

if (board[9][9]>=1 && board[9][9]<=9)

cout << "The Numbers are Suitable" << endl;

else

cout << "The Numbers are NOT suitable" << endl;

I did this but it always give me the second answer , !!!! But my numbers are all from 1-9

May 4, 2011 at 3:19pm
You have to place your conditionals in a nested for loop.
1
2
3
4
5
6
7
8
9
10
for(int i = 0; i < 9; i++)
{
    for(int j = 0; j < 9; j++)
    {
        if (board[i][j]>=1 && board[i][j]<=9)
            cout << "The Numbers are Suitable" << endl; 
        else 
            cout << "The Numbers are NOT suitable" << endl;
    }
}
May 4, 2011 at 3:39pm


But , I don't want the sentence to be repeated !!
BTW, it gives me the correct checking but ,(repeating thing is left)!

how to do it ?
May 4, 2011 at 5:17pm
This can easily be done by:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include<iostream>
#include<fstream>

using namespace std;

int input(istream& in=cin)
{
	int x;
	in >> x;
	return x;
}

int main()
{
	int board[9][9]; //creates a 9*9 matrix or a 2d array.
        
	/////////////////////////////////////////////////////////////////
	//Here is a new part.
	/////////////////////////////////////////////////////////////////
	//New boolean expression intialized to false.
	bool isSuitable = false;

	for(int i=0; i<9; i++)    //This loops on the rows.
	{
		for(int j=0; j<9; j++) //This loops on the columns
		{
			board[i][j] = input(); //you can also connect to the file
			//and place the name of your ifstream in the input after opening the file will
			//let you read from the file.

		}
	}

	/////////////////////////////////////////////////////////////////
	//Here is a new part.
	/////////////////////////////////////////////////////////////////


	for(int i=0; i<9; i++)    //This loops on the rows.
	{
		for(int j=0; j<9; j++) //This loops on the columns
		{
			if(board[i][j]>=1 && board[i][j]<=9)
				isSuitable = true;
			else
			{
				isSuitable = false;
				break;
			}
		}
		if(isSuitable == false)
			break;
	}



	for(int i=0; i<9; i++)    //This loops on the rows.
	{
		for(int j=0; j<9; j++) //This loops on the columns
		{
			cout << board[i][j]  << "  ";
		}
		cout << endl;
	}


	////////////////////////////////////////////////////////////////
	//Here is also a new part.
	////////////////////////////////////////////////////////////////
	if (isSuitable)
		cout << "The Numbers are Suitable" << endl;
	else
        cout << "The Numbers are NOT suitable" << endl;

}
May 4, 2011 at 6:26pm


many errors appear !!

please help me I need to solve it today :!
May 5, 2011 at 12:27am
What are the errors?
May 5, 2011 at 3:57pm
Sorry add a return 0; at line 74 before the closing brace and if you use DEV CPP add a system("PAUSE"); before the return 0;
May 6, 2011 at 2:46am

, thanks It works

If I want to check each column and row to contain only one digit from (1-9)
here my code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//a function to check the rows and columns 
void col_row(int sudok[][9],int siz)
{
    bool duplic = false;
	for(int i=0;i<siz;i++)
	{
		for(int j=0;j<siz;j++)
		{
			if(sudok[i]!= sudok[i+1])
				duplic = true;
			else
			{duplic = false;
			break;
			}
		}
		if(duplic == false)
			break;

	}
 if(duplic)
	 cout << "The Numbers are suitable for the game" << endl;
 else
	 cout << "The Numbers are Not good for the game" << endl;
}


but it doesn't do what I want ,It gives random numbers after the array and then the program stop working .. !!!
Last edited on May 6, 2011 at 2:47am
Topic archived. No new replies allowed.