Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 18.05.2013, 21:33   #1 (permalink)
alex9
Новичок
 
Регистрация: 18.05.2013
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию В чем ошибка?

Дано натурально число 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.
alex9 вне форума   Ответить с цитированием

Старый 18.05.2013, 21:33
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот ссылки по которым содержаться темы интересные для вас

Что за ошибка?
Что за ошибка?
Ошибка
Ошибка
Ошибка в МФУ
Ошибка CRC

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

Цитата:
Сообщение от alex9 Посмотреть сообщение
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
И потом, в Ваших циклах я совсем не вижу выборки "через одно". Думайте. Удачи!
Vladimir_S вне форума   Ответить с цитированием
Старый 18.05.2013, 21:53   #3 (permalink)
alex9
Новичок
 
Регистрация: 18.05.2013
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Цитата:
Сообщение от alex9 Посмотреть сообщение
тут имелось в виду что для чисел от 1 до N нечетных и четных
Я понял, что "имелось в виду". А вот реализация - увы. Хорошо, я сейчас напишу Вам код. Попробуйте разобраться.
Vladimir_S вне форума   Ответить с цитированием
Старый 18.05.2013, 22:10   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 18.05.2013, 22:13   #6 (permalink)
alex9
Новичок
 
Регистрация: 18.05.2013
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо, очень сильно помогли
alex9 вне форума   Ответить с цитированием
Старый 18.05.2013, 22:32   #7 (permalink)
alex9
Новичок
 
Регистрация: 18.05.2013
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А что надо изменить если брать от промежутка от N до M?
alex9 вне форума   Ответить с цитированием
Старый 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
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.