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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2013, 11:42   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:='random(1,99)';
  Edit2.Text:='random(1,99)';
  Edit3.Text:='random(1,99)';
  Memo1.Clear;
  memo1.Lines.add......
end;

Var x,y,z,f,p : extended;
begin
Код:
x:=StrToFloat(Edit1.Text);
В этом месте пишет ошибку. Кроме этого полно других ошибок, но я их пока не вижу.
ну и правильно делает.
ошибка раз.

вы нарушили структуру программы.
поясняю.
вот у Вас есть процедура procedure TForm1.FormCreate
тело процедуры начинается ключевым словом begin, завершается end (я выделил их фиолетовым в вашем коде.. а потом ВДРУГ появляется код
Var x,y,z,f,p : extended;
begin
. Это к какой процедуре относится?!
(подозреваю, что Вы хотели "кинуть" кнопку Button на форму, потом щёлкнуть по ней и там уже писать тот код, который сработает по нажатию на данную кнопку...)

ошибка два.
Вы в Edit 1 записываете текст random(1,99)
Ок. записали. А что потом пытаетесь сделать? Вы пытаетесь преобразовать этот текст, считая, что в данном поле есть текстовая запись вещественного числа
функция StrToFloat не найдёт в этом поле числа. Вы получите ошибку, что запись не является корректной записью числа! (и это так и есть!) Процедуры преобразования текста в число не умеют выполнять написанный в них КОД(тем более непонятно какой код)!!
(да и вообще, я бы категорически не рекомедовал Вам пока, на начальном этапе пытаться заставить Delphi выполнять код, написанный в Edit/Memo - это сложно и не нужно Вам!
я бы рекомендовал Вам код на FormCreate заменить, например, на такой код:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  Edit1.Text:= random(99)+1;
  Edit2.Text:= random(99)+1;
  Edit3.Text:= random(99)+1;
  Memo1.Lines.Clear;
.....

Главное, не вешать нос и не опускать руки, не ошибается только тот, кто ничего не делает. Будете пытаться - всё у Вас получится!
Успехов в обучении!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.09.2013, 12:37   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

Цитата:
я бы рекомендовал Вам код на FormCreate заменить, например, на такой код:
Edit1.Text:= random(99)+1;
наверное все-таки
Код:
Edit1.Text:=FloattoStr( random(99)+1 );
или еще лучше
Код:
x:=random(99)+1; 
Edit1.Text:=FloattoStr( x );
чтобы потом не надо было делать
x:=strtofloat(Edit1.Text);

В программе первично переменная (x) а ее отображение вторично
Edit1.Text:=FloattoStr( x );

Кроме тех случаев когда данных вводит человек.
x:=StrToFloat(Edit1.Text);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.09.2013, 14:07   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

evg_m, Вы абсолютно правы.
что на меня морок напал, раз я забыл про преобразование числа в строку при назначении .Text

ну и насчёт второго замечания тоже полностью согласен.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.09.2013, 18:24   #14
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

Составил блоксхему, чтобы было легче, переписал код, все равно не хочет компилить, рандом убрал ,ибо это скорее моя прихоть чем условие, без него легче.

Код:
interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    RadioGroup1: TRadioGroup;
    Label4: TLabel;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Memo1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:='1';
  Edit2.Text:='2';
  Edit3.Text:='3';
  RadioGroup1.ItemIndex:=1;
  Memo1.Clear;
  memo1.Lines.add('ìîè ðåçóëüòàòû');

  end;

procedure TForm1.Memo1Click(Sender: TObject);
var x,y,z,mi,ma,f,p:extended;
begin
StrToFloat(Edit1.Text);
StrToFloat(Edit2.Text);
StrToFloat(Edit3.Text);
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,8,4)):
Memol.Lines.Add('y='+FloatToStrF(y,ffFixed,8,4)):
Memol.Lines.Add('z='+FloatToStrF(z,ffFixed,8,4)):

case Radiogroup1.ItemIndex of
0: f:=sh(x);
1: f:=sqr(x);
2: f:=exp(x);
end;
if f>y then mi:=y else mi:=f;
if y>z then ma:=y else mi:=z;


p:=abs(mi-ma)/2
Memo1.Lines.Add('p='+FloatToStrF(c,fffixed,8,4));
end;

end.

Последний раз редактировалось Serge_Bliznykov; 19.09.2013 в 23:27.
mta0 вне форума Ответить с цитированием
Старый 19.09.2013, 23:37   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1-е.
явно опечатка!
Цитата:
Код:
Memo1.Lines.Add('p='+FloatToStrF(c,fffixed,8,4));
Вы же, вроде бы, значение переменной P хотите вывести?

2-е.
запомните на будущее,
прежде чем обратиться к любой переменной, надо предварительно в неё что-то записать (обычно это называют "иницилизировать").
Загадка. Буратино получил два яблока в подарок. Вопрос, сколько теперь у него яблок? Ответ - невозможно определить, т.к. мы не знаем, сколько у него было яблок до того, как ему вручили презент!
это я всё веду к тому, что если "вдруг" в Radiogroup1 будет больше трёх пунктов (а из кода можно только предположить, что там три варианта выбора) и выберут любой свыше третьего, значение переменной f становится НЕОПРЕДЕЛЁННОЙ.
для исключения этой возможной проблемы достаточно присвоить f любое значение в начале процедуры (в любом месте до case ... )

3-е.
Цитата:
Код:
if f>y then mi:=y else mi:=f;
if y>z then ma:=y else mi:=z;
честно пытался понять смысл этих двух строчек кода, но, каюсь, так и не смог этого сделать.
Что Вы пытаетесь вычислить таким образом?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2013, 12:28   #16
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,544
По умолчанию

Цитата:
прежде чем обратиться к любой переменной, надо предварительно в неё что-то записать (обычно это называют "иницилизировать").
Цитата:
Кроме тех случаев когда данных вводит человек.
x:=StrToFloat(Edit1.Text);
Код:
var x,y,z,mi,ma,f,p:extended;
begin
???:=StrToFloat(Edit1.Text);
???StrToFloat(Edit2.Text);
???StrToFloat(Edit3.Text);
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,8,4)):
Memol.Lines.Add('y='+FloatToStrF(y,ffFixed,8,4)):
Memol.Lines.Add('z='+FloatToStrF(z,ffFixed,8,4)):
Цитата:
честно пытался понять смысл этих двух строчек кода, но, каюсь, так и не смог этого сделать.
mi[nimum]
ma[ximum]
и в этом случае возникает вопрос (к ТС), а если человек введет
edit1.text:='3';(x)
edit2.text:='2';(y)
edit3.text:='1';(z)

abs(mi-ma) === ma-mi (c учетом телепатических догадок выше!) но без учета кода!
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.09.2013 в 13:24.
evg_m вне форума Ответить с цитированием
Старый 24.09.2013, 14:23   #17
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

Код:
unit Unit2;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    RadioGroup1: TRadioGroup;
    Label4: TLabel;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Memo1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:=' ';
  Edit2.Text:=' ';
  Edit3.Text:=' ';
  RadioGroup1.ItemIndex:=0;
  Memo1.Clear;
  memo1.Lines.add('ìîè ðåçóëüòàòû');
end;

procedure TForm1.Memo1Click(Sender: TObject);
var x,y,z,mi,ma,f,p:extended;
begin
StrToFloat(Edit1.Text);
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,8,4));
StrToFloat(Edit2.Text);
Memo1.Lines.Add('y='+FloatToStrF(y,ffFixed,8,4));
StrToFloat(Edit3.Text);
Memo1.Lines.Add('z='+FloatToStrF(z,ffFixed,8,4));

case Radiogroup1.ItemIndex of
0: f:=exp(x)-exp(-x)/2;
1: f:=sqr(x);
2: f:=exp(x);
end;
if f>y then mi:=y else mi:=f;
if y>z then ma:=y else mi:=z;
p:=abs(mi-ma)/2;
Memo1.Lines.Add('p='+FloatToStrF(p,fffixed,8,4));
end;

end.
Подправил .Осталась только одна проблема. Не считывает значение переменных , тоесть в мемо пишет x=0 y=0 z=0 p=0 ? , как это решить?

Последний раз редактировалось mta0; 24.09.2013 в 14:29.
mta0 вне форума Ответить с цитированием
Старый 24.09.2013, 14:30   #18
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

mta0 вне форума Ответить с цитированием
Старый 24.09.2013, 14:38   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вместо:
Цитата:
Код:
StrToFloat(Edit1.Text);
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,8,4));
StrToFloat(Edit2.Text);
Memo1.Lines.Add('y='+FloatToStrF(y,ffFixed,8,4));
StrToFloat(Edit3.Text);
Memo1.Lines.Add('z='+FloatToStrF(z,ffFixed,8,4));
должно быть:
Код:
x := StrToFloat(Edit1.Text);
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,8,4));
y := StrToFloat(Edit2.Text);
Memo1.Lines.Add('y='+FloatToStrF(y,ffFixed,8,4));
z := StrToFloat(Edit3.Text);
Memo1.Lines.Add('z='+FloatToStrF(z,ffFixed,8,4));
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2013, 15:35   #20
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вместо:

должно быть:
Код:
x := StrToFloat(Edit1.Text);
Memo1.Lines.Add('x='+FloatToStrF(x,ffFixed,8,4));
y := StrToFloat(Edit2.Text);
Memo1.Lines.Add('y='+FloatToStrF(y,ffFixed,8,4));
z := StrToFloat(Edit3.Text);
Memo1.Lines.Add('z='+FloatToStrF(z,ffFixed,8,4));
Благодаою вас
mta0 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi7 Многомодульная программа viktor178 Помощь студентам 9 17.06.2013 20:03
программа в Delphi7!!! Mark188 Помощь студентам 2 31.03.2013 12:34
НУЖНА ПРОГРАММА НА DELPHI7 DIAMONDS Фриланс 10 13.02.2010 15:10
Нужна программа по базам данных на Delphi7 DIAMONDS Помощь студентам 4 19.01.2010 13:18
Строки. Программа в Delphi7 Настена Помощь студентам 3 09.01.2008 12:33