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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 08:13   #1
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка Создать тип даных: TYPE MyType = от 1 до 150

подскажите пожалуйста, как это правельно записать, ато я не соображу
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 26.12.2011, 08:19   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
подскажите пожалуйста, как это правельно записать, ато я не соображу
что б потом можно было делать
inc(перменая нового типа)
и когда она доходит до 150, возвращалась к 1, и так по кругу
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 26.12.2011, 08:27   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
и когда она доходит до 150, возвращалась к 1, и так по кругу
а никак.
Можно, конечно, замутить с классами. Тогда у вашего объекта написать методы inc() и dec() (при необходимости, конечно).
в начале программы будет:
MyCount := MyCountType.Create(0);
..
потом
MyCount.Inc(1);

потом, в конце работы с данным счётчиком
MyCount.Free;

но, имхо, овчинка выделки не стоит.
проще завести константу Const MaxCountValue = 150;
можо тип описать type MyCountType = 1..MaxCountValue;
и потом наращивать счётчик через процедуру. например, IncCycle( MyCount );
Код:
procedure IncCycle( var C : MyCountType );
begin
   if C = MaxCountValue then C := 1
   else Inc(C);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2011, 08:43   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

проверка на равество с макс значением уже есть,
я просто надеялся от нее избавиться с помошью нового типа
но раз нельзя, значит нельзя
спасибо
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 10.01.2012, 13:22   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Вот, случайно наткнулся в инете
Код:
function TForm1.GetNextNumber: Integer;
type
  TNumbers = 0..149;
Const
  {$WriteableConst On}
  nextNumber : TNumbers = 0;
begin
  result := nextNumber;
  nextNumber := (nextNumber + 1) MOD 150;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
  for i := 1 to 500 do
    Label1.Caption := Label1.Caption + ' ' + IntToStr(GetNextNumber + 1);
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 10.01.2012, 13:51   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

угу. забавная реализация.
но не понял, что Вас так удивило?
я не вижу никаких принципиальных отличий от того подхода, о котором я говорил выше
Цитата:

но, имхо, овчинка выделки не стоит.
проще завести константу Const MaxCountValue = 150;
можо тип описать type MyCountType = 1..MaxCountValue;
и потом наращивать счётчик через процедуру. например, IncCycle( MyCount );
ну, разве что процедура заменена IncCycle на функцию GetNextNumber
и вместо проверки на переполнение - взятие остатка от деления.
а остальное - то же самое.


p.s. впрочем, раз Вам нравится - пользуйтесь!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.01.2012, 14:23   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

реализация и в правду забавная
весь код можно заменить этим
Код:
MyCount: integer;
...
inc(MyCount)
MyCount:= MyCount mod 150;
а что это за процедура IncCycle? в Google ничего не показало

извиняюсь за глупый вопрос, увидел
спасибо, тема закрыта
VirusN13

Последний раз редактировалось ArtGrek; 10.01.2012 в 14:32.
ArtGrek вне форума Ответить с цитированием
Старый 10.01.2012, 15:27   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

150 mod 150=0 - все равно if нужен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.01.2012, 17:56   #9
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
TMyType = 1..150;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 10.01.2012, 21:59   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
150 mod 150=0 - все равно if нужен
Код:
MyCount: integer;
...
inc(MyCount)
MyCount:= MyCount mod 150 + 1; (от 1 до 150)
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ тип даных очереди Kronoz Помощь студентам 0 18.12.2011 17:53
type time = record(тип запись) Arioh Помощь студентам 1 23.12.2010 11:02
Тип-запись(type ... record) в Delphi Pascal Legky Помощь студентам 1 13.12.2010 10:29
Разработать программу для заполнения типизированного файла целыми числами в интервале [-150; 150]. Поменя Pan_rust Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2010 23:03
задача на символьный тип даных(паскаль) fescar Помощь студентам 2 24.12.2009 21:31