Составить алгоритм работы программы - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. program ToWords;
  2. uses
  3. IntToWord in 'IntToWord.pas';
  4. var
  5. F_in: Text;
  6. line,S,Name:string;
  7. Sum,R:longint;
  8. Num:longint;
  9. begin
  10. Write('File name: ');
  11. Readln(Name);
  12. Assign(F_in,name);
  13. Reset(F_in);
  14. Num:=0;
  15. Sum:=0;
  16. While not eof(F_in) do
  17. begin
  18. Readln(F_in,R);
  19. // Writeln(numToWords(R));//for debug
  20. {$Q-}//disable integer overflow checking
  21. Sum:=Sum+R;
  22. {$Q+}//enable integer overflow checking
  23. inc(Num);
  24. end;
  25. Close(F_in);
  26. Writeln(Num);
  27. Writeln(NumToWords(Sum));
  28. Readln;
  29. end.

Решение задачи: «Составить алгоритм работы программы»

textual
Листинг программы
  1. unit IntToWord;
  2.  
  3. interface
  4.  
  5. function numToWords(I:longint):String;
  6.  
  7. implementation
  8.  
  9. const F:array[1..2]of string = ('®¤**','¤ўҐ');
  10. const L:array[0..19]of string = ('*®«м','®¤Ё*','¤ў*','ваЁ','зҐвлаҐ','Їпвм',
  11.   'иҐбвм','ᥬм','ў®бҐ¬м','¤Ґўпвм','¤Ґбпвм','®¤Ё***¤ж*вм','¤ўҐ**¤ж*вм',
  12.   'ваЁ**¤ж*вм','зҐвла**¤ж*вм','Їпв**¤ж*вм','иҐбв**¤ж*вм','ᥬ**¤ж*вм',
  13.   'ў®бҐ¬**¤ж*вм','¤Ґўпв**¤ж*вм');
  14.  
  15. const T:array[2..6]of string = ('¤ў*¤ж*вм','ваЁ¤ж*вм','б®а®Є','¤Ґбпв','¤Ґўп*®бв®');
  16. const Hundr:array[1..5]of string = ('бв®','¤ўҐбвЁ','ваЁбв®','зҐвлаҐбв®','б®в');
  17. const Greaters:array[0..8]of string = ('влбпз*','влбпзЁ','влбпзм','¬Ё««Ё®*','¬Ё««Ё®**','¬Ё««Ё®*®ў','¬Ё««Ё*а¤','¬Ё««Ё*а¤*','¬Ё««Ё*मў');
  18.  
  19. function HundreedsToWords(I:integer;fe:boolean):String;
  20. var
  21.   units,tens,hundreds:byte;
  22.   S:String;
  23. begin
  24.   S:='';
  25.   if i=0 then
  26.   begin
  27.     HundreedsToWords:='';
  28.     exit;
  29.   end;
  30.  
  31.   if i<20 then
  32.     S:=L[i]+' '
  33.   else
  34.   begin
  35.     hundreds:=i div 100;
  36.     tens:=i mod 100 div 10;
  37.     units:=i mod 10;
  38.     case hundreds of
  39.       0:;
  40.       1..4:S:=Hundr[hundreds]+' ';
  41.       else S:=L[hundreds]+Hundr[5]+' ';
  42.     end;
  43.  
  44.     case tens of
  45.       0..1:if i mod 100 <>0 then
  46.           S:=S+L[i mod 100]+' ';
  47.       2..4:S:=S+T[tens]+' ';
  48.       5..8:S:=S+L[tens]+T[5]+' ';
  49.       9: S:=S+T[6]+' ';
  50.     end;
  51.  
  52.     if i mod 100>19 then
  53.       if units>0 then
  54.       begin
  55.         if (fe)and(units<3) then
  56.           S:=S+F[units]+' '
  57.         else
  58.           S:=S+L[units]+' ';
  59.       end;
  60.   end;
  61.   if S<>'' then
  62.     delete(S,length(S),1);
  63.   HundreedsToWords:=S;
  64. end;
  65.  
  66. function numToWords(I:longint):String;
  67. var
  68.   h,j:longint;
  69.   sign:Boolean;
  70.   S:String;
  71. begin
  72.   if i=0 then
  73.   begin
  74.     numToWords:=L[0];
  75.     exit;
  76.   end;
  77.  
  78.   S:='';
  79.   sign:=I<0;
  80.   I:=Abs(i);
  81.   j:=0;
  82.  
  83.   while I<>0 do
  84.   begin
  85.     h:=i mod 1000;
  86.     i:=i div 1000;
  87.     case j of
  88.       0:;//¤® влбпзЁ
  89.       1:if h mod 100 in [5..19] then
  90.         S:=' '+Greaters[2]+S
  91.       else
  92.       case h mod 10 of
  93.          0:;
  94.          1:   S:=' '+Greaters[0]+S;
  95.          2..4:S:=' '+Greaters[1]+S;
  96.          else S:=' '+Greaters[2]+S;
  97.         end;//¤® ¬Ё««Ё®**
  98.       2:if h mod 100 in [5..19] then
  99.         S:=' '+Greaters[5]+S
  100.       else
  101.       case h mod 10 of
  102.          0:;
  103.          1:   S:=' '+Greaters[3]+S;
  104.          2..4:S:=' '+Greaters[4]+S;
  105.          else S:=' '+Greaters[5]+S;
  106.         end;//¤® ¬Ё««Ё*а¤*
  107.       3:if h mod 100 in [5..19] then
  108.         S:=' '+Greaters[8]+S
  109.       else
  110.       case h mod 10 of
  111.          0:;
  112.          1:   S:=' '+Greaters[6]+S;
  113.          2..4:S:=' '+Greaters[7]+S;
  114.          else S:=' '+Greaters[8]+S;
  115.         end;//>= ¬Ё««Ёа¤*
  116.     end;
  117.     if j>0 then
  118.     begin
  119.       if h<>1 then
  120.         S:=' '+HundreedsToWords(h,j=1) + S;
  121.     end
  122.     else
  123.       S:=' '+HundreedsToWords(h,false);
  124.     inc(j);
  125.   end;
  126.   delete(S,1,1);
  127.   if sign then
  128.     S:='¬Ё*гб '+S;
  129.   numToWords:=S;
  130. end;
  131.  
  132. end.mToWords:=S;
  133. end;
  134.  
  135. end.

Объяснение кода листинга программы

В данном коде реализована функция numToWords, которая преобразует числовое значение в словесное представление. Для этого используются несколько вспомогательных функций и массивов.

  1. Массив F содержит названия для чисел от 1 до 99, а также для чисел, кратных 100, 1000 и т.д.
  2. Массив L содержит названия для чисел от 100 до 199, от 200 до 299 и т.д.
  3. Массив T содержит названия для чисел, оканчивающихся на 0, 10, 20 и т.д.
  4. Массив Hundr содержит названия для чисел, оканчивающихся на 0, 10, 20, 30 и т.д.
  5. Массив Greaters содержит названия для чисел, оканчивающихся на 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, 910, 920, 930, 940, 950, 960, 970, 980, 990.
  6. Функция HundreedsToWords преобразует числа от 1 до 999 в словесное представление. Она использует массивы L, T и Greaters, а также вспомогательные переменные для обработки чисел от 1000 до 9999.
  7. Функция numToWords преобразует числовое значение в словесное представление. Она использует функцию HundreedsToWords и массивы L, T и Greaters для обработки чисел от 1 до 9999. Если число отрицательное, то перед результатом выводится *¬Ё*гб.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы