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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 20:22   #1
profi15
Новичок
Джуниор
 
Регистрация: 24.02.2013
Сообщений: 2
По умолчанию написать программу

написать программу вычисления произведения n чисел т.е 1*2*3*...*n причем, если n=0 или n=1, то произведение равно 1. число множителей не должно превышать 33
profi15 вне форума Ответить с цитированием
Старый 24.02.2013, 20:38   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

если еще актуально стучи в аську
fbus вне форума Ответить с цитированием
Старый 24.02.2013, 20:38   #3
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Наработки и проблему в студию!
hon вне форума Ответить с цитированием
Старый 24.02.2013, 20:56   #4
profi15
Новичок
Джуниор
 
Регистрация: 24.02.2013
Сообщений: 2
По умолчанию

Код:
begin
if n=15 then
begin
a:=7200*56*99*12*13*14*15;
end
else
begin
if n=16 then
begin
a:=7200*56*99*12*13*14*15*16;
end
else
begin
if n=17 then
begin
a:=7200*56*99*12*13*14*15*16*17;
end
else
begin
if n=18 then
begin
a:=7200*56*99*12*13*14*15*16*17*18;
end
else
begin
if n=19 then
begin
a:=7200*56*99*12*13*14*15*16*17*18*19;
end
else
begin
if n=20 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19;
end
else
begin
if n=21 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21;
end
else
begin
if n=22 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22;
end
else
begin
if n=23 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23;
end
else
begin
if n=24 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24;
end
else
begin
if n=25 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25;
end
else
begin
if n=26 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26;
end
else
begin
if n=27 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27;
end
else
begin
if n=28 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28;
end
else
begin
if n=29 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29;
end
else
begin
if n=30 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29*30;
end
else
begin
if n=31 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29*30*31;
end
else
begin
if n=32 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29*30*31*32;
end
else
begin
if n=33 then
begin
a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29*30*31*32*33;
end
else
begin
a:=0
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end.
Проблема в длине кода и Паскаль выдает ошибку Переполнение а арифметической операции

P.S Это вторая половина кода

Последний раз редактировалось Stilet; 24.02.2013 в 21:32. Причина: P.S
profi15 вне форума Ответить с цитированием
Старый 24.02.2013, 21:26   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ай-да профи. Не знает что такое факториал и команды цикла на паскале. Да и 33! на паскале так просто не высчитать, нужно программировать арифметику с длинными числами
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.02.2013, 21:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Красивая елочка )
А может всетки циклом стоит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2013, 21:35   #7
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Красивая елочка )
А может всетки циклом стоит?
Только хотел написать)))
PavelDD вне форума Ответить с цитированием
Старый 24.02.2013, 21:35   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Может в юмор забрать?
Код:
var
	f : Int64;
	k, n : Byte;
begin
	ReadLn (n);
	k := 2;
	f := 1;
	while k <= n do begin
		f := f * k;
		Inc (k)
	end;
	WriteLn (f)
end.
Хорошо папочка со своими задачками для начинающих на рабочем столе..

И как уже заметил Аватар, для 33 Вам надо реализовывать длинную арифметику.. Выше представленный код работает только до 21 числа.
Poma][a вне форума Ответить с цитированием
Старый 24.02.2013, 21:36   #9
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Вот это код
Проффи, держи найденную где-то когда-то на просторах сети длинную арифметику, подшлифуешь самостоятельно
Код:
const
 BigNumber = 100;
type
  TBig = array [1..BigNumber] of integer;
var
  m: tbig;

procedure F(var F: TBig; Value: Integer);
var
  i, k, q, z, j: integer;
begin
  k := 0;
  for i := 1 to BigNumber - 1 do F[i] := 0;
  F[BigNumber] := 1;
  for i := 2 to Value do begin
    j := BigNumber;
    while j - 1 > 0 do begin
      q := F[j]*i;
      z := q mod 10;
      F[j] := z + k;
      k := q div 10;
      k := k + F[j] div 10;
      F[j] := F[j] mod 10;
      j := j - 1;
    end;
  end;
end;

var 
  i:integer;
 begin
   f(m, 33);
   for i := 1 to BigNumber do write(m[i]);
   readln
 end.
eoln вне форума Ответить с цитированием
Старый 24.02.2013, 23:42   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Цитата:
Сообщение от profi15 Посмотреть сообщение
Проблема в длине кода
Профессионалов длинна кода не должна останавливать
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на множества.Написать программу не позволяющую вводить буквы русского алфавита.(написать подпрограммой используя процедуры ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 3 09.02.2013 13:53
Написать программу. Salabasama Помощь студентам 2 31.03.2012 10:29
Написать программу для перевода из 16-ричной системы счисления в 10-тичную, использовать процедурую(написать Delphi) BLADIMIR Помощь студентам 3 07.09.2011 16:35