Вопрос № 126140: Здравствуйте, эксперты. Я хочу написать программу для перевода комплексных чисел из алгебраической формы в экспоненциальную. На форме 4 TEdit, а события происходят по отпусканию клавиш. Хочется сделать программу без кнопок, чтобы переводила из одной ...Вопрос № 126172: Здравствуйте, вопрос конечно может и простой, но все же подскажите:
Мне нужно задать чтобы при нажатии на кпопку, чтобы открывалась определеная програма.
2. И еще это по сложнее ) При нажатии на кнопку чтобы генеривовались случайным обра...
Вопрос № 126.140
Здравствуйте, эксперты. Я хочу написать программу для перевода комплексных чисел из алгебраической формы в экспоненциальную. На форме 4 TEdit, а события происходят по отпусканию клавиш. Хочется сделать программу без кнопок, чтобы переводила из одной в другую формы одновременно (ввел первое число, получил в двух других TEdit результат, подправил этот результат, значения изменились в первых окошках). Написал функцию для контроля ввода вещественных чисел, но все равно вылетаю ошибки. Может кто-нибудь подправить
программу и указать мне на ошибки?
Отвечает: Delph
Здравствуйте, Марков Александр Сергеевич!
У меня две идеи для Вас. Первое: подключить Ваши Edit'ы на событие OnExit - оно происходит, когда компонент теряет фокус. Создайте один обработчик этого события для перевода из алгебраической формы в экспоненциальную, а второй - для обратного перевода. На каждый из обработчиков подключите соответствующие Edit'ы. Для этого выделите сначала первую пару Edit'ов (чтобы выделить сразу несколько компонентов, зажмите клавишу Shift, а мышкой щёлкните по нужным компонентам), после чего
в инспекторе объектов на вкладке Events сделайте двойной щелчок по событию OnExit. В редакторе кода сможете запрограммировать первый обработчик. Повторите те же действия для второй пары Edit'ов.
Второе: в Delphi определена конструкция: try
{набор операторов для нормального выполнения программы} except
{набор операторов для обработки исключения, т.е. ошибки времени выполнения} end;
В приложении я привел пример того, как может выглядеть функция для проверки корректности ввода; как видите, она значительно проще и короче той, что у Вас, поскольку используется стандартная функция преобразования String ==> Float. Если же стандартная функция выбрасывает исключение, то оно тут же и перехватывается, а программа узнаёт о некорректном вводе.
Приложение:
--------- Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: Студент)
Ответ отправлен: 06.03.2008, 09:00 Оценка за ответ: 3 Комментарий оценки: Не работаю блоки, как ни крути!
Отвечает: Sosedov A.I.
Здравствуйте, Марков Александр Сергеевич!
Я заменил в Вашей программе Вашу процедуру проверки ввода числа на функцию TryStrToFloat библиотеки SysUtils. Расчетную процедуру поместил в обработчики событий OnChange полей ввода Edit1 и Edit2. Кнопка Button1, конечно, не нужна, просто мы сами вызываем обработчик ее нажатия. Вот что получилось (см. приложение).
Приложение:
Ответ отправил: Sosedov A.I. (статус: 3-ий класс)
Ответ отправлен: 06.03.2008, 09:20 Оценка за ответ: 5 Комментарий оценки: Получилось отлично!:))
Вопрос № 126.172
Здравствуйте, вопрос конечно может и простой, но все же подскажите:
Мне нужно задать чтобы при нажатии на кпопку, чтобы открывалась определеная програма.
2. И еще это по сложнее ) При нажатии на кнопку чтобы генеривовались случайным образом 0,1. Все это чтобы записывалось желательно в встроку. т.е мне нужно получить например 010010010111 вот такую строку, сравнить с заданой, и чтобы далше выполнялось действие. но еще 1 момент задать количество чисел случайно сгенерированых (0 и 1) я должен сам, захотел 6 или 10.
Всем кто поможет буду благодарен.
Заранее спасибо.
Отправлен: 06.03.2008, 00:32
Вопрос задал: Makavely (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: MaratM !!! Здравствуйте, Makavely! 1)есть комманды ShellExecute или WinExec с их помощью можно запускать программы либо открывать файлы типа txt bmp связанными порграммами. if ShellExecute(h, 'open', 'readme.txt', nil, nil, SW_SHOW) < 32 then begin ShowMessage('Error ShellExecute !') end; или if WinExec('Notepad c:config.sys', SW_SHOW) < 32 then begin ShowMessage('Error WinExec !') end; 2)
var I: Integer; s: string; begin
s:=''; for I := 1 to 6 do begin s:=s+inttostr(random(2)); end; end;
цикл до 6 это количество цифр, s это выходная строка еще можно добавить в начале randomize; чтобы всегда были разные результаты
Ответ отправил: MaratM (статус: 1-ый класс)
Ответ отправлен: 06.03.2008, 02:01 Оценка за ответ: 5 Комментарий оценки: спасибо за помощь..
Отвечает: SHERRY
Здравствуйте, Makavely!
Функция сгенерирует Вам желаемую последовательность длиной, указанной в качестве входящего параметра.
Приложение:
--------- Самурай без меча подобен самураю с мечём, только без меча..
Ответ отправил: SHERRY (статус: 7-ой класс)
Ответ отправлен: 06.03.2008, 08:41
Отвечает: Genia007
Здравствуйте, Makavely!
1),
Запустить программу можно функцией:
ShellExecute(Handle, 'open', 'имя программы с полным путём', nil, nil, SW_ShowNormal);
2).
Вот накидал за пять минут этот код, работает как Вам нужно:
procedure TForm1.Button13Click(Sender: TObject);
var i, n, y: word; s, s1: String;
begin
s1:='010010'; {Ваша заданная строка}
s:='';
{Randomize; Лучше поставить в Form.Create, инициализация генератора чисел}
n:= StrToInt(Edit2.Text); {Присвоили количество цифр в строке, не забыть в Edite выставить изначально любое число}
For i:= 1 to n do {Цикл по получению строки}
begin
y:= random(2); {Случайное число в диаапазоне 0,1}
insert(IntToStr(y), s, Length(s)); {Вставили число в конец строки}
end;
If s = s1 then {Сравниваем строку с заданной и если совпала то звуковой сигнал}
beep;
Edit2.Text:= s; {Вывели получившуюся строку}
end;
Ответ отправил: Genia007 (статус: 7-ой класс)
Ответ отправлен: 06.03.2008, 12:33 Оценка за ответ: 5 Комментарий оценки: Большое спасибо, за быструю помощь!