Русское сообщество по скриптингу

Вопросы и обсуждение конкурсов

Новости проекта amx-x.ru
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

Вопросы и обсуждение конкурсов

Сообщение DJ_WEST » 12 янв 2012, 12:03

Тема для обсуждения проводимых конкурсов.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Вопросы и обсуждение конкурсов

Сообщение noo00oob » 26 янв 2012, 17:22

Ага, и получить вызов функции начала раунда столько раз, сколько унас обьектов на карте, гениально.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 394 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Вопросы и обсуждение конкурсов

Сообщение PRoSToTeM@ » 26 янв 2012, 17:22

"Большинство" не значит все. Тут нужен 100% результат в любом случае.
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: Вопросы и обсуждение конкурсов

Сообщение quckly » 26 янв 2012, 18:17

noo00oob, там стоит ограничение и вызовется только 1 раз
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Вопросы и обсуждение конкурсов

Сообщение quckly » 30 янв 2012, 14:14

Категорически не согласен с итогами 3 конкурса:
Первый ответил quckly. Рассмотрим код:

[pawn]
  1.         new source_len=0;

  2.  

  3.         while(source[source_len] != 0)

  4.  

  5.                 ++source_len;
[/pawn]

Мы итак знаем длину исходной строки, потому что она передается в функции в качестве аргумента len. Возможно, это была какая-то доп. проверка, если встречается конец строки 0 где-то внутри строки. Хорошо.


В параметр len передается не длина строки, а ее максимальный размер.
new pad_sumb = min(pad_length - source_len, len - source_len);

Но рассмотрим данный вариант, если len и source_len равняются, а они будут равняться, если конец строки будет в конце строки. Учитывая, что берется минимальное число и то, что len = source_len, то возьмется 0, что по сути уже нарушит вычисления потом.


Теперь, если pad_sumb будет 0, просто никаких изменений для строки не будет. Можно было протестировать перед таким выводом.
+ Мой код лучше всего читается
+ Быстрее всех выполняется
+ Используется 1 функцию, и то я в коментах написал код на который ее можно заменить
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Вопросы и обсуждение конкурсов

Сообщение DJ_WEST » 30 янв 2012, 14:30

Теперь, если pad_sumb будет 0, просто никаких изменений для строки не будет. Можно было протестировать перед таким выводом.

Получается, что при:
[pawn]
  1.         new s_Test[] = "Welcome to amx-x.ru!"

  2.         if (str_pad(s_Test, charsmax(s_Test), 25, ":D", STR_PAD_RIGHT))

  3.                 server_print("%s", s_Test)
[/pawn]
[pawn]
  1. new pad_sumb = min(pad_length - source_len, len - source_len);
[/pawn]
pad_sumb будет 0, потому что len = source_len.
В результате этого мы получим:
"Welcome to amx-x.ru!:D:D:"?
Нет.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Вопросы и обсуждение конкурсов

Сообщение quckly » 30 янв 2012, 17:50

DJ_WEST писал(а):
Теперь, если pad_sumb будет 0, просто никаких изменений для строки не будет. Можно было протестировать перед таким выводом.

Получается, что при:
[pawn]
  1.         new s_Test[] = "Welcome to amx-x.ru!"

  2.         if (str_pad(s_Test, charsmax(s_Test), 25, ":D", STR_PAD_RIGHT))

  3.                 server_print("%s", s_Test)
[/pawn]
[pawn]
  1. new pad_sumb = min(pad_length - source_len, len - source_len);
[/pawn]
pad_sumb будет 0, потому что len = source_len.
В результате этого мы получим:
"Welcome to amx-x.ru!:D:D:"?
Нет.


1. В том коде Результат полюбому не будет больше длине строки "Welcome to amx-x.ru!". Т.к. размер массива s_Test будет равен длине строки + 1 => ну никак ты не получиш "Welcome to amx-x.ru!:D:D:"
2. В pad_sumb будет 0 и строка никак не изменится, т.к. вот условия
[pawn]
  1. sindex = source_len;

  2.  for(new i = 0; sindex < new_len; ++sindex, ++i)
[/pawn]
[pawn]
  1. sindex = 0;

  2.  sindex < pad_sumb;
[/pawn]
Они ничего не сделают со строкой.

Тут есть все необходимые проверки на правильную работу функции.

P.s: нада хоть проверить было код
[pawn]
  1.  new s_Test[] = "Welcome to amx-x.ru!"

  2.         if (str_pad(s_Test, charsmax(s_Test), 25, ":D", STR_PAD_RIGHT))

  3.                 server_print("%s", s_Test
[/pawn]
прежде чем писать, что он выведет.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Вопросы и обсуждение конкурсов

Сообщение DJ_WEST » 30 янв 2012, 20:00

quckly, смысл фукции в том, что она так же, как в Вы должны зарегистрироваться, чтобы видеть ссылки. должна дополнять строку до заданного размера указанной строкой.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Вопросы и обсуждение конкурсов

Сообщение quckly » 30 янв 2012, 20:43

DJ_WEST писал(а):quckly, смысл фукции в том, что она так же, как в Вы должны зарегистрироваться, чтобы видеть ссылки. должна дополнять строку до заданного размера указанной строкой.

Разве она этого не делает?
Есть какие то недочеты?

Добавлено спустя 5 минут 39 секунд:
А я понял, ты наверное хочеш, чтобы
[pawn]
  1.        new s_Test[] = "Welcome to amx-x.ru!"

  2.  

  3.         if (str_pad(s_Test, charsmax(s_Test), 25, ":D", STR_PAD_RIGHT))

  4.  

  5.                 server_print("%s", s_Test)
[/pawn]
в строке s_Test[] было "Welcome to amx-x.ru!:D:D:", а у меня ничего не меняется.
Ну такто функция не может записать данные за пределами массива, тогда она запишет текст непонятно куда, и строка будет до ближайщего 0.
charsmax(s_Test) == 20 и хоть какой большой не будет заданный размер до которого нужно дописать строку, нельзя выйти за пределы отведенной под строку памяти. У нас же не пхп язык где даже строгой типизации нету, чего уж там говорить про динамические строки.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Вопросы и обсуждение конкурсов

Сообщение ejik » 30 янв 2012, 22:07

DJ_WEST писал(а):Рассмотрим код ejik:
[pawn]
  1.         new iMinLen = min ( len, pad_length );

  2.         new iMaxPadStringLen = max ( iMinLen - strlen ( source ), 0 );
[/pawn]
Учитывая, что len < pad_length, то получаем в iMinLen = len.
Затем учитывая, что strlen(source) = len, если строка source имеет 0 в конце строки, то iMaxPadStringLen будет 0. В результате чего произойдет выход из функции потом.
А также непонятно зачем нужен MAX_SOURCE_LENGTH, ведь у нас длина новой строки задается через аргумент функции pad_length.

1. [pawn]
  1. new iMinLen = min ( len, pad_length );
[/pawn]здесь выбираем что меньше: длина строки (ведь я не могу писать за пределы массива) или длина, до которой нужно заполнить строку.
2. [pawn]
  1. new iMaxPadStringLen = max ( iMinLen - strlen ( source ), 0 );
[/pawn]здесь считаем сколько места осталось под pad_string'и. Если место осталось, то вернет кол-во свободных ячеек, если же не осталось, то вернет 0 и следом проверка на эту переменную.
3. MAX_SOURCE_LENGTH нужно для того, чтобы создать массив и скопировать туда исходную строку, с этим согласен - сделано не в лучшем виде.
Аватара пользователя
ejik
 
Сообщения: 249
Зарегистрирован: 01 июл 2010, 14:07
Благодарил (а): 83 раз.
Поблагодарили: 83 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Вопросы и обсуждение конкурсов

Сообщение DJ_WEST » 31 янв 2012, 11:33

Неудачный пример, признаю.
Этот больше подходит:
[pawn]
  1.         new s_Test[128]

  2.         formatex(s_Test, charsmax(s_Test), "Welcome to amx-x.ru!")

  3.        

  4.         if (str_pad(s_Test, strlen(s_Test), 30, ":D", STR_PAD_RIGHT))

  5.                 server_print("%s", s_Test)
[/pawn]
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Пред.След.

Вернуться в Новости

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2