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

نام تاپیک: مشکل در جذر گرفتن در C

  1. #1

    مشکل در جذر گرفتن در C

    درود بر دوستان برنامه نویس
    من مبتدی هستم و برای تمرین شروع کردم به نوشتن یک محاسبه گر برای ریشه های یک معادله درجه دو حالا کدی که نوشتم این هست:


    #include<stdio.h>
    int main()
    {
    int a,b,c,delta,x1,x2,d;
    printf("Please Enter a b c >\n");
    scanf("%d %d %d",&a,&b,&c);
    delta=b^2-4*a*c;
    if(delta<0){
    printf("There Is No root To Show!");
    }
    else{
    d=sqrt(delta);
    x1=-b+d/2*a;
    x2=-b-d/2*a;
    printf("The Roots are : X1=%d and X2=%d\n",x1,x2);
    }
    return 0;
    }

    اما متاسفانه موقع کامپایل به این دستور گیر میده : d=sqrt(delta);
    مشکل کجاست؟ آیا کلا چیزی که نوشتم درست هست مشکل چیه؟
    ممنون

  2. #2
    کاربر دائمی آواتار ehsan_faal
    تاریخ عضویت
    خرداد 1392
    محل زندگی
    تهران
    پست
    325

    نقل قول: مشکل در جذر گرفتن در C

    شما باید هدر math رو include کنید و در ضمن اون عملگری که برای به توان رسوندن استفاده کردید xor هستش نه توان.
    برای توان رسوندن هم یا از pow استفاده کنید یا دو بار در خودش ضربش کنید.

  3. #3

    نقل قول: مشکل در جذر گرفتن در C

    نقل قول نوشته شده توسط ehsan_faal مشاهده تاپیک
    شما باید هدر math رو include کنید و در ضمن اون عملگری که برای به توان رسوندن استفاده کردید xor هستش نه توان.
    برای توان رسوندن هم یا از pow استفاده کنید یا دو بار در خودش ضربش کنید.
    ممنون از شما!
    کتابخانه math رو فرخوانی کردم و مشکل حل شد اما حالا چند سوال و یک مشکل جدید!
    اول اینکه چطور باید از pow استفاده کنیم؟ یعنی باید به این شکل تغییر کنه؟
    delta=pow(b)-4*a*c;
    حالا مشکل اصلی:
    این کدی هست که در حال حاضر دارم:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    int a,b,c,delta,x1,x2,d;
    printf("Please Enter a b c >\n");
    scanf("%d %d %d",&a,&b,&c);
    delta=(b*b)-4*a*c;
    if(delta<0){
    printf("There Is No root To Show!");
    }
    else{
    d=sqrt(delta);
    x1=-b+d/2*a;
    x2=-b-d/2*a;
    printf("The Roots are : X1=%d and X2=%d\n",x1,x2);
    }
    }



    متاسفانه بعد از اینکه پیام اول چاپ میشه و من مقادیر رو میدم باز پنجره بسته میشه! حدس زدم شاید برای این باشه که مجدد به مشکل اول رسیدم و اینه که سریعا محاسبه میکنه و نتیجه رو بسرعت نشون میده و بسته میشه اما یک متغیر دیگه هم بنام t معرفی کردم و بعد از تمامی اعمال در main برابر t=getchar(); قرار دادم اما فایده ای نداشت!

  4. #4
    کاربر تازه وارد آواتار hamedBB
    تاریخ عضویت
    تیر 1394
    محل زندگی
    تهران فعلا
    پست
    51

    نقل قول: مشکل در جذر گرفتن در C

    فرم استفاده از تابع pow به صورت زیر است :
    double pow (double base, double exponent);


    که base همون پایه و exponent همون توان هست، مثال زیر نشون دهنده ی 2 به توان 5 هست.

    double pow (2, 5);


    درباره ی باز نگه داشتن کنسول هم می تونید از فرمان زیر استفاده کنید :



    //remember to include iostream to use this function
    std::cin.ignore();


    این کد رو در پایان برنامه بذار. کارش اینه که در پایان برنامه منتظر فشرده شدن کلید Enter از سوی کاربر میمونه. فقط یادت باشه که این کد تحت کتابخانه ی iostream اجرا میشه که تو کد هم نوشتم.

  5. #5

    نقل قول: مشکل در جذر گرفتن در C

    نقل قول نوشته شده توسط hamedBB مشاهده تاپیک
    فرم استفاده از تابع pow به صورت زیر است :
    double pow (double base, double exponent);


    که base همون پایه و exponent همون توان هست، مثال زیر نشون دهنده ی 2 به توان 5 هست.

    double pow (2, 5);


    درباره ی باز نگه داشتن کنسول هم می تونید از فرمان زیر استفاده کنید :



    //remember to include iostream to use this function
    std::cin.ignore();


    این کد رو در پایان برنامه بذار. کارش اینه که در پایان برنامه منتظر فشرده شدن کلید Enter از سوی کاربر میمونه. فقط یادت باشه که این کد تحت کتابخانه ی iostream اجرا میشه که تو کد هم نوشتم.
    متاسفانه باز هم بعد از اینکه مقادیر a b c رو میدم بسته میشه:

    #include<stdio.h>
    #include<math.h>
    #include<iostream>
    int main()
    {
    int a,b,c,delta,x1,x2,d;
    printf("Please Enter a b c >\n");
    scanf("%d %d %d",&a,&b,&c);
    delta=(b*b)-4*a*c;
    if(delta<0){
    printf("There Is No root To Show!");
    }
    else{
    d=sqrt(delta);
    x1=-b+d/2*a;
    x2=-b-d/2*a;
    printf("The Roots are : X1=%d and X2=%d\n",x1,x2);
    }
    std::cin.ignore();
    }

    الان یک مشکل بزرگ تر وجود داره!
    مشکل اینه که معمولا همه جا نوشته متغیر ها رو با double یا float تعریف کنیم ولی فعلا که با int تعریف کردم بهم ریشه ها رو اشتباهی میده! مثلا اگر اعداد 2 رو به a و 8 رو بهb و 4رو به c بدیم باید ریشه های 2 و -6 بده اما -4 و -12 میده! وقتی که int رو هم به double یا float تغیر میدم وضعیت بدتر میشه! فکر کنم روی float ریشه ها هردو 0 و روی double هر دو 8 میشن!

  6. #6
    کاربر تازه وارد آواتار hamedBB
    تاریخ عضویت
    تیر 1394
    محل زندگی
    تهران فعلا
    پست
    51

    نقل قول: مشکل در جذر گرفتن در C

    درباره اینکه چرا هنوز بسته مبشه اون خط کدی که بهت گفتم رو هم به پایان if اضافه کن هم به پایان else اگر درست نشد بهم بگو.
    درباره اینکه چرا جوابت غلطه دلیلش اینه که فرمولت غلطه، خط 15 و 16 برنامت رو به صورت زیر تغییر بده :


    x1 = (-b+d)/(2*a);
    x2 = (-b-d)/(2*a);


    دلیلشم سادس، تقدم عملیات در صورتی که اولویت ها یکی باشه از چپ به راسته و چون تقسیم و ضرب اولویت یکی دارند مشکل پیش میاد تو این فرمول، یعنی اول تقسیم به 2 میشه بعد حاصل ضرب در 2 میشه. با پرانتزگذاری مشکل حل میشه.

  7. #7

    نقل قول: مشکل در جذر گرفتن در C

    نقل قول نوشته شده توسط hamedBB مشاهده تاپیک
    درباره اینکه چرا هنوز بسته مبشه اون خط کدی که بهت گفتم رو هم به پایان if اضافه کن هم به پایان else اگر درست نشد بهم بگو.
    درباره اینکه چرا جوابت غلطه دلیلش اینه که فرمولت غلطه، خط 15 و 16 برنامت رو به صورت زیر تغییر بده :


    x1 = (-b+d)/(2*a);
    x2 = (-b-d)/(2*a);


    دلیلشم سادس، تقدم عملیات در صورتی که اولویت ها یکی باشه از چپ به راسته و چون تقسیم و ضرب اولویت یکی دارند مشکل پیش میاد تو این فرمول، یعنی اول تقسیم به 2 میشه بعد حاصل ضرب در 2 میشه. با پرانتزگذاری مشکل حل میشه.
    ممنون از شما! مشکل محاسبات حل شد!مشکل از ترتیب عملکرد ها بود؟ اما هنوز کدی که دادین برای بسته نشدن پنجره عمل نمیکنه! فعلا از scanf برای بسته نشدن استفاده میکنم

  8. #8
    کاربر تازه وارد آواتار hamedBB
    تاریخ عضویت
    تیر 1394
    محل زندگی
    تهران فعلا
    پست
    51

    نقل قول: مشکل در جذر گرفتن در C

    عجیبه که کار نمی کنه. اگر scanf داره کار می کنه که هیچ اگه نه از :

    cin.get();

    دوبار پشت سر هم بذار در انتهای برنامت ببین جواب میده.

تاپیک های مشابه

  1. مشکل فارسی پیرینت گرفتن فاکس
    نوشته شده توسط delavar در بخش Foxpro
    پاسخ: 12
    آخرین پست: چهارشنبه 29 آبان 1387, 00:53 صبح
  2. مشکل در پرینت گرفتن از گزارشی که با logoninfo تنظیم شده
    نوشته شده توسط mzamani در بخش گزارش سازی با Crystal Report
    پاسخ: 14
    آخرین پست: سه شنبه 05 دی 1385, 09:18 صبح
  3. مشکل در Query گرفتن فارسی
    نوشته شده توسط www2006 در بخش SQL Server
    پاسخ: 4
    آخرین پست: سه شنبه 30 آبان 1385, 08:06 صبح
  4. مشکل با Sum گرفتن
    نوشته شده توسط salar_sh در بخش گزارش سازی با Crystal Report
    پاسخ: 2
    آخرین پست: پنج شنبه 11 اسفند 1384, 21:16 عصر
  5. مشکل در پرینت گرفتن از صفحات
    نوشته شده توسط javad3151 در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: سه شنبه 05 مهر 1384, 16:43 عصر

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

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