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

bài tập mảng 1 chiều

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 (84.39 KB, 13 trang )

Kiể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;


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


Bà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];
n:=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];
end;


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.
Bà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.


Cho 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


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



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


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


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


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


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



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×