Giải bài tập SGK Tin học 11 Bài 13: Kiểu bản ghi

Mời các em cùng tham khảo tài liệu giải bài tập bài 13 trang 79 SGK Tin học 11. Kiểu bản ghi được eLib biên soạn và tổng hợp bên dưới đây. Tài liệu cung cấp nội dung các bài tập có phương pháp và hướng dẫn giải chi tiết, đầy đủ sẽ giúp các em ôn tập thật hiệu quả, chúc các em đạt kết quả cao trong các kì thi phía trước.

Giải bài tập SGK Tin học 11 Bài 13: Kiểu bản ghi

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

Tại sao mảng là kiểu dữ liệu có cấu trúc?

Phương pháp giải

Dựa vào các kiến thức đã học và nội dung chính ở mục 1 trang 53 SGK Tin học 11 để phân tích và trả lời.

Hướng dẫn giải

Mảng là kiểu dữ liệu có cấu trúc bởi vì mảng (một chiều, hai chiều hay nhiều chiều) là kiểu có cấu trúc được đề cập tới sớm nhất trong các ngôn ngữ lập trình. Nó được xây dựng từ những kiểu dữ liệu dã có theo quy tắc khuôn dạng do ngôn ngữ lập trình cung cấp. Nó được dùng để chỉ định một nhóm đối tượng cùng một tính chất nào đó. Chẳng hạn, vectơ là một nhóm các số mà mỗi số ta có thể xác định chỉ cần biết chỉ số. Như vậy, để khai báo kiểu mảng phải chỉ ra kiểu dữ liệu chung của các phần tử và kiểu chỉ số.

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

Tại sao phải khai báo kích thước của mảng ?

Phương pháp giải

Từ các kiến thức đã học và nội dung chính ở mục 1a trang 55, 56 SGK Tin học 11 để phân tích và trả lời.

Hướng dẫn giải

Mảng là 1 tập hợp các phần tử được đánh số có thứ tự thường là từ 0 hoặc 1 cho nên khi khai báo mảng ta cần khai báo thêm kích thước để máy có thể cấp phát đủ bộ nhớ chứa số lượng các phần tử.

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

Các phần tử của mảng có thể có những kiểu gì ?

Phương pháp giải

Dựa nội dung chính ở bài 11. Kiểu mảng SGK Tin học 11 để phân tích và trả lời.

Hướng dẫn giải

Kiểu dữ liệu của mảng có thể là những kiểu dữ liệu chuẩn (integer, byte, real,…), kiểu dữ liệu có cấu trúc (string, kiểu bản ghi).

4. Giải bài 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 ?

Phương pháp giải

Dựa các kiến thức đã học và nội dung chính ở bài 11. Kiểu mảng SGK Tin học 11 để phân tích và trả lời.

Hướng dẫn giải

- Tham chiếu đến phần tử của mảng có 2 kiểu: 

* Với mảng 1 chiều: 

- Cách tham chiếu đến mảng: A[i] với i là chỉ số phân tử trong mảng. 

Ví dụ: Vẫn xét mảng 10 20 30 5 6 7 

A[1]=10; A[2]=20; A[3]=30; A[4]=50; A[5]=6; A[7]=7 

- Cách khai báo mảng: Có 2 cách khai báo: 

Khai báo trực tiếp:

Thường thì cách khai báo trực tiếp được dùng nhiều hơn vì nó ngắn gọn. 

var:array[kiểu chỉ số] of

Ví dụ: 

a:array[1..100] of integer; 

b,c:array[1..250] of integer; 

Khai báo gián tiếp: 

type =array[kiểu phần tử] of

var a,b,c

Ví dụ: 

type mang=array[1..100] of integer; 

var a,b,c:mang; 

*Với mảng 2 chiều: 

- Tham chiếu: Vì mảng 2 chiều là bảng nên sẽ cần chỉ số hàng và chỉ số cột: A[i,j] với i là chỉ số hàng, j là chỉ số cột. 

- Khai báo: Tương tự như mảng 1 chiều nhưng thêm chỉ số cột.

5. Giải bài 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.

Phương pháp giải

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

Hướng dẫn giải

Để lập 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 A, A1...AN có giá trị tuyệt đối không lớn hơn 100, thì ta cần phải thực hiện việc kiểm tra xem số N nhập vào (số phần tử của dãy) có thỏa mãn yêu cầu của đầu bài hay không nghĩa là 0 < N≤ 100, nếu không đưa ra thông báo “Mời nhập lại". Còn các phần tử, A1,...AN của mảng cũng phải là những số nguyên và có giá trị tuyệt đối không lớn hơn 100 (A[i] >= -100 và A[i]<=100), nếu không đưa ra thông báo “Mời nhập lại'.

Tiếp đến ta phải kiểm tra dãy A nhập vào có phải là một cấp số cộng hay không nghĩa là các phần tử của dãy A vừa nhập vào có làm thành một cấp số cộng hay không và đưa ra màn hình thông báo kết quả ra màn hình “A là cấp số cộng’ hoặc “A không là cấp số cộng".

Bởi vậy, lấy d= A[2] - A[1]

Khi đó, dãy A là cấp số cộng nếu thỏa mãn điều kiện:

A[i]=A[1] + (i-1)d (hoặc điều kiện A[i] - A[i-1] = d với (1))

Trong chương trình ta dùng một vòng lặp theo biến đếm i để kiểm tra xem mỗi A[i] có thỏa mãn điều kiện nói trên hay không, chỉ cần phát hiện được một phần tử của A không thỏa mẫn là kết luận được dãy A không là cấp số cộng.

Chương trình:

program bai5_chuong4;

uses crt;

         var

        A: array[1..100] of integer;

        d,rt,i, dem: integer;

begin

        clrscr;

       writeln('Nhap mot so lon hon 0 va nho hon 100'); repeat

       write ('Nhap N:');

       readln(N) 

       if (N>=1000) or (N<=0 ) then writeln(’Moi nhap lai !'); until (N>0) and (N<1000); writeln('Nhap cac gia tri cac so hang co tri tuyet doi khong lon hon 1000');

      for i:=1 to n do repeat

      write (' a [', i ,'] = ')

     readln (a [i]) ; if (A[i]>100) or (A[i]<-1000) then write(’Moi nhap lai ');until (A[i]>-1000) and (A[i]<1000); {Kiem tra xem CO la cap so cong khong?} d: = A[2] - A[ 1 ] ; dem:=0;

     for i:= 2 to n do if A[i] - A[i-l]od then dem:= dem + 1; if dem >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 (N<=100), N= *);

              readln(N);

                   until (N>0) and (N<=100);

                   for i:= 1 to N do

            begin

                  {kiem tra cac phan tu cua day khi nhap vao}

                  repeat

                  write('A[',i,']= ');readln(A[i]);

                  if (a[i]>1000) or (a[i]<-1000) then

                  write('Moi nhap lai ");

                  until (a[i]>-1000) and (a[i]<1000); = if A[i] mod 2 =0 then so_chan:= so_chan + 1; if A[i] >1 then

                  begin

                        u: = 2 ;

                       while ((u<=sqrt (A[i])) and (A[i] mod u<>0))) do u: = u + 1; if u>sqrt(A[i]) then so_nt:= so_nt + 1;

                 end,

           end;

           {In ra man hinh}

           writeln('So luong so chan:',so_chan);

           writeln('So luong so le:',N - so_chan);

           writeln(’So luong so nguyen tro:', so_nt);

readln

End.

Khi chạy chương trình, ta lần lượt nhập các phần tử của dãy A:

 Với N = 3 và các phần tử được nhập vào theo thứ tự:

A[1]=5

A[2]=7

A[3]=900

Thì chương trình đưa ra thông báo:

+ So luong so chan: 1

+ So luong so le: 2

+ So luong so nguyen to: 2

- Với N = 5 và các phần tử được nhập vào theo thứ tự:

A[1]=12

A[2]=3 A[3]=5

A[4]=10 A [5]=11

Thì chương trinh đưa ra thông báo:

+ So luong so chan: 2

+ So luong so le: 3

+ So luong so nguyen to: 3

Trong trường hợp số phần tử nhập vào và giá trị các phần tử của dãy A không thỏa mãn điều kiện thì chương trình sẽ có thông báo mời nhập lại. Chẳng hạn, trong các trường hợp sau đây:

A[1] = 12

A[2] = 2000 thì chương trình đưa ra yêu cầu Moi nhap lai A[2]= 800 A[3] = 17

A[4] = -1500 thì chương trình đưa ra yêu cầu Moi nhap lai A[4]= -200 A[5] =31 A[6] = 5 A[7] = 350

Kết quả chương trình đưa ra thông báo:

So luong so chan: 4

So Luong so le: 3

So luong so nguyen to: 3

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

Dãy F là dãy Phi-bo-na-xi nếu:

F= 0, F1 = 1, Fn = Fn-1 + Fn-2 với N ≥ 2

Viết chương trình nhập từ bàn phím số nguyên dương N và đưa ra màn hình số hạng thứ N của dãy Phi-bo-na-xi. Chương trình của bạn thực hiện với giá trị lớn nhất của N là bao nhiêu ?

Phương pháp giải

Từ 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 để trả lời.

Hướng dẫn giải

Ta cần viết chương trình nhập vào từ bàn phím số nguyên dương N và đưa ra màn hình số hạng thứ N của dãy Phi-bô-nan-xi và đưa ra kết luận: với giá trị lớn nhất nào của N thì chương trình thực hiện được ?

Chương trình:

program bai7_chuong4;

uses crt;

var

         N,i: word;

         F,F1,F2: word;

Begin

        clrscr;

        repeat

        writeln('Tim so hang thu N cua day Fibonaxi, Nĩ='));

readln(N);

        if N<=2 then writeln(’Moi nhap lai !');

        until N>2 F1:= 1 F2:= 2 for i:= 3 to N do

        begin

              F:= F1 + F2;

              Fl:= F2;

             F2:= F;

       end;

          writeln('So fibonaxi thu', N: 5, ' la ’, F: 10);

readln;

End.

Khi chạy chương trình, nếu nhập N < 2, chẳng hạn N = 1 thì trên chương trình đưa ra thông báo "Moi nhap lai". Còn khi nhập N >= 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'<=s[i]) and(s[i]<=’9') then dem:=dem+l;

                     Writeln('Trong xau s co '»dem,' chu so thap phan');

           readln;

End.

Khi chạy chương trình, giả sử nhập vào xâu s :'Tin hoc 11 co 6 chuong' thì kết quả chương trình in ra màn hình: 'Trong xau s co 3 chu so thap phan'.

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

Hãy bổ sung thêm chương trình xeploai (ở §13) những lệnh cần thiết để chương trình đưa ra danh sách học sinh xếp loại A.

Phương pháp giải

Từ 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à trả lời.

Hướng dẫn giải

Chương trình xeploai:

program xEp_loai ;

uses crt;

           const max=60;

           type Hocsinh = record

           hoten: string[30];

           ngaysinh: string [10];

           Diachi: string[50];

           Toan, Van: real;

            Xeploai: char;

end;

var

Lop: array[1..max] of hocsinh;

N, i: byte;

Begin

clrscr;

           readln(N)

           write('So luong hoc sinh trong lop N=  ) ;

           readln(N);

           for i:= 1 to N do

                     begin

                             Writeln( 'Nhap so lieu ve hoc sinh thu',i,': ');

                             Write (‘Ho va ten: ‘); readln (lop [i]. hoten);

                             Write (‘ Ngay sinh : ‘); readln (lop [i].ngaysinh);

                             Write (‘ Dia chi : ‘); readln (lop [i].Diachi);

                             Write (‘Diem Toan : ‘); readln (lop [i]. Toan);

                             Write (‘Diem Van : ‘); readln (lop [i]. Van);

                             If Lop [i]. Toan+Lop [i]. Van >=18

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

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

                             Lop [i]. Toan+Lop [i]. Van <18

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

                             if (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<=10) and

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

                   end;

              clrscr;

          writeln (‘Danh sach xep loai hoc sinh trong lop: ‘ );

          for i:=1 to N do

         writeln (Lop[i].Hoten:30,’ – Xep loai : ‘, Lop[i]. Xeploai);

 readln

End.

Để chương trình đưa ra danh sách học sinh xếp loại A, thì chúng ta cần đưa thêm đoạn chương trình sau vào cuối chương trình trên:

writeln(’Danh sach hoc sinh xep loai A trong lop: ');

for i:=1 to N do if Lop[i].Xeploai =’A' then writeln(Lop[i].Hoten:30);

Vì vậy, chương trình đưa ra danh sách học sinh xếp loại A trong lớp như sau:

program xep_loai;

uses crt;

            const max= 60;

            type Hocsinh = record

            hoten: string[30];

           ngay sinh: string [ 10 ] ,ề

           Diachi: string[50];

           Toan, Van: real;

           Xeploai: char;

     end;

      var

              Lop: array[1..max] of hocsinh;

              N,i: byte;

Begin

clrscr;

write('So luong hoc sinh trong lop N=');

readln(N); for i:= 1 to N do

      begin

          writeln('Nhap so lieu ve hoc sinh thu ',i,': ');

          write('Ho va ten: ');

          readln(lop[i].hoten);

          write (’Ngay sinh: ');

          readln (Lop[i] ngaysinh);

          write('Dia chi : ’);

          readln(Lop[i].Diachi) ;

          write('Diem Toan: ');

          readln(Lop[i].Toan) ;

          write('Diem Van : ’);

           readln(Lop[i].Van);

           if Lop[i].Toan+Lop[i].Van>=18 then

           Lop[i].xeploai:='A';

           if (Lop[i].Toan+Lop[i].Van>=14) and Lop[i].Toan+Lop[i].Van<18) then

            Lop[i].Xeploai:='B';

            if (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<=10) then Lop[i] .xeploai: = 'D' ;

      end;

      clrser;

           Writeln(1 Danh sach xep loai hoc sinh trong lop: ');

           for i:= 1 to n do writeln(Lop[i].Hoten: 30, ' -Xep loai:', Lop[i].Xeploai);

           writeIn('Danh sach hoc sinh xep loai A trong lop: '); ior i:= 1 to N do

           if Lop[i].Xeploai ='A' then writeln(Lop[i].Hoten : 30);

readln

End.

  • Tham khảo thêm

Ngày:17/09/2020 Chia sẻ bởi:

CÓ THỂ BẠN QUAN TÂM