1. Trang chủ
  2. » Trung học cơ sở - phổ thông

Số hoàn hảo, fibonaci, chính phương Trong lập trình Pascal

10 549 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Số hoàn hảo, Fibonacci, Chính phương Trong lập trình Pascal
Trường học Đại học Công Nghệ Thông Tin – Đại học Quốc Gia Hà Nội
Chuyên ngành Lập trình Pascal
Thể loại Bài giảng hoặc Tài liệu hướng dẫn lập trình
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 10
Dung lượng 32,49 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Số hoàn hảo Số hoàn thiện (hay còn gọi là số hoàn chỉnh, số hoàn hảo hoặc số hoàn thành) là một số nguyên dương mà tổng các ước nguyên dương của nó (số nguyên dương chia hết cho nó) bằng chính nó Ví dụ Số 6 có ước nhỏ hơn nó là 1,2,3 Tổng là 1+2+3=6 vậy 6 là số hh Số 8 chia hết cho 1, 2, 4 tổng 1+2+4=7 → 8 không phải là số hh Số 28 chia hết cho 1, 2,4, 7, 14 tổng 1+2+4+7+14=28 → 28 là số hh 1 Nhập vào số nguyên n, kiểm tra n có phải là số hoàn hảo không? Nhận xét số hoàn hảo là số có tổng các ướ.

Trang 1

Số hoàn hảo.

Số hoàn thiện (hay còn gọi là số hoàn chỉnh, số hoàn hảo hoặc số hoàn thành) là một số nguyên dương mà tổng các ước nguyên dương của nó (số nguyên dương chia hết cho nó) bằng chính nó

Ví dụ:

Số 6 có ước nhỏ hơn nó là 1,2,3 Tổng là 1+2+3=6 vậy 6 là số hh

Số 8 chia hết cho 1, 2, 4 tổng 1+2+4=7 → 8 không phải là số hh

Số 28 chia hết cho 1, 2,4, 7, 14 tổng 1+2+4+7+14=28 → 28 là số hh

hảo không?

Nhận xét: số hoàn hảo là số có tổng các ước thực sự bằng chính

- Để kiểm tra n có phải là số hoàn hảo không? Ta sẽ tìm ước thực sự của n rồi cộng các ước thực sự lại, nếu tổng các ước thực sự bằng n thì

n là số hoàn hảo

Program

sohoanhao; Var

i,n,tong:longint;

Begin

Readln (n);

Tong:=

0;

For i:=1 to n-1 do

If n mod i = 0 then tong:=tong+i;

If tong=n then write (n, ‘la so hoan hao’);

Readln;

Trang 2

Viết chương trình nhập vào một số n từ bàn phím thông báo ra màn hình số đó có phải là số hoàn hảo hay không (yêu cầu dùng hàm).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

PROGRAM SoHoanHao;

USES CRT;

VAR n:INTEGER;

FUNCTION KiemTra(x:INTEGER):BOOLEAN;

VAR tam,i:INTEGER;

BEGIN

tam:=0;

FOR i:= 1 TO (x DIV 2) DO

IF x MOD i = 0 THEN tam:=tam+i;

IF tam = x THEN KiemTra:=TRUE

Else KiemTra:=False;

END;

BEGIN

Clrscr;

Write('Nhap so can kiem tra ');Readln(n);

IF KiemTra(n) THEN

Writeln('So ',n,' la so hoan hao')

ELSE

Writeln('So ',n,' khong phai la so hoan hao');

Readln;

END

Yêu cầu: Cho dãy số a1, a2, an Hãy giúp Bờm đếm xem trong dãy có bao nhiêu

số có tổng các chữ số là số hoàn hảo

Dữ liệu vào: Từ file BAI2.INP gồm:

- Dòng đầu tiên là số nguyên dương n (n ≤ 100)

- n dòng tiếp theo ghi n số nguyên a1, a2, an (0 ≤ ai ≤109)

Trang 3

Kết quả: Ghi ra file BAI2.OUT gồm: Một dòng duy nhất là kết quả của bài toán program sohoanhao;

uses crt;

var N,i,dem:longint;

a:array[1 100] of longint;

f1,f2:text;

function sohoanhao(n:longint):boolean;

var S,i:longint;

shh:boolean;

Begin

S:=0;shh:=true;

for i:=1 to n-1 do if n mod i = 0 then S:=S+i;

if n<>S then shh:=false;

sohoanhao:=shh;

End;

{ -}

BEGIN

assign(f1,'sohoanhao.inp');reset(f1);

assign(f2,'sohoanhao.out');rewrite(f2);

readln(f1,N); dem:=0;

for i:=1 to N do

Begin

readln(f1,a[i]);

if sohoanhao(a[i]) then inc(dem);

End;

write(f2,dem);

close(f1);close(f2);

Trang 4

Bài 2 Số chính phương

Cho số nguyên n, kiểm tra n có phải là số chính phương không?

Ý tưởng: Dựa trên định nghĩa số chính phương: là bình phương của một số tự nhiên

Ta có:

Nhận xét: Số chính phương là số có phần thập phân của căn bậc 2 là 0

Như vậy, để viết chương trình ta sử dụng hàm sqrt() để lấy căn bậc 2, hàm frac ()

để lấy phần thập phân

Chương trình tham khảo:

Program CP; Var n:longint;

Begin

Write (‘nhap n:’); Readln (n);

If (frac(sqrt(n))=0) and (n>=0) then write (n, ‘la so CP’) else write (n, ‘ko la so CP’);

Readldn

End

In ra số chính phương nhỏ hơn 100.

Ý tưởng:

Để kiểm tra lần lượt các số chính phương nhỏ hơn 100 thì ta sẽ kiểm tra lần lượt các số từ 0 đến 99 có phải là số chính phương không, bằng câu lệnh for

… to … do

Chương trình tham khảo:

Program CP; Var i:longint; Begin

For i:=0 to 99 do

If frac(sqrt(i))=0 then write (i,’ ‘); Readldn

0

Trang 5

Tính tổng các số chính phương trong dãy số tự nhiên liên tiếp 1, 2, 3, , N (N

<= 30000).

Dữ liệu vào: Từ file văn bản bai1.inp: chứa một số tự nhiên n

Kết quả: Ghi ra file văn bản bai1.out: Chứa một số là tổng của các số chính

phương

Ví dụ:

bai1.inp bai1.out

10 14

chương trình:

uses crt;

var n,i,s:longint;

f1,f2:text;

FUNCTION chinhphuong(n:longint):boolean;

var cp:boolean;

i:longint;

Begin

cp:=false;

for i:=1 to n do if (n div i = i) and (n mod i = 0) then cp:=true;

chinhphuong:=cp;

End;

{ -}

Begin

assign(f1,'chinhphuong.inp');reset(f1);

assign(f2,'chinhphuong.out');rewrite(f2);

s:=0;

Trang 6

for i:=1 to n do if chinhphuong(i) then s:=s+i; write(f2,s);

close(f1);close(f2);

END

uses crt;

type ArrInt = array[1 250] of integer;

Var n,i,x : integer;

a: ArrInt;

BEGIN

clrscr;

write('Nhap so phan tu: ');

readln(n);

for i:=1 to n do

begin

write('Phan tu thu ',i,'= ');

readln(a[i]);

end;

writeln('Cac so chinh phuong co trong mang:'); for i:=1 to n do

begin

x:=trunc(sqrt(a[i]));

if sqr(x)=a[i] then

write(a[i]:4);

end;

Trang 7

readln; END.

Dãy Fibonacci là dãyvô hạn các số tự nhiên bắt đầu bằng hai phần tử 0 và 1 hoặc

1 và 1, các phần tử sau đó được thiết lập theo quy tắc mỗi phần tử luôn bằng tổng hai phần tử trước nó

Hướng dẫn lập trình Pascal: Viết chương trình tính các số Fibonacci

Tính các số Fibonacci:

- F1=F2 = 1

- Fn = Fn-1 + Fn-2

Program FIBONACII;

Uses Crt;

Var n,kq:integer;

Function F(n:integer):integer;

Begin

If (n=1) or (n=2) then

F:=1

Else

F:=F(n-1)+F(n-2);

End;

Begin

Clrscr;

Writeln(' TINH SO FIBONACII:');

Writeln(' -');

Write('Nhap n = '); Readln(n);

Write('F(',n,')= ',f(n));

Readln;

End

BT: Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử Chèn số k vào vị trí đầu dãy.

Ý tưởng:

Lấy ví dụ:

2 3 4 5 6 7 => 9 2 3 4 5 6 7

Đưa các phần tử trong mảng a lui về sau 1 đơn vị, sau đó chèn số k vào vị trí đầu tiên của dãy

Trang 8

In kết quả.

Chương trình tham khảo:

Var a:array[1 50] of longint; I,n,k: longint;

Begin

Read (n);read (k);

For i:=1 to n do read (a[i]); For i:=n+1 downto 2 do

A[i]:=a[i-1]; A[1]:=k;

For i:=1 to n+1 do Write (a[i], ‘ ‘); Readln;

Readln; End

BT: Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử Chèn số k vào vị trí cuối cùng của dãy.

Lấy ví dụ:

2 3 4 5 6 7 => 2 3 4 5 6 7 9

Giữ nguyên các phần tử của dãy, sau đó chèn số k vào vị trí cuối cùng của dãy In kết quả

Chương trình tham khảo:

Var a:array[1 50] of longint; I,n: longint;

Begin

Read (n); read (k);

For i:=1 to n do read (a[i]);

For i:=1 to n+1 do a[n+1]:=k; For i:=1 to n+1 do write (a[i], ‘ ‘);

Readln; Readln; End

BT: Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử kiểm tra số

k, nếu số k là số chính phương thì chèn số k vào vị trí đầu dãy, ngược lại thì chèn vào cuối dãy.

Trang 9

Ý tưởng:

Lấy ví dụ:

3 3 4 5 6 7 => 9 2 3 4 5 6 7

4 6 3 7 8 1 => 4 6 3 7 8 1 5

BT: Kiểm tra số k có phải là số chính phương không,

nếu số k là số chính phương thì chèn số k vào vị trí đầu dãy, ngược lại thì chèn vào cuối dãy In kết quả.

Chương trình tham khảo:

Var a:array[1 50] of longint; I,n,k: longint;

Begin

Read (n);read (k);

For i:=1 to n do read (a[i]); If frac(sqrt(k)) = 0 then

begin

For i:=n+1 downto 2 do

A[i]:=a[i-1];

A[1]:=k;

End;

If frac(sqrt(k)) <> 0 then begin

For i:=1 to n+1 do

A[n+1]:=k;

End;

For i:=1 to n+1 do Write (a[i], ‘ ‘); Readln;

Readln; End

Trang 10

BT: Viết chương trình nhập vào 1 dãy số nguyên a gồm n phần tử Sắp xếp mảng theo thứ tự chẵn 1 hàng, lẻ 1 hàng.

Ý tưởng:

Lấy ví dụ:

2 3 4 5 6 7 => 2 4 6

3 5 7

1 1 1 1 1 1 => 1 1 1 1 1 1

2 2 2 2 2 2 => 2 2 2 2 2 2

3 3 3 3 4 5 => 3 3 3 3 5

4

Nhập vào các phần tử của mảng

Kiểm tra lần lượt các phần tử của mảng nếu là phần tử chẵn thì in ra Sau đó xuống dòng, trở về vị trí ban đầu, kiểm tra lần lượt các phần tử của mảng, nếu phần

tử là số lẻ thì in ra

Chương trình tham khảo:

Var a:array [1 50] of longint; I,n:longint;

Begin Read (n);

For i:=1 to n do Read (a[i]);

For i:=1 to n do

If a[i] mod 2 = 0 then write (a[i],’ ‘); writeln;

For i:=1 to n do

If i mod 2 <> then write (a[i],’ ‘); Readln

End

Ngày đăng: 12/06/2022, 17:02

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w