Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизПомогите начинающему составить программу!!! Найти похожие ветки
← →
roman_ln © (2006-05-16 11:55) [0]Разработать программу которая по русскому названию числа формирует его числовой эквивалент??? Или наоборот по числу формируется русское название...
← →
Sergey13 © (2006-05-16 11:58) [1]Второго в инете можно найти кучу. Первое - а нафига такое надо?
← →
Сергей М. © (2006-05-16 11:58) [2]Сумму-то озвучь, студент..
← →
Kolan © (2006-05-16 11:59) [3]Вопрос в чем. Именно: Не знаешь что -такое if, case? Не знаешь как по русски пишется 1, 102, 15?
Уточни...
← →
Сергей М. © (2006-05-16 12:02) [4]
> по русскому названию числа
"Штука зелени" - это тоже своего рода "русское название числа" ..
Как изволишь перевести это в Double ?
← →
roman_ln © (2006-05-16 12:34) [5]Ну например так(англ. вариант):
Может есть готовый алгоритм(а не такой грамозкий)?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var a:integer;
begin
If edit1.Text="1" then edit2.Text:="one"
else
if edit1.Text="2" then edit2.Text:="two"
else
...
If edit1.Text="twenty" then edit2.Text:="20"
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
end.
← →
MsGuns © (2006-05-16 12:38) [6]>begin
If edit1.Text="1" then edit2.Text:="one"
else
if edit1.Text="2" then edit2.Text:="two"
else
...
If edit1.Text="twenty" then edit2.Text:="20"
end;
Засстрелиться ! Т.е. для перевода миллиона надо миллион раз написать в программе это if else ?
Я бы автору такого шедевра посоветовал серьезно задумался о переквалификации. Например, в дворники.
← →
Сергей М. © (2006-05-16 12:39) [7]
> roman_ln © (16.05.06 12:34) [5]
>
> Ну например так(англ. вариант):
Ну если именно так, то (рус. вариант)
procedure TForm1.Button1Click(Sender: TObject);
var a:integer;
begin
If edit1.Text="1" then edit2.Text:="адын"
else
if edit1.Text="2" then edit2.Text:="два"
else
...
If edit1.Text="двадцать" then edit2.Text:="20"
end;
← →
Sergey13 © (2006-05-16 12:41) [8]2 [5] roman_ln © (16.05.06 12:34)
А зачем, все таки из сторки в число переводить?
If edit1.Text="тринадцать миллионов двести сорок одна тысяча пятьсот сорок четыре" then edit2.Text:="13 241 544"
8-)
← →
roman_ln © (2006-05-16 12:48) [9]Задание у меня такое …
Просто код написал и ужаснулся, а ни чего дельного в голову не лезет….
Вот я и спрашиваю есть ли готовые алгоритмы …???
MsGuns умничать может каждый, вот посоветовать что ни будь дельное…
← →
Sergey13 © (2006-05-16 12:54) [10]2 [9] roman_ln © (16.05.06 12:48)
>Задание у меня такое …
Тогда надо разбирать строку, учитывая падежи и т.п. Типа искать "миллионов", "тысяч", "ста", "сот" и т.д. Трудность тут как раз в падежах - "десять тысяч" и "четыре тысячи".
← →
roman_ln © (2006-05-16 12:58) [11]Да нет Сергей можно обойтись интервалом 0...50
← →
zorik © (2006-05-16 12:59) [12]Состав сначала матрицу с рускими названиями, но не всех чисел. а порядков, т.е.: "ноль", "один", ..., "девять"; "десять", "одинадцать", ..., "девятнадцать"; "двадцать", "тридцать", "девяносто"; "сто", "двести", ..., "дявятсот". Потом пробуй разбирать число по его порядку. Для начала от 0 до 9, потом 0 до 99 и т.д... Дерзай!
← →
Sergey13 © (2006-05-16 13:01) [13]2[11] roman_ln © (16.05.06 12:58)
Тогда и "алгоритм" из [5] roman_ln © (16.05.06 12:34) с пивком потянет. 8-)
← →
Игорь Шевченко © (2006-05-16 13:08) [14]
> MsGuns умничать может каждый, вот посоветовать что ни будь
> дельное…
http://www.ln.ua/~openxs/articles/smart-questions-ru.html
читать наизусть.
← →
MetalFan © (2006-05-16 13:15) [15]
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Перевод целого неотрицательного числа из строкового представления в прописное
дык выше было, не попавшее туда будет в примере
примечание: код легко расширяется как на знак входных данных так и на диапазон
Зависимости: ничего сверхестественного
Автор: Александр
Copyright: default
Дата: 14 февраля 2004 г.
***************************************************** }
const
Mas1: array["0".."9", 1..3] of string =
(("", "", ""),
("сто ", "", "один "),
("двести ", "двадцать ", "два "),
("триста ", "тридцать ", "три "),
("четыреста ", "сорок ", "четыре "),
("пятьсот ", "пятьдесят ", "пять "),
("шестьсот ", "шестьдесят ", "шесть "),
("семьсот ", "семьдесят ", "семь "),
("восемьсот ", "восемьдесят ", "восемь "),
("девятьсот ", "девяносто ", "девять "));
Mas2: array["0".."9"] of string =
("десять ", "одиннадцать ", "двенадцать ", "тринадцать ",
"четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ",
"восемнадцать ", "девятнадцать ");
Mas3: array["1".."2"] of string = ("одна ", "две ");
Mas4: array["0".."9", 1..4] of string =
(("", "тысяч ", "миллионов ", "миллиардов "),
("", "тысяча ", "миллион ", "миллиард "),
("", "тысячи ", "миллиона ", "миллиарда "),
("", "тысячи ", "миллиона ", "миллиарда "),
("", "тысячи ", "миллиона ", "миллиарда "),
("", "тысяч ", "миллионов ", "миллиардов "),
("", "тысяч ", "миллионов ", "миллиардов "),
("", "тысяч ", "миллионов ", "миллиардов "),
("", "тысяч ", "миллионов ", "миллиардов "),
("", "тысяч ", "миллионов ", "миллиардов "));
function GetRepresentationInWords(S: string): string;
var
i: Byte;
Str: PChar;
begin
Result := "";
if S = "" then
Exit;
for i := 1 to Length(S) do
if S[i] <> "0" then
Break;
if i = Length(S) + 1 then
begin
Result := "Ноль";
Exit
end;
Str := @S[1];
while Length(S) mod 3 <> 0 do
Insert("0", S, 1);
for i := Length(S) div 3 downto 1 do
begin
if (Str[0] = "0") and (Str[1] = "0") and (Str[2] = "0") then
begin
Inc(Str, 3);
Continue;
end;
Result := Result + Mas1[Str[0], 1];
if Str[1] = "1" then
Result := Result + Mas2[Str[2]] + Mas4["0", i]
else
begin
Result := Result + Mas1[Str[1], 2];
if (i = 2) and (Str[2] in ["1".."2"]) then
Result := Result + Mas3[Str[2]]
else
Result := Result + Mas1[Str[2], 3];
Result := Result + Mas4[Str[2], i];
end;
Inc(Str, 3)
end;
SetLength(Result, Length(Result) - 1)
end;
Пример использования:
Memo1.Lines.Text := GetRepresentationInWords(IntToStr(High(Cardinal)));
← →
MetalFan © (2006-05-16 13:18) [16]ах да, взято отсюда:
http://delphiworld.narod.ru/base/int_to_string.html
← →
roman_ln © (2006-05-16 13:20) [17]MetalFan огромное спасибо!!!
Вот это вещь :о)
← →
MetalFan © (2006-05-16 13:26) [18]2 roman_ln
да вообще delphiworld полезная вещь! жаль давно не обновлялась...
← →
ANB © (2006-05-16 13:30) [19]
function IntToSpelling (X : Int64) : String;
var R, RTriad, TriadName : String;
Ed, Dec, Dec_11_19, Hundr, Triad, TriadLevel : Integer;
Y : Int64;
begin
R := "";
Y := Abs(X);
TriadLevel := 0;
while (Y > 0) do begin
Inc(TriadLevel);
if (TriadLevel > MaxIntSpellingTriad) then begin
R := "Слишком большое число";
Exit;
end;
RTriad := "";
// Разберем число на тетрады
Triad := Integer(Y mod 1000);
Y := (Y div 1000);
// Тераду разберем на сотни
// Сотни
Hundr := (Triad mod 1000) div 100;
RTriad := Trim(RTriad) + " " + IntSpellingHundr[Hundr];
// Десятки
Dec := (Triad mod 100) div 10;
Dec_11_19 := Triad mod 100;
// Обработаем 19 - 20
if ((Dec_11_19 >= 10) and (Dec_11_19 <= 19)) then begin
Ed := 0;
RTriad := Trim(RTriad) + " " + IntSpelling_11_19[Dec_11_19 - 10];
end else begin
// Единицы
Ed := Triad mod 10;
RTriad := Trim(RTriad) + " " + IntSpellingDec[Dec];
RTriad := Trim(RTriad) + " " + IntSpellingEd[Ed, IntSpellingTriad[TriadLevel].EdNo];
end;
// Определим имя и индекс тетрады
if (Triad = 0) then begin
TriadName := "";
end else if (Ed = 1) then begin
TriadName := IntSpellingTriad[TriadLevel].Name1;
end else if (Ed in [2, 3]) then begin
TriadName := IntSpellingTriad[TriadLevel].Name2;
end else begin
TriadName := IntSpellingTriad[TriadLevel].Name5;
end;
// Соберем строку
R := Trim(RTriad) + " " + TriadName + " " + Trim(R);
end;
R := Trim(R);
if (Length(R) = 0)
then R := "ноль";
// Приклеим минус, если надо
if (X < 0)
then R := "минус " + R;
// Первая буква должна быть в верхнем регистре
R := InitCap(R);
Result := R;
end;
← →
ANB © (2006-05-16 13:31) [20]
RIntSpellingTriad = record
Name1, Name2, Name5 : String;
EdNo : Integer;
end;
IntSpellingEd : array[0..9, 1..2] of String =
(
("", ""),
("один", "одна"),
("два", "две"),
("три", "три"),
("четыре", "четыре"),
("пять", "пять"),
("шесть", "шесть"),
("семь", "семь"),
("восемь", "восемь"),
("девять", "девять")
);
IntSpelling_11_19 : array[0..9] of String =
(
("десять"),
("одиннадцать"),
("двенадцать"),
("тринадцать"),
("четырнадцать"),
("пятнадцать"),
("шестнадцать"),
("семнадцать"),
("восемнадцать"),
("девятнадцать")
);
IntSpellingDec : array[0..9] of String =
(
(""),
("десять"),
("двадцать"),
("тридцать"),
("сорок"),
("пятьдесят"),
("шестьдесят"),
("семьдесят"),
("восемьдесят"),
("девяносто")
);
IntSpellingHundr : array[0..9] of String =
(
(""),
("сто"),
("двести"),
("триста"),
("четыреста"),
("пятьсот"),
("шестьсот"),
("семьсот"),
("восемьсот"),
("девятьсот")
);
MaxIntSpellingTriad = 5;
IntSpellingTriad : array[1..MaxIntSpellingTriad] of RIntSpellingTriad =
(
(Name1:""; Name2:""; Name5:""; EdNo:1),
(Name1:"тысяча"; Name2:"тысячи"; Name5:"тысяч"; EdNo:2),
(Name1:"миллион"; Name2:"миллиона"; Name5:"миллионов"; EdNo:1),
(Name1:"миллиард"; Name2:"миллиарда"; Name5:"миллиардов"; EdNo:1),
(Name1:"триллион"; Name2:"триллиона"; Name5:"триллионов"; EdNo:1)
);
← →
MsGuns © (2006-05-16 13:45) [21]>roman_ln © (16.05.06 12:48) [9]
>MsGuns умничать может каждый, вот посоветовать что ни будь дельное…
Я и советую дельное. Человеку, у которого отсутствует склонность к оптимизации и усовершенствованию (причем не обязательно в программировании - в любом деле), категорически противопоказано быть программистом.
Ибо все то, что он способен создать, будет ужасно ;)
← →
Sergey13 © (2006-05-16 13:49) [22]2[21] MsGuns © (16.05.06 13:45)
А человек, имеющий сильную "склонность к оптимизации и усовершенствованию" рискует ничего и никогда не сделать до конца. 8-)
ЗЫ: Это я просто шутю (пытаюсь), а не спорю. 8-)
← →
MsGuns © (2006-05-16 13:54) [23]>Sergey13 © (16.05.06 13:49) [22]
>А человек, имеющий сильную "склонность к оптимизации и усовершенствованию" рискует ничего и никогда не сделать до конца. 8-)
Мерило мудрости суть МЕРА
Не мое :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.043 c