Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2019, 12:45   #1
IaNebaba
Новичок
Джуниор
 
Регистрация: 25.12.2018
Сообщений: 2
По умолчанию Pascal

Помогите написать код для решения задач с этой формулой: L=(2^(n-m))/(m!*(n-m)!)

Последний раз редактировалось IaNebaba; 15.01.2019 в 12:51.
IaNebaba вне форума Ответить с цитированием
Старый 15.01.2019, 21:57   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Как принято здесь говорить - наваяй что-нибудь, а мы поправим.
Опиши переменные, ввод-вывод, а уж потом формулу в середку воткнуть - хоть попытайся.
Даю подсказку: степень - через Exp(Ln(2)*(n-m)) факториал - через самописную функцию, можно рекурсивную.
Что это я словами мудреными мозг тра'хаю, короче - пару пива - и во фриланс .
Ох, губит меня моя доброта. Держи решение Результат, к примеру для
n=5 m=3 будет 0,33333...
За подробностями - к gaev43@inbox.ru
И хорошо, что Не Баба - гусары с ба'бов денег пива не берут.
Эх, мало я зашумил инеем картинку - прочтет, разберет - и плакали мои пару пива
Изображения
Тип файла: jpg F.jpg (28.1 Кб, 56 просмотров)

Последний раз редактировалось digitalis; 15.01.2019 в 23:08.
digitalis вне форума Ответить с цитированием
Старый 16.01.2019, 13:11   #3
IaNebaba
Новичок
Джуниор
 
Регистрация: 25.12.2018
Сообщений: 2
По умолчанию

Я отредактировал формулу L=(n!*2^(n-m))/(m!*(n-m)!).
С ее помощью вычисляются многомерные грани n-мерных кубов.
Изображения
Тип файла: jpg 15476333755136104072491122458168.jpg (83.3 Кб, 116 просмотров)
IaNebaba вне форума Ответить с цитированием
Старый 16.01.2019, 13:43   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от IaNebaba Посмотреть сообщение
С ее помощью вычисляются многомерные грани n-мерных кубов.
- а что значит "вычисляются многомерные грани многомерных кубов"? Можно вычислить площадь, объем или длину грани.
Digitalis, а почему качество картинки такое плохое?
Cuprum5 вне форума Ответить с цитированием
Старый 16.01.2019, 13:50   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А вы его пост до конца прочитайте и может быть поймете.
p51x вне форума Ответить с цитированием
Старый 16.01.2019, 14:21   #6
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Код:
Program HelloWorld;
Var B, Q, n, m: Integer;
    L: Double;
Function Factorial(x:Integer):Integer;
Var F: Integer;
Begin
  Factorial := 1;
  For F:=2 to x do
        Factorial := Factorial*F;      
End;

Begin
  WriteLn('Hello, world!');
  WriteLn('Number n = ');    
  ReadLn(n);
  WriteLn('Number m = ');    
  ReadLn(m);
  B := n;
  Q := Factorial(B);
  WriteLn('Factorial(', B ,') = ', Q);      
  
  L := (Factorial(n)*Exp(Ln(2)*(n-m)))/(Factorial(m)*Factorial(n-m));
  WriteLn('L = ', L);
End.
https://rextester.com/RXIE77227
Cuprum5 вне форума Ответить с цитированием
Старый 16.01.2019, 14:49   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

сдохнет для n>12
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.01.2019, 15:18   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Ну так поскольку результат все равно float, факториал можно реализовать как Extended. Вот и Алексей_2012 того же мнения. Хотя если строго по определению, то факт. - целочисленная функция. Но для данной задачи подойдет как_бы_факториал:Extended
Эх, убили бузинес на корню, так на пару пива расчитывал
Поскольку после уточнения ТС-ом своих хотелок прорисовалось число сочетаний из n по m, то возможности "чистого" факториала расширились. И если считать
Код:
   L := 1 ; 
   for i := n downto (n-m+1)  do L := L * i ;
   a := L/Fact(m) ;
то диапазон "невылетаемости" гораздо расширится. Например, С из 1000 по 3 - пара пустяков, да хоть на арифмометре "Феликс".
Такой вот простор для полета мысли над простой задачкой.

Последний раз редактировалось digitalis; 16.01.2019 в 16:08.
digitalis вне форума Ответить с цитированием
Старый 16.01.2019, 15:46   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

а я решил заморочиться, вроде не должно сдохнуть при возврате real

Код:
program formula;


function fac_k(f: word): real;
var
  proizzved: real;
begin
  
  if (f > 0) then begin
    proizzved := 1;
    
    for f := f downto 1 do
      proizzved := proizzved * f;
    
    result := proizzved;
  end else result := 1;
  
end;


function stpn(chislo, stp: integer): real;
var
  znak: boolean;
  res: real;
begin
  znak := false;
  res := 1;
  if (stp = 0) then result := 1;
  
  if (stp < 0) then begin znak := true; stp := -stp; end;
  
  while(stp <> 0) do 
  begin
    res := res * chislo;
    stp := stp - 1;
  end;
  if (znak) then result := 1 / res else result := res;   
end;


function itog(n, m: integer): real;
begin
  result := (stpn(2, n - m)) / (fac_k(m) * fac_k(n - m));
end;


var
  n, m: integer;

begin
  
  writeln('Welcome! Input N and M...');
  write('N = ');
  readln(n);
  write('M = ');
  readln(m); 
  
  
  if((n = 0) and (m = 0)) then writeln('ITOG L=1') else 
  if ((n - m) >= 0) then   
    writeln('itog: L = ', itog(n, m)) else writeln('Raznost N and M > or = 0');
  
end.
спасибо=весы
from dark to light)

Последний раз редактировалось Алексей_2012; 16.01.2019 в 15:51.
Алексей_2012 вне форума Ответить с цитированием
Старый 16.01.2019, 16:25   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А если так считать число сочетаний, то не переполнится и для достаточно больших n, а еще int64 есть
Код:
function c(n,m: Integer): Integer;
var i: Integer;
begin
  Result:=1;
  for i:=1 to m do Result:=Result*(n-i+1) div i;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo Pascal/Free Pascal/PascalABC.NET как новый инструмент экстрасенсов Biohazard333 Свободное общение 5 25.09.2016 12:25
pascal abc, pascal turbo. выборка данных из одного .txt в другой ТипичныйСтудент Помощь студентам 6 27.04.2013 15:29
Задача turbo pascal на тему: файлы с произвольным доступом в Pascal ExCiTeC Паскаль, Turbo Pascal, PascalABC.NET 0 28.01.2013 20:36
Программы в Pascal, среда pascal ABC. Лабораторные работы Одинокая Волчица Фриланс 8 10.02.2012 20:09
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28