Bài 13. Kiểu bản ghi
Chia sẻ bởi Nguyễn Hữu Ngọc |
Ngày 10/05/2019 |
79
Chia sẻ tài liệu: Bài 13. Kiểu bản ghi thuộc Tin học 11
Nội dung tài liệu:
Câu 1: Nêu các cách khai báo kiểu xâu?Lấy ví dụ.
Câu 2 : Nêu các phép toán xử lý xâu đã học?
..
...
...
....................
...
Tổng
6.5
7.0
Phan Th? Th?o
40
8.0
7.0
Lờ Thnh Cụng
02
9.0
8.0
Đặng Văn Âu
01
Kết quả
Tin
Toán
Họ tên
SBD
Ví dụ bài toán đặt vấn đề
Bảng kết quả thi học sinh giỏi
Bảng gồm : 40 đối tượng (record) với 6 thuộc tính (Field)
Yêu cầu: Nhập vào thông tin của từng học sinh, tính tổng Điểm Toán và Tin nếu >=18 thì : "Đạt"
1. 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ó kiểu dữ liệu khác nhau.
2. Khai báo kiểu bản ghi
Type
< tên kiểu bản ghi> = record
: ;
< tên trường 2>:;
........................................................
: ;
end;
Var : ;
Dữ liệu kiểu bản ghi
Type
hoso = record
SBD: byte;
Hten: string[20];
dtoan,dtin,Tong: real;
Ketqua: string[10];
end;
Var LOP: ARRAY[1..40] of hoso;
i,n : integer;
Khai báo kiểu dữ liệu cho các trường (field)
Khai báo biến kiểu bản ghi (record)
...
...
...
...
.........................
...
Tổng
6.5
7.0
Phan Th? Th?o
40
8.0
7.0
Lờ Thnh Cụng
02
9.0
8.0
Đặng Văn Âu
01
Kết quả
đtin
đtoán
Họ tên
SBD
BẢNG KẾT QUẢ THI HỌC SINH GIỎI
VÍ DỤ
THAM CHIẾU TRƯỜNG CỦA BẢN GHI
> Nếu A là biến kiểu bản ghi và X là tên một trường của A,
thì để tham chiếu đến trường X, ta viết: A.X
Ví dụ: để tham đến điểm tin học của một học sinh trong
ví dụ trên ta viết: A.dtin
2. GN GI TR?
Có hai cách để gán trị cho biến bản ghi:
Dùng lệnh gán trực tiếp:
Nếu A và B là hai biến cùng bản ghi cùng kiểu,
thì ta có thể gán trị của B cho A bằng Câu lệnh: A:=B;
Gán trị cho từng trường: có thể thực hiện bằng lệnh gán
hoặc nhập từ bàn phím.
Khi gán trị của B cho A bằng Câu Lệnh A:=B thì các thuộc tính của A sẽ như thế nào so với các thuộc tính của B ?z
3. Các thao tác với bản ghi
a. Nhập thông tin học sinh
Write(‘ Nhap vao so hoc sinh’ );
readln(n);
Các bước:
Thể hiện bằng pascal
- Nhập vào số học sinh
For i:=1 to n do
Begin
writeln(‘ Nhap thong tin cho hoc sinh thu‘,i);
Write(‘ SBD : ‘); readln(LOP[i].SBD);
Write(‘HO TEN : ‘); readln(LOP[i].Hten);
Write(‘ Diem toan : ‘);readln(LOP[i].dtoan);
Write(‘ Diem Tin : ‘);readln(LOP[i].dtin);
end;
- Nhập dữ liệu (các thuộc tính) của từng đối tượng bản ghi
Khi i = 1 ? LOP[1].SBD
* Nhập giá trị lần lượt cho các trường SBD, Họ và tên, đtoán, đtin ở từng bản ghi cho đến bản ghi thứ n.
9.0
8.0
Đặng Văn Âu
01
8.0
7.0
Lờ Thnh Cụng
02
...
...
.........
...
6.5
7.0
Phan Th? Th?o
n
b. Các thao tác xử lí trong bản ghi
Để tính tổng điểm Toán và Tin của từng học Sinh trong lớp.
Dùng câu lệnh gì để tính tổng điểm cho từng bản ghi nhỉ ?
For i:=1 to n do
LOP[i].Tong:= LOP[i].dtoan + LOP[i].dtin;
Để điền chữ "dat" vào cột kết quả cho những học sinh có tổng điểm >=18, ngược lại điền chữ "Khong dat" ?
For i:=1 to n do
IF LOP[i].Tong>=18 then LOP[i].Ketqua:=‘Dat’
else LOP[i].Ketqua:=‘Khong dat’;
c. Ghi dữ liệu kiểu bản ghi
Các bước thực hiện:
Thể hiện bằng pascal
Thông báo xuất ra màn hình
Writeln(‘ BANG KET QUA THI ‘);
For i:=1 to n do
Xuất bảng bảng dữ liệu ra màn hình
Writeln(LOP[i].sbd:5,LOP[i].Hten:20, LOP[i].dtoan:2:1,LOP[i].dtin:2:1,
LOP[i].Tong:2:1,LOP[i].Ketqua:15);
Làm thế nào để viết chương trình hoàn chỉnh để giải bài toán trên nhỉ?
Program vidu;
Uses crt;
Type { phan Khai bao}
Hoso = record
SBD: integer;
Hten: string[30];
dtoan,dtin,Tong:real;
Ketqua: string[10];
end;
Var LOP: ARRAY[1..100] of Hoso;
i,n: integer;
BEGIN
Clrscr; { nhap so luong hoc sinh }
Write(` Nhap vao so hoc sinh trong lop : `);
readln(n);
{ nhap du lieu tung ban ghi}
For i:=1 to n do
Begin
writeln(` Nhap so lieu cho hoc sinh thu `,i);
Write(` SBD : `); readln(LOP[i].SBD);
Write(`Ho Va Ten : `); readln(LOP[i].Hten);
Write(` Diem toan : `);readln(LOP[i].dtoan);
Write(` Diem Tin : `);readln(LOP[i].dtin);
end;
{ Tinh tong cho tung ban ghi }
For i:=1 to n do
LOP[i].Tong := LOP[i].dtoan + LOP[i].dtin;
{ Dien ket qua cho tung ban ghi }
For i:=1 to n do
if LOP[i].Tong>=18 then
LOP[i].Ketqua:=‘Dat’
else LOP[i].Ketqua:=‘Khong dat’;
{ Xuat bang du lieu ra man hinh}
Writeln(‘BANG KET QUA THI‘);
For i:=1 to n do Writeln(LOP[I].sbd:5,LOP[i].Hten:30,
LOP[i].dtoan:5:1,LOP[i].dtin:5:1,
LOP[i].tong:8:1,LOP[i].Ketqua:15);
Readln;
END.
Ghi nhớ
? Gán giá trị cho từng trường của bản ghi hoặc giữa hai biến cùng kiểu.
? Khai báo: tên biến bản ghi, tên và kiểu dữ liệu các trường.
Kính chúc quý thầy cô mạnh khoẻ
và các em học sinh chăm ngoan học giỏi
Câu 2 : Nêu các phép toán xử lý xâu đã học?
..
...
...
....................
...
Tổng
6.5
7.0
Phan Th? Th?o
40
8.0
7.0
Lờ Thnh Cụng
02
9.0
8.0
Đặng Văn Âu
01
Kết quả
Tin
Toán
Họ tên
SBD
Ví dụ bài toán đặt vấn đề
Bảng kết quả thi học sinh giỏi
Bảng gồm : 40 đối tượng (record) với 6 thuộc tính (Field)
Yêu cầu: Nhập vào thông tin của từng học sinh, tính tổng Điểm Toán và Tin nếu >=18 thì : "Đạt"
1. 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ó kiểu dữ liệu khác nhau.
2. Khai báo kiểu bản ghi
Type
< tên kiểu bản ghi> = record
< tên trường 2>:
........................................................
end;
Var
Dữ liệu kiểu bản ghi
Type
hoso = record
SBD: byte;
Hten: string[20];
dtoan,dtin,Tong: real;
Ketqua: string[10];
end;
Var LOP: ARRAY[1..40] of hoso;
i,n : integer;
Khai báo kiểu dữ liệu cho các trường (field)
Khai báo biến kiểu bản ghi (record)
...
...
...
...
.........................
...
Tổng
6.5
7.0
Phan Th? Th?o
40
8.0
7.0
Lờ Thnh Cụng
02
9.0
8.0
Đặng Văn Âu
01
Kết quả
đtin
đtoán
Họ tên
SBD
BẢNG KẾT QUẢ THI HỌC SINH GIỎI
VÍ DỤ
THAM CHIẾU TRƯỜNG CỦA BẢN GHI
> Nếu A là biến kiểu bản ghi và X là tên một trường của A,
thì để tham chiếu đến trường X, ta viết: A.X
Ví dụ: để tham đến điểm tin học của một học sinh trong
ví dụ trên ta viết: A.dtin
2. GN GI TR?
Có hai cách để gán trị cho biến bản ghi:
Dùng lệnh gán trực tiếp:
Nếu A và B là hai biến cùng bản ghi cùng kiểu,
thì ta có thể gán trị của B cho A bằng Câu lệnh: A:=B;
Gán trị cho từng trường: có thể thực hiện bằng lệnh gán
hoặc nhập từ bàn phím.
Khi gán trị của B cho A bằng Câu Lệnh A:=B thì các thuộc tính của A sẽ như thế nào so với các thuộc tính của B ?z
3. Các thao tác với bản ghi
a. Nhập thông tin học sinh
Write(‘ Nhap vao so hoc sinh’ );
readln(n);
Các bước:
Thể hiện bằng pascal
- Nhập vào số học sinh
For i:=1 to n do
Begin
writeln(‘ Nhap thong tin cho hoc sinh thu‘,i);
Write(‘ SBD : ‘); readln(LOP[i].SBD);
Write(‘HO TEN : ‘); readln(LOP[i].Hten);
Write(‘ Diem toan : ‘);readln(LOP[i].dtoan);
Write(‘ Diem Tin : ‘);readln(LOP[i].dtin);
end;
- Nhập dữ liệu (các thuộc tính) của từng đối tượng bản ghi
Khi i = 1 ? LOP[1].SBD
* Nhập giá trị lần lượt cho các trường SBD, Họ và tên, đtoán, đtin ở từng bản ghi cho đến bản ghi thứ n.
9.0
8.0
Đặng Văn Âu
01
8.0
7.0
Lờ Thnh Cụng
02
...
...
.........
...
6.5
7.0
Phan Th? Th?o
n
b. Các thao tác xử lí trong bản ghi
Để tính tổng điểm Toán và Tin của từng học Sinh trong lớp.
Dùng câu lệnh gì để tính tổng điểm cho từng bản ghi nhỉ ?
For i:=1 to n do
LOP[i].Tong:= LOP[i].dtoan + LOP[i].dtin;
Để điền chữ "dat" vào cột kết quả cho những học sinh có tổng điểm >=18, ngược lại điền chữ "Khong dat" ?
For i:=1 to n do
IF LOP[i].Tong>=18 then LOP[i].Ketqua:=‘Dat’
else LOP[i].Ketqua:=‘Khong dat’;
c. Ghi dữ liệu kiểu bản ghi
Các bước thực hiện:
Thể hiện bằng pascal
Thông báo xuất ra màn hình
Writeln(‘ BANG KET QUA THI ‘);
For i:=1 to n do
Xuất bảng bảng dữ liệu ra màn hình
Writeln(LOP[i].sbd:5,LOP[i].Hten:20, LOP[i].dtoan:2:1,LOP[i].dtin:2:1,
LOP[i].Tong:2:1,LOP[i].Ketqua:15);
Làm thế nào để viết chương trình hoàn chỉnh để giải bài toán trên nhỉ?
Program vidu;
Uses crt;
Type { phan Khai bao}
Hoso = record
SBD: integer;
Hten: string[30];
dtoan,dtin,Tong:real;
Ketqua: string[10];
end;
Var LOP: ARRAY[1..100] of Hoso;
i,n: integer;
BEGIN
Clrscr; { nhap so luong hoc sinh }
Write(` Nhap vao so hoc sinh trong lop : `);
readln(n);
{ nhap du lieu tung ban ghi}
For i:=1 to n do
Begin
writeln(` Nhap so lieu cho hoc sinh thu `,i);
Write(` SBD : `); readln(LOP[i].SBD);
Write(`Ho Va Ten : `); readln(LOP[i].Hten);
Write(` Diem toan : `);readln(LOP[i].dtoan);
Write(` Diem Tin : `);readln(LOP[i].dtin);
end;
{ Tinh tong cho tung ban ghi }
For i:=1 to n do
LOP[i].Tong := LOP[i].dtoan + LOP[i].dtin;
{ Dien ket qua cho tung ban ghi }
For i:=1 to n do
if LOP[i].Tong>=18 then
LOP[i].Ketqua:=‘Dat’
else LOP[i].Ketqua:=‘Khong dat’;
{ Xuat bang du lieu ra man hinh}
Writeln(‘BANG KET QUA THI‘);
For i:=1 to n do Writeln(LOP[I].sbd:5,LOP[i].Hten:30,
LOP[i].dtoan:5:1,LOP[i].dtin:5:1,
LOP[i].tong:8:1,LOP[i].Ketqua:15);
Readln;
END.
Ghi nhớ
? Gán giá trị cho từng trường của bản ghi hoặc giữa hai biến cùng kiểu.
? Khai báo: tên biến bản ghi, tên và kiểu dữ liệu các trường.
Kính chúc quý thầy cô mạnh khoẻ
và các em học sinh chăm ngoan học giỏi
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Nguyễn Hữu Ngọc
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)