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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2010, 16:04   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
Восклицание Тип данных

Можно ли сделать свой тип данных типа Integer, только с другим диапазоном?Например, минимальное значение -100, а максимальное +100.?
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.09.2010, 16:06   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Задай тип данных - диапазон...
Тип диапазон есть подмножество своего базового типа и задается границами своих значений внутри базового типа...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 11.09.2010 в 16:11.
Grag вне форума Ответить с цитированием
Старый 11.09.2010, 16:10   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Каким образом? Set Of ?
А, всё, нашёл
Код:
MyType = -100..100;
Хотя на самом деле мне нужен такой тип данных, который поддерживал бы число равное факториалу 30000. Extended слишком маленькое для этого. Comp тоже

Последний раз редактировалось _-Re@l-_; 11.09.2010 в 16:14.
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.09.2010, 16:16   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Код:
Program Prb;
Type
  dpz=-100..100;
Var
  a,b:dpz;
Begin
  for a:=Low(dpz) to High(dpz) do
    b:=b+1;

End.
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 11.09.2010, 16:18   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Хотя на самом деле мне нужен такой тип данных, который поддерживал бы число равное факториалу 30000. Extended слишком маленькое для этого. Comp тоже
Вот это как сделать?
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.09.2010, 16:22   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

никак. Только длинная арифметика.

Поиск (в том числе и по форуму).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.09.2010, 17:28   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Только длинная арифметика.
А это что такое?

Поиск по форуму не помог, есть только куча ссылок где написано "используй длинную арифметику". Так в чём она заключается??

Последний раз редактировалось _-Re@l-_; 11.09.2010 в 17:33.
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.09.2010, 17:50   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да это же проще простого: Длинная арифметика (wikipedia):
Цитата:
Длинная арифметика — в вычислительной технике операции над числами, разрядность которых превышает длину машинного слова данной вычислительной машины. Частный случай — арифметика произвольной точности — относится к арифметике, в которой длина чисел ограничена только объёмом доступной памяти.
а по "простому" вместо стандартных типов данных Вы вводите свой тип данных с ОЧЕНЬ большой (или вообще неограниченной длиной разрядной сетки). Для этого используют либо массивы, либо строки (что, по сути тоже массивы из символов).
Дальше реализуют операции над числами, заданного типа (в первую очередь сложение, вычитание, умножение, деление).
Делается это так, как делалось в начальной школе - умножение в столбик помните? Или, банально - умножение заменяется на сложение...
Ну и всё...
минусы (кроме сложности реализации) - обычно СИЛЬНО страдает производительность вычислений...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.09.2010, 13:38   #9
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Всё ясно.
Вот, сделал свою реализацию...Не знаю, насколько она рациональна(скорее всего, предел рационализации равен нулю ), но работает очень быстро:
Код:
Function Add(A,B:String):String;
Var
   X,Y:Integer;
   ResultXY:Integer;
   ModXY:Integer;
   Result:String;
   I,Err:Integer;
   Buf:String;
   aLength:Integer;
   bLength:Integer;
   max:Integer;
Begin
     ModXY:=0;
     Result:='';
     X:=0;Y:=0;
     ResultXY:=0;
     aLength:=Length(A);
     bLength:=Length(B);
     If aLength>bLength Then
     Begin
          max:=aLength;
          While Length(B)<Length(A) Do
          B:=' '+B;
     End;
     If aLength = bLength Then max:=aLength;
     If bLength>aLength Then
     Begin
          max:=bLength;
          While Length(A)<Length(B) Do
          A:=' '+A;
     End;
     For I:=Max DownTo 1 Do
     Begin
          Val(Copy(A,I,1),X,Err);
          Val(Copy(B,I,1),Y,Err);
          ResultXY:=X+Y+ModXY;
          ModXY:=ResultXY div 10;
          Str(ResultXY mod 10,Buf);
          Result:=Result+Buf;
          Buf:='';
     End;
     If ModXY<>0 Then
     Begin
     Str(ModXY,Buf);
     Result:=Result+Buf;
     End;
     Buf:='';
     For I:=Length(Result) DownTo 1 Do
     Buf:=Buf+Copy(Result,I,1);
     Add:=Buf;
End;
И ещё просьба: сильно не критиковать. Делал спросонья
P.P.S. Пока только сложение...

Последний раз редактировалось _-Re@l-_; 12.09.2010 в 13:58.
_-Re@l-_ вне форума Ответить с цитированием
Старый 12.09.2010, 14:00   #10
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Вроде как теперь правильно, прошу потестить...Если есть желающие, конечно.Делается это так:
Код:
Uses CRT;
Function Add(A,B:String):String;
Var
   X,Y:Integer;
   ResultXY:Integer;
   ModXY:Integer;
   Result:String;
   I,Err:Integer;
   Buf:String;
   aLength:Integer;
   bLength:Integer;
   max:Integer;
Begin
     ModXY:=0;
     Result:='';
     X:=0;Y:=0;
     ResultXY:=0;
     aLength:=Length(A);
     bLength:=Length(B);
     If aLength>bLength Then
     Begin
          max:=aLength;
          While Length(B)<Length(A) Do
          B:=' '+B;
     End;
     If aLength = bLength Then max:=aLength;
     If bLength>aLength Then
     Begin
          max:=bLength;
          While Length(A)<Length(B) Do
          A:=' '+A;
     End;
     For I:=Max DownTo 1 Do
     Begin
          Val(Copy(A,I,1),X,Err);
          Val(Copy(B,I,1),Y,Err);
          ResultXY:=X+Y+ModXY;
          ModXY:=ResultXY div 10;
          Str(ResultXY mod 10,Buf);
          Result:=Result+Buf;
          Buf:='';
     End;
     If ModXY<>0 Then
     Begin
     Str(ModXY,Buf);
     Result:=Result+Buf;
     End;
     Buf:='';
     For I:=Length(Result) DownTo 1 Do
     Buf:=Buf+Copy(Result,I,1);
     Add:=Buf;
End;
Var
   A,B:String;
   C,D:String;
   X,Y:Integer;
   Err:Integer;
Begin
     Clrscr;
     Write('A = ');
     GotoXY(5,1);
     Readln(A);
     Write('B = ');
     GotoXY(5,2);
     Readln(B);
     C:=Add(A,B);
     Write('C = ',C);
     Readln;
End.
Прошу прощения у модераторов за второй пост подряд..
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файловый тип данных и тд. deni007-92 Фриланс 2 03.06.2010 15:09
Тип данных Money frustr Помощь студентам 2 06.05.2010 12:01
тип данных string (C)stalin(Cpp) Общие вопросы C/C++ 1 01.06.2009 22:49
Пользовательский тип данных cudalover Помощь студентам 10 05.04.2009 17:04
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55