Advertisement
Guest User

economic calculator (calculating and info)

a guest
Feb 16th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 47.91 KB | None | 0 0
  1. //Шаблоны:
  2.  
  3. case d of
  4. 'vklad_startsum': openchooserstr:=' Вклад - сумма вклада ';
  5.   'vklad_endsum': openchooserstr:=' Вклад - итоговая сумма ';
  6.   'vklad_periods': openchooserstr:=' Вклад - кол-во платёжных периодов ';
  7.   'vklad_stavka': openchooserstr:=' Вклад - процентная ставка ';
  8.   'vklad_plus': openchooserstr:=' Вклад - прибыль ';
  9.   'kredit_dif_startsum': openchooserstr:=' Кредит - дифференцированные платежи - сумма кредита ';
  10.   'kredit_dif_endsum': openchooserstr:=' Кредит - дифференцированные платежи - сумма выплат ';
  11.   'kredit_dif_stavka': openchooserstr:=' Кредит - дифференцированные платежи - процентная ставка ';
  12.   'kredit_dif_periods': openchooserstr:=' Кредит - дифференцированные платежи - кол-во платёжных периодов ';
  13.   'kredit_dif_pay': openchooserstr:=' Кредит - дифференцированные платежи - выплата за один период ';
  14.   'kredit_ann_startsum': openchooserstr:=' Кредит - аннуитетные платежи - сумма кредита ';
  15.   'kredit_ann_endsum': openchooserstr:=' Кредит - аннуитетные платежи - сумма вклада ';
  16.   'kredit_ann_stavka': openchooserstr:=' Кредит - аннуитетные платежи - процентная ставка ';
  17.   'kredit_ann_periods': openchooserstr:=' Кредит - аннуитетные платежи - кол-во платёжных периодов ';
  18.   'kredit_ann_pay': openchooserstr:=' Кредит - аннуитетные платежи - выплата за один период ';
  19. end;
  20.  
  21.  
  22. //Вычисления и раздел "подробнее":
  23.  
  24. procedure vklad_startsum;
  25. 'start:enter': begin
  26.     //calculating
  27.     calculated:=true;
  28.     if (getinput('procentsinput')='')or(getinput('endsuminput')='')or(getinput('paycountinput')='')
  29.     then begin
  30.       r:='Вы ввели не все данные!';
  31.       hidebutton('more'); deletebutton('more');
  32.     end
  33.     else begin
  34.       var sn:=strtofloat(getinput('endsuminput'));
  35.       var k:=strtofloat(getinput('procentsinput'));
  36.       var n:=strtoint(getinput('paycountinput'));
  37.       r:='Сумма вклада: '+floattostr(round2(sn/power(1+k/100,n)));
  38.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  39.       writebutton('more'); switchright('more','start');
  40.     end;
  41.     hidetexting('result');
  42.     newtexting('result',r,4,22,60);
  43.     writetexting('result');
  44.   end;
  45. 'more:enter': begin
  46.     textbackground(backc);
  47.     clrscr;
  48.     textbackground(barbackc);
  49.     gotoxy(1,1); write(' '*70);
  50.     gotoxy(1,2); write(' '*70);
  51.     gotoxy(1,3); write(' '*70);
  52.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  53.     textcolor(textc); textbackground(backc);
  54.     //more
  55.     gotoxy(4,6); write('Вклад');
  56.     gotoxy(4,8); write('Пусть');
  57.     gotoxy(4,9); write('S0 - начальная сумма');
  58.     gotoxy(4,10); write('k - процентная ставка');
  59.     gotoxy(4,11); write('n - количество начислений');
  60.     gotoxy(4,12); write('Сумма за первый период:');
  61.     gotoxy(4,13); write('S1=S0+S0*k/100=S0*(1+k/100)');
  62.     gotoxy(4,14); write('Сумма за второй период:');
  63.     gotoxy(4,15); write('S2=S1+S1*k/100=S1*(1+k/100)=S0*(1+k/100)^2');
  64.     gotoxy(4,16); write('Следовательно, сумма за n-ый период:');
  65.     gotoxy(4,17); write('Sn:=S0*(1+k/100)^n');
  66.     gotoxy(4,19); write('Чтобы получить сумму вклада, нужно из полученной формулы');
  67.     gotoxy(4,20); write('выразить S0:');
  68.     gotoxy(4,21); write('S0=Sn/(1+k/100)^n=');
  69.     gotoxy(4,22); write('='+getinput('endsuminput')+'/(1+'+getinput('procentsinput')+'/100)^'+getinput('paycountinput')+'='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  70.     //more
  71.     var k: char;
  72.     repeat k:=readkey until (k=#27)or(k=#13);
  73.     writelayout; choose('more');
  74.   end;
  75.  
  76. procedure vklad_endsum;
  77. 'start:enter': begin
  78.     //calculating
  79.     calculated:=true;
  80.     if (getinput('procentsinput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')
  81.     then begin
  82.       r:='Вы ввели не все данные!';
  83.       hidebutton('more'); deletebutton('more');
  84.     end
  85.     else begin
  86.       var s0:=strtofloat(getinput('startsuminput'));
  87.       var k:=strtofloat(getinput('procentsinput'));
  88.       var n:=strtoint(getinput('paycountinput'));
  89.       r:='Итоговая сумма: '+floattostr(round2(s0*power(1+k/100,n)));
  90.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  91.       writebutton('more'); switchright('more','start');
  92.     end;
  93.     hidetexting('result');
  94.     newtexting('result',r,4,22,60);
  95.     writetexting('result');
  96.   end;
  97. 'more:enter': begin
  98.     textbackground(backc);
  99.     clrscr;
  100.     textbackground(barbackc);
  101.     gotoxy(1,1); write(' '*70);
  102.     gotoxy(1,2); write(' '*70);
  103.     gotoxy(1,3); write(' '*70);
  104.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  105.     textcolor(textc); textbackground(backc);
  106.     //more
  107.     gotoxy(4,6); write('Вклад');
  108.     gotoxy(4,8); write('Пусть');
  109.     gotoxy(4,9); write('S0 - начальная сумма');
  110.     gotoxy(4,10); write('k - процентная ставка');
  111.     gotoxy(4,11); write('n - количество начислений');
  112.     gotoxy(4,12); write('Сумма за первый период:');
  113.     gotoxy(4,13); write('S1=S0+S0*k/100=S0*(1+k/100)');
  114.     gotoxy(4,14); write('Сумма за второй период:');
  115.     gotoxy(4,15); write('S2=S1+S1*k/100=S1*(1+k/100)=S0*(1+k/100)^2');
  116.     gotoxy(4,16); write('Следовательно, сумма за n-ый период:');
  117.     gotoxy(4,17); write('Sn:=S0*(1+k/100)^n=');
  118.     gotoxy(4,18); write('='+getinput('startsuminput')+'*(1+'+getinput('procentsinput')+'/100)^'+getinput('paycountinput')+'='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  119.     //more
  120.     var k: char;
  121.     repeat k:=readkey until (k=#27)or(k=#13);
  122.     writelayout; choose('more');
  123.   end;
  124.  
  125. procedure vklad_periods;
  126. 'start:enter': begin
  127.     //calculating
  128.     calculated:=true;
  129.     if (getinput('procentsinput')='')or(getinput('startsuminput')='')or(getinput('endsuminput')='')
  130.     then begin
  131.       r:='Вы ввели не все данные!';
  132.       hidebutton('more'); deletebutton('more');
  133.     end
  134.     else if strtofloat(getinput('startsuminput'))>strtofloat(getinput('endsuminput')) then begin
  135.       r:='Недопустимые значения!';
  136.       hidebutton('more'); deletebutton('more');
  137.     end
  138.     else begin
  139.       var s0:=strtofloat(getinput('startsuminput'));
  140.       var sn:=strtofloat(getinput('endsuminput'));
  141.       var k:=strtofloat(getinput('procentsinput'));
  142.       var n:=0;
  143.       while (s0*power(1+k/100,n))<sn do n:=n+1;
  144.       r:='Количество начислений: '+inttostr(n);
  145.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  146.       writebutton('more'); switchright('more','start');
  147.     end;
  148.     hidetexting('result');
  149.     newtexting('result',r,4,22,60);
  150.     writetexting('result');
  151.   end;
  152. 'more:enter': begin
  153.     textbackground(backc);
  154.     clrscr;
  155.     textbackground(barbackc);
  156.     gotoxy(1,1); write(' '*70);
  157.     gotoxy(1,2); write(' '*70);
  158.     gotoxy(1,3); write(' '*70);
  159.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  160.     textcolor(textc); textbackground(backc);
  161.     //more
  162.     gotoxy(4,6); write('Вклад');
  163.     gotoxy(4,8); write('Пусть');
  164.     gotoxy(4,9); write('S0 - начальная сумма');
  165.     gotoxy(4,10); write('k - процентная ставка');
  166.     gotoxy(4,11); write('n - количество начислений');
  167.     gotoxy(4,12); write('Сумма за первый период:');
  168.     gotoxy(4,13); write('S1=S0+S0*k/100=S0*(1+k/100)');
  169.     gotoxy(4,14); write('Сумма за второй период:');
  170.     gotoxy(4,15); write('S2=S1+S1*k/100=S1*(1+k/100)=S0*(1+k/100)^2');
  171.     gotoxy(4,16); write('Следовательно, сумма за n-ый период:');
  172.     gotoxy(4,17); write('Sn=S0*(1+k/100)^n');
  173.     gotoxy(4,19); write('Чтобы получить количество платёжных периодов, подбирается такое');
  174.     gotoxy(4,20); write('целое число n, что S0*(1+k/100)^n<=Sn, а S0*(1+k/100)^(n+1)>Sn');
  175.     gotoxy(4,21); write(getinput('startsuminput')+'*(1+'+getinput('procentsinput')+'/100)^'+inttostr(strtoint(copy(r,pos(':',r)+2,length(r)-pos(':',r)-1))-1)+'<'+getinput('endsuminput'));
  176.     gotoxy(4,22); write(getinput('startsuminput')+'*(1+'+getinput('procentsinput')+'/100)^'+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)+'>='+getinput('endsuminput'));
  177.     gotoxy(4,23); write('Значит n='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  178.     //more
  179.     var k: char;
  180.     repeat k:=readkey until (k=#27)or(k=#13);
  181.     writelayout; choose('more');
  182.   end;
  183.  
  184. procedure vklad_stavka;
  185. 'start:enter': begin
  186.     //calculating
  187.     calculated:=true;
  188.     if (getinput('paycountinput')='')or(getinput('startsuminput')='')or(getinput('endsuminput')='')
  189.     then begin
  190.       r:='Вы ввели не все данные!';
  191.       hidebutton('more'); deletebutton('more');
  192.     end
  193.     else if strtofloat(getinput('startsuminput'))>strtofloat(getinput('endsuminput')) then begin
  194.       r:='Недопустимые значения!';
  195.       hidebutton('more'); deletebutton('more');
  196.     end
  197.     else begin
  198.       var s0:=strtofloat(getinput('startsuminput'));
  199.       var sn:=strtofloat(getinput('endsuminput'));
  200.       var n:=strtoint(getinput('paycountinput'));
  201.       r:='Процентная ставка: '+floattostr(round2(100*power(sn/s0,1/n)-100));
  202.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  203.       writebutton('more'); switchright('more','start');
  204.     end;
  205.     hidetexting('result');
  206.     newtexting('result',r,4,22,60);
  207.     writetexting('result');
  208.   end;
  209. 'more:enter': begin
  210.     textbackground(backc);
  211.     clrscr;
  212.     textbackground(barbackc);
  213.     gotoxy(1,1); write(' '*70);
  214.     gotoxy(1,2); write(' '*70);
  215.     gotoxy(1,3); write(' '*70);
  216.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  217.     textcolor(textc); textbackground(backc);
  218.     //more
  219.     gotoxy(4,6); write('Вклад');
  220.     gotoxy(4,8); write('Пусть');
  221.     gotoxy(4,9); write('S0 - начальная сумма');
  222.     gotoxy(4,10); write('k - процентная ставка');
  223.     gotoxy(4,11); write('n - количество начислений');
  224.     gotoxy(4,12); write('Сумма за первый период:');
  225.     gotoxy(4,13); write('S1=S0+S0*k/100=S0*(1+k/100)');
  226.     gotoxy(4,14); write('Сумма за второй период:');
  227.     gotoxy(4,15); write('S2=S1+S1*k/100=S1*(1+k/100)=S0*(1+k/100)^2');
  228.     gotoxy(4,16); write('Следовательно, сумма за n-ый период:');
  229.     gotoxy(4,17); write('Sn:=S0*(1+k/100)^n');
  230.     gotoxy(4,19); write('Чтобы получить процентную ставку, нужно из полученной формулы');
  231.     gotoxy(4,20); write('выразить k:');
  232.     gotoxy(4,21); write('k=100*(Sn/S0)^(1/n)-100=');
  233.     gotoxy(4,22); write('=100*('+getinput('endsuminput')+'/'+getinput('startsuminput')+')^(1/'+getinput('paycountinput')+')-100='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  234.     //more
  235.     var k: char;
  236.     repeat k:=readkey until (k=#27)or(k=#13);
  237.     writelayout; choose('more');
  238.   end;
  239.  
  240. procedure vklad_plus;
  241. 'start:enter': begin
  242.     //calculating
  243.     calculated:=true;
  244.     if (getinput('procentsinput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')
  245.     then begin
  246.       r:='Вы ввели не все данные!';
  247.       hidebutton('more'); deletebutton('more');
  248.     end
  249.     else begin
  250.       var s0:=strtofloat(getinput('startsuminput'));
  251.       var k:=strtofloat(getinput('procentsinput'));
  252.       var n:=strtoint(getinput('paycountinput'));
  253.       r:='Прибыль: '+floattostr(round2(s0*power(1+k/100,n)-s0));
  254.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  255.       writebutton('more'); switchright('more','start');
  256.     end;
  257.     hidetexting('result');
  258.     newtexting('result',r,4,22,60);
  259.     writetexting('result');
  260.   end;
  261. 'more:enter': begin
  262.     textbackground(backc);
  263.     clrscr;
  264.     textbackground(barbackc);
  265.     gotoxy(1,1); write(' '*70);
  266.     gotoxy(1,2); write(' '*70);
  267.     gotoxy(1,3); write(' '*70);
  268.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  269.     textcolor(textc); textbackground(backc);
  270.     //more
  271.     gotoxy(4,6); write('Вклад');
  272.     gotoxy(4,8); write('Пусть');
  273.     gotoxy(4,9); write('S0 - начальная сумма');
  274.     gotoxy(4,10); write('k - процентная ставка');
  275.     gotoxy(4,11); write('n - количество начислений');
  276.     gotoxy(4,12); write('Сумма за первый период:');
  277.     gotoxy(4,13); write('S1=S0+S0*k/100=S0*(1+k/100)');
  278.     gotoxy(4,14); write('Сумма за второй период:');
  279.     gotoxy(4,15); write('S2=S1+S1*k/100=S1*(1+k/100)=S0*(1+k/100)^2');
  280.     gotoxy(4,16); write('Следовательно, сумма за n-ый период:');
  281.     gotoxy(4,17); write('Sn:=S0*(1+k/100)^n');
  282.     gotoxy(4,19); write('Чтобы получить количество начислений, нужно вычесть из итоговой суммы');
  283.     gotoxy(4,20); write('начальную:');
  284.     gotoxy(4,21); write('Sn-S0=S0*(1+k/100)^n-S0=');
  285.     gotoxy(4,22); write('='+getinput('startsuminput')+'*(1+'+getinput('procentsinput')+'/100)^'+getinput('paycountinput')+'-'+getinput('startsuminput')+'='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  286.     //more
  287.     var k: char;
  288.     repeat k:=readkey until (k=#27)or(k=#13);
  289.     writelayout; choose('more');
  290.   end;
  291.  
  292. procedure kredit_dif_startsum;
  293. 'start:enter': begin
  294.     //calculating
  295.     calculated:=true;
  296.     if (getinput('procentsinput')='')or(getinput('endsuminput')='')or(getinput('paycountinput')='')
  297.     then begin
  298.       r:='Вы ввели не все данные!';
  299.       hidebutton('more'); deletebutton('more');
  300.     end
  301.     else begin
  302.       var s:=strtofloat(getinput('endsuminput'));
  303.       var k:=strtofloat(getinput('procentsinput'));
  304.       var n:=strtoint(getinput('paycountinput'));
  305.       r:='Сумма кредита: '+floattostr(round2(s/(1+k*(n+1)/200)));
  306.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  307.       writebutton('more'); switchright('more','start');
  308.     end;
  309.     hidetexting('result');
  310.     newtexting('result',r,4,22,60);
  311.     writetexting('result');
  312.   end;
  313. 'more:enter': begin
  314.     textbackground(backc);
  315.     clrscr;
  316.     textbackground(barbackc);
  317.     gotoxy(1,1); write(' '*70);
  318.     gotoxy(1,2); write(' '*70);
  319.     gotoxy(1,3); write(' '*70);
  320.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  321.     //more
  322.     textbackground(backc); textcolor(textc);
  323.     gotoxy(4,6); write('Кредит (дифференцированные платежи)');
  324.     gotoxy(4,8); write('Пусть');
  325.     gotoxy(4,9); write('S0 - сумма кредита');
  326.     gotoxy(4,10); write('k - процентная ставка');
  327.     gotoxy(4,11); write('n - количество платёжных периодов');
  328.     gotoxy(4,12); write('q1, q2,... qn - начисленный процент за i-ый период');
  329.     gotoxy(4,13); write('q - сумма начисленных процентов');
  330.     gotoxy(4,14); write('S=S0+q - сумма выплат');
  331.     gotoxy(4,15); write('q1=S0*k/100');
  332.     gotoxy(4,16); write('q2=(S0-S0/n)*(k/100)=(S0*(n-1)*k)/(100*n)');
  333.     gotoxy(4,17); write('q3=(S0-2*S0/n)*(k/100)=(S0*(n-2)*k)/(100*n)');
  334.     gotoxy(4,18); write('...');
  335.     gotoxy(4,19); write('qn=(S0-(n-1)*S0/n)*(k/100)=S0*k/(100*n)');
  336.     gotoxy(4,20); write('q=q1+q2+q3+...+qn=(S0*k/100)+(S0*(n-1)*k)/(100*n)+(S0*(n-2)*k)/');
  337.     gotoxy(4,21); write('/(100*n)+...+S0*k/(100*n)=((S0*k)/100*n)*(n+(n-1)+(n-2)+...+1)=');
  338.     gotoxy(4,22); write('=((S0*k)/(100*n))*((n+1)/2)*n=(S0*k*(n+1))/200');
  339.     gotoxy(4,23); write('S=S0+q=S0+(S0*k*(n+1))/200');
  340.     gotoxy(4,25); write('Чтобы получить сумму вклада, нужно из полученной формулы');
  341.     gotoxy(4,26); write('выразить S0:');
  342.     gotoxy(4,27); write('S0=S/(1+k*(n+1)/200)=');
  343.     gotoxy(4,28); write('='+getinput('endsuminput')+'/(1+'+getinput('procentsinput')+'*('+getinput('paycountinput')+'+1)/200)='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  344.     //more
  345.     var k: char;
  346.     repeat k:=readkey until (k=#27)or(k=#13);
  347.     writelayout; choose('more');
  348.   end;
  349.  
  350. procedure kredit_dif_endsum;
  351. 'start:enter': begin
  352.     //calculating
  353.     calculated:=true;
  354.     if (getinput('procentsinput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')
  355.     then begin
  356.       r:='Вы ввели не все данные!';
  357.       hidebutton('more'); deletebutton('more');
  358.     end
  359.     else begin
  360.       var s0:=strtofloat(getinput('startsuminput'));
  361.       var k:=strtofloat(getinput('procentsinput'));
  362.       var n:=strtofloat(getinput('paycountinput'));
  363.       r:='Сумма выплат: '+floattostr(round2(s0*(1+k*(n+1)/200)));
  364.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  365.       writebutton('more'); switchright('more','start');
  366.     end;
  367.     hidetexting('result');
  368.     newtexting('result',r,4,22,60);
  369.     writetexting('result');
  370.   end;
  371. 'more:enter': begin
  372.     textbackground(backc);
  373.     clrscr;
  374.     textbackground(barbackc);
  375.     gotoxy(1,1); write(' '*70);
  376.     gotoxy(1,2); write(' '*70);
  377.     gotoxy(1,3); write(' '*70);
  378.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  379.     //more
  380.     textbackground(backc); textcolor(textc);
  381.     gotoxy(4,6); write('Кредит (дифференцированные платежи)');
  382.     gotoxy(4,8); write('Пусть');
  383.     gotoxy(4,9); write('S0 - сумма кредита');
  384.     gotoxy(4,10); write('k - процентная ставка');
  385.     gotoxy(4,11); write('n - количество платёжных периодов');
  386.     gotoxy(4,12); write('q1, q2,... qn - начисленный процент за i-ый период');
  387.     gotoxy(4,13); write('q - сумма начисленных процентов');
  388.     gotoxy(4,14); write('S=S0+q - сумма выплат');
  389.     gotoxy(4,15); write('q1=S0*k/100');
  390.     gotoxy(4,16); write('q2=(S0-S0/n)*(k/100)=(S0*(n-1)*k)/(100*n)');
  391.     gotoxy(4,17); write('q3=(S0-2*S0/n)*(k/100)=(S0*(n-2)*k)/(100*n)');
  392.     gotoxy(4,18); write('...');
  393.     gotoxy(4,19); write('qn=(S0-(n-1)*S0/n)*(k/100)=S0*k/(100*n)');
  394.     gotoxy(4,20); write('q=q1+q2+q3+...+qn=(S0*k/100)+(S0*(n-1)*k)/(100*n)+(S0*(n-2)*k)/');
  395.     gotoxy(4,21); write('/(100*n)+...+S0*k/(100*n)=((S0*k)/100*n)*(n+(n-1)+(n-2)+...+1)=');
  396.     gotoxy(4,22); write('=((S0*k)/(100*n))*((n+1)/2)*n=(S0*k*(n+1))/200');
  397.     gotoxy(4,23); write('S=S0+q=S0+(S0*k*(n+1))/200=');
  398.     gotoxy(4,24); write('='+getinput('startsuminput')+'+('+getinput('startsuminput')+'*'+getinput('procentsinput')+'*('+getinput('paycountinput')+'+1))/200='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  399.     //more
  400.     var k: char;
  401.     repeat k:=readkey until (k=#27)or(k=#13);
  402.     writelayout; choose('more');
  403.   end;
  404.  
  405. procedure kredit_dif_stavka;
  406. 'start:enter': begin
  407.     //calculating
  408.     calculated:=true;
  409.     if (getinput('endsuminput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')
  410.     then begin
  411.       r:='Вы ввели не все данные!';
  412.       hidebutton('more'); deletebutton('more');
  413.     end
  414.     else if strtofloat(getinput('startsuminput'))>strtofloat(getinput('endsuminput')) then begin
  415.       r:='Недопустимые значения!';
  416.       hidebutton('more'); deletebutton('more');
  417.     end
  418.     else begin
  419.       var s0:=strtofloat(getinput('startsuminput'));
  420.       var s:=strtofloat(getinput('endsuminput'));
  421.       var n:=strtoint(getinput('paycountinput'));
  422.       r:='Процентная ставка: '+floattostr(round2(200*(s/s0-1)/(n+1)));
  423.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  424.       writebutton('more'); switchright('more','start');
  425.     end;
  426.     hidetexting('result');
  427.     newtexting('result',r,4,22,60);
  428.     writetexting('result');
  429.   end;
  430. 'more:enter': begin
  431.     textbackground(backc);
  432.     clrscr;
  433.     textbackground(barbackc);
  434.     gotoxy(1,1); write(' '*70);
  435.     gotoxy(1,2); write(' '*70);
  436.     gotoxy(1,3); write(' '*70);
  437.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  438.     //more
  439.     textbackground(backc); textcolor(textc);
  440.     gotoxy(4,6); write('Кредит (дифференцированные платежи)');
  441.     gotoxy(4,8); write('Пусть');
  442.     gotoxy(4,9); write('S0 - сумма кредита');
  443.     gotoxy(4,10); write('k - процентная ставка');
  444.     gotoxy(4,11); write('n - количество платёжных периодов');
  445.     gotoxy(4,12); write('q1, q2,... qn - начисленный процент за i-ый период');
  446.     gotoxy(4,13); write('q - сумма начисленных процентов');
  447.     gotoxy(4,14); write('S=S0+q - сумма выплат');
  448.     gotoxy(4,15); write('q1=S0*k/100');
  449.     gotoxy(4,16); write('q2=(S0-S0/n)*(k/100)=(S0*(n-1)*k)/(100*n)');
  450.     gotoxy(4,17); write('q3=(S0-2*S0/n)*(k/100)=(S0*(n-2)*k)/(100*n)');
  451.     gotoxy(4,18); write('...');
  452.     gotoxy(4,19); write('qn=(S0-(n-1)*S0/n)*(k/100)=S0*k/(100*n)');
  453.     gotoxy(4,20); write('q=q1+q2+q3+...+qn=(S0*k/100)+(S0*(n-1)*k)/(100*n)+(S0*(n-2)*k)/');
  454.     gotoxy(4,21); write('/(100*n)+...+S0*k/(100*n)=((S0*k)/100*n)*(n+(n-1)+(n-2)+...+1)=');
  455.     gotoxy(4,22); write('=((S0*k)/(100*n))*((n+1)/2)*n=(S0*k*(n+1))/200');
  456.     gotoxy(4,23); write('S=S0+q=S0+(S0*k*(n+1))/200');
  457.     gotoxy(4,24); write('Чтобы получить процентную ставку, нужно из полученной формулы');
  458.     gotoxy(4,25); write('выразить k:');
  459.     gotoxy(4,26); write('k=200*(S/S0-1)/(n+1)=');
  460.     gotoxy(4,27); write('=200*('+getinput('startsuminput')+'/'+getinput('endsuminput')+'-1)/('+getinput('paycountinput')+'+1)='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  461.     //more
  462.     var k: char;
  463.     repeat k:=readkey until (k=#27)or(k=#13);
  464.     writelayout; choose('more');
  465.   end;
  466.  
  467. procedure kredit_dif_periods;
  468. 'start:enter': begin
  469.     //calculating
  470.     calculated:=true;
  471.     if (getinput('endsuminput')='')or(getinput('startsuminput')='')or(getinput('procentsinput')='')
  472.     then begin
  473.       r:='Вы ввели не все данные!';
  474.       hidebutton('more'); deletebutton('more');
  475.     end
  476.     else if strtofloat(getinput('startsuminput'))>strtofloat(getinput('endsuminput')) then begin
  477.       r:='Недопустимые значения!';
  478.       hidebutton('more'); deletebutton('more');
  479.     end
  480.     else begin
  481.       var s0:=strtofloat(getinput('startsuminput'));
  482.       var s:=strtofloat(getinput('endsuminput'));
  483.       var k:=strtofloat(getinput('procentsinput'));
  484.       var n:=200*(s/s0-1)/k-1;
  485.       r:='Кол-во платёжных периодов: '+inttostr(trunc(n)+ord(frac(n)<>0));
  486.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  487.       writebutton('more'); switchright('more','start');
  488.     end;
  489.     hidetexting('result');
  490.     newtexting('result',r,4,22,60);
  491.     writetexting('result');
  492.   end;
  493. 'more:enter': begin
  494.     textbackground(backc);
  495.     clrscr;
  496.     textbackground(barbackc);
  497.     gotoxy(1,1); write(' '*70);
  498.     gotoxy(1,2); write(' '*70);
  499.     gotoxy(1,3); write(' '*70);
  500.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  501.     //more
  502.     textbackground(backc); textcolor(textc);
  503.     gotoxy(4,6); write('Кредит (дифференцированные платежи)');
  504.     gotoxy(4,7); write('Пусть');
  505.     gotoxy(4,8); write('S0 - сумма кредита');
  506.     gotoxy(4,9); write('k - процентная ставка');
  507.     gotoxy(4,10); write('n - количество платёжных периодов');
  508.     gotoxy(4,11); write('q1, q2,... qn - начисленный процент за i-ый период');
  509.     gotoxy(4,12); write('q - сумма начисленных процентов');
  510.     gotoxy(4,13); write('S=S0+q - сумма выплат');
  511.     gotoxy(4,14); write('q1=S0*k/100');
  512.     gotoxy(4,15); write('q2=(S0-S0/n)*(k/100)=(S0*(n-1)*k)/(100*n)');
  513.     gotoxy(4,16); write('q3=(S0-2*S0/n)*(k/100)=(S0*(n-2)*k)/(100*n)');
  514.     gotoxy(4,17); write('...');
  515.     gotoxy(4,18); write('qn=(S0-(n-1)*S0/n)*(k/100)=S0*k/(100*n)');
  516.     gotoxy(4,19); write('q=q1+q2+q3+...+qn=(S0*k/100)+(S0*(n-1)*k)/(100*n)+(S0*(n-2)*k)/');
  517.     gotoxy(4,20); write('/(100*n)+...+S0*k/(100*n)=((S0*k)/100*n)*(n+(n-1)+(n-2)+...+1)=');
  518.     gotoxy(4,21); write('=((S0*k)/(100*n))*((n+1)/2)*n=(S0*k*(n+1))/200');
  519.     gotoxy(4,22); write('S=S0+q=S0+(S0*k*(n+1))/200');
  520.     gotoxy(4,23); write('Чтобы получить количество платёжных периодов, подбирается такое');
  521.     gotoxy(4,24); write('целое число n, что S0+(S0*k*(n+1))/200<=S,');
  522.     gotoxy(4,25); write('а S0+(S0*k*(n+1+1))/200>S');
  523.     gotoxy(4,26); write(getinput('startsuminput')+'+('+getinput('startsuminput')+'*'+getinput('procentsinput')+'*('+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)+'+1))/200<='+getinput('endsuminput'));
  524.     gotoxy(4,27); write(getinput('startsuminput')+'+('+getinput('startsuminput')+'*'+getinput('procentsinput')+'*('+inttostr(strtoint(copy(r,pos(':',r)+2,length(r)-pos(':',r)-1))+1)+'+1))/200>'+getinput('endsuminput'));
  525.     gotoxy(4,28); write('Значит n='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  526.     //more
  527.     var k: char;
  528.     repeat k:=readkey until (k=#27)or(k=#13);
  529.     writelayout; choose('more');
  530.   end;
  531.  
  532. procedure kredit_dif_pay;
  533. 'start:enter': begin
  534.     //calculating
  535.     calculated:=true;
  536.     if (getinput('procentsinput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')or(getinput('numberofperiodinput')='')
  537.     then begin
  538.       r:='Вы ввели не все данные!';
  539.       hidebutton('more'); deletebutton('more');
  540.     end
  541.     else if strtoint(getinput('numberofperiodinput'))>strtoint(getinput('paycountinput')) then begin
  542.       r:='Недопустимые значения!';
  543.       hidebutton('more'); deletebutton('more');
  544.     end
  545.     else begin
  546.       var s0:=strtofloat(getinput('startsuminput'));
  547.       var k:=strtofloat(getinput('procentsinput'));
  548.       var n:=strtoint(getinput('paycountinput'));
  549.       var nn:=strtoint(getinput('numberofperiodinput'));
  550.       r:='Выплата: '+floattostr(round2(s0/n+s0*(n-nn+1)*k/(100*n)));
  551.       newbutton('more',' Подробнее ',4,28,11,textc,buttonbackc,chc,chbackc);
  552.       writebutton('more'); switchright('more','start');
  553.     end;
  554.     hidetexting('result');
  555.     newtexting('result',r,4,26,60);
  556.     writetexting('result');
  557.   end;
  558. 'more:enter': begin
  559.     textbackground(backc);
  560.     clrscr;
  561.     textbackground(barbackc);
  562.     gotoxy(1,1); write(' '*70);
  563.     gotoxy(1,2); write(' '*70);
  564.     gotoxy(1,3); write(' '*70);
  565.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  566.     //more
  567.     textbackground(backc); textcolor(textc);
  568.     gotoxy(4,6); write('Кредит (дифференцированные платежи)');
  569.     gotoxy(4,8); write('Пусть');
  570.     gotoxy(4,9); write('S0 - сумма кредита');
  571.     gotoxy(4,10); write('k - процентная ставка');
  572.     gotoxy(4,11); write('n - количество платёжных периодов');
  573.     gotoxy(4,12); write('q1, q2,... qn - начисленный процент за i-ый период');
  574.     gotoxy(4,13); write('q - сумма начисленных процентов');
  575.     gotoxy(4,14); write('S=S0+q - сумма выплат');
  576.     gotoxy(4,15); write('q1=S0*k/100');
  577.     gotoxy(4,16); write('q2=(S0-S0/n)*(k/100)=(S0*(n-1)*k)/(100*n)');
  578.     gotoxy(4,17); write('q3=(S0-2*S0/n)*(k/100)=(S0*(n-2)*k)/(100*n)');
  579.     gotoxy(4,18); write('...');
  580.     gotoxy(4,19); write('qn=(S0-(n-1)*S0/n)*(k/100)=S0*k/(100*n)');
  581.     gotoxy(4,20); write('Чтобы найти выплату за i-ый период, нужно прибавить к');
  582.     gotoxy(4,21); write('начисленным процентам долговую разницу:');
  583.     gotoxy(4,22); write('S0/n+S0*k/(100*n)=');
  584.     gotoxy(4,23); write('='+getinput('startsuminput')+'/'+getinput('paycountinput')+'+'+getinput('startsuminput')+'*'+getinput('procentsinput')+
  585.     '/(100*'+getinput('paycountinput')+')='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  586.     //more
  587.     var k: char;
  588.     repeat k:=readkey until (k=#27)or(k=#13);
  589.     writelayout; choose('more');
  590.   end;
  591.  
  592. procedure kredit_ann_startsum;
  593. 'start:enter': begin
  594.     //calculating
  595.     calculated:=true;
  596.     if (getinput('procentsinput')='')or(getinput('endsuminput')='')or(getinput('paycountinput')='')
  597.     then begin
  598.       r:='Вы ввели не все данные!';
  599.       hidebutton('more'); deletebutton('more');
  600.     end
  601.     else begin
  602.       var s:=strtofloat(getinput('endsuminput'));
  603.       var n:=strtoint(getinput('paycountinput'));
  604.       var m:=1+strtofloat(getinput('procentsinput'))/100;
  605.       r:='Сумма кредита: '+floattostr(round2(s*(power(m,n)-1)/(n*power(m,n)*(m-1))));
  606.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  607.       writebutton('more'); switchright('more','start');
  608.     end;
  609.     hidetexting('result');
  610.     newtexting('result',r,4,22,60);
  611.     writetexting('result');
  612.   end;
  613. 'more:enter': begin
  614.     textbackground(backc);
  615.     clrscr;
  616.     textbackground(barbackc);
  617.     gotoxy(1,1); write(' '*70);
  618.     gotoxy(1,2); write(' '*70);
  619.     gotoxy(1,3); write(' '*70);
  620.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  621.     //more
  622.     textbackground(backc); textcolor(textc);
  623.     gotoxy(4,6); write('Кредит (аннуитетные платежи)');
  624.     gotoxy(4,8); write('Пусть');
  625.     gotoxy(4,9); write('S0 - сумма кредита');
  626.     gotoxy(4,10); write('k - процентная ставка, m - коэффициент, m=1+k/100=1+'+getinput('procentsinput')+'/100='+floattostr(1+strtofloat(getinput('procentsinput'))/100));
  627.     gotoxy(4,11); write('n - количество платёжных периодов');
  628.     gotoxy(4,12); write('x - периодическая выплата');
  629.     gotoxy(4,13); write('q - сумма начисленных процентов');
  630.     gotoxy(4,14); write('S=x*n - общая выплата');
  631.     gotoxy(4,15); write('S1=m*S0-x - долг после первой выплаты');
  632.     gotoxy(4,16); write('S2=m*S1-x=m^2*S0-mx-x - долг после второй выплаты');
  633.     gotoxy(4,17); write('...');
  634.     gotoxy(4,18); write('Sn=m*S(n-1)-x=m^n*So-m^(n-1)*x-m^(n-2)*x-...-x=0');
  635.     gotoxy(4,19); write('m^n*S0=x*(m^(n-1)+m^(n-2)+m^(n-3)+...+1)=x*(m^n-1)/(m-1)');
  636.     gotoxy(4,20); write('x=m^n*S0*(m-1)/(m^n-1)');
  637.     gotoxy(4,21); write('S=x*n=m^n*S0*n*(m-1)/(m^n-1)');
  638.     gotoxy(4,23); write('Чтобы получить сумму кредита, нужно из полученной формулы');
  639.     gotoxy(4,24); write('выразить S0:');
  640.     gotoxy(4,25); write('S0=S*(m^n-1)/(m^n*n*(m-1))=');
  641.     gotoxy(4,26); write('='+getinput('endsuminput')+'*('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+'^'+getinput('paycountinput')+'-1)/('+
  642.     floattostr(1+strtofloat(getinput('procentsinput'))/100)+'^'+getinput('paycountinput')+'*'+getinput('paycountinput')+'*('+
  643.     floattostr(1+strtofloat(getinput('procentsinput'))/100)+'-1))='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  644.     //more
  645.     var k: char;
  646.     repeat k:=readkey until (k=#27)or(k=#13);
  647.     writelayout; choose('more');
  648.   end;
  649.  
  650. procedure kredit_ann_endsum;
  651. 'start:enter': begin
  652.     //calculating
  653.     calculated:=true;
  654.     if (getinput('procentsinput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')
  655.     then begin
  656.       r:='Вы ввели не все данные!';
  657.       hidebutton('more'); deletebutton('more');
  658.     end
  659.     else begin
  660.       var s0:=strtofloat(getinput('startsuminput'));
  661.       var m:=1+strtofloat(getinput('procentsinput'))/100;
  662.       var n:=strtoint(getinput('paycountinput'));
  663.       r:='Сумма выплат: '+floattostr(round2(n*power(m,n)*s0*(m-1)/(power(m,n)-1)));
  664.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  665.       writebutton('more'); switchright('more','start');
  666.     end;
  667.     hidetexting('result');
  668.     newtexting('result',r,4,22,60);
  669.     writetexting('result');
  670.   end;
  671. 'more:enter': begin
  672.     textbackground(backc);
  673.     clrscr;
  674.     textbackground(barbackc);
  675.     gotoxy(1,1); write(' '*70);
  676.     gotoxy(1,2); write(' '*70);
  677.     gotoxy(1,3); write(' '*70);
  678.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  679.     //more
  680.     textbackground(backc); textcolor(textc);
  681.     gotoxy(4,6); write('Кредит (аннуитетные платежи)');
  682.     gotoxy(4,8); write('Пусть');
  683.     gotoxy(4,9); write('S0 - сумма кредита');
  684.     gotoxy(4,10); write('k - процентная ставка, m - коэффициент, m=1+k/100=1+'+getinput('procentsinput')+'/100='+floattostr(1+strtofloat(getinput('procentsinput'))/100));
  685.     gotoxy(4,11); write('n - количество платёжных периодов');
  686.     gotoxy(4,12); write('x - периодическая выплата');
  687.     gotoxy(4,13); write('q - сумма начисленных процентов');
  688.     gotoxy(4,14); write('S=x*n - общая выплата');
  689.     gotoxy(4,15); write('S1=m*S0-x - долг после первой выплаты');
  690.     gotoxy(4,16); write('S2=m*S1-x=m^2*S0-mx-x - долг после второй выплаты');
  691.     gotoxy(4,17); write('...');
  692.     gotoxy(4,18); write('Sn=m*S(n-1)-x=m^n*So-m^(n-1)*x-m^(n-2)*x-...-x=0');
  693.     gotoxy(4,19); write('m^n*S0=x*(m^(n-1)+m^(n-2)+m^(n-3)+...+1)=x*(m^n-1)/(m-1)');
  694.     gotoxy(4,20); write('x=m^n*S0*(m-1)/(m^n-1)');
  695.     gotoxy(4,21); write('S=x*n=m^n*S0*n*(m-1)/(m^n-1)=');
  696.     gotoxy(4,22); write('='+floattostr(1+strtofloat(getinput('procentsinput'))/100)+'^'+getinput('paycountinput')+'*'+getinput('startsuminput')+'*'+
  697.     getinput('paycountinput')+'*('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+'-1)/('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+
  698.     '^'+getinput('paycountinput')+'-1)='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  699.     //more
  700.     var k: char;
  701.     repeat k:=readkey until (k=#27)or(k=#13);
  702.     writelayout; choose('more');
  703.   end;
  704.  
  705. procedure kredit_ann_stavka;
  706. 'start:enter': begin
  707.     //calculating
  708.     calculated:=true;
  709.     if (getinput('endsuminput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')
  710.     then begin
  711.       r:='Вы ввели не все данные!';
  712.       hidebutton('more'); deletebutton('more');
  713.     end
  714.     else if strtofloat(getinput('startsuminput'))>strtofloat(getinput('endsuminput')) then begin
  715.       r:='Недопустимые значения!';
  716.       hidebutton('more'); deletebutton('more');
  717.     end
  718.     else begin
  719.       var s0:=strtofloat(getinput('startsuminput'));
  720.       var s:=strtofloat(getinput('endsuminput'));
  721.       var n:=strtofloat(getinput('paycountinput'));
  722.       var k: real = 0; var rovno: boolean;
  723.       var rr: real;
  724.       repeat k:=k+1; rr:=n*power(1+k/100,n)*s0*(k/100)/(power(1+k/100,n)-1) until rr>=s;
  725.       if rr=s then rovno:=true;
  726.       if not rovno then repeat k:=k-0.1; rr:=n*power(1+k/100,n)*s0*(k/100)/(power(1+k/100,n)-1) until rr<=s;
  727.       if rr=s then rovno:=true;
  728.       if not rovno then repeat k:=k+0.01; rr:=n*power(1+k/100,n)*s0*(k/100)/(power(1+k/100,n)-1) until rr>=s;
  729.       if rr=s then rovno:=true;
  730.       if not rovno then repeat k:=k-0.001; rr:=n*power(1+k/100,n)*s0*(k/100)/(power(1+k/100,n)-1) until rr<=s;
  731.       r:='Процентная ставка: '+floattostr(round2(k));
  732.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  733.       writebutton('more'); switchright('more','start');
  734.     end;
  735.     hidetexting('result');
  736.     newtexting('result',r,4,22,60);
  737.     writetexting('result');
  738.   end;
  739. 'more:enter': begin
  740.     textbackground(backc);
  741.     clrscr;
  742.     textbackground(barbackc);
  743.     gotoxy(1,1); write(' '*70);
  744.     gotoxy(1,2); write(' '*70);
  745.     gotoxy(1,3); write(' '*70);
  746.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  747.     //more
  748.     textbackground(backc); textcolor(textc);
  749.     gotoxy(4,6); write('Кредит (аннуитетные платежи)');
  750.     gotoxy(4,8); write('Пусть');
  751.     gotoxy(4,9); write('S0 - сумма кредита');
  752.     gotoxy(4,10); write('k - процентная ставка, m - коэффициент, m=1+k/100');
  753.     gotoxy(4,11); write('n - количество платёжных периодов');
  754.     gotoxy(4,12); write('x - периодическая выплата');
  755.     gotoxy(4,13); write('q - сумма начисленных процентов');
  756.     gotoxy(4,14); write('S=x*n - общая выплата');
  757.     gotoxy(4,15); write('S1=m*S0-x - долг после первой выплаты');
  758.     gotoxy(4,16); write('S2=m*S1-x=m^2*S0-mx-x - долг после второй выплаты');
  759.     gotoxy(4,17); write('...');
  760.     gotoxy(4,18); write('Sn=m*S(n-1)-x=m^n*So-m^(n-1)*x-m^(n-2)*x-...-x=0');
  761.     gotoxy(4,19); write('m^n*S0=x*(m^(n-1)+m^(n-2)+m^(n-3)+...+1)=x*(m^n-1)/(m-1)');
  762.     gotoxy(4,20); write('x=m^n*S0*(m-1)/(m^n-1)');
  763.     gotoxy(4,21); write('S=x*n=m^n*S0*n*(m-1)/(m^n-1)');
  764.     gotoxy(4,23); write('Чтобы получить процентную ставку, подбирается такое число');
  765.     gotoxy(4,24); write('m=1+k/100, которое соответствует полученной формуле:');
  766.     gotoxy(4,25); write(floattostr(1+strtofloat(copy(r,pos(':',r)+2,length(r)-pos(':',r)-1))/100)+'^'+getinput('paycountinput')+'*'
  767.     +getinput('startsuminput')+'*'+getinput('paycountinput')+'*('+floattostr(1+strtofloat(copy(r,pos(':',r)+2,length(r)-pos(':',r)-1))/100)+'-1)/('+
  768.     floattostr(1+strtofloat(copy(r,pos(':',r)+2,length(r)-pos(':',r)-1))/100)+
  769.     '^'+getinput('paycountinput')+'-1)='+getinput('endsuminput'));
  770.     gotoxy(4,26); write('m='+floattostr(1+strtofloat(copy(r,pos(':',r)+2,length(r)-pos(':',r)-1))/100));
  771.     gotoxy(4,27); write('k=(m-1)*100=('+floattostr(1+strtofloat(copy(r,pos(':',r)+2,length(r)-pos(':',r)-1))/100)+'-1)*100='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  772.     //more
  773.     var k: char;
  774.     repeat k:=readkey until (k=#27)or(k=#13);
  775.     writelayout; choose('more');
  776.   end;
  777.  
  778. procedure kredit_ann_periods;
  779. 'start:enter': begin
  780.     //calculating
  781.     calculated:=true;
  782.     if (getinput('endsuminput')='')or(getinput('startsuminput')='')or(getinput('procentsinput')='')
  783.     then begin
  784.       r:='Вы ввели не все данные!';
  785.       hidebutton('more'); deletebutton('more');
  786.     end
  787.     else if strtofloat(getinput('startsuminput'))>strtofloat(getinput('endsuminput')) then begin
  788.       r:='Недопустимые значения!';
  789.       hidebutton('more'); deletebutton('more');
  790.     end
  791.     else begin
  792.       var s0:=strtofloat(getinput('startsuminput'));
  793.       var s:=strtofloat(getinput('endsuminput'));
  794.       var m:=1+strtofloat(getinput('procentsinput'))/100;
  795.       var n:=1;
  796.       while n*power(m,n)*s0*(m-1)/(power(m,n)-1)<s do n:=n+1;
  797.       r:='Кол-во платёжных периодов: '+inttostr(n);
  798.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  799.       writebutton('more'); switchright('more','start');
  800.     end;
  801.     hidetexting('result');
  802.     newtexting('result',r,4,22,60);
  803.     writetexting('result');
  804.   end;
  805. 'more:enter': begin
  806.     textbackground(backc);
  807.     clrscr;
  808.     textbackground(barbackc);
  809.     gotoxy(1,1); write(' '*70);
  810.     gotoxy(1,2); write(' '*70);
  811.     gotoxy(1,3); write(' '*70);
  812.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  813.     //more
  814.     textbackground(backc); textcolor(textc);
  815.     gotoxy(4,6); write('Кредит (аннуитетные платежи)');
  816.     gotoxy(4,8); write('Пусть');
  817.     gotoxy(4,9); write('S0 - сумма кредита');
  818.     gotoxy(4,10); write('k - процентная ставка, m - коэффициент, m=1+k/100=1+'+getinput('procentsinput')+'/100='+floattostr(1+strtofloat(getinput('procentsinput'))/100));
  819.     gotoxy(4,11); write('n - количество платёжных периодов');
  820.     gotoxy(4,12); write('x - периодическая выплата');
  821.     gotoxy(4,13); write('q - сумма начисленных процентов');
  822.     gotoxy(4,14); write('S=x*n - общая выплата');
  823.     gotoxy(4,15); write('S1=m*S0-x - долг после первой выплаты');
  824.     gotoxy(4,16); write('S2=m*S1-x=m^2*S0-mx-x - долг после второй выплаты');
  825.     gotoxy(4,17); write('...');
  826.     gotoxy(4,18); write('Sn=m*S(n-1)-x=m^n*So-m^(n-1)*x-m^(n-2)*x-...-x=0');
  827.     gotoxy(4,19); write('m^n*S0=x*(m^(n-1)+m^(n-2)+m^(n-3)+...+1)=x*(m^n-1)/(m-1)');
  828.     gotoxy(4,20); write('x=m^n*S0*(m-1)/(m^n-1)');
  829.     gotoxy(4,21); write('S=x*n=m^n*S0*n*(m-1)/(m^n-1)');
  830.     gotoxy(4,23); write('Чтобы получить количество платёжных периодов, подбирается такое');
  831.     gotoxy(4,24); write('целое число n, что m^n*S0*n*(m-1)/(m^n-1)<=S,');
  832.     gotoxy(4,25); write('а m^(n+1)*S0*(n+1)*(m-1)/(m^(n+1)-1)>S:');
  833.     gotoxy(4,26); write(floattostr(1+strtofloat(getinput('procentsinput'))/100)+'^'+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)+'*'
  834.     +getinput('startsuminput')+'*'+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)+'*('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+
  835.     '-1)/('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+
  836.     '^'+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)+'-1)<='+getinput('endsuminput'));
  837.     gotoxy(4,27); write(floattostr(1+strtofloat(getinput('procentsinput'))/100)+'^'+inttostr(strtoint((copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)))+1)+'*'
  838.     +getinput('startsuminput')+'*'+inttostr(strtoint((copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)))+1)+
  839.     '*('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+'-1)/('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+
  840.     '^'+inttostr(strtoint((copy(r,pos(':',r)+2,length(r)-pos(':',r)-1)))+1)+'-1)>'+getinput('endsuminput'));
  841.     gotoxy(4,28); write('Значит n='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  842.     //more
  843.     var k: char;
  844.     repeat k:=readkey until (k=#27)or(k=#13);
  845.     writelayout; choose('more');
  846.   end;
  847.  
  848. procedure kredit_ann_pay;
  849. 'start:enter': begin
  850.     //calculating
  851.     calculated:=true;
  852.     if (getinput('procentsinput')='')or(getinput('startsuminput')='')or(getinput('paycountinput')='')
  853.     then begin
  854.       r:='Вы ввели не все данные!';
  855.       hidebutton('more'); deletebutton('more');
  856.     end
  857.     else begin
  858.       var s0:=strtofloat(getinput('startsuminput'));
  859.       var m:=1+strtofloat(getinput('procentsinput'))/100;
  860.       var n:=strtoint(getinput('paycountinput'));
  861.       r:='Выплата: '+floattostr(round2(power(m,n)*s0*(m-1)/(power(m,n)-1)));
  862.       newbutton('more',' Подробнее ',4,24,11,textc,buttonbackc,chc,chbackc);
  863.       writebutton('more'); switchright('more','start');
  864.     end;
  865.     hidetexting('result');
  866.     newtexting('result',r,4,22,60);
  867.     writetexting('result');
  868.   end;
  869. 'more:enter': begin
  870.     textbackground(backc);
  871.     clrscr;
  872.     textbackground(barbackc);
  873.     gotoxy(1,1); write(' '*70);
  874.     gotoxy(1,2); write(' '*70);
  875.     gotoxy(1,3); write(' '*70);
  876.     gotoxy(3,2); textbackground(setchbackc); textcolor(setchc); write(' '+#27+' '); textbackground(barbackc); textcolor(bartextc); write(' Подробнее');
  877.     //more
  878.     textbackground(backc); textcolor(textc);
  879.     gotoxy(4,6); write('Кредит (аннуитетные платежи)');
  880.     gotoxy(4,8); write('Пусть');
  881.     gotoxy(4,9); write('S0 - сумма кредита');
  882.     gotoxy(4,10); write('k - процентная ставка, m - коэффициент, m=1+k/100=1+'+getinput('procentsinput')+'/100='+floattostr(1+strtofloat(getinput('procentsinput'))/100));
  883.     gotoxy(4,11); write('n - количество платёжных периодов');
  884.     gotoxy(4,12); write('x - периодическая выплата');
  885.     gotoxy(4,13); write('q - сумма начисленных процентов');
  886.     gotoxy(4,14); write('S=x*n - общая выплата');
  887.     gotoxy(4,15); write('S1=m*S0-x - долг после первой выплаты');
  888.     gotoxy(4,16); write('S2=m*S1-x=m^2*S0-mx-x - долг после второй выплаты');
  889.     gotoxy(4,17); write('...');
  890.     gotoxy(4,18); write('Sn=m*S(n-1)-x=m^n*So-m^(n-1)*x-m^(n-2)*x-...-x=0');
  891.     gotoxy(4,19); write('m^n*S0=x*(m^(n-1)+m^(n-2)+m^(n-3)+...+1)=x*(m^n-1)/(m-1)');
  892.     gotoxy(4,20); write('x=m^n*S0*(m-1)/(m^n-1)=');
  893.     gotoxy(4,21); write('='+floattostr(1+strtofloat(getinput('procentsinput'))/100)+'^'+getinput('paycountinput')+'*'+getinput('startsuminput')+'*('+
  894.     floattostr(1+strtofloat(getinput('procentsinput'))/100)+'-1)/('+floattostr(1+strtofloat(getinput('procentsinput'))/100)+
  895.     '^'+getinput('paycountinput')+'-1)='+copy(r,pos(':',r)+2,length(r)-pos(':',r)-1));
  896.     //more
  897.     var k: char;
  898.     repeat k:=readkey until (k=#27)or(k=#13);
  899.     writelayout; choose('more');
  900.   end;
  901.  
  902.  
  903. //Ядро управления шаблонами:
  904. while true do begin
  905.   if (lastlaysave)and(calculated) then updatesettings;
  906.   calculated:=false;
  907.   lastlayout:=currentlayout;
  908.   currentlayout:=nextlayout;
  909.   nextlayout:=''; deletelayout(lastlayout);
  910.   case currentlayout of
  911.   'vklad_startsum': vklad_startsum;
  912.   'vklad_endsum': vklad_endsum;
  913.   'vklad_periods': vklad_periods;
  914.   'vklad_stavka': vklad_stavka;
  915.   'vklad_plus': vklad_plus;
  916.   'kredit_dif_startsum': kredit_dif_startsum;
  917.   'kredit_dif_endsum': kredit_dif_endsum;
  918.   'kredit_dif_stavka': kredit_dif_stavka;
  919.   'kredit_dif_periods': kredit_dif_periods;
  920.   'kredit_dif_pay': kredit_dif_pay;
  921.   'kredit_ann_startsum': kredit_ann_startsum;
  922.   'kredit_ann_endsum': kredit_ann_endsum;
  923.   'kredit_ann_stavka': kredit_ann_stavka;
  924.   'kredit_ann_periods': kredit_ann_periods;
  925.   'kredit_ann_pay': kredit_ann_pay;
  926.   'exit': break;
  927.   else begin currentlayout:='kredit_ann_endsum'; kredit_ann_endsum; end;
  928.   end;
  929. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement