Компилирует без ошибок,но...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Компилирует без ошибок,но...

Сообщение Bombucho » 20.06.2016 13:12:58

pupsik писал(а):
Условие:создать родительский класс квадрат со стороной и найти его периметр и площадь.А его производный класс пирамида с апофемой. вычислить площадь ее поверхности


Геометрию подзабыл. Дык что уж сори.

п.с.
Нафлудили 6 страниц. Сплели 2 темы. И, как понимаю, "сплели лапти" вопрошающему. Ну и вы и отожгли :mrgreen:


Спасибо огромное вам, да уж анархии пост), но много полезной информации узнал!

Добавлено спустя 1 минуту 52 секунды:
SSerge писал(а):Bombucho, у библиотек исполняющей среды есть собственный тип TRectangle.
Уж именовали бы как-нибудь несовпадающе что ли...

И, это... С трудом представляю себе площадь, выраженную в integer. Разве что для получения разных странностей и наведенный вопросов "почему я делю 7 на 2 и получается 3 и почему мой компилятор ругается, когда я делю два целых и результат присваиваю целому.


Ну площадь квадрата я выражал через Integer(умножение 2 целых чисел), а вот площадь пирамиды "function TPyramida.pyramida (pe,pl,ap:integer; py:real):real;"
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

Re: Компилирует без ошибок,но...

Сообщение Лекс Айрин » 20.06.2016 13:44:49

Bombucho писал(а):а вот площадь пирамиды "function TPyramida.pyramida (pe,pl,ap:integer; py:real):real;"


А смысл? вот если бы речь шла о делении... а так просто лишнее преобразование. И еще... зачем в аргументах 3переменных, если основание квадрат?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Компилирует без ошибок,но...

Сообщение Bombucho » 20.06.2016 13:49:30

Лекс Айрин писал(а):
Bombucho писал(а):а вот площадь пирамиды "function TPyramida.pyramida (pe,pl,ap:integer; py:real):real;"


А смысл? вот если бы речь шла о делении... а так просто лишнее преобразование. И еще... зачем в аргументах 3переменных, если основание квадрат?


Ну, чтобы найти площаь пирамиды(py) мы должны 1/2* периметр квадрата(pe) *апофему(ap)+площадь квадрата(pl). Поэтому и стал использовать эти 3 переменные или можно было их не указывать, и просто написать "function TPyramida.pyramida (py:real):real;"
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

Re: Компилирует без ошибок,но...

Сообщение pupsik » 20.06.2016 13:57:13

Bombucho в коде есть одна "не нужность" и обращения не через св-ва, а на прямую к функциям. Они не меняют смысла и на рабочесть. Ну..у и без коментов :)
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Компилирует без ошибок,но...

Сообщение Лекс Айрин » 20.06.2016 14:29:55

Bombucho писал(а): Поэтому и стал использовать эти 3 переменные или можно было их не указывать,


Все, что можно вычислить, лучше вычислять, а не надеяться на "папу". В данном случае, нужны размер стороны основания и высота. Все остальное вычисляемые величины. Насчет real все понятно.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Компилирует без ошибок,но...

Сообщение Bombucho » 20.06.2016 15:13:15

Лекс Айрин писал(а):
Bombucho писал(а): Поэтому и стал использовать эти 3 переменные или можно было их не указывать,


Все, что можно вычислить, лучше вычислять, а не надеяться на "папу". В данном случае, нужны размер стороны основания и высота. Все остальное вычисляемые величины. Насчет real все понятно.


То есть периметр и площадь не только нужно было указать, но и найти их повторно найти их в function TPyramida.pyramida....?
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

Re: Компилирует без ошибок,но...

Сообщение Лекс Айрин » 20.06.2016 15:14:35

Если предварительно указывалось, то да.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Компилирует без ошибок,но...

Сообщение Bombucho » 20.06.2016 15:16:23

Лекс Айрин писал(а):Если предварительно указывалось, то да.

Понял,спасибо!

Добавлено спустя 3 часа 11 минут 58 секунд:
pupsik писал(а):
Условие:создать родительский класс квадрат со стороной и найти его периметр и площадь.А его производный класс пирамида с апофемой. вычислить площадь ее поверхности


Геометрию подзабыл. Дык что уж сори.

п.с.
Нафлудили 6 страниц. Сплели 2 темы. И, как понимаю, "сплели лапти" вопрошающему. Ну и вы и отожгли :mrgreen:



Аж самому стыдно, не могу понять почему не отображается caption в выводимых Label`ах, вроде все правильно и прописал label.Update; к каждому, но все-ровно лейблы пустые...
Безымянный-min.png


Добавлено спустя 15 минут 52 секунды:
Bombucho писал(а):
Лекс Айрин писал(а):Если предварительно указывалось, то да.

Понял,спасибо!

Добавлено спустя 3 часа 11 минут 58 секунд:
pupsik писал(а):
Условие:создать родительский класс квадрат со стороной и найти его периметр и площадь.А его производный класс пирамида с апофемой. вычислить площадь ее поверхности


Геометрию подзабыл. Дык что уж сори.

п.с.
Нафлудили 6 страниц. Сплели 2 темы. И, как понимаю, "сплели лапти" вопрошающему. Ну и вы и отожгли :mrgreen:



Аж самому стыдно, не могу понять почему не отображается caption в выводимых Label`ах, вроде все правильно и прописал label.Update; к каждому, но все-ровно лейблы пустые...
Безымянный-min.png

Странно, теперь выводит инофрмацию о квадрате, а в пирамиде выбивает класс исключений, видимо в формуле ошибка)
Еще я немного не понял, почему мы используем вот эту формулу result:=Sqrt(sqr(fside div 2) + sqr(fheight)); (на нее он и ругается
)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

Re: Компилирует без ошибок,но...

Сообщение Лекс Айрин » 20.06.2016 19:29:50

вообще, формула может быть упрощена.
Если (согласно стандартной формуле), площадь боковой поверхности правильной пирамиды вычисляется по формуле S=P*h/2 (где P=4*FHeight) --> S= 4 * fHeight * h/2 = 2*fHeight *h {P площадь основания H анафема}
Площадь основания та же.

Итоговая формула:
Код: Выделить всё
S = 2 * fHeight * H + Sqr(fHeight);

PS: ах да... совсем забыл...у вас формула с ошибкой.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Компилирует без ошибок,но...

Сообщение pupsik » 20.06.2016 19:46:39

Код: Выделить всё
result:=Sqrt(sqr(fside div 2) + sqr(fheight))
это расчет анафемы.
Как я понимаю: вы пытаетесь воспроизвести. Есть один нюанс: вы могли что то упустить (если воспользовались моим кодом).
И э..э при чем обновление лейбла???
Выложите архивом ваше творение (только без бинарника), а не кусками.

Добавлено спустя 1 минуту 31 секунду:
И еще одно. Зачем разбивать на 2 модуля?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Компилирует без ошибок,но...

Сообщение Лекс Айрин » 20.06.2016 19:54:41

pupsik писал(а):это расчет анафемы.


Стоп. А разве она у нас неизвестна?

pupsik писал(а):И э..э при чем обновление лейбла???


Все правильно... если результат писать в лейбл. Автоматом он не обновится.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Компилирует без ошибок,но...

Сообщение pupsik » 20.06.2016 20:00:01

А разве она у нас неизвестна?
это надо уточнить. Как я понял - она Х.... Т.е. её надо найти и вывести.
Автоматом он не обновится.
вот я этого и не понял... Создал, передал, отчитался. Кого обновлять? По крайней мере я так в коде сделал. Что там обновлять то???
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Компилирует без ошибок,но...

Сообщение Лекс Айрин » 20.06.2016 20:12:40

pupsik писал(а):это надо уточнить.


Посмотри чуть выше. (заранее извиняюсь за "угнанную" цитату)

Bombucho писал(а):Условие:создать родительский класс квадрат со стороной и найти его периметр и площадь.А его производный класс пирамида с апофемой. вычислить площадь ее поверхности

Т. е. анафема известна.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Компилирует без ошибок,но...

Сообщение pupsik » 20.06.2016 20:25:45

Т. е. анафема известна.
дык еще проще. Мой вариант уменьшится на функцию и минус пару строк :)

Добавлено спустя 4 минуты 28 секунд:
Код: Выделить всё
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes,
  SysUtils,
  Math;

type

  { Tsquare }

  Tsquare = class(TObject)
    fside : integer;
    function get_perimeter : integer;
    function get_area : integer;
  public
    constructor Create;
    destructor Destroy; override;
    property Side            : integer read fside write fside;
    property on_get_perimetr : integer read get_perimeter;
    property on_get_area     : integer read get_area;
  end;

  { Tpyramid }

  Tpyramid = class(Tsquare)
    fheight : integer;
    fapothem : real;
    function get_area : real;
  public
    constructor Create;
    destructor Destroy; override;
    property Height  : integer read fheight write fheight;
    property Apothem : real read fapothem write fapothem;
    property Area    : real read get_area;
  end;

implementation

{ Tpyramid }

constructor Tpyramid.Create;
begin
  inherited Create;
end;

function Tpyramid.get_area: real;
var
  s : real;
begin
  s := 1/2 * fapothem * side;
  result := 4 * s + on_get_area;
end;

destructor Tpyramid.Destroy;
begin
  inherited Destroy;
end;

{ Tsquare }

function Tsquare.get_perimeter: integer;
begin
  result := 4 * fside;
end;

function Tsquare.get_area: integer;
begin
  result := sqr(fside);
end;

constructor Tsquare.Create;
begin
  fside := 1;
  inherited Create;
end;

destructor Tsquare.Destroy;
begin
  inherited Destroy;
end;

end.

и ради 80-ти строк 7 -я страница?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Компилирует без ошибок,но...

Сообщение Лекс Айрин » 20.06.2016 21:06:47

pupsik, а если упростить формулу? И не забывай, что иногда лучше заново рассчитывать, а не использовать внешние функции. (Создание стека процедуры/функции не бесплатное) Плюс, не надо будет использовать вещественные переменные.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 243

Рейтинг@Mail.ru