PDA

View Full Version : سوال: روش حل این جور مسائل



aminwxy
یک شنبه 24 آذر 1387, 19:46 عصر
با سلام
من مکانیزم حل مسئله های شبیه این مسئله رو می خواهم
یعنی هرجور از این مسئله ها به من دادن بتونم حل کنم
لینک قبلی به دلیل اینکه اینطوری نمی شد در سایت برنامه نویس بنویسم آقای Nima_NF حذفش کردن
حالا عکسشو می گذارم
این سوال تمرین دانشجویی هم نیست!قابل توجه Nima_NF !
http://i35.tinypic.com/30aw77a.jpg

SamaPic
یک شنبه 24 آذر 1387, 22:12 عصر
با سلام خدمت دوست عزيز.
شما مي توانيد از كد go to (x,y) در هر شرايطي استفاده كنيد كه خيلي راحت تر است ولي عده اي براي اينكه برنامه ي شما جز برنامه هاي غير ساخت يافته مي شود و استاندارد نيست ( جز راه حل مسئله محسوب نمي شود و كار بردي نيست.)ايراد مي گيرند.
اگر فقط براي اين كار مي خواهيد راه حلمناسبي است.


goto (8,10)
goto(i,j) (
خدانگهدار.

aminwxy
سه شنبه 26 آذر 1387, 19:08 عصر
درسته یکی از راه حل های این مسئله استفاده از gotoxy است اما از این روش که با حلقه های تو در تو و چاپ قسمت جاخالی در حلقه ی اولی حل شود.اگه کسی حل کرد بیاره
منم حلش می کنم

Nima_NF
سه شنبه 26 آذر 1387, 22:50 عصر
سوال شما به 3 دلیل حذف شد و هر سه نیز نوشته شد:
1- تمرین دانشجویی 2- تکراری بودن 3- ساده بودن

به فرض اگر اولی هم برای شما صادق نبود (!) ای کاش دو مورد دیگر را رعایت می کردید، این سری موضوعات ستاره کشیدن 100 مرتبه در فروم مطرح شده است که حداقل می توانستید جستجو کنید.
متاسفانه نمی دانم چرا همه همیشه فقط یک دلیل را می بینند!

در هر حال با وجود بی توجهی به دو مورد، برای احترام به شما سوال شما را حل می کنم.
برای حالت با فضای خالی و بدون gotoxy به این شکل است( البته هزاران راه دیگر و بهینه تر هم وجود دارد):



#include <iostream>
#include <conio.h>

using namespace std;
#define MAXS 4

int main()
{
int i,j;
for (i=0 ; i < MAXS ; i++)
{
for (j=i+1 ; j>0 ; j--)
cout<<'*';

for (j=0 ; j< (2*MAXS)- 2*(i+1) ; j++)
cout<<' ';

for (j=i+1 ; j>0 ; j--)
cout<<'*';

cout<<'\n';
}

_getch();
return 0;
}

و با gotoxy به این شکل (در ++VC ):



#include <iostream>
#include <conio.h>
#include <windows.h>

void gotoxy(int x,int y)
{
COORD pos;
HANDLE hConsole = GetStdHandle ( STD_OUTPUT_HANDLE );

if (INVALID_HANDLE_VALUE != hConsole)
{
pos.X = x;
pos.Y = y;

SetConsoleCursorPosition( hConsole, pos );
}
}

#define MAXS 4

int main()
{
int i,j;
for (i=0 ; i < MAXS ; i++)
{
for (j=i+1 ; j>0 ; j--)
{
gotoxy(j , i);
cout<<'*';

gotoxy(2 * MAXS - j, i);
cout<<'*';
}
cout<<'\n';
}

_getch();
return 0;
}


موفق باشید

huni_1989
سه شنبه 26 آذر 1387, 23:33 عصر
سلام
اولا خدمت آقای nima_nf سلام و عرض خسته نباشید میگم و از ایشون درخواست می کنم حل اینطور مساله های نه چندان پیچیده رو به عهده ی ما غیر خرفه ای ها بذاره.
من فکر می کنم دوستمون نیاز به تفکر حل اینطور مسائل دارند بنابراین کمی توضیح میدم:
توی اینجور مسائل معمولا یک حالت تقارن وجود داره. در 90 درصد موارد از دو کارکتر پایه مثل: "*" و "( blank)" استفاده میشه. گاهی وقت ها که میشه با یه کانتر مساله رو حل کرد. اما گاهی وجود 2 تا کانتر الزامی هست. با استفاده از حلقه های تو در تو، معمولا یک حلقه تعداد سطر ها رو کنترل میکنه و حلقه ی داخلی تعداد اجزای چاپ

aminwxy
جمعه 29 آذر 1387, 14:58 عصر
خدمت جناب Nima_NF
تکراری بودنشو به شما حق می دهم اما ساده بودنشو نه
چون یک مسئله ای که برای شما ساده است شاید برای من سخت باشه و برعکس
در ضمن سوال من هم کلی بود و فقط این سوال نبود بلکه نمونه ی این سوال ها بود