Câu 9 trang 80 SGK Tin học 11
Đề bài
Cho mảng hai chiều kích thước nxm với các phần tử là những số nguyên. Tìm trong mỗi dòng phần tử lớn nhất rồi đổi chỗ nó với phần tử có chỉ số dòng bằng chỉ số cột.
Chương trình sau đây giải bài toán trên:
program Diag;
var
N, i, j, max, Ind, Vsp: integer;
A: array[1..15, 1..15] of integer;
begin
write('Nhap N:');
readln(N),
for i:= 1 to N do for j:= 1 to N do
begin
write(’A[',i,',',j,']= ');
readln(A[i,j]);
end;
for i:=1 to N do
begin
Max:= A[i,i]; Ind:= 1;
for j:= 2 to N do
if A[i,j] > Max then begin
Max: = A [ i, j ], Ind: = j 'n
end;
Vsp: =A[i, i] ,A[i,i]:=Max; A[i, Ind] :=Vsp;
end;
for i:= 1 to N do
begin
writeln;
for j:= 1 to N do write(A[i,j]:3);
end;
writeln
End.
Hãy sửa lại chương trình trên khi yêu cầu bài toán thay dòng bằng cột.
Lời giải chi tiết
Có thể được chia thành ba đoạn chương trình sau đây:
Đoạn thứ nhất: Hai vòng lặp for-do lồng nhau ở đầu chương trình có nhiệm vụ nhập vào một mảng hai chiều từ bàn phím.
for i:= 1 to N do for j:= 1 to N do
begin
write('A[',i, ’, ',j, ']= ’) ;
readln(A(i,j]);
end;
Đoạn thứ hai: Hai vòng lặp lồng nhau tiếp theo thực hiện việc tìm phần tử lớn nhất trên dòng thứ i hoán đổi vị trí phần tử này với phần tử vừa nằm trên dòng i vừa có chỉ số cột bằng i.
for i:= 1 to N do begin
Max:= A [ i , 1 ] ; Ind:= 1 ,
for j:= 2 to N do
if A[i,j] > Max then
begin
Max:= A[i,j]; Ind:= j;
end;
Vsp:= A[i,i]; A[i,i]:= Max; A[i,Ind]:= Vsp;
end;
Đoạn thứ ba: Hai vòng lặp lồng nhau cuối chương trình in ra mảng kết quả.
for i:=1 to N do
begin
writeln;
for j:= 1 to N do write (A[i , j ] : 3 );
end;
writeln
- Khi chạy chương trình trên, nhập vào N= 3 thì ta có mảng hai chiều 3x3 với 9 phần tử, chẳng hạn theo thứ tự như sau:
A[1,1]=4
A[1,2]=6
A[1,3]= 8
A[2,1]=3
A[2,2]= 7
A[2,3]= 9
A[3,l]= 4
A[3,2]=9
A[3,3]= 5
Ta nhận thấy rằng, ở dòng thứ nhất, phần tử lớn nhất của dòng là A[ 1,3 ]= 8, phần tử có chỉ số dòng bằng chỉ số cột là A[1,1]= 4. Bởi vậy, sau khi tráo đổi thì giá trị của A[1,1]= 8, còn A[1,3]= 4. Vì vậy, dòng thứ nhất sau khi được tráo đổi là: A[1,1]= 8, A[ 1,2]= 6, A[ 1,3]=4.
Tương tự, ở dòng thứ 2 thì phần tử lớn nhất của dòng là A[2,3]= 9 sẽ được tráo đổi với phần tử A[2,2]= 7. Bởi vậy, sau khi tráo đổi thì giá trị của A[2,2]= 9, còn A[2,3]= 7. Vì vậy, dòng thứ hai sau khi được tráo đổi là:
A[2,1 ]= 3, A[2,2]= 9, A[2,3]= 7.
Ở dòng thứ ba sau khi được tráo đổi là: A[3,1]= 4, A[3,2]= 5, A[3,3]=9.
Khi đó, các dòng sau khi được tráo đổi sẽ như sau:
A[1,1]= 8,A[1,2]= 6, A[1,3]= 4
A[2,1]=3,A[2,2]=9,A[2,3]=7
A[3,1]=4,A[3,2]= 5, A[3,3]= 9
Kết quả chương trình có dạng như hình 68 dưới đây:
Muốn sửa lại chương trình để thực hiện đổi chỗ phần tử lớn nhất trên cột với phần tử vừa nằm trên cột đó vừa có chỉ số dòng bằng chỉ số cột thì chì cần hoán đổi vị trí của hai chỉ số trong đoạn thứ hai của chương trình. Điều đó có nghĩa là chỉ đổi i trở thành chỉ số thứ hai, chỉ số thứ hai trở thành chỉ số i trong các câu lệnh có liên quan. Như vậy, chỉ có đoạn thứ hai trong chương trình khác đi và trở thành như sau:
for i:= 1 to N do
begin
Max: = A [ 1, i ] , Ind:= 1;
for j:= 2 to N do
if A[i,j] > Max then begin
Max:- A[j,i];
Ind:= j;
end;
Vsp:= A[i,i]; A[i,i]:= Max; A[Ind,i]:= Vsp;
{Hoac Vsp: =A[ i , i ] ,A [ i , i ] : =A [ Ind, i] ; A [Ind, i ] : =Vsp; }
end;
Do vậy, chương trình tìm trong mỗi cột phần tử lớn nhất rồi đổi chỗ nó với phần tử có chỉ số dòng bằng số cột là như sau:
progran Diag_2; var
N, j, Max, Ind, Vsp: integer;
A: array[1..15, 1...15] of integer;
Begin
write(’Nhap N:’),
readln(N);
for i:= 1 to N do for j:= 1 to N do
begin
write(1 A[’,i,..,j, • ]= ’);
readln(A[i,j]);
end;
:or i:= 1 to N do begin
Max:= A[1,i];
Ind:= 1; for j:= 2 to N do
if A[j,i] > Max then
begin
Max: = A [ j , i ] ,Ind:= j;
end;
Vsp: = A[i,i], A [ i , i ] : = Max; A[Ind,i]:= Vsp;
{Hoac Vsp:=A[i,i];A[i,i]:=A[Ind,i]; A[Ind,i]:=Vsp;}
end;
for i:= 1 to N do
begin
writeln;
for j:= 1 to N do write(A[i,j]:3);
end;
vriteln
readln
End
A[1,1]=4
A[ 1,2]= 3
A[ 1,3]= 6
A[2,1]= 9
A[2,2]= 5
A[2,3]= 7
A[3,1]=5
A[3,2]= 9
A[3,3]=4
Ta nhận thấy rằng, phần tử lớn nhất của cột thứ nhất là 9 và nỏ sẽ tráo đổi với phần tử A[ 1,1]= 4. Tương tự, phần tử lớn nhất cùa cột thứ hai là 9 và nó sẽ tráo đổi với phần tử A[2, 2]= 5. Phần tử lớn nhất cùa cột thứ ba là 7 và nó sẽ tráo đổi với phần tử A[3, 3]= 4
Như vậy, các phần tử cùa mảng A sau khi đã tráo đổi như sau:
9 3 6
4 9 4
5 5 7
Kết quả chương trình như hình 69 dưới đây:
Xemloigiai.com
- Câu 1 trang 79 SGK Tin học 11
- Câu 2 trang 79 SGK Tin học 11
- Câu 3 trang 79 SGK Tin học 11
- Câu 4 trang 79 SGK Tin học 11
- Câu 5 trang 79 SGK Tin học 11
- Bài 6 trang 79 SGK Tin học 11
- Câu 7 trang 79 SGK Tin học 11
- Bài 8 trang 79 SGK Tin học 11
- Câu 10 trang 80 SGK Tin học 11
- Câu 11 trang 80 SGK Tin học 11
SGK Tin học lớp 11
Giải bài tập tin học lớp 11 đầy đủ kiến thức và bài tập thực hành tin học 11 giúp để học tốt môn tin 11
Chương 1: Một số khái niệm về lập trình và ngôn ngữ lập trình
Chương 2: Chương trình đơn giản
- Bài 3: Cấu trúc chương trình
- Bài 4: Một số kiểu dữ liệu chuẩn
- Bài 5: Khai báo biến
- Bài 6: Phép toán, biểu thức, câu lệnh gán
- Bài 7: Các thủ tục chuẩn vào/ra đơn giản
- Bài 8: Soạn thảo, dịch, thực hiện và hiệu chỉnh chương trình
- Bài tập và thực hành 1
Chương 3: Cấu trúc rẽ nhánh và lặp
Chương 4: Kiểu dữ liệu có cấu trúc
- Bài 11: Kiểu mảng
- Bài tập và thực hành 3
- Bài tập và thực hành 4
- Bài 12: Kiểu xâu
- Bài tập và thực hành 5
- Bài 13: Kiểu bản ghi
- Tóm tắt chương IV
Chương 5: Tệp và thao tác với tệp
Chương 6: Chương trình con và lập trình có cấu trúc
Lớp 11 | Các môn học Lớp 11 | Giải bài tập, đề kiểm tra, đề thi Lớp 11 chọn lọc
Danh sách các môn học Lớp 11 được biên soạn theo sách giáo khoa mới của bộ giáo dục đào tạo. Kèm theo lời giải sách bài tập, sách giáo khoa, đề kiểm tra 15 phút, 45 phút (1 tiết), đề thi học kì 1 và học kì 2 năm học 2024 ngắn gọn, chi tiết dễ hiểu.
Toán Học
Vật Lý
Hóa Học
Ngữ Văn
- Soạn văn 11
- SBT Ngữ văn lớp 11
- Văn mẫu 11
- Soạn văn 11 chi tiết
- Soạn văn ngắn gọn lớp 11
- Soạn văn 11 siêu ngắn
Sinh Học
GDCD
Tin Học
Tiếng Anh
Công Nghệ
Lịch Sử & Địa Lý
- Tập bản đồ Địa lí lớp 11
- SBT Địa lí lớp 11
- SGK Địa lí lớp 11
- Tập bản đồ Lịch sử lớp 11
- SBT Lịch sử lớp 11
- SGK Lịch sử lớp 11