Kiểm tra số chính phương trong mảng 1 chiềuTrước hết, chúng ta sẽ tìm hiểu khái niệm về số chính phương.. Thuật toán Pascal dưới đây sẽ giúp tìm số chính phương trong mảng 1 chiều.. Bài
Trang 1Kiểm tra số chính phương trong mảng 1 chiều
Trước hết, chúng ta sẽ tìm hiểu khái niệm về số chính phương Số chính phương là gì? Số chính phương là một số mà tự nó là căn bậc hai của một số tự nhiên khác, hay nói rõ hơn thì số chính phương là bình phương của một
số tự nhiên.Ví dụ: 289 là một số chính phương vì 289 = 17 bình phươn Thuật toán Pascal dưới đây sẽ giúp tìm số chính phương trong mảng 1 chiều
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
Trong đó lệnh hàm sqrt để lấy căn và hàm trunc để lấy phần nguyên
bài 2 in ra màn hình pascal phần tử có dạng '3 mũ k cộng 2'
Viết chương trình nhập mảng 1 chiều có N phần tử In ra màn hình các phần
tử có dạng 3k+2 (k=0,1,2,3 ) Ý tưởng: Viết hàm kiểm tra xem phần tử a[i] có dạng 3^k+2 hay không
uses crt;
var b,j,i,x:integer;
a:array[1 100] of integer;
Function gt(k:integer):longint;
var j:integer;s:longint;
Trang 2begin
s:=1;
for j:=1 to k do
s:=s*3;
gt:=s;
end;
{ -}
Function kt(x:integer):boolean;
var i,j,k:integer;s:longint;
begin
kt:=false;
s:=1;
k:=0;
Repeat
inc(k);
gt(k);
Until gt(k)>=x-2;
if gt(k)=x-2 then kt:=true;
end;
{ -}
begin
clrscr;
Write('Nhap so phan tu= ');readln(x); For i:=1 to x do begin
write('a[',i,']= ');
readln(a[i]);
end;
For i:=1 to x do
if kt(a[i]) then write(a[i],' ');writeln; readln
end
Trang 3Bài 3.
Xóa các phần tử trùng nhau trong mảng 1 chiều (pascal)
10:13 Dinh
Nhập vào mảng 1 chiều gồm 1 dãy số nguyên N phần tử Hãy xóa các phần
tử trùng nhau trong mảng và in kết quả ra màn hình Ý tưởng: Duyệt mảng 1 chiều bằng 2 biến, nếu phát phát hiện phần tử nào trùng thì xóa phần tử ấy ra khỏi mảng
Program Bo_so_trung;
Const
Max=100;
Var
a:Array[1 Max] Of Integer;
i,j,k,n:Integer;
Begin
Writeln('XOA BO CAC SO TRUNG NHAU');
Writeln(' -');
Writeln;
Write('-Nhap so phan tu mang: ');
Readln(n);
For i:=1 To N Do
Begin
Write('-Phan tu A[',i,']= ');
Readln(a[i]);
End;
i:=2;
While i <= N Do
Begin
j:=1;
While a[j] <> a[i] Do
j:=j+1;
If j < i Then
Begin
For k:=i to n-1 Do
a[k]:= a[k+1];
Trang 4n:=n-1;
End
Else
i:=i+1;
End;
Writeln;
Write('-Mang con lai: ');
For i:=1 to n Do
Write(a[i]:8);
Writeln;
Writeln(' Bam phim <Enter> de ket thuc ');
Readln
End
Bài 4 :
Xóa 1 phần tử trong mảng 1 chiều
09:14 Dinh
Viết CT nhập từ bàn phím mảng 1 chiều và xóa 1 phần tử của mảng có n phần tử
var
n,i,q,k,p:integer;
a,b:array [1 1000] of integer;
begin
write('n= ');readln(n);
for i:=1 to n do
begin
write('a[',i,']= ');
readln(a[i]);
end;
write('Xoa pt co vi tri la: ');readln(p);
q:=0;
for i:=1 to n do
if q<>p then
begin
inc(q);
b[q]:=a[i];
Trang 5end;
writeln('Mang sau khi xoa la: ');
for i:=1 to q do
write(b[i],' ');
readln
end
Bài 5: Nhập thêm 1 phần tử vào mảng 1 chiều
09:11 Đô Rê Mon ĐZ
Viết chương trình nhập vào một mảng A gồm N số nguyên và nhập thêm vào một số nguyên X
var
n,i,q,k,p,:integer;
a,b:array [1 1000] of integer;
begin
write('n= ');readln(n);
for i:=1 to n do
begin
write('a[',i,']= ');
readln(a[i]);
end;
write('-Chen pt va vi tri cua pt do: ');readln(k,p); q:=0;
for i:=1 to n do
begin
inc(q);
if q=p then begin
b[q]:=k;
inc(q);
end;
b[q]:=a[i];
end;
writeln('-Mang sau khi chen la: ');
for i:=1 to q do
write(b[i],' ');
readln
end
Trang 6Bài 6 Tìm các số mà tổng bình phương bằng chính nó
Đề bài: Cho dãy a1, a2, a3 a100 là dãy số nguyên gồm 4 chữ số có nghĩa Đưa ra màn hình tất cả các số thỏa mãn điều kiện tổng bình phương các chữ
số của nó bằng chính nó
USES crt;
VAR a:ARRAY[1 100] OF INTEGER;
n,m,i,j,h,k,l:INTEGER;
BEGIN
clrscr;
FOR i:=1 TO 100 DO
BEGIN
a[i]:=random(8999)+1000;
END;
writeln('Cac so ma tong binh phuong cac chu so bang no la:');
FOR i:=1 TO 100 DO
BEGIN
m:=a[i] MOD 10;
n:=a[i] DIV 1000;
h:=(a[i] DIV 100)-n*10;
l:=((a[i] MOD 100)-m) DIV 10;
IF (a[i]= m*m+n*n+h*h+l*l) THEN write(a[i],',');
END;
readln
END
Bài 7:
Tìm bội chung nhỏ nhất của N số (ví dụ: mảng 1 chiều)
Như trong bài viết Tìm UCLN và BCNN đã trình bày cách tìm tuy nhiên chỉ áp dụng với trường hợp 2 số Bài toán ra là tìm BCNN của mảng 1 chiều, vậy sẽ phải viết chương trình như thế nào?
Bội số chung nhỏ nhất (The Least Common Multiple hay Lowest Common Multiple) của một nhóm các số nguyên, gọi tắt là LCM, là số nhỏ nhất mà có thể chia hết cho tất cả các số đó Có nhiều giải pháp để tìm LCM của hai số nguyên, một trong những giải pháp dễ dàng nhất là dùng thuật giải Euclid
Trang 7Cho hai số nguyên a và b, chúng ta có công thức LCM(a, b) = (a x b) / GCD(a, b) Như vậy quá trình tính toán sẽ thông qua các bước sau:
1 Bước 1 Sử dụng thuật toán Euclid để tìm ước chung lớn nhất GCD (a, b)
2 Bước 2 Tính giá trị a x b
3 Bước 3 Chia kết quả bước 2 cho kết quả bước 1 chúng ta được giá trị LCM cần tìm
Để tìm LCM của n số chúng ta đầu tiên chọn ra 2 số rồi tính LCM của chúng, sau đó lấy thêm số khác để tính LCM của LCM mới tìm được và số mới chọn
ra, cứ như thế cho tới khi nào hết n số Ví dụ tìm LCM của 2, 3 và 5 Đầu tiên
ta tính LCM(2, 3) = 6 Sau đó tìm LCM(6, 5) = 30
uses crt;
var x, y, i, n, ucln, bcnn: longint;
a: array[1 100] of integer;
function h_ucln(x,y:integer):integer;
begin
while x<>y do
if x>y then
x:=x-y
else
y:=y-x;
h_ucln:=x;
end;
begin
clrscr;
repeat
write('Nhap N (N>=2): ');
readln(n);
until(n>=2);
for i:=1 to n do
begin
write('Phan tu thu ',i,' = ');
readln(a[i]);
end;
ucln:=h_ucln(a[1],a[2]);
bcnn:=(a[1]*a[2]) div ucln;
for i:=3 to n do
Trang 8begin
ucln:=h_ucln(bcnn,a[i]);
bcnn:=(bcnn*a[i]) div ucln;
end;
writeln('bcnn la: ',bcnn);
readln;
end
Bài 8:
Kiểm tra cấp số cộng trong pascal
Nhập dãy số gồm N số nguyên (N<100) Xác định xem đó có phải dãy số có tính chất là cấp số cộng hay không
uses crt;
Var
A:array[1 100] of integer;
i,n,d: integer;
CS: boolean;
BEGIN
clrscr;
repeat
Write(' Nhap vao so nguyen duong N <=100 : ');
readln(N);
Until (n>1) and (n<=100);
For i:=1 to n do
begin
repeat
write('A[',i,'] = ');
readln(A);
until abs(A)<=1000;
end;
d:=abs(A[2]-A[1]);
CS:=True;
For i:=2 to n do
IF (abs(A-A[i-1])<>d) then
begin
CS:=False;
Trang 9break;
end;
IF CS then writeln('Day la cap so cong ')
else writeln(' Day ko phai la cap so cong '); readln;
END
Bài 9:
Đếm số nguyên tổ trong mảng 1 chiều
Trong bài viết trước, Code Pascal đã giới thiệu cách xác định tính nguyên tố của 1 số được nhập vào từ bàn phím Mở rộng đề bài ra thành đếm số
nguyên tố trong dãy số N được nhập vào từ bàn phím cũng không quá khó
Có rất nhiều cách để giải bài toán này, cách dưới đây tuy không bám sát vào cách làm trong bài viết Kiểm tra số nguyên tổ trong pascal nhưng cũng khá
dễ hiểu
var i,j,n:Integer;
A:array[1 50] of Integer;
begin
write('nhap n:');
readln(n);
for i:=1 to n do
begin
write('nhap a[',i,'] ');
readln(a[i]);
end;
j:=1;
for i:=1 to n do
if a[i]>1 then
begin
repeat
inc(j);
until (a[i] mod j=0);
if j>(a[i] div 2) then inc(d);
j:=1;
end;
write('Co ',d,' so ngto trog day');
Trang 10readln;
end
Bài 10
Phân loại lứa tuổi
10:42 Đô Rê Mon ĐZ
Nhập họ tên và năm sinh của người và cho biết người này thuộc lứa tuổi nào:
sơ sinh, nhi đồng, thiếu niên, thanh niên, trung niên, người lớn tuổi Biết rằng: + Sơ sinh tuổi từ 0->0
+ Nhi đồng tuổi từ 2->9
+ Thiếu niên tuổi từ 10->15
+ Thanh niên tuổi 16->32
+ Trung niên tuổi từ 33 -> 50
+ Người già tuổi từ 50 trở lên
uses crt;var
a:array[1 100] of longint;
i,n:longint;
begin
clrscr;
write('nhap so nguoi:');
readln(n);
for i:=1 to n do
begin
write('nhap tuoi cua nguoi thu ',i,':');
readln(a[i]);
end;
for i:=1 to n do
begin
write('nguoi thu',i,':');
case a[i] of
0:writeln('tre so sinh');
2 9:writeln('nhi dong');
10 5:writeln('thieu nien');
16 32:writeln('thanh nien');
33 50:writeln('trung nien');
Trang 11Else writeln('nguoi gia');
end;
end;
readln;
end
Bài 11
Sắp xếp mảng 1 chiều
Viết chương trình nhập vào một mảng gồm N số nguyên Sắp xếp lại mảng theo thứ tự tăng dần và in kết quả ra màn hình
Ý tưởng:
Cho biến i chạy từ 1 đến N-1, đồng thời cho biến j chạy từ i+1 đến N: Nếu A[i]>A[j] thì đổi chổ A[i], A[j]
Dưới đây là thuật toán sắp xếp mảng 1 chiều:
Uses Crt;
Type Mang = ARRAY[1 50] Of Integer;
Var A:Mang;
N,i,j,Tam:Integer;
Begin
{Nhập mảng}
Write('Nhap N='); Readln(N);
For i:=1 To N Do
Begin
Write('A[',i,']='); Readln(A[i]);
End;
{Sắp xếp}
For i:=1 To N-1 Do
For j:=i+1 To N Do
If A[i]>A[j] Then
Begin
Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam;
End;
{In kết quả ra màn hình}
Writeln('Ket qua sau khi sap xep:');
For i:=1 To N Do Write(A[i]:5);
Trang 12End
Tính trung bình cộng các số dương, âm nhập vào từ mảng 1 chiều trong Pascal
Viết chương trình nhập số nguyên N (0 < N ≤ 10 000) và mảng a gồm N số nguyên Tính và in ra trung bình cộng của các số âm, số dương trong a Không tính số 0
Ví dụ : a[] = {1, -6, 0, 3, -1} Trung bình cộng là -0.75
PROGRAM tbc_am_duong_mang;
USES crt;
VAR a:ARRAY[1 100] OF REAL;
i,n,x,y:INTEGER;
tongam,tongduong,tba,tbd:REAL;
BEGIN
clrscr;
write('So phan tu cua day n= ');readln(n);
FOR i:=1 TO n DO
BEGIN
write('Nhap phan tu a[',i,']: ');
readln(a[i]);
END;
tongam:=0; x:=0;
FOR i:=1 TO n DO
IF a[i]<0 THEN
BEGIN tongam:=tongam+a[i];
x:=x+1;
END;
tba:=tongam/x;
write('TB cong cac so am la: ',tba:5:1);
writeln;
tongduong:=0; y:=0;
FOR i:=1 TO n DO
Trang 13IF a[i]>0 THEN
BEGIN tongduong:=tongduong+a[i];
y:=y+1;
END;
tbd:=tongduong/y;
write('TB cong cac so duong la: ',tbd:5:1);
readln;
END