Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2009, 18:28   #1
demonara
Пользователь
 
Регистрация: 24.05.2009
Сообщений: 25
По умолчанию вопрос по объектам на паскале

Код:
type
 TPerson=object

 age:integer;
 man:boolean;

 constructor init(aAge:integer;aman:boolean);
 function g:boolean;
 function InfoString:string;
 function IsWorkingString:string;
 function ManString:string;
 function AgeString:integer;
 end;
 constructor TPerson.init(aage:integer;aman:boolean);
 begin
 age:=aage;
man:=aman;

 end;
  function TPerson.g:boolean;
  begin
   g:=(age<60);
 end;
 function TPerson.infostring:string;
   begin
  case age of
  1..18:infostring:=('ребёнок');
  18..25:infostring:='студент ';
  25..60:infostring:='работающий';
  60..100:infostring:='пенсионер';
  else infostring:='столько не живут';
end;
end;
 function TPerson.IsWorkingString:string;
  begin
  if(age>18)and(age<60) then IsWorkingString:='трудоспособен'
  else IsWorkingString:='нетрудоспособен';
  end;
  function TPerson.manstring:string;
  begin
   if man then manstring:='мужской'
   else manstring:='женский';
  end;
  function tperson.agestring:integer;
  begin
  agestring:=age;

  end;
var
x,y,z,m:integer;
  s:char; n:boolean;
  begin

      writeln('введите сколько вам лет');
        readln(m);

        writeln('введите ваш пол М\Ж ');
         repeat
         readln(s);
         until(s='М')or(s='м')or(s='Ж')or(s='ж');
         if (s='М')or(s='м') then n:=true
         else n:=false;

        TPerson.init(m,n); {вот эта строчка не проходит ошибка 143
invalid procedure or function referens}

   writeln(manstring);
   writeln(agestring);
   writeln(isworkingstring);
   writeln(infostring);
   if isworking then writeln('по возросту годен')
   else writeln('по возросту не прошол');
 readln;
 end.
задание такое

Создайте следующий объект:
TPerson - объект людей.
Со следующим набором методов и полей: Age:integer; {возраст}
Man:boolean; {пол}
procedure Init(_Age:integer; _Man:boolean); {метод создания человека (заполнение полей)}
function IsWorking:boolean; {Метод-функция, определяющая, может ли человек работать (по возрасту) или нет}
function InfoString:string; {возвращает фразу о типе класса}
function IsWorkingString:string; {возвращает фразу о трудоспособности}
function ManString:string; {возвращает фразу о поле}
function AgeString:string; {возвращает фразу о возрасте}
И поражденный от него объект TPersonStudent.




Последний раз редактировалось Stilet; 10.09.2009 в 09:58.
demonara вне форума Ответить с цитированием
Старый 09.09.2009, 19:20   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Может быть я и брешу, ибо object не использую. Но TPerson это не переменная, или чего там еще. Попробуйте вот что
Код:
var Person : TPerson
добавить вот что. и еще в тексте программы писать вот так :
Код:
Person := TPerson.Init(...)
mMAg вне форума Ответить с цитированием
Старый 09.09.2009, 19:53   #3
demonara
Пользователь
 
Регистрация: 24.05.2009
Сообщений: 25
По умолчанию

нет ты не прав TPerson.init была ранее объявлена в методах объекта
по идее tperson.init(m,n) должна была сработать как процедура
и присвоить переменным age и man значение переменных m,n
, но по не понятным мне причинам этого не происходит
процедура не срабатывает а выдаёт ошибку
demonara вне форума Ответить с цитированием
Старый 09.09.2009, 19:55   #4
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

А ты пробовал сделать так как я просил, мне как-то очень лениво?

Цитата:
по идее tperson.init(m,n) должна была сработать как процедура
и прискоить переменным age и man значение переменных m,n
Ну так она так и сработает, когда появится что-нибудь, с чем она это сможет сделать. Например экземпляр объекта вполне может стать ее целью.
mMAg вне форума Ответить с цитированием
Старый 09.09.2009, 19:59   #5
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

mMAg прав:
ты переменную забыл описать:
Код:
...
var
  Person: TPerson;
...
begin
...
  Person.init(m,n);
...
end.
Или так можно, если динамически:
Код:
...
type
  PPerson: ^TPerson;
var
  Person: PPerson;
...
begin
...
  New(Person, init(m, n));
...
  Dispose(Person);
...
end.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Daramant; 09.09.2009 в 20:02.
Daramant вне форума Ответить с цитированием
Старый 09.09.2009, 20:31   #6
demonara
Пользователь
 
Регистрация: 24.05.2009
Сообщений: 25
По умолчанию

всё зделал как написано но ошибка не изчезает
demonara вне форума Ответить с цитированием
Старый 09.09.2009, 20:38   #7
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
всё зделал как написано но ошибка не изчезает
Значит не все сделал.
Вот, я все поправил:
Код:
type
TPerson=object

age:integer;
man:boolean;

constructor init(aAge:integer;aman:boolean);
function g:boolean;
function InfoString:string;
function IsWorkingString:string;
function IsWorking:boolean;
function ManString:string;
function AgeString:integer;
end;
constructor TPerson.init(aage:integer;aman:boolean);
begin
age:=aage;
man:=aman;

end;
function TPerson.g:boolean;
begin
g:=(age<60);
end;
function TPerson.infostring:string;
begin
case age of
1..18:infostring:=('ребёнок');
18..25:infostring:='студент ';
25..60:infostring:='работающий';
60..100:infostring:='пенсионер';
else infostring:='столько не живут';
end;
end;
function TPerson.IsWorkingString:string;
begin
if(age>18)and(age<60) then IsWorkingString:='трудоспособен'
else IsWorkingString:='нетрудоспособен';
end;
function TPerson.IsWorking:boolean;
begin
IsWorking := (age>18)and(age<60);
end;
function TPerson.manstring:string;
begin
if man then manstring:='мужской'
else manstring:='женский';
end;
function tperson.agestring:integer;
begin
agestring:=age;

end;
var
x,y,z,m:integer;
s:char; n:boolean;
Person: TPerson;
begin

writeln('введите сколько вам лет');
readln(m);

writeln('введите ваш пол М\Ж ');
repeat
readln(s);
until(s='М')or(s='м')or(s='Ж')or(s= 'ж');
if (s='М')or(s='м') then n:=true
else n:=false;

Person.init(m,n); {вот эта строчка не проходит ошибка 143
invalid procedure or function referens}

writeln(Person.manstring);
writeln(Person.agestring);
writeln(Person.isworkingstring);
writeln(Person.infostring);
if Person.isworking then writeln('по возросту годен')
else writeln('по возросту не прошол');
readln;
end.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 09.09.2009, 20:52   #8
demonara
Пользователь
 
Регистрация: 24.05.2009
Сообщений: 25
По умолчанию

это похоже у меня косяки с паскалям free pascal по прежнему выдаёт ошибку а турбо паскаль откомпелировал всё беспродлем
ну вообщем спасибо!!
demonara вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к объектам QGraphicsScene по индексу? jojahti Общие вопросы C/C++ 0 23.08.2009 21:27
Доступ к графическим объектам из ВБА НеВа6464 Microsoft Office Excel 2 16.05.2009 21:52
С++ Интересный вопрос по объектам: Познающий Помощь студентам 12 11.05.2009 19:26
Обращение к объектам в процедуре. Maxs Помощь студентам 5 02.05.2009 12:54
Запрет доступа к объектам приложения при открытии формы ekzobyte Общие вопросы Delphi 2 20.03.2009 15:21