Составить алгоритм работы программы - 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, которая преобразует числовое значение в словесное представление. Для этого используются несколько вспомогательных функций и массивов.
- Массив F содержит названия для чисел от 1 до 99, а также для чисел, кратных 100, 1000 и т.д.
- Массив L содержит названия для чисел от 100 до 199, от 200 до 299 и т.д.
- Массив T содержит названия для чисел, оканчивающихся на 0, 10, 20 и т.д.
- Массив Hundr содержит названия для чисел, оканчивающихся на 0, 10, 20, 30 и т.д.
- Массив 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.
- Функция HundreedsToWords преобразует числа от 1 до 999 в словесное представление. Она использует массивы L, T и Greaters, а также вспомогательные переменные для обработки чисел от 1000 до 9999.
- Функция numToWords преобразует числовое значение в словесное представление. Она использует функцию HundreedsToWords и массивы L, T и Greaters для обработки чисел от 1 до 9999. Если число отрицательное, то перед результатом выводится
*¬Ё*гб
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д