|
#1
|
|||
|
|||
Метод Ньютона
Здравствуйте!
Я сейчас делаю программу "Метод Ньютона". Цель: разработать программу, которая решает линейные алгебраические уравнения методом Ньютона. Вид уравнений, которые будет решать программа, такой: Ax(3)+Bx(2)+Cx+D=0, где: x - неизвестное; A,B,C,D - заданные числа. Сейчас делаю защиту "от дурака". Надо сделать так, чтобы в поле "TEdit", можно было вводить только цифры, знаки "-", "." или ",". Так вот, я сделал только то, что можно ввести: 1) цифры. 2) "-", но только чтобы выводился на первом месте и чтобы нельзя было ввести повторно это символ. 3) "." или ",", чтобы если пользователь введет "." или ",", то автоматически вместо это символа появлялся тот, который по умолчанию стоит в Windows для ввода действительных чисел, также чтобы нельзя было ввести "," на первом месте. А вот чтобы "," или "." можно было ввести только 1 раз никак не получается. Помогите, пожалуйста, кто знает, как это сделать. Вот код защиты, которую я сделал: Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin Case Key of '.',',': // разделитель целой и дробной частей числа begin If Key<>DecimalSeparator then begin Key:=DecimalSeparator; // заменим разделитель на допустимый end; If (Length (Edit1.Text)=0) and (Key=DecimalSeparator) then begin Key:=Chr (0); end; end; '-': // минус можно ввести только первым символом, т.е. когда ячейка пустая If Length (Edit1.Text)<>0 then begin // остальные символы запрещены Key:=Chr (0); end; #48..#57:; #13:Edit2.SetFocus; #8:; else Key:=Chr(0); end; end; |
#2
|
||||
|
||||
Код:
Case Key of '.',',': begin If Key<>DecimalSeparator then Key:=DecimalSeparator; If (Length (Edit1.Text)=0)or(Edit1.Text=Edit1.SelText) then Key:=Chr (0); If pos(DecimalSeparator,Edit1.SelText)<>0 then exit; If pos(DecimalSeparator,Edit1.Text)<>0 then Key:=Chr(0); end; ... |
#3
|
|||
|
|||
еще сделай проверку чтобы нельзя было вводить
3.078.888 (т.е. 2 запятые или точки в одном числе) так чтобы не более одного знака подряд. ++- (нельзя) короче гемор но все же. если это прям так надо, но для начало сделай сам алгоритм, а после всякую защиту. |
#4
|
|||
|
|||
Re: Метод Ньютона
Ребят, спасибо всем, кто пытался помочь мне.
Защиту от дурака я уже сделал. У меня для Вас есть еще 1 вопрос: Как сделать, так, чтобы выводилось действительное число с определенным количеством символов, т.е. "X=0,983928383", нужно вывести "X" в таком виде "X=0,98". В "Borland Pascal 7.0" это делается вот так: Код:
WriteLn (X.2.0); |
#5
|
|||
|
|||
Насчет вывода действительного числа с определенным количеством знаков я уже решил:
Label13.Caption:='x [ '+FloatToStr (RoundTo (x1,-3))+' , '+FloatToStr (RoundTo (x2,-3))+' ]'; {Вывод промежутка, в котором лежит ответ} А вот возникла такая проблема: при выводе результата выводится сообщение: NAN. Что это такое может быть? |
#6
|
|||
|
|||
Спасибо всем, кто мне помогал.
Программу я сделал все-таки. |