Другие языки программирования и технологии
Вопрос по Pascal
Скажите, как составить программу на языке Паскаль, в которой вводишь с клавиатуры число, а программа пишет это число буквами пример 165 - сто шестьдесят пять!!!
Модуль myunit содержащий функцию SumProp, которая реализует преобразование числового значения прописью.
Unit myunit;
Interface
function SumProp(d:integer):string;
Implementation
function SumProp;
var s, s2 : string;
len, t, err :integer;
begin
Str(d, s);
len := Length(s);
S2 := '';
if len = 4 then begin
S2 := 'тысяча ';
end;
if len > 2 then begin
val(s[len-2], t, err);
case t of
1 : S2 := S2+'сто ';
2 : S2 := S2+'двести ';
3 : S2 := S2+'триста ';
4 : S2 := S2+'четыреста ';
5 : S2 := S2+'пятьсот ';
6 : S2 := S2+'шестьсот ';
7 : S2 := S2+'семьсот ';
8 : S2 := S2+'восемьсот ';
9 : S2 := S2+'девятьсот ';
end;
end;
if len > 1 then begin
val(s[len-1], t, err);
case t of
2 : S2 := S2+'двадцать ';
3 : S2 := S2+'тридцать ';
4 : S2 := S2+'сорок ';
5 : S2 := S2+'пятьдесят ';
6 : S2 := S2+'шестьдесят ';
7 : S2 := S2+'семьдесят ';
8 : S2 := S2+'восемьдесят ';
9 : S2 := S2+'девяносто ';
end;
end;
if t = 1 then begin
val(s[len], t, err);
case t of
0 : begin
if len > 1 then S2 := S2+'десять ';
end;
1 : S2 := S2+'одиннадцать ';
2 : S2 := S2+'двенадцать ';
3 : S2 := S2+'тринадцать ';
4 : S2 := S2+'четырнадцать ';
5 : S2 := S2+'пятнадцать ';
6 : S2 := S2+'шестнадцать ';
7 : S2 := S2+'семнадцать ';
8 : S2 := S2+'восемнадцать ';
9 : S2 := S2+'девятнадцать ';
end;
end
else begin
val(s[len], t, err);
case t of
0 : begin
if len = 1 then S2 := S2+'ноль ';
end;
1 : S2 := S2+'один ';
2 : S2 := S2+'два ';
3 : S2 := S2+'три ';
4 : S2 := S2+'четыре ';
5 : S2 := S2+'пять ';
6 : S2 := S2+'шесть ';
7 : S2 := S2+'семь ';
8 : S2 := S2+'восемь ';
9 : S2 := S2+'девять ';
end;
end;
SumProp := S2;
end;
END.
Листинг проверяющей программы
Uses crt, myunit;
var k : integer;
i :integer;
BEGIN
clrscr;;
for i := 1 to 20 do begin
k := Random(1002);
writeln(k, ' - ',SumProp(k));
end;
k := 1000;
writeln(k, ' - ',SumProp(k));
k := 1001;
writeln(k, ' - ',SumProp(k));
k := 13;
writeln(k, ' - ',SumProp(k));
readln;
END.
Unit myunit;
Interface
function SumProp(d:integer):string;
Implementation
function SumProp;
var s, s2 : string;
len, t, err :integer;
begin
Str(d, s);
len := Length(s);
S2 := '';
if len = 4 then begin
S2 := 'тысяча ';
end;
if len > 2 then begin
val(s[len-2], t, err);
case t of
1 : S2 := S2+'сто ';
2 : S2 := S2+'двести ';
3 : S2 := S2+'триста ';
4 : S2 := S2+'четыреста ';
5 : S2 := S2+'пятьсот ';
6 : S2 := S2+'шестьсот ';
7 : S2 := S2+'семьсот ';
8 : S2 := S2+'восемьсот ';
9 : S2 := S2+'девятьсот ';
end;
end;
if len > 1 then begin
val(s[len-1], t, err);
case t of
2 : S2 := S2+'двадцать ';
3 : S2 := S2+'тридцать ';
4 : S2 := S2+'сорок ';
5 : S2 := S2+'пятьдесят ';
6 : S2 := S2+'шестьдесят ';
7 : S2 := S2+'семьдесят ';
8 : S2 := S2+'восемьдесят ';
9 : S2 := S2+'девяносто ';
end;
end;
if t = 1 then begin
val(s[len], t, err);
case t of
0 : begin
if len > 1 then S2 := S2+'десять ';
end;
1 : S2 := S2+'одиннадцать ';
2 : S2 := S2+'двенадцать ';
3 : S2 := S2+'тринадцать ';
4 : S2 := S2+'четырнадцать ';
5 : S2 := S2+'пятнадцать ';
6 : S2 := S2+'шестнадцать ';
7 : S2 := S2+'семнадцать ';
8 : S2 := S2+'восемнадцать ';
9 : S2 := S2+'девятнадцать ';
end;
end
else begin
val(s[len], t, err);
case t of
0 : begin
if len = 1 then S2 := S2+'ноль ';
end;
1 : S2 := S2+'один ';
2 : S2 := S2+'два ';
3 : S2 := S2+'три ';
4 : S2 := S2+'четыре ';
5 : S2 := S2+'пять ';
6 : S2 := S2+'шесть ';
7 : S2 := S2+'семь ';
8 : S2 := S2+'восемь ';
9 : S2 := S2+'девять ';
end;
end;
SumProp := S2;
end;
END.
Листинг проверяющей программы
Uses crt, myunit;
var k : integer;
i :integer;
BEGIN
clrscr;;
for i := 1 to 20 do begin
k := Random(1002);
writeln(k, ' - ',SumProp(k));
end;
k := 1000;
writeln(k, ' - ',SumProp(k));
k := 1001;
writeln(k, ' - ',SumProp(k));
k := 13;
writeln(k, ' - ',SumProp(k));
readln;
END.
Не знаю, на сколько это птимально... Разбить на части по одному знаку. И через switch еденицам присоить единицы. десяткам десятки, сотням сотни... числовым значениям сивольные...
можно всё в ручную писать, но это уныло. определение разряда, потом свитчем соответственное слово %)
элементарно ватсон.
Все цифры и все уровни пропиши в массиве строкой.
потом циклом проверяй каждую данную цифру по этапно и заменивай словами из своего массива
Все цифры и все уровни пропиши в массиве строкой.
потом циклом проверяй каждую данную цифру по этапно и заменивай словами из своего массива
Похожие вопросы
- Один вопрос по Pascal (или Object Pascal, или Delphi) (не надо ничего решать, просто один вопрос)
- ВОПРОС ПРО Pascal!
- Вопрос насчёт Pascal .
- Доброго дня. Есть вопрос по PASCAL. Помогите пожалуйста.
- Вопрос по Pascal.
- Вопрос связан с олимпиадой по информатике! (Нужные знания языков pascal или c++)
- pascal or delphi
- Зачем изучают Pascal если есть Python?
- Программисты Python, Pascal или Scheme для обучения программированию?
- Язык программирования Pascal сложен в изучении?