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

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

  1. #1

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

    سلام. من یه کد نوشتم که جمع اعداد بین دو عدد مورد نظر را در میاره. کد ریاضیش هم همونطور که خودتون می دونید این هست :
    ($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. #2

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

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

  3. #3

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

    سلام. خیلی ممنون از پاسختون. حق با شماست. من اونو پاک کردم .
    در مورد اعداد 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 تا چاپ می کرد. البته الان توی نمونه ای که توی آدرس بالا هست پاکش کردم. مشکل از کجاست؟

    یاعلی

  4. #4

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

    دوست عزیز
    اول از همه باید بگم تا جایی که یادمه فرمولی که شما واسه حاصلجمع فرمودین همیشه از 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

  5. #5

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

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

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

  6. #6

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

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

  7. #7

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

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

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

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

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


  8. #8

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

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

  9. #9

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

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

    یاعلی

  10. #10

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

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

  11. #11

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

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

  12. #12

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

    دوستان عزیز 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.
    منظورتون اینه که اول یه فانکشن تعریف کنیم و بعدش این فانکشن را فراخوانی کنیم؟ اگر بله میشه مزیت این کار نسبت به راه حل فعلی را هم بفرمایید.

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

  13. #13

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

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

    این در حالیه که به شما کمک می کنه دوباره نویسی هم نکنید
    امکان خطایابی و قابلیت توسعه رو هم بالا می بره

  14. #14

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

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

  15. #15

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

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


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

    ممنون...

  16. #16

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

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

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

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