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

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

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

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

Сообщение resident » 19.06.2016 01:46:57

О боже, да у вас тут такая комедия во всем коде.
Код: Выделить всё
  procedure TKvadrat.Get_Storona(st:integer);
begin
if (st>0)  and  (st<>0)  then  FStorona:=st
else
FStorona:=2;
FStorona:=st;
end;

Как вы своими словами опишите, что здесь происходит?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 01:47:41

а ! .... до меня дошло :D
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 01:48:01

Кхе, принято методы, которые устанавливают значения полей, называть Set...
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 01:54:21

Вот квадртатик :)
Код: Выделить всё
TRectangle = class
    Side:Integer;
    function Perimetr:Integer;
    function Area:Integer;
    constructor Create(ASide:Integer);overload;
  end; 

//...............


  function TRectangle.Perimetr:Integer;
  begin
     result:=Side * 4;
  end;
  function TRectangle.Area:Integer;
  begin
     result:=Side*Side;
  end;
  constructor TRectangle.Create(ASide:Integer);
  begin
     Side:=ASide;
  end;                                                 


Добавлено спустя 28 секунд:
теперь надо попробовать от него пирамидку построить :roll:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 02:01:42

Bombucho писал(а):А почему Kva и Pyr не знаю о существовании друг друга

Даже если их пригласить в передачу "Найди меня!", то они друг друга не узнают. :mrgreen:
Родители/наследники - это только чтобы упростить написание однотипного кода. Т.е. всю пирамиду можно написать в одном классе, не наследуя от квадрата. Вы упростили, объявив её наследником. Т.е. как бы "уже написали" часть кода квадрата, т.е. мысленно в код пирамиды "скопировали" код квадрата. И на этом все.
Данных на этом этапе не существует, вы только пишите что вы будете с ними делать.

Программа отжирает часть ОЗУ под данные при создании экземпляров класса.
Код: Выделить всё
Kva:=TKvadrat.Create(k);
    Pyr:=TPyramida.Create(a);

Kva и Pyr - это всего-лишь указатели на данные экземпляра. И естественно что они указывают на разные места ОЗУ и разные данные. Сторона квадрата Kva и сторона квадрата Pyr - это совершенно разные данные совершенно разных экземпляров классов. И совершенно не важно от каких там классов они созданы и в каких родственных отношениях находятся классы.

Добавлено спустя 2 минуты 9 секунд:
AlphaBlend писал(а):а ! .... до меня дошло :D

Скоро и до меня дойдет :D

Добавлено спустя 2 минуты 17 секунд:
AlphaBlend писал(а):для override классы должны быть только виртуальными , если не ошибаюсь ?

Наверное вы правы.

Добавлено спустя 2 минуты 4 секунды:
Bombucho писал(а):полиморфизм

Там ваще атас! :mrgreen:
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 02:21:14

За математику извините :mrgreen:

Код: Выделить всё
TPyramid = class (TRectangle)
    Apof:Integer; 
    Surface:Integer;
    procedure SetApof(NewApof:Integer);
    function GetSurface:Real;
  end;                                         


Код: Выделить всё
function TPyramid.GetSurface:Real;
  var
    A:Real;
    p:real;
    S:Real;
  begin
       p:=(Self.Side + Self.Apof + Self.Apof) / 2;           { полупериметр }
       S:=SQRT(p * ( p - Apof) * (p - Apof) * (p - Side)); { Площадь одного треугольника  }
       S:=(S * 4) + Self.Area;                                      { вся поверхность пирамиды }
       result:=S;
  end;

procedure TForm1.Button1Click(Sender: TObject);
  begin
     Pyramid:=TPyramid.Create(2);
     Pyramid.SetApof(4);
     showmessage(FloatToStr(Pyramid.GetSurface));
  end;                                 
                                                       
Последний раз редактировалось AlphaBlend 19.06.2016 02:42:12, всего редактировалось 2 раз(а).
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 02:36:26

AlphaBlend писал(а):За математику извините :mrgreen:

Он передаст преподавателю ваши извинения :mrgreen:
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 02:37:30

resident :roll: последнее время больше чем до 10 считать не умею :(
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 02:40:26

AlphaBlend
А зачем вы ставите "Self."? Это же вроде и подразумевается по-умолчанию.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 02:41:26

resident я когда долго думаю забываю имена методов и полей , которые создаю , а если написать Self и нажать точечку - выпадет меню со свойствами класса :mrgreen:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 02:43:07

AlphaBlend писал(а): последнее время больше чем до 10 считать не умею

А как же сдачу в магазине? Всё на веру? :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 02:44:13

resident об этом лучше не думать :mrgreen: :mrgreen: :mrgreen:

Добавлено спустя 6 минут 2 секунды:
в магазин идешь сейчас и думаешь не о том , как с дачу посчитать , а как еще в долгах не остаться :lol: :lol:

Добавлено спустя 7 минут 55 секунд:
видимо , кто-то наспех соображает решения для зачетов , курсовых и т.д. :shock:
Последний раз редактировалось AlphaBlend 19.06.2016 02:58:30, всего редактировалось 1 раз.
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 02:58:22

AlphaBlend писал(а):я когда долго думаю забываю имена методов и полей , которые создаю , а если написать Self и нажать точечку - выпадет меню со свойствами класса

Тоже не помню, но так я никогда не делаю.
В основном Ctrl + Shift + Стрелка вниз / вверх. Прыгаю туда и обратно.
Хотя по хорошему нужно ставить закладки, но что-то я к ним никак себя не приучу.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 03:00:18

resident когда код работает и отлажен , можно просто удалить Self и все :mrgreen: и красивости всякие сделать табуляцией :roll:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 03:10:52

AlphaBlend писал(а):огда код работает и отлажен , можно просто удалить Self и все

А по-моему тогда его лучше не трогать. Я даже галочку "только чтение" для файлов ставлю, чтоб случайно не изменить :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 260

Рейтинг@Mail.ru