#include <stdio.h>
int main()
{
int Annual_Deposit;
float Annual_Return;
float K_Management_Fee;
float T_Management_Fee;
int Time_Period;
float Sum_Of_Deposit;
float Sum_of_Reinvest_Deposit;
float Profit_Before_Tax;
float Profit_After_Tax;
float K_Current = 0;
float T6_Initial_Amount;
float T6_Current_Before_Tax = 0;
float T6_Current_After_Tax = 0;
float T_Current_Before_Tax = 0;
float T_Current_After_Tax = 0;
float Reinvest_Tax_Benefit_BT = 0;
float Reinvest_Tax_Benefit_AT = 0;
float Marginal_Tax;
int Monthly_Salary;
int Employee_Or_Self;
float Max_Tax_Benefit;
float Personal_Tax_Benefit;
float Total_Tax_Benefit;
int KEREN_to_TIK_Years;
/* scan for all */
printf("Annual Deposit? [₪] ");
scanf("%d", &Annual_Deposit);
printf("Annual Return? [%] ");
scanf("%f", &Annual_Return);
/* make Annual Return ---> % */
Annual_Return = 1 + Annual_Return/100;
printf("Keren Ishtalmut Management Fee? [%] ");
scanf("%f/100", &K_Management_Fee);
/* make Management Fee ---> % */
K_Management_Fee = 1 - K_Management_Fee/100;
printf("Tik Memuse Management Fee? [%] ");
scanf("%f/100", &T_Management_Fee);
/* make Management Fee ---> % */
T_Management_Fee = 1 - T_Management_Fee/100;
printf("How many years to the keren ishtalmut? [Year] ");
scanf("%d", &KEREN_to_TIK_Years);
printf("Time Period? [Year] ");
scanf("%d", &Time_Period);
printf("Monthly Salary? [₪] ");
scanf("%d", &Monthly_Salary);
/* determine marginal tax */
if((Monthly_Salary>=0) && (Monthly_Salary<=6450)){
Marginal_Tax=0.10;
}
else if((Monthly_Salary>6450) && (Monthly_Salary<=9240)){
Marginal_Tax=0.14;
}
else if((Monthly_Salary>9240) && (Monthly_Salary<=14840)){
Marginal_Tax=0.20;
}
else if((Monthly_Salary>14840) && (Monthly_Salary<=20620)){
Marginal_Tax=0.31;
}
else if((Monthly_Salary>20620) && (Monthly_Salary<=42910)){
Marginal_Tax=0.35;
}
else if((Monthly_Salary>42910) && (Monthly_Salary<=55270)){
Marginal_Tax=0.47;
}
else if(Monthly_Salary>55270){
Marginal_Tax=0.50;
}
printf("Employee or Self-employee? (0 for Employee, 1 for self) ");
scanf("%d", &Employee_Or_Self);
/* calc max and personal tax benefit - employee or self */
/* employee */
if(Employee_Or_Self == 0){
Max_Tax_Benefit = 0.075*12*Monthly_Salary;
/* over the max */
if(Max_Tax_Benefit>14140){
Max_Tax_Benefit = 14140;
}
}
/* self employee */
if(Employee_Or_Self == 1){
Max_Tax_Benefit = 0.045*12*Monthly_Salary;
/* over the max */
if(Max_Tax_Benefit > 12150){
Max_Tax_Benefit = 12150;
}
}
/* calc personal tax benefit */
if(Annual_Deposit > Max_Tax_Benefit){
Personal_Tax_Benefit = Max_Tax_Benefit*Marginal_Tax;
}
else{
Personal_Tax_Benefit = Annual_Deposit*Marginal_Tax;
}
/* calc total tax benefit */
Total_Tax_Benefit = Personal_Tax_Benefit*Time_Period;
/* calculation start */
/* Keren ishtalmut */
printf("---------------------\n");
printf("Keren ishtalmut:\n\n");
for (int i = 0; i < Time_Period; ++i)
{
K_Current += Annual_Deposit;
K_Current *= Annual_Return;
K_Current *= K_Management_Fee;
printf("%d: %.0f\n", i+1,K_Current);
/* initial amount of tik memuse 6+ */
if(i==5){
T6_Initial_Amount = K_Current;
T6_Current_Before_Tax = T6_Initial_Amount;
}
}
/* Tik memuse */
/* start after 6+ years */
if(Time_Period>KEREN_to_TIK_Years){
printf("---------------------\n");
printf("Tik memuse - start after %d years (after tax):\n\n", KEREN_to_TIK_Years);
for (int k = 0; k < Time_Period-KEREN_to_TIK_Years; ++k)
{
T6_Current_Before_Tax += Annual_Deposit;
T6_Current_Before_Tax *= Annual_Return;
T6_Current_Before_Tax *= T_Management_Fee;
Sum_Of_Deposit = T6_Initial_Amount + Annual_Deposit*(k+1);
Profit_Before_Tax = T6_Current_Before_Tax - Sum_Of_Deposit;
Profit_After_Tax = Profit_Before_Tax*0.75;
T6_Current_After_Tax = Sum_Of_Deposit + Profit_After_Tax;
printf("%d (%d): %.0f\n", k+1+KEREN_to_TIK_Years,k+1,T6_Current_After_Tax);
}
}
/* start from the beginning */
printf("---------------------\n");
printf("Tik memuse - start from the beginning (after tax):\n\n");
for (int j = 0; j < Time_Period; ++j)
{
T_Current_Before_Tax += Annual_Deposit;
T_Current_Before_Tax *= Annual_Return;
Sum_Of_Deposit = Annual_Deposit*(j+1);
Profit_Before_Tax = T_Current_Before_Tax - Sum_Of_Deposit;
Profit_After_Tax = Profit_Before_Tax*0.75;
T_Current_After_Tax = Sum_Of_Deposit + Profit_After_Tax;
printf("%d: %.0f\n", j+1,T_Current_After_Tax);
}
/* Reinvest_Tax_Benefit */
printf("---------------------\n");
printf("Reinvest the tax benefit on tik memuse:\n\n");
for (int r = 0; r < Time_Period; ++r)
{
Reinvest_Tax_Benefit_BT += Personal_Tax_Benefit;
Reinvest_Tax_Benefit_BT *= Annual_Return;
Sum_of_Reinvest_Deposit = Personal_Tax_Benefit*(r+1);
Profit_Before_Tax = Reinvest_Tax_Benefit_BT - Sum_of_Reinvest_Deposit;
Profit_After_Tax = Profit_Before_Tax*0.75;
Reinvest_Tax_Benefit_AT = Sum_of_Reinvest_Deposit + Profit_After_Tax;
printf("%d: %.0f\n", r+1,Reinvest_Tax_Benefit_AT);
}
/* result */
printf("---------------------\n");
printf("The results after %d years are (after tax):\n\n", Time_Period);
printf("Keren ishtalmut: %.0f\n", K_Current);
if(Time_Period>KEREN_to_TIK_Years){
printf("Keren (%d years) then Tik: %.0f\n", KEREN_to_TIK_Years,T6_Current_After_Tax);
}
printf("Tik memuse: %.0f\n", T_Current_After_Tax);
printf("Tax benefit reinvestment: %.0f\n", Reinvest_Tax_Benefit_AT);
printf("Total tax saved: %.0f\n", Total_Tax_Benefit);
printf("\n-------- conclusion --------\n\n");
printf("Total - keren (%d) + reinvestment (%d): %.0f\n", Time_Period,Time_Period,K_Current+Reinvest_Tax_Benefit_AT);
printf("Total - keren (%d) + tik memuse (%d) + reinvestment (%d): %.0f\n", KEREN_to_TIK_Years,Time_Period-KEREN_to_TIK_Years,Time_Period,T6_Current_After_Tax+Reinvest_Tax_Benefit_AT);
printf("Total - tik memuse (%d) + reinvestment (%d): %.0f\n", Time_Period,Time_Period,T_Current_After_Tax+Reinvest_Tax_Benefit_AT);
return 0;
}