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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.12.2010, 05:34
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
Подмигивание Среднее арифметическое и геометрическое

Пожалуйста, ответьте на несколько вопросов:

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

2) Имеются функции, вычисляющие среднее арифметическое и среднее геометрическое:

Код:
function SrArifm:Real;
begin
Result:=(StrToInt(Form1.MaskEdit1.Text)+StrToInt(Form1.MaskEdit2.Text))/2
end;

function SrGeom:Real;
begin
Result:=Sqrt(StrToInt(Form1.MaskEdit1.Text)*StrToInt(Form1.MaskEdit2.Text))
end;

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

Пожалуйста, помогите. Заранее благодарен)))

Последний раз редактировалось Andrew1266, 12.12.2010 в 06:13.
Ответить с цитированием
  #2  
Старый 12.12.2010, 09:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1) Очистить свойство Lines в инспекторе объектов
2) Для начала - пользуемся тегами (иначе будет бан). А что ты хотел. Компьютер считает приблизительно. Особенно, при использовании старого типа real.
а) Измени тип функций на Double.
б) Подключи модуль Math и воспользуйся функцией RoundTo для округления до каког-нить разумного знака (например, до 1 знака посде запятой для ср. арифметического). Вообще, можно и руками округлить:
Код:
function SrArifm:Double;
begin
Result:=(StrToInt(Form1.MaskEdit1.Text)+StrToInt(Form1.MaskEdit2.Text))/2;
Result := Round(Result*10)/10;
end;
Еще посмотри в сторону функции Format. Там можно указать сколько знаков при выводе в строку тебя интересует, тогда она округлит значение.
Ответить с цитированием
  #3  
Старый 12.12.2010, 10:18
Аватар для salzer
salzer salzer вне форума
Прохожий
 
Регистрация: 10.12.2010
Сообщения: 4
Репутация: 10
По умолчанию

имеется подобная задача.
дано натуральное число. найти среднее арифметическое значение нечетных чифр числа.
Ответить с цитированием
  #4  
Старый 12.12.2010, 10:56
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Цитата:
Сообщение от salzer
имеется подобная задача.
дано натуральное число. найти среднее арифметическое значение нечетных чифр числа.

Код:
function Average(InputVal: Integer): Real;
var
  Sum, Temp, Count: integer;
begin
  Sum := 0;
  Count := 0;
  repeat
    Temp := InputVal mod 10;
    InputVal := InputVal div 10;
    if ((Temp mod 2) <> 0) then
    begin
      Sum := Sum + Temp;
      Inc(Count);
    end;
  until (InputVal = 0);
  Result := RoundTo(Sum / Count, -2);
end;
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #5  
Старый 13.12.2010, 12:00
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

C Round - выдаёт ошибку!
А как подключить модуль Math???
Как воспользоваться функцией Format???
Ответить с цитированием
  #6  
Старый 13.12.2010, 12:03
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.
Admin: Еще раз напоминаю про теги! При рецедиве - бан!

Последний раз редактировалось Admin, 14.12.2010 в 21:27.
Ответить с цитированием
  #7  
Старый 13.12.2010, 12:52
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
А как подключить модуль Math???
Код:
uses Windows, Messages, ..., ..., Math;
Цитата:
Как воспользоваться функцией Format???
http://www.delphibasics.ru/Format.php
P.S. Теги где???
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #8  
Старый 13.12.2010, 16:26
Andrew1266 Andrew1266 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

Что такое теги??? Как их использовать??
Ответить с цитированием
  #9  
Старый 13.12.2010, 17:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от Andrew1266
Что такое теги??? Как их использовать??
http://delphisources.ru/pages/forum_rules.html
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #10  
Старый 14.12.2010, 19:09
Аватар для salzer
salzer salzer вне форума
Прохожий
 
Регистрация: 10.12.2010
Сообщения: 4
Репутация: 10
По умолчанию

Задача:
Дано натуральное число, найти среднее арифметическое значение цифр числа, стоящих на нечетных местах.

немного набросил. постоянно выдает 0.
примечание: массив тут НУЖЕН(мне нужен)
Код:
var b,c,i,z: integer;
    val: real;
    a: array of integer;

.......

  
if radiobutton5.Checked=true then
    begin
    SetLength(a, strtoint(edit8.Text));
    if length(edit8.Text) mod 2=1 then c:=1 else c:=2;
    i:=c;
    while i<length(edit8.Text) do
      begin
        a[i]:=z mod 10;
        z:=z div 100;
        i:=i+2;
        b:=b+1;
        val:=val+a[i];
      end;
    val:=val / b;
    val:= Round(val*100)/100;
    listbox3.Items.Add(floattostr(val));
    end;

укажите мою ошибку
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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