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

Thuật toán là gì

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 (274.49 KB, 18 trang )

Thuật toán là gì?
Thuật toán để giải một bài toán là một dãy hữư hạn các thao tác được sắp xếp theo
một trình tự xác định sao cho sau khi thực hiện dãy thao tác ấy, từ input của bài toán, ta nhận
được output cần tìm.
Các đặc trưng của thuật toán
Tính kết thúc: Một thuật toán phải kết thúc sau một số hữu hạn thao tác
Tính rõ ràng: theo nghĩa nhiều người khác nhau thực hiện thì phải cho cùng một kết quả
Tình phổ dụng: Thuật toán nào dùng được rộng rãi hơn tổng quát hơn thì tính phổ dụng cao
hơn
Tính hiệu quả: Ít tốn kém về số lượng thao tác, về vùng nhớ, về thời gian
Cách biểu diễn thuật toán
Người ta thường dùng hai phương pháp sau đây để mô tả thuật toán
a)Phương pháp liệt kê
b) Phương pháp sơ đồ khối ( Lưu đồ)
Hình O van thể hiện thao tác nhập xuất dữ liệu
Hình chữ nhật thể hiện các phép tính toán
Các mũi tên quy định trình tự thực hiện thao tác
Mũi tên ngược được hiểu là phép gán
Hình thoi thể hiện thao tác so sánh
Một số thuật toán đơn giản thường gặp
1)Hoán vị hai giá trị x,y có dùng biến trung gian
Bước 1: Dùng một biến trung gian tam và thực hiện tam ← x
Bước 2: x ←y
Bước 3: y← tam
Bước 4: kết thúc
2)Hoán vị hai giá trị x,y không dùng biến trung gian
Bước 1: x← x+y
Bước 2: y ←x-y
Bước 3: x← x-y
Bước 4: kết thúc
3)Tìm phần tử nhỏ nhất trong dãy a1 an


Bước 1: Nhập giá trị N và a1 an
Bước 2: I ← 1; Min← a1
Bước 3: i←i+1
Bước 4: nếu i> n thì xuất Min và chuyển đến bước 7 để kết thúc ngược lại thực hiện bước 5
Bước 5: Nếu ai<min thì min← ai
Bước 6 lặp lại bước 3
Bước 7 Kết thúc
4)Kiểm tra k có trong dãy a1 an không?
( Thuật toán tìm kiếm)
Bước 1: Nhập các giá trị n, a1 an, k
Bước 2: i←1
Bước 3: Nếu i> n thì sang bước 5, trái lại đến bước 4
Bước 4: Nếu k=ai thì sang bước 5, trái lại i←i+1 và quay về bước3
Bước 5: Nếu i>n thì thông báo k không thuộc dãy, trái lại thông báo k là phần tử thứ I của
dãy
Bước 6: kết thúc
Tìm giá trị lớn nhất của một dãy số nguyên
Xác định
bài toán
Input:
Số n và dãy a
1
a
n
Output: Giá trị lớn nhất của dãy số nguyên
Y tưởng
Khởi tạo giá trị Max=a1;
Lần lượt với I từ 2 đến n so sánh các giá trị số hạng ai với Max, nếu
ai>Max thì Max nhận giá trị mới là ai
Mô tả

thuật toán
bằng
liệt kê
Bước 1: Nhập N và dãy a
1
,,a
n
Bước 2: Max <- a1; i<-2;
Bước 3: Nếu i> N thì đưa ra giá trị Max rồi kết thúc
Bước 4;
Bước 4.1. Nếu ai>Max thì Max<-ai
Bước 4.2. i<-i+1 rồi quay lại bước 3
Mô tả
thuật toán
bằng Sơ đồ
khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a:array[1 100] of integer;
n,i, max:integer;
begin
clrscr;
write('nhap n');readln(n);
for i:=1 to n do
begin

write('a[',i,']=');
readln(a[i]);
end;
Max:=0;
for i:=2 to n do
if a[i]>max then max:=a[i];
write('gia tri lon nhat la
',max);
readln;
end.
Ví dụ N=11 và dãy số 5,1,4,7,6,3,15,8,4,9,12
Mô phỏng theo ví dụ

y
5 1 4 7 6 3 15 8 4 9 12
i 2 3 4 5 6 7 8 9 10 11
Max 5 5 5 7 7 7 15 15 15 15 15
Giá trị lớn nhất là : 15
Kiểm tra tính nguyên tố của một số nguyên dương
Xác
định
bài
toán
Input: N là một số nguyên dương
Output: “N là số nguyên tố” hoặc “N không là số nguyên tố”
Ý
tưởng
Một số nguyên dương N là một số nguyên tố nếu nó có đúng hai ước số khác nhau là 1 và
chính nó.
 Nếu N=1 thì N không là số nguyên tố;

 Nếu 1<N<4 thì N là số nguyên tố;
 Nếu n>= 4 và không có ước số trong phạm vi từ 2 đến phần nguyên căn bậc 2 của
N thì N là số nguyên tố
Mô tả
thuật
toán
bằng
liệt kê
Bước 1: Nhập số nguyên dương N
Bước 2: Nếu N=1 thì thông báo N không nguyên tố rồi kết thúc
Bước 3: Nếu N<4 thì thông báo N là nguyên tố rồi kết thúc
Bước 4; i <-2;
Bước 5 Nếu i> thì thông báo N là số nguyên tố rồi kết thúc
Bước 6 Nếu N chia hết cho I thì thông báo N không nguyên tố rồi kết thúc
Bước 7 i<- i+1 rồi qua lại bước 5
Mô tả
thuật
toán
bằng
Sơ đồ
khối

minh
họa
bằng
chương
trình
Pascal
program bt;
uses crt;

var N,i:integer; kt:boolean ;
begin
clrscr;
write('nhap N');readln(n);
if n=1 then write('N khong la so
nguyen to')
else
if n<4 then write('N la so nguyen
to')
else
begin
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then kt:=true;
if kt then write ('N khong la so
nguyen to')
else write('N la so nguyen to');
end;
readln;
end.
Ví dụ
a) N= 29 phần nguyên ( =5) b) N =45 ( =6)
Mô phỏng theo ví dụ
i 2 3 4 5 6 i
N/i 29/2 29/3 29/4 29/5 N/i
[ ]
N
[ ]
N
[ ]
N

Chia hết
không?
Không Không Không Không Chia hết
không?
29 là số nguyên tố 45 không là số nguyên tố
Thuật toán tìm kiếm tuần tự
Xác định
bài toán
Input:Số n và dãy a
1
a
n
và số nguyên k
Output: Chỉ số i có giá trị bằng khóa k
Ý tưởng
Tìm kiếm tuần tự được thực hiện một cách tự nhiên. Lần lượt từ số hạng
thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến khi hoặc gặp
một số hạng bằng khóa hoặc dãy đã được xét hết và không co giá trị nào
bằng khóa. Trong trường hợp thứ 2 dãy A không có số hạng nào bằng khóa
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập N và dãy a
1
a
n
và số nguyên k ( khóa)
Bước 2: i<-1;
Bước 3: Nếu a

i
=k thì thông báo chỉ số i rồi kết thúc
Bước 4 i=i+1
Bước 5 Nếu i>N thì thông báo dãy A không có số hạng nào có giá trị bằng k rồi kết
thúc
Bước 6 Quay lại bước 3
Mô tả
thuật toán
bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a:array[1 100] of integer;
n,i, max,k,m:integer;
kt:boolean;
begin
clrscr;
write('nhap n'); readln(n);
for i:=1 to n do
begin
write('a[',i,'] =');
readln(a[i]);
end;
write('nhap khoa k');
readln(k);

for i:=1 to n do
if a[i]=k then
begin
kt:=true ;
m:=i;
end;
if kt then write('chi so i la ',m)
else
write('khong co gia tri bang
khoa k');
readln;
end.
Ví dụ K=2 và N=10 k=6 và N=8
Mô phỏng theo ví dụ
A 5 7 1 4 2 9 8 9 6 5 A 5 7 1 4 2
i 1 2 3 4 5 - - - - - i 1 2 3 4 5
Với i=5 thì a5=2 Với mọi i từ 1 đến 8 không có a
có giá trị bằng 6
Thuật toán tìm kiếm nhị phân ( Binary Search)
Xác định
bài toán
Input:Số n và dãy a
1
a
n
và số nguyên k ( Dãy đã sắp tăng)
Output: Chỉ số i có giá trị bằng khóa k
Ý tưởng
Dãy A đã sắp tăng, ta tìm cách thu hẹp nhanh phạm vi tìm kiếm sau mỗi lần
so sánh với số hạng được chọn. Để thực hiện điều này, ta chọn số hạng a

giua ở “giữa dãy” để so sánh với k, trong đó giua=
Khi đó chỉ xảy ra một trong ba trường hợp sau:
-Nếu a giua=k thì Giua là chỉ số cần tìm và kết thúc việc tìm kiếm
Nếu a giua>k thì việc tìm kiếm thuộc khoảng từ a1 đến a giua-1
Nếu a giua<k thì việc tìm kiếm thuộc khoảng từ a giua+1 đến cuối dãy
Quá trình trên sẽ lặp lại một số lần cho đến khi tìm thấy giá trị bằng k hoặc
không
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập N và dãy a
1
a
n
và số nguyên k ( khóa) ( dạy a đã sắp tăng)
Bước 2: Dau<-1, Cuoi<- N;
Bước 3: giua<- ;
Bước 4: Nếu a

giua=k thì thông báo chỉ số Giua rồi kết thúc;
Bước 5: a giua>k thì đặt cuoi=giua+1, rồi chuyển đến bước 7;
Bước 6: Dau<- Giua+1;
Bước 7: Nếu Dau>Cuoi thì thông báo dãy A không có số hạng nào có giá
trị bằng k rồi kết thúc;
Bước 8 Quay lại bước 3.







+
2
1n






+
2
CuoiDau
Mô tả
thuật toán
bằng Sơ
đồ khối
minh họa
bằng
chương
trình
Pascal
minh họa
bằng
chương
trình
Pascal
program bt;
uses crt;

var a: array[1 100] of integer; i, n,k,dau,giua,cuoi: integer;
begin
clrscr;
write('nhap n'); readln(n);
for i:=1 to n do
begin
write('a[',i,'] =');
readln(a[i]);
end;
write('nhap khoa k'); readln(k);
dau:=1;
cuoi:=n;
repeat
giua:=(dau+cuoi)div 2;
if a[giua]<k then dau:=giua+1
else
if a[giua]>k then
cuoi:=giua-1
else
cuoi:= -1;
until dau>cuoi;
if cuoi=-1 then write(‘ giua la’, giua) else write('khong co gia tri bang khoa
k');
readln;
end.
Ví dụ K=21, N=10
Mô phỏng theo ví dụ
1 2 3 4 5 6 7 8 9
2 4 5 6 9 21 22 30 31
Dau 1 6 6

Cuoi 10 10 7
Giua 5 8 6
A giua 9 30 21
Lần duyệt 1 2 3
Ở lần duyệt thứ 3 a giua=21=k tại i=giua=6
Ví dụ K=25, N=10
Mô phỏng theo ví dụ
1 2 3 4 5 6 7 8 9
2 4 5 6 9 21 22 30 31
1 6 6 7 8
10 10 7 7 7
5 8 6 7
giua 9 30 21 22
Lần duyệt 1 2 3 4 5
Ở lần duyệt thứ 5 Dau> Cuoi kết luận không có số hạng =k
Thuật toán sắp xếp tráo đổi ( Exchange Sort) (Sắp xếp nổi bọt ( Bubble Sort)
Xác
định
bài
toán
Input:Số n và dãy a
1
a
n

Output: Dãy A được sắp xếp lại thành dãy tăng ( không giảm)
Ý
tưởng
Với mỗi cặp số hạng đứng liền kề trong dãy, nếu số trước lớn hơn số sau ta
đổi chỗ chúng cho nhau, việc đó được lặp lại cho đến khi không có sự đổi chỗ

nào xảy ra nữa.
Sau mỗi lần đổi chỗ giá trị lớn nhất của dãy chuyển dần về cuối dãy, và tiếp
đến giá trị lớn thứ hai chuyển về gần cuối dãy cứ thế giống bọt nước nổi từ
đáy lên mặt nước gọi là sắp xếp nổi bọt
Mô tả
thuật
toán
bằng
liệt kê
Bước 1: Nhập N và dãy a
1
a
n
Bước 2: M<-N
Bước 3: Nếu M<2 thì đưa ra dãy A đã được sắp xếp rồi kết thúc
Bước 4; M<-M-1; i<-0;
Bước 5 i<-i+1;
Bước 6 Nếu i>M thì quay lại bước 3
Bước 7 Nếu a
i
>a
i+1
thì tráo đổi a
i
và a
i+1
cho nhau
Bước 8 Quay lại bước 5
Mô tả
thuật

toán
bằng
Sơ đồ
khối

minh
họa
bằng
chương
trình
Pascal
program bt;
uses crt;
var a:array[1 100] of integer;
n,i, tam,j,m:integer;
kt:boolean;
begin
clrscr;
write('nhap n'); readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
for i:=1 to n do
for j:=n downto 1+1 do
If a[ j ] < a[ j-1] Then
Begin
tam :=a[ j ];
a[ j ] := a[j-1];
a[ j-1] := tam;

End;
for i:=1 to n do
write(a[ i ]:5);
readln;
end.
Ví dụ a) N= 10 dãy A= 6, 1, 5, 3, 7, 8, 10, 7, 12, 4

phỏng
theo ví
dụ
6 1 5 3 7 8 10 7 12 4 1 3 5 6 7 7 4 8 10 12
1 6 5 3 7 8 10 7 12 4 lần 4 1 3 5 6 7 4 7 8 10 12
Lần 1 1 5 6 3 7 8 10 7 12 4
1 5 3 6 7 8 10 7 12 4 lần 5 1 3 5 6 7 4 7 8 10 12
1 5 3 6 7 8 7 10 4 12 1 3 5 6 4 7 7 8 10 12
1 5 3 6 7 8 7 10 4 12
1 5 3 6 7 8 7 10 4 12 lần 6 1 3 5 6 4 7 7 8 10 12
1 3 5 6 7 8 7 10 4 12 1 3 5 4 6 7 7 8 10 12
Lần 2 1 3 5 6 7 7 8 10 4 12
1 3 5 6 7 7 8 4 10 12 lần 7 1 3 5 4 6 7 7 8 10 12
1 3 4 5 6 7 7 8 10 12
1 3 5 6 7 7 8 4 10 12 lần 8 1 3 4 5 6 7 7 8 10 12
Lần 3 1 3 5 6 7 7 4 8 10 12 lần 9 1 3 4 5 6 7 7 8 10 12
Lần 10 1 3 4 5 6 7 7 8 10 12
Thuật toán tìm ươc chung của hai số ( dạng 1)
Xác định
bài toán
Input: nhập hai số a,b
Output: ucln của hai số
Ý tưởng

Ý tưởng của thuật tốn Euclide l UCLN của 2 số a,b cũng l UCLN của 2 số
b v a mod b, vậy ta sẽ đổi a l b, b l a mod b cho đến khi b bằng 0. Khi đĩ
UCLN l a.
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập hai số a và b
Bước 2: du<-a chia b
Bước 3: Nếu b = 0 chuyển qua bước 5
Bước 4 Nếu b<>0 thì a<-b; b<- du quay lại bước 2
Bước 5 đưa ra uớc chung lớn nhất của hai số và kết thúc
Mô tả
thuật toán
bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a,b,du:integer;
begin
clrscr;
write('nhap so
a');readln(a);
write('nhap so
b');readln(b);

repeat
du:=a mod b;
a:=b;
b:=du;
until b=0;
write(a);
readln;
end.
Ví dụ A=125; b=35
Mô phỏng theo ví dụ
Lần
duy
ệt
A B du
1 125 35 20
2 35 20 15
3 20 15 5
4 15 5 0
5 5 0
Khi b bằng 0 UCLN là giá trị của a lúc đó
Thuật toán tìm ươc chung của hai số ( dạng 2)
Xác định
bài toán
Input: nhập hai số a,b
Output: ucln của hai số
Ý tưởng
Nếu a=b thì gi trị chung đó l UCLN của a v b
Nếu a<b thì UCLN(a,b) = UCLN(a, a-b)
Nếu a>b thì UCLN(a,b)=UCLN(a-b,b)
Mô tả

thuật toán
bằng cách
liệt kê
Bước 1: Nhập hai số a và b;
Bước 2: Nếu a=b thì lấy giá trị chung này làm UCLN rồi chuyển đến bước
5;
Bước 3: Nếu a>b thì a<-a-b rồi quay lại bước 2;
Bước 4 b<-b-a rồi quay lại bước 2 ;
Bước 5 đưa ra uớc chung lớn nhất của hai số và kết thúc
Mô tả
thuật toán
bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a,b:integer;
begin
clrscr;
write('nhap so a');readln(a);
write('nhap so b');readln(b);
repeat
if a>b then a:=a-b
else
b:=b-a;
until a=b;

write(‘UCLN’,a);
readln;
end.
Ví dụ A=125; b=35
Mô phỏng theo ví dụ
Lần
duyệt
A B
So
sánh
a-<a-b b<-b-a
1 125 35 a>b
125-35
2 90 35 a>b
90-35
3 60 35 a>b
60-35
4 25 35 a<b
35-25
5 25 10 a>b
25-10
6 15 10 a>b
15-10
7 5 10 a<b
10-5
8 5 5 a=b
Khi a=b UCLN là giá trị của a lúc đó là 5
( sử dụng 8 lần duyệt)
Thuật toán tìm ươc chung của hai số ( dạng 3)
Xác định

bài toán
Input: nhập hai số a,b
Output: ucln của hai số
Ý tưởng
UCLN của hai số là hai số đó chia hết cho một số k nào đó trong khoảng
từ 1 đến số thứ nhất ( với k cần tìm l số lớn nhất )
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập hai số a và b;
Bước 2: Nếu k>a thì lấy giá trị k này làm UCLN rồi chuyển đến bước 6;
Bước 3: k<-k+1 ;
Bước 4: nếu a và b cùng chia hết cho k UCLN<-k quay lại bước 2 ;
Bước 5: a và b không chia hết cho k quay lại bước 2;
Bước 6 đưa ra uớc chung lớn nhất của hai số là k và kết thúc.
Mô tả
thuật toán
bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a,b,k,UCLN:integer;
begin
clrscr;

write('nhap so a');readln(a);
write('nhap so b');readln(b);
repeat
k:=k+1;
if (a mod k=0) and (b
mod k=0) then UCLN:=k;
until k>a;
write(‘uoc chung lon nhat ’,
UCLN);
readln;
end.
Ví dụ A=125; b= 35
Mô phỏng theo ví dụ
Lần
duyệt
A B
k A và b
chia hết
k
1 125 35
1 Hết
2 125 35
2 không
3 125 35
3 không
4 125 35
4 không
5 125 35
5 Hết
… … ….


125
125 không
126
126 không
Khi k=5 UCLN là giá trị của k lúc đó là 5
( sử dụng 126 lần duyệt)
Thuật toán tìm BCNN của hai số ( dạng 1)
Xác định
bài toán
Input: nhập hai số a,b
Output: BCNN của hai số
Ý tưởng Bội chung nhỏ nhất của hai số bằng tích của a và b chia cho UCLN của hai
số đó. Từ đó muốn tìm BCNN của hai số ta cần tìm UCLN trước.
Thuật tốn ny l viết tiếp thuật tốn tìm UCLN chỉ khc l cần phải gn a v b
bằng một giá trị khác để thực hiện tính toán sau này vì khi tính tốn UCLN
gi trị a v b lc đó đ thay đổi
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập hai số a và b gán M<-a; N<-b;
Bước 2: du<-a chia b
Bước 3: Nếu b = 0 chuyển qua bước 5
Bước 4 Nếu b<>0 thì a<-b; b<- du quay lại bước 2
Bước 5 đưa ra uớc chung lớn nhất (UCLN) của hai số
Bước 6: BC<-(M*N)/ UCLN
Bước 7: xuất BCNN và kết thúc
Mô tả
thuật toán

bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a,b,du,M,N,bc:integer;
begin
clrscr;
write('nhap so a');readln(a);
write('nhap so b');readln(b);

repeat
du:=a mod b;
a:=b;
b:=du;
until b=0;
Bc:=(M*N) div a
Write (BC);
readln;
end.
Ví dụ A=125; b=35 ; gán M cho a và N cho b
Mô phỏng theo ví dụ
Lần
duy
ệt
A B du

1 125 35 20
2 35 20 15
3 20 15 5
4 15 5 0
5 5 0
Khi b bằng 0 UCLN là giá trị của a lúc đó và
BC=(M*N)/a=875
Thuật toán tìm Bội chung nhỏ nhất của hai số ( dạng 2)
Xác định
bài toán
Input: nhập hai số a,b
Output: BCNN của hai số
Ý tưởng BCNN của hai số là một số k nào đó chia hết cho hai số đ cho trong lần gặp
đầu tiên trong khoảng từ 1 đến vô cùng.
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập hai số a và b;
Bước 2: k<-k+1
Bước 3: Nếu k không chia hết cho a và b thì chuyển đến bước 2
Bước 4: xuất k là BCNN và kết thúc.
Mô tả
thuật toán
bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình

Pascal
program bt;
uses crt;
var a,b,k:integer;
begin
clrscr;
write('nhap so
a');readln(a);
write('nhap so
b');readln(b);
repeat
k:=k+1;
until (k mod a=0) and (
k mod b=0);
write(‘ Bọi chung nho nhat
la ’, k);
readln;
end.
Ví dụ A=5; b= 15
Mô phỏng theo ví dụ
Lần duyệt A B
k K chia hết
cho a và b
?
1 5 15
1 không
2 5 15
2 không
3 5 15
3 không

4 5 15
4 không
5 5 15
5 không
… … ….

15
15 Hết
Khi k=15 BCNN là giá trị của k lúc đó là 15
( sử dụng 15 lần duyệt)
Thuật toán đếm số thoả mãn điều kiện
Xác định
bài toán
Input:Số n và dãy a
1
a
n
và số nguyên k
Output: Có bao nhiêu giá trị bằng k
Ý tưởng
Tìm kiếm tuần tự được thực hiện một cách tự nhiên. Lần lượt từ số hạng
thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến khi hoặc gặp
một số hạng bằng khóa thực hiện đếm hoặc dãy đã được xét hết và không
co giá trị nào bằng khóa. Trong trường hợp thứ 2 dãy A không có số hạng
nào bằng khóa đếm sẽ bằng không
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập N và dãy a

1
a
n
và số nguyên k ( khóa)
Bước 2: i<-1; dem<-0;
Bước 3: i=i+1
Bước 3: Nếu a
i
=k thì dem<- dem+1 quay lại bước 3
Bước 4 ai<> k quay lại bước 3
Bước 5 Nếu i>N thì đưa giá trị dem rồi kết thúc
Mô tả
thuật toán
bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a:array[1 100] of
integer;
n,i, max,k,m, dem:integer;
begin
clrscr;
write('nhap n'); readln(n);
for i:=1 to n do
begin

write('a[',i,'] =');
readln(a[i]);
end;
write('nhap khoa k');
readln(k);
for i:=1 to n do
if a[ i ]=k then
dem:=dem+1;
write(' co ',dem , ‘so’) ;
readln;
end.
Ví dụ K=2 và N=10
Mô phỏng theo ví dụ
A 5 7 2 4 2 9 8 9 6 5
i 1 2 3 4 5 6 7 8 9 10
dem 0 0 1 1 2 2 2 2 2 2
Dem=2
Thuật toán tính tổng các số thoả mãn điều kiện
Xác định
bài toán
Input:Số n và dãy a
1
a
n
và số nguyên k
Output: Tổng các số có giá trị lớn ( nhỏ ) hơn k
Ý tưởng
Tìm kiếm tuần tự được thực hiện một cách tự nhiên. Lần lượt từ số hạng
thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến khi hoặc gặp
một số hạng bằng khóa thực hiện tính tổng hoặc dãy đã được xét hết và

không co giá trị nào bằng khóa. Trong trường hợp thứ 2 dãy A không có số
hạng nào bằng khóa đếm sẽ bằng không
Mô tả
thuật toán
bằng cách
liệt kê
Bước 1: Nhập N và dãy a
1
a
n
và số nguyên k ( khóa)
Bước 2: i<-1; s<-0;
Bước 3: i=i+1
Bước 3: Nếu a
i
>=k thì S<-S+a[i] quay lại bước 3
Bước 4 ai< k quay lại bước 3
Bước 5 Nếu i>N thì đưa giá trị S rồi kết thúc
Mô tả
thuật toán
bằng Sơ
đồ khối
Và minh
họa bằng
chương
trình
Pascal
program bt;
uses crt;
var a:array[1 100] of

integer;
n,i, max,k,m, dem:integer;
begin
clrscr;
write('nhap n'); readln(n);
for i:=1 to n do
begin
write('a[',i,'] =');
readln(a[i]);
end;
write('nhap khoa k');
readln(k);
for i:=1 to n do
if a[ i ]>=k then S:=S+
a[i];
write(' tong la’, s) ;
readln;
end.
Ví dụ K>=2 và N=10
Mô phỏng theo ví dụ
A 5 7 1 0 3 0 8 0 0 1
i 1 2 3 4 5 6 7 8 9 10
S 5 12 12 12 15 15 23 23 23 23
S=23

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

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