How to Prompt User for Desired Payment in Loan Payment Program?

  • Context: Fortran 
  • Thread starter Thread starter Nicolaus
  • Start date Start date
  • Tags Tags
    Beginner Fortran
Click For Summary

Discussion Overview

The discussion revolves around modifying a program that solves quadratic equations and implementing a loan payment program that prompts users for payments. Participants explore how to validate input, calculate roots, and manage loan payments over time.

Discussion Character

  • Technical explanation
  • Homework-related
  • Exploratory

Main Points Raised

  • One participant suggests modifying the program to stop further computation if the coefficient 'a' is zero, indicating it is not a quadratic equation.
  • Another participant inquires about how to verify both roots if two exist, questioning the completeness of the verification process.
  • A participant proposes a new program for loan payments, asking how to prompt the user every 12 months for a payment based on the remaining loan balance.
  • There is a suggestion to output the root of a first-degree equation if the quadratic equation is not valid.
  • Participants discuss the need to compute the left-hand side (LHS) of the quadratic equation to verify the correctness of the roots found.

Areas of Agreement / Disagreement

Participants express various approaches to validating input and calculating roots, but there is no consensus on the best way to implement the loan payment prompting feature or the verification of multiple roots.

Contextual Notes

Some participants mention the need for additional validation and error handling in the loan payment program, but specific limitations or assumptions are not fully explored.

Who May Find This Useful

Individuals interested in programming, particularly in numerical methods for solving equations and financial calculations related to loans, may find this discussion relevant.

Nicolaus
Messages
73
Reaction score
0
Can someone give him a head start re: the following Q:

We can make the program test itself by having it plug in the found root and evaluate the LHS (it should be zero). Complete the program by having it evaluate the LHS at x = root1.


! This program finds the roots of equations of the 2nd degree
! with coefficients a, b and c
program Equation
implicit none
real*4 a, b, c, delta
real*4 root1, root2
integer*1 count

! ----------------------------------------------Prompt and Input
print*, "Solves ax^2 + bx + c = 0"
print*, "Enter the coefficients a,b,c separated by commas..."
read*, a, b, c

! ----------------------------------------------Validate

! ----------------------------------------------Find delta
delta = b**2 - 4.* a * c

! ----------------------------------------------Determine Roots
if (delta .GT. 0.) then
root1 = (-b + sqrt(delta)) / (2. * a)
root2 = (-b - sqrt(delta)) / (2. * a)
count = 2
else if (delta .LT. 0.) then
count = 0
else
root1 = -b / (2. * a)
count = 1
end if

! ----------------------------------------------Show Results
if (count .EQ. 2) then
write(*,20) " Equation has two roots: ", root1, ", ", root2
else if (count .EQ. 1) then
write(*,20) " Equation has one root: ", root1
else
write(*,20) " Equation has no real roots!"
end if
20 format(1x, A, F10.4, A, F10.4)

! ----------------------------------------------Verify root1
if (count .GT. 0) then
print*, "Verifying the first root by computing the L.H.S.:"



end if

! ----------------------------------------------
end
 
Technology news on Phys.org
Well, the next move is up to you. You have the coefficients a,b, and c and the roots, root1 and root 2. Write a statement which combines these values according to the formula ax^2+bx+c
 
The previous Q asked me to modify the program under "Validate" so if a=0 then it stops the program from further computing, and now I need to output the root, if any, of the supplied 1st-degree equation. How do I modify the program to adopt this approach?


! This program finds the roots of equations of the 2nd degree
! with coefficients a, b and c
program Equation
implicit none
real*8 a, b, c, delta
real*8 root1, root2, x, LHS
integer*1 count

! ----------------------------------------------Prompt and Input
print*, "Solves ax^2 + bx + c = 0"
print*, "Enter the coefficients a,b,c separated by commas..."
read*, a, b, c

! ----------------------------------------------Validate
if (a .EQ. 0) then
print*, "This is not an equation of the 2nd degree!"
stop
end if

! ----------------------------------------------Find delta
delta = b**2 - 4.* a * c

! ----------------------------------------------Determine Roots
if (delta .GT. 0.) then
root1 = (-b + sqrt(delta)) / (2. * a)
root2 = (-b - sqrt(delta)) / (2. * a)
count = 2
else if (delta .LT. 0.) then
count = 0
else
root1 = -b / (2. * a)
count = 1
end if

! ----------------------------------------------Show Results
if (count .EQ. 2) then
write(*,20) " Equation has two roots: ", root1, ", ", root2
else if (count .EQ. 1) then
write(*,20) " Equation has one root: ", root1
else
write(*,20) " Equation has no real roots!"
end if
20 format(1x, A, F20.15, A, F20.15)

! ----------------------------------------------Verify root1
if (count .GT. 0) then
print*, "Verifying the first root by computing the L.H.S.:"
x = root1
LHS = a*x**2 + b*x + c
print*, "LHS = ", LHS
end if

! ----------------------------------------------
End
 
What if you have two roots? Aren't you supposed to verify both?

If you have a linear equation instead of a quadratic, how would you solve it?
 
Thanks, finished that one. Now, I wrote the following program and am wondering how I would write a code that prompts the user every 12 months to make a desired payment of up to 10% of what remains of the loan.

! ------- Loan Payment -------

program Borrow
implicit none

integer month
real loan, mPayment, interestRate

print*, "Enter the amount of the loan: "
read*, loan

print*, "Enter the annual interest rate (as a percent): "
read*, interestRate

print*, "Enter the monthly payment: "
read*, mPayment

print*, "Amount of the loan is: ", loan
print*, "Annual interest rate : ", interestRate
print*, "Your monthly payment is : ", mPayment

print*, "month loan"
month = 0
do while (loan .gt. 0)
loan = loan + loan*interestRate/100/12 - mPayment
month = month + 1
write(*,12), month, loan
12 format(1x, I5, F12.2)
end do

stop
end
 

Similar threads

  • · Replies 12 ·
Replies
12
Views
2K
Replies
10
Views
5K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 11 ·
Replies
11
Views
2K
  • · Replies 19 ·
Replies
19
Views
3K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 23 ·
Replies
23
Views
3K
  • · Replies 22 ·
Replies
22
Views
5K
  • · Replies 4 ·
Replies
4
Views
2K