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

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

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

program ToWords;
uses
  IntToWord in 'IntToWord.pas';
 
var
  F_in: Text;
  line,S,Name:string;
  Sum,R:longint;
  Num:longint;
 
begin
  Write('File name: ');
  Readln(Name);
  Assign(F_in,name);
  Reset(F_in);
 
  Num:=0;
  Sum:=0;
  While not eof(F_in) do
  begin
    Readln(F_in,R);
//    Writeln(numToWords(R));//for debug
    {$Q-}//disable integer overflow checking
    Sum:=Sum+R;
    {$Q+}//enable integer overflow checking
    inc(Num);
  end;
 
  Close(F_in);
  Writeln(Num);
  Writeln(NumToWords(Sum));
  Readln;
end.

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

textual
Листинг программы
unit IntToWord;
 
interface
 
function numToWords(I:longint):String;
 
implementation
 
const F:array[1..2]of string = ('®¤**','¤ўҐ');
const L:array[0..19]of string = ('*®«м','®¤Ё*','¤ў*','ваЁ','зҐвлаҐ','Їпвм',
  'иҐбвм','ᥬм','ў®бҐ¬м','¤Ґўпвм','¤Ґбпвм','®¤Ё***¤ж*вм','¤ўҐ**¤ж*вм',
  'ваЁ**¤ж*вм','зҐвла**¤ж*вм','Їпв**¤ж*вм','иҐбв**¤ж*вм','ᥬ**¤ж*вм',
  'ў®бҐ¬**¤ж*вм','¤Ґўпв**¤ж*вм');
 
const T:array[2..6]of string = ('¤ў*¤ж*вм','ваЁ¤ж*вм','б®а®Є','¤Ґбпв','¤Ґўп*®бв®');
const Hundr:array[1..5]of string = ('бв®','¤ўҐбвЁ','ваЁбв®','зҐвлаҐбв®','б®в');
const Greaters:array[0..8]of string = ('влбпз*','влбпзЁ','влбпзм','¬Ё««Ё®*','¬Ё««Ё®**','¬Ё««Ё®*®ў','¬Ё««Ё*а¤','¬Ё««Ё*а¤*','¬Ё««Ё*मў');
 
function HundreedsToWords(I:integer;fe:boolean):String;
var
  units,tens,hundreds:byte;
  S:String;
begin
  S:='';
  if i=0 then
  begin
    HundreedsToWords:='';
    exit;
  end;
 
  if i<20 then
    S:=L[i]+' '
  else
  begin
    hundreds:=i div 100;
    tens:=i mod 100 div 10;
    units:=i mod 10;
    case hundreds of
      0:;
      1..4:S:=Hundr[hundreds]+' ';
      else S:=L[hundreds]+Hundr[5]+' ';
    end;
 
    case tens of
      0..1:if i mod 100 <>0 then
          S:=S+L[i mod 100]+' ';
      2..4:S:=S+T[tens]+' ';
      5..8:S:=S+L[tens]+T[5]+' ';
      9: S:=S+T[6]+' ';
    end;
 
    if i mod 100>19 then
      if units>0 then
      begin
        if (fe)and(units<3) then
          S:=S+F[units]+' '
        else
          S:=S+L[units]+' ';
      end;
  end;
  if S<>'' then
    delete(S,length(S),1);
  HundreedsToWords:=S;
end;
 
function numToWords(I:longint):String;
var
  h,j:longint;
  sign:Boolean;
  S:String;
begin
  if i=0 then
  begin
    numToWords:=L[0];
    exit;
  end;
 
  S:='';
  sign:=I<0;
  I:=Abs(i);
  j:=0;
 
  while I<>0 do
  begin
    h:=i mod 1000;
    i:=i div 1000;
    case j of
      0:;//¤® влбпзЁ
      1:if h mod 100 in [5..19] then
        S:=' '+Greaters[2]+S
      else
      case h mod 10 of
         0:;
         1:   S:=' '+Greaters[0]+S;
         2..4:S:=' '+Greaters[1]+S;
         else S:=' '+Greaters[2]+S;
        end;//¤® ¬Ё««Ё®**
      2:if h mod 100 in [5..19] then
        S:=' '+Greaters[5]+S
      else
      case h mod 10 of
         0:;
         1:   S:=' '+Greaters[3]+S;
         2..4:S:=' '+Greaters[4]+S;
         else S:=' '+Greaters[5]+S;
        end;//¤® ¬Ё««Ё*а¤*
      3:if h mod 100 in [5..19] then
        S:=' '+Greaters[8]+S
      else
      case h mod 10 of
         0:;
         1:   S:=' '+Greaters[6]+S;
         2..4:S:=' '+Greaters[7]+S;
         else S:=' '+Greaters[8]+S;
        end;//>= ¬Ё««Ёа¤*
    end;
    if j>0 then
    begin
      if h<>1 then
        S:=' '+HundreedsToWords(h,j=1) + S;
    end
    else
      S:=' '+HundreedsToWords(h,false);
    inc(j);
  end;
  delete(S,1,1);
  if sign then
    S:='¬Ё*гб '+S;
  numToWords:=S;
end;
 
end.mToWords:=S;
end;
 
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
Похожие ответы