Câu 1
program nto;
var x,k,i:integer;
function ucln(a,b:integer):integer;
begin
while a<>b do
if a>b then a:=a-b else b:=b-a;
ucnl:=a;
end;
begin
write( 'nhap vao so x:' );
readln(x);
k:=1;i:=1;
while( (i(x) and (k=1) ) do
begin
k:=ucln(x,i);
i:=i+1;
end;
if k:=1 then write ( ' x nto' ) else write( ' x ko nto' );
readln;
end.
Câu 2
Dãy A có thể tồn tại phần tử có giá trị bằng K, tuy nhiên cũng có thể không tồn tại phần tử nào có giá trị bằng K. Vì vậy output của bài toán có thể là một trong hai trường hợp trên.
Ý tưởng thuật toán:
Lần lượt xét các phần tử thứ i của dãy A bắt đầu từ phần tử đầu tiên. Ta tiến hành kiểm tra phần tử đó có giá trị bằng K không. Nếu A bằng K thì ta kết thúc việc tìm kiếm và đưa ra vị trí i, ngược lại, ta tiếp tục kiểm tra phần tử tiếp theo cho đến hết dãy nếu không có A nào bằng K.
Đoạn chương trình xử lý:
i:=1;
while (A<>K) and (i<=N) do i:=i+1;
if A=K then writeln(‘Vi tri phan tu co gia tri bang ‘,K, ‘ la:’,i)
else writeln(‘Khong co phan tu nao trong day co gia tri bang ‘, K);
+ Một cách tổng quát: Ta có thể khái quát Thuật toán giải bài toán tìm kiếm phần tử đầu tiên của dãy thỏa một điều kiện nào đó như sau:
i:=1;
while (A <chưa thỏa đk tìm kiếm>) and (i<=N) do i:=i+1;
if A <thỏa đk tìm kiếm> then
writeln(‘Vi tri phan tu dau tien cua day A thoa dk tim kiem la: ‘, i)
else write(‘Day A khong co phan tu nao thoa dk tim kiem’);
Ví dụ: Bài toán Tìm số nguyên âm đầu tiên của dãy sẽ có thuật toán như sau:
i:=1;
while (A>=0) and (i<=N) do i:=i+1;
if A<0 then writeln(‘Vi tri phan tu am dau tien cua day la:’,i)
else writeln(‘Day A khong co phan tu co gia tri am’);
Bài toán mở rộng: Tìm phần tử âm nhỏ nhất trong dãy(đây là bài toán kết hợp 2 bài toán tìm phần tử nhỏ nhất và bài toán tìm kiếm)
Chẳng hạn cho dãy A: 2 -1 6 -5 3 -2 thì phần tử âm nhỏ nhất trong dãy là A[4]=-5.
Câu 3