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

نام تاپیک: دستور if به درستی اجرا نمی شود!!!

  1. #1

    دستور if به درستی اجرا نمی شود!!!

    سلام
    کد زیر در قسمت آخر جایی که دستور if قرار داره یک مشکلی هست که من متوجه آن نمیشم.
    این If برای یک سری داده ها جواب نمیده با این که شرط برای اون داده ها برقراره و من مجبورم برم از تو فایل عدد مورد نظر رو پیدا کنم
    اگر کسی میدونه ممنون میشم بگه
    مشکل به این صورت است که برای عدد CFL 0.8 و به ازای dt های مختلف محاسبه بشه و مقدار U برای x=2 , در زمان t=1 رو به خروجی بده
    تا dt=0.05 شرط جواب میده ولی برای dt های کوچکتر جوابی به خروجی نمیده و فقط تو فایل ذخیره میکنه که باید از اونجا یادداشت کنم.

    فایل ضمیمه شده ممنون میشم اگه کسی جواب بده Untitled1.rar

  2. #2

    نقل قول: دستور if به درستی اجرا نمی شود!!!

    نقل قول نوشته شده توسط Mostafa.Aero مشاهده تاپیک
    سلام
    کد زیر در قسمت آخر جایی که دستور if قرار داره یک مشکلی هست که من متوجه آن نمیشم.
    این If برای یک سری داده ها جواب نمیده با این که شرط برای اون داده ها برقراره و من مجبورم برم از تو فایل عدد مورد نظر رو پیدا کنم
    اگر کسی میدونه ممنون میشم بگه
    مشکل به این صورت است که برای عدد CFL 0.8 و به ازای dt های مختلف محاسبه بشه و مقدار U برای x=2 , در زمان t=1 رو به خروجی بده
    تا dt=0.05 شرط جواب میده ولی برای dt های کوچکتر جوابی به خروجی نمیده و فقط تو فایل ذخیره میکنه که باید از اونجا یادداشت کنم.

    فایل ضمیمه شده ممنون میشم اگه کسی جواب بده Untitled1.rar
    سورس کدتون را همین جا قرار بدید!

  3. #3

    نقل قول: دستور if به درستی اجرا نمی شود!!!



    // Explicit Method
    #include <iostream>
    #include <math.h>
    #include <fstream>
    using namespace std;
    ofstream expli("explicit.txt");

    int main()
    {
    expli<<"VARIABLES = X,U"<<endl;
    double dt,dx,c,t;
    double length=4; //cm
    double a=1; // cm/s
    double j,p;
    int i;

    cout<<"Enter the Time_Step (dt)"<<endl;
    cin>>dt;
    cout<<"Enter the CFL Number"<<endl;
    cin>>c;
    dx=a*dt/c;
    int Ngrid=(length/dx)+1; // number of grid
    double U_old[Ngrid],U_new[Ngrid];
    cout<<"Number of Grid : "<<Ngrid<<endl;
    cout<<"dx : "<<dx<<endl;

    //////////////////////// Solvation Explicit Upwind
    expli<<"ZONE T=\"Time= "<<0<<"\""<<endl;
    expli<<"solutiontime= "<<0<<endl;
    expli<<"I="<<Ngrid<<endl<<"CFL Number="<<c<<endl<<"dx="<<dx<<endl<<"dt="<<dt<<end l<<"F=POINT"<<endl;

    for (i=0;i<=Ngrid-1;i++)
    {
    if ((i*dx)<0.25)
    U_old[i]=0;
    if ((i*dx)>1.25)
    U_old[i]=0;
    if ((i*dx)>=0.25 && (i*dx)<=1.25)
    U_old[i]=sin((3.14*i*dx)-(3.14/4));

    expli<<i*dx<<" "<<U_old[i]<<endl;

    }



    while (U_old[Ngrid-1]<=0.001)
    {
    t=t+dt;
    expli<<endl<<"VARIABLES = X,U"<<endl;
    expli<<"ZONE T=\"Time= "<<t<<"\""<<endl;
    expli<<"solutiontime= "<<t<<""<<endl;
    expli<<"I="<<Ngrid<<endl<<"F=POINT"<<endl;

    U_old[0]=0;


    expli<<0<<" "<<U_old[0]<<endl;

    for (i=1;i<=Ngrid-1;i++)
    {
    U_new[i]=-c*(U_old[i]-U_old[i-1])+U_old[i];


    if(i*dx==2)
    cout<<"x= "<<i*dx<<" U= "<<U_new[i]<<" Time= "<<t<<endl;


    }

    for (i=1;i<=Ngrid-1;i++)
    {

    U_old[i]=U_new[i];

    expli<<i*dx<<" "<<U_old[i]<<endl;
    }



    }
    cout<<"The End";




    return 0;



    }



  4. #4
    کاربر جدید آواتار borderliner
    تاریخ عضویت
    دی 1395
    محل زندگی
    Kingston, Ontario, Canada
    پست
    9

    نقل قول: دستور if به درستی اجرا نمی شود!!!

    متغییر dx شما از نوع double هست، و توی شرطتون، شما دارید ضرب یک double در int رو که نتیجش double هست رو با عدد 2 که unsigned int هست مقایسه میکنید. این کارتونو راه میندازه:

    if (static_cast<unsigned int>(i * dx) == 2)

  5. #5

    نقل قول: دستور if به درستی اجرا نمی شود!!!

    نقل قول نوشته شده توسط borderliner مشاهده تاپیک
    متغییر dx شما از نوع double هست، و توی شرطتون، شما دارید ضرب یک double در int رو که نتیجش double هست رو با عدد 2 که unsigned int هست مقایسه میکنید. این کارتونو راه میندازه:

    if (static_cast<unsigned int>(i * dx) == 2)
    درسته که implicit cast در شرط فوق به نوع بزرگتر double تبدیل می شود ولی عدد 2 در زمان کامپایل به یک ثابت عددی double تفسیر می شود نه unsigned int پس بنابراین شرط فوق بدون نیاز به تبدیل صریح کار خواهد کرد و احتیاجی به static_cast نخواهد بود.!

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

  1. مرتب برگرداندن دستور in در لستی که مرتب شده !!!!!
    نوشته شده توسط faranakk در بخش T-SQL
    پاسخ: 0
    آخرین پست: دوشنبه 04 اردیبهشت 1396, 10:25 صبح
  2. سوال: ایا دستور خاصی وجود دارد تا بتوانیم اندازه یک متغیر رو به صورتی دستی تعیین کنیم؟
    نوشته شده توسط motherboard در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: شنبه 10 اسفند 1392, 21:26 عصر
  3. پاسخ: 5
    آخرین پست: سه شنبه 25 مهر 1391, 12:17 عصر
  4. سوال: unistall کردن دستی ویژوال استودیو
    نوشته شده توسط Shaahin_67 در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 5
    آخرین پست: سه شنبه 05 مهر 1390, 14:26 عصر
  5. پاسخ: 3
    آخرین پست: پنج شنبه 19 خرداد 1390, 23:48 عصر

برچسب های این تاپیک

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

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