متفرق میرا پراجیکٹ

زبردست فارمولہ دیاہے میں یاد رکھوں گالیکن ابرار بھائی میرا پراجیکٹ کے سوال کا کچھ حصہ ابھی باقی ہے۔ جس کے مطابق مجھے صرف انہیں نمبروں کو جمع کرنا تھا جو تین پر تقسیم ہوتے ہوں۔
ویسے تو وہ بھی ممکن ہے ، ذرا تجربہ کریں
فرض کریں اگر ہمیں 51 تک صرف ایسے حروف کو جمع کرنا ہے جو کہ تین پر تقسیم ہوں۔تو
پہلے ہم سب کا حاصل جمع نکالیں گے اور اس کو تین پر تقسیم کریں گے۔
51×26 = 1326÷3=442
ہمارے پاس جواب 442 آگیا لیکن یہ مکمل جواب نہیں ہے
اب 51 (جس عدد تک ہم نے جمع کرنا تھا) کو تین پر تقسیم کریں
51÷3=17
اب یہ 17 پہلے والے جواب میں جمع کرلیں 442+17 = 459
اب آپ 3+6+9+۔۔۔+51 = جمع کر کے چیک کرلیں آپ کا جواب 459 ہی آئے گا۔
یہ فارمولا 51 تک ہی محدود نہیں ہے آپ 3 سے لے کر کسی بھی بڑے عدد کو لے کر چیک کر سکتے ہیں :)
 

MughalS

محفلین
زبردست فارمولہ دیاہے میں یاد رکھوں گالیکن ابرار بھائی میرا پراجیکٹ کے سوال کا کچھ حصہ ابھی باقی ہے۔ جس کے مطابق مجھے صرف انہیں نمبروں کو جمع کرنا تھا جو تین پر تقسیم ہوتے ہوں۔
PHP:
def sum_nums(a,x):
    accum_total = 0
    for i in range(x+1):
        if i % a == 0:
            accum_total = accum_total + i
    return accum_total
یا
PHP:
def fun(a,x):
    list =[]
    for i in range(x+1):
        if i % a == 0:
            list.append(i)
    return sum(list)

یہاں پر a سے مراد وہ نمبر ہے جس پر تقسیم ہونے والے اعداد جمع ہوں اور x سے مراد وہ رینج ہے جس تک اعداد کو جمع کرنا ہے ۔
نتیجہ:
PHP:
>>> sum_nums(3,51)
459
>>> fun(3,51)
459
 

محمدصابر

محفلین
PHP:
def sum_nums(a,x):
    accum_total = 0
    for i in range(x+1):
        if i % a == 0:
            accum_total = accum_total + i
    return accum_total
یا
PHP:
def fun(a,x):
    list =[]
    for i in range(x+1):
        if i % a == 0:
            list.append(i)
    return sum(list)

یہاں پر a سے مراد وہ نمبر ہے جس پر تقسیم ہونے والے اعداد جمع ہوں اور x سے مراد وہ رینج ہے جس تک اعداد کو جمع کرنا ہے ۔
نتیجہ:
PHP:
>>> sum_nums(3,51)
459
>>> fun(3,51)
459

اس کوڈ کی سمجھ تو آ رہی ہے کہ یہ وہی اُوپر والا کوڈ ہے۔ اور یہ دونوں کوڈ کام بھی کر رہے ہیں۔
PHP:
def sum_nums(a,x):
    accum_total = 0
    for i in range(x+1):
        if i % a == 0:
            accum_total = accum_total + i
    return accum_total
لیکن آپ نے اس میں ایک نئی لائن لکھی ہے۔
PHP:
        if i % a == 0:
اس لائن کا کیا مطلب ہے؟

لیکن یہ دوسرا کوڈ تو اُوپر سے ہی گزر گیا؟
PHP:
def fun(a,x):
    list =[]
    for i in range(x+1):
        if i % a == 0:
            list.append(i)
    return sum(list)
تھوڑا سا سمجھا ہی دیں۔
 

محمداحمد

لائبریرین
اس کے علاوہ ایک اور طریقہ بھی ہے ۔
اگر نمبر جفت (even) ہو تو اس میں سے ایک نفی کر کے اسے طاق (odd) کرلیں، جیسے 50 کو 49 اور اس کا نصف لے کر اوپر کی طرف عدد کو مکمل کرلیں۔ جیسے 49 کا 25
اب 49 کو 25 سے ضرب دے لیں ۔ اور اس میں 50 جمع کرلیں ( جو عدد آپ نے طاق کرنے کیلئے نکالا تھا), اور اگر طاق تھا تو اس کو جمع کرنے کی ضرورت ہی نہیں ۔ اس طرح اگر آپ بڑی رقم کو اس طرح جمع کرنا چاہیں گے تو لمبا لوپ نہیں چلانا پڑے گا۔
کوڈ:
49*25+50 = 1275

بہت خوب ابرار صاحب،

ہم نے آپ کے اس طریقہ کو Pythonize کرنے کی کوشش کی ہے، :) دیکھیے ٹھیک ہے کیا؟

PHP:
def sumup (x):
    import math
    if x % 2 == 0:
            x = x - 1
            return (x * math.ceil(x/2)) + x
    else:
            return (x * math.ceil(x/2))

اس میں جو نئی یا مشکل چیزیں ہیں وہ صابر بھائی سمجھا دیں گے۔ :)
 

محمداحمد

لائبریرین
PHP:
return (x * math.ceil(x/2)) + x
کے بجائے
PHP:
return (x * math.ceil(x/2)) + x + 1
کرنا پڑے گا کیونکہ آپ x میں سے ایک مائنس کر چکے ہیں۔

بہت شکریہ ! اس طرف تو میرا دھیان ہی نہیں گیا۔

ویسے کیا آپ کا دوسرا فارمولہ (3 سے پورے پورے تقسیم ہونے والے اعداد کا حاصل جمع) 3 کے علاوہ بھی کار گر ہے۔ کیا ہم اس کا بھی کوئی جنرل فارمولا بنا سکتے ہیں۔
 
میرے اندازے کے مطابق بن تو سکتا ہے ،پہلے والا تو ایسے ہی اس عدد پر تقسیم کر دیں ، لیکن آخر میں جو جمع کرتے ہیں اس میں تھوڑا فارمولا لگانا پڑے گا۔
جیسے 5 کیلئے آپ کو آخر میں جو جمع کرتے ہیں اس عدد کو 2 سے ضرب دے کر جمع کریں اور 7 کیلئے 3 سے
اسی طرح جفت اعداد کیلئے جیسے 2 کیلئے 1/2 سے ضرب دے کر اور 4 کیلئے 1.5 سے اور 6 کیلئے 2.5 ضرب دے کر جمع کرنا پڑےگا ۔
 

محمداحمد

لائبریرین
میرے اندازے کے مطابق بن تو سکتا ہے ،پہلے والا تو ایسے ہی اس عدد پر تقسیم کر دیں ، لیکن آخر میں جو جمع کرتے ہیں اس میں تھوڑا فارمولا لگانا پڑے گا۔
جیسے 5 کیلئے آپ کو آخر میں جو جمع کرتے ہیں اس عدد کو 2 سے ضرب دے کر جمع کریں اور 7 کیلئے 3 سے
اسی طرح جفت اعداد کیلئے جیسے 2 کیلئے 1/2 سے ضرب دے کر اور 4 کیلئے 1.5 سے اور 6 کیلئے 2.5 ضرب دے کر جمع کرنا پڑےگا ۔

خوب ! یعنی یہ کام تھوڑی سی محنت سے ہو سکتا ہے۔

ویسے کیا آپ پروگرامنگ سے وابسطہ ہیں؟
 
فامولا کچھ اس طرح بنے گا۔
جیسے اگر ہم 7 سے 105 تک جمع کرنا چاہتے ہیں صرف 7 والے ہندسے تو
پہلے تو ہم ایک سے 105 تک حاصل جمع لیں گے اور اس کو 7 پر تقسیم کر دیں گے اور اس کے بعد نیچے دیئے گئے فارمولے سے جو رزلٹ ملے گا وہ اس میں جمع کر دیں گے۔ یہاں ایکس 105 اور وائی 7 ہے
PHP:
(x/y)*(y/2-0.5)
ذرا تجربہ کر کے چیک کریں اور مجھے بھی بتائیں کہ کیا یہ فارمولا کام کر ے گا یا نہیں ، کیونکہ میں نے بھی ابھی اسے ٹیسٹ نہیں کیا ،
 

محمدصابر

محفلین
خوب ! یعنی یہ کام تھوڑی سی محنت سے ہو سکتا ہے۔

ویسے کیا آپ پروگرامنگ سے وابسطہ ہیں؟
محفل میں ان کے اتنے بڑے بڑے پراجیکٹس کو آپ نے ابھی تک نہیں دیکھا۔
جیسے ان پیج کنورٹر
مائیکروسافٹ ورڈ کے لئے قرآن مجید کا پلگ ان
نستعلیق فونٹ کے لئے شاید ترسیموں کی تیاری کی ایپلیکیشن
 

محمدصابر

محفلین
اس کا مطلب ہے کہ اگر a , i پر پورا پورا تقسیم ہو جائے تو اس کے بعد آنے والا کوڈ چلا دو ورنہ else کے بعد والا کوڈ کام کرے گا۔
بہت شکریہ ابرار بھائی۔ یعنی if کے سامنے شرط (i % a == 0)موجود ہے اگر شرط پوری ہوتی ہے تو نیچے لکھا ہو کوڈ کا بلاک چلاؤ جو if والی کمانڈ سے تھوڑا آگے کر کے لکھا گیا ہے۔ else والا حصہ اس کوڈ میں تو نہیں تھا لیکن بعد میں محمداحمد کے لکھے ہوئے کوڈ میں مثال موجود ہے۔ ایک اور چیزجس کی وضاحت ضروری ہے۔ کہ یہاں دو دفعہ برابر کا نشان کیوں موجود ہے؟ اور فیصد کا نشان پورا پورا تقسیم ہونے ظاہر کرتا ہے۔یا اس کا کوئی اور مقصد ہے؟
 
یہ "٪" ماڈولس آپریٹر ہے۔ پرسنٹ نہیں ہے۔
کسی بھی دو عدد کو تقسیم کرنے کے بعد جو باقی بچ جائے ، وہی بقایا بچ جانے والا عدد اس آپریٹر کے ذریعے حاصل کیا جاتا ہے۔
جیسے 17 کو 3 پر تقسیم کریں تو باقی بچ جانے والا عدد 2 ہوگا اور اگر ہم اس کو کوڈ میں لکھیں تو
PHP:
if 17%3 == 2 :
یہ کنڈیشن true ہو گی۔
اور دوسرا سوال "==" ، اس کو ایکول (برابر) آپریٹر کہا جاتا ہے ۔ یعنی 17 کو 3 پر تقسیم کرنے کے بعد بقایا بچ جانے والا عدد 2 برابر ہے آپریٹر کے بعد آنے والے عدد کے تو کنڈیشن true ہو گی ورنہ نہیں۔
ویسے کچھ لینگویجز میں "=" بھی یہی کام کرتا ہے ، لیکن عام طور پر "=" ویرایبل کو ویلیو اسائن کرتے ہوئے استعمال کیا جاتا ہے ۔
نیچے دیئے گئے لنک کو بھی چیک کر لیں۔
http://www.w3schools.com/php/php_operators.asp
 

محمدصابر

محفلین
میرا اصل پراجیکٹ یہ تھا کہ میں نے ہزار سے کم قدرتی اعداد میں سے 3 اور 5 کے multiples کو جمع کرنا ہے۔ اس کے لئے جو کوڈ میری سمجھ میں آیا ہے وہ مندرجہ ذیل ہے۔ لیکن مسئلہ یہ ہے کہ یہ مطلوبہ نتائج نہیں دیتا۔خرابی کہاں پر ہے؟
PHP:
def sum_nums(a,b,x):
    accum_total = 0
    for i in range(x):
        if i % a == 0:
            accum_total = accum_total + i
    for j in range(x):
        if j % b == 0:
            accum_total = accum_total + j
 
    return accum_total
یاد رہے کہ اس کمانڈ کا جواب 233168 آنا چاہیے۔
PHP:
sum_nums(3,5,1000)
 

محمداحمد

لائبریرین
میرا اصل پراجیکٹ یہ تھا کہ میں نے ہزار سے کم قدرتی اعداد میں سے 3 اور 5 کے multiples کو جمع کرنا ہے۔ اس کے لئے جو کوڈ میری سمجھ میں آیا ہے وہ مندرجہ ذیل ہے۔ لیکن مسئلہ یہ ہے کہ یہ مطلوبہ نتائج نہیں دیتا۔خرابی کہاں پر ہے؟

قدرتی اعداد سے کیا مراد ہے؟
 
محمد صابر ، آپ نے for لوپ دو دفعہ چلا لی تھی جس کی وجہ سے علیحدہ علیحدہ دو دفعہ اعداد جمع ہو گئے جب کہ انہیں ایک ہی پیچیدہ شرط میں چیک کرنا تھا اور پھر جو نمبر 3 اور 5 پر تقسیم ہوتا ہو تب اسے accum_total میں جمع کرنا تھا۔

کوڈ یوں ہوگا۔

PHP:
def sum_nums(a,b,x):
    accum_total = 0
    for i in range(x):
            if (i % a == 0) or (i % b ==0):
                accum_total = accum_total + i
 
return accum_total
 
Top