Форум: "Потрепаться";
Текущий архив: 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.008 c