Поставлена задача создать консольное приложение с классом TSquare.Вычислить площадь и периметр методами: Area и Perimetr.
Создал код, но препод забраковал его, хотя всё высчитывает и работает нормально. Являюсь новичком. Может, кто поможет, что здесь не так.
Голову уже сломал. Нормальных самоучителей не могу найти, чтобы было ясно и понятно.
Как поставить деструктор?
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type TSquare=class
private
x,y,a:integer;
public
constructor create(ax,ay,aa:integer);
function perimetr:integer; //ïåðèìåòð
function area:integer; //ГЇГ «Г®Г№Г*äü
procedure show;//ðåçóà «ГјГІГ*ГІ
function verify(tx,ty:integer):boolean;//ïðîâåðêГ*
end;
constructor TSquare.Create;
begin
inherited Create;
x:=ax; y:=ay; a:=aa;
end;
function TSquare.perimetr;
begin
result:=4*a;
end;
function TSquare.area;
begin
result:=a*a;
end;
procedure TSquare.show;
begin
writeln('Perimetr=',perimetr);
writeln('Ploshad=',area);
end;
function TSquare.verify(tx,ty:integer):boolean;
begin
result:=(x+a div 2=tx)and(y-a div 2=ty);
end;
var sqA:TSquare;
x1,y1,a1:integer;
begin
writeln('Vvedite xA,yA,aA');
readln(x1,y1,a1);
sqA:=TSquare.create(x1,y1,a1);
sqA.show;
readln
end.
Другие языки программирования и технологии
Всем привет! программа Делфи
Как по мне, у тебя просто избыточный класс.
В рамках данной задачи конструктор толжен принимать только один параметр - сторону квадрата.
Все методы, кроме Area и Perimeter - лишние. Не просят - не городи сущностей.
Называй поля значимыми именами. Если у тебя есть поле "размер стороны" - ну так и назови его "SideSize". Имеет смысел также сделать соотв. свойство для доступа к полю - все-таки размер в данном случае имеет значение, не находишь?
Насчет деструктора - он тут нахрен не уперся. Т. е. твой класс и так наследует от TObject, а у него деструктор уже есть. Препод имел ввиду, что ты нигде не ВЫЗЫВАЕШЬ деструктор. Тоже в данном сличае не критично, потому что винда подчистит, но некрасиво так делать.
В общем, сделай вот что:
TSquare=class
private
FSideSize: integer;
public
constructor Create(_iSideSize: integer);
function Perimeter: integer;
function Area: integer;
property SideSize: integer read FSideSize;
end;
Дальше реализуешь это дело, а затем
with TSquare.Create(iSideSize) do
try
...
finally
Free; //Вызов деструктора.
end;
Удачи.
В рамках данной задачи конструктор толжен принимать только один параметр - сторону квадрата.
Все методы, кроме Area и Perimeter - лишние. Не просят - не городи сущностей.
Называй поля значимыми именами. Если у тебя есть поле "размер стороны" - ну так и назови его "SideSize". Имеет смысел также сделать соотв. свойство для доступа к полю - все-таки размер в данном случае имеет значение, не находишь?
Насчет деструктора - он тут нахрен не уперся. Т. е. твой класс и так наследует от TObject, а у него деструктор уже есть. Препод имел ввиду, что ты нигде не ВЫЗЫВАЕШЬ деструктор. Тоже в данном сличае не критично, потому что винда подчистит, но некрасиво так делать.
В общем, сделай вот что:
TSquare=class
private
FSideSize: integer;
public
constructor Create(_iSideSize: integer);
function Perimeter: integer;
function Area: integer;
property SideSize: integer read FSideSize;
end;
Дальше реализуешь это дело, а затем
with TSquare.Create(iSideSize) do
try
...
finally
Free; //Вызов деструктора.
end;
Удачи.
Александр Сизоненко
спасибо большое! буду пробовать
Класс не должен ничего выводить и запрашивать ввод данных. Это должна делать вызывающая программа.
Насчёт деструктора:
type TSquare=class
private
x,y,a:integer;
public
constructor create(ax,ay,aa:integer);
function perimetr:integer; //ïåðèìåòð
function area:integer; //ГЇГ «Г®Г№Г*äü
procedure show;//ðåçóà «ГјГІГ*ГІ
function verify(tx,ty:integer):boolean;//ïðîâåðêГ*
destructor Destroy(); override; //<<---
end;
...
implementation
...
destructor TSquare.Destroy();
begin
//тут код
inherited;
end;
Насчёт деструктора:
type TSquare=class
private
x,y,a:integer;
public
constructor create(ax,ay,aa:integer);
function perimetr:integer; //ïåðèìåòð
function area:integer; //ГЇГ «Г®Г№Г*äü
procedure show;//ðåçóà «ГјГІГ*ГІ
function verify(tx,ty:integer):boolean;//ïðîâåðêГ*
destructor Destroy(); override; //<<---
end;
...
implementation
...
destructor TSquare.Destroy();
begin
//тут код
inherited;
end;
Александр Сизоненко
благодарю! сейчас обдумаю. очень хочу разобраться!
А что учитель-то сказал?
Александр Сизоненко
я в первый раз делаю. если не сложно, что нужно поправить в моем коде? сказал еще, что без деструктора никуда...
Александр Сизоненко
было сказано, что проверка не нужна (ее уберу) и что без деструктора не прокатит. а в остальном сиди и думай типа. я так понимаю, корректировка нужна.
Похожие вопросы
- как запретить второй запуск программы (Делфи) Добрый день всем, как запретить второй запуск своей программы
- Надо написать код в программе делфи
- Как сделать защиту в программе написанной на делфи?
- Скажите сколько месяцев нужно изучать Делфи что бы написать программу вывода даты, дня недели и года в окно ?
- Нужно написать программу в делфи....не могу сама никак
- Помогите, пожалуйста, написать программу на делфи с ассемблерными вставками.
- Код для программы в Делфи
- О делфи.. Можно ли? Можно ли в делфи программировать программу для работы, чтоб отчет был на excel? Как в '1С'
- надо решить задачку через делфи и паскаль)))
- Вопрос по делфи