Trang chủ Tin Học Lớp 9 Viết hàm kiểm tra số nguyên tố và tính số...

Viết hàm kiểm tra số nguyên tố và tính số đảo ngược. PascalMột số gọi là siêu nguyÊN BỐ ĐỒNG Nữ là số nguyên tố. Đảo ngược số đó lại ta cũng đa : 1 số nguyên t

Câu hỏi :

Viết hàm kiểm tra số nguyên tố và tính số đảo ngược. Pascal

image

Lời giải 1 :

`1.`

- Hàm kiểm tra số nguyên tố

function NguyenTo (X : integer) : boolean;
    var j : integer;
    begin
        NguyenTo := true;
        j := 2;
        if X < 2 then NguyenTo := false;
        while (NguyenTo = true) and (j < X) do
            begin
                if X mod j = 0 then NguyenTo := false;
                j := j + 1;
            end;
    end;

- Hoạt động :

+ Số X là số nguyên tố nếu X chỉ có 2 ước là 1 và chính nó là X

+ Nếu X có ước thuộc khoảng [2; X - 1] thì X không là số nguyên tố

+ Khởi tạo giá trị ban đầu NguyenTo = True, j = 2

+ Nếu X < 2, X có thể là 1 hoặc số âm, ..., thì NguyenTo = false

+ Khi NguyenTo = false vòng lặp While .. do không được thực hiện, hàm NguyenTo trả về giá trị là false, X không là số nguyên tố

+ Trong khi NguyenTo = true và j < X thì vòng lặp sẽ được thực hiện

+ Nếu X chia hết cho j thì NguyenTo = false khi đó điều kiện lặp sẽ sai, kết thúc lặp và giá trị hàm NguyenTo = false

+ Nếu X không chia hết cho giá trị j nào từ 2 đến X - 1 thì giá trị NguyenTo vẫn bằng true

`2.`

- Hàm tính số đảo ngược

function DaoNguoc (X : integer) : integer;
    var j : integer;
    begin
        DaoNguoc := 0;
        while X > 0 do
            begin
                j := X mod 10;
                DaoNguoc := DaoNguoc * 10 + j;
                X := X div 10;
            end;
    end;

- Hoạt động :

+ Khởi tạo DaoNguoc = 0

+ Ví dụ với X = 203

`2.1.` X = 203 > 0 đúng

⇒ j = 203 mod 10 = 3

⇒ DaoNguoc = 0 * 10 + 3 = 3

⇒ X = 203 div 10 = 20

`2.2.` X = 20 > 0 ⇒ Đúng

⇒ j = 20 mod  10 = 0

⇒ DaoNguoc = 3 * 10 + 0 = 30

⇒ X = 20 div 10 = 2

`2.3.` X = 2 > 0 ⇒ Đúng

⇒ j = 2 mod 10 = 2

⇒ DaoNguoc = 30 * 10 + 2 = 302

⇒ X = 2 div 10 = 0

`2.4.` X = 0 > 0 ⇒ Sai ⇒ Kết thúc lặp với DaoNguoc = 302

`3.`

uses crt;
var N, i, K, Dem : integer;
    f1, f2 : text;
    A, B : array [1 .. 100] of integer;
    
function NguyenTo (X : integer) : boolean;
    var j : integer;
    begin
        NguyenTo := true;
        j := 2;
        if X < 2 then NguyenTo := false;
        while (NguyenTo = true) and (j < X) do
            begin
                if X mod j = 0 then NguyenTo := false;
                j := j + 1;
            end;
    end;
    
function DaoNguoc (X : integer) : integer;
    var j : integer;
    begin
        DaoNguoc := 0;
        while X > 0 do
            begin
                j := X mod 10;
                DaoNguoc := DaoNguoc * 10 + j;
                X := X div 10;
            end;
    end;
    
begin
    clrscr;
    assign(f1, 'SUPRIME.INP'); reset(f1);
    assign(f2, 'SUPRIME.OUT'); rewrite(f2);
    
    readln(f1, N);
    for i := 1 to N do read(f1, A[i]);
    
    Dem := 0;
    for i := 1 to N do
        if NguyenTo(A[i]) = true then
            begin
                K := DaoNguoc (A[i]);
                if NguyenTo(K) = true then 
                    begin
                        Dem := Dem + 1;
                        B[i] := 1;
                    end;
            end;
    
    writeln(f2, Dem);
    
    for i := 1 to N do
        if B[i] = 1 then writeln(f2, A[i]);
            
    close(f1); close(f2);
end.
    

Thảo luận

-- https://hoidap247.com/cau-hoi/4877604 Nếu có thể mai a giúp e bài này với.

Lời giải 2 :

uses crt;
var n:longint; f:text; a,b:array[1..1000000]of longint;
function DN(c:longint):longint;
var i,t,v:longint; s:string; e:integer;
        begin
         v:=c;
         str(v,s);
         DN:=0;
         for i:=length(s) downto 1 do
                begin
                 val(s[i],t,e);
                 DN:=DN*10+t;
                end;
        end;
function NT(c:longint):boolean;
var i,d:longint;
        begin
         d:=0;
         for i:=1 to c do if(c mod i=0)then inc(d);
         NT:=d=2;
        end;
procedure doc;
var i:longint;
        begin
         assign(f,'SNT2.INP');
         reset(f);
         readln(f,n);
         for i:=1 to n do read(f,a[i]);
         close(f);
        end;
procedure ghi;
var i,dem:longint;
        begin
         assign(f,'SNT2.OUT');
         rewrite(f);
         dem:=0;
         for i:=1 to n do if(NT(a[i]))and(NT(DN(a[i])))then begin inc(dem); b[dem]:=a[i]; end;
         writeln(f,dem);
         for i:=1 to dem do writeln(f,b[i]);
         close(f);
        end;
begin
 clrscr;
  doc;
  ghi;
 readln;
end.

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, sắp phải bước vào một kì thi căng thẳng và sắp chia tay bạn bè, thầy cô và cả kì vọng của phụ huynh ngày càng lớn mang tên "Lên cấp 3". Thật là áp lực nhưng các em hãy cứ tự tin vào bản thân là sẻ vượt qua nhé!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247