Tin học 11 bài 13 bài tập trang 79

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 13: Kiểu bản ghi 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 13: Kiểu bản ghi

Dữ liệu kiểu bản ghi dùng để mô tả các đối tượng có cùng một số thuộc tính mà các thuộc tính có thể có các kiểu dữ liệu khác nhau.

   - Kiểu bản ghi là một kiểu dữ liệu có cấu trúc. Một bản ghi gồm các thành phần [gọi là trường], khác với các kiểu dữ liệu có cấu trúc khác [mảng và xâu], các trường có thể thuộc các kiểu dữ liệu khác nhau.

   - Kiểu bản ghi cho phép mô tả nhiều đối tượng cỏ cùng một số thuộc tính, có hữu ích cho nhiều bài toán quản lí.

   - Ngôn ngữ lập trình đưa ra quy tắc, cách thức xác định:

      + Tên kiểu bản ghi.

      + Tên các thuộc tính [trường].

      + Kiểu dữ liệu của mỗi trường.

      + Cách khai báo biến.

      + Cách tham chiểu đến trường.

Ví dụ: Ta muốn lưu thông tin về sinh viên. Dữ liệu cần lưu trữ bao gồm:

      + Họ tên [Kiểu String].

      + Giới tính [Kiếu String].

      + Điểm số [Kiểu real].

Để lưu trữ nhiều sinh viên ta có thể sử dụng các cách:

      + Khai báo một mảng bản ghi. Mỗi bản ghi sẽ chứa thông tin về một sinh viên [họ tên,giới tính,điểm số].

      + Khai báo 3 mảng 2 mảng String để lưu tên và giới tính 1 mảng kiểu real để lưu điểm số.

Rõ ràng cách đầu tiên thuật tiện để lưu trữ hơn cách thứ hai khi số thuộc tính lớn.

1. Khai báo

Ta cần khai báo tên kiểu bản ghi, tên các thuộc tính, kiểu dữ liệu của mỗi thuộc tính.

Cú pháp:

Sau khi có kiểu bản ghi, biến kiểu bản ghi có thể được khai báo như sau:

Var :;

Ví dụ:

Để tham chiếu đến thuộc tính nào ta sự dụng dấu.

Ví dụ:

Tham chiếu đến họ tên của Hocsinh A. Ta sử dụng

A.Hoten

Ta có thể coi A.Hoten như một biến string[30] . Ta hoàn toàn có thể thực hiện so sánh ,gán giá trị...

2. Gán giá trị.

Có 2 cách:

+ Dùng lệnh gán trực tiếp: A:=B [A với B là 2 biến bản ghi].

+ Gán giá trị cho từng trường: A.X:=C hoặc nhập từ bàn phím.

Ví dụ:

Một lớp gồm N [N=1000] or [N-1000] and [A[i]0 then writeln['A khong la cap so cong'] else writeln[’A la cap so cong'];

readln,

end.

Khi chạy chương trình, nếu nhập số phần tử cùa dãy N= 5 và các phần tử của dãy theo thứ tự là 2, 4, 6, 8, 10 thì chương trình đưa ra thông báo “A la cap so cong”

Nhưng khi nhập N không thỏa mãn điều kiện đầu bài, chẳng hạn N= -5 thì chương trình đưa ra thông báo “Mời nhập lại!”. Khi đó, ta phải vào lại N, chẳng hạn, N= 5 và nhập tiếp các phần tử của dãy, chẳng hạn: 1, 3, 5, 7, 9 thì kết quả của chương trình: “A la cap so cong’’ 

Còn trong trường hợp các phần tử nhập vào của dãy không thỏa mãn điều kiện A[i] < 1000 và A[i] > -1000: thì ta phải nhập lại các phần tử của dãy cho đến khi chương trình đưa ra thông báo A là cấp số cộng hay không?

Chẳng hạn, ta nhập vào dãy N= 7 phần từ với giá trị các phần tử lần lượt như sau: 2, 5, 7, 8, 9, 4, 7 [ở phần tử thứ tư lúc đầu nhập vào số -1500 thì chương trình yêu cầu nhập lại và đã nhập vào số 8] thì chương trình đưa ra thông báo: " A khong la cap so cong* 

6. Giải bài 6 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, A2 ...AN có giá trị tuyệt đối không lớn hơn 1000. Hãy đưa ra những thông tin sau:

a] Số lượng số chẵn và số lượng số lẻ.

b] Số lượng số nguyên tố trong dãy.

Phương pháp giải

Dựa vào các kiến thức đã học và nội dung chính được trình bày ở bài 13 SGK môn Tin học 11 để phân tích và đưa ra câu trả lời.

Hướng dẫn giải

Đối với với bài toán này thì phần kiểm tra số nguyên dương N [N ≤ 100] và dãy A gồn N số nguyên A1, A2 ... AN có giá trị tuyệt đối không lớn hơn 1000 giống như bài tập 5 đã nêu ờ trên. Chúng ta chỉ cần giải quyết thêm 2 vấn đề nữa, đó là đếm số lượng số chẵn, số lẻ và số lượng số nguyên tố trong dãy.

Chương trình:

progran baitap6_chuong4;

uses crt;

        var                 

             array[1..100] of integer;

             if: boolean;

            N, i„ l: integer; so_nt, so_chan: integer;

                 begin

                       for i := -1000 to 1000 do if i>0 then NT:= false;

                       so_chan:=0; so_nt:=0;

                      {Nhap vao]

                      repeat

                     write['So phan tu cua day A [N0] and [N1000] or [a[i]= 2, chẳng hạn N = 7 thì chương trình đưa ra kết quả: "So fibonaxi thu 7 la 21".

Chương trình trên chỉ chạy được với N=1001 vì số Fi-bô-na-xi thứ 1001 là 65048, số số Fi-bô-na-xi thứ 1002 vượt quá phạm vi của kiểu word.

8. Giải bài 8 trang 79 SGK Tin học 11

Chương trình sau đây thực hiện những gì ?

program BT8;

const NMax = 50;

type Mass = array [1...NMax, O..NMax-1] of real;

var A: Mass;

        i,j N: byte; C: real;

begin

        Write ['Nhap N= ?'];

        readln[N]; for i:= 1 to N do

       for 0 to N-1 do

            begin

                write['A[i,j; readln[A[i,j ] ]

          end,

      for i:= 1 to N do

     for j:= 1 to N-1 do

         begin

                C:= A[i,j];

                A[i , j ] := A[N-i+1, j ]

                A [N-i+1,j] := C;

        end;

           for i:=1 to N do begin

            for j : =1 to N— 1 do write [A [ i, j ] : 5 : 2 , ' '];

            writeln

     end;

End.

Phương pháp giải

Từ nội dung chính được trình bày ở bài 12. Kiểu xâu SGK môn Tin học 11 để phân tích và đưa ra câu trả lời.

Hướng dẫn giải

Chương trình thực hiện việc hoán đổi vị trí dòng thứ i với dòng thứ N-i+j, nghĩa là hoán đổi vị trí dòng đầu tiên với dòng cuối cùng của mảng hai chiều, dòng thứ hai từ trên xuống với dòng thứ hai từ dưới lên,.. Việc hoán đổi vị trí dòng thứ i với dòng đối xứng với nó được thực hiện khi i nhận giá trị từ 1 đến N, làm cho mỗi dòng được hoán đổi vị trí hai lần. Vì vậy, cuối cùng mảng A không thay đổi so với ban đầu.

9. Giải bài 9 trang 80 SGK Tin học 11

Cho mảng hai chiều kích thước n x m 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. 

Phương pháp giải

Dựa vào các kiến thức đã học và nội dung chính được trình bày ở mục 2 trang 69 SGK môn Tin học 11 để phân tích và đưa ra câu trả lời.

Hướng dẫn giải

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

- 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

10. Giải bài 10 trang 80 SGK Tin học 11

Viết chương trình nhập vào từ bàn phím xâu kí tự s có độ dài không quá 100. Hãy cho biết có bao nhiêu chữ số thập phân xuất hiện trong xâu s. Thông báo kết quả ra màn hình.

Phương pháp giải

Từ hiểu biết của bản thân và nội dung chính được trình bày chương 4 SGK môn Tin học 11 để phân tích và đưa ra câu trả lời.

Hướng dẫn giải

Chương trình nhập vào từ bàn phím xâu kí tự s có độ dài không quá 100. Cho biết số chữ số thập phân xuất hiện trong xâu s. Thông báo kết quả ra màn hình.

Chương trình:

program bai_10_chuong_4;

uses crt;

var

          s: string[100];

         i, dem: integer;

         Begin

             clrscr;

                    write['Nhap xau vao:']; readln[s]; dem:= 0;

                    for i:= 1 to length[s] do

                     if ['0'=18

                             then Lop [i]. xeploai:=’A’;

                             if [Lop[i].Toan+Lop[i].Van>=14] and

                             Lop [i]. Toan+Lop [i]. Van =10] and

                             Lop [i]. Toan+Lop [i]. Van >=14

                             then Lop [i]. xeploai:=’C’;

                             if [Lop[i].Toan+Lop[i].Van

Chủ Đề