Tìm ước chung lớn nhất trong mảng Pascal

     by pkt_zz 24/5/2010, 3:54 am

    Bài 1: Lập hàm tính giá trị hàm số:
    a] f[x] = ?
    Code:Code:
    program p1b1a;
    var x:real;
    function hamso1[var x:real] :real;
    var f:real;
    begin
        if x> [-5] then f:=[sqr[x]+1]/sqrt[exp[5*ln[x]]+3]
                  else f:=[ln[abs[x+5]]/ln[3]];
        hamso1:=f;
    end;
    begin
        write['Nhap x= '];
        readln[x];
        write['gia tri ham so f=',hamso1[x]:10:5];
        readln;
    end.
    b]f[x] = ?

    Code:program p1b1b;
    var x:real;
    function hamso2[var x:real] :real;
    var f: real;
    begin
        if x>1 then f:= ln[abs[x/[2+exp[x*ln[5]]]]]/ln[3]
                else f:= [2*exp[7*ln[x]+sin[exp[ln[x-1]*1/3]]]]/cos[5*x];
        hamso2:=f;
    end;
    begin
        write['Nhap gia tri x='];
        readln[x];
        write['Gia tri ham so f=',hamso2[x]:10:5];
        readln;
    end.
    Bài 4: Nhập vào 2 số nguyên dương a,b, in ra màn hình UCLN, BCNN của chúng. Mở rộng: Nhập vào n số nguyên dương, in ra màn hình UCLN, BCNN của n số đó.

    Thuật toán:
    ***tìm ước chung lớn nhất của dãy***
    B1: Nhập số n
    B2: Khởi tạo i bằng 1.
    B3: Nhập số thứ i
    B4: nếu iB5: Gán biến min bằng giá trị a[1]
    B6: Khởi tạo i bằng 1.
    B7: Nếu min>a[i] thì gán min bằng giá trị của a[i]
    B8: nếu iB9: Khởi tạo th gán bằng giá trị đúng
    B10: Khởi tạo i bằng 1
    B11: nếu phần dư của a[i] chia cho min khác 0 thì gán th bằng sai
    B12: nếu iB13: nếu th là đúng thì ước chung lớn nhất là min và chuyển tới bước 18.
    B14: khởi tạo giá trị của j là phần nguyên của min chia 2.
    B15: khởi tạo tk là đúng, khởi tạo i bằng 1
    B16: nếu phần nguyên của a[1] chia cho j khác 0 thì gán tk bằng sai, giảm j đi 1
    B17: nếu tk là sai thì quay lại bước 15 nếu không thì ước chung lớn nhất nhận giá trị là j+1.
    B18: In ra màn hình giá trị ước chung lớn nhất đó.
    ***tìm bội chung nhỏ nhất của dãy***
    B1: Nhập số n
    B2: Khởi tạo i bằng 1.
    B3: Nhập số thứ i
    B4: nếu iB5: Gán biến max bằng giá trị a[1]
    B6: Khởi tạo i bằng 1.
    B7: Nếu maxB8: nếu iB9: Khởi tạo th gán bằng giá trị đúng
    B10: Khởi tạo i bằng 1
    B11: nếu phần dư của max chia cho a[i] khác 0 thì gán th bằng sai
    B12: nếu iB13: nếu th là đúng thì bội chung nhỏ nhất là max và chuyển tới bước 18.
    B14: khởi tạo giá trị của j là max nhân với 2.
    B15: khởi tạo tk là đúng, khởi tạo i bằng 1
    B16: nếu phần nguyên của j chia cho a[i] khác 0 thì gán tk bằng sai, tăng j thêm 1
    B17: nếu tk là sai thì quay lại bước 15 nếu không thì bội chung nhỏ nhất nhận giá trị là j.
    B18: In ra màn hình giá trị bội chung nhỏ nhất đó.
    Code:
    Code:program p1b4;
    type arra= array[1..1000] of integer;
    var a: arra;
        i,j,n, max,min :integer;
    function ucln[var a:arra; var n, min :integer] :integer;
    var th, tk : boolean;
        f: integer;
    begin
        th:=true;
        for i:=1 to n do begin
                            if a[i] mod min 0 then th:= false;
                        end;
      if th= true then f:=min
      else begin
                j:=[min div 2];
                repeat
                tk:=true;
                for i:=1 to n do
                if [[a[i] mod j] 0] then tk:=false;
      j:=j-1;

                until tk= true;
                f:=j+1;

            end;
        ucln:=f;

    end;
    function bcnn[var a:arra; var n, max:integer] :longint;
    var  th,tk : boolean;
        f: integer;
    begin
        th:=true;
    for i:=1 to n do if max mod a[i] 0 then th:=false;
        if th= true then f:=max
        else begin
                  max:=max*2;
                repeat
                tk:=true;
                for i:=1 to n do if max mod a[i]0 then tk:=false;

                max:=max+1;
                until tk = true;
                f:=max-1;
            end;
        bcnn:=f;
    end;
    begin
        write['nhap so  so nguyen n='];
        readln[n];
        writeln[' nhap day so nguyen'];
        for i:=1 to n do  begin
                            write['a[',i,']='];
                          read[a[i]];
                          end;
        max:=a[1];
        for i:=1 to n do if a[i]>max then max:=a[i];
        min:=a[1];
        for i:=1 to n do if a[i]

    Chủ Đề