CÁC VÍ DỤ NÂNG CAO VỀ MẢNG pot

14 294 0
CÁC VÍ DỤ NÂNG CAO VỀ MẢNG pot

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CÁC DỤ NÂNG CAO VỀ MẢNG dụ 11.5: Nhập một danh sách N (N<50) học sinh gồm họ tên và điểm thi môn toán. Hãy phân loại các học sinh như sau : loại giỏi nếu điểm toán  9, loại khá nếu 7  điểm toán< 9, loại trung bình nếu 5  điểm toán< 7, và loại kém nếu điểm toán< 5. In danh sách lên màn hình, mỗi người trên một dòng, gồm họ tên, điểm toán và phân loại. Yêu cầu danh sách được sắp thứ tự theo trật tự giảm của điểm toán. Ðếm xem có bao nhiêu em có điểm toán bằng 10 ?. PROGRAM VIDU11_5; Uses CRT; Type Kmang1 = Array[1 50] of String[18]; Kmang2 = Array[1 50] of Real; Var 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<51); For i:=1 to N do { nhập danh sách hs } begin Write(‘Nhập họ và tên của hs thứ ‘, i , ‘ : ‘); 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 do For j:=i+1 to N do If Dtoan[i]<Dtoan[j] then begin { hoán đổi Dtoan và họ tên } z:=Dtoan[i]; Dtoan[i]:=Dtoan[j]; Dtoan[j]:=z; St:=Hoten[i]; Hoten[i]:=Hoten[j]; 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 <VD11_5.EXE> Chép tập tin nguồn <VD11_5.PAS> 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. thế, khi sắp xếp mảng Dtoan giảm dần, mỗi khi có sự đổi chỗ Dtoan[i] với Dtoan[j] thì tương ứng cũng phải đổi chỗ Hoten[i] với Hoten]j]. 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ó bao nhiê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 <VD11_6.EXE> Chép tập tin nguồn <VD11_6.PAS> 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 được khi ta phải đếm nhiều loại ký tự, chẳng hạn như đếm chữ a, đếm chữ b, , đếm chữ z. 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ững hà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ững hà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 ( N<11) and ( M>0) and (M<11); For i:=1 to N do For j:=1 to M do begin Write(‘Nhập A[‘, i, ‘,’ , j , ‘]: ‘); Readln(A[i,j]); end; [...]... 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ận A Các bạn hãy viết chương trình cho dụ này ... 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 dụ 11.8: Hoán đổi hai hàng . CÁC VÍ DỤ NÂNG CAO VỀ MẢNG Ví dụ 11.5: Nhập một danh sách N (N<50) học sinh gồm họ tên và điểm thi môn toán. Hãy phân loại các học sinh như sau : loại giỏi. 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. ứng cũng phải đổi chỗ 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

Ngày đăng: 18/06/2014, 14:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan