Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   В чем ошибка? (http://www.tehnari.ru/f43/t88365/)

alex9 18.05.2013 21:33

В чем ошибка?
 
Дано натурально число n. Вычеслить
1*3*5*..*n для нечетных n
N!!=
2*4*6*..*n для четных
Вот мой код:
var
a, n, sum1, sum2:integer;
begin
readln(n);
sum1:=1;
sum2:=1;
if a mod 10 = 2 or 4 or 6 or 8 or 0
then
for a:=1 to n do
begin
sum1:=a*sum1;
end
else
for a:=1 to n do
begin
sum2:=a*sum2;
end;
writeln(sum1, ' ', sum2);
end.

Vladimir_S 18.05.2013 21:50

Цитата:

Сообщение от alex9 (Сообщение 909022)
if a mod 10 = 2 or 4 or 6 or 8 or 0

Так, это еще что за...?
Во-первых, почему а? Значение этого числа еще не определено. Вероятно, подразумевается n. Во-вторых, что за дикая конструкция? Если Вам надо проверить число n на четность, то это делается так: если n - четное, то
(n mod 2)=0
для нечетного числа
(n mod 2)=1
это, правда, если n - положительное. Если же нечетное n может быть и отрицательным, то в любом случае
(n mod 2)<>0
И потом, в Ваших циклах я совсем не вижу выборки "через одно". Думайте. Удачи!

alex9 18.05.2013 21:53

тут имелось в виду что для чисел от 1 до N нечетных и четных

Vladimir_S 18.05.2013 21:58

Цитата:

Сообщение от alex9 (Сообщение 909038)
тут имелось в виду что для чисел от 1 до N нечетных и четных

Я понял, что "имелось в виду". А вот реализация - увы. Хорошо, я сейчас напишу Вам код. Попробуйте разобраться.

Vladimir_S 18.05.2013 22:10

Ну вот:
Код:

Var
 N,i:Byte;
 P1,P2:Real;
Begin
 Write('N = ');
 Readln(N);
 P1:=1;
 P2:=1;
 for i:=1 to (N div 2) do
  begin
  P1:=P1*(2*i-1);
  P2:=P2*(2*i);
  end;
 If (N mod 2)=1 then P1:=P1*N;
 Writeln('P1 = ',P1:0:0,'    P2 = ',P2:0:0);
 Readln
End.


alex9 18.05.2013 22:13

спасибо, очень сильно помогли

alex9 18.05.2013 22:32

А что надо изменить если брать от промежутка от N до M?

Vladimir_S 18.05.2013 23:18

Цитата:

Сообщение от alex9 (Сообщение 909060)
А что надо изменить если брать от промежутка от 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.



Часовой пояс GMT +4, время: 00:03.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.