паскаль, вы программер?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rubik-nerubik, 10 Dec 2007.

  1. rubik-nerubik

    rubik-nerubik Elder - Старейшина

    Joined:
    4 May 2007
    Messages:
    248
    Likes Received:
    9
    Reputations:
    -2
    вот собственно не могу разхобраться с длинной арифметикой,
    Составить программу для вычисления точного значения суммы 1!+2!+3!+..+n! при n>10.

    может кто подскажет задачу?)

    народ кто в блок-схемах фарит?

    оч нужно к ней:
    program two;
    uses crt;
    const
    MAX=20;
    type
    line=Array[1..MAX] of real;
    var
    smin:real;
    imin:Integer;
    i,j,n,m:Integer;
    x:Array[1..MAX] of line;
    buf:line;
    juf:Array[1..MAX] of Integer;
    inp:Text;
    begin
    Assign(inp,'matrix.txt');
    Reset(inp);
    Read(inp,n,m);{Є®«ЁзҐбвў® бвp®Є Ё бв®«Ўж®ў}
    if (MAX<n) or (MAX<m) then
    Write('*Ґ¦Ґ«*о бзЁв*вм! ')
    else begin
    for i:=1 to n do
    for j:=1 to m do
    Read(inp,x[j]);
    for i:=1 to n do begin
    buf:=x[1];
    juf:=1;
    for j:=2 to m do
    if buf<x[j] then begin
    buf:=x[j];
    juf:=j
    end
    end;
    smin:=buf[1];
    for i:=2 to n do begin
    if smin>buf then begin
    smin:=buf;
    imin:=i
    end
    end;
    Writeln;
    Write('‘Ґ¤«®ўaп в®зЄa x=',juf[imin],' y=',imin)
    end;
    Close(inp)
    end.

    вот.
     
    1 person likes this.
  2. LolFEm

    LolFEm Elder - Старейшина

    Joined:
    8 Sep 2006
    Messages:
    160
    Likes Received:
    52
    Reputations:
    5
    может это поможет разобраться:
    Задача:
    Рекурсивная функция, считающая факториал числа.


    Код:
    Code:
    
    	
    
    
    program Factorial;
    var n:integer;
    
    function Factor(n:integer):real;
     var v:real;
     Begin
     if n in [0,1] then Factor:= 1 else Factor:= n*Factor(n-1);
     end;
    
    begin
     Write('Введите число(0..33): ');
     Readln(n);
     Write('Факториал этого числа равен: ', Factor(n):11:0);
     Readln;
    End.
    
    
    
     
  3. ~Lexx~

    ~Lexx~ Elder - Старейшина

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    Блин начни сам составлят ьблок схему - только перед этим приведи прогу к нормальному виду - всмысле чтобы циклы и фунции шли с отступом - ка ктолько отформатишь - блок схему ля такой мелкой программки ты сам напишешь как два пальца об асфальт.
     
  4. rubik-nerubik

    rubik-nerubik Elder - Старейшина

    Joined:
    4 May 2007
    Messages:
    248
    Likes Received:
    9
    Reputations:
    -2
    собственно насчет задачи я, эта прога считает факториал(до 33 ), но мне надо вида:
    1!+2!.. до вводимого числа о0 вот.
     
  5. ~Lexx~

    ~Lexx~ Elder - Старейшина

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    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.

    Это без выпендрежа - голый алгоритм вычисления.
     
    1 person likes this.
  6. Aristarh Dark

    Aristarh Dark Member

    Joined:
    14 Jun 2007
    Messages:
    7
    Likes Received:
    9
    Reputations:
    10
    Чуваку нужна длинная арифметика. Представленные листинги на паскале умрут после 18! - проверено еще в 96 году прошлого века.
    to rubik-nerubik пиши модуль работы с длинной арифметикой, или качай из сети.
     
    1 person likes this.
  7. ~Lexx~

    ~Lexx~ Elder - Старейшина

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    ай мама моя дорогая... какое ж это западло - стандартный инт вешаеться после факториала 18...
    А Double? а самому написать объект? И определить для него методы? (подсказка - определяешь массив(можно динамический) и в каждый элемент - помещаешь число - от 1-до 10 - вот тебе интерпретация числа. И просто напросто пишешь для него функцию умножения - типа там смещаться должно туда-то итд - сам напиши - полезно для мозгов). Но это если уж тебе совсем надо большой факториал найти. А если так по мелочи дабла должно хватить. А вот за рекурсию я бы нафиг руки отрубал...

    ПС проверять тут нечего - детская программа - все устно считаеться на сколько у тебя хватит размерности.
     
  8. HulkRus

    HulkRus New Member

    Joined:
    6 Dec 2007
    Messages:
    17
    Likes Received:
    4
    Reputations:
    0
    Lexx, вы много знаете о haskell? :) Программами на этом языке нужно любоваться) А вы так про реккурсию плохо отзываетесь :mad:
    rubik-nerubik, надыбай модуль для работы с длиннющими числами и вот те с longint, реккурентное соотношение нашел, функцию написал), работает реактивно и никаких циклов! Паскаль:
    Code:
    program Good;
    uses crt;
    var
      k,max:byte;
    function fuck(k:byte):longint;
      begin
      if k=1 then fuck:=1
      else fuck:=(max-k+2)*fuck(k-1)+1;
    end;
    begin
      readln(k);  max:=k;
      writeln(fuck(k));
    end.
     
  9. ~Lexx~

    ~Lexx~ Elder - Старейшина

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    Ага офигенно - вот какраз про это я и говорю... А вы когда-нить слышал и о таком предмете как исследование операций? Так вот - рекурсия - это худщшее что может быть для вычиления каки-бы то ни было больших или маленьких чисел...
    А еще блин ну что это такое... рекурсией каждый раз считать факториал... Просто стот сравнить количество операций для вычиления всего задания по моему алгоритму и по вашему...
    У мен якаждый раз мы используем предыдущий член - тот который уже вычислен. Конечно это неявная рекурсия, но здесь она вполне допустима - нету операций с плавающей точкой.
    А предыдущая программа как раз и захлебнеться, причем скорее всего где-то в районе 150-200. - Только из-за недостатка оперативы... А нет даже раньше - у паскаля задействовано памяти на 600 000 интовых элементов. так что считаем...
     
  10. rubik-nerubik

    rubik-nerubik Elder - Старейшина

    Joined:
    4 May 2007
    Messages:
    248
    Likes Received:
    9
    Reputations:
    -2
    ~Lexx~
    флудишь больше)))

    HulkRus этот пример точно по моему заданию? не только факториал??
    Составить программу для вычисления точного значения суммы 1!+2!+3!+..+n! при n>10.
    ?????
     
  11. HulkRus

    HulkRus New Member

    Joined:
    6 Dec 2007
    Messages:
    17
    Likes Received:
    4
    Reputations:
    0
    Lex, для больших то чисел то да. прав. Но еще важен и сам алгоритм, например числа Фиббоначи нужно считать не через f<-f(x-1)+f(x-2) и не через 0.5(-1+sqrt(5)), а через матрицы!
    rubik-nerubik, да. Она считает сумму факториалов (1!+2!+3!...), ты только тип возьми побольше
     
    #11 HulkRus, 13 Dec 2007
    Last edited: 13 Dec 2007
    1 person likes this.
  12. ~Lexx~

    ~Lexx~ Elder - Старейшина

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    Прости - я тебе написал именно то что ты просил - и я считаю , что если тебе не требуеться вычисление факториалов типа 1000! или больше - тебе мой алгоритм подойдет - и будет лучшим, что можно предложить из простого. А те алгоритмы которые по 10 раз вычисляют одно и то же - даже не имеют правол на существование.

    У халка - просто процедура вычисления факториала - которая хороша, когда тебе нужн опоститать ТОЛЬКО факториал и только ОДИН раз.

    То HulkRUS

    Я не совсмем понял что ты сказал... Если ты утверждаешь что в вычислительных алгоритмах рекурсия это хорошо - почитай что-нибудь об исследовани операций. А уж по поводу чисел фибоначи - это вобще для чего было сказано? Чтобы показать, что ты знаешь что это такое?

    ПЫ извиняюсь за флуд.
     
  13. Chrek625

    Chrek625 Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    rubik-nerubik
    ну ты извращенец
    У тебя кучу ошибок в коде и вообще юзай HELP.
    И вопросик а куда ты там собираешся выводить данные так ака я не увидел там
    assign (output,'output.txt');
    rewrite (output);
    оооо эо ужас.....
     
  14. rubik-nerubik

    rubik-nerubik Elder - Старейшина

    Joined:
    4 May 2007
    Messages:
    248
    Likes Received:
    9
    Reputations:
    -2
    Chrek625 предлагай альтернативу а не обсирай =\ так и я могу написать, типа гавно, покажи свой в таком случае =\

    ~Lexx~ ещё раз говорю, мне ненадо просто посчитать факториал, как ты понимаешь, поставлена задача посчитать именно по образцу, а не так =\
     
  15. Chrek625

    Chrek625 Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    и кстати если ты собираешся считать фаториалы то врятли тебе тут поможет integer скорее тебе понадобится longint.
     
  16. Chrek625

    Chrek625 Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    Слушай выложи сюда то что у тебя в файле matrix.txt
    попробую тебе помочь...
     
  17. ~Lexx~

    ~Lexx~ Elder - Старейшина

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    то rubik-nerubik ой блин... ты когда-нить читаешь чужие посты? Вот мое второе сообщение в этой теме - это твое решение перед Алгоритмом объяви переменные каk longint. и все заработает. Ты хоть читаешь чужие коды или просто- чем больше написано, тем круче алгоритм? Халк тебе предложил рекурсивную функцию по нахождению факториала - я тебе написал решение всей твоей задачи...
     
    #17 ~Lexx~, 13 Dec 2007
    Last edited: 14 Dec 2007
  18. HulkRus

    HulkRus New Member

    Joined:
    6 Dec 2007
    Messages:
    17
    Likes Received:
    4
    Reputations:
    0
    Нет, я предложил тоже решение задачи. Ведь у меня находит не факториал, а их сумму (1!+2!+3!...). Lexx, мой алгоритм при больших числах некорректен, но сама идейка-то
    1!+2!+3!+4!+5! = (1+2(1+3(1+4(1+5)))), в стек загоняет то, что в скобках.
     
  19. Be0wuIf

    Be0wuIf New Member

    Joined:
    18 May 2007
    Messages:
    8
    Likes Received:
    2
    Reputations:
    0
    вот попробуй мою прогу

    program fak;

    var a,fak,prob:array [1..10000] of integer;
    i,m,n,m1,k,j:longint;
    s,s1:string;

    Procedure Mnog(x,y:array of integer);
    var k,l:longint;
    begin
    fillchar(prob,sizeof(prob),0);
    for k:=1 to m1 do
    for l:=1 to m do
    prob[k-1+l]:=prob[k-1+l]+fak[l]*a[k];
    k:=1;
    while k<=m do
    begin
    if ((prob[k] div 10) > 0)and(k=m) then inc(m);
    prob[k+1]:=prob[k+1]+(prob[k] div 10);
    s:='';
    str(prob[k],S);
    prob[k]:=ord(s[length(s)])-ord('0');
    inc(k);
    end;
    fak:=prob;
    end;

    begin
    { TODO -oUser -cConsole Main : Insert code here }
    assign(input,'input.txt'); reset(input);
    assign(output,'ouptupt.txt'); rewrite(output);
    readln(n);

    str(n,S); k:=1;
    for j:=length(s) downto 1 do
    begin
    fak[length(s)+1-j]:=ord(s[j])-ord('0');
    end;
    m:=length(s);

    for i:=n-1 downto 2 do
    begin
    s1:='';
    str(i,S1); k:=1;
    for j:=length(s1) downto 1 do
    begin
    a[length(s1)+1-j]:=ord(s1[j])-ord('0');
    end;
    m1:=length(s1);
    mnog(fak,a);
    end;
    for i:=m downto 1 do
    write(fak); writeln;

    close(input); close(output);
    end.

    З.Ы. по идее то что ты и хотел считает до 1000 (мона и больше)
     
    #19 Be0wuIf, 13 Dec 2007
    Last edited: 13 Dec 2007
  20. ~Lexx~

    ~Lexx~ Elder - Старейшина

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    а зочем сдесь моссивы интежеров? Не проще ли создать байт? И почему нету отдельных бъектов? Если уж делоть, так делоть до конца.... (Повыступаю в роли критика))) )