程式設計學習進度

 第十週


呈現

第十一週


躉繳第1期第2期第3期第4期

注意,包含首期躉繳的現金流量都大於0。

報酬率:

淨現值:

迴圈次數:

第十二週

躉繳第1期第2期第3期第4期

注意,包含首期躉繳的現金流量都大於0。

報酬率:

淨現值:

迴圈次數:

陳姿穎程式設計

陳姿穎程式設計

<style>
.Takming {
border: 20px outset yellow;
background-color: green;
color: white;
text-align: center; }  
.pmt {
  width:80pt;   
  height:20pt;
  background-color: coral;
  color: black;
  font-weight:bold;
  text-align:right;}
.pig {
  width:80pt;   
  height:20pt;
  background-color: pink;
  color: white;
  font-weight:bold;
  text-align:center;}
</style><!--寬度width,高度height,背景顏色珊瑚色,顏色,文字排列text-align-->
<table border=1>
  <tr align=center><td>躉繳</td><td>第1期</td><td>第2期</td><td>第3期</td><td>第4期</td></tr>
  <tr><td><input type="number" class="pig"></td>
  <td><input type="number" class="pig"></td>
  <td><input type="number" class="pig"></td>
  <td><input type="number" class="pig"></td>  
  <td><input type="number" class="pig"></td></tr>
  </table><br>
注意,包含首期躉繳的現金流量都大於0。
<p><input type="button" value="計算內部報酬率" onclick="IRR()"></p> <!-- 按下 button 去執行 JavaScript IRR( )-->
<b>報酬率: <p id="irr"></p></b>
<b>淨現值: <p id="npv"></p></b>
<b>迴圈次數: <p id="loopNumber"></p></b>   
<script>
const period=5;
const maxerror = 0.000001;
var payment = new Array(period);
function IRR()
{
  var a = 0;
  var b = 1;
  var c;
  var f;
  var gap=10;
  var loopNumber = 0;
  for (var i=0; i<period; i++)
    payment[i]=document.getElementsByClassName("pmt")[i].value;
  f = npv(a);
  if ( f==0 )
      document.getElementById("irr").innerHTML = "內部報酬率等於0.";
  else if ( f<0 )
    document.getElementById("irr").innerHTML = "內部報酬率小於0.";
  else
   { while ( gap > maxerror && Math.abs(f) > maxerror && loopNumber < 100)
     { 
      loopNumber++;
      c = (a+b)/2;
      f = npv(c);
      if ( Math.abs(f) > maxerror && gap > maxerror)
     { if ( f>0 )
        a = c;
       else
        b = c;
       gap = b-a;
      }
    }  //迴圈while結束
   }
  document.getElementById("irr").innerHTML= c;
  document.getElementById("npv").innerHTML= f;
  document.getElementById("loopNumber").innerHTML = loopNumber;
var npv=function(rate)
  {   
    var y= -payment[0]; 
    for (var j=1; j<period; j++)
      y = y + payment[j]/(1+rate)**j;
    return y;
  }
</script>
<h1 class=Takming>陳姿穎</h1>

第十三週


 


Const period As Integer = 4
Const maxerror As Double = 0.0000001
Dim payment(period) As Double '廣域變數 4 維度的陣列
Private Sub CommandButton1_Click()
  Dim a, b, c, f, gap As Double
  Dim loopNumber As Integer
  a = 0
  b = 1
  gap = 10
  loopNumber = 10
  payment(0) = TextBox1.Value
  payment(1) = TextBox2.Value
  payment(2) = TextBox3.Value
  payment(3) = TextBox4.Value
  f = npv(a)
  If f = 0 Then
     Label9.Caption = 0
  ElseIf f < 0 Then
     Label9.Caption = "內部報酬率小於 0."
  Else
     Do While gap > mexerror And Abs(f) > maxerror And loopNumber < 100
       loopNumber = loopNumber + 1
       c = (a + b) / 2
       f = npv(c)
       If Abs(f) > maxerror And gap > maxerror Then
          If f > 0 Then
            a = c
          Else
            b = c
            gap = b - a
          End If
        Else
          Label9.Caption = c * 100
       End If
     Loop
  End If
  Label10.Caption = f
  Label11.Caption = loopNumber
  '以下是將結果輸出到 WORD 文件
  Selection.TypeText ("躉繳:" & TextBox1.Value & ", 第1期:" & TextBox2.Value & ", 第2期:" & TextBox3.Value & ", 第3期:" & TextBox4.Value)
  Selection.TypeParagraph
  Selection.TypeText ("內部報酬率%:" & c * 100)
  Selection.TypeParagraph
  Selection.TypeText ("淨現值:" & f)
  Selection.TypeParagraph
  Selection.TypeText ("迴圈次數:" & loopNumber)
  Selection.TypeParagraph
End Sub
Private Sub CommandButton2_Click()
  End
End Sub
Function npv(rate) '計算特定折現率rate的淨現值
  Dim y As Double
  Dim j As Integer
  y = -payment(0)
  For j = 1 To period
      y = y + payment(j) / (1 + rate) ^ j
  Next
  npv = y
End Function

第十四週



 



Dim n As Integer

Dim spec As String

Const period As Integer = 4

Const maxerror As Double = 0.0000001

Dim payment(period) As Double '廣域變數 4 維度的陣列

Private Sub CommandButton1_Click()

  Dim a, b, c, f, gap As Double

  Dim loopNumber As Integer

  n = n + 1 '第幾次計算+1

  a = 0     '報酬率0

  b = 1     '報酬率1

  gap = 10

  loopNumber = 10

  payment(0) = TextBox1.Value

  payment(1) = TextBox2.Value

  payment(2) = TextBox3.Value

  payment(3) = TextBox4.Value

  f = npv(a)

  If f = 0 Then

     Label9.Caption = 0

  ElseIf f < 0 Then

     Label9.Caption = "內部報酬率小於 0."

  Else

     Do While gap > mexerror And Abs(f) > maxerror And loopNumber < 100

       loopNumber = loopNumber + 1

       c = (a + b) / 2

       f = npv(c)

       If Abs(f) > maxerror And gap > maxerror Then

          If f > 0 Then

            a = c

          Else

            b = c

            gap = b - a

          End If

        Else

          Label9.Caption = c

       End If

     Loop

  End If

  Label10.Caption = f

  Label11.Caption = loopNumber

  ' spec = "躉繳$" & payment(0) & ", 第1期$" & payment(1) & ",第2期$" & payment(2) & ",第3期$" & payment(3)

  Cells(n, 1).Value = "第" & n & "次執行"

  Cells(n, 2).Value = "內部報酬率:" & c

  Cells(n, 3).Value = "淨現值:" & f

  Cells(n, 4).Value = "迴圈次數:" & loopNumber

  End Sub

Private Sub CommandButton2_Click()

  End

End Sub

Function npv(rate) '計算特定折現率rate的淨現值

  Dim y As Double

  Dim j As Integer

  y = -payment(0)

  For j = 1 To period

      y = y + payment(j) / (1 + rate) ^ j

  Next

  npv = y

End Function

Private Sub CommandButton3_Click()

  Selection.WholeStory

  Selection.Delete

End Sub


留言

這個網誌中的熱門文章

程式設計學習進度

陳姿穎 EXCEL資料 -> Web讀取外部資料-> 自動更新

陳姿穎地15週 HTML+CSS+JavaScript+Word轉pdf方程式編輯器