Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2009, 22:16   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию delphi алгоритм развлетвляющей структуры

Здраствуйте уважаемые форумчанины.... Возникла проблема.... Я написал программу которая при выборе пользователя функции решает ур-ие:
e=i*sqrt(f(x)) i- нечетное, x>0;
e=i/2*sqrt(abs(f(x))), i- четное x<0
e=sqrt(abs(f(x))), иначе
я сделал проверку i через mod, но он показывает ошишбку.... Не могли бы мне помочь ее исправить... вот исходный код...
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    RadioGroup1: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.text:='0';
  Edit2.text:='0';
  Memo1.Clear;

end;
procedure TForm1.Button1Click(Sender: TObject);

 var x,i,fun,ma,temp:extended;
begin
  i:=StrToFloat(Edit1.Text);
  Memo1.Lines.Add(' i='+Edit1.Text);
  x:=StrToFloat(Edit2.Text);
  Memo1.Lines.Add(' x='+Edit2.Text);
  case RadioGroup1.ItemIndex of
    0: fun:=(Exp(x)-Exp(-x))/2;
    1: fun:=sqr(x);
    2: fun:=Exp(x);
  end;
  temp:= i mod 2;
  if (temp=0) and (x>0) then
    ma:=i*sqrt(fun)
  else
    if (temp<>0) and (x<0) then
      ma:=i/2*sqrt(abs(fun))
    else
      ma:=sqrt(abs(i*fun));
  Memo1.Lines.Add(' maxabs='+FloatToStrF(ma,ffFixed,8,3))

end;
end.
заранее благодарен....
world12_tk вне форума Ответить с цитированием
Старый 11.09.2009, 22:22   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Mod работает помоему только с целочисленными выражениями
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 11.09.2009, 22:39   #3
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

а как тогда изменить?
world12_tk вне форума Ответить с цитированием
Старый 11.09.2009, 22:58   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Как вариант:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 x,i,temp : Integer;
 fun,ma:Extended;
begin
  i:=StrToInt(Edit1.Text);
  Memo1.Lines.Add(' i='+Edit1.Text);
  x:=StrToInt(Edit2.Text);
  Memo1.Lines.Add(' x='+Edit2.Text);
  case RadioGroup1.ItemIndex of
    0: fun:=(Exp(x)-Exp(-x))/2;
    1: fun:=sqr(x);
    2: fun:=Exp(x);
  end;
  temp := i mod 2;
  if (temp=0) and (x>0) then
    ma:=i*sqrt(fun)
  else
    if (temp<>0) and (x<0) then
      ma:=i/2*sqrt(abs(fun))
    else
      ma:=sqrt(abs(i*fun));
  Memo1.Lines.Add(' maxabs='+FloatToStrF(ma,ffFixed,8,3))
end;
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 11.09.2009, 23:28   #5
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

а не могли бы мне еще подсказать не по теме..... как сделать защиту от символьного ввода
world12_tk вне форума Ответить с цитированием
Старый 12.09.2009, 00:30   #6
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

В обработчик события OnKeyPress для Edit'ов написать :
Код:
if not (Key in ['0'..'9']) then Key := #0;
з.ы. также можно try ... except использовать.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 12.09.2009, 18:49   #7
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

Цитата:
if not (Key in ['0'..'9']) then Key := #0;
не получается... он выдает ошибку....
я попробовал пойти таким путем, но видать тоже где то ошибся... не поможете исправить?
Код:
procedure TForm1.Button1Click(Sender: TObject);
const Mn: set of char=['0'..'9'];
var
 x,i,temp : Integer;
 fun,ma:Extended;
begin
  i:=StrToInt(Edit1.Text);
  if (i<>Mn) then halt;
  Memo1.Lines.Add(' i='+Edit1.Text);
  x:=StrToInt(Edit2.Text);
  Memo1.Lines.Add(' x='+Edit2.Text);
  case RadioGroup1.ItemIndex of
    0: fun:=(Exp(x)-Exp(-x))/2;
    1: fun:=sqr(x);
    2: fun:=Exp(x);
  end;
  temp := i mod 2;
  if (temp=0) and (x>0) then
    ma:=i*sqrt(fun)
  else
    if (temp<>0) and (x<0) then
      ma:=i/2*sqrt(abs(fun))
    else
      ma:=sqrt(abs(i*fun));
  Memo1.Lines.Add(' maxabs='+FloatToStrF(ma,ffFixed,8,3))
end;
world12_tk вне форума Ответить с цитированием
Старый 12.09.2009, 19:13   #8
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

В новых делфи у едитов есть свойство numonly(или как-то так)
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 12.09.2009, 19:28   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
не получается... он выдает ошибку....
Вот пример процедуры. Попробуйте ввести не цифру.
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(key in ['0'..'9'])then key:=#0;
end;
А вот так разрешает только правильный ввод числа, в том числе вещественного и отрицательного.
Код:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
  #8,'0'..'9' :  ; // цифры и <Back Space>
       '.',',': // разделитель целой и дробной частей числа
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator; // заменим разделитель на допустимый
                  if Pos(DecimalSeparator,StringGrid1.Cells[StringGrid1.Col,0]) <> 0
                  then Key := Chr(0); // запрет ввода второго разделителя
                end;
           '-':    // минус можно ввести только первым символом,
                // т.е. когда ячейка пустая
                if Length(StringGrid1.Cells[StringGrid1.Col,0]) <> 0
                      then Key := Chr(0);

        else   // остальные символы запрещены
               key := Chr(0);
    end;
end;

Последний раз редактировалось puporev; 12.09.2009 в 19:41.
puporev вне форума Ответить с цитированием
Старый 12.09.2009, 22:03   #10
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Цитата:
if not (Key in ['0'..'9']) then Key := #0;
не получается... он выдает ошибку....
Сори, то я перепутал. Вобщем вот это
Код:
if not (Key in ['0'..'9']) then Key := #0;
надо писать в событие для Edit'а OnKeyPress. И все будет работать.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Осуществить алгоритм в Delphi MalCer Помощь студентам 2 11.04.2009 18:51
Алгоритм подсчёта чистой прибыли (Delphi) dmitriyzahar73 Фриланс 3 02.04.2009 16:56
Delphi. Массивы,алгоритм симметрии строки Fonarik Помощь студентам 6 28.10.2008 19:59
Алгоритм перебора (Delphi) Air Помощь студентам 11 20.07.2008 20:28
Проблема структуры else в Delphi jora-objora Помощь студентам 3 03.02.2008 18:10