04:17
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: AXE, Weddew  
Что лучше switch или for
VagrantДата: Четверг, 28.04.2011, 19:06 | Сообщение # 1
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус:
Доброго времени суток. Есть 2 варианта как сделать определённую идею. Пример кода:
Вариант №1:
Code
stock KGSet(kg)
{
  switch(kg)
  {
   case 100: { kg = 1000; return kg;}
   case 110: { kg = 1100; return kg;}
   case 120: { kg = 1200; return kg;}
   case 130: { kg = 1300; return kg;}
   case 140: { kg = 1400; return kg;}
   case 150: { kg = 1500; return kg;}
   case 160: { kg = 1600; return kg;}
   case 170: { kg = 1700; return kg;}
   case 180: { kg = 1800; return kg;}
   case 190: { kg = 1900; return kg;}
   case 200: { kg = 2000; return kg;}
   case 210: { kg = 2100; return kg;}
   case 220: { kg = 2200; return kg;}
   case 230: { kg = 2300; return kg;}
   case 240: { kg = 2400; return kg;}
   case 250: { kg = 2500; return kg;}
   case 260: { kg = 2600; return kg;}
   case 270: { kg = 2700; return kg;}
   case 280: { kg = 2800; return kg;}
   case 290: { kg = 2900; return kg;}
   case 300: { kg = 3000; return kg;}
  }
}

Вариант №2:
Code
stock KGSet(kg)
{
  new
  KG1[] = {100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300},
  KG2[] = {1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000},
  w,z;

  for(z=sizeof(KG1),w=0;w<z;w++) if(kg == KG1[w]) {kg = KG2[w]; break;}
  return kg;
}

Какой из вариантов будет лучшим при очень частом использовании. Допустим что с интервалом в 300 мс. если чисел будет не 20 а к примеру 60.



Человек учась ходить падает, и только падая, он учится ходить!
Мои работы:
[GM] W.F.S.A. V. 1.0 - 100%
[GM] San Fierro Enigmatic (TDM) V. 1.0 - 100%
[FS] Clan House V. 1.0 - 100%
[FS] Save Car Tun System V. 1.0 - 100%
[FS] Vagrant Anti-CapsLock V. 2.1 - 100%
[FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100%
[APP] SA-MP Interior Viewer V. 1.0 - 100%

Принимаю заказы на помощь в скриптинге!
toneysixДата: Четверг, 28.04.2011, 19:25 | Сообщение # 2
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
switch работает быстрее, чем операторы условия, это доказанный мною и MX_MASTER факт.
Но здесь, я бы использован for, в силу того, что всегда нужно создавать механизм, который бы не зависел от функции, то есть ты добавил что-то новое в массив, и это было актуальным, нежели ты будешь обращаться в switch и добавлять новые кейсы. Определенно, switch будет быстрее, жаль, что в павн в switch'е нельзя использовать в кейсах переменные константы.
P.S: Твои функции можно также оптимизировать, у тебя есть лишние действия, к тому же, это вполне можно перевести на макросы, будет также по-быстрее
Первая функция:
#define KGSet(%0) (%0*10)
Можно из чисел для возврата строить алгоритм, в данном случаи я его построил, если же будет иначе, придется строить по-другому, но в целом все так.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Четверг, 28.04.2011, 19:32
stepmexДата: Четверг, 28.04.2011, 19:59 | Сообщение # 3
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
А ничего сто это две абсолютно разне вещи предназначенные для разных целей?


И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
Dima-kunДата: Четверг, 28.04.2011, 20:01 | Сообщение # 4
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
stepmex, да, это разное. Но он спрашивает на конкретном примере. Какой из вариантов будет быстрее и лучше работать.


Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
stepmexДата: Четверг, 28.04.2011, 20:17 | Сообщение # 5
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Quote (toneysix)
это вполне можно перевести на макросы, будет также по-быстрее
чушь собачья.
#define всего навсего служит для удобства програмирования, и скорости он не добавляет. Его цель найти код по шаблону и заменить его другим, все.
Так что что ты напишешь код руками, что по средствам макроса, разницы в скорости не будет!

Добавлено (28.04.2011, 20:17)
---------------------------------------------
так:

Code
KGSet(&kg)
{
kg *= 10;
}



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
toneysixДата: Четверг, 28.04.2011, 20:18 | Сообщение # 6
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
stepmex поспорим что добавляет? Функция все равно занимает время, а это макрос, который заменяется препроцессором, давай сравним время при множественном вызове.
http://best.of.by/paste/d7cc6f7ab
Результат:
Макрос - 5;
Функция - 12;



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Четверг, 28.04.2011, 20:27
stepmexДата: Четверг, 28.04.2011, 20:31 | Сообщение # 7
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
toneysix, для тех кто читает по диагонали, речь не про функции.
Ты видимо не догоняешь что #define KGSet(%0) (%0*10) равносильно записи i *= 10;
Могу тебе и сравнениее устроить:
Code

#define KGSet(%0) (%0*2)
public OnGameModeInit()
{
   new count = GetTickCount(),a = 2;
   for(new i; i < 9000000; i++)
   {
    a = KGSet(a);
   }
   printf("if else: %d (%d)", GetTickCount() - count, a);
   count = GetTickCount();
   a = 2;
   for(new i; i < 9000000; i++)
   {
    a =  a*2;
   }
   printf("switch: %d (%d)", GetTickCount() - count, a);
}

Ты облажался:
Code
[22:25:01] define: 864 (0)
[22:25:02] *: 848 (0)

[22:25:33] define: 868 (0)
[22:25:34] *: 846 (0)

[22:26:04] define: 845 (0)
[22:26:05] *: 838 (0)

Так что бзди больше!


И создал Бог женщину!.. Существо получилось злобное, но симпатичное...

Сообщение отредактировал stepmex - Четверг, 28.04.2011, 20:33
toneysixДата: Четверг, 28.04.2011, 20:32 | Сообщение # 8
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
stepmex я как раз все догоняю в отличии от тебя, ты говорил мне, что это аналог и скорости это не прибавит, в данном случаи целесообразно использовать макрос, так как он будет в два раза быстрее, чем твоя функция, так как функцию ещё надо вызвать и на это тоже идут миллисекунды, именно об этом веду речь я, что ты думаешь я так и не понял. P.S: Ты не веришь что макрос быстрее? Сейчас сделаю лично для тебя скрин, явно ты лукавишь не может функция быть БЫСТРЕЕ, тем более так.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Четверг, 28.04.2011, 20:37
stepmexДата: Четверг, 28.04.2011, 20:35 | Сообщение # 9
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
toneysix, повторяюсь ещё раз, не надо сравнивать 2 разные вещи!
Почему ты сравниваешь замену кода и внешню функцию?!
С внешней функцией конечно будет медленнее, ты посмотри в моем примере с чем я сраниваю макрос, это не функция!



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
toneysixДата: Четверг, 28.04.2011, 20:39 | Сообщение # 10
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
stepmex опять ты мне про это, я тебе говорил именно о функции с макросом, посмотри что ты выше написал цитирую:
Quote
чушь собачья.
#define всего навсего служит для удобства програмирования, и скорости он не добавляет. Его цель найти код по шаблону и заменить его другим, все.
Так что что ты напишешь код руками, что по средствам макроса, разницы в скорости не будет!

Ответил я так полагаю ты на моё сообщение цитирую:
Quote
Твои функции можно также оптимизировать, у тебя есть лишние действия, к тому же, это вполне можно перевести на макросы, будет также по-быстрее

Имеется ввиду быстрее по отношению к функции, читать надо внимательно.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
stepmexДата: Четверг, 28.04.2011, 20:44 | Сообщение # 11
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
toneysix, по отношению к функции да, но макрос скорости не добавляет.


И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
toneysixДата: Четверг, 28.04.2011, 20:46 | Сообщение # 12
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
stepmex я этого и не говорил заметь.


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
VagrantДата: Пятница, 29.04.2011, 12:02 | Сообщение # 13
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус:
toneysix, В итоге вывод из этого следует такой что лучшим вариантом будет макрос. Но если допустим за место цифр 100...3000 будут буквы. То как именно это можно будет написать с помощью макросов? И вообще есть ли где-нибудь русский учебник по написанию макросов в павно?


Человек учась ходить падает, и только падая, он учится ходить!
Мои работы:
[GM] W.F.S.A. V. 1.0 - 100%
[GM] San Fierro Enigmatic (TDM) V. 1.0 - 100%
[FS] Clan House V. 1.0 - 100%
[FS] Save Car Tun System V. 1.0 - 100%
[FS] Vagrant Anti-CapsLock V. 2.1 - 100%
[FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100%
[APP] SA-MP Interior Viewer V. 1.0 - 100%

Принимаю заказы на помощь в скриптинге!


Сообщение отредактировал Vagrant - Пятница, 29.04.2011, 12:03
toneysixДата: Пятница, 29.04.2011, 12:18 | Сообщение # 14
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Vagrant буквы ты имеешь ввиду символы? Символы тоже можно найти по алгоритму, исходя что ты планируешь сделать. На счет учебника я не знаю, у меня есть очень старая книга по C/C++ языку, там очень хорошо приводятся данные, все понятно и подробно написано.


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
VagrantДата: Пятница, 29.04.2011, 16:24 | Сообщение # 15
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус:
toneysix, залей пожалуйста книгу куда-нибудь. А там я уже разберусь как и с символами попробовать.


Человек учась ходить падает, и только падая, он учится ходить!
Мои работы:
[GM] W.F.S.A. V. 1.0 - 100%
[GM] San Fierro Enigmatic (TDM) V. 1.0 - 100%
[FS] Clan House V. 1.0 - 100%
[FS] Save Car Tun System V. 1.0 - 100%
[FS] Vagrant Anti-CapsLock V. 2.1 - 100%
[FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100%
[APP] SA-MP Interior Viewer V. 1.0 - 100%

Принимаю заказы на помощь в скриптинге!
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua