Получить 100$ на счет бесплатно!!

Получить депозит форекс за общение на форуме Бездепозитный бонус 100$

Полезные функции от artamir

Сборник процедур/функций, чтоб не изобретать велосипед.
  
МедальКубок
Сообщений: 536

Примеры использования.



Индикатор ложного прорыва уровня средней.


Задача Найти свечи, для которых хай был выше ценового уровня конверта средней, а закрытие было ниже и наоборот.

[code=php]
//+------------------------------------------------------------------+
//| |
//| Copyright 2012, artamir |
//| forexmd.ucoz.org |
//| elt.ucoz.org |
//| eltth.ucoz.org |
//| artamir@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, artamir"
#property link "forexmd.ucoz.org"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightGreen
#property indicator_color2 Red
#property indicator_color2 Green

#include //Pref: Norm
#include //Pref: Struc
#include
#include //Pref: MI

#include

//--- input parameters
extern int Per=2;
extern int Mode=1; //EMA
extern int AP=0; //0-Close
extern int Level=20;
//--- buffers
double L[];
double PA[];
double PB[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators

SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,217);
SetIndexBuffer(1,PA);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,218);
SetIndexBuffer(2,PB);
SetIndexEmptyValue(2,0.0);

SetIndexBuffer(0,L);
SetIndexStyle(0,DRAW_LINE);
SetIndexEmptyValue(0,0.0);

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
aMA_Init();

int hma = aMA_set(Per, Mode, AP);

int ic = IndicatorCounted();
int lim = Bars - ic - 1;
for(int i = lim; i > 0; i--){
L = iMA_getLevel(hma, i, Level);
if(iMA_isPinAbove(hma, i, Level)){
PA = Low;
}

if(iMA_isPinBelow(hma, i, Level)){
PB = High;
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
double iif( bool condition, double ifTrue, double ifFalse ){
/*
>Ver : 0.0.1
>Date : 2012.04.04
>History:
*/
if( condition ) return( ifTrue );
//---
return( ifFalse );
}
[/code]
МедальКубок
Сообщений: 536

Определение точки входа.


Точка входа определяется из условия, что цена закрытия бара с индексом 1 должна быть между ценой быстрой и медленной средней.
Ордер байстоп выставляется, если быстрая выше медленно средней.
Ордер селлстоп выставляется, если наоборот.

[code=php]
if(iMAh_isPriceBetween2Ma(ma1h, ma2h, Close[1])){
if(iMAh_isHierarhyUp(ma1h,ma2h)){
return(OP_BUYSTOP)
}else{
return(OP_SELLSTOP);
}
}
[/code]
МедальКубок
Сообщений: 536

Оглавление


iStoh.mqh


Работа с индикатором стохастик.

Для корректной работы понадобятся библиотеки:
sysOther.mqh
sysStructure.mqh
sysNormalize.mqh

Версия: 0.0.0.9
от: 2013.07.25

Изменения коснулись основных функций. Обратная совместимость не поддерживается :(
Зато появилась возможность получать значения с разных таймфреймов.

Глобальные переменные и определения



#define ST_MODE_AVG
Средняя линия индикатора. Рассчитывается как (Главная+Сигнальная)/2.
Можно использовать в функции iSth_get

string aStSets[];
Массив настроек стохастиков.
Каждый элемент содержит настройку для вызова одного индикатора.

Процедуры и функции



void aSth_Init
Очищает стринговый массив. Использовать при инициализации советника или индикатора.

int aSth_set
Сохраняет настройку стохастика в массив настроек. Возвращает индекс настройки в массиве.

double iSth_get
Возвращает цену заданной линии стохастика по заданному индексу в массиве настроек и индексу бара.

int iSth_getArray
Возвращает массив линии индикатора из 3-х элементов.

Работа с пересечениями


Определения

#define ST_CRNONE 0 //Нет пересечения
#define ST_CRUP 1 //Быстрая пересекла медленную снизу вверх
#define ST_CRDW 2 //Быстрая пересекла медленную сверху вних


int iSth_Cross
Определяем, было ли на баре с заданным индексом пересечение значений быстрого и медленного массива
Возвращает статус пересечения. (0: нет пересечения, 1: пересечение снизу вверх, 2: пересечение сверху вниз)

int iSth_CrossMainSignal
Проверяет, если на баре с заданным индексом было пересечение главной и сигнальной линий

int iSth_CrossMainLevel
Пересечение основной линии с заданным уровнем.

Библиотека находится в стадии разработки. При обновлении библиотеки, нужно перезакачать заголовочный файл из этого поста.
Версию и дату библиотеки можно найти в начале файла.

Примеры использования


Индикатор пересечений
Индикатор "Мультитаймфреймный стохастик"
Прикрепленные файлы:
iStoh_erdcl.mqh | 8.44 Кб | Скачали: 461
Редактировалось: 10 раз (Последний: 22 августа 2013 в 13:02)
МедальКубок
Сообщений: 536

Примеры использования


Индикатор ZigZag построенный на хай/лоу баров, где было пересечение главной линии с сигнальной.
А так же показано пересечение главной линии и уровня 80%.

[code=php]
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 LightGreen
#property indicator_color2 LightGreen
#property indicator_color3 Blue
#property indicator_color4 Blue

//extern bool Debug = false;
//#include
//#include
#include
#include
//#include
//#include
#include


//--- buffers
double U[];
double D[];
double UV[]; //Буффер для визуального отображения
double DV[]; //----------------------------------

int Sth = -1;

int init(){
aSth_Init(); //
Sth = aSth_set();

//---- indicators
//IndicatorBuffers(4);
SetIndexStyle(0,DRAW_ZIGZAG);
//SetIndexArrow(0,217);
SetIndexBuffer(0,UV);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_ZIGZAG);
//SetIndexArrow(1,218);
SetIndexBuffer(1,DV);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,217);
SetIndexBuffer(2,U);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,218);
SetIndexBuffer(3,D);
SetIndexEmptyValue(3,0.0);

return(0);
}

int start(){
for(int i = 1; i<100; i++){
int cr = iSth_CrossMainSignal(Sth, i);

int crl80 = iSth_CrossMainLevel(Sth, 80, i);

if(cr==1){
UV = iHigh(Symbol(),0,i);
}

if(cr==2){
DV = iLow(Symbol(),0,i);
}

if(crl80 == 1){
U = iHigh(Symbol(),0,i)+10*Point;
}

if(crl80 == 2){
D = iLow(Symbol(),0,i)-10*Point;
}
}
}

double iif( bool condition, double ifTrue, double ifFalse ){
/*
>Ver : 0.0.1
>Date : 2012.04.04
>History:
*/
if( condition ) return( ifTrue );
//---
return( ifFalse );
}
[/code]
Прикрепленные файлы:
iTestiStoh_2k6ib.mq4 | 1.77 Кб | Скачали: 501
МедальКубок
Сообщений: 536

Индикатор Мультитаймфреймный стохастик


Рисует в отдельном окне линии стохастика текущего таймфрейма
и линии с фрейма H4.

Желтая линия - ST_MODE_AVG.

[code=php]
//+------------------------------------------------------------------+
//| iStoh_test3.mq4 |
//| Copyright 2013, artamir |
//| http:\\forexmd.ucoz.org |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, artamir"
#property link "http:\\forexmd.ucoz.org"

#property indicator_separate_window
#property indicator_minimum 1
#property indicator_maximum 100
#property indicator_buffers 8
#property indicator_color1 LightGreen
#property indicator_color2 Red
#property indicator_color3 Yellow
#property indicator_color4 LightGreen
#property indicator_color5 Red
#property indicator_color6 Yellow


#include
#include
#include

double M[];
double S[];
double A[];
double MH4[];
double SH4[];
double AH4[];


int Sth, Sth_h4;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
aSth_Init(); //инициализация массива,
Sth = aSth_set(); //предопределенные параметры на текущем тф
Sth_h4 = aSth_set(5,3,3,MODE_SMA,0,"",240);//Задаем значения для тф = H4(240 мин.)
//----
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,M);
SetIndexEmptyValue(0,0.0);

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,S);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,A);
SetIndexEmptyValue(2,0.0);

SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,MH4);
SetIndexEmptyValue(3,0.0);

SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,SH4);
SetIndexEmptyValue(4,0.0);

SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,AH4);
SetIndexEmptyValue(5,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int cb=IndicatorCounted();
int lim = Bars - cb;

if(lim<=0)lim++;

for(int i=lim; i>=0; i--){
M = iSth_get(Sth, MODE_MAIN, i);
S = iSth_get(Sth, MODE_SIGNAL, i);
A = iSth_get(Sth, ST_MODE_AVG, i);

MH4 = iSth_get(Sth_h4, MODE_MAIN, i);
SH4 = iSth_get(Sth_h4, MODE_SIGNAL, i);
AH4 = iSth_get(Sth_h4, ST_MODE_AVG, i);
}
//----

//----
return(0);
}
//+------------------------------------------------------------------+

double iif( bool condition, double ifTrue, double ifFalse ){
/*
>Ver : 0.0.1
>Date : 2012.04.04
>History:
*/
if( condition ) return( ifTrue );
//---
return( ifFalse );
}
[/code]
МедальКубок
Сообщений: 536

aSth_Init


Очищает стринговый массив. Использовать в функции инициализации советника, индикатора, скрипта.

[code=php]
void aSth_Init(){
/**
\version 0.0.0.0
\date 2013.05.20
\author Morochin Artiom
\details Очищает стринговый массив. Использовать при каждом запуске ф-ции старт
\internal
>Hist:
>Rev:0
*/

ArrayResize(aStSets,0);
}
[/code]
МедальКубок
Сообщений: 536

aSth_set


Сохраняет настройку стохастика в массив настроек. Возвращает индекс настройки в массиве.

[code=php]
int aSth_set( int k = 5 /** %Kperiod */
, int d = 3 /** %Dperiod */
, int sl = 3 /** slowing */
, int me = MODE_SMA /** method */
, int pr = 0 /** price_field */
, string sy = "" /** symbol */
, int tf = 0 /** timeframe */
, int shift = 0 /** shift */){
/**
\version 0.0.0.3
\date 2013.07.25
\author Morochin Artiom
\details Сохраняет настройку стохастика в массив настроек. Возвращает индекс настройки в массиве.
\internal
>Hist:
@0.0.0.3@2013.07.25@artamir [+] добавлена настройка таймфрейма
>Rev:0
*/

int ROWS = ArrayRange(aStSets,0);
ROWS++;
int lastROW=ROWS-1;
ArrayResize(aStSets, ROWS);

if(sy == ""){
sy=Symbol();
}

string s = "";
s=s+"@k"+k;
s=s+"@d"+d;
s=s+"@sl"+sl;
s=s+"@pr"+pr;
s=s+"@me"+me;
s=s+"@sy"+sy;
s=s+"@tf"+tf;
s=s+"@sh"+shift;

aStSets[lastROW]=s;
return(lastROW);
}
[/code]
МедальКубок
Сообщений: 536

iSth_get


Возвращает цену заданной линии стохастика по заданному индексу в массиве настроек и индексу бара.
Синхронизация смещения происходит по времени бара с заданным индексом на текущем фрейме.

см. пример индикатора мультитаймфреймового стохастика

[code=php]
double iSth_get(int handle=0, int line=MODE_MAIN, int shift=-1, int dgt=0, bool useSinhro = true /** использовать синхронизацию таймфреймов. */){
/**
\version 0.0.0.5
\date 2013.07.25
\author Morochin Artiom
\details Возвращает цену заданной линии стохастика по заданному индексу в массиве настроек и индексу бара.
Синхронизация смещения происходит по времени бара с заданным индексом на текущем фрейме.
\internal
>Hist:
@0.0.0.5@2013.07.25@artamir [*] синхронизация с тф отличными от текущуго.
@0.0.0.4@2013.07.25@artamir [*] Изменения связанные с ST_MODE_AVG
@0.0.0.3@2013.07.25@artamir [*] Добавлено получение tf.
>Rev:0
*/

int k = Struc_KeyValue_int(aStSets[handle] , "@k");
int d = Struc_KeyValue_int(aStSets[handle] , "@d");
int sl = Struc_KeyValue_int(aStSets[handle] , "@sl");
double pr = Struc_KeyValue_double(aStSets[handle] , "@pr");
int me = Struc_KeyValue_int(aStSets[handle] , "@me");
string sy = Struc_KeyValue_string(aStSets[handle] , "@sy");
int tf = Struc_KeyValue_int(aStSets[handle] , "@tf");

int sh = shift;
if(sh<=-1){
sh = Struc_KeyValue_int(aStSets[handle], "@sh");
}


if(useSinhro){
if(tf != Period()){
sh = iBarShift(sy, tf, iTime(sy, 0, sh));
}
}

double stoh = 0.0;
if(line == ST_MODE_AVG){
stoh = (iStochastic(sy,tf,k,d,sl,me,pr,MODE_MAIN,sh) + iStochastic(sy,tf,k,d,sl,me,pr,MODE_SIGNAL,sh))/2;
}else{
stoh = iStochastic(sy,tf,k,d,sl,me,pr,line,sh);
}

stoh = Norm_symb(stoh, "", dgt);
return(stoh);
}
[/code]
МедальКубок
Сообщений: 536

iSth_getArray


Возвращает массив линии индикатора из 3-х элементов.


[code=php]
int iSth_getArray(int h, double &a[], int l=MODE_MAIN, int shift = -1, double def=-1/** если > -1, то заполняет массив переданным значением*/){
/**
\version 0.0.0.1
\date 2013.07.17
\author Morochin Artiom
\details Возвращает массив линии индикатора из 3-х элементов.
\internal
>Hist:
@0.0.0.1@2013.07.17@artamir [] iSth_getArray
>Rev:0
*/

ArrayResize(a,0); //Очистили массив.
int ROWS = 0; //Начальное количество элементов.

for(int i = shift-1; i<= shift+1; i++){
ROWS++;
ArrayResize(a,ROWS);
if(def==-1){
a[ROWS-1]=iSth_get(h, l, i);
}else{
a[ROWS-1]=def;
}
}

return(ROWS);
}
[/code]
МедальКубок
Сообщений: 536

iSth_Cross


Определяем, было ли на баре с заданным индексом пересечение значений быстрого и медленного массива
Возвращает статус пересечения. (0: нет пересечения, 1: пересечение снизу вверх, 2: пересечение сверху вниз)

[code=php]
int iSth_Cross( double &f[] /** быстрый массив */
, double &s[] /** медленный массив */
, int shift=2 /** индекс бара для проверки пересечения */){
/**
\version 0.0.0.2
\date 2013.07.25
\author Morochin Artiom
\details Определяем, было ли на баре с заданным индексом пересечение значений быстрого и медленного массива
Возвращает статус пересечения. (0: нет пересечения, 1: пересечение снизу вверх, 2: пересечение сверху вниз)
\internal
>Hist:
@0.0.0.2@2013.07.25@artamir [] изменились определения.
@0.0.0.1@2013.07.17@artamir [] iSth_Cross
>Rev:0
*/

double f3=Norm_symb(f[shift+1],"",2), f2=Norm_symb(f[shift],"",2), f1=Norm_symb(f[shift-1],"",2);
double s3=Norm_symb(s[shift+1],"",2), s2=Norm_symb(s[shift],"",2), s1=Norm_symb(s[shift-1],"",2);

int status = ST_CRNONE;

if(f3s2){
status = ST_CRUP;
}

if(f3>s3 && f2 status = ST_CRDW;
}

if(f2==s2){
if(f3s1){
status = ST_CRUP;
}

if(f3>s3 && f1 status = ST_CRDW;
}
}

return(status);

}
[/code]
МедальКубок
Сообщений: 536

iSth_CrossMainSignal


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

[code=php]
int iSth_CrossMainSignal(int h, int shift = 1){
/**
\version 0.0.0.1
\date 2013.07.17
\author Morochin Artiom
\details Проверяет, если на баре с заданным индексом было пересечение главной и сигнальной линий
\internal
>Hist:
@0.0.0.1@2013.07.17@artamir [] iSth_CrossMainSignal
>Rev:0
*/

double f[];
double s[];

int ROWS_f = iSth_getArray(h, f, MODE_MAIN, shift);
int ROWS_s = iSth_getArray(h, s, MODE_SIGNAL, shift);
return(iSth_Cross(f,s,1));
}

[/code]
МедальКубок
Сообщений: 536

iSth_CrossMainLevel


Пересечение основной линии с заданным уровнем.

[code=php]
int iSth_CrossMainLevel(int h, int l=80 /** exemple 80*/, int shift=1){
/**
\version 0.0.0.0
\date 2013.07.17
\author Morochin Artiom
\details Пересечение основной линии с заданным уровнем
\internal
>Hist:
>Rev:0
*/

double f[];
double s[];

int ROWS_f = iSth_getArray(h, f, MODE_MAIN, shift);
int ROWS_s = iSth_getArray(h, s, 0, 0, l);
return(iSth_Cross(f,s,1));

}
[/code]
МедальКубок
Сообщений: 536

Оглавление


sysOther.mqh


В библиотеке будут собираться функции, которые пока не вошли в состав ни одной библиотеки.

version 0.0.0.3
date 2013.08.02

Обновление связанное с изменениями в библиотеке sysStructure.mqh

Процедуры и функции



int StringToArray
Разбивает строку на подстроки разделителем. если разделителя нет, то в массиве возврящается строка.

double iif
Если условие = true, то возвращается второй параметр, иначе возвращается третий параметр.

string AddSymbolsRight
Увеличивает строку до заданной длины заданным символом.

string AddSimbolsLeft
Увеличивает строку до заданной длины заданным символом.

string StringReplace
Заменяет подстроку поиска на заменяемое значение в исходной строке.

color StringToColor
Возвращает цвет по его символьному представлению

string UCase
Переводит строку в верхний регистр

Примеры использования


StringReplace

Прикрепленные файлы:
sysOther_or0vn.mqh | 4.35 Кб | Скачали: 360
Редактировалось: 13 раз (Последний: 22 августа 2013 в 12:58)
МедальКубок
Сообщений: 536

StringToArray


Разбивает строку на подстроки разделителем. если разделителя нет, то в массиве возврящается строка.

[code=php]
int StringToArray(string &a[], string s, string del = ";"){
/**
\version 0.0.0.1
\date 2013.06.12
\author Morochin Artiom
\details Разбивает строку на подстроки разделителем. если разделителя нет, то в массиве возврящается строка.
\internal
>Hist:
@0.0.0.1@2013.06.12@artamir [] StringToArray
>Rev:0
*/

int pR = StringFind(s, del, 0);
int ROWS = ArrayRange(a,0);
int lastROW = ROWS-1;
if(pR > -1){
ROWS = ROWS + 1;
ArrayResize(a, ROWS);

lastROW++;
a[lastROW] = StringSubstr(s, 0, pR);
s=StringSubstr(s, pR+1, StringLen(s)-pR+1);
StringToArray(a, s, del);
}else{
ROWS = ROWS + 1;
ArrayResize(a, ROWS);

lastROW++;
a[lastROW] = s;
return(ROWS);
}
}
[/code]
МедальКубок
Сообщений: 536

AddSymbolsRight


Увеличивает строку до заданной длины заданным символом.

[code=php]
string AddSymbolsRight(string s, int len, string sy=" "){
/**
\version 0.0.0.1
\date 2013.08.02
\author Morochin Artiom
\details Увеличивает строку до заданной длины заданным символом.
\internal
>Hist:
@0.0.0.1@2013.08.02@artamir [] AddSymbolsRight
>Rev:0
*/

int counts = len - StringLen(s);

if(counts <= 0){return(s);}

for(int i=0; i s=s+sy;
}

return(s);
}

[/code]
МедальКубок
Сообщений: 536

StringReplace


Заменяет sfind на srep в строке str.

* Исправлено зацикливание, если sfind = srep

[code=php]
string StringReplace(string str, string sfind, string srep){
/**
\version 0.0.0.2
\date 2013.08.06
\author Morochin Artiom
\details Заменяет sfind на srep в строке str.
\internal
>Hist:
@0.0.0.2@2013.08.06@artamir [*] Исправлено зацикливание, если sfind = srep
@0.0.0.1@2013.08.06@artamir [] StringReplace
>Rev:0
*/

if(sfind == srep){
return(str);
}

bool isFind = true;

while(isFind){
int start_pos = StringFind(str, sfind);
int end_pos = start_pos+StringLen(sfind);

if(start_pos < 0){
isFind = false;
return(str);
}

string str_left = "";
if(start_pos > 0){
str_left = StringSubstr(str,0,start_pos);
}

string str_right = StringSubstr(str, end_pos);

str = str_left+srep+str_right;
}

return(str);
}
[/code]
Редактировалось: 1 раз (Последний: 6 августа 2013 в 18:25)
МедальКубок
Сообщений: 536

Struc_setValue


Устанавливает значение, соответствующее ключу в строку str возвращает измененную строку.

[code=php]
string Struc_setValue(string str, string key = "p", string value = "0", string del = "@"){
/**
\version 0.0.0.1
\date 2013.08.02
\author Morochin Artiom
\details Устанавливает значение, соответствующее ключу в строку str
возвращает измененную строку.
\internal
>Hist:
@0.0.0.1@2013.08.02@artamir [] Struc_setValue
>Rev:0
*/

key = StringReplace(key,del,"");
string lkey = del+key;
int start_pos = StringFind(str, lkey);

if(start_pos == -1){
str = str+lkey+value;
return(str);
}

string old_value = Struc_KeyValue_string(str, lkey);

str = StringReplace(str, lkey+old_value, lkey+value);

return(str);
}
[/code]
МедальКубок
Сообщений: 536

Пример использования


StringReplace



[code=php]
string s = "String@To@Replace";
s = StringReplace(s, "@", " ");//"String To Replace"
[/code]
Редактировалось: 1 раз (Последний: 2 августа 2013 в 18:22)
МедальКубок
Сообщений: 536

Пример использования
Struc_setValue



[code=php]
string s = "@vr5";
s = Struc_setValue(s,"vr",10);//"@vr10"
s = Struc_setValue(s,"l",5);//"@vr10@l5"
[/code]
МедальКубок
Сообщений: 536

AddSymbolsLeft


Увеличивает строку до заданной длины заданным символом.

[code=php]
string AddSymbolsLeft(string s, int len, string sy=" "){
/**
\version 0.0.0.1
\date 2013.08.02
\author Morochin Artiom
\details Увеличивает строку до заданной длины заданным символом.
\internal
>Hist:
@0.0.0.1@2013.08.02@artamir [] AddSymbolsRight
>Rev:0
*/

int counts = len - StringLen(s);

if(counts <= 0){return(s);}

for(int i=0; i s=sy+s;
}

return(s);
}
[/code]
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.

← Назад