Компилирует без ошибок,но...
Модератор: Модераторы
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
resident А это как-то влияет на код илипростосчитается "дурным тоном программирования" ? Оставление "Self" ? 
Совсем запутался, вы советуете код полностью переписать или тогда что именно нужно добавить, ведь компилятор ошибок не выбивает очевидно это логическая ошибка, уже типает от этой задачи.Если уж никак помочь не в состоянии, то может у вас есть материал на подобные темы или может какие-нибудь примеры аналогичных программ...
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
Bombucho Вам уже переписали его . По-моему Вы слишком замудрили код
Советую Вам двигаться в следующем направлении : Создать простой класс квадратика ( с полями "стороны" и методамы для нахождения периметра , площадт , радиуса окружности описанной , всписанной , и т.д. - как захотите
Потом от него методом наследования создавайте пирамидку , добавляете ей новое поле Апофема и какие-то другие , Вам необходимые , методы , и , в принципе все ) Алгоритмы нахождения тех или иных численных характеристик ( площадь , проверхности , углы и т.д. ) уже Вам известны ) Их надо просто описать )
AlphaBlend писал(а):А это как-то влияет на код илипростосчитается "дурным тоном программирования" ? Оставление "Self" ?
Хороший вопрос. По идее может быть оно и наглядней даже. Сразу видно, откуда.
Но с другой стороны я что-то и не помню чтобы встречал Self там, где без него можно обойтись.
Хотя на форуме есть товарищи, которые всё с присказками пишут, даже имя модуля.
Имя модуля.Имя класса.Имя метода.
Добавлено спустя 2 минуты 44 секунды:
Bombucho писал(а):вы советуете код полностью переписать
Разве что чужими руками. Вы пишите непойми что, ИМХО.
viewtopic.php?f=5&t=11178&start=30#p98665
Вопрос был задан.
Добавлено спустя 2 минуты 20 секунд:
Bombucho писал(а):подобные темы
viewforum.php?f=43
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
Bombucho писал(а):уже типает от этой задачи.Если уж никак помочь не в состоянии
на странице 3 этого поста решение разложено по полочкам и даже приведен пример использования . Скорее всего кто-то понять как это работает не в состоянии ?
P.S. Если очень мучиться - то диплом получится ! (с)
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)
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
Странно , что сначала FStona пристаивается 2 , а потом тут же присваивается st . Вопрос - зачем присваивать 2 ? Меня очень мучит вопрос , если позволите ... Вы на кого учитесь ? 
Добавлено спустя 1 минуту 51 секунду:
в вашем выражении Fstone всегда будет равна st если st больше нуля или не равна нулю. Опять же странность в условии . Не проще ли написать просто if st > 0 ? Логично же , что если она больше нуля - она ему и не равна !
Добавлено спустя 1 минуту 51 секунду:
в вашем выражении Fstone всегда будет равна st если st больше нуля или не равна нулю. Опять же странность в условии . Не проще ли написать просто if st > 0 ? Логично же , что если она больше нуля - она ему и не равна !
AlphaBlend писал(а):Bombucho писал(а):уже типает от этой задачи.Если уж никак помочь не в состоянии
на странице 3 этого поста решение разложено по полочкам и даже приведен пример использования . Скорее всего кто-то понять как это работает не в состоянии ?![]()
P.S. Если очень мучиться - то диплом получится ! (с)
Спасибо вам огромное, просто мне не понятно как мой громоздкий код может равняться вашему миниатюрному(не в обиду конечно), просто ведь если использовать основы ооп(наследование,полиморфизм,инкапсуляцию), то он как минимум не может быть таким маленьким. И еще ведь мы должны использовать площадь основания и перимтер основания для нахождения площади поверхности пирамиды (то есть мы должны использоваться переменные из родительского класса в дочернем)
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
мой маленький код полностью соответствует условию задачи ) Но я с радостью могу обвешать его ненужными фенкциями ,проверками , обертками ... Для нахождения поверхности только через площадь используйте математические преобразования . К программированию это отношения не имеет . программы выполнит все , чтоей напишут . можно хоть через радиус окружности , описанной вокруг основания и угол найтиповерхность 
Добавлено спустя 3 минуты 4 секунды:
Вам в условии сказано , что есть класс "квадрат" . То есть надо реализовать клас "квадрат" . И добавляя к нему какие-то свойства и методы ( произвольно , конечно ) , сделать пирамидку ) Создайте класс "квадрат" с самым минимумом свойств и методов и потом просто "обвешайте" его всем необходимым.
Изначально класс вообще может принять вид как
И больше ничего в нем может не быть
Добавлено спустя 6 минут 55 секунд:
если нужно прямо во всех канонах Delphi , то смысл кода от этого не изменится , но обрастет всякими "красивостями" как я их называю . Число , получаемое при расчетах поверхности при этом останется тем же )
Добавлено спустя 3 минуты 4 секунды:
Вам в условии сказано , что есть класс "квадрат" . То есть надо реализовать клас "квадрат" . И добавляя к нему какие-то свойства и методы ( произвольно , конечно ) , сделать пирамидку ) Создайте класс "квадрат" с самым минимумом свойств и методов и потом просто "обвешайте" его всем необходимым.
Изначально класс вообще может принять вид как
Код: Выделить всё
TRectangle = class
end;
И больше ничего в нем может не быть
Добавлено спустя 6 минут 55 секунд:
если нужно прямо во всех канонах Delphi , то смысл кода от этого не изменится , но обрастет всякими "красивостями" как я их называю . Число , получаемое при расчетах поверхности при этом останется тем же )
AlphaBlend писал(а):что сначала FStona пристаивается 2
А если приглядеться?
- AlphaBlend
- постоялец
- Сообщения: 207
- Зарегистрирован: 22.05.2016 09:13:10
resident да ... запуталась немного ) 
AlphaBlend писал(а):запуталась немного )
Неудивительно, ведь оформление точно можно назвать "дурным тоном программирования".
После else дальнейшее присваивание без отступов, что видится, как будто оно отдельно от условия.
AlphaBlend писал(а):в вашем выражении Fstone всегда будет равна st если st больше нуля или не равна нулю. Опять же странность в условии . Не проще ли написать просто if st > 0 ? Логично же , что если она больше нуля - она ему и не равна !
Да, этот недочет я уже заметил за собой немного выше)
Добавлено спустя 3 минуты 37 секунд:
AlphaBlend писал(а):Странно , что сначала FStona пристаивается 2 , а потом тут же присваивается st . Вопрос - зачем присваивать 2 ? Меня очень мучит вопрос , если позволите ... Вы на кого учитесь ?
Очевидно учусь на программиста, но из-за своего посредственного отношения как понимаете не слишком преуспел, да и преподы не шибко хотят отвечать на мои поставленные вопросы...
Bombucho писал(а):Очевидно учусь на программиста
Главная черта программиста - внимание к деталям.
Bombucho писал(а):Проверка переменной st если переменная будет соответствовать условию будет больше 0 и не ровняться 0 (но тут я действительно замудрил если больше 0, то очевидно 0 равняться никак не может) тогда переменная st будет равна вводимому числу с поля, иначе переменная равна 2 (т.к. по условию изначально сторона квадрата равна 2)
Вынос мозга. Вы так если только в военкомат уедете. У вас всего два слова в запасе - "переменная" и "равна".
Относительно функций следует говорить параметры или аргументы.
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 писал(а):четырехульная пирамида
resident писал(а):Вынос мозга. Вы так если только в военкомат уедете. У вас всего два слова в запасе - "переменная" и "равна".
Но ведь и вы не гением родились, а учились на своих ошибках и за счет большого количество попыток и неудач достигли просветления в такой многогранной области как программирование(хотя насчет гения я и могу ошибаться).
Добавлено спустя 18 минут 11 секунд:
AlphaBlend писал(а):мой маленький код полностью соответствует условию задачи ) Но я с радостью могу обвешать его ненужными фенкциями ,проверками , обертками ... Для нахождения поверхности только через площадь используйте математические преобразования . К программированию это отношения не имеет . программы выполнит все , чтоей напишут . можно хоть через радиус окружности , описанной вокруг основания и угол найтиповерхность
Добавлено спустя 3 минуты 4 секунды:
Вам в условии сказано , что есть класс "квадрат" . То есть надо реализовать клас "квадрат" . И добавляя к нему какие-то свойства и методы ( произвольно , конечно ) , сделать пирамидку ) Создайте класс "квадрат" с самым минимумом свойств и методов и потом просто "обвешайте" его всем необходимым.
Изначально класс вообще может принять вид какКод: Выделить всё
TRectangle = class
end;
И больше ничего в нем может не быть
Добавлено спустя 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, а тут очевидно это не есть решением
