Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.12.2010, 11:02
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
Смущение Контрольная по Delphi (задание 4)

ПОМОГИТЕ, ПОЖАЛУЙСТА, СРОЧНО!!!

На форме имеются следующие компоненты: поле Memo, два компонента MaskEdit, кнопка Button, компонент Radiogroup внутри него две радиокнопки (Radiobutton).

- Как настроить свойства масок в полях редактирования, чтобы туда можно было вводить только двухзначные числа???

- Как в окне кода запрограммировать две функции: SrArifm и SrGeom, которые должны считать среднее арифметическое (половину от суммы) и среднее геометрическое (квадратный корень из произведения) двух чисел???

- Как создать процедуру Count, которая выполняет над числами, введенными в поля редактирования ту операцию, которая выбрана в Радиогруппе и помещает результат в поле Memo???

- Как запрограммировать кнопку, чтобы она вызывала процедуру Count и затем очищала редактируемые поля???

- Как отредактировать программу так, чтобы результат в поле Memo не обновлялся каждый раз после нажатия вычислить, а добавлялся на следующую строчку???

Заранее, большое спасибо откликнувшимся!!!

Последний раз редактировалось Andrew1266, 10.12.2010 в 05:52.
Ответить с цитированием
  #2  
Старый 09.12.2010, 11:06
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

И в чем проблема? все по пунктам расписано. не пойму в чем вопрос то?
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #3  
Старый 09.12.2010, 12:56
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

просто я в делфи вообще не шарю.... куда заходить, что нажимать???
Ответить с цитированием
  #4  
Старый 09.12.2010, 13:39
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Для начала запустить Делфи.
далее п1. Создать новый проект.
и далее по пунктам.
не совсем понимаю какую вы помощь хотите получить?
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #5  
Старый 10.12.2010, 17:17
kalinochkind kalinochkind вне форума
Прохожий
 
Регистрация: 06.06.2010
Сообщения: 15
Репутация: 12
По умолчанию

У maskedit-ов ставишь editmask в 00

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    medt1: TMaskEdit;
    btn1: TBitBtn;
    medt2: TMaskEdit;
    rg1: TRadioGroup;
    mmo1: TMemo;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function srarifm:Real;
begin
Result:=(StrToInt(Form1.medt1.text)+strtoint(Form1.medt2.text))/2
end;

function srgeom:Real;
begin
Result:=Sqrt(StrToInt(Form1.medt1.text)*strtoint(Form1.medt2.text))
end;

procedure count;
begin
if Form1.rg1.ItemIndex=0 then Form1.mmo1.Lines.Append(FloatToStr(srarifm))
else Form1.mmo1.Lines.Append(FloatToStr(srgeom))
end;


procedure TForm1.btn1Click(Sender: TObject);
begin
count;
end;

end.
Ответить с цитированием
  #6  
Старый 11.12.2010, 00:44
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

Огромное спасибо!!!
Ответить с цитированием
  #7  
Старый 12.12.2010, 05:37
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

При запуске программы слово "Memo1" отображается в поле. Как его убрать???

И при выводе ответа на поле Memo, среднее арифметическое получается дробное число с 12-ю знаками после запятой. Как это исправить???

Последний раз редактировалось Andrew1266, 12.12.2010 в 06:11.
Ответить с цитированием
  #8  
Старый 12.12.2010, 16:08
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от Andrew1266
При запуске программы слово "Memo1" отображается в поле. Как его убрать???
В ObjectInspector-е найди свойство Lines, нажми кнопку ("..."), стери строку "Memo1".
Или в OnCreate формы:
Код:
Memo1.Clear;
Ответить с цитированием
  #9  
Старый 13.12.2010, 12:05
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

Посмотрите, вот код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    MaskEdit1: TMaskEdit;
    MaskEdit2: TMaskEdit;
    Button1: TButton;
    RadioGroup1: TRadioGroup;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Label1: TLabel;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function SrArifm: double;
begin
result:= (StrToInt(Form1.MaskEdit1.Text)+StrToInt(Form1.MaskEdit2.Text)  )/2
end;

function SrGeom: double;
begin
result:=sqrt(StrToInt(Form1.MaskEdit1.Text)*StrToInt(Form1.MaskEdit2.Text))
end;

procedure count;
begin
if Form1.RadioGroup1.ItemIndex=0
then Form1.Memo1.Lines.Append(FloatToStr(SrArifm))
else Form1.Memo1.Lines.Append(FloatToStr(SrGeom))
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
count;
   MaskEdit1.Clear;
   MaskEdit2.Clear;
end;

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

end.

И при выводе ответа на поле Memo, среднее арифметическое получается дробное число с 12-ю знаками после запятой. Как это исправить???
Ответить с цитированием
  #10  
Старый 13.12.2010, 16:48
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от Andrew1266
среднее арифметическое получается дробное число с 12-ю знаками после запятой. Как это исправить???
А надо как? Если вообще без дробной части, то:
Код:
procedure count;
begin
if Form1.RadioGroup1.ItemIndex=0
then Form1.Memo1.Lines.Append(IntToStr(Round(SrArifm)))
else Form1.Memo1.Lines.Append(IntToStr(Round(SrGeom)))
end;
Ответить с цитированием
  #11  
Старый 14.12.2010, 15:35
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

Да! Получается без дробной части, но ответ-то неправильный! Например, вычисляя (10+20)/2 получается 14.
Ответить с цитированием
  #12  
Старый 14.12.2010, 16:30
kalinochkind kalinochkind вне форума
Прохожий
 
Регистрация: 06.06.2010
Сообщения: 15
Репутация: 12
По умолчанию

Вычисления с плавающей точкой неточные, отсюда и ошибка.

Код:
procedure count;
begin
if Form1.RadioGroup1.ItemIndex=0
then Form1.Memo1.Lines.Append(floattostrf(SrArifm,fffixed,6,3))
else Form1.Memo1.Lines.Append(floattostrf(SrGeom,fffixed,6,3))
end;

Последний раз редактировалось kalinochkind, 15.12.2010 в 17:36.
Ответить с цитированием
  #13  
Старый 15.12.2010, 15:56
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от kalinochkind
procedure count;
begin
if Form1.RadioGroup1.ItemIndex=0
then Form1.Memo1.Lines.Append(floattostrf(SrArifm,fffix ed,6,3))
else Form1.Memo1.Lines.Append(floattostrf(SrGeom,fffixe d,6,3))
end;
kalinochkind kalinochkind вне форума
Новичок

По умолчанию
procedure count;
begin
if Form1.RadioGroup1.ItemIndex=0
then Form1.Memo1.Lines.Append(floattostrf(SrArifm,fffix ed,6,3))
else Form1.Memo1.Lines.Append(floattostrf(SrGeom,fffixe d,6,3))
end;
Ответить с цитированием

Не получается!!! Выдаёт ошибку, выделяя 6, 3 у Fixed
Ответить с цитированием
  #14  
Старый 15.12.2010, 17:35
kalinochkind kalinochkind вне форума
Прохожий
 
Регистрация: 06.06.2010
Сообщения: 15
Репутация: 12
По умолчанию

Убери пробел: fffixed,6,3
Ответить с цитированием
  #15  
Старый 16.12.2010, 07:27
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

Я так понимаю, правильного ответа, мне никогда не получить... =(

Да, идёт округление (или отбрасывание) до трёх знаков после запятой, но ответ-то у среднего арифметического неправильный!!!

Последний раз редактировалось Andrew1266, 16.12.2010 в 09:37.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025