the end
جمعه 30 آبان 1393, 14:52 عصر
سلام خدمت دوستان و اساتید عزیز
من قصد نوشتن برنامه rectangle packing رو داشتم که بعد از کلی تحقیق الگوریتم مناسب برای این کار رو پیدا کردم که الگوریتم آن بر مبنای مرتب سازی مستطیل بر اساس مساحت و قرار دادن اونها در مختصات مناسب با اندازه گیری فضا ها ی خالی انجام میگیرد،
من ابتدا تصمیم گرفتم این برنامه رو تو محیط کنسول ارایه بدم ولی به شدت برای برای نمایش مسطتیل ها به مشکل خوردم،،، این قراره که خروجی کار من باشه
* * * * * * * * * *
* $ $ $ $ *
* $ $ *
* $ $ $ $ *
* # # # *
* # # *
* # # # *
* *
* *
* * * * * * * * * *
و این هم کدی هست که بنده تا الان نوشتم که شامل گرفتن مقادیر از کاربر ، مرتب سازی و نمایش میشه که تو قسمت نمایش مستطیل اصلی رو نمایش میدم ولی تو گذاشتن شرط ها برای نمایش مستطیل های کوچکتر مشکل دارم
#include <iostream>using namespace std;
int main(int argc, const char * argv[]) {
int xmain_rec=0 , ymain_rec=0 , rec_number;
cout << "Please Enter size of main rectangle, 0-1200 for x and 0-800 for y" << endl;
cin >> xmain_rec >> ymain_rec;
while (xmain_rec > 1200 || ymain_rec > 800) {
cout << "error: main size of rectangle must be beetwin 0-1200 and 0-800,,, enter again: " << endl;
cin >> xmain_rec >> ymain_rec;
}
cout << "ok , Now enter number of rectangle you want packing" << endl;
cin >> rec_number;
int sizeOfRec_x[rec_number],sizeOfRec_y[rec_number],i=0,Area_rec[rec_number],SumSize_x = 0,SumSize_y = 0;
while (SumSize_x < xmain_rec || SumSize_y < ymain_rec) {
cout << "please Enter size of rectangle number " << i+1 << ":" << endl;
cin >> sizeOfRec_x [i] >> sizeOfRec_y [i];
Area_rec[i] = sizeOfRec_x [i] * sizeOfRec_y[i];
while (sizeOfRec_x [i] < 0 || sizeOfRec_x [i] > xmain_rec || sizeOfRec_y [i] < 0 || sizeOfRec_y [i] > ymain_rec) {
cout << "Error: Enter size of rectangles beetwin 0-1200 and 0-800,,, Please Enter again:" << endl;
cin >> sizeOfRec_x [i] >> sizeOfRec_y [i];
}
SumSize_x += sizeOfRec_x [i];
SumSize_y += sizeOfRec_y [i];
i++;
if (i >= rec_number) {
break;
}
}
int temp_x,temp_y, flag=0,z;
for (flag=0; flag < rec_number; flag++) {
for (z=flag+1 ; z<rec_number ; z++) {
if (Area_rec[z] > Area_rec [flag]) {
temp_x = sizeOfRec_x[z];
sizeOfRec_x[z] = sizeOfRec_x [flag];
sizeOfRec_x [flag] = temp_x;
temp_y = sizeOfRec_y [z];
sizeOfRec_y [z] = sizeOfRec_y [flag];
sizeOfRec_y [flag] = temp_y;
}
}
}
int temp1=1,temp2=0, gem=0, kem=0;
for (flag=0; flag < ymain_rec; flag++) {
if (flag==0 || flag==ymain_rec - 1) {
for (i=0; i<xmain_rec +1; i++) {
cout << "* ";
}
} else {
for (int w=0; w<xmain_rec ; w++) {
if (w==0 ) {
cout << "*";
}
if (w==xmain_rec-1) {
cout << " *";
} else {
if (gem < sizeOfRec_x[temp1]) {
cout << " #";
gem++;
}
else
cout << " ";
}
}
}
cout << endl;
}
return 0;
}
حالا به نظر شما عقلانی هست که من اینو تو کنسول نمایش بدم؟ یا برم سراغ کتابخونه های دیگه چون تجربه زیادی تو برنامه نویسی ندارم و مبتدی هستم، قبل از این هم خواستم از opengl استفاده کنم که رفتم خوردم به vertex shader و امثال اینها که دیدم اصلا کار من نیست، آیا دوستان راه حل یا پیشنهادی دارند که من اینو تموم کنم یا از کتابخونه های گرافیکی که کار کردن باهاشون سخت نباشه استفاده کنم خواهشا من رو یاری کنید.
من قصد نوشتن برنامه rectangle packing رو داشتم که بعد از کلی تحقیق الگوریتم مناسب برای این کار رو پیدا کردم که الگوریتم آن بر مبنای مرتب سازی مستطیل بر اساس مساحت و قرار دادن اونها در مختصات مناسب با اندازه گیری فضا ها ی خالی انجام میگیرد،
من ابتدا تصمیم گرفتم این برنامه رو تو محیط کنسول ارایه بدم ولی به شدت برای برای نمایش مسطتیل ها به مشکل خوردم،،، این قراره که خروجی کار من باشه
* * * * * * * * * *
* $ $ $ $ *
* $ $ *
* $ $ $ $ *
* # # # *
* # # *
* # # # *
* *
* *
* * * * * * * * * *
و این هم کدی هست که بنده تا الان نوشتم که شامل گرفتن مقادیر از کاربر ، مرتب سازی و نمایش میشه که تو قسمت نمایش مستطیل اصلی رو نمایش میدم ولی تو گذاشتن شرط ها برای نمایش مستطیل های کوچکتر مشکل دارم
#include <iostream>using namespace std;
int main(int argc, const char * argv[]) {
int xmain_rec=0 , ymain_rec=0 , rec_number;
cout << "Please Enter size of main rectangle, 0-1200 for x and 0-800 for y" << endl;
cin >> xmain_rec >> ymain_rec;
while (xmain_rec > 1200 || ymain_rec > 800) {
cout << "error: main size of rectangle must be beetwin 0-1200 and 0-800,,, enter again: " << endl;
cin >> xmain_rec >> ymain_rec;
}
cout << "ok , Now enter number of rectangle you want packing" << endl;
cin >> rec_number;
int sizeOfRec_x[rec_number],sizeOfRec_y[rec_number],i=0,Area_rec[rec_number],SumSize_x = 0,SumSize_y = 0;
while (SumSize_x < xmain_rec || SumSize_y < ymain_rec) {
cout << "please Enter size of rectangle number " << i+1 << ":" << endl;
cin >> sizeOfRec_x [i] >> sizeOfRec_y [i];
Area_rec[i] = sizeOfRec_x [i] * sizeOfRec_y[i];
while (sizeOfRec_x [i] < 0 || sizeOfRec_x [i] > xmain_rec || sizeOfRec_y [i] < 0 || sizeOfRec_y [i] > ymain_rec) {
cout << "Error: Enter size of rectangles beetwin 0-1200 and 0-800,,, Please Enter again:" << endl;
cin >> sizeOfRec_x [i] >> sizeOfRec_y [i];
}
SumSize_x += sizeOfRec_x [i];
SumSize_y += sizeOfRec_y [i];
i++;
if (i >= rec_number) {
break;
}
}
int temp_x,temp_y, flag=0,z;
for (flag=0; flag < rec_number; flag++) {
for (z=flag+1 ; z<rec_number ; z++) {
if (Area_rec[z] > Area_rec [flag]) {
temp_x = sizeOfRec_x[z];
sizeOfRec_x[z] = sizeOfRec_x [flag];
sizeOfRec_x [flag] = temp_x;
temp_y = sizeOfRec_y [z];
sizeOfRec_y [z] = sizeOfRec_y [flag];
sizeOfRec_y [flag] = temp_y;
}
}
}
int temp1=1,temp2=0, gem=0, kem=0;
for (flag=0; flag < ymain_rec; flag++) {
if (flag==0 || flag==ymain_rec - 1) {
for (i=0; i<xmain_rec +1; i++) {
cout << "* ";
}
} else {
for (int w=0; w<xmain_rec ; w++) {
if (w==0 ) {
cout << "*";
}
if (w==xmain_rec-1) {
cout << " *";
} else {
if (gem < sizeOfRec_x[temp1]) {
cout << " #";
gem++;
}
else
cout << " ";
}
}
}
cout << endl;
}
return 0;
}
حالا به نظر شما عقلانی هست که من اینو تو کنسول نمایش بدم؟ یا برم سراغ کتابخونه های دیگه چون تجربه زیادی تو برنامه نویسی ندارم و مبتدی هستم، قبل از این هم خواستم از opengl استفاده کنم که رفتم خوردم به vertex shader و امثال اینها که دیدم اصلا کار من نیست، آیا دوستان راه حل یا پیشنهادی دارند که من اینو تموم کنم یا از کتابخونه های گرافیکی که کار کردن باهاشون سخت نباشه استفاده کنم خواهشا من رو یاری کنید.