Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.20;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.012 c
7-64847
boykov
2002-02-22 18:34
2002.05.20
Как изменить прошивку HDD?


14-64837
Sky 55
2002-04-11 17:38
2002.05.20
HELP!!! нужно написать несколько прог на дельфи отстающей студент


1-64714
Maxman
2002-05-06 12:32
2002.05.20
Работа со строками


14-64801
voland_s
2002-04-10 15:59
2002.05.20
Помогите c Апи


3-64520
ATLANTIDO
2002-04-20 22:00
2002.05.20
БАЗЫ ДЛЯ ЧАЙНИКОВ