วันอาทิตย์ที่ 18 ธันวาคม พ.ศ. 2559

C++ OMR


#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <vector>
#include <algorithm>

//g++ main.cpp -o main -I /usr/local/include/opencv -lopencv_core -lopencv_imgproc -lopencv_highgui

using namespace cv;
using namespace std;


cv::Point2f computeIntersect(cv::Vec4i a, cv::Vec4i b)
{
int x1 = a[0], y1 = a[1], x2 = a[2], y2 = a[3];
int x3 = b[0], y3 = b[1], x4 = b[2], y4 = b[3];

if (float d = ((float)(x1 - x2) * (y3 - y4)) - ((y1 - y2) * (x3 - x4)))
{
cv::Point2f pt;
pt.x = ((x1*y2 - y1*x2) * (x3 - x4) - (x1 - x2) * (x3*y4 - y3*x4)) / d;
pt.y = ((x1*y2 - y1*x2) * (y3 - y4) - (y1 - y2) * (x3*y4 - y3*x4)) / d;
return pt;
}
else
return cv::Point2f(-1, -1);
}

bool comparator2(double a, double b) {
return a<b;
}
bool comparator3(Vec3f a, Vec3f b) {
return a[0]<b[0];
}

bool comparator(Point2f a, Point2f b) {
return a.x<b.x;
}
void sortCorners(std::vector<cv::Point2f>& corners, cv::Point2f center)
{


std::vector<cv::Point2f> top, bot;
for (int i = 0; i < corners.size(); i++)
{
if (corners[i].y < center.y)
top.push_back(corners[i]);
else
bot.push_back(corners[i]);
}


sort(top.begin(), top.end(), comparator);
sort(bot.begin(), bot.end(), comparator);

cv::Point2f tl = top[0];
cv::Point2f tr = top[top.size() - 1];
cv::Point2f bl = bot[0];
cv::Point2f br = bot[bot.size() - 1];
corners.clear();
corners.push_back(tl);
corners.push_back(tr);
corners.push_back(br);
corners.push_back(bl);
}


int main(int argc, char* argv[]) {

Mat img = imread("D:\\example.jpg", 0);

cv::Size size(3, 3);
cv::GaussianBlur(img, img, size, 0);
adaptiveThreshold(img, img, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 75, 10);
cv::bitwise_not(img, img);

cv::Mat img2;
cvtColor(img, img2, CV_GRAY2RGB);

cv::Mat img3;
cvtColor(img, img3, CV_GRAY2RGB);

vector<Vec4i> lines;
HoughLinesP(img, lines, 1, CV_PI / 180, 80, 400, 10);
for (size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
line(img2, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, CV_AA);
}

imshow("example", img2);

std::vector<cv::Point2f> corners;
for (int i = 0; i < lines.size(); i++)
{
for (int j = i + 1; j < lines.size(); j++)
{
cv::Point2f pt = computeIntersect(lines[i], lines[j]);
if (pt.x >= 0 && pt.y >= 0 && pt.x < img.cols && pt.y < img.rows)
corners.push_back(pt);
}
}

// Get mass center
cv::Point2f center(0, 0);
for (int i = 0; i < corners.size(); i++)
center += corners[i];
center *= (1. / corners.size());

sortCorners(corners, center);

Rect r = boundingRect(corners);
cout << r << endl;
cv::Mat quad = cv::Mat::zeros(r.height, r.width, CV_8UC3);
// Corners of the destination image
std::vector<cv::Point2f> quad_pts;
quad_pts.push_back(cv::Point2f(0, 0));
quad_pts.push_back(cv::Point2f(quad.cols, 0));
quad_pts.push_back(cv::Point2f(quad.cols, quad.rows));
quad_pts.push_back(cv::Point2f(0, quad.rows));

// Get transformation matrix
cv::Mat transmtx = cv::getPerspectiveTransform(corners, quad_pts);
// Apply perspective transformation
cv::warpPerspective(img3, quad, transmtx, quad.size());

imshow("example2", quad);

Mat cimg;

cvtColor(quad, cimg, CV_BGR2GRAY);
vector<Vec3f> circles;
HoughCircles(cimg, circles, CV_HOUGH_GRADIENT, 1, img.rows / 8, 100, 75, 0, 0);
for (size_t i = 0; i < circles.size(); i++) {
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
// circle center
circle(quad, center, 3, Scalar(0, 255, 0), -1, 8, 0);
}

imshow("example4", quad);
waitKey();

double averR = 0;
vector<double> row;
vector<double> col;

//Find rows and columns of circles for interpolation
for (int i = 0; i<circles.size(); i++) {
bool found = false;
int r = cvRound(circles[i][2]);
averR += r;
int x = cvRound(circles[i][0]);
int y = cvRound(circles[i][1]);
for (int j = 0; j<row.size(); j++) {
double y2 = row[j];
if (y - r < y2 && y + r > y2) {
found = true;
break;
}
}
if (!found) {
row.push_back(y);
}
found = false;
for (int j = 0; j<col.size(); j++) {
double x2 = col[j];
if (x - r < x2 && x + r > x2) {
found = true;
break;
}
}
if (!found) {
col.push_back(x);
}
}

averR /= circles.size();

sort(row.begin(), row.end(), comparator2);
sort(col.begin(), col.end(), comparator2);

for (int i = 0; i<row.size(); i++) {
double max = 0;
double y = row[i];
int ind = -1;
for (int j = 0; j<col.size(); j++) {
double x = col[j];
Point c(x, y);

//Use an actual circle if it exists
for (int k = 0; k<circles.size(); k++) {
double x2 = circles[k][0];
double y2 = circles[k][1];
if (abs(y2 - y)<averR && abs(x2 - x)<averR) {
x = x2;
y = y2;
}
}

// circle outline
circle(quad, c, averR, Scalar(0, 0, 255), 3, 8, 0);
Rect rect(x - averR, y - averR, 2 * averR, 2 * averR);
Mat submat = cimg(rect);
double p = (double)countNonZero(submat) / (submat.size().width*submat.size().height);
if (p >= 0.3 && p>max) {
max = p;
ind = j;
}
}
if (ind == -1)printf("%d:-", i + 1);
else printf("%d:%c", i + 1, 'A' + ind);
cout << endl;
}

// circle outline*/
imshow("example3", quad);
waitKey();
return 0;
}

วันเสาร์ที่ 26 พฤศจิกายน พ.ศ. 2559

C++ UI Basic Threshold


private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
int threshold_value = 0;
int threshold_type = 3;
int const max_value = 255;
int const max_type = 4;
int const max_BINARY_value = 255;

Mat srcimg;
Mat grayimg;
srcimg = imread("D:\\1.png", IMREAD_COLOR);
if (srcimg.empty())
{
MessageBox::Show("No Image");
Application::Exit();
}
DrawCVImage(pictureBox1, srcimg);
cvtColor(srcimg, grayimg, COLOR_BGR2GRAY);
Mat dst;
threshold(grayimg, dst, trackBar1->Value, max_BINARY_value, trackBar2->Value);
DrawCVImage(pictureBox2, dst);
}
void DrawCVImage(Control^ control, Mat& image)
{
Graphics^ graphic = control->CreateGraphics();
IntPtr ptr(image.ptr());
Bitmap^ b = gcnew Bitmap(image.cols, image.rows, image.step, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ptr);
RectangleF rec(0, 0, control->Width, control->Height);
graphic->DrawImage(b, rec);
}
private: System::Void trackBar1_Scroll(System::Object^  sender, System::EventArgs^  e)
{
button1->PerformClick();
label1->Text = trackBar1->Value.ToString();
}
private: System::Void trackBar2_Scroll(System::Object^  sender, System::EventArgs^  e)
{
button1->PerformClick();
label3->Text = trackBar2->Value.ToString();
}
};

}


C++ UI Canny


private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
Mat srcimg;
Mat grayimg;
int thresh = 100;
int max_thresh = 255;

RNG rng(12345);

srcimg = imread("D:\\1.png", IMREAD_COLOR);
if (srcimg.empty())
{
MessageBox::Show("No Image");
Application::Exit();
}
//convert RGB to GRAY
cvtColor(srcimg, grayimg, COLOR_BGR2GRAY);
blur(grayimg, grayimg, cv::Size(3, 3));
//draw source image
DrawCVImage(pictureBox1, srcimg);

Mat canny;
vector<vector<cv::Point>> contours;
vector<Vec4i> heirachy;

Canny(grayimg, canny, trackBar1->Value, max_thresh, 3);
findContours(canny, contours, heirachy, RETR_TREE, CHAIN_APPROX_SIMPLE, cv::Point(0, 0));

Mat drawing = Mat::zeros(canny.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(drawing, contours, (int)i, color, 2, 8, heirachy, 0, cv::Point());
}
//draw Canny Image
DrawCVImage(pictureBox2, drawing);
}
void DrawCVImage(Control^ control, Mat& image)
{
Graphics^ graphic = control->CreateGraphics();
IntPtr ptr(image.ptr());
Bitmap^ b = gcnew Bitmap(image.cols, image.rows, image.step, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ptr);
RectangleF rec(0, 0, control->Width, control->Height);
graphic->DrawImage(b, rec);
}
private: System::Void trackBar1_Scroll(System::Object^  sender, System::EventArgs^  e)
{
button1->PerformClick();
label1->Text = trackBar1->Value.ToString();
}


วันพุธที่ 23 พฤศจิกายน พ.ศ. 2559

C++ open file Dialog



//insert picture to picturebox
DrawCVImage(pictureBox1, img);
void DrawCVImage(System::Windows::Forms::Control^ control, cv::Mat& colorImage)
{
System::Drawing::Graphics^ graphics = control->CreateGraphics();
System::IntPtr ptr(colorImage.ptr());
System::Drawing::Bitmap^ b = gcnew System::Drawing::Bitmap(colorImage.cols, colorImage.rows, colorImage.step, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ptr);
System::Drawing::RectangleF rect(0, 0, control->Width, control->Height);
graphics->DrawImage(b, rect);
}

//simulate button click
private: System::Void trackBar1_Scroll(System::Object^  sender, System::EventArgs^  e)
{
button1->PerformClick();
label1->Text = trackBar1->Value.ToString();
}

C++ GUI setup









วันพุธที่ 16 พฤศจิกายน พ.ศ. 2559

C++ check ID card 13 digit


long long power(int p)//3,4
{
long long sum = 1;
for (int i = 1; i <= p; i++)
{
sum *= 10;
}
return sum;
}
int main()
{
system("cls");
long long n;
long long m[30];
long long sum = 0;
cout << "Enter Input : ";
cin >> n;
int k = 12;
for (int i = 0; i<k; i++)
{
m[i] = n % (power(k - i)) / (power(k - 1 - i));
}
for (int i = 0; i<k; i++)
{
sum += m[i] * (k - i + 1);
}
cout << endl;
long long mod = sum % 11;
mod = 11 - mod;
cout << n << " " << mod << " ";
        return 0;
}


C++ check ISBN 10 digit



long long power(int p)//3,4
{
long long sum = 1;
for (int i = 1; i <= p; i++)
{
sum *= 10;
}
return sum;
}
int main()
{
system("cls");
long long m1[20];
long long m2[20];
long long m3[20];
long long sum = 0;
int l = 0, p = 0, n = 0;
string c;
string ch;
cout << "Input ISBN : ";
cin >> ch;

string i = ch.substr(0, 3);
string j = ch.substr(4, 3);
string k = ch.substr(8, 3);
l = stoll(i);
p = stoll(j);
n = stoll(k);

for (int i = 0; i < 3; i++)
{
m1[i] = n % (power(3 - i)) / (power(2 - i));
}
for (int i = 0; i<3; i++)
{
sum += m1[i] * (3 - i + 1);
}
///////////
for (int i = 0; i < 3; i++)
{
m2[i] = p % (power(3 - i)) / (power(2 - i));
}
sum += m2[0] * 7;
sum += m2[1] * 6;
sum += m2[2] * 5;
//////
for (int i = 0; i < 3; i++)
{
m3[i] = l % (power(3 - i)) / (power(2 - i));
}
sum += m3[0] * 10;
sum += m3[1] * 9;
sum += m3[2] * 8;
int mod = 11-(sum % 11);
if (mod == 10)
{
c = 'X';
}
else
{
c = to_string(mod);
}
cout << endl;
cout << ch << "-" << c << endl;
        return 0;
}



C++ นับข้อความ


string c("what a wonderful world");
int word = 1, l;
l = c.length();
for (int i = 0; i<l; ++i)
{
if (c[i] == ' ')
{
word = word + 1;
}
}
cout << endl << c << endl;
cout <<endl<< word << endl;
cout << endl;


C++ แยกสตริงออกมาเป็นคำ



string c("what a wonderful world");
int l;
l = c.length();
cout << "\"";
for (int i = 0; i<l; ++i)
{
if (c[i] == ' ')
cout <<"\","<<c[i]<<"\"";
else
{
cout << c[i];
}
}
cout << "\"";
cout << endl;


C++ หา square root by bisection


double l=0, h, m;
int a;
cout << "Input a : ";
cin >> a;
if(a<0)
{
cout << "Error" << endl;
}
else
{
h = (double)a;
m = (l + h) / 2;
int c = 0;
while (c < 1000)
{
if (pow(m, 2) == a)
{
c = 1000;
}
else
{
if (pow(m, 2) > a)
{
h = m;
m = (l + h) / 2;
c++;
}
else
{
l = m;
m = (l + h) / 2;
c++;
}
}
}
}
cout << setprecision(20);
cout << "Square root of " << a << " = " << m << endl;


C++ 3x+1 problem ให้หาค่าที่มากที่สุด จาก 1 -1000



int k=1000;
int max = -1;
int icount,ik;
int count = 0;
int i,m=k;
cout << 1 << "\t";
for (int j = 1; j<=k; j++)
{
i = j;
m = j;
while (i >= 1)
{
if (m % 2 == 0)
{
m = m / 2;
cout << m << "\t";
count++;
if (m == 1)
{
cout << "count = " << count << "\t";
if (count > max)
{
max = count;
icount = max;
ik = j;
}
count = 0;
break;
}
}
else
{
m = (3 * m + 1);
cout << m << "\t";
count++;
if (m == 1)
{
cout << "count = "<<count << "\t";
if (count > max)
{
max = count;
icount = max;
ik = j;
}
count = 0;
break;
}
}
i--;
}
cout << endl;
cout << "-------------------------------------------------------------------------------------------------------------------" << endl;
if (j != k)
cout << j + 1 << "\t";
else
cout << "";
count = 0;
}
cout << endl;
cout << "Max  = " << ik << " , Count = " << icount << endl;


C++ แสดงวันของปี


int day, month, year;
int x=0;
cout << "Input {day month year} : ";
cin >> day >> month >> year;

if (month == 1)
{
day += 0;
}
else if (month == 2)
{
day = day + 31 ;
}
else if (month == 3)
{
day =  day + 31 + 28;
}
else if (month == 4)
{
day = day  + 31 + +28 + 30;
}
else if (month == 5)
{
day = day  + 31 +28 +  30 + 31;
}
else if (month == 6)
{
day = day  + 31 + 28 + 30 + 31 + 30;
}
else if (month == 7)
{
day = day + 31 + 28 + 30 + 31 + 30 + 31 ;
}
else if (month == 8)
{
day = day + 31 + 28 + 30 + 31 + 30 + 31 + 31;
}
else if (month == 9)
{
day = day +  31 + 28 + 30 + 31 + 30 + 31 + 31 + 30;
}
else if (month == 10)
{
day = day +  31 + 28 +  30 + 31 + 30 + 31 + 31 + 30 + 31;
}
else if (month == 11)
{
day = day + 31 + 28 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
}
else if (month == 12)
{
day = day +  31 + 28 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31;
}
if (year % 2 == 1 && month > 2)
day = day + 1;
cout << day << endl;


C++ การหาผลต่างของเวลา


int h1, h2, m1, m2, h, m;
do
{
cout << "Enter input {Hour minute} 1 : ";
cin >> h1 >> m1;
} while (h1<1 || h1>12 || m1<0 || m1>60);
do
{
cout << "Enter input {Hour minute} 2 : ";
cin >> h2 >> m2;
} while (h2<1 || h2>12 || m2<0 || m2>60);

h = abs(h2 - h1);
m = (m2 - m1);
if (m<0)
{
m = 60 + m;
h = h - 1;
}
cout << h << ":" << m << endl;


C++ แสดงค่า a,b,c ที่ a^2+b^2 = c^2 โดยที่เลขไม่ซ้ำกัน


int a, b, c;
a = b = c = 500;
int x, y;
for (int i = 1; i < a; i++)
{
for (int j = 1; j < b; j++)
{
for (int k = 1; k < c; k++)
{
if (pow(i, 2) + pow(j, 2) == pow(k, 2))
{
y = j;
x = i;
if (x >= j || y <= i)
cout << y << "\t" << x << "\t" << k << endl;
}
}
}
}


C++ หาค่ามากที่สุดที่อันดับที่สอง


int n[10];
int max = -pow(2, 31);
for (int i = 0; i<10; i++)
{
cout << "Input #" << i + 1 << " : ";
cin >> n[i];
}
for (int i = 0; i<10; i++)
{
if (n[i]>max)
{
max = i;
}
}
cout << endl;
cout << n[max] << endl;


C++ แสดงเครื่องหมายจุลภาค


bool isabs(int p) //5
{
if (p<0)
return false;
return true;
}
int power(int p)
{
int sum = 1;
for (int i = 1; i <= p; i++)
{
sum *= 10;
}
return sum;
}
int main()
{
system("cls");
int n;
int m[30];
int is;
cout << "Enter Input : ";
cin >> n;
int a = abs(n);
is = isabs(n);
string s = to_string(a);
int k = s.length();
if (!is)
{
cout << "-";
}
else
cout << "";
for (int i = 0; i<k; i++)
{
m[i] = a % (power(k - i)) / (power(k - 1 - i));
}
for (int i = 0; i<k; i++)
{
if (i % (k - 1) == k - 4 || i % (k - 1) == k - 7)
{
cout << m[i]<< ",";
}
else
cout << m[i];
}
        retrun 0;
}


C++ ตรวบสอบข้อมูลที่มีค่าเท่ากัน


int a[3], i, j = 0;
for ( i = 0; i < 3; i++)
{
cout << "Input a" << i << " : ";
cin>>a[i];
}
for ( i = 0; i < 2; i++)
{
if (a[i] == a[i + 1])
{
cout << "a[" << i << "] = a[" << i + 1 << "] {" << a[i] << "}" << endl;
}
else
{
j++;
}
}
if (j==2)
{
cout << "Have not a equal" << endl;
}



C++ ตรวจสอบด้านประกอบเป็นสามเหลี่ยม


int a, b, c,max;
cout << "Enter triangle {a,b,c} : ";
cin >> a >> b >> c;

if (a > b)
max = a;
else
max = b;
if (c > max)
max = c;
if (max + max < a + b + c)
cout << "This is a triangle" << endl;
else
cout << "This is not a triangle" << endl;


C++ แสดงข้อความเยื้องลงมาทีละ 1 ช่อง แล้วให้ทำย้อนกลับ


string str;
cout << "Enter String : ";
cin >> str;
for (int i = 0; i < str.length(); i++)
{
for (int j = 0; j < i; j++)
{
cout << "-";
}
cout << str[i];
cout << endl;
}
for (int i = str.length() - 1; i >= 0; i--)
{
for (int j = 0; j < i; j++)
{
cout << "-";
}
cout << str[i];
cout << endl;
}


C++ palindrome


char str[50];
int start = 0, pcheck = 0, end;
cout << "Enter String : ";
cin >> str;

cout << "Result ";
end = strlen(str);
end = end - 1;
while ((end > start) && (pcheck == 0))
{
while (!ischeckchar(str[start]))start++;
while (!ischeckchar(str[end]))end--;
if (toupper(str[start]) != toupper(str[end])) pcheck = 1;
start++;
end--;
}
if (pcheck == 0)
cout << "This message is palindome. " << endl;
else
cout << "This message is not palindome. " << endl;


C++ แทรกสตริง


string str("There are two needles in this haystack with in needles.");
string keyword;
cout << str << endl;
cout << "Enter Keyword : ";
cin >> keyword;
int k = keyword.length();
int n = str.find(keyword);
cout << "Search "<<keyword<<" at : "<<n << endl;
str.erase(str.begin(),str.begin()+n+k+1);
//cout << str << endl;
int m = str.find(keyword);
if(m != -1)
cout << "Search " << keyword << " at : " << m+n << endl;


C++ แปลงอักขระโรมัน


char ch[30];
int sum = 0;
int m, d, c, l, x, v, i;
m = d = c = l = x = v = i = 0;
cout << "Input : ";
cin >> ch;

for (int j = 0; j<strlen(ch); j++)
{
if (ch[j] == 'M')
{
m += 1000;
}
if (ch[j] == 'D')
{
d += 500;
}
if (ch[j] == 'C')
{
c += 100;
}
if (ch[j] == 'L')
{
l += 50;
}
if (ch[j] == 'X')
{
x += 10;
}
if (ch[j] == 'V')
{
v += 5;
}
if (ch[j] == 'I')
{
i += 1;
}
sum = m + d + c + l + x + v + i;
}
cout << endl;
cout << sum << endl;


C++ LED Number



char x[10][5][5] = { {
"xxxx",
"x  x",
"x  x",
"x  x",
"xxxx",
},

{
"   x",
"   x",
"   x",
"   x",
"   x",
},

{
"xxxx",
"   x",
"xxxx",
"x   ",
"xxxx",
},
{
"xxxx",
"   x",
"xxxx",
"   x",
"xxxx",
},
{
"x  x",
"x  x",
"xxxx",
"   x",
"   x",
},
{
"xxxx",
"x   ",
"xxxx",
"   x",
"xxxx",
},
{
"x   ",
"x   ",
"xxxx",
"x  x",
"xxxx",
},
{
"xxxx",
"   x",
"   x",
"   x",
"   x",
},
{
"xxxx",
"x  x",
"xxxx",
"x  x",
"xxxx",
},
{
"xxxx",
"x  x",
"xxxx",
"   x",
"   x",
} };
int num, temp[12], i, count;
cout << "Enter Number : ";
cin >> num;
count = 0;
i = 0;
while (num > 0)
{
temp[i] = num % 10;
num = num / 10;
i++;
}
count = i;
for (int k = 0; k < 5; k++)
{
for (i = count - 1; i >= 0; i--)
{
cout << x[temp[i]][k] << "\t";
}
cout << endl;
}


C++ กระดานมหาสนุก



int i, j, temp, num;
char dir;
char x[4][4] = { { 'a','b','c','d' },
{ 'e','f','g','h' },
{ 'i','j','k','l' },
{ 'm','n','o','p' } };
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
cout << x[i][j] << "\t";
}
cout << endl;
}
while (1)
{
cout << endl << "Input number {0-3} and char {l,r,u,d} : ";
cin >> num >> dir;
if (num == -1)
{
break;
}
if (dir == 'l')
{
temp = x[num][0];
for (i = 0; i < 3; i++)
{
x[num][i] = x[num][i + 1];
}
x[num][3] = temp;
}
else if (dir == 'r')
{
temp = x[num][3];
for (i = 3; i>0; i--)
{
x[num][i] = x[num][i - 1];
}
x[num][0] = temp;
}
else if (dir == 'd')
{
temp = x[3][num];
for (i = 3; i>0; i--)
{
x[i][num] = x[i - 1][num];
}
x[0][num] = temp;
}
else if (dir == 'u')
{
temp = x[0][num];
for (i = 0; i<3; i++)
{
x[i][num] = x[i + 1][num];
}
x[3][num] = temp;
}
cout << endl << endl;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
cout << x[i][j] << "\t";
}
cout << endl;
}
}