نمایش نتایج 1 تا 16 از 16

نام تاپیک: الگوریتم جمع اعداد

  1. #1
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    پست
    17
    تشکر کردن
    28
    یک بار تشکر شده در یک پست

    الگوریتم جمع اعداد

    سلام. من یه کد نوشتم که جمع اعداد بین دو عدد مورد نظر را در میاره. کد ریاضیش هم همونطور که خودتون می دونید این هست :
    ($n*($n+1))/2
    خوب من فایل را که اجرا می کنم، بعضی وقتا درست میشه بعضی وقتا نه
    مثلا گاهی وقتا 1 تا 10 را درست می زنه 55 اما گاهی وقتا می زنه 1055 یا مثلا 50 تا 51 را که باید بشه 101، یه بار می زنه 1326 یه بارم می زنه 511326 بقیش را هم دیگه امتحان نکردم. در ضمن 1 تا 100 هم باید بشه 5050. حالا خودتون چند بار امتحان کنید ببینید چی میاره.
    اینجا آپلود کردم می تونید نمونش را ببینید :
    http://persiansobi.ir/php/num.php
    اینم سورس فایل :
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <div align="center">
    <div dir="rtl">
    <form method="get">
    <span style="font-family:tahoma; font-size:11px; color:brown;">عدد اول : </span><input type="text" size="5" name="first_number" />
    <span style="font-family:tahoma; font-size:11px; color:brown;">عدد دوم : </span><input type="text" size="5" name="second_number" />
    <input type="submit" value="بفرست!" />
    </form>
    </div>
    <?php
    $i=$_GET['first_number'];
    while ($i<=$_GET['second_number']) {
    $tedad=$i++;
    }
    if ($_GET['first_number']=='' or $_GET['second_number']==''){
    echo "<div style=\"color:red;\"><b>please fill the fields !</b></div>";
    }
    elseif ($_GET['first_number']>=$_GET['second_number']){
    echo "<span style=\"font-family:tahoma; font-size:11px; color:red;\" dir=\"rtl\" >عدد اول، باید از عدد دوم کوچکتر باشد!</span>";
    }
    else{
    echo $tedad;
    echo "<span style=\"font-family:tahoma; font-size:11px; color:blue;\" dir=\"rtl\" >حاصل جمع اعداد :</span>"." ".($tedad*($tedad+1))/2;
    }
    ?>
    </div>
    <span ></span>
    </html>


    یاعلی

  2. کاربرانی که به خاطر مطلب مفید atoofy از وی تشکر کرده‌اند:


  3. #2
    VIP
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    د***ده مجازی
    پست
    1,001
    تشکر کردن
    515
    1,524 بار تشکر شده در 353 پست

    نقل قول: الگوریتم جمع اعداد

    دوست عزیز
    کدی که نوشتید درسته اما یه اشتباه کوچولو کردید و اون اینه که تو آخرین else تون tedad رو هم به همراه نتیجه جمع دارید چاپ می کنید.
    بخاطر همونه که وقتی می نویسید 1 و 10 نتیجه رو می زنه 1055. جواب 55 درسته ولی تعداد 10 رو هم کنارش چاپ می کنه.
    موفق باشید
    ما را نه غم دوزخ و نی حرص بهشت است!
    www.yaqubian.com

  4. 2 کاربر از yaqubian به خاطر این مطلب مفید تشکر کرده اند:


  5. #3
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    پست
    17
    تشکر کردن
    28
    یک بار تشکر شده در یک پست

    نقل قول: الگوریتم جمع اعداد

    سلام. خیلی ممنون از پاسختون. حق با شماست. من اونو پاک کردم .
    در مورد اعداد 1 تا 10 و 1 تا 100 درسته. اما مثلا وقتی بزنم 5 تا 9 به جای 35 که جواب هست، می نویسه 45 یا مثلا 50 تا 51 که باید بشه 101 را می زنه 1326 .یا یکی دیگه این که 6 تا 7 که باید بشه 13 را می زنه 28 و ... . احتمالا در مورد برخی عددهای دیگه هم همین طور باشه اما من تست نکردم هنوز. روی اون نمونه هم به آدرس زیر مشکل else آخر را حل کردم. می تونید روش تست کنید و همین اشکالی که هنوز هست ( جمع اشتباه اعداد) را ببینید :

    http://persiansobi.ir/php/num.php
    در ضمن من اون tedad را توی else آخر هم چاپ می کردم تا ببینم چند تا عدد بین اون دو عدد به دست میاد. توی این قسمت هم اشکال دارم چون مثلا اگر عدد اولی را 800 و عدد دومی را 9000 می زدم باز هم tedad$ را 9000 تا چاپ می کرد. البته الان توی نمونه ای که توی آدرس بالا هست پاکش کردم. مشکل از کجاست؟

    یاعلی

  6. #4
    VIP
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    د***ده مجازی
    پست
    1,001
    تشکر کردن
    515
    1,524 بار تشکر شده در 353 پست

    نقل قول: الگوریتم جمع اعداد

    دوست عزیز
    اول از همه باید بگم تا جایی که یادمه فرمولی که شما واسه حاصلجمع فرمودین همیشه از 1 تا یه عدد خاصی هست.
    اما چیزی که شما می خواین فکر کنم این باشه. تست کردم درست کار می کنه:
    <?php
    if(isset($_GET['first_number']))
    {
    $tedad=0;
    $i=$_GET['first_number'];
    $j=$_GET['second_number'];
    if($i>$j)
    {
    $temp=$i;
    $i=$j;
    $j=$temp;
    }
    while($i<=$j)
    {
    $tedad+=$i;
    $i++;
    }
    echo $tedad;
    }
    ?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <div align="center">
    <div dir="rtl">
    <form method="get">
    <span style="font-family:tahoma; font-size:11px; color:brown;">عدد اول : </span><input type="text" size="5" name="first_number" />
    <span style="font-family:tahoma; font-size:11px; color:brown;">عدد دوم : </span><input type="text" size="5" name="second_number" />
    <input type="submit" value="بفرست!" />
    </form>
    </div>
    </div>
    <span ></span>
    </html>

    موفق باشید
    ما را نه غم دوزخ و نی حرص بهشت است!
    www.yaqubian.com

  7. #5
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    پست
    17
    تشکر کردن
    28
    یک بار تشکر شده در یک پست

    نقل قول: الگوریتم جمع اعداد

    سلام. خیلی ممنون.
    حالا که یه نگاه سرسری انداختم چیز زیادی نفهمیدم. حالا اگه یه توضیح کوچولو هم لطف کنید بدید بسیار ممنون میشم.اگرم که نه خودم دوباره یه نگاهی بهش میندازم ببینم چیزی دستگیرم میشه یا نه.

    با تشکر...
    یاعلی

  8. #6
    VIP
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    د***ده مجازی
    پست
    1,001
    تشکر کردن
    515
    1,524 بار تشکر شده در 353 پست

    نقل قول: الگوریتم جمع اعداد

    دوست عزیز
    اول از همه چک می کنم که ببینم اصلا چیزی به اسم first_number ست شده یا نه؟ اگه درست بود که دریافتش می کنم. مقادیر هر دو عدد رو به ترتیب در i , j ذخیره می کنیم. بعد چک می کنیم که اگه i بزرگتر از j بود جاشون رو عوض کن.
    بعدش تا زمانی که i کوچکتر از j باشه هر عدد رو می ریزم تو tedad و بعدی ها رو بهش اضافه می کنم.
    فقط همین.
    البته اگه بخواید کاملترش کنید هنوز خیلی جا واسه کار کردن داره.
    موفق باشید
    ما را نه غم دوزخ و نی حرص بهشت است!
    www.yaqubian.com

  9. #7
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    پست
    17
    تشکر کردن
    28
    یک بار تشکر شده در یک پست

    نقل قول: الگوریتم جمع اعداد

    سلام.خیلی ممنون جناب یعقوبیان.
    گرفتم چی شد.یه ابهام برام ایجاد شد: چرا اینجا فقط بررسی کردید که تنها first_number ست شده باشه؟ یعنی چرا در صورتی که second_number خالی هم باشه، بازم باید کار کنه؟

    دوم اینکه من first_number را خالی گذاشتم و second_number را 6 دادم. جواب 21 شد. چرا؟

    اول از همه باید بگم تا جایی که یادمه فرمولی که شما واسه حاصلجمع فرمودین همیشه از 1 تا یه عدد خاصی هست.
    یعنی اون کد من حالا اگر عدد اول همیشه1 باشه، درست کار می کنه؟

    ممنون...
    یاعلی


  10. #8
    کاربر دائمی آواتار امید امرایی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شیراز
    پست
    722
    تشکر کردن
    329
    327 بار تشکر شده در 228 پست

    نقل قول: الگوریتم جمع اعداد

    بنده نمی دونم جناب yaqubian به چه علت فقط وجود عدد اول رو چک کردند اما این حالت می تونه با وجود شرطی که در صورت عدم وجود عدد اول اون رو برابر 1 قرار بده کامل بشه . در حالت فعلی با عمل جابجایی که در مقادیر صورت می گیره عدد اول از 0 شروع می شه .
    توصیه هایی در دنیای وب و دیجیتال (amraei.com)

  11. #9
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    پست
    17
    تشکر کردن
    28
    یک بار تشکر شده در یک پست

    نقل قول: الگوریتم جمع اعداد

    سلام. خیلی ممنون جناب kassit.
    خوب در حالت فعلی درسته که عدد اول 0 شروع میشه اما در صورتی که first_number ست نشده باشه اصلا هیچ عملیاتی نباید انجام بشه.اما در حال حاضر میشه. چرا؟

    یاعلی

  12. #10
    VIP
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    د***ده مجازی
    پست
    1,001
    تشکر کردن
    515
    1,524 بار تشکر شده در 353 پست

    نقل قول: الگوریتم جمع اعداد

    دوستان عزیز kassit و atoofi
    دلیل خاصی نبوده من فقط الگوریتم شما رو تصحیح کردم و اگه دیده باشید نوشتم که واسه کامل کردن این برنامه هنوز خیلی باید کار بشه. من فقط یه تیکه کوچولو کد نوشتم. شما زحمت بکشید کامل ترش کنید.
    موفق باشید
    ما را نه غم دوزخ و نی حرص بهشت است!
    www.yaqubian.com

  13. 2 کاربر از yaqubian به خاطر این مطلب مفید تشکر کرده اند:


  14. #11
    کاربر دائمی آواتار امید امرایی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شیراز
    پست
    722
    تشکر کردن
    329
    327 بار تشکر شده در 228 پست

    نقل قول: الگوریتم جمع اعداد

    بله و دقیقا بنده هم می خواستم عرض کنم که روش صحیح برای انجام این کار اینه که ابتدا این الگوریتم رو در یک تابع تعریف کنید .
    توصیه هایی در دنیای وب و دیجیتال (amraei.com)

  15. #12
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    پست
    17
    تشکر کردن
    28
    یک بار تشکر شده در یک پست

    نقل قول: الگوریتم جمع اعداد

    دوستان عزیز kassit و atoofi
    دلیل خاصی نبوده من فقط الگوریتم شما رو تصحیح کردم و اگه دیده باشید نوشتم که واسه کامل کردن این برنامه هنوز خیلی باید کار بشه. من فقط یه تیکه کوچولو کد نوشتم. شما زحمت بکشید کامل ترش کنید.
    موفق باشید
    سلام. خیلی ممنونم دوست خوبم. حالا ببینید با دستور زیر کامل شده یا نه؟

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <div align="center">
    <div dir="rtl">
    <form method="get">
    <span style="font-family:tahoma; font-size:11px; color:brown;">عدد اول : </span><input type="text" size="5" name="first_number" />
    <span style="font-family:tahoma; font-size:11px; color:brown;">عدد دوم : </span><input type="text" size="5" name="second_number" />
    <input type="submit" value="بفرست!" />
    </form>
    <?php
    $i=$_GET['first_number'];
    $j=$_GET['second_number'];
    if($_GET['first_number']=='' or $_GET['second_number']==''){
    echo "<span style=\"font-family:tahoma; font-size:11px; color:red;\">لطفا فیلد ها را پر کنید.</span>";
    }
    elseif($i==$j){
    echo "لطفا دو عدد متفاوت انتخاب نمایید.";
    }
    else{
    $tedad=0;
    if ($i>$j){
    $temp=$i;
    $i=$j;
    $j=$temp;
    }
    while($i<=$j){
    $tedad+=$i;
    $i++;
    }
    echo "<span style=\"font-family:tahoma; font-size:11px; color:blue;\">حاصل جمع اعداد : </span>";
    echo $tedad;
    echo "<br /><br />";
    echo "<span style=\"font-family:tahoma; font-weight:bold; font-size:11px; color:green;\">بچه ببین چه کدی نوشتم. برو حال کن. :دی</span>";
    }
    ?>
    </div>
    </div>
    </html>


    همونطور که می بینید اگر فیلد ها خالی باشه، می نویسه: "لطفا فیلد ها را پر کنید.". خوب این اتفاق دفعه ی اول هم میفته. اگر بخوایم فقط در صورتی که کاربر فیلد خالی را ارسال کرد، این اتفاق بیفته و دفعه ی اول مخفی باشه باید چه کار کرد؟

    سوال دیگه اینکه اصلا کد بالا اصولی هست؟

    بله و دقیقا بنده هم می خواستم عرض کنم که روش صحیح برای انجام این کار اینه که ابتدا این الگوریتم رو در یک تابع تعریف کنید .
    خیلی ممنون جناب kassit.
    منظورتون اینه که اول یه فانکشن تعریف کنیم و بعدش این فانکشن را فراخوانی کنیم؟ اگر بله میشه مزیت این کار نسبت به راه حل فعلی را هم بفرمایید.

    موفق باشید.
    یاعلی

  16. #13
    کاربر دائمی آواتار امید امرایی
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شیراز
    پست
    722
    تشکر کردن
    329
    327 بار تشکر شده در 228 پست

    نقل قول: الگوریتم جمع اعداد

    طبق روال رایج ، مهمترین مزیت کپسوله سازی دستوره و اینکه می تونید اون رو در شرط ها و جریان های کنترل برنامه هم استفاده کنید . ضمن اینکه می تونه یک مقدار بازگشتی هم داشته باشه .

    این در حالیه که به شما کمک می کنه دوباره نویسی هم نکنید
    امکان خطایابی و قابلیت توسعه رو هم بالا می بره
    توصیه هایی در دنیای وب و دیجیتال (amraei.com)

  17. کاربرانی که به خاطر مطلب مفید امید امرایی از وی تشکر کرده‌اند:


  18. #14
    VIP
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    د***ده مجازی
    پست
    1,001
    تشکر کردن
    515
    1,524 بار تشکر شده در 353 پست

    نقل قول: الگوریتم جمع اعداد

    دوست عزیز
    بهتر شده اما همونطور که دوست خوبمون kassit هم فرمودن بهتره که مفاهیم کپسوله سازی رو رعایت کنید.
    موفق باشید
    ما را نه غم دوزخ و نی حرص بهشت است!
    www.yaqubian.com

  19. #15
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    پست
    17
    تشکر کردن
    28
    یک بار تشکر شده در یک پست

    نقل قول: الگوریتم جمع اعداد

    سلام. خیلی ممنون.
    راستی توی کد isset به کار رفته بود که اگر فیلد اول خالی هم می بود، بازم جمع می کرد. اما من اومدم و اینطوری کردم :
    if($_GET['first_number']=='' or $_GET['second_number']=='')


    خوب مشکل من کجا بوده که این isset کار نمی کرد؟

    ممنون...

  20. #16
    VIP
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    د***ده مجازی
    پست
    1,001
    تشکر کردن
    515
    1,524 بار تشکر شده در 353 پست

    نقل قول: الگوریتم جمع اعداد

    دوست عزیز
    متد isset فقط کارش اینه که چک می کنه که متغیر مورد نظر set شده یا نه؟ نوع بازگشتیش هم boolean هست.
    شما حتی اگه فیلدتون رو خالی هم بذارید چون از طریق فرم عمل ارسال داره انجام می شه پارامتر مورد نظر set می شه. واسه اینکه خالی بودن یا نبودن رو چک کنید باید validation انجام بدین مثل مقایسه با یه رشته null یا اینکه از متد strlen طولش رو محاسبه کنید و ببینید صفر هست یا نه؟
    موفق باشید
    ما را نه غم دوزخ و نی حرص بهشت است!
    www.yaqubian.com

  21. کاربرانی که به خاطر مطلب مفید yaqubian از وی تشکر کرده‌اند:


بوک مارک کردن این تاپیک

بوک مارک کردن این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •