logo fqa gpt

banner fqa app
Tải APP FQA Hỏi & đáp bài tập
Tải ngay

Câu 9 trang 80 SGK Tin học 11

Admin FQA

30/12/2022, 13:16

Đề 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:

Fqa.vn

Bài giải cùng chuyên mục

Tóm tắt lý thuyết chương 4 Kiểu dữ liệu có cấu trúc được xây dựng từ những kiểu dữ liệu đã có theo quy tắc, khuôn dạng do ngôn ngữ lập trình cung cấp;
Câu 1 trang 79 SGK Tin học 11 Tại sao mảng là kiểu dữ liệu có cấu trúc?
Câu 4 trang 79 SGK Tin học 11 Tham chiếu đến phần tử của mảng bằng cách nào?
Câu 5 trang 79 SGK Tin học 11 Viết chương trình nhập từ bàn phím số nguyên dương N (N ≤100) và dãy A gồm N số nguyên A1...AN có giá trị tuyệt đối lớn hơn 1000. Hãy cho biết dãy A có phải là một cấp số cộng hay không và thông báo kết quả ra mành hình.
Bài 8 trang 79 SGK Tin học 11 Chương trình sau đây thực hiện những gì?
Xem thêm

Đăng nhập hoặc Tạo tài khoản miễn phí!

Điện thoại: 1900636019 Email: info@fqa.vn

LIÊN KẾT

FQA.vn Nền tảng kết nối cộng đồng hỗ trợ giải bài tập học sinh trong khối K12. Sản phẩm được phát triển bởi CÔNG TY TNHH CÔNG NGHỆ GIA ĐÌNH (FTECH CO., LTD)

Copyright © 2024 fqa.vn All Rights Reserved