Составить алгоритм работы программы - 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. Если число отрицательное, то перед результатом выводится
*¬Ё*гб
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д