-
خارج از دستور - پرسشهایی از جنس دیگر
اینجا پرسشهایی رو مطرح کنید که هدف اصلی اون الزاما حل یک مساله کاربردی و (شاید) از جنس دیتابیس هم نباشه، بلکه تمرین ذهن و به چالش کشیدن توان کدنویسی و گریزی از امور تکراری و کسالت بار هست.
البته این دست مسائل ممکنه در زبانهای دیگه راحت تر کدنویسی بشه و vba انتخاب اول نباشه ولی چون در اینجا مطرح شده مخصوصا محدود به همین اکسس (و آفیس بطور عام) هستیم.
بنابراین پاسخ به زبان دیگر وقتی قبول هست که ابتدا پاسخ در اکسس (آفیس) داده شده باشه.
چراغ اول رو هم خودم روشن میکنم، به امید اینکه از شرکت کنندگان مطلب جدیدی یاد بگیریم.
حساب ابجد - ماده تاریخ
رسم نمودار ، گراف
حرکت دایره در بیسیک
نمودار پویا در اکسس
Unbound Master-Detail Form
RECORDSET/QUERY PAGING
ADO Recordset Paging
ایجاد نویگیشن باتن جهت تغییر صفحات گزارش
کوئری برای ساخت رشته اعداد در یک محدوده مشخص Query to create a range of numbers
پیدا کردن مسیر یک گره در یک ساختار پدر-فرزندی Path of a node in a hierarchical table
صفحه بندی دیتا با افکت و انیمیشن در مرورگر وب Data-paging with transitions/animations in Web Browser
محاسبات هندسی بدون دانستن یا داشتن فرمول Geometric Calculation
-
حساب ابجد - ماده تاریخ
هدف نوشتن برنامه ای هست که با گرفتن یک عدد طبیعی به نام Number و یک عدد طبیعی بین 2 تا 15 به نام N ؛
تمام حالت های ممکن غیر تکراری ترکیب N عدد و همچنین معادل حرفی آن را، بشرطی که جمع اونها طبق حساب ابجد برابر Number باشه، رو بدست بیاره و در دو لیست باکس جدا نمایش بده.
جدول ارزش حرف در حساب ابجد رو میتونین از آدرس زیر پیدا کنین:
https://fa.wikipedia.org/wiki/%D8%A7...B1%D9%88%D9%81
بعنوان مثال اگر Number=241 و N=3 باشه، جواب بصورت زیر خواهد بود:
1,40,200
ا م ر
و اگر Number=6 و N=2 باشه:
1,5
2,4
3,3
ا ه
ب د
ج ج
-
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
mazoolagh
هدف نوشتن برنامه ای هست که با گرفتن یک عدد طبیعی به نام Number و یک عدد طبیعی بین 2 تا 15 به نام N ؛
تمام حالت های ممکن غیر تکراری ترکیب N عدد و همچنین معادل حرفی آن را، بشرطی که جمع اونها طبق حساب ابجد برابر Number باشه، رو بدست بیاره و در دو لیست باکس جدا نمایش بده.
جدول ارزش حرف در حساب ابجد رو میتونین از آدرس زیر پیدا کنین:
https://fa.wikipedia.org/wiki/%D8%A7...B1%D9%88%D9%81
بعنوان مثال اگر Number=241 و N=3 باشه، جواب بصورت زیر خواهد بود:
1,40,200
ا م ر
و اگر Number=6 و N=2 باشه:
1,5
2,4
3,3
ا ه
ب د
ج ج
ضمن سلام و عرض تشکر از جناب mazoolagh بخاطر ایجاد این تاپیک ارزشمند
در مورد این مسئله بنده یک ابهام دارم و اون اینکه آیا دو مثال پائین فرضی و مستقل از مسئله مطرح شده در نظر گرفته شده اند و ارتباطی با اصل سوال ندارد؟ یا اگر دارند چرا در مثال یک 3 عدد 1، 40 و 200 بدست آمده که جزء اعداد طبیعی بین 2 و 15 نمی باشند ؟ در سوال اشاره شده که N عددی طبیعی بین 2 و 15 میباشد ولی می بینیم در مثال یک 3 عدد مذکور جزء این مجموعه( بین 2 و 15) نمی باشند.
در مثال 2 هم عدد یک جزء مجموعه نمی باشد و ترکیب 3و3 هم بعلت تکراری بودن آنها قابل قبول نمی باشد.
بنظرم اگر لطف کنی قدری بیشتر در مورد سوال توضیح بدهین دوستان راحتتر به جواب میرسند
با تشکر
-
1 ضمیمه
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
atf1379
ضمن سلام و عرض تشکر از جناب
mazoolagh بخاطر ایجاد این تاپیک ارزشمند
در مورد این مسئله بنده یک ابهام دارم و اون اینکه آیا دو مثال پائین فرضی و مستقل از مسئله مطرح شده در نظر گرفته شده اند و ارتباطی با اصل سوال ندارد؟ یا اگر دارند چرا در مثال یک 3 عدد 1، 40 و 200 بدست آمده که جزء اعداد طبیعی بین 2 و 15 نمی باشند ؟ در سوال اشاره شده که N عددی طبیعی بین 2 و 15 میباشد ولی می بینیم در مثال یک 3 عدد مذکور جزء این مجموعه( بین 2 و 15) نمی باشند.
در مثال 2 هم عدد یک جزء مجموعه نمی باشد و ترکیب 3و3 هم بعلت تکراری بودن آنها قابل قبول نمی باشد.
بنظرم اگر لطف کنی قدری بیشتر در مورد سوال توضیح بدهین دوستان راحتتر به جواب میرسند
با تشکر
در اینترنت سرچ کنید combination
کامبینیشن بطپر مثال دانشجو باید ۵۰۰۰۰۰۰ واریز کند ولی این واریزی رو بصورت چند فیش در یک ماه واریز میکند
حالا کد میخوایم که بصورت ترکیبی نشون بده که پرداخت دانشجو ممکن است شامل کدام پرداختها از لیست واریزیها هست .
جمع ۵۰۰۰۰۰۰ از واریزیها به کدام فیشها مطابقت داره و ....
در ریاضی و احتمالات داریم :
ابتدا مثال ساده تر
30دانش آموز را به چند روش میتوان سه تا سه تا چیدمان نمود و ....
در اینجا اعداد ابجد را به چند طریق میتوان بصورت سه تا سه تا مرتب نمود .
پس از مرتب کردن .
چند روش چیدمان سه تایی ایجاد شده جمعشان 241 میشود ؟
هدف بدست اوردن n=3 یعنی سه رقم هست که بدون تکرار جمعشان بشود number 241 و ضمنا در جدول ابجد موجود باشند .
1,40,200
اعداد ابجد متناظر با حروف هستند که جمعشان 241 میشود و تکرار هم نشده اند
«اَبْجَدْ - هَوََّزْ - حُطّی - کَلَمَنْ - سَعْفَصْ - قَرَشَتْ - ثَخَِّذْ - ضَظِغْ»
به ترتیب شماره میگیرند
1و2و3و4و5و6و7و8و9و10و20و30و40و50و60 70و80و90و100و200و300و400و500و600و700و80 0و900و1000
و عددهای پ ژ گ و چ هم برای فارسی به اینها با کدش اضافه میشه
حالا علی میشه
ع=70 +ل=30 +ی=10 70+30+10=110
طبق جدول
یا علی 70+30+10+10+1 =121
حالا من اینو فهمیدم
اینجا میخوایم برعکس عمل کنیم جمع رو میدیم و تعداد حروف مورد نظر رو
اون وقت میخوایم ببینیم شامل چه حروفی از ابجد میشه
با بررسی زیاد اعداد متناظر با جدول ابجد را ایجاد نمودم . و چیدمان اعداد ابجد را ایجاد کردم .
مشکل در جمع سطر کوئری دارم که کل سطر رو جمع کنه که بشه مثلا 241 رو پیدا کرد .
دستی میتونم فرمول بدم
ولی اگر کد sql ایجاد کنم که جمع هر سطر رو بده . اون موقع سطر مورد نظر مطابق با عدد جمع 241 رو فیلتر میکنم و تمام.
نهایتا میرسیم به اعداد که تبدیل میکنیم به حرف متناظر در ابجد .
کار شدنی هست . فعلا نمونه تا این مرحله.................
خسته شدم :متفکر: :عصبانی++: :تشویق:
-
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
atf1379
ضمن سلام و عرض تشکر از جناب
mazoolagh بخاطر ایجاد این تاپیک ارزشمند
در مورد این مسئله بنده یک ابهام دارم و اون اینکه آیا دو مثال پائین فرضی و مستقل از مسئله مطرح شده در نظر گرفته شده اند و ارتباطی با اصل سوال ندارد؟ یا اگر دارند چرا در مثال یک 3 عدد 1، 40 و 200 بدست آمده که جزء اعداد طبیعی بین 2 و 15 نمی باشند ؟ در سوال اشاره شده که N عددی طبیعی بین 2 و 15 میباشد ولی می بینیم در مثال یک 3 عدد مذکور جزء این مجموعه( بین 2 و 15) نمی باشند.
در مثال 2 هم عدد یک جزء مجموعه نمی باشد و ترکیب 3و3 هم بعلت تکراری بودن آنها قابل قبول نمی باشد.
بنظرم اگر لطف کنی قدری بیشتر در مورد سوال توضیح بدهین دوستان راحتتر به جواب میرسند
با تشکر
سلام و روز خوش
جناب padide55 راهنمایی خیلی خوبی کردن که این در واقع یک مساله ترکیب آمار هست، با این وجود بیشتر توضیح میدم:
1- عدد N در واقع تعداد انتخابهای ما از مجموعه حروف ابجد هست (یک مجموعه از 28 حرف) ،
که در اینجا شرط گذاشتیم :
2<= N <=15
یعنی بین 2 تا 15 حرف انتخاب میکنیم و حروف انتخابی میتونه تکراری هم باشه
2- بعبارت دیگه مساله همون انتخاب N حرف از 28 حرف هست (ترکیب آماری) با این شرط که جمع حروف انتخابی برابر Number باشه.
3- منظور از اینکه پاسخ غیرتکراری یعنی ترتیب حروف اهمیت نداره، بنابراین وقتی Number=6 , N=2 هست {1,5} پاسخ هست ولی {5,1} نیست و {3,3} هم تکراری محسوب نمیشه.
اگر ترتیب حروف اهمیت داشت مساله تبدیل به ترتیب آماری (Arrangement) میشد.
البته هدف از طرح این مساله صرفاً حل یک مساله آماری یا سرگرمی نیست، در این راه به مواردی برخورد میکنین که هر کدومش یک چالش کدنویسی یا آشنایی با یک مفهوم احتمالا جدید هست.
-
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
padide55
در اینترنت سرچ کنید combination
فعلا نمونه تا این مرحله.................
خسته شدم :متفکر: :عصبانی++: :تشویق:
سلام و روز خوش
خوشحالم که در این بحث شرکت کردین و همیجور تشکر میکنم بابت توضیحات مفید.
زمان بدین برنامه رو یک نگاه بندازم.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
با توجه به اینکه برنامه نویسی بلدنیستم ولی در کل سعی کردم با جستجو و بررسی به این نتیجه برسم .
اصل فرمول رو بر اساس نیاز از منابع مختلف جمع کردم
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
padide55
سلام
با توجه به اینکه برنامه نویسی بلدنیستم ولی در کل سعی کردم با جستجو و بررسی به این نتیجه برسم .
اصل فرمول رو بر اساس نیاز از منابع مختلف جمع کردم
سلام دوباره
کاش کدها رو همینجا هم پیوست میکردین و توضیح مختصری هم در مورد روش انتخابی میدادین، چون راستش متوجه نشدم برنامه دقیقا چکار میکنه.
این عبارت "برنامه نویسی بلد نیستم" رو هم میگذارم بحساب شکسته نفسی شما.
-
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
mazoolagh
هدف نوشتن برنامه ای هست که با گرفتن یک عدد طبیعی به نام Number و یک عدد طبیعی بین 2 تا 15 به نام N ؛
تمام حالت های ممکن غیر تکراری ترکیب N عدد و همچنین معادل حرفی آن را، بشرطی که جمع اونها طبق حساب ابجد برابر Number باشه، رو بدست بیاره و در دو لیست باکس جدا نمایش بده.
جدول ارزش حرف در حساب ابجد رو میتونین از آدرس زیر پیدا کنین:
https://fa.wikipedia.org/wiki/%D8%A7...B1%D9%88%D9%81
بعنوان مثال اگر Number=241 و N=3 باشه، جواب بصورت زیر خواهد بود:
1,40,200
ا م ر
و اگر Number=6 و N=2 باشه:
1,5
2,4
3,3
ا ه
ب د
ج ج
سلام
بنظرم از طریق ایجاد دو آرایه که عناصر تشکیل دهنده آنها بترتیب اعداد و حروف ابجد و ایجاد یک حلقه for...next (البته در مواردی شاید حلقه های for...next تو در تو )بتوان به جواب رسید.
الآن ساعت یک و سی دقیقه نصف شبه ، زیاد نمیخواهم ذهنم رو درگیر فکر کردن به این موضوع بکنم ، چون تا صبح همش باید خواب آرایه و حلقه های تو در تو ببینم:لبخند:خل
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
نمونه اعداد
مثلا ۱_۲_۳_۴_۵_۶
حالا
اگر سه تا سه تا چیدمان کنیم
۱_۲_۳
۱_۲_۴
۱_۲_۵
۱_۲_۶
۲_۳_۴
۲_۳_۵
۲_۳_۶
۳_۴_۴
۳_۴_۶
۴_۵_۶
حالا فرمول بدین .اگر چهارتا چهارتا و ....
بعد جمع هر سطر هم میخواد که باید چک بشه .
مواردی به لیست باکس addبشه که جمعشون همون جمع ما باشه
فرمول
اگر سه تایی باشه n=3
d='mynumbe
c='count number
for i to eof of table
i=go first
i=1
arangei=di+(n-(i+1));di+(n-(i+2);di+(n+i+c3)
go next
i=i+1
to eof
loop
ببخشید .
این تقریبا کد مورد لزوم
اول باید بره به اولین رکورد
بعد ببینه چند تایی باید باشه
iهر رکورد و رکورد دوم و رکورد سوم با هم .
بعد رکورد اول و سوم وچهارم با هم
بعد رکورد سوم وپنجم با هم .
نگاه به اعداد نکنید .
فقط ترتیب رکوردها مشخص شد .عددش رو لیست کنه .
جمع هر سه تا دربیاد .اگر با جمع کل مورد نظر مساوی باشه addبه لیست .
بروید دنبال کد فرمول ان فاکتوریل n!
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
این هم اعداد ابجد مورد نظر
بعد میرسیم به حروف ابجد متناظر
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
padide55
این هم اعداد ابجد مورد نظر
بعد میرسیم به حروف ابجد متناظر
عالیه :تشویق:
جستجوتون در اینترنت حرف نداره
این کدها رو از کدوم سایت دانلود کرده این ؟
-
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
eb_1345
سلام
بنظرم از طریق ایجاد دو آرایه که عناصر تشکیل دهنده آنها بترتیب اعداد و حروف ابجد و ایجاد یک حلقه for...next (البته در مواردی شاید حلقه های for...next تو در تو )بتوان به جواب رسید.
الآن ساعت یک و سی دقیقه نصف شبه ، زیاد نمیخواهم ذهنم رو درگیر فکر کردن به این موضوع بکنم ، چون تا صبح همش باید خواب آرایه و حلقه های تو در تو ببینم:لبخند:خل
سلام و روز خوش
بله، استفاده از آرایه و حلقه های تودرتو راه حل خیلی خوبی هست. ولی چون تعداد حلقه ها متغییر هست نیاز به ابداع یک روش ابتکاری برای پیاده سازی اون هست.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
padide55
این هم اعداد ابجد مورد نظر
بعد میرسیم به حروف ابجد متناظر
در تست اولیه بنظر میاد جواب گرفتین و روش ابتکاری و قشنگی هم بکار بردین که جای تبریک داره.
فقط فرم یک مقدار نیاز به چکش کاری داره و همچنین کدها لازمه دستی به سر و روشون کشیده بشه - وگرنه هسته منطق برنامه بنظرم عالی هست بخصوص که در روش متعارف nested loop (که جناب eb-1345 هم اشاره کردن) مشکل پرفورمنس وقتی تعداد حلقه ها از 6و7 بالاتر میره محسوس هست و روش شما بمراتب سریعتر هست.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
atf1379
عالیه :تشویق:
جستجوتون در اینترنت حرف نداره
این کدها رو از کدوم سایت دانلود کرده این ؟
سلام
سایتش رونمیدونم
ولی یک مشکل در کد دارم
3و3 رو نشون نمیده و تکراری در نظر میگیره .
دوم
میره تعداد ستون مورد نظر رو k در نظر میگیره
بعد همه رو با هم ذخیره مینه و یکجا به جدول انتقال میده
یعنی
برای هر ردیف یک integer با کد در نظرمیگیره
کل فرمول دو خطه
دوستان برنامه نویس شرح بیشتری بدن .
من فقط کد رو بدست اوردم و از روشش خوشم اومد
strSelect = "SELECT QN.N "
strFrom = "FROM QN "
strWhere = "WHERE QN_1.N > QN.N "
'--------------------------------runcode -search and --list of ehtemal -----------------
For intI = 1 To K - 1
strSelect = strSelect & ", QN_" & intI & ".N AS N" & intI & " "
strFrom = strFrom & ", QN AS QN_" & intI & " "
If intI < K - 1 Then
strWhere = strWhere & " AND QN_" & intI + 1 & ".N > QN_" & intI & ".N "
End If
Next
بقیه کدها برای ایجاد یک کوئری هست که از جدول ایجادشده جمع رو بدست بیاره و جمع مورد نظر رو فیلتر کنه.
-
1 ضمیمه
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
mazoolagh
سلام و روز خوش
بله، استفاده از آرایه و حلقه های تودرتو راه حل خیلی خوبی هست. ولی چون تعداد حلقه ها متغییر هست نیاز به ابداع یک روش ابتکاری برای پیاده سازی اون هست.
سلام
فایل ضمیمه رو هم بررسی بفرمائید
البته در فایل نمونه استفاده از حلقه فقط برای ترکیب های دو تائی صورت گرفته و بدیهیست برای ترکیبهای بیشتر باید از از حلقه های تو در تو بیشتر استفاده شود
بنظرم برای نتیجه گیری بهتر میتوان روشی که بنده در نمونه فوق ارائه نموده ام با روشی که در فایل نمونه جناب padide55 استفاده شده تلفیق نمود
-
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
eb_1345
سلام
فایل ضمیمه رو هم بررسی بفرمائید
البته در فایل نمونه استفاده از حلقه فقط برای ترکیب های دو تائی صورت گرفته و بدیهیست برای ترکیبهای بیشتر باید از از حلقه های تو در تو بیشتر استفاده شود
بنظرم برای نتیجه گیری بهتر میتوان روشی که بنده در نمونه فوق ارائه نموده ام با روشی که در فایل نمونه جناب
padide55 استفاده شده تلفیق نمود
فایل نمونه آخرین بار در ساعت 13:29 ویرایش شده
بمنظور متناظر شدن ترکیب حروف و اعداد جای x3 و x4 در کوئری تغییر دادم
-
نقل قول: حساب ابجد - ماده تاریخ
نقل قول:
نوشته شده توسط
eb_1345
سلام
فایل ضمیمه رو هم بررسی بفرمائید
البته در فایل نمونه استفاده از حلقه فقط برای ترکیب های دو تائی صورت گرفته و بدیهیست برای ترکیبهای بیشتر باید از از حلقه های تو در تو بیشتر استفاده شود
بنظرم برای نتیجه گیری بهتر میتوان روشی که بنده در نمونه فوق ارائه نموده ام با روشی که در فایل نمونه جناب
padide55 استفاده شده تلفیق نمود
time .....
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
بنظر میرسد در تابع buildquery نمونه پست 11 چنانچه در خط strWhere بجای < از =< استفاده شود نتیجه دقیقتر بدست میآید
strWhere = "WHERE QN_1.N >= QN.N "
For intI = 1 To k - 1
strSelect = strSelect & ", QN_" & intI & ".N AS N" & intI & " "
strFrom = strFrom & ", QN AS QN_" & intI & " "
If intI < k - 1 Then
strWhere = strWhere & " AND QN_" & intI + 1 & ".N >= QN_" & intI & ".N "
End If
Next
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
لطفاً نمونه جدیدتر رو از ضمیمه بررسی بفرمائید !
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
سلام
لطفاً نمونه جدیدتر رو از ضمیمه بررسی بفرمائید !
بنظر میرسد در نمونه آخر که نام حروف ابجد در ستون های کوئری از طریق DLookup استخراج گردیده بتوان از طریق ایجاد حلقه FOR ...NEXT نیز بدست آورد( بجهت حرفه ای عمل کردن درخلاصه و کوتاه تر کردن کدها)
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
بنظر میرسد در نمونه آخر که نام حروف ابجد در ستون های کوئری از طریق DLookup استخراج گردیده بتوان از طریق ایجاد حلقه FOR ...NEXT نیز بدست آورد( بجهت حرفه ای عمل کردن درخلاصه و کوتاه تر کردن کدها)
:تشویق: :تشویق: :تشویق: :تشویق: :تشویق:
سلام
این سوال کلا ذهنو درگیر کرده . خواب از سر برده .
اون فیلدها رو داخل فرم ایجاد کرده بودم که نتیجه کدهای ایجادشده رو ببینم.
بعد هم برشون نداشتم که نوع سرهم نمودن متن کوئری نمایش داده بشه تا خطای کار رو ببینم . اگر integerبه تنهایی به کار میبردم نمیدیدم چجوری میشه . اول از تکست باکس استفاده کردم . برای اون کسی که داره دانلود میکنه خوبه که سریع متوجه بشه قضیه چیه .
فرم زیبایی شده .
سرعت عملکرد هم عالیه .
موفق باشید.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
بنظر میرسد در نمونه آخر که نام حروف ابجد در ستون های کوئری از طریق DLookup استخراج گردیده بتوان از طریق ایجاد حلقه FOR ...NEXT نیز بدست آورد( بجهت حرفه ای عمل کردن درخلاصه و کوتاه تر کردن کدها)
بسیار عالی!
واقعا دست مریزاد - باید وقت بگذارم و با بررسی این برنامه چیز جدید یاد بگیرم.
من هنوز نمونه کد خودم رو آماده نکردم (با vba منظورم هست) ؛ ولی دوستان اگر پرسش جالب جدیدی به ذهنشون میرسه لطفا مطرح کنن.
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
بنظر میرسد در نمونه آخر که نام حروف ابجد در ستون های کوئری از طریق DLookup استخراج گردیده بتوان از طریق ایجاد حلقه FOR ...NEXT نیز بدست آورد( بجهت حرفه ای عمل کردن درخلاصه و کوتاه تر کردن کدها)
سلام
نمونه جدید که استخراج نام حروف متناظر اعداد ابجد از طریق حلقه for...next انجام و کد نویسی کوتاه تر گردید.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
سلام
نمونه جدید که استخراج نام حروف متناظر اعداد ابجد از طریق حلقه for...next انجام و کد نویسی کوتاه تر گردید.
بله، کدها بمراتب کمتر و طراحی فرم هم بهتر شده - فقط کاش یک کپی از کدها رو همرا با توضیح مختصری همینجا میگذاشتین.
خاصیت کپی کردن کدها در پست این هست که در جستجو هم ظاهر میشه.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
در هر دو برنامه نمونه که آقایان eb_1345 و Padide55 زحمتش رو کشیدن، از جدول و عملیات مربوط به اون استفاده شده.
یک نمونه هم من میگذارم که تمام کارها در حافظه انجام میشه (البته نهایتا نتایج رو در صورت نیاز میشه در جدول یا فایل هم ذخیره کرد).
یک خوبی این روش این هست که در ساده ترین محیط ها هم قابل پیاده سازی هست، کما اینکه سالها پیش این برنامه رو به FORTRAN نوشته بودم و همچنین با javascript مرورگر هم میشه نوشت.
چند نکته هست که توضیح میدم:
1- برای ساخت حلقه های تودرتو (Nested Loops) با تعداد حلقه متغییر، از یک آرایه برای نگهداری شمارنده حلقه ها استفاده کردیم.
پس از هر دور از عملیات، اگر شمارنده حلقه به مرز بالایی رسیده باشه اون رو 0 و شمارنده حلقه بیرونیش رو 1 اضافه میکنیم (همون کاری که Next انجام میده)
متغیر switch که میبینین برای همین منظور هست.
این یکی از روشهای ساخت Dynamic Nested Loops هست (بنظرم ساده ترینش)، برای دوستانی که مایل به یادگیری بیشتر و دونستن روشهای پیشرفته تر و ویژه زبانهای خاص هستن پیشنهاد میکنم همین عبارت رو گوگل کنن.
2- پس از پیدا کردن هر پاسخ، ابتدا آرایه پاسخV رو sort میکنیم و بعد اون رو با join به یک string تبدیل و در یک dictionary (اینجا متغییر D) میریزیم.
برای حذف پاسخ های تکراری کافی هست قبلش دیکشنری رو با متد exists چک کنیم.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
3- در این مساله، درسته که عملیات هر حلقه سبک هست ولی تعداد حلقه ها خیلی راحت میتونه به چند 10 میلیون برسه.
برای همین چند تمهید دیده شده:
- کنترل مرز بالایی هر حلقه با MaxIndex : فرضا اگر Number=21 , N=4 باشه هیچ مقدار بزرگتر 10 نمیتونه پاسخ باشه بنابراین مرز بالایی متغیر حلقه ها برابر 9 هست (موقعیت 10 در آرایه Values) و نه 27 (موقعیت 1000)
- اگر جمع مقادیر بیشتر از Number باشه یعنی هیچ پاسخ دیگه ای در آرایش کنونی حلقه ها نمیتونه جواب باشه، پس درونی ترین حلقه رو پایان میدیم
- برای اینکه برنامه به حالت freeze نره، از یک button برای متوقف کردن پروسه استفاده کردیم - همان روش استاندارد doevents
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
Option Compare DatabaseOption Explicit
Dim Values()
Dim V()
Dim Chars()
Dim C()
Dim A()
Dim Number As Integer
Dim N As Integer
Dim S As String
Dim i As Integer
Dim D As Dictionary
Dim Canceled As Boolean
Dim counter As Long
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
Private Sub Start_btn_Click()Me.Answers.SetFocus
Me.Start_btn.Enabled = False
Canceled = False
Me.Stop_btn.Visible = True
Dim Sum, MaxIndex As Integer
N = Me.N_cb
Number = Me.Number_tb
Me.Answers.RowSource = ""
For i = 0 To UBound(Values)
If Values(i) <= Number - N + 1 Then
MaxIndex = i
Else
Exit For
End If
Next i
ReDim A(N - 1)
ReDim V(N - 1)
ReDim C(N - 1)
For i = 0 To N - 1
A(i) = 0
Next i
Set D = New Dictionary
Dim switch As Boolean
counter = 0
Do While Not Canceled
For i = 0 To N - 1
V(i) = Values(A(i))
C(i) = Chars(A(i))
Next i
Sum = Array_Sum(V)
If Sum = Number Then
Sort V, 0, N - 1
AddAnswer
ElseIf Sum > Number Then
A(N - 1) = MaxIndex
End If
If Array_Sum(A) = N * MaxIndex Then Exit Do
switch = True
i = N - 1
Do While switch And i >= 0
A(i) = A(i) + 1
If A(i) > MaxIndex Then
A(i) = 0
switch = True
Else
switch = False
End If
i = i - 1
Loop
counter = counter + 1
If counter Mod 10000 = 0 Then DoEvents
Loop
Me.Answers.SetFocus
Me.Stop_btn.Visible = False
Me.Start_btn.Enabled = True
End Sub
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
Function Array_Sum(Q) As IntegerArray_Sum = 0
Dim i As Integer
For i = 0 To UBound(Q)
Array_Sum = Array_Sum + Q(i)
Next
End Function
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
Public Sub Sort(A As Variant, L As Integer, H As Integer)Dim Pivot, Swap
Dim Lx As Integer
Dim Hx As Integer
Lx = L
Hx = H
Pivot = A((L + H) \ 2)
While (Lx <= Hx)
While (A(Lx) < Pivot And Lx < H)
Lx = Lx + 1
Wend
While (Pivot < A(Hx) And Hx > L)
Hx = Hx - 1
Wend
If (Lx <= Hx) Then
Swap = A(Lx)
A(Lx) = A(Hx)
A(Hx) = Swap
Lx = Lx + 1
Hx = Hx - 1
End If
Wend
If (L < Hx) Then Sort A, L, Hx
If (Lx < H) Then Sort A, Lx, H
End Sub
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
Sub AddAnswer()S = Join(V, ",")
If Not D.Exists(S) Then
D.Add S, S
Me.Answers.AddItem D.Count & ";" & S & ";" & Join(C, " ")
Me.Answers = D.Count
End If
End Sub
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
ضمیمه 152677
.............
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
برنامه نمونه:
بجای این برنامه، از نمونه اصلاح شده پست 36 استفاده کنید.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
mazoolagh
و اگر Number=6 و N=2 باشه:
1,5
2,4
3,3
ا ه
ب د
ج ج
نقل قول:
نوشته شده توسط
mazoolagh
برنامه نمونه:
سلام جناب mazoolagh
در نمونه پست 24 که توسط eb_1345 ارائه شده تعداد ترکیب ها برای تعداد 2 و جمع 6 سه ترکیب و در نمونه جنابعالی دو ترکیب بدست می آید . درحالیکه در مثال پست اولتون برای تعداد 2 و جمع 6 سه ترکیب بدست آورده بودین( نقل قول بالا)
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
برنامه اصلاح شده ، کد پست 29 بصورت زیر اصلاح شد:
If Values(i) <= Number - N + 1 Then
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
atf1379
سلام جناب
mazoolagh
در نمونه پست 24 که توسط
eb_1345 ارائه شده تعداد ترکیب ها برای تعداد 2 و جمع 6 سه ترکیب و در نمونه جنابعالی دو ترکیب بدست می آید . درحالیکه در مثال پست اولتون برای تعداد 2 و جمع 6 سه ترکیب بدست آورده بودین( نقل قول بالا)
سلام و روز خوش
خیلی ممنون بابت دقت نظر شما و اینکه بحث رو دنبال کردین.
ایراد مربوط به جا افتادن یک = در شرط چک مرز بالایی متغییر حلقه ها بود.
برنامه ویرایش شده رو همینجا پیوست میکنم.
خوشحال میشم اگر موارد دیگه ای هم به بچشمتون خورد یا به ذهنتون رسید مطرح کنین. احساس میکنم از بابت بهینه کردن تعداد اجرای حلقه ها هنوز جای کار باشه.
-
2 ضمیمه
رسم نمودار ، گراف و ...
پرسش بعدی رو مطرح میکنم:
چه روشی رو برای ساخت و رسم نمودار (و شکل های پیچیده) مشابه تصاویر زیر پیشنهاد میکنید؟
راهنمایی اینکه flash نیست.
ضمیمه 152727
ضمیمه 152728
-
2 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
چند روزیه دنبال حرکت دایره در بیسیک بودیم .
به نتیجه رسیدیم .
این هم تاپیک مربوطه
فعلا برای اولین نمونه فایل مربوطه رومیگذارم .
حالا ما محور x را ثابت درنظربگیریم .
با توجه به ثابت شدن x در همین فرمول
شی ما حرکت بالا و پایین متناوب پیدا میکند .
تا اینجا همه چیز روبراه هست .
مرحله بعد کد جهت ایجاد حرکت نمودارهست .
دو راه داریم .
اول نقطه گذاری در صفحه و اینکه نقاط خاموش و روشن بشوند .شبیه انچه در تابلوهای روان داریم .
ضمیمه 152730
حالا کدام نقاط روشن شوند
اینجا کلیک کنید
پیشنهاد من اینه که کد بدیم که شی در صفحه اتومات ایجاد بشه و بر اساس تایم اینتروال به اندازه هر x. به چپ بره .
بر اساس xوy. نمودار .
-
نقل قول: رسم نمودار ، گراف و ...
نقل قول:
نوشته شده توسط
mazoolagh
پرسش بعدی رو مطرح میکنم:
چه روشی رو برای ساخت و رسم نمودار (و شکل های پیچیده) مشابه تصاویر زیر پیشنهاد میکنید؟
راهنمایی اینکه flash نیست.
ضمیمه 152727
ضمیمه 152728
.................................................. ..