nww - pomocy

0

mam do napisania program,ktory liczy NWW n liczb,gdzie n jest naturalne i mniejsze od 20, a liczby te nie sa wieksze od 1000... problem jest taki,ze program "wylatuje" poza zakres jesli wezmiemy np 19 liczb pierwszych od 997 w dol. typ extended niewiele zmienia,bo mam tam funkcje mod i div, wiec jak zrobie round to i tak schodzi to do typu int64.. slyszalem,ze mozna to zrobic na stringach,ale nie mam pojecia jak:/ HELP!
moj kod:

program nww;
 {$APPTYPE CONSOLE}
uses
  SysUtils;
type tablica = array of integer;
var t:tablica;
    i,n:integer;
    a,b,c,x:int64;
    v:string;
begin
    repeat
       writeln('podaj z ilu liczb chcesz obliczyc NWW');
       writeln('(podana liczba musi byc liczba naturalna i ma zawierac sie w przedziale <1;19>)');
       readln(v);
       n:=StrToIntDef(v, -1);
    until (n>0) and (n<20);
    setlength (t,n);
    for i:=0 to n-1 do
      begin
       repeat
       writeln('podaj ',i+1,' liczbe');
       writeln('(liczba musi byc naturalna i ma zawierac sie w przedziale (1,1000))');
       readln(v);
       x:=StrToIntDef(v, -1);
       until (x>=1) and (x<1000);
      t[i]:=x;
      end;
    c:=1;
    for i:=0 to n-1 do
    begin
       a:=c;
       c:=a*t[i];
       while (t[i]<>0) do
         begin
         b:=t[i];
         t[i]:=a mod t[i];
         a:=b;
         end;
       c:=c div a;
    end;
    writeln('NWW podanych liczb wynosi ',c);
    readln;
end.

dodam jeszcze,ze mam to na jutro na zaliczenie:/

0

NWW = (a*b)/NWD(a,b)
a NWD liczysz wg algorytmu Euklidesa
c++

int nwd(int x, int y)
{
	int mod;
	while(mod!=0)
	{
		mod=x%y;
		x=y;
		y=mod;
	}
	return x;
}

w pascalu

function nwd(x,y:integer):integer;
var
   m:integer;
begin
   while(m<>0) do
   begin
     m := x mod y;
     x := y;
     y := m;
   end;
   nwd := x;
end;
0

dzieki:) w sumie to moj program juz przed modyfikacja korzystal z algorytmu Euklidesa,no ale uzylem tej funkcji i ominelem tym razem div i moglem wynik wyrzucic w extended. co prawda potem jest sporo kombinowania ze wzorem na NWW,ale dalo sie zrobic:D

1 użytkowników online, w tym zalogowanych: 0, gości: 1