CÁC VÍ DỤ NÂNG CAO VỀ MẢNG
Số trang: 14
Loại file: pdf
Dung lượng: 668.79 KB
Lượt xem: 9
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Tài liệu giảng dạy về lập trình đã được giảng dạy với mục đích cung cấp cho học sinh những kiến thức cơ bản nhất, có tính hệ thống liên quan tới lập trình. Thông qua tài liệu này giúp các bạn hệ thống lại kiến thức. Chúc các bạn thành công
Nội dung trích xuất từ tài liệu:
CÁC VÍ DỤ NÂNG CAO VỀ MẢNG CÁC VÍ DỤ NÂNG CAO VỀ MẢNG Ví dụ 11.5: Nhập một danh sách N (N i, j, N, Dem10 : Integer; Hoten, Loai: Kmang1; Dtoan : Kmang2; St: String[18]; z: Real;Begin Clrscr; Repeat Write(‘ Nhập số lượng học sinh : ‘); Readln(N); Until (N>0) and ( N Readln(Hoten[i]); Write(‘Nhập điểm toán của hs thứ ‘, i , ‘ : ‘); Readln(Dtoan[i]); end;{ sắp xếp giảm theo điểm toán}For i:=1 to N-1 doFor j:=i+1 to N do If Dtoan[i] Hoten[j]:=St; end;{ Phân loại }For i:=1 to N do If Dtoan[i] >= 9 then Loai[i]:=‘Gioi’ else If Dtoan[i] >=7 then Loai[i]:=‘Kha’ else If Dtoan[i]>=5 then Loai[i]:=‘Trung binh’ else Loai[i] :=‘Kem’;Writeln(‘ Danh sách hs đã sắp giảm theo Ðtoán là: ‘);For i:=1 to N do Writeln(Hoten[i]: 18, #32, Dtoan[i]:5:1, #32, Loai[i]) ; { Ðếm số em được điểm 10} Dem10 := 0; For i:=1 to N do if Dtoan[i]=10 then Dem10 :=Dem10 +1; Writeln(‘ Số em được điểm 10 là :’ , Dem10); Readln; End. Chạy Chép tập tin nguồn Trong chương trình, ta sử dụng ba mảng: Hoten, Loai và Dtoan với quyước phần tử thứ i của các mảng này chứa các thông tin về cùng một người:đó là học sinh thứ i trong danh sách. Vì thế, khi sắp xếp mảng Dtoan giảmdần, mỗi khi có sự đổi chỗ Dtoan[i] với Dtoan[j] thì tương ứng cũng phải đổichỗ Hoten[i] với Hoten]j]. Ví dụ 11.6: Nhập các ký tự từ bàn phím, đổi thành chữ thường nếu là chữ hoa, vàlưu vào một mảng, qúa trình kết thúc khi nhập ký tự trắng. Cho biết có baonhiêu ký tự đã nhập, trong đó có bao nhiêu chữ a, b, c, d mỗi loại. PROGRAM VIDU11_6; { Ðếm ký tự a, b, c, d } Var Kytu : Array[1..20] of Char ; N, i, Max : Integer; ch : Char; Dem : Array[‘a’..’d’] of Integer; Begin i:=0; Repeat i:=i+1; Write(‘Nhập ký tự thứ ‘ , i , ‘: ‘); Readln(ch); { đổi ra chữ thường } If ch IN [‘A’..’Z’] then ch:=Chr( Ord(ch) + 32 ); Kytu[i]:= ch;Until ( ch= #32) or (i=20);N:=i;{ Ðếm các chữ a, b, c, d }For ch:=‘a’ to ‘d’ do Dem[ch]:=0;For i:=1 to N do begin ch:=Kytu[i]; If ch IN [‘a’..’d’] then Dem[ch] := Dem[ch]+1; {24} end;Writeln(‘ Số ký tự đã nhập là :’ , N ); For ch:=‘a’ to ‘d’ do writeln(‘ Số chữ ‘, ch, ‘=‘, Dem[ch]); Readln; End. Chạy Chép tập tin nguồn Trong chương trình, câu lệnh ở dòng {24}: If ch IN [‘a’..’d’] then Dem[ch] := Dem[ch]+1;tương đương với lệnh ghép sau: begin If ch =‘a’ then Dem[‘a’] := Dem[‘a’]+1; If ch =‘b’ then Dem[‘b’] := Dem[‘b’]+1; If ch =‘c’ then Dem[‘c’] := Dem[‘c’]+1; If ch =‘d’ then Dem[‘d’] := Dem[‘d’]+1; end; Dùng bốn lệnh này thì dễ hiểu hơn song bài toán sẽ không phát triển đượckhi ta phải đếm nhiều loại ký tự, chẳng hạn như đếm chữ a, đếm chữ b, ...,đếm chữ z. Ví dụ 11.7: Nhập ma trận A cấp NxM, đếm xem mỗi hàng có bao nhiêu số 0, nhữnghàng nào có nhiề? số 0 nhất. Ta khai báo Dem là một mảng gồm N phầ? tử với quy ước Dem[i] lưu sốlượng số 0 của hàng i. Tìm Max là số lớn nhất trong mảng Dem. Nhữnghàng i nào có Dem[i] =Max là hàng có nhiều số không nhất. Dưới đây là chương trình cụ thể : PROGRAM VIDU11_7 ; { Tìm trong ma trận các hàng có nhiều số 0 nhất } Type Kmang= Array[1..10, 1..10] of Real; Var A : Kmang; i, j, N, M : Integer; Dem : Array[1..10] of Integer ; Max : Integer ;Begin Repeat Write(‘Nhập số hàng N, số cột M : ‘); Readln(N, M); Until ( N>0) and ( N0) and (M{ In ma trân A }Writeln(‘ Ma tran A la:’);For i:=1 to N do begin For j:=1 to M do Write(A[i, j]:4:0); Writeln; end;{ Ðếm số 0 trong từng hàng}For i:=1 to N do begin Dem[i]:=0; For j:=1 to M do if A[i, j]=0 then Inc(Dem[i]); Writeln(‘Số số 0 của hàng ‘, i, ‘ là: ‘ , Dem[i]); end;{ Tìm số lớn nhất của mảng Dem }Max:=Dem[1];For i:=1 to N do if Max< Dem[i] then Max:=Dem[i];Writeln(‘ Số 0/hàng nhiều nhất = ‘, Max);{ Tìm các hàng có nhiều số 0 nhất}If Max =0 then writeln(‘ Không hàng nào có số 0 ‘)else For i:=1 to N do if Dem[i]=Max then writeln(‘ Hàng nhiều số 0 nhất là ‘, i:3 );Readln;End.Chạy Chép tập tin nguồn Ví dụ 11.8: Hoán đổi hai hàng h và k của ma trận A Hàng h có dạng : A[h,1], A[h,2], ..., A[h,M] Hàng k có dạng : A[k,1], A[k,2], ..., A[k,M] Việc đổi hàng h và hàng k được quy về việc đổi chỗ từng cặp phần tử:A[h,1] với A[k,1], A[h,2] với A[k,2],..., A[h,M] với A[k,M], tức là đổi chỗA[h,j] và A[k,j] với mọi j=1, 2, ..., M: For j:=1 to M do begin { đổi chỗ A[h,j] với A[k,j] } z:=A[h,j]; A[h,j]:=A[k,j]; A[k,j]:=z; end; Ở đây z là biến trung gian cùng kiểu dữ liệu với các phần tử của ma trậnA.Các bạn hãy viết chương trình cho ví d ...
Nội dung trích xuất từ tài liệu:
CÁC VÍ DỤ NÂNG CAO VỀ MẢNG CÁC VÍ DỤ NÂNG CAO VỀ MẢNG Ví dụ 11.5: Nhập một danh sách N (N i, j, N, Dem10 : Integer; Hoten, Loai: Kmang1; Dtoan : Kmang2; St: String[18]; z: Real;Begin Clrscr; Repeat Write(‘ Nhập số lượng học sinh : ‘); Readln(N); Until (N>0) and ( N Readln(Hoten[i]); Write(‘Nhập điểm toán của hs thứ ‘, i , ‘ : ‘); Readln(Dtoan[i]); end;{ sắp xếp giảm theo điểm toán}For i:=1 to N-1 doFor j:=i+1 to N do If Dtoan[i] Hoten[j]:=St; end;{ Phân loại }For i:=1 to N do If Dtoan[i] >= 9 then Loai[i]:=‘Gioi’ else If Dtoan[i] >=7 then Loai[i]:=‘Kha’ else If Dtoan[i]>=5 then Loai[i]:=‘Trung binh’ else Loai[i] :=‘Kem’;Writeln(‘ Danh sách hs đã sắp giảm theo Ðtoán là: ‘);For i:=1 to N do Writeln(Hoten[i]: 18, #32, Dtoan[i]:5:1, #32, Loai[i]) ; { Ðếm số em được điểm 10} Dem10 := 0; For i:=1 to N do if Dtoan[i]=10 then Dem10 :=Dem10 +1; Writeln(‘ Số em được điểm 10 là :’ , Dem10); Readln; End. Chạy Chép tập tin nguồn Trong chương trình, ta sử dụng ba mảng: Hoten, Loai và Dtoan với quyước phần tử thứ i của các mảng này chứa các thông tin về cùng một người:đó là học sinh thứ i trong danh sách. Vì thế, khi sắp xếp mảng Dtoan giảmdần, mỗi khi có sự đổi chỗ Dtoan[i] với Dtoan[j] thì tương ứng cũng phải đổichỗ Hoten[i] với Hoten]j]. Ví dụ 11.6: Nhập các ký tự từ bàn phím, đổi thành chữ thường nếu là chữ hoa, vàlưu vào một mảng, qúa trình kết thúc khi nhập ký tự trắng. Cho biết có baonhiêu ký tự đã nhập, trong đó có bao nhiêu chữ a, b, c, d mỗi loại. PROGRAM VIDU11_6; { Ðếm ký tự a, b, c, d } Var Kytu : Array[1..20] of Char ; N, i, Max : Integer; ch : Char; Dem : Array[‘a’..’d’] of Integer; Begin i:=0; Repeat i:=i+1; Write(‘Nhập ký tự thứ ‘ , i , ‘: ‘); Readln(ch); { đổi ra chữ thường } If ch IN [‘A’..’Z’] then ch:=Chr( Ord(ch) + 32 ); Kytu[i]:= ch;Until ( ch= #32) or (i=20);N:=i;{ Ðếm các chữ a, b, c, d }For ch:=‘a’ to ‘d’ do Dem[ch]:=0;For i:=1 to N do begin ch:=Kytu[i]; If ch IN [‘a’..’d’] then Dem[ch] := Dem[ch]+1; {24} end;Writeln(‘ Số ký tự đã nhập là :’ , N ); For ch:=‘a’ to ‘d’ do writeln(‘ Số chữ ‘, ch, ‘=‘, Dem[ch]); Readln; End. Chạy Chép tập tin nguồn Trong chương trình, câu lệnh ở dòng {24}: If ch IN [‘a’..’d’] then Dem[ch] := Dem[ch]+1;tương đương với lệnh ghép sau: begin If ch =‘a’ then Dem[‘a’] := Dem[‘a’]+1; If ch =‘b’ then Dem[‘b’] := Dem[‘b’]+1; If ch =‘c’ then Dem[‘c’] := Dem[‘c’]+1; If ch =‘d’ then Dem[‘d’] := Dem[‘d’]+1; end; Dùng bốn lệnh này thì dễ hiểu hơn song bài toán sẽ không phát triển đượckhi ta phải đếm nhiều loại ký tự, chẳng hạn như đếm chữ a, đếm chữ b, ...,đếm chữ z. Ví dụ 11.7: Nhập ma trận A cấp NxM, đếm xem mỗi hàng có bao nhiêu số 0, nhữnghàng nào có nhiề? số 0 nhất. Ta khai báo Dem là một mảng gồm N phầ? tử với quy ước Dem[i] lưu sốlượng số 0 của hàng i. Tìm Max là số lớn nhất trong mảng Dem. Nhữnghàng i nào có Dem[i] =Max là hàng có nhiều số không nhất. Dưới đây là chương trình cụ thể : PROGRAM VIDU11_7 ; { Tìm trong ma trận các hàng có nhiều số 0 nhất } Type Kmang= Array[1..10, 1..10] of Real; Var A : Kmang; i, j, N, M : Integer; Dem : Array[1..10] of Integer ; Max : Integer ;Begin Repeat Write(‘Nhập số hàng N, số cột M : ‘); Readln(N, M); Until ( N>0) and ( N0) and (M{ In ma trân A }Writeln(‘ Ma tran A la:’);For i:=1 to N do begin For j:=1 to M do Write(A[i, j]:4:0); Writeln; end;{ Ðếm số 0 trong từng hàng}For i:=1 to N do begin Dem[i]:=0; For j:=1 to M do if A[i, j]=0 then Inc(Dem[i]); Writeln(‘Số số 0 của hàng ‘, i, ‘ là: ‘ , Dem[i]); end;{ Tìm số lớn nhất của mảng Dem }Max:=Dem[1];For i:=1 to N do if Max< Dem[i] then Max:=Dem[i];Writeln(‘ Số 0/hàng nhiều nhất = ‘, Max);{ Tìm các hàng có nhiều số 0 nhất}If Max =0 then writeln(‘ Không hàng nào có số 0 ‘)else For i:=1 to N do if Dem[i]=Max then writeln(‘ Hàng nhiều số 0 nhất là ‘, i:3 );Readln;End.Chạy Chép tập tin nguồn Ví dụ 11.8: Hoán đổi hai hàng h và k của ma trận A Hàng h có dạng : A[h,1], A[h,2], ..., A[h,M] Hàng k có dạng : A[k,1], A[k,2], ..., A[k,M] Việc đổi hàng h và hàng k được quy về việc đổi chỗ từng cặp phần tử:A[h,1] với A[k,1], A[h,2] với A[k,2],..., A[h,M] với A[k,M], tức là đổi chỗA[h,j] và A[k,j] với mọi j=1, 2, ..., M: For j:=1 to M do begin { đổi chỗ A[h,j] với A[k,j] } z:=A[h,j]; A[h,j]:=A[k,j]; A[k,j]:=z; end; Ở đây z là biến trung gian cùng kiểu dữ liệu với các phần tử của ma trậnA.Các bạn hãy viết chương trình cho ví d ...
Tìm kiếm theo từ khóa liên quan:
tin học văn phòng tin học văn phòng chuyên nghiệp tài liệu tin học văn phòng công nghệ thông tin thủ thuật văn phòngGợi ý tài liệu liên quan:
-
52 trang 430 1 0
-
73 trang 427 2 0
-
Nhập môn Tin học căn bản: Phần 1
106 trang 329 0 0 -
Giáo trình Tin học văn phòng: Phần 2 - Bùi Thế Tâm
65 trang 315 0 0 -
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 313 0 0 -
74 trang 296 0 0
-
96 trang 292 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 289 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 280 0 0 -
Giáo trình Tin học MOS 1: Phần 1
58 trang 276 0 0