• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

В чем ошибка?

  • Автор темы Автор темы alex9
  • Дата начала Дата начала

alex9

Ученик
Регистрация
18 Май 2013
Сообщения
6
Реакции
0
Баллы
0
В чем ошибка?

Дано натурально число 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.
 
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
И потом, в Ваших циклах я совсем не вижу выборки "через одно". Думайте. Удачи!
 
тут имелось в виду что для чисел от 1 до N нечетных и четных
 
тут имелось в виду что для чисел от 1 до N нечетных и четных
Я понял, что "имелось в виду". А вот реализация - увы. Хорошо, я сейчас напишу Вам код. Попробуйте разобраться.
 
Ну вот:
Код:
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.
 
спасибо, очень сильно помогли
 
А что надо изменить если брать от промежутка от N до M?
 
А что надо изменить если брать от промежутка от 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.
 
Назад
Сверху