Bài tập và thực hành 3 Tin học 11

a. Kiến thức:

Củng cố lại các kiến thức cơ bản về kiểu dữ liệu mảng.

b. Kỹ năng:

– Nâng cao kỹ năng sử dụng một số lệnh kiểu dữ liệu mảng trong lập trình, cụ thể:

+ Khai báo kiểu dữ liệu mảng một chiều;

+ Nhập/xuất dữ liệu cho mảng;

+ Duyệt qua tất cả các phần tử của mảng để xử lí từng phần tử của mảng.

– Cung cấp cho học sinh 3 thuật toán cơ bản và đơn giản thường gặp với dữ liệu kiểu mảng

– Tính tổng và đếm các phần tử thỏa mãn điều kiện nào đó.

– Tìm phần tử max [min] của mảng cùng với vị trí của nó trong mảng

1.2. Nội dung

Hoạt động 1

Tạo mảng A gồn n [n

a] Tìm hiểu và chạy thử chương trình sau đây:

Chú ý: Hàm chuẩn random[n] cho giá trị là số nguyên ngẫu nhiên trong đoạn từ 0 đến n-1, còn thủ tục randomize khởi tạo cơ chế sinh số ngẫu nhiên.

b] Hãy đưa các câu lệnh sau đây vào những vị trí cần thiết nhằm sửa đổi chương trình trong câu a] để có được chương trình đưa ra số các số dương và số các số âm trong mảng.

Hoạt động 2

Viết chương trình tìm phần tử có giá trị lớn nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tử có cùng giá trị lớn nhất thì đưa ra phần tử có chỉ số nhỏ nhất.

a] Hãy tìm hiểu chương trình sau đây:

Kết quả:

b] Chỉnh sửa chương trình trên để đưa ra chỉ số của các phần tử có cùng giá trị lớn nhất.

Kết quả:

Đưa ra chỉ số của các phần tử có cùng giá trị lớn nhất.

2. Luyện tập

Câu 1: Cho khai báo mảng và đoạn chương trình như sau:

Var a : array[0..50] of real;

       k := 0;

       for i := 1 to 50 do

       if a[i] > a[k] Then k := i;

Đoạn chương trình trên thực hiện công việc gì dưới đây?

A. Tìm chỉ số của phần tử lớn nhất trong mảng

B. Tìm chỉ số của phần tử nhỏ nhất trong mảng

C. Tìm phần tử lớn nhất trong mảng

D. Tìm phần tử nhỏ nhất trong mảng

Câu 2: Cho khai báo mảng như sau:

Var m : array[0..10] Of integer ;

Phương án nào dưới đây chỉ phần tử thứ 10 của mảng?

A. a[10]

B. a[9]

C. a[10]

D. a[9]

Câu 3: Thế nào là khai báo biến mảng gián tiếp?

A. Khai báo thông qua kiểu mảng đã có

B. Khai báo mảng xâu kí tự

C. Khai báo mảng của các bản ghi

D. Khai báo mảng hai chiều

Câu 4: Phát biểu nào dưới đây về chỉ số của mảng là phù hợp nhất?

A. Dùng trong vòng lặp với mảng để quản lí kích thước của mảng

B. Dùng để quản lí kích thước của mảng

C. Dùng để truy cập đến một phần tử bất kì trong mảng

D. Dùng trong vòng lặp với mảng

Câu 5: Phương án nào dưới đây là khai báo mảng hợp lệ?

A. mang : ARRAY[0..10] : INTEGER;

B. mang : ARRAY[0..10] OF INTEGER;

C. mang : ARRAY[0..10] : INTEGER;

D. mang : ARRAY[0..10] : INTEGER;

Sau khi học xong bài thực hành số 3 các em sẽ nắm được một số nội dung quan trọng sau đây:

  • Hệ thống lại nội dung kiến thức đã học
  • Tìm kiếm đơn giản trên máy tính.
  • Biết cách sử dụng một số câu lệnh và một số kiểu dữ liệu
  • Chạy thử các chương trình có sẵn đã học ở trên và biết giải một số bài toán tính toán

Mời các em học sinh cùng quý thầy cô giáo tham khảo ngay hướng dẫn Soạn SGK Tin học lớp 11: Bài tập và thực hành 3 ngắn gọn và đầy đủ nhất, được chúng tôi biên soạn và chia sẻ dưới đây.

Soạn SGK Tin Học lớp 11: Bài tập và thực hành 3​​​​​​​

1. Mục đích, yêu cầu

+ Nâng cao kĩ năng sử dụng một số câu lệnh và một số kiểu dữ liệu thông qua việc tìm hiểu, chạy thử các chương trình có sẵn;

+ Biết giải một số bài toán tính toán, tìm kiếm đơn giản trên máy tính.

2. Nội dung

Bài 1 [trang 63 SGK Tin 11]

Tạo mảng A gồn n [n0 then posi:= posi + 1 else if A[i]

Khi chạy chương trình, nhập số phần tử của mảng, ví dụ, n = 10 thì kết quả của chương trình sẽ như hình 35 sau đây:

và kết quả như ở hình 35 thì người sử dụng nhiều khi rất khó nhìn thấy số các số dương và số các số âm. Bời vậy, chúng ta cần đưa vào lệnh in dòng chú thích:

writeln['So cat: so duong la : ',posi: 4] ;

 writeln[ ' So cac so am la : ', neg: 4];

Khi đó, chương trình in ra số các số dương và số các số âm trong mảng A là:

program Sum1b2;

uses crt;

const nmax= 100;

type Myarray- array[1..Nmax] of integer;

var A: MyArray;

n, i: integer;

posi, neg: integer;

Begin

clrscr; randomize;

write [ ’ Nhap n=' ];

readln[n]; {Tao ngau nhien mang gom n so nguyen}

for i:=1 to n do A [ i ]: =random [301 ]-random [ 301] 

for i:=1 to n do write [A[i] : 5] ,{in ra mang vua tao}

writeln;

posi:= 0; neg:= 0; or i:= 1 to n do if A[i]>0 then posi:= posi + 1

else if A[i]' , posi:4]; writeln['So cac so am la : ', neg:4];

readln

End

Khi chạy chương trình, nhập số phần tử của mảng, ví dụ, n= 50 thì chương trình sẽ đưa ra thông báo:

So cac so duong la: 24 So cac so am la: 26

Kết quả của chương trình sẽ như hình 36 dưới đây:

Bài 2: Tìm phần tử có giá trị lớn nhất của mảng và đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Khi có nhiều phần tử có cùng giá trị lớn nhất thì đưa ra phần tử có chỉ số nhỏ nhất.

a] Sau khi nhập chương trình và cho chương trình chạy và nhập số lượng phần tử của dãy số với n= 10 với giá trị các phần tử như sau:

Phần tử thứ nhất= 5;

Phần tử thứ hai= 9;

Phần tử thứ ba= 4;

Phần tử thứ tư= 8;

Phần tử thứ năm= 6;

Phần tử thứ sáu= 2;

Phần tử thứ bảy= 7;

Phần tử thứ tám= 1;

Phần tử thứ chín= 3;

Phần tử thứ mười= 8;

thì chương trình in ra thông báo: 'Chi so: 2 Gia tri: 9 ' nghĩa là phần tử ở chỉ số 2 có giá trị 9 là phần tử lớn nhất mảng. Khi đó, ta có kết quả như hình 37 dưới đây:

Nhưng khi nhập các phần tử vào mảng mà có nhiều phần tử có cùng giá trị lớn nhất thì kết quả của chương trình số in ra chỉ số nhỏ nhất cùa phần tử lớn nhất. Chẳng hạn, nhập vào 9 phần tử với giá trị các phần tử được nhập vào mảng như sau:

Phần tử thứ nhất= 9;

Phần tử thứ hai= 5;

Phần tử thứ ba= 4;

Phần tử thứ tư= 9;

Phần tử thứ năm= 3;

Phần từ thứ sáu= 9;

Phần tử thứ bảy= 9;

Phần tử thứ tám= 6;

Phần tử thứ chín= 7;

Khi đó chương trình sẽ đưa ra thông báo: "Chi so: 1 Gia tri: 9" như hình 38 dưới đây:

Với kết quá của chương trình hiện ra như ở hình 38 thì chỉ số nhỏ nhất của phần tử lớn nhất bằng 9] là 1.

Lưu ý: Trong chương trình chúng ta nên đưa vào khai báo chuẩn uses crt; và lệnh xóa màn hình clrscr; để mỗi lần chạy chương trình các kết quả trước đó bị xóa:

Khi đó chương trình sẽ là:

Program MaxElement;

uses crt;

const Nmax= 100;

type Myarray = array[1ắ.Nmax] of integer;

var i: MyArray;

r, i, j: integer;

Begin

Clrscr ;

wiite['Nhap so luong phan tu cua day so, N= '];

readln[N];

for i:= 1 to N do begin

write['Phan tu thu ', i,'='];

readln[A[i]];

end

j : = 1 ;

for i:= 1 to n do if A[i]>A[j] then j:= i;

write['Chi so: ',j,'Gia tri: ',A[j]: 4];

readln

End.

b] Sau khi chương trình ở câu a] đã chạy và cho kết quả tốt, ta thực hiện lệnh File Save để ghi lại chương trình vào máy tính, chẳng hạn với tên tệp btth3_2a.doc. Để tiến hành giải bài toán ở câu b] thì ta thực hiện lệnh File/Save as để ghi chương trình san; một tệp khác. Ví dụ, với tên btth3_2b.doc. Sau đó, ta chỉnh sửa chương trình để đưa ra chỉ số của các phần tử có cùng giá trị lớn nhất, bằng cách ta đưa vào chương trình biến mảng dem. Chương trình như sau:

Program MaxElement.2 ;

const Nmax= 100;

type Myarray = array[1..Nmax] of integer;

var A: Myarray;

dem: array[1..Nmax] of integer;

n, k, i, j: integer;

Begin

write['Nhap so luong phan tu cua day so, N= ' ];

readln[N]; for ỉ:= 1 to n do

begin

write['Phan tu thu i ,' = '];

readln[A[i]]; end; j : = 1; k: = 0 ;

for i:= 2 to n do if A[i] > A[j] then j:= i; dem[k]:= j;

for i:= 1 to n do if a[i] = a[j] then

begin

k: = k + 1 , dem[k]:= i;

end;

writeln['Gia tri lon nhat la: A[j]:4];

 writeln['Chi so ung voi gia tri lon nhat la: ']];

for i:= 1 to k do write['dem[i]];

writeln;

readln;

End

Khi cho chương trình chạy và nhập số lượng phần tử của dãy số với n= 5. Giả sử, giá trị các phần tử được nhập vào như sau:

Phần tử thứ nhất= 4;

Phần tử thứ hai= 7;

Phần tử thứ ba= 9;

Phần tử thứ tư= 5;

Phần tử thứ năm= 9;

Khi đó chương trình sẽ đưa ra thông báo: 

Gia tri lon nhat la: 9 Chi so ung voi gia tri lon nhat la:

3 5

Kết quả của chương trình như hình 39 dưới đây:

Loigiaihay.com

Video liên quan

Chủ Đề