Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];

Вниз

Перевод одной цифры в буквы !   Найти похожие ветки 

 
IronHawk   (2002-03-19 11:14) [0]

как последовательно через case решить задачу, и не получать
при этом глюка ?
Например есть два Едита: Едит1 и Едит2.
так же есть бутон : Бутон1.
Надо:
по клику на бутон считывалась одна единственая (возможная, больше непоставиш в первый едит) цифра и словами выскакивала во втором !
Пример:

var D: integer;
NumStr : string;
begin
case D of
1: NumStr:="one ";
2: NumStr:="two";
3: NumStr:=" three";
4: NumStr:="four
5: NumStr:="five";
6: NumStr:="six";
7: NumStr:="seven";
8: NumStr:="eight";
9: NumStr:="nine";
end;
end;

Так ?


 
Андрей Сенченко   (2002-03-19 11:41) [1]

Наверное так красивее :
Первый компонент должен быть TMaskEdit, второй - простой TEdit

Case MaskEdit1.Text of
1 : Edit1.Text := "One"
...
End;



 
yaJohn   (2002-03-19 11:53) [2]

Edit2.Text:="хочу цифру!";
if Edit1.Text<>"" then
case Edit1.Text[1] of
"1": Edit2.Text:="айн";
"2": Edit2.Text:="цвай";
"3": Edit2.Text:="айн цвай драй";
end;


2 Андрей Сенченко
Может я не праb, но case string не разумеет. а вот char - сколько угодно.


 
Виктор Щербаков   (2002-03-19 12:00) [3]

Это не string а char


 
Johnmen   (2002-03-19 12:02) [4]

case <...> of

Так вот, <...> только перечислимого типа !

И я бы сделал массив, где хранятся "One" и т.д. и обращался к нему по индексу. И никаких case...


 
Андрей Сенченко   (2002-03-19 12:06) [5]

Пример, написанный мной действительно в явном виде работать не будет. MaskEdit1.Text действительно нужно приводить к требуемому компилятором Ordinal Type. Это вызывает сложности ?


 
IronHawk   (2002-03-19 12:13) [6]


> Андрей Сенченко ©
> Это вызывает сложности ?

А без сложностей ?


 
Андрей Сенченко   (2002-03-19 12:25) [7]

>> IronHawk © (19.03.02 12:13)
>> А без сложностей ?

Текст из Edit-а в любом случае имеет тип String, то есть для использования оператора Case все равно потребуется приведение например к типу Char через String[1]. Без использования MaskEdit ко всему прочему придется сверяться - а что там пользователь навводил.
В данной конкретной задаче действительно проще всего сделать таблицу преобразования и не париться.


 
IronHawk   (2002-03-19 12:42) [8]


> Андрей Сенченко ©

А ежели я это в функцию залеплю ?
И буду оттуда вызивать то тогда как ?



 
Андрей Сенченко   (2002-03-19 13:38) [9]

>> IronHawk © (19.03.02 12:42)
>> А ежели я это в функцию залеплю ?

Не совсем понятно что ЭТО ? Код обработки содержимого Edit1.Text ?
Собственно какая разница то ? Вместо того чтобы сразу писать Edit2.Text := "чего то там" нужно будет написать Result := "чего то там", а затем уже Edit2.Text := MyConvertFunction(Edit1.Text).
Обработчик то для Edit1.Text все равно писать придется, а уж где его организовывать - в процедуре, в функции или еще где - это собственно дело сугубо Твое личное как разработчика.


 
IronHawk   (2002-03-19 13:54) [10]


> Андрей Сенченко © (19.03.02 13:38)

А ежели так ?
function letter(Number:real):string;
var D: integer;
NumStr : string;
begin
case D of
1: NumStr:="one ";
2: NumStr:="two";
3: NumStr:=" three";
4: NumStr:="four
5: NumStr:="five";
6: NumStr:="six";
7: NumStr:="seven";
8: NumStr:="eight";
9: NumStr:="nine";
end;
letter:=StrToCurr(NumStr);
end;

а потом буду делать так:

procedure TForm.Button1Click(Sender: TObject);
begin
Edit2.text:=letter(Edit1.text);
end;


Так можно ?
Дабы не писать кейсы (или масив) неписать в каждом нужном обработчике событий, а совать просто letter !


 
fnatali   (2002-03-19 13:59) [11]

letter(Number:real)
letter(Edit1.text) ????
Или такие мелочи тебя не смущают? :)


 
Song   (2002-03-19 14:06) [12]

А может лучше так:
Const Letter=array [1..9] of ShortString=
("One",....,"Nine");

И обращаться ShowMessage(Letter[5]). Получим "five". По-моему так удобней.


 
IronHawk   (2002-03-19 14:07) [13]


> fnatali © (19.03.02 13:59)

> end;
> letter:=StrToCurr(NumStr);
> end;

а Вас такие ?


 
Val   (2002-03-19 14:16) [14]

>IronHawk © (19.03.02 14:07)
Ты ошибками хвалишься?


 
IronHawk   (2002-03-19 14:18) [15]


> Val © (19.03.02 14:16)
> Ты ошибками хвалишься?

У кого ошибки ! А у кого работает !
И замечания плиз в свою ветку, сюда или совет или поделу !


 
Внук   (2002-03-19 14:25) [16]

>>IronHawk
Не надо говорить ерунду. Код, здесь приведенный - IronHawk © (19.03.02 13:54) - не будет не только работать, а даже и компилироваться. Не говоря уже о том, что параметр функции Letter не используется, а вместо него используется неинициализированная локальная переменная.


 
Андрей Сенченко   (2002-03-19 14:44) [17]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1016201378&n=0


 
IronHawk   (2002-03-19 14:49) [18]


> Андрей Сенченко © (19.03.02 14:44)

Это Вы к чему ???


 
Val   (2002-03-19 14:56) [19]

к работе с переменными и параметрами, вероятно


 
IronHawk   (2002-03-19 15:01) [20]

Дык какреализовать это через функцию, попроще, и по удобнее ???


 
Song   (2002-03-19 15:09) [21]

Ok, через ф-ию :)) Чем бы дитя не тешилась :))

Function GetWord(n:Integer):ShortString;
Const Letter=array [1..9] of ShortString=
("One",....,"Nine");
Begin
Result:=Letter[n];
End;


 
Андрей Сенченко   (2002-03-19 15:23) [22]

>> IronHawk © (19.03.02 14:49)
>> Это Вы к чему ???

К тому, что Ты опять раздуваешь бесполезный флейм. Уже предложено несколько вполне рабочих вариантов, например:

procedure TForm1.FormCreate(Sender: TObject);
begin
MaskEdit1.EditMask := "!9;1;_"
end;

function DigitToDefString(ch : char) : string;
begin
Result := "Zero";
Case ch of
"0" : Result := "Null";
"1" : Result := "One";
"2" : Result := "Two";
"3" : Result := "Three";
"4" : Result := "Four";
"5" : Result := "Five";
"6" : Result := "Six";
"7" : Result := "Seven";
"8" : Result := "Eight";
"9" : Result := "Nine"
End
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := DigitToDefString(MaskEdit1.Text[1])
end;

но Ты упорно продолжаешь выдвигать свои варианты, плодя при этом одну ошибку за другой. Зачем ? Из любви к трёпу ?


 
Johnmen   (2002-03-19 15:38) [23]

Пора, брат, пора, туда, где "ПОТРЕПАТЬСЯ"...


 
ProgMan   (2002-03-19 15:40) [24]

А существует ли на самом деле IronHawk?
Может, кто-то из Авторов или Мастеров шутит?
Или из простых смертных?
Читаешь некторые реплики и думаешь: "Так не бывает!"

>> IronHawk ©
Если ты настоящий, не обижайся! ;-)


 
IronHawk   (2002-03-19 15:48) [25]


> Song ©

Спасибки, но только ж не > "тешилась" !!!


> Андрей Сенченко © (19.03.02 15:23)

ОООО, СПАСИБО !
Ваш вариант наиболее приемлемый !

Ну раз эта ветка в "Потрепаться" попала то:

Андрей Сенченко © (19.03.02 15:23)


> Уже предложено несколько вполне рабочих вариантов

Я и неспорил ! Просто уточнял !

> но Ты упорно продолжаешь выдвигать свои варианты, плодя
> при этом одну ошибку за другой. Зачем ?

Потому что я хочу учиться на СВОИХ ошибках !

> Из любви к трёпу ?

Нет, из любви к неординарному способу учёбы !

ВСЕМ СПАСИБО ! И ВСЕГО НАИЛУЧШЕГО !


 
Digitman   (2002-03-19 15:50) [26]

>IronHawk

Н-да ... чувствуется, надолго ты здесь "прописался", в "Потрепаться"-то )..

Уж и код тебе "тупой" дали, и "разжевали" люди добрые, что в нем да к чему - все-то тебе мало да непонятно .... Думать-то собственной головой да выводы делать когда-нибудь будешь учиться ?



 
IronHawk   (2002-03-19 15:50) [27]


> ProgMan © (19.03.02 15:40)


> >> IronHawk ©
> Если ты настоящий, не обижайся! ;-)

Настоящий, только - "Экспонат руками не тогать" :-))
Я Не обижаюсь .... ;-))) !


 
IronHawk   (2002-03-19 15:55) [28]


> Digitman © (19.03.02 15:50)
> .... Думать-то собственной головой да выводы делать когда-нибудь будешь учиться ?

Ага !
Вот только прогу эту закончу так и начну ! ;-))) !


 
Donal_Graeme   (2002-03-19 15:59) [29]

ну, если уж учиться, то :-))

мне вот вариант Song оптимальнее кажется... :-)


 
IronHawk   (2002-03-19 15:59) [30]

Всем спасибо !

Ветка закрыта, по причине исчерпания вопроса !




 
Андрей Сенченко   (2002-03-19 16:05) [31]

>> Donal_Graeme (19.03.02 15:59)
>> мне вот вариант Song оптимальнее кажется... :-)

Мне тоже. Я же сказал, что предложено несколько реальных рабочих вариантов. Но проще моего ( в смысле ANY KEY ) IMHO уже некуда. Что собственно и требовалось в данном случае :)


 
Donal_Graeme   (2002-03-19 16:17) [32]

2 Андрей Сенченко :
понятно :-)


 
panov   (2002-03-19 17:15) [33]

>IronHawk © (19.03.02 15:59)
Наконец-то!

Очень интересно наблюдать за такой оживленной дискуссией!
И как это ты умудряешься привлекать к своим вопросам столько народа?-)
Явно - ты очень неординарная и способная личность....


 
IronHawk   (2002-03-19 17:30) [34]


> panov © (19.03.02 17:15)

Спасибо, я знаю !
:-))) !


 
drpass   (2002-03-19 17:46) [35]

А если как-нибудь так (* (с)Масяня *)
const txt:array[0..9] of string=("zero","one","two",.."nine");

function GetRes(s:string):string;
var
c:char;
begin
c:=s[1];
Result:=txt[byte(c)-byte("0")];
end;
Может, так проще будет? Правда, без case


 
IronHawk   (2002-03-19 18:13) [36]


> drpass ©

Спасибо !
:-)))


 
Anatoly Podgoretsky   (2002-03-19 22:20) [37]

Помнится я в Инете встречал сайт, где на вопросы отвечал робот, весьма похоже.

Кстати все приведенные примеры грешат ошибками, не учитывают достоверность входных данных, но как идеи вполне правильные.
Все варианты с case должны иметь альтернативный вариант else, все варианты с индексом должны учитывать еще и пустые строки или неверные индексы если числа.
Не я понимаю, это с учетом на уровень знания, а то придется объяснять еще и это и ошибки в контр примерах.


 
Андрей Сенченко   (2002-03-20 08:47) [38]

>> Anatoly Podgoretsky © (19.03.02 22:20)

Анатолий ! Что с Вами ? Ну просто будто подменили ... :)

Вот еще раз приведенный мной код. В ремарках с подчерком - Ваши аргументы.

procedure TForm1.FormCreate(Sender: TObject);
begin
// не учитывают достоверность входных данных
MaskEdit1.EditMask := "!9;1;_" // А это что ? Попробуйте ввести сюда
// что либо кроме цифры.
end;

function DigitToDefString(ch : char) : string;
begin
// Все варианты с case должны иметь альтернативный вариант else
Result := "Zero"; // Вот он пожалуйста - на случай, если ничего не введено.
// Анализируйте на выходе из функции на здоровье.
Case ch of
"0" : Result := "Null";
"1" : Result := "One";
"2" : Result := "Two";
"3" : Result := "Three";
"4" : Result := "Four";
"5" : Result := "Five";
"6" : Result := "Six";
"7" : Result := "Seven";
"8" : Result := "Eight";
"9" : Result := "Nine"
End
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := DigitToDefString(MaskEdit1.Text[1])
end;


Тут уж извините, готов пободаться, тем более, что совсем непонятна Ваша фраза:
>> Не я понимаю, это с учетом на уровень знания, ...
Я собственно не собираюсь утверждать, что я весь из себя супермонстр программирования, но считаю приведенный мной пример полностью правильным.
Варианты же, приведенные Song © и drpass © вообще можно признать классическим решением поставленной задачи. Проверка корректности введенной информации здесь IMHO к самой функции отношения не имеет и должна производиться ДО ее применения.
Так мы чего доброго докатимся до того, что обзовем Борландовских программистов ламерами за то, что например IntToStr() не срабатывает со строковым параметром.


 
Андрей Сенченко   (2002-03-20 15:13) [39]

>> Anatoly Podgoretsky ©

Анатолий ! Не будет с моей стороны излишне дерзким попросить Вас ответить на мое сообщение ?


 
Anatoly Podgoretsky   (2002-03-20 23:34) [40]

Андрей Сенченко © (20.03.02 08:47)
>> Не я понимаю, это с учетом на уровень знания, ...

Так не про твои же :-)
Вот попробуй дать полный ответ и посмотри затем изурудованный ответный код :-) Как это и происходило.
Неужели я так неясно написал?



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.015 c
14-64787
VAleksey
2002-04-10 09:39
2002.05.20
АУ


3-64495
First_May
2002-04-22 18:12
2002.05.20
Как работать с компонентом DBProgress?


1-64680
MCFire
2002-05-05 15:39
2002.05.20
Как увеличить промежуток между строками в QRLabel???


1-64659
Alexey-neo
2002-05-08 22:34
2002.05.20
Как сделать вращение чего-либо?


3-64454
volodya_
2002-04-24 17:55
2002.05.20
Кодировка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский