Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
получение целого результата и остатка при делении и время
BarD Дата: Четверг, 28.08.2014, 12:24:51 | Сообщение # 1
Сообщений: 943
Репутация: 137 [ +/- ]
Знаю, что вопрос глупый. Как можно получить целую часть результата от деления и остаток? В pascal функции mod и div использовались для этого. А в Pawn?

И второй вопрос. У нас есть некоторое количество секунд (пусть будет 153). Как их преобразовать в вид "Часы:минуты:секунды"?

Добавлено (28.08.2014, 12:24:51)
---------------------------------------------
Вопрос решен. Помог: R1KO.

1)
Код
a = b % c;

в результате, в переменной "а" будет записан остаток от деления b на c. Например:
Код
a = 15 % 4;

В "а" будет 3.

2) Функция, переводящая время из секунд в Дни, Часы, Минуты, Секунды.

Код
stock bool:FriendlyTime(time_s, String:str_ftime[], str_ftime_len, bool:compact=true)
{
    decl String:days_pf[16];
    decl String:hrs_pf[16];
    decl String:mins_pf[16];
    decl String:secs_pf[16];

    if(compact)
    {
      days_pf = "д";
      hrs_pf = "ч";
      mins_pf = "м";
      secs_pf = "с";
    }
    else
    {
      days_pf = " Дней";
      hrs_pf = " Часов";
      mins_pf = " Минут";
      secs_pf = " Секунд";
    }

    if(time_s < 0)
    {
      str_ftime[0] = '\0';
      return(false);
    }

    new days = time_s/86400;
    new hrs = (time_s/3600)%24;
    new mins = (time_s/60)%60;
    new secs = time_s%60;

    if(time_s < 60)
      Format(str_ftime, str_ftime_len,
             "%u%s",
             secs, secs_pf);
    else
    if(time_s < 3600)
      Format(str_ftime, str_ftime_len,
             "%u%s %u%s",
             mins, mins_pf, secs, secs_pf);
    else
    if(time_s < 86400)
      Format(str_ftime, str_ftime_len,
             "%u%s %u%s",
             hrs, hrs_pf, mins, mins_pf);
    else
      Format(str_ftime, str_ftime_len,
             "%u%s %u%s",
             days, days_pf, hrs, hrs_pf);

    return(true);
}


time_s - время в секундах, str_ftime - строка, в которой будет записан результат, str_ftime_len - длина строки, compact - если true, то будет писать "5 д, 20 ч, 4 м, 2 с", иначе будет полными словами.


Сообщение отредактировал BarD - Четверг, 28.08.2014, 12:25:20
 
хвостег Дата: Четверг, 28.08.2014, 14:14:28 | Сообщение # 2
Сообщений: 161
Репутация: 53 [ +/- ]
Уотакуот
Код

new String:_t_p[][] = {
    "д", "ч", "м", "c",
    "Дней", "Часов", "Минут", "Секунд"
}

stock bool:FriendlyTime(time_s, String:str_ftime[], str_ftime_len, bool:long = false)
{
  if(time_s < 0)
   return false;
   
  new time[4];
  time[0] = time_s / 86400;
  time[1] = (time_s / 3600) % 24;
  time[2] = (time_s / 60) % 60;
  time[3] = time_s % 60;
   
  new pos = -1;
   
  if(time[0])
   pos = 0;
  else if(time[1])
   pos = 1;
  else if(time[2])
   pos = 2;
  else
   pos = 3;
   
  new c_i = 4 * _:long;
   
  str_ftime[0] = '\0';
   
  for(new i = pos; i < 4; i++)
   Format(str_ftime, str_ftime_len, i > 2 ? "%s%d %s" : "%s%d %s ", str_ftime, time[i], _t_p[c_i+i]);

  return true;
}


Сообщение отредактировал хвостег - Четверг, 28.08.2014, 14:33:50
 
BarD Дата: Четверг, 28.08.2014, 17:31:44 | Сообщение # 3
Сообщений: 943
Репутация: 137 [ +/- ]
Спасибо!)
 
  • Страница 1 из 1
  • 1
Поиск: