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

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

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

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

Сообщение AlphaBlend » 19.06.2016 03:13:26

resident А это как-то влияет на код илипростосчитается "дурным тоном программирования" ? Оставление "Self" ? :shock:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение Bombucho » 19.06.2016 12:01:57

Совсем запутался, вы советуете код полностью переписать или тогда что именно нужно добавить, ведь компилятор ошибок не выбивает очевидно это логическая ошибка, уже типает от этой задачи.Если уж никак помочь не в состоянии, то может у вас есть материал на подобные темы или может какие-нибудь примеры аналогичных программ...
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

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

Сообщение AlphaBlend » 19.06.2016 12:05:19

Bombucho Вам уже переписали его . По-моему Вы слишком замудрили код :shock: Советую Вам двигаться в следующем направлении : Создать простой класс квадратика ( с полями "стороны" и методамы для нахождения периметра , площадт , радиуса окружности описанной , всписанной , и т.д. - как захотите :) Потом от него методом наследования создавайте пирамидку , добавляете ей новое поле Апофема и какие-то другие , Вам необходимые , методы , и , в принципе все ) Алгоритмы нахождения тех или иных численных характеристик ( площадь , проверхности , углы и т.д. ) уже Вам известны ) Их надо просто описать )
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 14:36:44

AlphaBlend писал(а):А это как-то влияет на код илипростосчитается "дурным тоном программирования" ? Оставление "Self" ?

Хороший вопрос. По идее может быть оно и наглядней даже. Сразу видно, откуда.
Но с другой стороны я что-то и не помню чтобы встречал Self там, где без него можно обойтись.
Хотя на форуме есть товарищи, которые всё с присказками пишут, даже имя модуля.
Имя модуля.Имя класса.Имя метода.

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

Разве что чужими руками. Вы пишите непойми что, ИМХО.
viewtopic.php?f=5&t=11178&start=30#p98665
Вопрос был задан.

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

viewforum.php?f=43
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 16:08:33

Bombucho писал(а):уже типает от этой задачи.Если уж никак помочь не в состоянии

на странице 3 этого поста решение разложено по полочкам и даже приведен пример использования . Скорее всего кто-то понять как это работает не в состоянии ? :roll:
P.S. Если очень мучиться - то диплом получится ! (с) :mrgreen:
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение Bombucho » 19.06.2016 16:09:37

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

Как вы своими словами опишите, что здесь происходит?



Проверка переменной st если переменная будет соответствовать условию будет больше 0 и не ровняться 0 (но тут я действительно замудрил если больше 0, то очевидно 0 равняться никак не может) тогда переменная st будет равна вводимому числу с поля, иначе переменная равна 2 (т.к. по условию изначально сторона квадрата равна 2)
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

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

Сообщение AlphaBlend » 19.06.2016 16:13:53

Странно , что сначала FStona пристаивается 2 , а потом тут же присваивается st . Вопрос - зачем присваивать 2 ? Меня очень мучит вопрос , если позволите ... Вы на кого учитесь ? :roll:

Добавлено спустя 1 минуту 51 секунду:
в вашем выражении Fstone всегда будет равна st если st больше нуля или не равна нулю. Опять же странность в условии . Не проще ли написать просто if st > 0 ? Логично же , что если она больше нуля - она ему и не равна !
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение Bombucho » 19.06.2016 16:16:00

AlphaBlend писал(а):
Bombucho писал(а):уже типает от этой задачи.Если уж никак помочь не в состоянии

на странице 3 этого поста решение разложено по полочкам и даже приведен пример использования . Скорее всего кто-то понять как это работает не в состоянии ? :roll:
P.S. Если очень мучиться - то диплом получится ! (с) :mrgreen:


Спасибо вам огромное, просто мне не понятно как мой громоздкий код может равняться вашему миниатюрному(не в обиду конечно), просто ведь если использовать основы ооп(наследование,полиморфизм,инкапсуляцию), то он как минимум не может быть таким маленьким. И еще ведь мы должны использовать площадь основания и перимтер основания для нахождения площади поверхности пирамиды (то есть мы должны использоваться переменные из родительского класса в дочернем)
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

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

Сообщение AlphaBlend » 19.06.2016 16:20:28

мой маленький код полностью соответствует условию задачи ) Но я с радостью могу обвешать его ненужными фенкциями ,проверками , обертками ... Для нахождения поверхности только через площадь используйте математические преобразования . К программированию это отношения не имеет . программы выполнит все , чтоей напишут . можно хоть через радиус окружности , описанной вокруг основания и угол найтиповерхность :shock:

Добавлено спустя 3 минуты 4 секунды:
Вам в условии сказано , что есть класс "квадрат" . То есть надо реализовать клас "квадрат" . И добавляя к нему какие-то свойства и методы ( произвольно , конечно ) , сделать пирамидку ) Создайте класс "квадрат" с самым минимумом свойств и методов и потом просто "обвешайте" его всем необходимым.
Изначально класс вообще может принять вид как
Код: Выделить всё
TRectangle  = class
end;

И больше ничего в нем может не быть :P

Добавлено спустя 6 минут 55 секунд:
если нужно прямо во всех канонах Delphi , то смысл кода от этого не изменится , но обрастет всякими "красивостями" как я их называю . Число , получаемое при расчетах поверхности при этом останется тем же )
Аватара пользователя
AlphaBlend
постоялец
 
Сообщения: 207
Зарегистрирован: 22.05.2016 10:13:10

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

Сообщение resident » 19.06.2016 16:35:30

AlphaBlend писал(а):что сначала FStona пристаивается 2

А если приглядеться? :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение AlphaBlend » 19.06.2016 16:40:32

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

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

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

AlphaBlend писал(а):запуталась немного )

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

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

Сообщение Bombucho » 19.06.2016 16:57:55

AlphaBlend писал(а):в вашем выражении Fstone всегда будет равна st если st больше нуля или не равна нулю. Опять же странность в условии . Не проще ли написать просто if st > 0 ? Логично же , что если она больше нуля - она ему и не равна !

Да, этот недочет я уже заметил за собой немного выше)

Добавлено спустя 3 минуты 37 секунд:
AlphaBlend писал(а):Странно , что сначала FStona пристаивается 2 , а потом тут же присваивается st . Вопрос - зачем присваивать 2 ? Меня очень мучит вопрос , если позволите ... Вы на кого учитесь ?

Очевидно учусь на программиста, но из-за своего посредственного отношения как понимаете не слишком преуспел, да и преподы не шибко хотят отвечать на мои поставленные вопросы...
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

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

Сообщение resident » 19.06.2016 17:24:43

Bombucho писал(а):Очевидно учусь на программиста

Главная черта программиста - внимание к деталям.

Bombucho писал(а):Проверка переменной st если переменная будет соответствовать условию будет больше 0 и не ровняться 0 (но тут я действительно замудрил если больше 0, то очевидно 0 равняться никак не может) тогда переменная st будет равна вводимому числу с поля, иначе переменная равна 2 (т.к. по условию изначально сторона квадрата равна 2)

Вынос мозга. Вы так если только в военкомат уедете. У вас всего два слова в запасе - "переменная" и "равна". :mrgreen:
Относительно функций следует говорить параметры или аргументы.
viewtopic.php?f=5&t=11178&start=15#p98650
St - параметр.
Относительно класса следует говорить о поле. f... - field.
FStorona - поле.
Да и это "равна", тоже не пойми чего. Равна - это когда проверка условия, а когда идет присваивание, то переменной такой-то присваивается значение переменной сякой-то.
Вобщем переписывайте снова.

Добавлено спустя 6 минут 49 секунд:
viewtopic.php?f=5&t=11178&start=15#p98655
Bombucho писал(а):четырехульная пирамида

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

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

Сообщение Bombucho » 19.06.2016 17:41:32

resident писал(а):Вынос мозга. Вы так если только в военкомат уедете. У вас всего два слова в запасе - "переменная" и "равна".


Но ведь и вы не гением родились, а учились на своих ошибках и за счет большого количество попыток и неудач достигли просветления в такой многогранной области как программирование(хотя насчет гения я и могу ошибаться).

Добавлено спустя 18 минут 11 секунд:
AlphaBlend писал(а):мой маленький код полностью соответствует условию задачи ) Но я с радостью могу обвешать его ненужными фенкциями ,проверками , обертками ... Для нахождения поверхности только через площадь используйте математические преобразования . К программированию это отношения не имеет . программы выполнит все , чтоей напишут . можно хоть через радиус окружности , описанной вокруг основания и угол найтиповерхность :shock:

Добавлено спустя 3 минуты 4 секунды:
Вам в условии сказано , что есть класс "квадрат" . То есть надо реализовать клас "квадрат" . И добавляя к нему какие-то свойства и методы ( произвольно , конечно ) , сделать пирамидку ) Создайте класс "квадрат" с самым минимумом свойств и методов и потом просто "обвешайте" его всем необходимым.
Изначально класс вообще может принять вид как
Код: Выделить всё
TRectangle  = class
end;

И больше ничего в нем может не быть :P

Добавлено спустя 6 минут 55 секунд:
если нужно прямо во всех канонах Delphi , то смысл кода от этого не изменится , но обрастет всякими "красивостями" как я их называю . Число , получаемое при расчетах поверхности при этом останется тем же )


Вообщем попытался вышло вот так
Код: Выделить всё

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,unit2,unit3;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
k,a:integer;
begin
    k:=strtoint(Edit1.Text);
   a:=strtoint(Edit2.Text);
  Pyramid:=TPyramid.Create(k);
     Pyramid.SetApof(a);
     showmessage(FloatToStr(Pyramid.GetSurface));
end;

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

procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit1.clear;
  Edit2.clear;
end;

end.                           



Код: Выделить всё
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;
type
TRectangle = class
    Side:Integer;
    function Perimetr:Integer;
    function Area:Integer;
    constructor Create(ASide:Integer);overload;
  end;
implementation
    function TRectangle.Perimetr:Integer;
  begin
     result:=Side * 4;
  end;
  function TRectangle.Area:Integer;
  begin
     result:=Side*Side;
  end;
  constructor TRectangle.Create(ASide:Integer);
  begin
     inherited Create;
     Side:=ASide;
  end;
end.


Код: Выделить всё
unit Unit3;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,unit2;
type
TPyramid = class (TRectangle)
    private
    Apof:Integer;
    Surface:Integer;
    public
    procedure SetApof(NewApof:Integer);
    function GetSurface:Real;
  end;
implementation
    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;
end.                       


И в 3 юните в строке "procedure SetApof(NewApof:Integer); " выбивает ошибку "Forward declaration not solved" я сталкивался с такой ошибкой и решением было написать имя класса перед SetApof, а тут очевидно это не есть решением
Bombucho
новенький
 
Сообщения: 37
Зарегистрирован: 18.06.2016 22:02:38

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru