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

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

13 903 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 22,65 KB

Nội dung

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 1

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;

Trang 2

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

Trang 3

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

Trang 4

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

Trang 5

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

Trang 6

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

Trang 7

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

Trang 8

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;

Trang 9

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

Trang 10

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

Trang 11

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

Trang 12

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

Trang 13

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

Ngày đăng: 24/09/2017, 17:24

TỪ KHÓA LIÊN QUAN

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w