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

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

  1. ~Lexx~

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

    Joined:
    30 Sep 2006
    Messages:
    195
    Likes Received:
    28
    Reputations:
    0
    БЛин ну простите - нету такого алгоритма который бы не используя динамическую память считал факториал100000. факториал 1600 - так считаеться и задача для 1500 идет... а дальше переполнение стека.
     
    #41 ~Lexx~, 15 Dec 2007
    Last edited: 15 Dec 2007
  2. VERte][

    VERte][ Elder - Старейшина

    Joined:
    17 May 2007
    Messages:
    240
    Likes Received:
    163
    Reputations:
    32
    ну ты собирался нормальный алгоритм представить, вот и покажи, потому что длинная арифметика вычисляется совсем не так, как ты показал)
     
    1 person likes this.
  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
    это интересно конечно, флуд -))) но есть мера,

    LExx напиши мне программу, хватит умничать, правда если ты сам хоть что-то умеешь =\
     
  5. rubik-nerubik

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

    Joined:
    4 May 2007
    Messages:
    248
    Likes Received:
    9
    Reputations:
    -2
    на задачу Be0wu1fa
    ругается тут
    .........
    var k,l:longint;
    begin - Stack overlfow error
    .........
     
  6. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    438
    Reputations:
    90
    мда, что это все выше было?)))) тебе требовались процедуры длинного сложения и умножения.. ну че-то вроде того...

    Code:
    program Snak3;
    var ss,s:string;
    n,i,k:longint;
    read(n);
    s:=''; ss:='';
    for i:=1 to n do
    begin
    for k:=1 to i do um(s,str(k),s);
    sum(ss,s,ss);
    end;
    procedure um(a,b:string;var c:string);
    var n,k,i,j,x,p:integer; d:string;
    begin
    n:=length(a);
    k:=length(b);
    c:=''; d:=''; p:=0;
    for i:=1 to n+k do d:=d+'0';
    for j:=k downto 1 do
    begin
    p:=0;
      for i:=n downto 1 do begin
      x:=(ord(a[i])-ord('0'))*(ord(b[j])-ord('0'))+p+ord(d[i+j])-ord('0');
      d[i+j]:=chr((x mod 10)+ord('0'));
      p:=x div 10;
    end;
    d[j]:=chr(ord(d[j])+p);
    end;
    i:=1;
    n:=length(d);
    while (d[i]='0') and (i<n) do inc(i);
    for k:=i to n do c:=c+d[k];
    end;
    procedure raz(a,b:string;var c:string);
    var x,n,k,i,p,g:integer;
        d:string;
      begin
      n:=length(a);
      k:=length(b);
      if k<n then for i:=k+1 to n do b:='0'+b;
      d:=''; c:=''; p:=0;
      for i:=n downto 1 do
          begin
          if a[i]<b[i] then
            begin
             a[i-1]:=chr(ord(a[i-1])-1);
             x:=10+ord(a[i])-ord(b[i]);
             d:=chr(x+ord('0'))+d;
            end
            else begin
             x:=ord(a[i])-ord(b[i]);
             d:=chr(x+ord('0'))+d;
            end;
          end;
       i:=1;
       n:=length(d);
    while (d[i]='0') and (i<n) do inc(i);
    for k:=i to n do c:=c+d[k];
    end;
    function cmp(a,b:string):string;
    var n,k,i:integer;  c:string;
    begin
     n:=length(a);
     k:=length(b);
     c:='';
      if n<k then c:='-' else
       begin
        if k<n then c:='+'  else
         begin
          i:=1;
          while ((a[i]=b[i])and(i<=n)) do inc(i);
          if (a[i]<b[i]) then c:='-';
          if (a[i]>b[i]) then c:='+';
          if (i=n+1) then c:='=';
         end;
       end;
    cmp:=c;
    end;
    procedure sum(a,b:string;var c:string);
    var x,i,p,n,k:integer;
    begin
    n:=length(a);
    k:=length(b);
    p:=0;
    c:='';
    if n<k then begin
    for i:=n+1 to k do
    a:='0'+a;
    end else
    begin
    for i:=k+1 to n do
    b:='0'+b; end;
    n:=length(a);
    for i:=n downto 1 do
    begin
    x:=ord(a[i])-ord('0')+ord(b[i])-ord('0')+p;
    c:=chr((x mod 10)+ord('0'))+c;
    p:=x div 10;
    end;
    if p<>0 then
    begin
    inc(n);
    c:='1'+c;
    end;
    
    
    те осталось переменные sum и um вывести ну или сохранить в файл....
     
    1 person likes this.