Tải bản đầy đủ (.ppt) (24 trang)

Bai 12 Lop 11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (747.54 KB, 24 trang )


Bµi
12
Tin Học 11

Nhập vào nhiệt độ (trung bình) của mỗi ngày trong tuần. Tính và đ a ra màn
hình nhiệt độ trung bình của tuần và số l ợng ngày có nhiệt độ TB cao hơn
nhiệt trung bình trong tuần?
* Dữ liệu nhập vào (INPUT): t1,t2,t3,t4,t5,t6,t7.
* Dữ cần tính và in ra (OUTPUT): tb, dem.
Hãy xác định
Input, Output và
viết ch ơng trình
giải bài toán trên ?
Bài toán đặt vấn đề:

Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 7 ngay : ‘);
readln(t1,t2,t3,t4,t5,t6,t7);
tb : = (t1+t2+t3+t4+t5+t6+t7)/7;
dem : = 0 ;
if (t1>tb) then dem := dem + 1;
if (t2>tb) then dem := dem + 1;
if (t3>tb) then dem := dem + 1;
if (t4>tb) then dem := dem + 1;


if (t5>tb) then dem := dem + 1;
if (t6>tb) then dem := dem + 1;
if (t7>tb) then dem : = dem + 1;
Writeln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);
Writeln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
Readln;
END.

Quan sát ch ơng trình,
hãy cho biết nếu
muốn tính nhiệt độ
trung bình của N ngày
trong năm (VD:
N=365) thì sẽ gặp khó
khăn gì ?
Khai báo quá lớn
(t1,t2,t3, ,t365) và
ch ơng trình quá
dài (với 365 lệnh
IF) !!!!!
Để khắc phục khó
khăn đó ta sử dụng kiểu
dữ liệu mảng một chiều.

Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu
17 20 18 25 19 12 19
A
1 2 3 4 5 6 7
Trong đó :


Khi tham chiếu đến phần tử thứ i ta viết A[i].
Ví dụ: A[5] = 19.
Tên mảng : A.
Số phần tử của mảng: 7.
Ví dụ:
Kiểu dữ liệu của các phần tử: Kiểu nguyên.
19
1. Khái niệm

2. Khai báo mảng một chiều trong PASCAL
* Cách 1: Khai báo gián tiếp
TYPE <tên kiểu mảng> = array[<chỉ số đầu> <chỉ số cuối>] of <kiểuphần tử>;
Var <ds biến mảng> : <tên kiểu mảng>;
Ví dụ: TYPE nhietdo = array[1 365] of integer;
Var A: nhietdo;
Trong đó :
Chỉ số đầu, chỉ số cuối th ờng là các hằng hoặc biểu thức nguyên;
Chỉ số đầu chỉ số cuối;
Giữa 2 chỉ số là dấu
* Cách 2: Khai báo trực tiếp
Var <Ds biến mảng> : array[<chỉ số đầu> <chỉ số cuối>] of <kiểuphần tử>;
Var A,B : array[1 100] of real;
Ví dụ: Var nhietdo : array[1 365] of integer;

3. Các thao tác xử lí trong mảng một chiều
A
n
1.
Nhập số phần tử của mảng (n).
Write( Nhap vao so ngay:);

Readln(n);
2. Nhập vào giá trị của các phần tử
trong mảng
(
A
[i]).
For i:=1 to n do
Begin
write(nhiet do ngay thu ,i, : );
readln(A[i]);
end;

Các b ớc
Thể hiện bằng
pascal
a. Nhập mảng một chiều
với n = 7
19171921182017
Ví dụ:
Nhập nhiệt độ n ngày.


b. In mảng một chiều
Writeln( Mang vua nhap : );
For i:=1 to n do Write(A[i]:5);

Mang vua nhap:
-
Thông báo
-

In giá trị của các phần tử
17 20 18 21 19 17 19
Kết quả in ra màn hình:
Ví dụ:
In mảng vừa nhập.

* Đếm các phần tử trong mảng thoả mãn điều kiện cho tr ớc
dem :=0;
For i :=1 to n do
IF A[i]>TB then dem:=dem+1;
c. Các thao tác xử lí khác
Ví dụ
:
Đếm số ngày có nhiệt độ cao
hơn nhiệt độ TB của tuần.
TB = 18.7
Dem=0
7654321
i
19171921182017
A[i]
0 1 1 2
3
3 4
20 21 19 19
+1 +1 +1+1

Program vd1;
Uses crt;
Var

A: Array[1 366] of integer;
i,n,dem: integer;
S,TB : real ;
BEGIN
Clrscr;
write( Nhap vao so ngay : ) ;
readln(n) ;
S := 0 ;
For i := 1 to n do
Begin
write( Nhap nhiet do ngay thu ,i, : ) ;
readln(A[i]) ;
S:=S+A[i] ;
End;
TB := S/n ; dem := 0 ;
For i := 1 to n do
If A[i]>TB Then dem := dem+1;
Writeln( Nhiet do trung binh ,n, ngay = ,TB : 6 : 2) ;
Writeln( So ngay co nhiet do cao hon nhiet do TB la: , dem) ;
Readln ;
END.
Khai b
áo mảng 1 chiều
Nhập mảng 1 chiều
Tính tổng
Đếm số phần tử thoả
mãn điều kiện

Nhap vao so ngay :
7

Nhap nhiet do ngay thu 1 :
17
Nhap nhiet do ngay thu 2 :
20
Nhap nhiet do ngay thu 3 :
18
Nhap nhiet do ngay thu 4 :
21
Nhap nhiet do ngay thu 5 :
19
Nhap nhiet do ngay thu 6 :
17
Nhap nhiet do ngay thu 7 :
19
Nhiet do trung binh 7 ngay = 18.70
So ngay co nhiet do cao hon nhiet do TB la: 4
Ch ¬ng tr×nh ch¹y vµ cho kÕt qu¶ nh sau:

Thông th ờng, các thao tác xử lí trong mảng một chiều đều dùng câu lệnh FOR DO.
* Tính tổng các phần tử trong mảng thoả mãn điều kiện cho tr ớc
Ví dụ:

Tính tổng các phần tử trong
mảng chia hết cho 3.
S :=0;
For i :=1 to n do
IF A[i] mod 3 = 0 then S:=S+A[i];
19121825162015
S = 45


Hãy nhớ!
Mảng một chiều là một dãy
hữu hạn các phần tử cùng kiểu.
Khai báo: tên mảng, chỉ số đầu,
chỉ số cuối, kiểu phần tử.

Tham chiếu phần tử mảng:
Tên biến mảng[chỉ số phần tử]
Nhiều thao tác xử lí mảng dùng
cấu trúc lặp FOR TO DO.
15 20 19 25 18 12 16
Var A:ARRAY[1 100] OF integer;
A[5] = 18

Vớ d 1. Tìm phần tử lớn nhất của dãy số nguyên.
Hãy xác định
Input, Output và
nêu thuật toán
tìm Max?
* INPUT: Nhập số nguyên d ơng n (với n

250 và A[i]

500), và dãy n số nguyên d ơng
a
1
,a
2
, ,a
n

.
* OUTPUT: Chỉ số và giá trị của phần tử lớn
nhất trong dóy s ó cho (nu cú
nhiu phn t ln nht ch cn a ra mt
trong s chỳng).
4. Mt s vớ d

Qu¶ nµy
lín nhÊt
Qu¶ nµy
míi lín
nhÊt
å! Qu¶
nµy lín
h¬n
T×m ra
qu¶ lín
nhÊt råi!
thuËt to¸n t×m max
MAX

Program timmax;
Type Dayso= array[1 250] of integer;
Var
A: dayso;
N, i, Max, csmax: integer;
Khai báo
gián tiếp
Hoặc
Var

A: array[1 250] of integer;
N, i, Max, csmax: integer;
Khai báo
trực tiếp

Write(‘ Nhap vao so luong phan tu:’);
Readln(n);
For i:=1 to n do
begin
write(‘ Phan tu thu ’ ,i, ’ = ’);
readln(A[i])
end;
2. Max ← a1 ; i ← 1;
Max:=a[1]; csmax:=1;
For i :=2 to n do
3. NÕu i>N ® a ra MAX
vµ chØ sè i => KÕt thóc;
Nhập N và các phần tử
của mảng A1 An

IF a[i]>max then
begin
max:=a[i];
csmax:=i;
end;
4. NÕu a[i]>max th×
max←a[i],
i ← i+1 => quay l¹i b íc 3.
Writeln(‘gia tri cua phan tu Max:’, Max);
Writeln(‘chi so phan tu Max:’, csmax);

Readln
End.

Program Tim_Max;
Uses crt;
Type dayso = Array[1 250] of integer;
Var
A : dayso ;
i,n,max,csmax : integer;
BEGIN
Clrscr;
write(‘ Nhap vao so phan tu cua day so : ’) ;
readln(n) ;
For i := 1 to n do
Begin
write(‘ Phan tu thu ‘,i,’ = ‘) ;
readln(A[i]) ;
End;
Max := A[1[ ; csmax :=1 ;
For i := 1 to n do
If (A[i]>max) Then
begin
max := a[i];
csmax=i;
end;
Writeln(‘ Gia tri cua phan tu Max : ’,Max) ;
Writeln(‘ Chi so cua phan tu Max : ’, csmax) ;
Readln ;
END.


Nhap vao so phan tu cua day so :
7
Phan tu thu 1 =
15
20
16
25
18
12
19
Gia tri cua phan tu Max : 25
Chi so cua phan tu Max : 4
Ch ¬ng tr×nh ch¹y vµ cho kÕt qu¶ nh sau:
Phan tu thu 2 =
Phan tu thu 3 =
Phan tu thu 4 =
Phan tu thu 5 =
Phan tu thu 6 =
Phan tu thu 7 =

Vớ d 2.
Sp xp dóy s nguyờn bng thut toỏn trỏo i.
INPUT
Nhập số nguyên d ơng n ( n<=250) và dãy nsố
nguyên d ơng A
1
,A
2
, ,A
n

.(A[i]<=500)
OUTPUT:
Dãy số đ ợc sắp xếp theo trình tự không giảm.

Các em hãy cho
biết để giải bài
toán trên, ở lớp 10
chúng ta dùng
thuật toán gì?
Là Thuật toán
tráo đổi kiểu
nổi bọt từ trên
xuống!

3
2
9
7
6
Cho dãy số sau: 3 2 9 7 6
Giả sử:
Mỗi phần tử đ ợc xem nh một bọt n ớc;
Lợt1:

i chạy từ đầu dãy đến vị
trí[cuốidãy-1]

Khia[i]>a[i+1]tứclàbọtn
ớc bên trên nặng hơn bọt
nớc bên dới => bọt nớc

trên chìm xuống và bọt n
ớcbêndớinổilên(tráo đổi
vị trí).

Sau lợt thứ nhất, bọt nớc
có trọng lợng lớn nhất sẽ
chìmxuốngđáy.
Trọng l ợng của bọt n ớc thứ i là giá trị của A[i].
Lợt2:

i chạy từ đầu dãy đến vị
trí [cuối dãy - 2] (bỏ qua
phần tử cuối).

Saulợtthứhaibọtnớccó
trọng lợng lớn thứ hai
nằm sát trên bọt nớc lớn
nhất.


Quá trình duyệt, tráo đổi
đợc lặp đi lặp lại cho đến
khi chỉ còn duyệt hai
phần tử và thu đợc dãy
khônggiảm.

Khai b¸o m¶ng 1 chiÒu
NhËp m¶ng 1 chiÒu
Xö lÝ m¶ng b»ng thuËt
to¸n næi bät

In kÕt qu¶
PROGRAM Sapxep;
Type dayso = Array[1 250] of integer;
Var
i, j , n , t : integer;
A : dayso;
BEGIN
write(‘ Nhap vao so phan tu cua day so : ’);
readln(n);
For i := 1 to n do
Begin
write(‘ Phan tu thu ‘,i,’ = ‘);
readln(A[i]);
end;
For j := n downto 2 do
For i:= 1 to j-1 do
If A[i]>A[i+1] Then
begin
T := A[i];
A[i]:=A[i+1];
A[i+1]:=T;
end;
Writeln(‘ Day so duoc sap xep ’);
For i:=1 to n do Write(A[i]:5);
Readln;
END.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×