1. Trang chủ
  2. » Biểu Mẫu - Văn Bản

bai Kieu xau

16 4 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

Nội dung

[r]

(1)(2)

Bài 1

.

Tìm phần tư lín nhÊt cđa d·y sè nguyªn (víi n

250 vµ A[i]

500), nÕu d·y cã nhiỊu phần tử giá trị đ a số

phần tử lớn

*

INPUT

:

Nhập số nguyên d ơng n dÃy n số nguyên d ơng a1,a2, ,an

(3)

Quả lớn

Quả lớn

nhất

ồ! Quả lớn Tìm qu¶ lín nhÊt råi!

tht toán tìm max

(4)

1 Nhập n vµ d y a· 1, ,an;

2 Max  a1 ; i  1;

3 NÕu i>N ® a MAX vµ chØ sè i => KÕt thóc;

(5)

1 NhËp n vµ d y a· 1, ,an; Write(‘ Nhap vao so luong phan tu:’);

Readln(n);

For i:=1 to n begin

write(‘ Phan tu thu ’ ,i, ’ = ’); readln(a[i])

end;

2 Max  a1 ; i  1; Max:=a[1]; csmax:=1;

For i :=2 to n

IF a[i]>max then begin

max:=a[i];

csmax:=i; end;

3 Nếu i>N đ a MAX chỉ số i => KÕt thóc;

(6)

Program Tim_Max;

Uses crt;

Type dayso = Array[1 250] of integer;

Var

A : dayso ; i,n,max,csmax : integer;

BEGIN

Clrscr;

write(‘ Nhap vao so phan tu cua day so : ’) ; readln(n) ;

For i := to n Begin

write(‘ Phan tu thu ‘,i,’ = ‘) ; readln(A[i]) ;

End; Max := A[1[ ; csmax :=1 ;

For i := to n

If (A[i]>max) Then

begin

max := a[i]; csmax=i; end;

Writeln(‘ Gia tri cua phan tu Max : ’,Max) ; Writeln(‘ Chi so cua phan tu Max : ’, csmax) ; Readln ;

(7)

Nhap vao so phan tu cua day so : 7

Phan tu thu = 15 20 16 25 18 12 19

Gia tri cua phan tu Max : 25 Chi so cua phan tu Max :

Ch ơng trình chạy cho kết nh sau:

(8)

Bài 2.

Nhập vào dÃy số nguyên, xếp dÃy theo trình tự không

giảm

*

INPUT

:

Nhập số nguyên d ơng n dÃy n số nguyên d ơng a1,a2, ,an

(9)

3

2

9

7

6

Cho d·y sè sau:

Giả sử:

Mỗi số đ ợc xem nh phần tử;

L ợt 1:

•i chạy từ đầu d y đến vị trí ã

[ci d y -1]·

•Khi a[i]>a[i+1] tức phần tử bên nặng phần tử bên d ới => phần tử chìm xuống phàn tử bên d ới

lờn (trỏo i v trớ).

ãSau l ợt thứ nhất, Phần tử có trọng l ợng lớn nhÊt sÏ ë vÞ trÝ cuèi cïng.

Phần tử thứ i giá trị A[i]

L ợt 2:

ãi chy t u d y đến vị trí ã

[cuèi d y - 2]· (bá qua phÇn

tư ci).

ãSau l ợt thứ hai phần tử có trọng l ợng lớn thứ hai nằm sát phần tư lín nhÊt

(10)

Số phần tử l ợt duyệt (j) giảm từ n xuống hai phần tử.

Tại l ợt duyệt:

-

Cho i chạy từ đến số phần tử -1,

nÕu A[i]>A[i+1] th×

tráo đổi vị trí A[i] A[i+1]

th«ng qua biÕn trung gian (Tg).

1

For

j := n

downto

do

2

For

i :=

to

j-1

do

IF

A[i]>A[i+1]

then

Tg := A[i]; A[i] := A[i+1]; A[i+1]:=Tg;

Begin

(11)

Khai báo mảng chiều

Nhập mảng chiỊu

Xử lí mảng thuật tốn Tráo đổi

In kÕt qu¶

PROGRAM Sapxep; Uses crt;

Type dayso = Array[1 250] of integer; Var

i, j , n , tg : integer; A : dayso;

BEGIN

Clrscr;

write(‘ Nhap vao so phan tu cua day so : ’); readln(n);

For i := to n Begin

write(‘ Phan tu thu ‘,i,’ = ‘); readln(A[i]);

end;

For j := n downto do For i:= to j-1 do

If A[i]>A[i+1] Then begin

Tg := A[i]; A[i]:=A[i+1]; A[i+1]:=Tg; end;

Writeln(‘ Day so duoc sap xep ’); For i:=1 to n Write(A[i]:5);

Readln;

(12)

Bµi NhËp vµo mét d·y A gồm N (N 250) số nguyên d ơng khác một số k Cho biết vị trí số hạng có giá trị k dÃy (nếu có) ? Thông báo kết hình

* INPUT:

Nhập số nguyên d ơng n, dÃy n số nguyên d ơng a1,a2, ,an số nguyên k

(13)

Lần l ợt

từ số hạng thứ nhất, so sánh giá trị số hạng

đang xét với k gặp đ ợc số hạng k,

hoặc d y đ đ ợc xét hết khơng có số hạng có

ó

ó

giá trị k.

For i := to n do

IF A[i] = k then

Begin

Tim_thay:=true; cs:=i;

break; end;

Tim_thay := false;

IF tim_thay then writeln(‘Chi so tim duoc: ’,i) else writeln(‘Khong tim thay);

(14)

Cách 2: Tìm kiếm nhị phân

10

9

8

7

6

5

4

3

2

1

i

33

31

30

22

21

9

6

5

4

2

A

Víi k = 21 d y A gồm 10 số hạng nh sau: Ã

L ợt thứ nhất: agiữa a5 = 9; < 21

 vïng t×m kiÕm thu hĐp ph¹m vi tõ a6 a10;

33

31

30

22

21

L ỵt thø hai: agiữa a8 = 30; 30 > 21

vùng tìm kiếm thu hẹp phạm vi từ a6 a7;

L ợt thứ ba: agiữa a6 = 21; 21= 21

 VËy chØ sè cần tìm i = 6

.

22

21

6

(15)

Dau:=1; Cuoi:=n; tim_thay:=false;

while ( Dau<= Cuoi) or NOT(tim_thay) do

Begin

Giua:= (Dau+Cuoi) div 2;

IF A[giua] = k then Tim_thay :=true

else

IF (A[Giua]>k) then Cuoi := Giua 1

else Dau := Giua +1; end;

IF Tim_thay then Writeln(‘ Chi so tim duoc la : ’,Giua) Else Writeln(‘Khong tim thay’);

V× d y A d y tăngà à , ta thực thu hẹp nhanh phạm vi tìm kiếm bằng cách so sánh k với A[giua] xét tr ờng hợp:

- A[giua]=k tìm thấy số kết thúc;

- A[giua]>k Thu hẹp phía bên trái (Cuối = Giữa -1); - A[giua]<k Thu hẹp phía bên phải (Đầu = Gi÷a +1);

(16)

Ngày đăng: 28/04/2021, 00:27

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

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

TÀI LIỆU LIÊN QUAN

w