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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2013, 15:49   #1
koxaz941
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 14
По умолчанию Делфи.

Разработать программу для вычисления функции z(x) заданной соотношением:

Параметр A и B задать в программе жестко либо в разделе const или оператором присваивания, а значение x вводить с клавиатуры с помощью компонента однострочного редактора. Вводу значения х должен предшествовать вывод на экран подсказки например "Введите значение x". Добавить While.

Собственно у меня вышло разработать программу, проверьте на наличие ошибок пожалуйста.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  const a=-5.1;
  const b=3.3;
implementation

{$R *.dfm}

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

procedure TForm1.Button2Click(Sender: TObject);
var x,cv,ce,a,b:Integer;
z,f,g:Real;
begin
  memo1.clear;
  cv:=StrToInt(edit1.Text);
  ce:=strtoint(edit2.Text);
  for x:=cv to ce do begin

    if (x<a) and (x>b) then
    f:=(x*(5-x))/(x+cos(0.2*x));
    g:=(2+x)/(arctan(0.26*x));
end;
if (x<a) and (x>b) then
      memo1.Lines.add('F= '+floattostr(f))
      else
      memo1.Lines.add('G= '+floattostr(g));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Введите Х');
end;


procedure TForm1.Button3Click(Sender: TObject);
var g,x,cv,ce,f,z,dx,a,b:Real;
begin
dx:=4.5;
memo3.clear;
cv:=StrToInt(edit1.Text);
ce:=strtoint(edit2.Text);
x:=cv;
    while (x>=cv) and (x<=ce) do
    begin
    f:=(x*(5-x))/(x+cos(0.2*x));
    g:=(2+x)/(arctan(0.26*x));
    x:=x+dx;
    z:=a*b-6.2;
    end;
      if (x>a) and (x<b) then
      memo2.Lines.add('F= '+floattostr(f))
      else
      memo2.Lines.Add('G= '+FloatToStr(g));
end;

procedure TForm1.Button4Click(Sender: TObject);
var z,f,x,dx,g,a,b:Real;
begin
dx:=4.5;
memo3.lines.clear;
x:=strtoint(edit2.text);
repeat if (x>a) and (x<b)  then
    f:=(x*(5-x))/(x+cos(0.2*x));
    g:=(2+x)/(arctan(0.26*x));
x:=x+dx until  (x>a) and (x<b);
if (x>a) and (x<b) then
    memo3.lines.add('G= '+FloatToStr(g))
    else
    memo3.lines.add('F= '+floattostr(f));
end;

end.
Скриншот формы:

Цикл repeat не хочет почему то работать, и зависает.
Кто знает подскажите пожалуйста.

Последний раз редактировалось Stilet; 04.06.2013 в 15:58.
koxaz941 вне форума Ответить с цитированием
Старый 04.06.2013, 16:04   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Кто так пишет код?
С моей точки зрения все верно...
Отладчиком пройдись
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 04.06.2013, 19:20   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Замечания:

1) Определение функции g:=(2+x)/(arctan(0.26*x)) не соответствует условию. Замените на g:=(2+x)*sqr(x)/(arctan(0.26*x))

2) по заданию необходимо высчитать значение для X введённого с клавиатуры. Реализовано 3(!) метода для вычисления функций от нескольких Х. Использование циклов нерационально и бесполезно.

3) вычисление обоих функций (G и F), а лишь затем проверка условий (кстати условия в процедуре Button2Click не соответствуют заданию. Подсказка введите X = A или X = B) и вывод только одного из результатов, так же нерационально.

4) На форме вводятся некоторые коэффициенты cv и ce (а на форме se), назначение которых непонятно и не описано в условии.

5) z:=a*b-6.2; что это? откуда? Попутно замечание: в программе объявлены константы a и b, но в процедурах везде есть локальные переменные a и b, значения которым вы не присваиваете. Т.е. во всех Ваших процедурах a и b равны нулю. А Вы их ещё и в условиях используете.

Вывод: условие задачи и код не соответствуют друг другу.

Строка в условии "Добавить While." Наталкивает на мысль: зачем парнокопытному животному музыкальный инструмент [1]. Где можно применить циклы в данной задаче мне не ясно и не очевидно.

[1] "нахрена козе баян"

P.S.: кто-то жестко пошутил дав вам этот код. Не поверю, что данный код мог написать человек для себя(!) и хочет его сдать преподавателю.

Последний раз редактировалось zetrix; 04.06.2013 в 19:32.
zetrix вне форума Ответить с цитированием
Старый 04.06.2013, 19:41   #4
koxaz941
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 14
По умолчанию

Цитата:
Сообщение от zetrix Посмотреть сообщение
Замечания:

1) Определение функции g:=(2+x)/(arctan(0.26*x)) не соответствует условию. Замените на g:=(2+x)*sqr(x)/(arctan(0.26*x))

2) по заданию необходимо высчитать значение для X введённого с клавиатуры. Реализовано 3(!) метода для вычисления функций от нескольких Х. Использование циклов нерационально и бесполезно.

3) вычисление обоих функций (G и F), а лишь затем проверка условий (кстати условия в процедуре Button2Click не соответствуют заданию. Подсказка введите X = A или X = B) и вывод только одного из результатов, так же нерационально.

4) На форме вводятся некоторые коэффициенты cv и ce (а на форме se), назначение которых непонятно и не описано в условии.

5) z:=a*b-6.2; что это? откуда? Попутно замечание: в программе объявлены константы a и b, но в процедурах везде есть локальные переменные a и b, значения которым вы не присваиваете. Т.е. во всех Ваших процедурах a и b равны нулю. А Вы их ещё и в условиях используете.

Вывод: условие задачи и код не соответствуют друг другу.

Строка в условии "Добавить While." Наталкивает на мысль: зачем парнокопытному животному музыкальный инструмент [1]. Где можно применить циклы в данной задаче мне не ясно и не очевидно.

[1] "нахрена козе баян"

P.S.: кто-то жестко пошутил дав вам этот код. Не поверю, что данный код мог написать человек для себя(!) и хочет его сдать преподавателю.
Блин, вот это ты меня обрадовал, ну спасибо и на этом)
koxaz941 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бросок к горизонту(паскаль+-делфи.(может ли кто помочь сделать с Паскаля АВС на Делфи?) extrimal Помощь студентам 8 24.03.2013 23:51
Делфи ali-4ka Помощь студентам 3 29.03.2012 20:01
JS в делфи maloun Общие вопросы Delphi 3 29.01.2011 13:26
БД в Делфи Dreanks Помощь студентам 2 26.04.2010 10:48
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37