интгер на всяк случай ставил тамучто при умножнии 99999999999 на 99999999 же в 5 ячейке массива буит храницца 9*9+9*9+9*9+9*9+9*9=324 что привышат байт, а обьекты ет на любителя , тем более прога не такая большая З.Ы. Если вопросы есть с удовольствием отвечу =)
2~Lexx~ проще, но грамотное использование Integer эффективнее скажется на работе с длинными числами. перейдя в систему исчисления 10000, а лучше с longint в 100000000 количество операций с отдельными элементами массива для одного и того же числа будет в разы меньше. причем 10^n берется исключительно из-за удобства быстрого ввода\вывода таких чисел.
Ну как быэто грамотнее объяснить максимальный объем стека паскаля - 65520 байт. BYte = 1 byte Integer = 2 byte таким образов в весь стек у тебя поместиться 32760 интежеровских переменных и 65520 байтовых. при грамотно организованной функции умножения у тебя бедут одновременно использоваться только соседние разряды - и значение элементов массивов не будет превосходить байтовую величину(компилятор же считает таким образом - это нуно делать на уровне двоичных кодов). К тому же в любом случае у тебя байт будет умножаться на байт быстрее чем два байта на два байта. (если не ошибаюсь где то на 25% быстрее).
на самом деле нельзя написать на паскале программу которая бы высчитывала факториалы даже на половину просто нет такого типа данных в рамки которого можно внести там 33 факториала.... Если только на теории.... я имею ввиду полностью рабочую программу...
ну простите... а как же пользовательские типы данных? а то что я писал- это так пустой звук? попробуй запустить мою програмку - на каких числах она отвалиться, если поставить тип данных extended... 10 байт на элемент - 3,4x10-4932 - 1,1x104932... помоему должно хватить )))
Простите не подумал просто не пользовался ни ризу этим типом данных для того что я делаю (простые школьные и не только задачи ) лонгейта хватало с крышей
Я товю программу не запускал -у мея счас нету паскаля на компе - он у меня исчез далеко на первом курсе. Просто я говою о нецелесообразности твоей программы - у нее и выч сложность на порядок больше моей и она еще не являеться Объектно-ориентированой. К тому же что за бяка - как ты передаешь в процедуру массив, который у тебя число... ну просто омерзительно - надо создать свой тип и передавать ссылку! того типа.
Понимаешь - написать программу, которая рабоатет - подсилу каждому, а вот написать быстро работающую программу, которая при этом жрет мало ресурсов - вот это хинт. И зачем тогда усложнят алгоритм, если в итоге получили медленно работающую программу, с неграмотной передачей в процедуры. Которая ктому же жрет непойми сколько места. Плюс ты ее тестил? Попробуй - что то мне подсказывает, что она непапрет для заявленной 1000!
на 1000! она выдает ответ ~1 cек, компилятор делфи 7, проц атлон 3500+ (на правильность проверял малые тесты работала верно ) З.Ы. твоя прога 30! не вазьмет а по ресурсом буит хавать столькоже скока и моя (если динку допишешь) З.З.Ы. я не думаю ято моя прога работает медленно паетотму я опустил красату и компактность кода
~Lexx~ )))) опять флуд)))\ мне нужна работающая программа. все. )))) завтра смогу протестить прогу беефа
>>К тому же в любом случае у тебя байт будет >>умножаться на байт быстрее чем два байта на два >>байта. (если не ошибаюсь где то на 25% быстрее). вполне очевидно, что ДАЖЕ проходя два байта в два раза медленнее мы пройдем всю длину в два раза быстрее)
Ты что в горестном епаме работаешь? Или всю жизнь на делфи работаешь? Ты считать умеешь? замени в моей программе лонгинт на экстендед - у тебя получиться больше 1500 элементов влазит в стек... программа выводиться за 1 секунду???? бля эт опо твоему скорость? Ты што упал? У меня на выполнение программы идет меньше восьмой части секунды - на третьем пне. Про динамическую память - ты вообще что-нибудь когда-нить на динамике писал? или в школе на уроках информатике услашыв, что такое ссылки и виртуальные методы возомнил себя программистом? Я вообще не понимаю о чем с тобой можно спорить, если ты не способен понять линейный итерационный алгоритм. Что может быт ьпроще - каждый раз вычислять значение факториала - используя предыдущий факториал и тут же его суммировать... Неужели такие люди считают себя айтишниками... Это же простейшая программа класса 9. Оставь мечты стать программистом... Какая к черту красота и компактонсть кода - жуткий гибрид рекурсии и неумелая попытка передавать ф процедуру глобальный параметр... тыб еще сразу его начил фигачить. Прошу прощения у всех остальных пользователей - не сдержался.
ой мама родите меня обратно дубль три) Uses crt; var i,n:integer; fact,sum:extended; Begin ClrScr; Writeln('vvedite chislo'); Readln(n); sum:=0; fact:=1; for i:=1 to n do begin fact:=fact*i; sum:=sum+fact; end; writeln(sum); readln; end.
во первых какя тебе нужна точность? если тебе так нужно - завтра послезавтра выложу специальн одля тебя по человечески сделанную с пользовательскими типами и переопределением методов. Вот как бы появилось пару вопросов по твоей прогрмме - а зачем ты крепишь текстовый файл? для понта? во вторых - у тебя сразу же пойдет переполнение стэка - подумай почему. Вернее не сразу, а когда оно начнет считать.
аха-ха жжёшь) а если у тебя n за maxint выйходит?) и ты конечно крут с extended, если у тебя будет найти сумму 1!+..+n! где n=100000, то ты пролетишь))))
текстовые делал тамучто мне так тестить было удобней , на практике переполнения не было , обьесни почему оно буит...