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

  • Thread starter Thread starter Nicolaus
  • Start date Start date
  • Tags Tags
    Beginner Fortran
AI Thread Summary
The discussion revolves around modifying a Fortran program designed to solve quadratic equations and verify the roots. The initial program prompts users for coefficients a, b, and c, calculates the discriminant (delta), and determines the roots based on its value. If delta is positive, two roots are found; if zero, one root; and if negative, no real roots exist. A key modification discussed is the inclusion of a validation step to stop the program if a equals zero, indicating it's not a quadratic equation. Additionally, the program should verify the first root by calculating the left-hand side (LHS) of the equation using the formula ax^2 + bx + c. There is also a suggestion to verify both roots if two exist. The conversation transitions to a new program for managing loan payments, where users are prompted to make payments every 12 months based on the remaining loan amount. The program calculates the loan balance after applying interest and deducting payments, continuing until the loan is paid off.
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
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.

Similar threads

Replies
12
Views
2K
Replies
11
Views
2K
Replies
19
Views
2K
Replies
8
Views
2K
Replies
22
Views
5K
Replies
5
Views
3K
Back
Top