Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.52 MB
Время: 0.044 c
2-1147694804
Ray
2006-05-15 16:06
2006.06.04
Сделать обводку текста


2-1148018581
elfebet
2006-05-19 10:03
2006.06.04
Как програмно перевернуть экран?


1-1145877862
Nike
2006-04-24 15:24
2006.06.04
Приведение любого контрола к типу TObject по его Handle


2-1147985089
Firefly
2006-05-19 00:44
2006.06.04
Файл записей


3-1144910659
Kley
2006-04-13 10:44
2006.06.04
форматирование строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский