Tải bản đầy đủ (.docx) (10 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (87.1 KB, 10 trang )

Số hồn hảo.
Số hồ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ố ngun 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ố hồn

hảo khơng?

Nhận xét: số hồn hảo là số có tổng các ước thực sự bằng chính
nó.
- Để kiểm tra n có phải là số hồ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ố hồn hảo.
b. Chương trình tham khả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;



End.
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ố hồn hảo hay khơng (u cầu dùng hàm).
1
2

PROGRAM SoHoanHao;

3

USES CRT;

4

VAR n:INTEGER;

5

FUNCTION KiemTra(x:INTEGER):BOOLEAN;

6
7

VAR tam,i:INTEGER;
BEGIN

8

tam:=0;


9

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

10

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

11

IF tam = x THEN KiemTra:=TRUE

12

Else KiemTra:=False;

13

END;

14

BEGIN

15

Clrscr;

16


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

17

IF KiemTra(n) THEN

18
19
20
21
22

Writeln('So ',n,' la so hoan hao')
ELSE
Writeln('So ',n,' khong phai la so hoan hao');
Readln;
END.

23

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ố hồ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).


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);


END.

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ó:
= 0.0,

0

,

,

,

,

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


End.
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;


readln(f1,n);
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;


readln; END.

Dãy Fibonacci là dãy vô 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.


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.


Ý 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.


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
357
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.



×