Показать сообщение отдельно
Старый 18.05.2013, 23:18   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от alex9 Посмотреть сообщение
А что надо изменить если брать от промежутка от N до M?
Вообще-то тогда задача довольно резко усложняется. Например, можно так:
Код:
Var
 N,M,i:Byte;
 P1,P2:Real;
Begin
 Write('N = ');
 Readln(N);
 Write('M = ');
 Readln(M);
 P1:=1;
 P2:=1;
 If ((N mod 2)=0) and ((M mod 2)=0) then
  begin
   for i:=(N div 2) to (M div 2) do
    P2:=P2*(2*i);
   for i:=(N div 2) to (M div 2)-1 do
    P1:=P1*(2*i+1);
  end
 else
 If ((N mod 2)=0) and ((M mod 2)=1) then
  begin
   for i:=(N div 2) to (M div 2) do
    P2:=P2*(2*i);
   for i:=(N div 2) to (M div 2) do
    P1:=P1*(2*i+1);
  end
 else
 If ((N mod 2)=1) and ((M mod 2)=0) then
  begin
   for i:=(N div 2)+1 to (M div 2) do
    P2:=P2*(2*i);
   for i:=(N div 2) to (M div 2)-1 do
    P1:=P1*(2*i+1);
  end
 else
 If ((N mod 2)=1) and ((M mod 2)=1) then
  begin
   for i:=(N div 2)+1 to (M div 2) do
    P2:=P2*(2*i);
   for i:=(N div 2) to (M div 2) do
    P1:=P1*(2*i+1);
  end;
 Writeln('P1 = ',P1:0:0,'     P2 = ',P2:0:0);
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070