#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; /* 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("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>6){ printf("---------------------\n"); printf("Tik memuse - start after 6 years (after tax):\n\n"); for (int k = 0; k < Time_Period-6; ++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+6,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>6){ printf("Keren (6 years) then Tik: %.0f\n", 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 (6) + tik memuse (%d) + reinvestment (%d): %.0f\n", Time_Period-6,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; }