1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Một số biện pháp giải các dạng bài tập về sử dụng biến mảng trong pasal

25 169 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 1,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓAPHÒNG GIÁO DỤC VÀ ĐÀO TẠO THẠCHTHÀNH TRƯỜNG THCS DÂN TỘC NỘI TRÚ SÁNG KIẾN KINH NGHIỆM ĐỀ TÀI “MỘT SỐ BIỆN PHÁP GIẢI CÁC DẠNG BÀI TẬP VỀ SỬ DỤNG BIẾN MẢN

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓAPHÒNG GIÁO DỤC VÀ ĐÀO TẠO THẠCHTHÀNH

TRƯỜNG THCS DÂN TỘC NỘI TRÚ

SÁNG KIẾN KINH NGHIỆM

ĐỀ TÀI

“MỘT SỐ BIỆN PHÁP GIẢI CÁC DẠNG BÀI TẬP VỀ SỬ DỤNG

BIẾN MẢNG TRONG PASCAL”

Người thực hiện: Lê Thị Tân Chức vụ: Giáo viên

Đơn vị công tác: Trường THCS Dân tộc nội trú SKKN thuộc lĩnh mực (môn): Tin học

THANH HOÁ NĂM 2017

Trang 2

MỤC LỤC

1 MỞ ĐẦU 3

1.1 Lý do chọn đề tài 3

1.2 Mục đích nghiên cứu: 3

1.3 Đối tượng nghiên cứu: 3

1.4 Phương pháp nghiên cứu: 3

2 NỘI DUNG 4

2.1 Cơ sở lý luận: 4

2.2 Thực trạng của vấn đề nghiên cứu .4

2.2.1 Thuận lợi: 4

2.2.2 Khó khăn: 4

2.3 Các biện pháp tổ chức thực hiện .5

2.3.1 Những kiến thức cơ bản về dữ liệu kiểu mảng: 5

2.3.2 Giới thiệu tài liệu tham khảo: 5

2.3.3 Phân dạng bài tập: 5

2.3.4 Hướng dẫn giải bài tập cụ thể : 6

2.3.4.1 Kiểm tra phần tử trong mảng một chiều: 6

2.3.4.2 Chèn, xoá phần tử trong mảng, trộn mảng sao cho mảng vẫn giữ được thứ tự tăng hoặc giảm. 8

2.3.4.3 Chuyên đề về dãy con 12

2.3.4.4 Tìm phần tử lớn nhất, nhỏ nhất của mảng hai chiều 15

2.3.4.5 Tìm phần tử lớn nhất, nhỏ nhất của mỗi dòng, mỗi cột và phần tử yên ngựa của mảng hai chiều 17

2.3.4.6 Sắp xếp mảng hai chiều 19

2.4 Hiệu quả cách làm: 21

3 KẾT LUẬN VÀ KIẾN NGHỊ 22

3.1 Bài học kinh nghiệm : 22

3.2 Kiến nghị, đề xuất : 22

3.3 Tài liệu tham khảo 22

Trang 3

1 MỞ ĐẦU

1.1 Lý do chọn đề tài

Cuộc cách mạng công nghiệp lần thứ tư (công nghiệp 4.0) với sự xuất hiệncủa robot có trí tuệ nhân tạo đã tác động mạnh mẽ trên nhiều lĩnh vực như Y tế,Văn hoá, Kinh tế, Nông nghiệp và trong đó có Giáo dục Đảng và Nhà nước đãxác định được tầm quan trọng của CNTT và các ứng dụng CNTT trong việc đào tạonguồn nhân lực đáp ứng yêu cầu CNH, HĐH, mở cửa và hội nhập, hướng tới nềnkinh tế tri thức của nước ta nói riêng và thế giới nói chung Vì vậy môn Tin họcđược đưa vào nhà trường THCS là môn tự chọn, môn đặc thù

Ở huyện Thạch Thành môn Tin học mới chỉ dừng lại ở việc dạy cho các emnhững kiến thức, kỹ năng cơ bản, mà chưa tổ chức thi HSG, nên các trường THCSchưa bồi dưỡng học sinh giỏi bộ môn này

Năm học 2015- 2016 Sở GD và ĐT tổ chức cuộc thi “Tài năng tin học trẻ”,

toàn tỉnh lần thứ XIX, nhưng huyện Thạch Thành chúng tôi mới tham dự lần đầu

tiên, trường tôi có 3 học sinh dự thi và có một học sinh đạt giải ba Sau đợt bồi

dưỡng chọn học sinh giỏi này, đối với bản bản thân tôi là một giáo viên tôi thấymình có điều kiện cọ sát và nghiên cứu sâu hơn về phương pháp giải các bài tậppascal Còn đối với học sinh, các em cũng có điều kiện thể hiện năng lực của bảnthân mình, hơn nữa các em thêm yêu thích môn học hơn Để học sinh đạt được kếtquả cao trong các kỳ thi học sinh giỏi, tôi nhận thấy việc phát hiện nhân tố là quantrọng nhưng quá trình bồi dưỡng các em còn quan trọng hơn nhiều vì sự ôn luyện là

cả một quá trình nỗ lực của cả cô và trò

Từ thực tế bồi dưỡng tập huấn học sinh giỏi tôi thấy việc phân dạng, loại bàitập của từng phần là một việc vô cùng quan trọng Có làm được điều này mới cungcấp, trang bị cho các em một hệ thống kiến thức vừa vững chắc vừa cơ bản để từ đóđịnh hướng và hình thành cho các em phương pháp nghiên cứu và tìm hiểu sâu hơnnữa những đơn vị kiến thức mới và khó

Từ những căn cứ nêu trên tôi chọn đề tài “Một số biện pháp giải các dạng bài

tập về sử dụng biến mảng trong Pascal ”.

1.3 Đối tượng nghiên cứu:

- Kiến thức về các dạng bài tập về sử dụng biến mảng trong Pascal

1.4 Phương pháp nghiên cứu:

- Phương pháp kiểm tra khảo sát thực tế: Kiểm tra, khảo sát thực tế học sinhđội tuyển Tin học 8 năm học 2015-2106 để thấy những bất cập mà học sinh đanggặp phải

- Phương pháp thu thập thông tin: Tìm hiểu tài liệu từ các giáo trình, và thamkhảo tài liệu trên mạng Internet

- Phương pháp thống kê, xử lý số liệu

Trang 4

2 NỘI DUNG 2.1 Cơ sở lý luận:

Thực hiện Nghị quyết số 29/NQ-TW ngày 04/11/2013 của Hội nghị Trungương 8 khóa XI về Đổi mới căn bản, toàn diện Giáo dục và Đào tạo đáp ứng yêucầu công nghiệp hóa – hiện đại hóa trong điều kiện kinh tế thị trường định hướng xãhội chủ nghĩa và hội nhập quốc tế Mục đích nhằm nâng cao chất lượngdạy và học, đồng thời để đào tạo, bỗi dưỡng nhân tài cho địaphương, cho đất nước Việc nâng cao chất lượng dạy và học là mụctiêu trọng tâm của ngành giáo dục và đào tạo, trong đó việc bồi

dưỡng học sinh giỏi là nhiệm vụ mũi nhọn (Nghị quyết số 29/NQ-TW Hội nghị

Trung ương 8 khóa XI)

Theo nghị quyết 40/2000/QH10, Chỉ thị 29/CT của Trung Ương Đảng và chỉthị 14/2001/CT-TTG ngày 9/12/2000 về việc đổi mới chương trình giáo dục phổthông: Nội dung chương trình là tích cực áp dụng một cách sáng tạo các phươngpháp tiên tiến, hiện đại, ứng dụng CNTT vào dạy, học và đưa CNTT vào nhà

trường.(Nghị quyết 40/2000/QH10, Chỉ thị 29/CT của Trung Ương Đảng và chỉ thị

Đa phần học sinh ngoan ngoãn, chăm chỉ, có quyết tâm cao

Được sự quan tâm, giúp đỡ, động viên, tạo điều kiện của Ban giám hiệu và cácgiáo viên bộ môn khác

Thời gian thi thường được tổ chức vào cuối tháng 6, khi các cuộc thi khác các

em cũng đã hoàn thành, vì vậy cũng thu hút được một số ít học sinh tham gia và sau

đó các em cũng rất hứng thú

2.2.2 Khó khăn:

- Do PGD chưa tổ chức thi HSG các cấp nên học sinh chưa được cọ sát, giáoviên chưa có kinh nghiệm và không có điều kiện để học hỏi lẫn nhau về việc bồidưỡng học sinh giỏi

- Các bậc phụ huynh cho rằng môn Tin không cần thiết sợ học môn này con sẽ

sa đà vào điện tử, sợ mất nhiều thời gian của con nên ít động viên con tham dự,

- Phần kiến thức để dự thi tất cả tập trung vào lớp 8 phần PASCAL FREE,đây là một chương trình khó mà phần chương trình này thì tất cả các trường THCStrên địa bàn huyện đều cắt đi để thay vào đó là chương trình nghề Tin học

Thời gian bồi dưỡng ít, nên những phần kiến thức cơ bản còn chưa kịp nhần

nhuyễn đến khi đi sâu vào những phần khó như “Chương trình con” sau đó là “dữ liệu kiểu mảng”, “dữ liệu kiểu File” thì các em thường rất mơ hồ và lúng túng.

Ban đầu các em thấy rất khó và có phần chán nản

Với thực trạng trên tôi chọn chủ đề: “Một số biện pháp giải các dạng bài tập

về sử dụng biến mảng trong Pascal ” nhằm bồi dưỡng cho đối tượng học sinh giỏi môn Tin học có thể làm tốt các bài tập phần Mảng một cách chủ động, sáng tạo.

Trang 5

Giúp các em biết phân tích thuật toán từ đó viết được các chương trình có kết quảchính xác và có sự sáng tạo về giải thuật

2.3 Các biện pháp tổ chức thực hiện.

2.3.1 Những kiến thức cơ bản về dữ liệu kiểu mảng:

Trong pascal khi nói về mảng với các bài tập cơ bản thì rất đơn giản, nhưng

khi bồi dưỡng sâu về phần này thì lại rất nặng về tư duy thuật toán, nhất là phần

mảng hai chiều thì còn khó hơn nhiều Bởi vậy nếu các em nắm chắc phần Mảng

thì đến tập hợp (set), bản ghi (record), File các em sẽ thấy nhẹ nhàng hơn nhiều

* Định nghĩa về Mảng: Mảng là môt kiểu dữ liệu có cấu trúc gồm một số hữu hạncác phần tử có cùng kiểu gọi là kiểu cơ bản, có cùng một tên chung Số phần tử củamảng được xác định ngay từ khi định nghĩa hoặc khai báo mảng [1]

- Khi sử dụng biến mảng có thể định nghĩa hoặc khai báo trực tiếp

+ Định nghĩa mảng:

TYPE Kieu_mang _T= ARRAY[kiêu chỉ dẫn] OF Kiểu_phần_tử;

Khi đó khai báo một biến A có kiểu mảng ta có thể khai báo như sau:

VAR A: Kieu_mang _T;

+ Khai báo trực tiếp: VAR A = ARRAY [kiêu_chỉ_dẫn] OF Kiểu_phần_tử;

- Mỗi phần tử của mảng chứa một giá trị và được truy nhập trực tiếp thông quatên mảng cùng với chỉ dẫn truy nhập được để giữa hai dấu ngoặc vuông [ ]

- Cấu trúc mảng thuộc kiểu cấu trúc truy nhập trực tiếp nên thời gian truy nhậpvào một phần tử của mảng không phụ thuộc vào giá trị của chỉ dẫn [2]

* Mảng một chiều: là mảng dùng một chỉ số để xác đinh các phần tử của mảng.VD: VAR M:ARRAY [1 1000] OF REAL;

* Mảng hai chiều: là mảng dùng hai chỉ số để xác đinh các phần tử của mảng.Mảng hai chiều là một bảng số liệu gồm các hàng và các cột, chỉ số đầu để chỉhàng, chỉ số thứ hai để chỉ cột [1]

VD: VAR M:ARRAY [1 1000, 1 1000] OF REAL;

2.3.2 Giới thiệu tài liệu tham khảo:

Để có hiệu quả phần này, giáo viên nên giới thiệu cho học sinh nguồn tài liệutham khảo:

- SGK Tin học quyển 3

- SBT Bài tập Tin học quyển 3

- Giáo trình tin học căn bản – Tác giả :Bùi thế Tâm

- Ngôn ngữ lập trình PASCAL - Tác giả : Quách Tấn Ngọc

- Bài tập Pascal – tác giả Bùi Thế Tâm

2.3.3 Phân dạng bài tập:

Có thể phân dạng các bài tập nâng cao theo chuyên đề (từng mảng kiến thức),

từ dễ đến khó, từ đơn giản đến phức tạp để học sinh có thể chủ động tiếp thu kiếnthức một cách tự tin, từ đó các em có thể tự giải quyết được các bài tập một cáchchủ động sáng tạo.Có thể phân thành các chuyên đề như sau:

Chuyên đề 1: Kiểm tra phần tử trong mảng một chiều

Chuyên đề 2: Xoá, chèn các phần tử, trộn mảng sao cho mảng vẫn giữ nguyênthứ tự mà không phải sắp xếp lại

Chuyên đề 3 Chuyên đề về dãy con

Chuyên đề 4: Tìm phần tử lớn nhất, nhỏ nhất của mảng hai chiều.

Trang 6

Chuyên đề 5: Tìm phần tử lớn nhất, nhỏ nhất của mỗi dòng, mỗi cột và phần

tử yên ngựa của mảng hai chiều

Chuyên đề 6: Sắp xếp mảng hai chiều

2.3.4 Hướng dẫn giải bài tập cụ thể :

một chiều:

* Phương pháp:

- Nhập vào phần tử x, sử dụng vòng lặp lần lượt so sánh phần tử x với các phần

tử trong mảng, trong quá trình so sánh nếu thấy x=a[i] thì đưa ra thông báo

+ Hướng dẫn học sinh xây dựng hàm kiểm tra phần tử x trong mảng A

Hàm kiểm tra có thế viết như sau:

Function ktra(x,n:integer;A:mang ): boolean;

Var i:byte; KT:Boolean;

Ví dụ 1: Nhập vào 1 mảng A, sắp xếp theo thứ tự tăng dần Nhập thêm vào 1 phần

tử x, sử dụng phương pháp tìm kiếm nhị phân hãy kiểm tra xem x có trong mảng Ahay không? [4]

Chương trình được viết như sau:

writeln('Day so sau khi da xap xep la :');

for i:=1 to n do write(b[i]:4,' '); writeln;

write('nhap x='); readln(x); dau:=1; cuoi:=n; t:=false;

Trang 7

while (cuoi>=dau) and (t=false) do

Ví dụ 2 : Nhập vào 2 mảng A, B gồm các số nguyên đại diện cho hai tập hợp.Trong

quá trình nhập phải kiểm tra: Nếu phần tử vừa nhập đã có trong mảng thì không bổxung vào mảng nữa In ra màn hình các phần tử không phải là giao của hai tập hợp

Chương trình được viết như sau :

Program Giao_hai_tap_hop;

uses crt;

type mang= array [1 1000] of integer;

var a,b:mang; i,x,n:byte;

Function ktra(x,n:integer;A:mang ): boolean; {ktra phan tu X co trong tap hop chua}

Var i:byte; KT:Boolean;

Begin Kt:=false;

For i:=1 to n do if x=a[i] then kt:= True; ktra:=Kt;

End;

procedure nhap(n:byte;var A:mang); ; (* Thu tuc nhap phan tu cho tap hop*)

var i,j: byte

Begin

Write('Nhap phan tu thu nhat cua mang ='); readln(x); a[1]:=x; i:=2;

Repeat

Write('X[ ',i,'] ='); readln(x);

for j:=1 to i-1 do if not ktra(x,n,A) then

begin

a[i]:=x; i:=i+1;

end;

Until i>n; n:=i-1;

Write('MANG VUA NHAP LA');

For i:=1 to N do Write(a[i],'; '); Writeln;

Trang 8

For i:=1 to n do

If not ktra(b[i],n,A) then Write(B[i]:6);

End;

BEGIN{chuong trinh chinh }

clrscr; write('nhap so phan tu cua mang la:');readln(n); writeln;

Writeln('NHAP MANG A :');Writeln; nhap(n,a); writeln;

Writeln('NHAP MANG B :');Writeln; Nhap(n,b); writeln;

Write('Nhung phan tu khong phai la giao cua hai tap hop:'); Kgiao(n,A,n,B);readln;END

- Kết quả của chương trình:

trộn mảng sao cho mảng vẫn giữ được thứ tự tăng hoặc giảm

Xoá một phần tử thuộc vị trí k:

- Phương pháp:

+ Nếu mảng chưa sắp xếp thì cần phải sắp xếp lại mảng

+ So sánh x với các giá trị trong mảng, nếu tìm thấy đánh dấu vị trí k

+ Xoá phần tử k bằng cách ghi đè phần tử k+1 lên nó

Ví dụ: Nhập vào một dãy số, sắp xếp dãy theo thứ tự tăng dần

a Xoá các phần tử có giá trị trùng nhau trong dãy

b Nhập thêm số X, kiểm tra xem giá trị X có trong dãy hay không? Nếu có hãyxoá giá trị X sao cho dãy vẫn giữ giá trị tăng dần, in ra màn hình các số còn lạitrong dãy

Chương trình được viết như sau:

program Xoa_phan_tu;

uses crt;

type mang=array[1 100] of integer;

var a: mang; d,k,tg,X,n,i,j:integer;

BEGIN clrscr;

write('nhap vao do dai cua day so: n=');readln(n); Writeln;

Writeln('NHAP VAO CAC GIA TRI CUA DAY SO:');

for i:=1 to n do

Begin

write('a[',i,']=');readln(a[i]); WRITELN;

Trang 9

end; (* sap xep mang *)

Write(' MANG VUA NHAP LA :'); For I:=1 To n do Write( a[i],' ; ');

i:=2; {XOA PHAN TU TRUNG TRONG DAY}

Write('DAY SO SAU KHI XOA PHAN TU TRUNG : ');

For i:=1 to n Do Write(a[i],'; '); Writeln; d:=0;

Write('NHAP SO CAN XOA TRONG DAY SO TREN X='); readln(x);

For i:=1 to n do If x= a[i] then

begin {danh dau vi tri k}

k:=i; d:=1;

end;

for i:=k to n do a[i]:=a[i+1];

If d=0 then Writeln(' Khong tim thay gia tri ',x,'trong day'); Writeln;

Write(' DAY SO SAU KHI XOA PHAN TU ',x,'LA : ');

FOR I:=1 TO n-d do Write(a[i],'; ');

Readln; End

- Kết quả của chương trình:

Chèn một phần tử vào vị trí k:

Trang 10

- Phương pháp:

+ Tìm vị trí cần chèn k

+ Nếu k=n thì chèn vào cuối mảng: A[n+1]:=x;

+ Ngược lại, dời các phần tử từ vị trí k tới n về sau 1vị trí và gán: A[i]=x;

Ví dụ : Viết chương trình chèn thêm 1 số nguyên vào 1 dãy số nguyên đã được

sắp xếp theo thứ tự tăng dần sao cho dãy số bảo toàn được thứ tự sắp xếp của nó.Dãy số, các số hạng, số nguyên cần chèn được nhập từ bàn phím (BT 9.13-[3])

Chương trình được viết như sau:

program CHEN_MANG;

uses crt;

type mang=array[1 100] of integer;

var a,b,c:mang; tg,X,n,i,j,l,k:integer;

write(' Mang vua nhap la : '); for i:=1 to n do write(a[i]:8); writeln;

Write('nhap vao so can chen x='); readln(x);

if x<a[n] then a[n+1]:=x {Chèn vào cuối mảng}

For i:=n downto k do a[i+1]:=a[i]; {doi cac phan tu tu k den n ve sau 1 vi tri}

a[k]:=x {chen x vao vi tri k} ;Writeln;

End; Writeln;

Write('MANG SAU KHI DA CHEN PHAN TU X= ',x,' LA:');

for i:=1 to n+1 do write(a[i]:8);

Readln; End

- Kết quả của chương trình:

Trang 11

Trộn hai mảnglại A, B với nhau để thành mảng C:

Phương pháp

- Dùng 2 chỉ số i,j để duyệt qua các phần tử của 2 mảng A, B và k là chỉ số cho

mảng C

- Trong khi (i<=m) và (j<=n) thì kiểm tra:

+ Nếu A[i]>B[j] thì: C[k]:=A[i]; i:=i+1;

+ Ngược lại: C[k]:=B[j]; j:=j+1;

- Nếu dãy nào hết trước thì đem phần còn lại của dãy kia bổ sung vào cuối dãy C

Ví dụ : Cho 2 mảng số nguyên A, B được sắp xếp theo thứ tự giảm dần Trộn hai

mảng đó lại để có mảng thứ 3 là mảng C sao cho mảng C vẫn có thứ tự giảm dầnngay sau khi trộn (BT 9 Tr175-[1])

Chương trình được viết như sau:

program tron_day_so;

uses crt;

type mang=array[1 100] of integer;

var a,b,c:mang; tg,m,n,i,j,l,k:integer;

write(' Mang vua nhap la : '); for i:=1 to m do write(a[i]:4); writeln;

write('nhap vao so phan tu cua mang B la: n='); readln(n);

Trang 12

for i:=1 to n do write(b[i]:4); writeln; {In mang B}

j:=1; i:=1; k:=0; {Tron 2 mang}

while (i<=m) and (j<=n) do {Khi 2 mang deu chua duyet het}

begin

k:=k+1; {k la chi so cua mang C}

if a[i]>b[j] then {so sanh A[i] và B[j] neu phan tu nao lon hon thi day vao C}

Writeln('MANG SAU KHI DA TRON :');

for i:=1 to k do write(C[i]:4);

Readln; END

- Kết quả của chương trình:

2.3.4.3 Chuyên đề về dãy con

Phương pháp:

Ngày đăng: 21/10/2019, 16:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w