На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Вывод результатов -> "Не точное решение" Win 7 XE3 , Как правильно вывести результаты?
    Всем привет! :)
    Есть memo1 и button1.
    Попробовал вот такое посчитать и "ввести результаты".
    ExpandedWrap disabled
      function factorial(n: int64): int64;
      begin
      if n > 1
      then factorial := n * factorial(n-1) // функция вызывает сама себя
      else factorial:= 1;  // факториал 1 равен 1
      end;
       
      function AllPuth(grid_size:int64):Extended;
      var
      possible_right_moves:int64;
      possible_down_moves:int64;
      all_possible_moves:int64;
      begin
      possible_right_moves:=grid_size;
      possible_down_moves:=grid_size;
      all_possible_moves:=grid_size*2;
        result:=  (factorial(all_possible_moves) / (factorial(possible_right_moves) * factorial(possible_down_moves)))
      end;
       
      procedure TForm1.Button1Click(Sender: TObject);
      var i:integer;
      begin
      for I := 2 to 20 do
        
      memo1.Lines.Add(IntToStr(I)+' '+FloatTOStr( AllPuth(I ) ) )
      //memo1.Lines.Add( FloatToStrF(  AllPuth(I ), ffNumber, 8, 2))
      end;

    Скорее всего и так и есть "Я чего-то не понимаю" :lol: :blush: :scratch:

    Даёт следующие результаты, после 10 (выходит -> "не точное решение")
    ExpandedWrap disabled
      2 6
      3 20
      4 70
      5 252
      6 924
      7 3432
      8 12870
      9 48620
      10 184756
      11 -784,924840609962
      12 -34,1487948447273
      13 -0,833832867615695
      14 1455,00433013791
      15 9,49669148927218
      16 -1,70640412583304
      17 -0,542800478587961
      18 -1,20298327072222
      19 -0,551555487897427
      20 0,0138221794040326


    Вопрос: "Как сделать правильно?", то есть Должно быть:

    ExpandedWrap disabled
      2 -->  6
      3 -->  20
      4 -->  70
      5 -->  252
      6 -->  924
      7 -->  3432
      8 -->  12870
      9 -->  48620
      10 -->  184756
      11 -->  705432
      12 -->  2704156
      13 -->  10400600
      14 -->  40116600
      15 -->  155117520
      16 -->  601080390
      17 -->  2333606220
      18 -->  9075135300
      19 -->  35345263800
      20 -->  137846528820


    Заранее спасибо :thanks:
      Переведи все на extended, факториал 22, а на 11 шаге ты 11 умнодаешь на 2 и вычисляешь факториал, уже превышает int64 на несколько порядков
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0328 ]   [ 16 queries used ]   [ Generated: 25.04.24, 17:17 GMT ]