Исходники и листинги ::: Java Script ::: Сборник полезных функций JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
  /*****Сборник полезных функций JavaScript*****/
 
  /***Математика***/
 
  //Проверяет, является ли число простым
  function isE(x) {
  var Dx=new Array();
  if (x==1) return false;
  for (var i=2;i < x;i++) if (x%i==0) Dx[Dx.length]=i;
  if (Dx.length==0) return true;
  return false;
  }
 
  //Наименьшее общее кратное
  function NOK(x,y) {
  var x=Math.abs(x),y=Math.abs(y);
  var tx=x,ty=y;
  var Dx=new Array();
  for (var i=2;i < x+1;i++) if (x%i==0 && isE(i)) {Dx[Dx.length]=i;x/=i,i=1}
  var Dy=new Array();
  for (var i=2;i < y+1;i++) if (y%i==0 && isE(i)) {Dy[Dy.length]=i;y/=i,i=1}
  var P=1;
  var R=1;
  for (var i=0;i < Dy.length;i++) if (inArr(Dy[i],Dx)) {
  R*=Dy[i];
  Dx[inArr2(Dy[i],Dx)]=1;
  Dy[i]=1;
  }
  for (var i=0;i < Dx.length;i++) P*=Dx[i];
  for (var i=0;i < Dy.length;i++) P*=Dy[i];
  return P*R;
  }
 
  //Наибольший общий делитель
  function NOD(x,y) {
  var x=Math.abs(x),y=Math.abs(y);
  var tx=x,ty=y;
  var Dx=new Array();
  for (var i=2;i < x+1;i++) if (x%i==0 && isE(i)) {Dx[Dx.length]=i;x/=i,i=1}
  var Dy=new Array();
  for (var i=2;i < y+1;i++) if (y%i==0 && isE(i)) {Dy[Dy.length]=i;y/=i,i=1}
  var R=1;
  for (var i=0;i < Dy.length;i++) if (inArr(Dy[i],Dx)) {
  R*=Dy[i];
  delete Dx[inArr2(Dy[i],Dx)];
  }
  return R;
  }
 
  //Сокращение дробей: C - числитель, Z - знаменатель; возвращает массив [0] - числитель, [1] - знаменатель
  function SD(C,Z) {
  var A=new Array();
  if (Z==0) {
  A[0]=NaN;
  A[1]=NaN;
  return A;
  }
  if (C==0) {
  A[0]=0;
  A[1]=1;
  return A;
  }
  if (Z==1 || Z==-1) {
  A[0]=Z*C;
  A[1]=1;
  return A;
  }
  var z=1;
  if (C < 0 && Z > 0 || C > 0 && Z < 0) z=-1;
  var C=Math.abs(C),Z=Math.abs(Z);
  if (C==Z) {
  A[0]=z;
  A[1]=1;
  return A;
  }
  var N=C,N2=Z,D=new Array(),D2=new Array();
  for (var i=2;i < =Math.min(C,Z);i++) {
  var B=false;
  if (N%i==0 && i!=1) {
  var E=false,B=true;
  D[D.length]=i;
  var N=N/i;
  }
  if (N2%i==0 && i!=1) {
  var E2=false,B=true;
  D2[D2.length]=i;
  var N2=N2/i;
  }
  if (B && i!=1) var i=1;
  }
  if (!E || !E2) {
  if (D.length > D2.length) var P=D2,P2=D;
  else var P=D,P2=D2;
  for (var i=0;i < P.length;i++) {
  var p=inArr2(P[i],P2);
  if (p!=-1) {
  C/=P[i];
  Z/=P[i];
  P2[p]=-1;
  }
  }
  }
  A[0]=z*C;
  A[1]=Z;
  return A;
  }
 
  //Выделение целой части дроби, возвращает массив [0] - числитель, [1] - знаменатель, [2] - целая часть
  function CC(C,Z) {
  var D=SD(C,Z);
  var C=D[0],Z=D[1];
  var A=new Array();
  if (Z==0) {
  A[0]=NaN;
  A[1]=NaN;
  A[2]=NaN
  return A;
  }
  if (C==0) {
  A[0]=0;
  A[1]=1;
  A[2]=0;
  return A;
  }
  if (Z==1 || Z==-1) {
  A[0]=0;
  A[1]=1;
  A[2]=Z*C;
  return A;
  }
  var z=1;
  if (C < 0 && Z > 0 || C > 0 && Z < 0) z=-1;
  var C=Math.abs(C),Z=Math.abs(Z);
  if (C==Z) {
  A[0]=0;
  A[1]=1;
  A[2]=z;
  return A;
  }
  if (C < Z) {
  A[0]=z*C;
  A[1]=Z;
  A[2]=0;
  return A;
  }
  var CC=Math.floor(C/Z);
  A[0]=C-CC*Z;
  A[1]=Z;
  A[2]=z*CC;
  var D=SD(A[0],A[1])
  A[0]=D[0];
  A[1]=D[1];
  return A;
  }
 
  //Квадратный корень целого числа с вынесением простых множителей из-под корня. Число представляется в виде [0]*Math.sqrt([1])
  function SSQRT(N) {
  if (!N || isNaN(N)) return false;
  if (N < 0) return Array(1,N);
  if (N==0) return Array(0,0);
  if (N==1) return Array(1,1);
  if (N==2) return Array(1,2);
  var A=new Array(1,1);
  var y=N;
  var Dy=new Array();
  for (var i=2;i < y+1;i++) if (y%i==0 && isE(i)) {Dy[Dy.length]=i;y/=i,i=1}
  for (var i=0;i < Dy.length;i++) {
  for (var k=0;k < Dy.length;k++) {
  if (k==i) continue;
  if (Dy[k]==Dy[i]) {
  A[0]*=Dy[k];
  Dy[k]=1;
  Dy[i]=1;
  break;
  }
  }
  }
  A[1]=N/(A[0]*A[0]);
  return A;
  }
 
  //Переводит прямоугольные координаты (x;y) в полярные (r,a), возвращает массив. Если указать параметр Rad, функция вернёт угол в радианах
  function toPolar(x,y,Rad) {
  var r=Math.sqrt(x*x+y*y);
  var a=Math.acos(x/r);
  if (!Rad) a*=180/Math.PI
  return Array(r,a);
  }
 
  //Переводит полярные координаты (r,a) в прямоугольные (x;y), возвращает массив. Если указать параметр Rad, угол a будет считаться заданным в радианах
  function toRect(r,a,Rad) {
  if (!Rad) a*=Math.PI/180;
  var x=r*Math.cos(a);
  var y=r*Math.sin(a);
  return Array(x,y);
  }
 
  //Синус угла, выраженного в градусах
  function sin(x) {
  if (x%180==0) return 0;
  return Math.sin(Math.PI*x/180);
  }
 
  //Косинус угла, выраженного в градусах
  function cos(x) {
  if (x%270==0) if ((x/270)%2!=0) return 0;
  if (x==90) return 0;
  return Math.cos(Math.PI*x/180);
  }
 
  //Тангенс угла, выраженного в градусах
  function tg(x) {
  return sin(x)/cos(x);
  }
 
  //Арксинус
  function asin(x) {
  return Math.asin(x)*180/Math.PI;
  }
 
  //Арккосинус в градусах
  function acos(x) {
  return Math.acos(x)*180/Math.PI;
  }
 
  //Арктангенс в градусах
  function atg(x) {
  return Math.atan(x)*180/Math.PI;
  }
 
  //Функция сигнум
  function sgn(x) {
  if (x < 0) return -1;
  if (x==0) return 0;
  if (x > 0) return 1;
  }
 
  //Целочисленный Random (случайное целое число от a до b включительно)
  function Random(a,b) {
  if (!a && !b) return Math.round(Math.random());
  if (a && !b) {
  b=a;
  a=0;
  }
  if (a > b) return Math.floor(b+Math.random()*(a-b+1));
  else return Math.floor(a+Math.random()*(b-a+1));
  }
 
  //Факториал целых чисел
  function Factor(x) {
  if (x < 0) return 0;
  if (x==0 || x==1) return 1;
  var r=1;
  for (var i=2;i < x+1;i++) r*=i;
  return r;
  }
 
 
  /***Цвета***/
 
  //Случайный цвет RGB (в формате HTML)
  function GenColors() {
  return '#'+GenColor()+GenColor()+GenColor();
  }
  //Возвращает строку - 2 шестнадцатеричные цифры RGB-компоненты (N от 0 до 255)
  function GenColor(N) {
  if (!N) N=Random(255);
  N=N.toString(16).toUpperCase();
  return ("0"+N).substring(N.length-1);
  }
 
  /***Строковые функции***/
 
  //Знак числа (для формирования строк)
  function Z(N) {
  if (N < 0) return "-";
  else return "+";
  }
 
  //Триминг строки (удаление начальных и заключительных пробелов)
  function Trim(S) {
  return RTrim(LTrim(S));
  }
 
  //Удаление пробелов слева
  function LTrim(S) {
  if (S.indexOf(' ')==-1) return S;
  var AS=S.split(' ');
  for (var lt=0;lt < AS.length;lt++) if (AS[lt]!='') break
  AS=AS.slice(lt);
  return AS.join(' ');
  }
 
  //Удаление пробелов справа
  function RTrim(S) {
  if (S.indexOf(' ')==-1) return S;
  var AS=S.split(' ');
  for (var rt=AS.length-1;rt > =0;rt--) if (AS[rt]!='') break
  AS=AS.slice(0,rt+1);
  return AS.join(' ');
  }
 
  //Заменяет в строке S все подстроки What на Than (Заменить всё...)
  function Replace(S,What,Than) {
  return S.split(What).join(Than);
  }
 
 
  /***Массивы***/
 
  //Проверяет, входит ли элемент N в массив Arr
  function inArr(N,Arr) {
  for (var p=0;p < Arr.length;p++) if (Arr[p]==N) return true;
  return false;
  }
 
  //Возвращает индекс вхождения элемента N в массив Arr
  function inArr2(N,Arr) {
  for (var p=0;p < Arr.length;p++) if (Arr[p]==N) return p;
  return -1;
  }
 
 
  /***Специальные функции***/
 
  //Специальное округление (устраняет погрешнсть целых (в виде вещественных) чисел на 13 знаке после плавающей точки)
  function MRound(x) {
  return eval(x.toFixed(13));
  }
<<< Предыдущая работа

Вернуться в галерею исходников
Сборник полезных функций JavaScript
Автор: Mihail-Nor*
Город: Норильск
Дата: 30.10.2008  15:35
Комментариев: 8
Просмотров: 2568
Оценка: 6 (1|2|1|1|1) [2]

Вернуться на главную
Авторский комментарий к работе: Содержит некоторые математические, строковые и другие полезные функции на JavaScript
Работа опубликована администратором Mir
Вы не можете оценивать

КОММЕНТАРИИ К РАБОТЕ:
Kane* ::: комментарий от 10.11.2008 | 08:35
Kane Перспективный (ур.8)
Очки: 1556
Город: Якутск
Тв. работ: 9
Рег: 09.10.2008 (8737)
Ответ для Feel 01.11.2008 | 19:56:

Выбирай определение по троянцам! Сами они вред не наносят!Вот черви да, а это нет.


--------------------
Все что хорошо начинается кончается плохо. А что плохо начинается кончается еще хуже.
Администратор 1-го ранга (Координатор) Sauron ::: комментарий от 06.11.2008 | 19:44
Sauron Вождь (ур.18)
Очки: 40487
Город: Томск
Тв. работ: 168
Рег: 27.04.2006 (15)
Ответ для Mihail-Nor 06.11.2008 | 16:07:

пиксель уже этим занимается


--------------------
Штоу.
Mihail-Nor* ::: комментарий от 06.11.2008 | 16:07
Mihail-Nor Сведущий (ур.9)
Очки: 2243
Город: Норильск
Тв. работ: 10
Рег: 01.09.2008 (8097)
Ответ для Sauron 06.11.2008 | 15:55:

Спасибо!

А всё-таки странно сделано... Где логика в сайте (про пробелы)?


--------------------
Всё ещё будет...
Администратор 1-го ранга (Координатор) Sauron ::: комментарий от 06.11.2008 | 15:55
Sauron Вождь (ур.18)
Очки: 40487
Город: Томск
Тв. работ: 168
Рег: 27.04.2006 (15)
Ответ для Mihail-Nor 05.11.2008 | 14:23:

а я выделил каждый > и < пробелами с обеих сторон, так оказывается тоже можно


--------------------
Штоу.
Mihail-Nor* ::: комментарий от 05.11.2008 | 14:23
Mihail-Nor Сведущий (ур.9)
Очки: 2243
Город: Норильск
Тв. работ: 10
Рег: 01.09.2008 (8097)
Ответ для Sauron 03.11.2008 | 20:14:

Они символы открывающихся тэгов не воспринимают... Хм...

Ну, в общем, я в листинге заменил знак < на &lt; и знак > на &gt;, правда, здесь и они отображаются так, как написано...

В общем, если копируете код - заменяйте &lt; и &gt; на соответствующие знаки...


--------------------
Всё ещё будет...
Администратор 1-го ранга (Координатор) Sauron ::: комментарий от 03.11.2008 | 20:14
Sauron Вождь (ур.18)
Очки: 40487
Город: Томск
Тв. работ: 168
Рег: 27.04.2006 (15)
Ответ для Mihail-Nor 31.10.2008 | 12:52:

да, у меня тоже такое было, не могу достучаться до тех админов, на цикле почему то листинг обрубается


--------------------
Штоу.
Feel* ::: комментарий от 01.11.2008 | 19:56
Feel Последователь (ур.13)
Очки: 9877
Город: Теней
Тв. работ: 40
Рег: 17.09.2007 (5503)
содержит пару милых троянцев которые сьедят ваш диск С





















P.S. полезная штука) спс)
Mihail-Nor* ::: комментарий от 31.10.2008 | 12:52
Mihail-Nor Сведущий (ур.9)
Очки: 2243
Город: Норильск
Тв. работ: 10
Рег: 01.09.2008 (8097)
Хм... Очень странно... По-моему, на этом сайте какая-то ошибка с публикацией исходников...

В общем, весь листинг можно скачать (он здесь, во вложенном архиве)...

прикрепленный архив

--------------------
Всё ещё будет...