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

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 602 KB

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