برنامه محاسبه ریشه معادله درجه 2 به زبان فرترن

برنامه محاسبه ریشه معادله درجه 2 به زبان فرترن
در ادامه پست های مربوط به زبان برنامه نویسی فرترن، قصد داریم یک برنامه بنویسیم که ریشه های معادله درجه دوم را برای من محاسبه و پاسخ آن را نشان دهد. در ابتدای پست لازم به ذکر است که شما میتوانید برای ران کردن کد های خود از نرم افزارهای microsoft visual studio 2012 و 2015-Parallel-intel-studio استفاده کنید که فایل نصب و راهنمای نصب آن در این فایل آورده شده است.
توضیح در مورد کد اول:
اگر خلاصه در مورد ساختار کلی این کد ساده صحبت کنیم، میتوانیم بگوییم که این کد با توجه به ساختار کلی معادله درجه دوم (y=ax^2+bx+c)، متغیر های a,b,c را دریافت کرده و با فرمول دلتا (delta=b^2-4ac) و البته با توجه به بزگتر یا کوچکتر بودن دلتا از صفر معادله را حل میکند. در ادامه دقیق تر به توضیحات کد می پردازیم.
بخواهیم دقیق تر بپردازیم
- ابتدا با implicit NONE تمامی اعلان های ضمنی را از برنامه حذف یا غیر فعال میکنیم.
- تمامی متغیر ها، محاسبات و جواب هارا(a,b,c,x1,x2,delta) با دستور Real در محدوده اعداد حقیقی قرار می دهیم.
- در خط 6 با نمایش ساختار کلی معادله دو مجهولی و نوشتن متن find roots (پیدا کردن ریشه ها) و سپس ENTER a, b, c ( وارد کردن متغیر های a,b,c )، متغیر هارا دریافت میکنیم.
- در مرحله آخر فرمول دلتا را به نرم افزار داده و شرط می گذاریم که زمانی که دلتا بزرگتر مساوی صفر بود فرمول های مربوط به محاسبه ریشه های درجه دوم، وارد عمل بشنود ولی در غیر این صورت یعنی اگر دلتا کوچکتر از صفر بود متن “there is no real answer ” به معنای وجود نداشتن جواب حقیقی نمایش دهد.
پس درصورتی که دلتا بزرگتر مساوی صفر بود، ریشه ها نمایش داده میشوند ولی وقتی که دلتا کوچکتر از صفر بود در این صورت پیغام “there is no real answer ” به معنای عدم وجود ریشه های حقیقی نمایش داده میشود.
کد اول:
program equation_2 implicit NONE REAl::a,b,c,x1,x2,delta PRINT*,"ax^2+bx+c=0 find roots :" PRINT*,"ENTER a, b, c." READ*,a,b,c delta=b**2-4*a*c if (delta>=0) then x1=(-b+SQRT(delta))/(2*a) x2=(-b-SQRT(delta))/(2*a) print*,' x1= ',x1,' x2= ',x2 else print*," there is no real answer" end if end
نمونه کد + پیشنمایش نتیجه کد:

توضیح در مورد کد دوم (روش حذفی گاوس):
در این مثال، برنامه ابتدا از کاربر می خواهد که ضرایب دو معادله و سمت راست آنها را وارد کند. سپس حذف Gauss-Jordan را انجام می دهد تا ماتریس ضریب را به یک ماتریس مثلثی بالا تبدیل کند و با جایگزین کردن مجدد متغیرهای مجهول را حل کند. در نهایت، برنامه راه حل را خروجی می دهد. توجه داشته باشید که این کد فرض می کند که سیستم معادلات یک راه حل منحصر به فرد دارد. اگر سیستم کم تعیین یا بیش از حد تعیین شده باشد، روش گاوس-جردن ممکن است مناسب نباشد.
بخواهیم دقیق تر بپردازیم:
در ابتدا کد 2 ضریب از کاربر میخواهد و سپس سیستم معادلات را از کاربر دریافت کرده با فرمول گاوس جردن آن را حل کرده و در آخر x1 و x2 را به کاربر نمایش می دهد.
در مورد بررسی دقیق تر کد هر سوالی داشتید در نظرات بپرسید.
کد دوم (روش حذفی گاوس):
INTEGER :: i, j, k, n REAL :: A(2,2), b(2), x(2) ! Input the system of equations WRITE(*,*) "Enter the coefficients of the equations: " DO i = 1, 2 DO j = 1, 2 READ(*,*) A(i,j) END DO WRITE(*,*) "Enter the right-hand side of equation ", i READ(*,*) b(i) END DO ! Perform Gauss-Jordan elimination DO k = 1, 2 DO i = k+1, 2 A(i,k) = A(i,k) / A(k,k) b(i) = b(i) - A(i,k) * b(k) DO j = k+1, 2 A(i,j) = A(i,j) - A(i,k) * A(k,j) END DO END DO END DO x(2) = b(2) / A(2,2) x(1) = (b(1) - A(1,2) * x(2)) / A(1,1) ! Output the solution WRITE(*,*) "The solution is:" WRITE(*,*) "x1 = ", x(1) WRITE(*,*) "x2 = ", x(2) pause END PROGRAM GaussJordan
نمونه کد + پیشنمایش نتیجه کد:

دیدگاهتان را بنویسید